diff --git a/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация JSON.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация JSON.md index 5133dd3..9201915 100644 --- a/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация JSON.md +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация JSON.md @@ -4,47 +4,11 @@ slug: общие-обмен-данными/сериализация-json --- # Сериализация -## Описание -```bsl -// Преобразует значение в строку JSON при помощи метода глобального контекста ЗаписатьJSON. -// Допускаются не все типы значений, подробности см. в синтакс-помощнике. -// Даты преобразуются в формат ISO (YYYY-MM-DDThh:mm:ssZ). -// -// Параметры: -// Значение - Произвольный -// -// Возвращаемое значение: -// Строка -// -Функция ЗначениеВJSON(Знач Значение) Экспорт -``` -## Пример вызова ```bsl Результат = ОбщегоНазначения.ЗначениеВJSON(Значение); ``` # Десериализация -## Описание -```bsl -// Преобразует строку в формате JSON в значение при помощи метода глобального контекста ПрочитатьJSON. -// См. ограничения в синтакс-помощнике. -// Объекты JSON по умолчанию преобразует в значения типа Соответствие. -// Имена свойств со значением типа Дата необходимо явно указывать, чтобы было выполнено преобразование. -// Ожидаемый формат дат - ISO (YYYY-MM-DDThh:mm:ssZ). -// -// Параметры: -// Строка - Строка - значение в формате JSON. -// ИменаСвойствСоЗначениямиДата - Строка - имя свойства, содержащее значение типа Дата. Допустимо указывать несколько -// свойств через запятую. -// - Массив из Строка -// ПрочитатьВСоответствие - Булево - если Ложь, то объекты JSON будут преобразованы в значение типа Структура. -// -// Возвращаемое значение: -// Произвольный -// -Функция JSONВЗначение(Знач Строка, Знач ИменаСвойствСоЗначениямиДата = Неопределено, Знач ПрочитатьВСоответствие = Истина) Экспорт -``` -## Пример вызова ```bsl Результат = ОбщегоНазначения.JSONВЗначение(Строка, ИменаСвойствСоЗначениямиДата, ПрочитатьВСоответствие); ``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация XML.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация XML.md index d8fec93..c3a0e0d 100644 --- a/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация XML.md +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация XML.md @@ -3,42 +3,66 @@ title: Сериализация XML slug: общие-обмен-данными/сериализация-xml --- +# Библиотека стандартных подсистем + +## Сериализация (БСП) -# Сериализация -## Описание -```bsl -// Преобразует (сериализует) любое значение в XML-строку. -// Преобразованы в могут быть только те объекты, для которых в синтакс-помощнике указано, что они сериализуются. -// См. также ЗначениеИзСтрокиXML. -// -// Параметры: -// Значение - Произвольный - значение, которое необходимо сериализовать в XML-строку. -// -// Возвращаемое значение: -// Строка - XML-строка. -// -Функция ЗначениеВСтрокуXML(Значение) Экспорт -``` -## Пример вызова ```bsl Результат = ОбщегоНазначения.ЗначениеВСтрокуXML(Значение) ``` -# Десериализация -## Описание -```bsl -// Выполняет преобразование (десериализацию) XML-строки в значение. -// См. также ЗначениеВСтрокуXML. -// -// Параметры: -// СтрокаXML - Строка - XML-строка, с сериализованным объектом. -// -// Возвращаемое значение: -// Произвольный - значение, полученное из переданной XML-строки. -// -Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт -``` -## Пример вызова +## Десериализация (БСП) + ```bsl Результат = ОбщегоНазначения.ЗначениеИзСтрокиXML(СтрокаXML) +``` + +# Без библиотеки стандартных подсистем + +## Сериализация (XDTO) + +```bsl +&НаСервере +Процедура СериализоватьНаСервере() + + Таблица = ТаблицаДанных.Выгрузить(); // Какой-то объект + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + + // Преобразование: ТаблицаЗначений - ОбъектXDTO + ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(Таблица); + + // Преобразование: ОбъектXDTO - XML + ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); + + ДанныеXML = ЗаписьXML.Закрыть(); + +КонецПроцедуры + +``` + +## Десериализация (XDTO) + +```bsl + +&НаСервере +Процедура ДесериализоватьНаСервере() + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ДанныеXML); + + // Преобразование: XML - ОбъектXDTO + ТипОбъекта = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "ValueTable"); + ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипОбъекта); + + // Преобразование: ОбъектXDTO - ТаблицаЗначений + Таблица = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO); + + ТаблицаДанных.Загрузить(Таблица); + + ЧтениеXML.Закрыть(); + +КонецПроцедуры + ``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Общие/Работа с коллекциями/Таблицы значений/Табличный документ в ТЗ и обратно.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Табличный документ в ТЗ и обратно.md similarity index 87% rename from src/content/docs/knowledge-base/Общие/Работа с коллекциями/Таблицы значений/Табличный документ в ТЗ и обратно.md rename to src/content/docs/knowledge-base/Общие/Обмен данными/Табличный документ в ТЗ и обратно.md index 07e1637..3a3c678 100644 --- a/src/content/docs/knowledge-base/Общие/Работа с коллекциями/Таблицы значений/Табличный документ в ТЗ и обратно.md +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Табличный документ в ТЗ и обратно.md @@ -1,6 +1,6 @@ --- title: Табличный документ в ТЗ и обратно -slug: общие-работа-с-коллекциями-таблицы-значений/табличный-документ-в-тз-и-обратно +slug: общие-обмен-данными/табличный-документ-в-тз-и-обратно --- # Табличный документ в таблицу значений (табдок в ТЗ) diff --git a/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение DBF.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение DBF.md new file mode 100644 index 0000000..816856b --- /dev/null +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение DBF.md @@ -0,0 +1,72 @@ +--- +title: Чтение DBF +slug: общие-обмен-данными-чтение-файлов-примеры/чтение-dbf +--- + +> Длина имени файла DBF без расширения не должна быть больше **8 символов** + +```bsl + +&НаКлиенте +Асинх Процедура ПрочитатьФайл(Команда) + + Расширение = "dbf"; + + ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов; + ПараметрыДиалога.Заголовок = "Выберите файл"; + ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение); + + ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога); + Если ОписаниеФайла = Неопределено Тогда + Возврат; + КонецЕсли; + + АдресДанных = ОписаниеФайла.Адрес; + + Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение; + + ПрочитатьФайлНаСервере(АдресДанных, Расширение); + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение) + + ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); + + //Длина имени файла DBF без расширения не должна быть больше **8 символов** + Файл = Новый Файл(ПутьКФайлу); + ИмяБезРасширения = Файл.ИмяБезРасширения; + Если СтрДлина(ИмяБезРасширения) > 8 Тогда + ИмяБезРасширения = Лев(ИмяБезРасширения, 8); + КонецЕсли; + + ПутьКФайлу = СтрЗаменить(ПутьКФайлу, Файл.ИмяБезРасширения, ИмяБезРасширения); + + ДанныеФайла = ПолучитьИзВременногоХранилища(Объект.АдресДанных); + ДанныеФайла.Записать(ПутьКФайлу); + + ФайлДБФ = Новый XBase; + ФайлДБФ.ОткрытьФайл(ПутьКФайлу); + + Если НЕ ФайлДБФ.Первая() Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Файл пустой"; + Сообщение.Сообщить(); + Возврат; + КонецЕсли; + + Пока НЕ ФайлДБФ.ВКонце() Цикл + + СтрокаТаблицы = Объект.ДанныеФайла.Добавить(); + СтрокаТаблицы.Наименование = ФайлДБФ.NAME; + // обработка + + ФайлДБФ.Следующая(); + + КонецЦикла; + + ФайлДБФ.ЗакрытьФайл(); + +КонецПроцедуры +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение Excel.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение Excel.md new file mode 100644 index 0000000..c5961ba --- /dev/null +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение Excel.md @@ -0,0 +1,111 @@ +--- +title: Чтение Excel +slug: общие-обмен-данными-чтение-файлов-примеры/чтение-excel +--- + +## Обычное чтение + +```bsl + +&НаКлиенте +Асинх Процедура ПрочитатьФайл(Команда) + + Расширение = "xlsx"; + + ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов; + ПараметрыДиалога.Заголовок = "Выберите файл"; + ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение); + + ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога); + Если ОписаниеФайла = Неопределено Тогда + Возврат; + КонецЕсли; + + АдресДанных = ОписаниеФайла.Адрес; + + Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение; + + ПрочитатьФайлНаСервере(АдресДанных, Расширение); + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение) + + ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); + ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных); + + ДанныеФайла.Записать(ПутьКФайлу); + + ТабДок = Новый ТабличныйДокумент; + ТабДок.Прочитать(ПутьКФайлу); + + КоличествоСтрок = ТабДок.ВысотаТаблицы; + КоличествоКолонок = ТабДок.ШиринаТаблицы; + + // Обработка + + УдалитьФайлы(ПутьКФайлу); + +КонецПроцедуры +``` + +## Построитель запроса +```bsl + +&НаКлиенте +Асинх Процедура ПрочитатьФайл(Команда) + + Расширение = "xlsx"; + + ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов; + ПараметрыДиалога.Заголовок = "Выберите файл"; + ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение); + + ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога); + Если ОписаниеФайла = Неопределено Тогда + Возврат; + КонецЕсли; + + АдресДанных = ОписаниеФайла.Адрес; + + Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение; + + ПрочитатьФайлНаСервере(АдресДанных, Расширение); + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение) + + ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); + ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных); + + ДанныеФайла.Записать(ПутьКФайлу); + + ТабДок = Новый ТабличныйДокумент; + ТабДок.Прочитать(ПутьКФайлу); + + КоличествоСтрок = ТабДок.ВысотаТаблицы; + КоличествоКолонок = ТабДок.ШиринаТаблицы; + + // Вариант 1, Произвольная область + ОбластьЯчеек = ТабДок.Область(1, 1, КоличествоСтрок, КоличествоКолонок); + + Построитель = Новый ПостроительЗапроса; + Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек); + Построитель.Выполнить(); + + ТаблицаДанных = Построитель.Результат.Выгрузить(); + + // Вариант 2, Область = вся таблица + Построитель = Новый ПостроительЗапроса; + Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область()); + ТаблицаДанных = Построитель.Результат.Выгрузить(); + + // Обработка + + УдалитьФайлы(ПутьКФайлу); + +КонецПроцедуры +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение JSON.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение JSON.md new file mode 100644 index 0000000..0f932a9 --- /dev/null +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение JSON.md @@ -0,0 +1,62 @@ +--- +title: Чтение JSON +slug: общие-обмен-данными-чтение-файлов-примеры/чтение-json +--- + +```bsl + +&НаКлиенте +Асинх Процедура ПрочитатьФайл(Команда) + + Расширение = "json"; + + ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов; + ПараметрыДиалога.Заголовок = "Выберите файл"; + ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение); + + ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога); + Если ОписаниеФайла = Неопределено Тогда + Возврат; + КонецЕсли; + + АдресДанных = ОписаниеФайла.Адрес; + + Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение; + + ПрочитатьФайлНаСервере(АдресДанных, Расширение); + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение) + + ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных); + ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); + ДанныеФайла.Записать(ПутьКФайлу); + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.ОткрытьФайл(ПутьКФайлу); + + ДанныеJSON = ПрочитатьJSON(ЧтениеJSON); + + // Получаем массив структур + Если ТипЗнч(ДанныеJSON) = Тип("Структура") Тогда + МассивДанных = Новый Массив; + МассивДанных.Добавить(ДанныеJSON); + ИначеЕсли ТипЗнч(ДанныеJSON) = Тип("Массив") Тогда + МассивДанных = ДанныеJSON; + КонецЕсли; + + Для каждого ДанныеКонтрагента Из МассивДанных Цикл + + // обрабатываем + + КонецЦикла; + + ЧтениеJSON.Закрыть(); + + УдалитьФайлы(ПутьКФайлу); + + +КонецПроцедуры +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение TXT, CSV.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение TXT, CSV.md new file mode 100644 index 0000000..af0ea43 --- /dev/null +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение TXT, CSV.md @@ -0,0 +1,89 @@ +--- +title: Чтение TXT, CSV +slug: общие-обмен-данными-чтение-файлов-примеры/чтение-txt-csv +--- + +## Вариант с ЧтениеТекста + +```bsl + +&НаКлиенте +Асинх Процедура ПрочитатьФайл(Команда) + + Расширение = "txt"; + + ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов; + ПараметрыДиалога.Заголовок = "Выберите файл"; + ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение); + + ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога); + Если ОписаниеФайла = Неопределено Тогда + Возврат; + КонецЕсли; + + АдресДанных = ОписаниеФайла.Адрес; + + Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение; + + ПрочитатьФайлНаСервере(АдресДанных, Расширение); + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение) + + ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); + + ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных); + ДанныеФайла.Записать(ПутьКФайлу); + + Текст = Новый ЧтениеТекста; + Текст.Открыть(ПутьКФайлу, КодировкаТекста.UTF8); + + ТекСтрока = Текст.ПрочитатьСтроку(); + + НомерСтроки = 1; + + Пока ТекСтрока <> Неопределено Цикл + + // обработка + + ТекСтрока = Текст.ПрочитатьСтроку(); + НомерСтроки = НомерСтроки + 1; + + КонецЦикла; + + Текст.Закрыть(); + + УдалитьФайлы(ПутьКФайлу); + +КонецПроцедуры +``` + +## Вариант с ТекстовыйДокумент + +```bsl +&НаКлиенте +Асинх Процедура ПрочитатьФайл(Команда) + Текст = Новый ТекстовыйДокумент; + + Оповещение = Новый ОписаниеОповещения("ПрочитатьФайлЗавершение", ЭтотОбъект, Текст); + Текст.НачатьЧтение(Оповещение, Объект.ПутьКФайлу, КодировкаТекста.UTF8); +КонецПроцедуры + +&НаКлиенте +Процедура ПрочитатьФайлЗавершение(Текст) Экспорт + + КоличествоСтрок = Текст.КоличествоСтрок(); + + Для НомерСтроки = 1 По КоличествоСтрок Цикл + + ТекСтрока = Текст.ПолучитьСтроку(НомерСтроки); + + // Обработка + + КонецЦикла; + +КонецПроцедуры + +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение XML.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение XML.md new file mode 100644 index 0000000..ef3737e --- /dev/null +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение XML.md @@ -0,0 +1,92 @@ +--- +title: Чтение XML +slug: общие-обмен-данными-чтение-файлов-примеры/чтение-xml +--- + +## С помощью XDTO + +```bsl + +&НаКлиенте +Асинх Процедура ПрочитатьФайл(Команда) + + Расширение = "xml"; + + ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов; + ПараметрыДиалога.Заголовок = "Выберите файл"; + ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение); + + ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога); + Если ОписаниеФайла = Неопределено Тогда + Возврат; + КонецЕсли; + + АдресДанных = ОписаниеФайла.Адрес; + + Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение; + + ПрочитатьФайлНаСервере(АдресДанных, Расширение); + +КонецПроцедуры + + +&НаСервере +Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение) + + ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных); + ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); + ДанныеФайла.Записать(ПутьКФайлу); + + СоответствиеПолей = Новый Соответствие; + СоответствиеПолей.Вставить("name", "Наименование"); + СоответствиеПолей.Вставить("fullname", "НаименованиеПолное"); + СоответствиеПолей.Вставить("partner_type", "ВидКонтрагента"); + СоответствиеПолей.Вставить("inn", "ИНН"); + СоответствиеПолей.Вставить("kpp", "КПП"); + СоответствиеПолей.Вставить("phone", "Телефон"); + СоответствиеПолей.Вставить("email", "ЭлектроннаяПочта"); + СоответствиеПолей.Вставить("is_customer", "Покупатель"); + СоответствиеПолей.Вставить("is_supplier", "Поставщик"); + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьФайл(ПутьКФайлу); + + ДанныеXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + + // Если элемент в коллекции один, то тип будет "ОбъектXDTO", который в цикле не обойти + // Создаем в таком случае принудительно массив + Если ТипЗнч(ДанныеXDTO.Partner) = Тип("ОбъектXDTO") Тогда + МассивКонтрагентовXDTO = Новый Массив; + МассивКонтрагентовXDTO.Добавить(ДанныеXDTO.Partner); + Иначе + МассивКонтрагентовXDTO = ДанныеXDTO.Partner; + КонецЕсли; + + Для каждого ОбъектXDTO Из МассивКонтрагентовXDTO Цикл + + НоваяСтрока = Объект.ДанныеФайла.Добавить(); + СвойстваXDTO = ОбъектXDTO.Свойства(); + + Для каждого СвойствоXDTO Из СвойстваXDTO Цикл + + ИмяСвойства = СвойствоXDTO.Имя; + + Если ТипЗнч(ОбъектXDTO[ИмяСвойства]) = Тип("ОбъектXDTO") Тогда + Продолжить; + КонецЕсли; + + ИмяРеквизита = СоответствиеПолей.Получить(ИмяСвойства); + Если ИмяРеквизита <> Неопределено Тогда + НоваяСтрока[ИмяРеквизита] = ОбъектXDTO[ИмяСвойства]; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + ЧтениеXML.Закрыть(); + + УдалитьФайлы(ПутьКФайлу); + +КонецПроцедуры +``` \ No newline at end of file