Например, перед нами стоит задача передавать данные о новых элементах справочника "Номенклатура" из одной базы 1С в другую.
Попробуем сделать это с помощью правил, сформированных в конфигурации "Конвертация данных" и поставляемых с ней обработок экспорта и импорта данных (CDExport, CDImport). При этом конфигурация, из которой осуществляется экспорт данных, должна также иметь в своем составе обработку "ВыгрузкаДанныхИсполняющая" (ее можно найти в типовых конфигурациях).
Использование универсального механизма даст возможность легко управлять обменом и предусмотреть возможность его развития в будущем.
Прежде всего создаем правила обмена в конфигурации "Конвертация данных".
Для этого нужно выполнить следующие действия: создать конфигурации в базе "Конвертация данных", загрузить в них метаданные. Далее выполнить автозаполнение справочников, отметить флажком справочник "Номенклатура", записать данные.
В результате мы получим готовые правила, которые должны выглядеть как на картинке ниже. Записываем их.
Далее необходимо поместить файл правил в каталог ИБ-источника, туда же поместить обработку CDExport.ert.
Открываем файл с правилами для того чтобы узнать идентификатор для правил передачи справочника "Номенклатура".
Допустим, мы регистрируем товары, которые нужно передать, в текстовом файле "Goods.txt", который располагается в каталоге ИБ. Тогда код для вызова автоматической выгрузки будет выглядеть так.
ЛогФайл = СоздатьОбъект("Текст"); ИмяЛога = КаталогИБ() + "Goods.txt"; Если ФС.СуществуетФайл(ИмяЛога) = 1 Тогда ЛогФайл.Открыть(ИмяЛога); Иначе Предупреждение("Не найден файл " + ИмяЛога, 20); Возврат; КонецЕсли; Список = СоздатьОбъект("СписокЗначений"); Для Сч = 1 по ЛогФайл.КоличествоСтрок() Цикл ТекСтр = ЛогФайл.ПолучитьСтроку(Сч); Спр = СоздатьОбъект("Справочник.Номенклатура"); Если Спр.НайтиПоКоду(ТекСтр) = 0 Тогда Сообщить("Не найден товар с кодом " + ТекСтр); Продолжить; КонецЕсли; Список.ДобавитьЗначение(Спр.ТекущийЭлемент(), Спр.ТекущийЭлемент()); КонецЦикла; ФС.УдалитьФайл(ИмяЛога); Если Список.РазмерСписка() = 0 Тогда Возврат; КонецЕсли; Табл = СоздатьОбъект("ТаблицаЗначений"); Табл.НоваяКолонка("ИдПравила"); Табл.НоваяКолонка("СписокОбъектов"); Табл.НоваяСтрока(); Табл.ИДПравила = "Номенклатура_1С_0003390"; Табл.СписокОбъектов = Список; СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.Установить("ТаблицаОбъектов", Табл); СписокПараметров.Установить("ИмяФайлаПравил", КаталогИБ() + "Правила.xml"); СписокПараметров.Установить("ИмяФайлаДанных", КаталогИБ() + "CDData.xml"); СписокПараметров.Установить("ФормДатаНач", РабочаяДата()); СписокПараметров.Установить("ФормДатаКон", РабочаяДата()); СписокПараметров.Установить("ВыгружатьТолькоУказанные", 1); СписокПараметров.Установить("ФормФлНеВыгружатьБухИтоги", 1); СписокПараметров.Установить("БезОткрытияФормы", 1); ОткрытьФорму("Отчет", СписокПараметров, КаталогИБ() + "CDExport.ert");
Этот код можно разместить в процедуре, вызываемой по кнопке или в служебной обработке, которая будет выполняться по расписанию. В тексте обработки в предупреждениях установим таймаут, т. к. нажимать кнопку будет некому.
Далее нам необходимо немного поменять код в обработке CDImport.ert, для того чтобы она также отрабатывала автоматически.
В конце текста процедуры ПриОткрытии() напишем:
СписокПараметров = Форма.Параметр; Если ПустоеЗначение(СписокПараметров) = 1 Тогда Возврат; КонецЕсли; ФормИмяФайлаДанных = СписокПараметров.Получить("ИмяФайлаДанных"); ФормФлЗапоминатьСсылки = СписокПараметров.Получить("ЗапоминатьСсылки"); БезОткрытияФормы = СписокПараметров.Получить("БезОткрытияФормы"); Если БезОткрытияФормы = 1 Тогда ЗагрузитьДанные(); СтатусВозврата(0); КонецЕсли;
В этой обработке также в предупреждениях установим таймаут:
Предупреждение("Загрузка завершена! |Обработано объектов: " + Строка(гСчетчикЗагруженныхОбъектов-1), 20);
Осталось в принимающей конфигурации разместить код, который будет вызывать обработку CDImport.ert, размещенную также в каталоге ИБ. В моем случае в конфигурацию добавлена константа КаталогОбмена. В ней содержится путь к каталогу базы-источника.
СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.Установить("ИмяФайлаДанных", СокрЛП(Константа.КаталогОбмена) + "CDData.xml"); СписокПараметров.Установить("ЗапоминатьСсылки", 1); СписокПараметров.Установить("БезОткрытияФормы", 1); ОткрытьФорму("Отчет", СписокПараметров, КаталогИБ() + "CDImport.ert");
Вот и все, задача выполнена.