From 7b08c1d18eb3d7923b4170af01a9bdde5fe96645 Mon Sep 17 00:00:00 2001 From: artem Date: Tue, 7 Oct 2025 13:21:53 +0500 Subject: [PATCH] edit --- .../Общие/Обмен данными/Сериализация XML.md | 58 +++++----- .../Табличный документ в ТЗ и обратно.md | 33 ++++++ .../Чтение данных из файла/Чтение JSON.md | 48 ++++----- .../Чтение данных из файла/Чтение XML.md | 100 +++++++++--------- 4 files changed, 136 insertions(+), 103 deletions(-) diff --git a/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация XML.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация XML.md index c3a0e0d..47c236f 100644 --- a/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация XML.md +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Сериализация XML.md @@ -24,20 +24,20 @@ slug: общие-обмен-данными/сериализация-xml ```bsl &НаСервере Процедура СериализоватьНаСервере() - - Таблица = ТаблицаДанных.Выгрузить(); // Какой-то объект - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку(); - - // Преобразование: ТаблицаЗначений - ОбъектXDTO - ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(Таблица); - - // Преобразование: ОбъектXDTO - XML - ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); - - ДанныеXML = ЗаписьXML.Закрыть(); - + + Таблица = ТаблицаДанных.Выгрузить(); // Какой-то объект + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + + // Преобразование: ТаблицаЗначений - ОбъектXDTO + ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(Таблица); + + // Преобразование: ОбъектXDTO - XML + ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); + + ДанныеXML = ЗаписьXML.Закрыть(); + КонецПроцедуры ``` @@ -48,21 +48,21 @@ slug: общие-обмен-данными/сериализация-xml &НаСервере Процедура ДесериализоватьНаСервере() - - Чтение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.Закрыть(); - + + Чтение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 index 3a3c678..ee67e26 100644 --- a/src/content/docs/knowledge-base/Общие/Обмен данными/Табличный документ в ТЗ и обратно.md +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Табличный документ в ТЗ и обратно.md @@ -21,6 +21,39 @@ slug: общие-обмен-данными/табличный-документ- Построитель.Вывести(ТабДокумент); ``` +## Вариант с собственной функцией +```bsl +&НаСервере +Функция ТабличныйДокументИзТаблицыЗначений(ТаблицаЗначений) + + ТабДок = Новый ТабличныйДокумент; + + // Формируем заголовки + ОбластьЗаголовок = ТабДок.ПолучитьОбласть(1, 1, 1, ТаблицаЗначений.Колонки.Количество() + 1); + ОбластьЗаголовок.Область(1, 1).Текст = "№ п/п"; + + Для НомерКолонки = 1 По ТаблицаЗначений.Колонки.Количество() Цикл + ОбластьЗаголовок.Область(1, НомерКолонки + 1).Текст = ТаблицаЗначений.Колонки[НомерКолонки - 1].Имя; + КонецЦикла; + ТабДок.Вывести(ОбластьЗаголовок); + + // Заполняем данными + Для НомерСтроки = 1 По ТаблицаЗначений.Количество() Цикл + ОбластьСтрока = ТабДок.ПолучитьОбласть(НомерСтроки + 1, 1, НомерСтроки + 1, ТаблицаЗначений.Колонки.Количество() + 1); + ОбластьСтрока.Область(1, 1).Текст = Формат(НомерСтроки, "ЧГ="); + + Для НомерКолонки = 1 По ТаблицаЗначений.Колонки.Количество() Цикл + ОбластьСтрока.Область(1, НомерКолонки + 1).Текст = Строка(ТаблицаЗначений[НомерСтроки - 1][НомерКолонки - 1]); + КонецЦикла; + + ТабДок.Вывести(ОбластьСтрока); + КонецЦикла; + + Возврат ТабДок; + +КонецФункции +``` + [Источник 1](https://infostart.ru/1c/articles/2110771) [Источник 2](https://helpf.pro/faq/view/1373.html) \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение JSON.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение JSON.md index 0f932a9..74d566e 100644 --- a/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение JSON.md +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение JSON.md @@ -31,31 +31,31 @@ slug: общие-обмен-данными-чтение-файлов-приме Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение) ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных); - ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); - ДанныеФайла.Записать(ПутьКФайлу); - - ЧтениеJSON = Новый ЧтениеJSON; - ЧтениеJSON.ОткрытьФайл(ПутьКФайлу); - - ДанныеJSON = ПрочитатьJSON(ЧтениеJSON); - + ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); + ДанныеФайла.Записать(ПутьКФайлу); + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.ОткрытьФайл(ПутьКФайлу); + + ДанныеJSON = ПрочитатьJSON(ЧтениеJSON); + // Получаем массив структур - Если ТипЗнч(ДанныеJSON) = Тип("Структура") Тогда - МассивДанных = Новый Массив; - МассивДанных.Добавить(ДанныеJSON); - ИначеЕсли ТипЗнч(ДанныеJSON) = Тип("Массив") Тогда - МассивДанных = ДанныеJSON; - КонецЕсли; - - Для каждого ДанныеКонтрагента Из МассивДанных Цикл - - // обрабатываем - - КонецЦикла; - - ЧтениеJSON.Закрыть(); - - УдалитьФайлы(ПутьКФайлу); + Если ТипЗнч(ДанныеJSON) = Тип("Структура") Тогда + МассивДанных = Новый Массив; + МассивДанных.Добавить(ДанныеJSON); + ИначеЕсли ТипЗнч(ДанныеJSON) = Тип("Массив") Тогда + МассивДанных = ДанныеJSON; + КонецЕсли; + + Для каждого ДанныеКонтрагента Из МассивДанных Цикл + + // обрабатываем + + КонецЦикла; + + ЧтениеJSON.Закрыть(); + + УдалитьФайлы(ПутьКФайлу); КонецПроцедуры diff --git a/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение XML.md b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение XML.md index ef3737e..bf827f8 100644 --- a/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение XML.md +++ b/src/content/docs/knowledge-base/Общие/Обмен данными/Чтение данных из файла/Чтение XML.md @@ -34,59 +34,59 @@ slug: общие-обмен-данными-чтение-файлов-приме Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение) ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных); - ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); - ДанныеФайла.Записать(ПутьКФайлу); - - СоответствиеПолей = Новый Соответствие; - СоответствиеПолей.Вставить("name", "Наименование"); - СоответствиеПолей.Вставить("fullname", "НаименованиеПолное"); - СоответствиеПолей.Вставить("partner_type", "ВидКонтрагента"); - СоответствиеПолей.Вставить("inn", "ИНН"); - СоответствиеПолей.Вставить("kpp", "КПП"); - СоответствиеПолей.Вставить("phone", "Телефон"); - СоответствиеПолей.Вставить("email", "ЭлектроннаяПочта"); - СоответствиеПолей.Вставить("is_customer", "Покупатель"); - СоответствиеПолей.Вставить("is_supplier", "Поставщик"); + ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); + ДанныеФайла.Записать(ПутьКФайлу); + + СоответствиеПолей = Новый Соответствие; + СоответствиеПолей.Вставить("name", "Наименование"); + СоответствиеПолей.Вставить("fullname", "НаименованиеПолное"); + СоответствиеПолей.Вставить("partner_type", "ВидКонтрагента"); + СоответствиеПолей.Вставить("inn", "ИНН"); + СоответствиеПолей.Вставить("kpp", "КПП"); + СоответствиеПолей.Вставить("phone", "Телефон"); + СоответствиеПолей.Вставить("email", "ЭлектроннаяПочта"); + СоответствиеПолей.Вставить("is_customer", "Покупатель"); + СоответствиеПолей.Вставить("is_supplier", "Поставщик"); - ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ПутьКФайлу); - - ДанныеXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); - + Чтение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.Закрыть(); - - УдалитьФайлы(ПутьКФайлу); + Если ТипЗнч(Данные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