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(ЗаписьXML, ОбъектXDTO);
// Преобразование: ОбъектXDTO - XML
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
ДанныеXML = ЗаписьXML.Закрыть();
ДанныеXML = ЗаписьXML.Закрыть();
КонецПроцедуры
@ -49,19 +49,19 @@ slug: общие-обмен-данными/сериализация-xml
&НаСервере
Процедура ДесериализоватьНаСервере()
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ДанныеXML);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ДанныеXML);
// Преобразование: XML - ОбъектXDTO
ТипОбъекта = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "ValueTable");
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипОбъекта);
// Преобразование: XML - ОбъектXDTO
ТипОбъекта = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "ValueTable");
Объект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)
[Источник 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", "Наименование");
СоответствиеПолей.Вставить("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.ОткрытьФайл(ПутьКФайлу);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
ДанныеXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
ДанныеXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
// Если элемент в коллекции один, то тип будет "ОбъектXDTO", который в цикле не обойти
// Создаем в таком случае принудительно массив
Если ТипЗнч(ДанныеXDTO.Partner) = Тип("ОбъектXDTO") Тогда
МассивКонтрагентовXDTO = Новый Массив;
МассивКонтрагентовXDTO.Добавить(ДанныеXDTO.Partner);
Иначе
МассивКонтрагентовXDTO = ДанныеXDTO.Partner;
КонецЕсли;
Если ТипЗнч(ДанныеXDTO.Partner) = Тип("ОбъектXDTO") Тогда
МассивКонтрагентовXDTO = Новый Массив;
МассивКонтрагентов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.Закрыть();
УдалитьФайлы(ПутьКФайлу);
УдалитьФайлы(ПутьКФайлу);
КонецПроцедуры
```