Написании Выгрузки и Загрузки Данных используя Универсальный обмен данными в формате XML Написании обработок для выгрузки и загрузки данных используя методы обработки "Универсальный обмен данными в формате xml"
Принцип работы:
При изменении даты в форме, табличное поле заполняется документами за выбранную дату.
Сами правила обмена были вставлены в обработку как макет с типом "Двоичные данные".
При ВЫГРУЗКЕ используется код:
Код 1C v 8.х Процедура ДействияФормыВыгрузка(Кнопка)
ДиалогФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогФайла.Фильтр = "Файл данных (*.xml)|*.xml";
ДиалогФайла.ПолноеИмяФайла = "Retail_"+СтрЗаменить(Формат(Дата,"ДФ=dd.MM.yyyy"),".","-");
Если ДиалогФайла.Выбрать() Тогда
ИмяФайла = ДиалогФайла.ПолноеИмяФайла;
Попытка
ВыгрузитьДанные(ИмяФайла);
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
ДвоичныеДанные.Записать(ИмяФайла);
Исключение
Предупреждение("Внешний файл не сохранен
|"+ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедуры
// процедура выгрузки
Процедура ВыгрузитьДанные(ИмяФайлаОбмена)
Обработка=Обработки.УниверсальныйОбменДаннымиXML.Создать();
Обработка.РежимОбмена="Выгрузка";
ВремФайл = ПолучитьИмяВременногоФайла("xml");
МакетПравилОбмена = ПолучитьМакет("ПравилаВыгрузки");
МакетПравилОбмена.Записать(ВремФайл);
Обработка.ИмяФайлаПравилОбмена = ВремФайл;//ФайлПравилОбмена;
Обработка.ЗагружатьДанныеВРежимеОбмена = Истина;
Обработка.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
Обработка.ЗапоминатьЗагруженныеОбъекты = Истина;
Обработка.ИспользоватьОтборПоДатеДляВсехОбъектов = Истина;
СписокДок = Новый Массив;
Для каждого Стр Из Документы Цикл
Если НЕ Стр.Флаг Тогда
Продолжить;
КонецЕсли;
СписокДок.Добавить(Стр.Реализация);
КонецЦикла;
Обработка.ДатаНачала = Дата;
Обработка.ДатаОкончания = КонецДня(Дата);
Обработка.ВыгружатьТолькоРазрешенные = Истина;
Обработка.ИмяФайлаОбмена = ИмяФайлаОбмена;
Обработка.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0; // 0 - не снимать регистрацию, 1 - снимать регистрацию
Обработка.ЗагрузитьПравилаОбмена();
Обработка.Параметры.Вставить("Документы",СписокДок);
Обработка.ВыполнитьВыгрузку();
КонецПроцедуры
Отбор по документам осуществляется с помощью параметра "Документы", описанного в правилах обмена.
При ЗАГРУЗКЕ используем следующий код:
Код 1C v 8.х ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.ИмяФайлаОбмена = ФайлЗагрузки;
ОбработкаОбмена.РежимОбмена = "Загрузка";
ОбработкаОбмена.ОткрытьФайлЗагрузки(Истина);
ОбработкаОбмена.АрхивироватьФайл = Ложь;;
ОбработкаОбмена.ВыполнитьЗагрузку();
ОбработкаОбмена = Неопределено;
Посмотрите по этой теме:
Обработка - Универсальный обмен данными в формате XML
Автоматическая выгрузка / загрузка данных используя Универсальный обмен данными в формате XML и Регламентное Задание
Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" Категория:
Обработки Программное использование универсальной обработки Выгрузка Загрузка Данных XML Для работы, необходимо взять
обработку "ВыгрузкаЗагрузкаДанныхXML" , которая находится в шаблоне "Конвертация данных".
Пример обработки(автор Misha Macklaud):
Скачивать файлы может только зарегистрированный пользователь!
а это ее код:
Код 1C v 8.х Процедура КнопкаВыполнитьНажатие(Кнопка)
ОбработкаОбмен = Обработки.ВыгрузкаЗагрузкаДанныхXML.Создать();
ОбработкаОбмен.Инициализация();
ОбработкаОбмен.ОбработанныхКонстант = 0;
ОбработкаОбмен.ОбработанныхНаборовЗаписей = 0;
//отметки выгрузки Документов
СписокОбъектовВыгрузки = Новый СписокЗначений;
СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.РеализацияТоваровУслуг);
СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.ПоступлениеТоваровУслуг);
СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.ТребованиеНакладная);
Для й=0 По СписокОбъектовВыгрузки.Количество()-1 Цикл
СтрокаВыгрузки = ОбработкаОбмен.ДеревоМетаданных.Строки.Найти(СписокОбъектовВыгрузки[й].Значение,"ОбъектМД",Истина);
СтрокаВыгрузки.Выгружать=1;
ОбработкаОбмен.ОбработкаИзмененияСостоянияВыгружать(СтрокаВыгрузки);
//отбор
Построитель = ОбработкаОбмен.ПодготовитьПостроительДляВыгрузки(СтрокаВыгрузки);
СписокСсылокВыгрузки = Новый СписокЗначений;
Для Каждого СтрокаТабДокументы Из ТабДокументы Цикл
Если (СтрокаТабДокументы.Документ.Метаданные() = СписокОбъектовВыгрузки[й].Значение) И (СтрокаТабДокументы.ФлагВыгружать) Тогда
СписокСсылокВыгрузки.Добавить(СтрокаТабДокументы.Документ.Ссылка);
КонецЕсли;
КонецЦикла;
Отбор = Построитель.Отбор;
Отбор.Добавить("Ссылка","Ссылка");
Отбор[0].Использование = Истина;
Отбор[0].ВидСравнения = ВидСравнения.ВСписке;
Отбор[0].Значение = СписокСсылокВыгрузки;
СтрокаВыгрузки.НастройкиПостроителя = Построитель.ПолучитьНастройки();
СтрокаВыгрузки.ИспользоватьОтбор = Истина;
КонецЦикла;
//отметки ОТМЕНЫ выгрузки Документов
СписокОбъектовВыгрузки.Очистить();
// СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.Заявка);
Для й=0 По СписокОбъектовВыгрузки.Количество()-1 Цикл
СтрокаВыгрузки = ОбработкаОбмен.ДеревоМетаданных.Строки.Найти(СписокОбъектовВыгрузки[й].Значение,"ОбъектМД",Истина);
СтрокаВыгрузки.ВыгружатьПриНеобходимости = 0;
ОбработкаОбмен.ОбработкаИзмененияСостоянияВыгружать(СтрокаВыгрузки);
КонецЦикла;
//отметки выгрузки Справочников
СписокОбъектовВыгрузки.Очистить();
СписокОбъектовВыгрузки.Добавить(Метаданные.Справочники.Номенклатура);
Для й=0 По СписокОбъектовВыгрузки.Количество()-1 Цикл
СтрокаВыгрузки = ОбработкаОбмен.ДеревоМетаданных.Строки.Найти(СписокОбъектовВыгрузки[й].Значение,"ОбъектМД",Истина);
СтрокаВыгрузки.Выгружать=1;
ОбработкаОбмен.ОбработкаИзмененияСостоянияВыгружать(СтрокаВыгрузки);
КонецЦикла;
ИмяФайлаЗагрузки = "D:\А-Б.xml";
ОбработкаОбмен.ВыполнитьЗагрузку(ИмяФайлаЗагрузки);
ИмяФайлаВыгрузки = "D:\Б-А.xml";
ОбработкаОбмен.ВыполнитьВыгрузку(ИмяФайлаВыгрузки);
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
Если НастройкаПериода.Редактировать() Тогда
НачПериода = НастройкаПериода.ПолучитьДатуНачала();
КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии()
НачПериода = ТекущаяДата();
КонПериода = ТекущаяДата();
КонецПроцедуры
Процедура ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ)
Запрос.Текст = "ВЫБРАТЬ
| ОбъектЗапроса.Ссылка
|ИЗ
| Документ."+ОбъектЗапроса+" КАК ОбъектЗапроса
|ГДЕ
| ОбъектЗапроса.ПометкаУдаления = ЛОЖЬ И
| ОбъектЗапроса.Дата МЕЖДУ &ДатаНач И &ДатаКон";
Запрос.УстановитьПараметр("ДатаНач",НачалоДня(НачПериода));
Запрос.УстановитьПараметр("ДатаКон",КонецДня(КонПериода));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Дата = Выборка.Ссылка.Дата;
НоваяСтрока.Документ = Выборка.Ссылка;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьНажатие(Элемент)
ТабДокументы.Очистить();
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Дата");
ТЗ.Колонки.Добавить("Документ");
Запрос = Новый Запрос;
Если флРеализация Тогда
ОбъектЗапроса = "РеализацияТоваровУслуг";
ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ);
КонецЕсли;
Если флПоступление Тогда
ОбъектЗапроса = "ПоступлениеТоваровУслуг";
ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ);
КонецЕсли;
Если флТребованиеНакладная Тогда
ОбъектЗапроса = "ТребованиеНакладная";
ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ);
КонецЕсли;
ТЗ.Сортировать("Дата");
Для Каждого Стр Из ТЗ Цикл
НоваяСтрока = ТабДокументы.Добавить();
НоваяСтрока.Документ = Стр.Документ;
НоваяСтрока.ФлагВыгружать = Истина;
КонецЦикла;
КонецПроцедуры
Категория:
Конвертация данных, Обмен, Перенос Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" Автоматизация обмена между базами используя обработку "Универсальный обмен данными в формате XML"
В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки "Универсальный обмен данными в формате XML" . Но предлагается вариант автоматизации решения задачи которая позволяет выполнять обмен неквалифицированным пользователям, либо по регламенту. Скажем такой обмен применим если вы не можите по ряду причин использовать РБД, либо совсем разные конфигурации баз (случаи бывают разные, а хочется максимально настраиваемой гибкости).
Вначале безусловно воспользуемся конфигурацией "Конвертация данных" чтобы создать необходимые нам правила обмена (как - это отдельная тема).
Итак Собственно сама ВЫГРУЗКА:
Код 1C v 8.х Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
Обработка.РежимОбмена = "Выгрузка";
Обработка.ВыводВОкноСообщенийИнформационныхСообщений = Истина;
При необходимости можно задать период выгрузки (как пример):
Обработка.ДатаНачала = ТекущаяДата();
Обработка.ДатаОкончания = ТекущаяДата();
Обработка.ИмяФайлаПравилОбмена = "D:\ПравилаОбменаДанными.xml";
Источник = ЭтотОбъект.Ссылка;
ИмяФайла = Строка(ТипЗнч(Источник)) + " " + Строка(Источник.Номер);
Обработка.ИмяФайлаОбмена = "D:\E\"+ Источник +".xml";
Обработка.ЗагрузитьПравилаОбмена();
Основные параметры мы определили, теперь надо настроить отбор, если в этом нет необходимости то просто запускаете выгрузку:
Обработка.ВыполнитьВыгрузку();
Настройка ОТБОРА:
Тут надо обратить внимание на массив "ВременнаяТаблицаПравил.Строки[1]" и в частности на индекс массива строк,
1 - это ветка "Справочники". Ну и так далее по аналогии
Код 1C v 8.х ВременнаяТаблицаПравил = Обработка.ТаблицаПравилВыгрузки.Скопировать();
Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[1].Строки Цикл
Наименование = СтрокаУровня2.Имя;
Если Наименование <> "ПеремещениеТоваров00001" Тогда
СтрокаУровня2.Включить = 0;
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[2].Строки Цикл
Наименование = СтрокаУровня2.Имя;
Если Наименование <> "ПеремещениеТоваров00001" Тогда
СтрокаУровня2.Включить = 0;
КонецЕсли;
КонецЦикла;
Сдесь вы определяете искомое правило выгрузки которое нужно оставить включенным на определенной ветке (сами можите варьировать чего и сколько)
Код 1C v 8.х Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл
Наименование = СтрокаУровня2.Имя;
Если Наименование = "ПеремещениеТоваров00001" Тогда
СтрокаУровня2.Включить = 1;
Иначе
СтрокаУровня2.Включить = 0;
КонецЕсли;
КонецЦикла;
Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();
Теперь настраиваем ОТБОР смысл которого передать в нашу выгрузку ссылку на документ(ты) который(е) хотим выгрузить:
Код 1C v 8.х Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл
Наименование = СтрокаУровня2.Имя;
Если Наименование = "ПеремещениеТоваров00001" Тогда
ТекущееПВД = СтрокаУровня2;
Построитель = Новый ПостроительОтчета;
Если ТекущееПВД.ИмяОбъектаДляЗапроса <> Неопределено Тогда
Построитель.Текст =
"ВЫБРАТЬ Разрешенные _.* ИЗ " + ТекущееПВД.ИмяОбъектаДляЗапроса + " КАК _
|
|
|{ГДЕ _.Ссылка.* КАК " + СтрЗаменить(ТекущееПВД.ИмяОбъектаДляЗапроса, ".", "_") + "}";
КонецЕсли;
Отбор = Построитель.Отбор;
Если Отбор.Найти("Документ_ПеремещениеТоваров") = Неопределено Тогда
Отбор.Добавить("Документ_ПеремещениеТоваров");
КонецЕсли;
Массив = Новый Массив;
Массив.Добавить(Тип("ДокументСсылка.ПеремещениеТоваров"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , );
Отбор["Документ_ПеремещениеТоваров"].Использование = Истина;
Отбор["Документ_ПеремещениеТоваров"].Значение = ЭтотОбъект.Ссылка;
Отбор["Документ_ПеремещениеТоваров"].ВидСравнения = ВидСравнения.Равно;
ДоступностьПостроителя = Истина;
Если Построитель.Отбор.Количество() > 0 Тогда
ТекущееПВД.НастройкиПостроителя = Построитель.ПолучитьНастройки();
ТекущееПВД.ИспользоватьОтбор = ИСТИНА;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();
Ну и собственно запускаем саму выгрузку и получаем файл для загрузки:
Код 1C v 8.х Обработка.АрхивироватьФайл = Истина;
Обработка.ВыполнитьВыгрузку();
Далее процесс загрузки:
Он довольно прост
Код 1C v 8.х МассивФайлов = НайтиФайлы("D:\E\", "*.zip");
Для Каждого Стм Из МассивФайлов Цикл
ТекстВопроса = "Загрузить - " + Стм.ПолноеИмя;
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да);
Если Ответ = КодВозвратаДиалога.Да Тогда
Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
Обработка.ИмяФайлаОбмена = Стм.ПолноеИмя;
Обработка.РежимОбмена = "Загрузка";
Обработка.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
Обработка.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
Обработка.ЗагружатьДанныеВРежимеОбмена = Истина;
Обработка.ВыполнитьЗагрузку();
УдалитьФайлы(Стм.ПолноеИмя);
КонецЕсли;
КонецЦикла;
Расширение .zip для файлов обмена пусть вас не смущает, обработка самостоятельно упакует .xml файл в архив:
Код 1C v 8.х Обработка.АрхивироватьФайл = Истина;
И также самостоятельно уже без дополнительных указаний распакует и загрузит. Это существенно уменьшает размеры файла обмена.
Категория:
Конвертация данных, Обмен, Перенос Автоматическая выгрузка загрузка данных используя регламентное задание Для обмена данными между программами необходимо сделать следующее:
1. При помощи Конвертации Данных создать правила выгрузки данных
2. Нужно чтобы в конфигурации была обработка
УниверсальныйОбменДаннымиXML , желательно последней версии!
(При помощи ее и созданных правил будут выгрузаться и заружаться данные)
3. В 1-вой базе Добавляем Регламентное задание:
Имя - Выгрузка
Использование - !(галочка)
Расписание настройте обязательно.
Имя метода - Общий модуль в котором процедура ВыгрузимИзЗУП():
Код 1C v 8.х //Выгрузка кадровых данных
Процедура ВыгрузимИзЗУП() Экспорт
Обработина = Обработки.УниверсальныйОбменДаннымиXML.Создать();
Обработина.РежимОбмена = "Выгрузка";
Обработина.ДатаНачала = НачалоДня(ДобавитьМесяц(ТекущаяДата(),-1));
Обработина.ДатаОкончания = КонецМесяца(ТекущаяДата());
Обработина.ИмяФайлаОбмена = "D:\ZUP_BUH_EXCH\Upload.xml";
Обработина.ИмяФайлаПравилОбмена = "D:\ZUP_BUH_EXCH\Zup-Buh.xml";
Обработина.ЗагрузитьПравилаОбмена();
Обработина.ВыполнитьВыгрузку();
КонецПроцедуры
4. Во 2-ой базе Добавляем Регламентное задание:
Имя - Загрузка
Использование - !(галочка)
Расписание настройте обязательно.
Имя метода - Общий модуль в котором процедура ЗагрузкаВБУХ():
Код 1C v 8.х Процедура ЗагрузкаВБУХ() Экспорт
Обработина = Обработки.УниверсальныйОбменДаннымиXML.Создать();
Обработина.ИмяФайлаОбмена = "D:\ZUP_BUH_EXCH\Upload.xml";
Обработина.РежимОбмена = "Загрузка";
Обработина.ОптимизированнаяЗаписьОбъектов = Истина;
Обработина.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
Обработина.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
Обработина.ЗагружатьДанныеВРежимеОбмена = Истина;
Обработина.ВыполнитьЗагрузку();
КонецПроцедуры
Категория:
Конвертация данных, Обмен, Перенос