Очень часто необходимо выгрузить из БД 1с данные в таблице значений и загрузить их в другую БД и не только 1с. Для того что бы не мучатся с xml и получить компактный текстовый файл с сериализацией можно воспользоватся и JSON. Приведенный ниже код позволяет быстро выгрузить и загрузить данные из/в 1с.
Для примера выгрузим номенклатуру из УТ 10 (1с8.2 Обычные формы) и загрузим в БП 3 (1с8.3 Управляемые формы).
Создадим текст запроса:
//Текст запроса по номенклатуре
Процедура ВыгрузитьНоменклатуруВФайл()
//Текст запроса по номенклатуре
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Номенклатура.Код,
| Номенклатура.Наименование,
| Номенклатура.ЭтоГруппа,
| Номенклатура.НаименованиеПолное,
| Номенклатура.Артикул,
| Номенклатура.СтавкаНДС,
| Номенклатура.БазоваяЕдиницаИзмерения.Код,
| Номенклатура.Родитель.Код
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
ЗаписьПлоскогоЗапросаВФайл(ИмяКаталогаЗагрузки, "Номенклатура", ТекстЗапроса);
КонецПроцедуры
Выполним и выгрузим:
//Выполняем и записываем ч/з проц. выгрузки
Процедура ЗаписьПлоскогоЗапросаВФайл(Каталог, ИмяЗапроса, ТекстЗапроса)
Запрос = Новый Запрос();
Запрос.Текст = ТекстЗапроса;
ЗаписьТзВФайл(СокрЛП(Каталог) + "\" + СокрЛП(ИмяЗапроса) + ".jsn", Запрос.Выполнить().Выгрузить());
КонецПроцедуры
Ну вот и самое вкусное, универсальная процедура для JSON:
Процедура ЗаписьТЗВФайл(ИмяФайла, тз_)
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = Ложь;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON( , Символы.Таб);
ЗаписьJSON.ОткрытьФайл(ИмяФайла, КодировкаТекста.UTF8, , ПараметрыЗаписиJSON);
ЗаписьJSON.ЗаписатьНачалоМассива();
Для Каждого Стр Из тз_ Цикл
ЗаписьJSON.ЗаписатьНачалоОбъекта();
Для Каждого Колонка Из тз_.Колонки Цикл
ЗаписьJSON.ЗаписатьИмяСвойства(СокрЛП(Колонка.Имя));
ЗаписьJSON.ЗаписатьЗначение(СокрЛП(Стр[Колонка.Имя]));
КонецЦикла;
ЗаписьJSON.ЗаписатьКонецОбъекта();
КонецЦикла;
ЗаписьJSON.ЗаписатьКонецМассива();
ЗаписьJSON.Закрыть();
КонецПроцедуры
Загрузим в 1С БП 3:
//Загрузка файла JSON в УФ
//ОбработкаФайлаНом - реквизит формы произвольного типа
//ИмяКаталогаЗагрузки - реквизит формы типа строка
&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
Объект.ОбработкаФайлаНом =
ПоместитьВоВременноеХранилище(СокрЛП(Объект.ИмяКаталогаЗагрузки) + "\Номенклатура.jsn");
ЗагрузитьДанныеВТзНоменклатура();
КонецПроцедуры
//Прочитаем из временного хранилища
&НаСервере
Функция ЗагрузитьДанныеВТзНоменклатура()
ДокумОб = ПолучитьИзВременногоХранилища(Объект.ОбработкаФайлаНом);
Возврат ПрочитатьТзИзФайла(ДокумОб);
КонецФункции
//Чтение JSON из потока
&НаСервере
Функция ПрочитатьТзИзФайла(ДокумОб)
тзДанные = Новый ТаблицаЗначений;
ЧтJSON = Новый ЧтениеJSON();
ЧтJSON.ОткрытьФайл(ДокумОб);
Массив = ПрочитатьJSON(ЧтJSON);
ЧтJSON.Закрыть();
Для Каждого ЭлементМассива из Массив Цикл
Для Каждого Элемент Из ЭлементМассива Цикл
тзДанные.Колонки.Добавить(СокрЛП(Элемент.Ключ));
КонецЦикла;
Прервать;
КонецЦикла;
Для Каждого ЭлементМассива из Массив Цикл
Строка = тзДанные.Добавить();
Для Каждого Элемент Из ЭлементМассива Цикл
Строка[СокрЛП(Элемент.Ключ)] = СокрЛП(Элемент.Значение);
КонецЦикла;
КонецЦикла;
Возврат тзДанные;
КонецФункции