This commit is contained in:
artem 2025-10-07 13:21:53 +05:00
parent 6bf00d3da5
commit 7b08c1d18e
4 changed files with 136 additions and 103 deletions

View File

@ -25,18 +25,18 @@ slug: общие-обмен-данными/сериализация-xml
&НаСервере &НаСервере
Процедура СериализоватьНаСервере() Процедура СериализоватьНаСервере()
Таблица = ТаблицаДанных.Выгрузить(); // Какой-то объект Таблица = ТаблицаДанных.Выгрузить(); // Какой-то объект
ЗаписьXML = Новый ЗаписьXML; ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку(); ЗаписьXML.УстановитьСтроку();
// Преобразование: ТаблицаЗначений - ОбъектXDTO // Преобразование: ТаблицаЗначений - ОбъектXDTO
ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(Таблица); ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(Таблица);
// Преобразование: ОбъектXDTO - XML // Преобразование: ОбъектXDTO - XML
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
ДанныеXML = ЗаписьXML.Закрыть(); ДанныеXML = ЗаписьXML.Закрыть();
КонецПроцедуры КонецПроцедуры
@ -49,19 +49,19 @@ slug: общие-обмен-данными/сериализация-xml
&НаСервере &НаСервере
Процедура ДесериализоватьНаСервере() Процедура ДесериализоватьНаСервере()
ЧтениеXML = Новый ЧтениеXML; ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ДанныеXML); ЧтениеXML.УстановитьСтроку(ДанныеXML);
// Преобразование: XML - ОбъектXDTO // Преобразование: XML - ОбъектXDTO
ТипОбъекта = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "ValueTable"); ТипОбъекта = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "ValueTable");
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипОбъекта); ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипОбъекта);
// Преобразование: ОбъектXDTO - ТаблицаЗначений // Преобразование: ОбъектXDTO - ТаблицаЗначений
Таблица = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO); Таблица = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);
ТаблицаДанных.Загрузить(Таблица); ТаблицаДанных.Загрузить(Таблица);
ЧтениеXML.Закрыть(); ЧтениеXML.Закрыть();
КонецПроцедуры КонецПроцедуры

View File

@ -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) [Источник 1](https://infostart.ru/1c/articles/2110771)
[Источник 2](https://helpf.pro/faq/view/1373.html) [Источник 2](https://helpf.pro/faq/view/1373.html)

View File

@ -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.Закрыть();
УдалитьФайлы(ПутьКФайлу); УдалитьФайлы(ПутьКФайлу);
КонецПроцедуры КонецПроцедуры

View File

@ -34,59 +34,59 @@ slug: общие-обмен-данными-чтение-файлов-приме
Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение) Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение)
ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных); ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных);
ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение); ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение);
ДанныеФайла.Записать(ПутьКФайлу); ДанныеФайла.Записать(ПутьКФайлу);
СоответствиеПолей = Новый Соответствие; СоответствиеПолей = Новый Соответствие;
СоответствиеПолей.Вставить("name", "Наименование"); СоответствиеПолей.Вставить("name", "Наименование");
СоответствиеПолей.Вставить("fullname", "НаименованиеПолное"); СоответствиеПолей.Вставить("fullname", "НаименованиеПолное");
СоответствиеПолей.Вставить("partner_type", "ВидКонтрагента"); СоответствиеПолей.Вставить("partner_type", "ВидКонтрагента");
СоответствиеПолей.Вставить("inn", "ИНН"); СоответствиеПолей.Вставить("inn", "ИНН");
СоответствиеПолей.Вставить("kpp", "КПП"); СоответствиеПолей.Вставить("kpp", "КПП");
СоответствиеПолей.Вставить("phone", "Телефон"); СоответствиеПолей.Вставить("phone", "Телефон");
СоответствиеПолей.Вставить("email", "ЭлектроннаяПочта"); СоответствиеПолей.Вставить("email", "ЭлектроннаяПочта");
СоответствиеПолей.Вставить("is_customer", "Покупатель"); СоответствиеПолей.Вставить("is_customer", "Покупатель");
СоответствиеПолей.Вставить("is_supplier", "Поставщик"); СоответствиеПолей.Вставить("is_supplier", "Поставщик");
ЧтениеXML = Новый ЧтениеXML; ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу); ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
ДанныеXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); ДанныеXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
// Если элемент в коллекции один, то тип будет "ОбъектXDTO", который в цикле не обойти // Если элемент в коллекции один, то тип будет "ОбъектXDTO", который в цикле не обойти
// Создаем в таком случае принудительно массив // Создаем в таком случае принудительно массив
Если ТипЗнч(ДанныеXDTO.Partner) = Тип("ОбъектXDTO") Тогда Если ТипЗнч(ДанныеXDTO.Partner) = Тип("ОбъектXDTO") Тогда
МассивКонтрагентовXDTO = Новый Массив; МассивКонтрагентовXDTO = Новый Массив;
МассивКонтрагентовXDTO.Добавить(ДанныеXDTO.Partner); МассивКонтрагентовXDTO.Добавить(ДанныеXDTO.Partner);
Иначе Иначе
МассивКонтрагентовXDTO = ДанныеXDTO.Partner; МассивКонтрагентовXDTO = ДанныеXDTO.Partner;
КонецЕсли; КонецЕсли;
Для каждого ОбъектXDTO Из МассивКонтрагентовXDTO Цикл Для каждого ОбъектXDTO Из МассивКонтрагентовXDTO Цикл
НоваяСтрока = Объект.ДанныеФайла.Добавить(); НоваяСтрока = Объект.ДанныеФайла.Добавить();
СвойстваXDTO = ОбъектXDTO.Свойства(); СвойстваXDTO = ОбъектXDTO.Свойства();
Для каждого СвойствоXDTO Из СвойстваXDTO Цикл Для каждого СвойствоXDTO Из СвойстваXDTO Цикл
ИмяСвойства = СвойствоXDTO.Имя; ИмяСвойства = СвойствоXDTO.Имя;
Если ТипЗнч(ОбъектXDTO[ИмяСвойства]) = Тип("ОбъектXDTO") Тогда Если ТипЗнч(ОбъектXDTO[ИмяСвойства]) = Тип("ОбъектXDTO") Тогда
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
ИмяРеквизита = СоответствиеПолей.Получить(ИмяСвойства); ИмяРеквизита = СоответствиеПолей.Получить(ИмяСвойства);
Если ИмяРеквизита <> Неопределено Тогда Если ИмяРеквизита <> Неопределено Тогда
НоваяСтрока[ИмяРеквизита] = ОбъектXDTO[ИмяСвойства]; НоваяСтрока[ИмяРеквизита] = ОбъектXDTO[ИмяСвойства];
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
КонецЦикла; КонецЦикла;
ЧтениеXML.Закрыть(); ЧтениеXML.Закрыть();
УдалитьФайлы(ПутьКФайлу); УдалитьФайлы(ПутьКФайлу);
КонецПроцедуры КонецПроцедуры
``` ```