add
This commit is contained in:
parent
e93304ed06
commit
6bf00d3da5
@ -4,47 +4,11 @@ slug: общие-обмен-данными/сериализация-json
|
|||||||
---
|
---
|
||||||
|
|
||||||
# Сериализация
|
# Сериализация
|
||||||
## Описание
|
|
||||||
```bsl
|
|
||||||
// Преобразует значение в строку JSON при помощи метода глобального контекста ЗаписатьJSON.
|
|
||||||
// Допускаются не все типы значений, подробности см. в синтакс-помощнике.
|
|
||||||
// Даты преобразуются в формат ISO (YYYY-MM-DDThh:mm:ssZ).
|
|
||||||
//
|
|
||||||
// Параметры:
|
|
||||||
// Значение - Произвольный
|
|
||||||
//
|
|
||||||
// Возвращаемое значение:
|
|
||||||
// Строка
|
|
||||||
//
|
|
||||||
Функция ЗначениеВJSON(Знач Значение) Экспорт
|
|
||||||
```
|
|
||||||
## Пример вызова
|
|
||||||
```bsl
|
```bsl
|
||||||
Результат = ОбщегоНазначения.ЗначениеВJSON(Значение);
|
Результат = ОбщегоНазначения.ЗначениеВJSON(Значение);
|
||||||
```
|
```
|
||||||
|
|
||||||
# Десериализация
|
# Десериализация
|
||||||
## Описание
|
|
||||||
```bsl
|
|
||||||
// Преобразует строку в формате JSON в значение при помощи метода глобального контекста ПрочитатьJSON.
|
|
||||||
// См. ограничения в синтакс-помощнике.
|
|
||||||
// Объекты JSON по умолчанию преобразует в значения типа Соответствие.
|
|
||||||
// Имена свойств со значением типа Дата необходимо явно указывать, чтобы было выполнено преобразование.
|
|
||||||
// Ожидаемый формат дат - ISO (YYYY-MM-DDThh:mm:ssZ).
|
|
||||||
//
|
|
||||||
// Параметры:
|
|
||||||
// Строка - Строка - значение в формате JSON.
|
|
||||||
// ИменаСвойствСоЗначениямиДата - Строка - имя свойства, содержащее значение типа Дата. Допустимо указывать несколько
|
|
||||||
// свойств через запятую.
|
|
||||||
// - Массив из Строка
|
|
||||||
// ПрочитатьВСоответствие - Булево - если Ложь, то объекты JSON будут преобразованы в значение типа Структура.
|
|
||||||
//
|
|
||||||
// Возвращаемое значение:
|
|
||||||
// Произвольный
|
|
||||||
//
|
|
||||||
Функция JSONВЗначение(Знач Строка, Знач ИменаСвойствСоЗначениямиДата = Неопределено, Знач ПрочитатьВСоответствие = Истина) Экспорт
|
|
||||||
```
|
|
||||||
## Пример вызова
|
|
||||||
```bsl
|
```bsl
|
||||||
Результат = ОбщегоНазначения.JSONВЗначение(Строка, ИменаСвойствСоЗначениямиДата, ПрочитатьВСоответствие);
|
Результат = ОбщегоНазначения.JSONВЗначение(Строка, ИменаСвойствСоЗначениямиДата, ПрочитатьВСоответствие);
|
||||||
```
|
```
|
@ -3,42 +3,66 @@ title: Сериализация XML
|
|||||||
slug: общие-обмен-данными/сериализация-xml
|
slug: общие-обмен-данными/сериализация-xml
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# Библиотека стандартных подсистем
|
||||||
|
|
||||||
|
## Сериализация (БСП)
|
||||||
|
|
||||||
# Сериализация
|
|
||||||
## Описание
|
|
||||||
```bsl
|
|
||||||
// Преобразует (сериализует) любое значение в XML-строку.
|
|
||||||
// Преобразованы в могут быть только те объекты, для которых в синтакс-помощнике указано, что они сериализуются.
|
|
||||||
// См. также ЗначениеИзСтрокиXML.
|
|
||||||
//
|
|
||||||
// Параметры:
|
|
||||||
// Значение - Произвольный - значение, которое необходимо сериализовать в XML-строку.
|
|
||||||
//
|
|
||||||
// Возвращаемое значение:
|
|
||||||
// Строка - XML-строка.
|
|
||||||
//
|
|
||||||
Функция ЗначениеВСтрокуXML(Значение) Экспорт
|
|
||||||
```
|
|
||||||
## Пример вызова
|
|
||||||
```bsl
|
```bsl
|
||||||
Результат = ОбщегоНазначения.ЗначениеВСтрокуXML(Значение)
|
Результат = ОбщегоНазначения.ЗначениеВСтрокуXML(Значение)
|
||||||
```
|
```
|
||||||
|
|
||||||
# Десериализация
|
## Десериализация (БСП)
|
||||||
## Описание
|
|
||||||
```bsl
|
|
||||||
// Выполняет преобразование (десериализацию) XML-строки в значение.
|
|
||||||
// См. также ЗначениеВСтрокуXML.
|
|
||||||
//
|
|
||||||
// Параметры:
|
|
||||||
// СтрокаXML - Строка - XML-строка, с сериализованным объектом.
|
|
||||||
//
|
|
||||||
// Возвращаемое значение:
|
|
||||||
// Произвольный - значение, полученное из переданной XML-строки.
|
|
||||||
//
|
|
||||||
Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт
|
|
||||||
```
|
|
||||||
## Пример вызова
|
|
||||||
```bsl
|
```bsl
|
||||||
Результат = ОбщегоНазначения.ЗначениеИзСтрокиXML(СтрокаXML)
|
Результат = ОбщегоНазначения.ЗначениеИзСтроки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.Закрыть();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
```
|
```
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: Табличный документ в ТЗ и обратно
|
title: Табличный документ в ТЗ и обратно
|
||||||
slug: общие-работа-с-коллекциями-таблицы-значений/табличный-документ-в-тз-и-обратно
|
slug: общие-обмен-данными/табличный-документ-в-тз-и-обратно
|
||||||
---
|
---
|
||||||
|
|
||||||
# Табличный документ в таблицу значений (табдок в ТЗ)
|
# Табличный документ в таблицу значений (табдок в ТЗ)
|
@ -0,0 +1,72 @@
|
|||||||
|
---
|
||||||
|
title: Чтение DBF
|
||||||
|
slug: общие-обмен-данными-чтение-файлов-примеры/чтение-dbf
|
||||||
|
---
|
||||||
|
|
||||||
|
> Длина имени файла DBF без расширения не должна быть больше **8 символов**
|
||||||
|
|
||||||
|
```bsl
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Асинх Процедура ПрочитатьФайл(Команда)
|
||||||
|
|
||||||
|
Расширение = "dbf";
|
||||||
|
|
||||||
|
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
|
||||||
|
ПараметрыДиалога.Заголовок = "Выберите файл";
|
||||||
|
ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение);
|
||||||
|
|
||||||
|
ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога);
|
||||||
|
Если ОписаниеФайла = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
АдресДанных = ОписаниеФайла.Адрес;
|
||||||
|
|
||||||
|
Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение;
|
||||||
|
|
||||||
|
ПрочитатьФайлНаСервере(АдресДанных, Расширение);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение)
|
||||||
|
|
||||||
|
ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение);
|
||||||
|
|
||||||
|
//Длина имени файла DBF без расширения не должна быть больше **8 символов**
|
||||||
|
Файл = Новый Файл(ПутьКФайлу);
|
||||||
|
ИмяБезРасширения = Файл.ИмяБезРасширения;
|
||||||
|
Если СтрДлина(ИмяБезРасширения) > 8 Тогда
|
||||||
|
ИмяБезРасширения = Лев(ИмяБезРасширения, 8);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПутьКФайлу = СтрЗаменить(ПутьКФайлу, Файл.ИмяБезРасширения, ИмяБезРасширения);
|
||||||
|
|
||||||
|
ДанныеФайла = ПолучитьИзВременногоХранилища(Объект.АдресДанных);
|
||||||
|
ДанныеФайла.Записать(ПутьКФайлу);
|
||||||
|
|
||||||
|
ФайлДБФ = Новый XBase;
|
||||||
|
ФайлДБФ.ОткрытьФайл(ПутьКФайлу);
|
||||||
|
|
||||||
|
Если НЕ ФайлДБФ.Первая() Тогда
|
||||||
|
Сообщение = Новый СообщениеПользователю;
|
||||||
|
Сообщение.Текст = "Файл пустой";
|
||||||
|
Сообщение.Сообщить();
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Пока НЕ ФайлДБФ.ВКонце() Цикл
|
||||||
|
|
||||||
|
СтрокаТаблицы = Объект.ДанныеФайла.Добавить();
|
||||||
|
СтрокаТаблицы.Наименование = ФайлДБФ.NAME;
|
||||||
|
// обработка
|
||||||
|
|
||||||
|
ФайлДБФ.Следующая();
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ФайлДБФ.ЗакрытьФайл();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
```
|
@ -0,0 +1,111 @@
|
|||||||
|
---
|
||||||
|
title: Чтение Excel
|
||||||
|
slug: общие-обмен-данными-чтение-файлов-примеры/чтение-excel
|
||||||
|
---
|
||||||
|
|
||||||
|
## Обычное чтение
|
||||||
|
|
||||||
|
```bsl
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Асинх Процедура ПрочитатьФайл(Команда)
|
||||||
|
|
||||||
|
Расширение = "xlsx";
|
||||||
|
|
||||||
|
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
|
||||||
|
ПараметрыДиалога.Заголовок = "Выберите файл";
|
||||||
|
ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение);
|
||||||
|
|
||||||
|
ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога);
|
||||||
|
Если ОписаниеФайла = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
АдресДанных = ОписаниеФайла.Адрес;
|
||||||
|
|
||||||
|
Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение;
|
||||||
|
|
||||||
|
ПрочитатьФайлНаСервере(АдресДанных, Расширение);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение)
|
||||||
|
|
||||||
|
ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение);
|
||||||
|
ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных);
|
||||||
|
|
||||||
|
ДанныеФайла.Записать(ПутьКФайлу);
|
||||||
|
|
||||||
|
ТабДок = Новый ТабличныйДокумент;
|
||||||
|
ТабДок.Прочитать(ПутьКФайлу);
|
||||||
|
|
||||||
|
КоличествоСтрок = ТабДок.ВысотаТаблицы;
|
||||||
|
КоличествоКолонок = ТабДок.ШиринаТаблицы;
|
||||||
|
|
||||||
|
// Обработка
|
||||||
|
|
||||||
|
УдалитьФайлы(ПутьКФайлу);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
```
|
||||||
|
|
||||||
|
## Построитель запроса
|
||||||
|
```bsl
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Асинх Процедура ПрочитатьФайл(Команда)
|
||||||
|
|
||||||
|
Расширение = "xlsx";
|
||||||
|
|
||||||
|
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
|
||||||
|
ПараметрыДиалога.Заголовок = "Выберите файл";
|
||||||
|
ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение);
|
||||||
|
|
||||||
|
ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога);
|
||||||
|
Если ОписаниеФайла = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
АдресДанных = ОписаниеФайла.Адрес;
|
||||||
|
|
||||||
|
Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение;
|
||||||
|
|
||||||
|
ПрочитатьФайлНаСервере(АдресДанных, Расширение);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение)
|
||||||
|
|
||||||
|
ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение);
|
||||||
|
ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных);
|
||||||
|
|
||||||
|
ДанныеФайла.Записать(ПутьКФайлу);
|
||||||
|
|
||||||
|
ТабДок = Новый ТабличныйДокумент;
|
||||||
|
ТабДок.Прочитать(ПутьКФайлу);
|
||||||
|
|
||||||
|
КоличествоСтрок = ТабДок.ВысотаТаблицы;
|
||||||
|
КоличествоКолонок = ТабДок.ШиринаТаблицы;
|
||||||
|
|
||||||
|
// Вариант 1, Произвольная область
|
||||||
|
ОбластьЯчеек = ТабДок.Область(1, 1, КоличествоСтрок, КоличествоКолонок);
|
||||||
|
|
||||||
|
Построитель = Новый ПостроительЗапроса;
|
||||||
|
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
|
||||||
|
Построитель.Выполнить();
|
||||||
|
|
||||||
|
ТаблицаДанных = Построитель.Результат.Выгрузить();
|
||||||
|
|
||||||
|
// Вариант 2, Область = вся таблица
|
||||||
|
Построитель = Новый ПостроительЗапроса;
|
||||||
|
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
|
||||||
|
ТаблицаДанных = Построитель.Результат.Выгрузить();
|
||||||
|
|
||||||
|
// Обработка
|
||||||
|
|
||||||
|
УдалитьФайлы(ПутьКФайлу);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
```
|
@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
title: Чтение JSON
|
||||||
|
slug: общие-обмен-данными-чтение-файлов-примеры/чтение-json
|
||||||
|
---
|
||||||
|
|
||||||
|
```bsl
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Асинх Процедура ПрочитатьФайл(Команда)
|
||||||
|
|
||||||
|
Расширение = "json";
|
||||||
|
|
||||||
|
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
|
||||||
|
ПараметрыДиалога.Заголовок = "Выберите файл";
|
||||||
|
ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение);
|
||||||
|
|
||||||
|
ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога);
|
||||||
|
Если ОписаниеФайла = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
АдресДанных = ОписаниеФайла.Адрес;
|
||||||
|
|
||||||
|
Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение;
|
||||||
|
|
||||||
|
ПрочитатьФайлНаСервере(АдресДанных, Расширение);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение)
|
||||||
|
|
||||||
|
ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных);
|
||||||
|
ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение);
|
||||||
|
ДанныеФайла.Записать(ПутьКФайлу);
|
||||||
|
|
||||||
|
ЧтениеJSON = Новый ЧтениеJSON;
|
||||||
|
ЧтениеJSON.ОткрытьФайл(ПутьКФайлу);
|
||||||
|
|
||||||
|
ДанныеJSON = ПрочитатьJSON(ЧтениеJSON);
|
||||||
|
|
||||||
|
// Получаем массив структур
|
||||||
|
Если ТипЗнч(ДанныеJSON) = Тип("Структура") Тогда
|
||||||
|
МассивДанных = Новый Массив;
|
||||||
|
МассивДанных.Добавить(ДанныеJSON);
|
||||||
|
ИначеЕсли ТипЗнч(ДанныеJSON) = Тип("Массив") Тогда
|
||||||
|
МассивДанных = ДанныеJSON;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Для каждого ДанныеКонтрагента Из МассивДанных Цикл
|
||||||
|
|
||||||
|
// обрабатываем
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ЧтениеJSON.Закрыть();
|
||||||
|
|
||||||
|
УдалитьФайлы(ПутьКФайлу);
|
||||||
|
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
```
|
@ -0,0 +1,89 @@
|
|||||||
|
---
|
||||||
|
title: Чтение TXT, CSV
|
||||||
|
slug: общие-обмен-данными-чтение-файлов-примеры/чтение-txt-csv
|
||||||
|
---
|
||||||
|
|
||||||
|
## Вариант с ЧтениеТекста
|
||||||
|
|
||||||
|
```bsl
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Асинх Процедура ПрочитатьФайл(Команда)
|
||||||
|
|
||||||
|
Расширение = "txt";
|
||||||
|
|
||||||
|
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
|
||||||
|
ПараметрыДиалога.Заголовок = "Выберите файл";
|
||||||
|
ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение);
|
||||||
|
|
||||||
|
ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога);
|
||||||
|
Если ОписаниеФайла = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
АдресДанных = ОписаниеФайла.Адрес;
|
||||||
|
|
||||||
|
Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение;
|
||||||
|
|
||||||
|
ПрочитатьФайлНаСервере(АдресДанных, Расширение);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение)
|
||||||
|
|
||||||
|
ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение);
|
||||||
|
|
||||||
|
ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных);
|
||||||
|
ДанныеФайла.Записать(ПутьКФайлу);
|
||||||
|
|
||||||
|
Текст = Новый ЧтениеТекста;
|
||||||
|
Текст.Открыть(ПутьКФайлу, КодировкаТекста.UTF8);
|
||||||
|
|
||||||
|
ТекСтрока = Текст.ПрочитатьСтроку();
|
||||||
|
|
||||||
|
НомерСтроки = 1;
|
||||||
|
|
||||||
|
Пока ТекСтрока <> Неопределено Цикл
|
||||||
|
|
||||||
|
// обработка
|
||||||
|
|
||||||
|
ТекСтрока = Текст.ПрочитатьСтроку();
|
||||||
|
НомерСтроки = НомерСтроки + 1;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Текст.Закрыть();
|
||||||
|
|
||||||
|
УдалитьФайлы(ПутьКФайлу);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
```
|
||||||
|
|
||||||
|
## Вариант с ТекстовыйДокумент
|
||||||
|
|
||||||
|
```bsl
|
||||||
|
&НаКлиенте
|
||||||
|
Асинх Процедура ПрочитатьФайл(Команда)
|
||||||
|
Текст = Новый ТекстовыйДокумент;
|
||||||
|
|
||||||
|
Оповещение = Новый ОписаниеОповещения("ПрочитатьФайлЗавершение", ЭтотОбъект, Текст);
|
||||||
|
Текст.НачатьЧтение(Оповещение, Объект.ПутьКФайлу, КодировкаТекста.UTF8);
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура ПрочитатьФайлЗавершение(Текст) Экспорт
|
||||||
|
|
||||||
|
КоличествоСтрок = Текст.КоличествоСтрок();
|
||||||
|
|
||||||
|
Для НомерСтроки = 1 По КоличествоСтрок Цикл
|
||||||
|
|
||||||
|
ТекСтрока = Текст.ПолучитьСтроку(НомерСтроки);
|
||||||
|
|
||||||
|
// Обработка
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
```
|
@ -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.Закрыть();
|
||||||
|
|
||||||
|
УдалитьФайлы(ПутьКФайлу);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
```
|
Loading…
x
Reference in New Issue
Block a user