Автоматический обмен данными с помощью обработки "Универсальный обмен данными в формате XML", без изменения конфигурации.

Данный способ автоматического обмена хорошо подходит для обмена данными как между типовыми (если есть готовые правила обмена) так и доработанными конфигурациями. Однажды потратил некоторое время на выявление необходимых параметров, чтобы можно было выгружать данные без открытия формы обработки "Универсальный обмен данными" Вам, теперь, меньше придётся думать… Загрузка тоже присутствует. Механизм подходит как для серверной так и для файловой базы. Изменения в конфигурацию вносить не придётся. Но не реализован контроль на ошибки при загрузке/выгрузке данных.

 

Что необходимо для автоматического обмена данными, без внесения изменений в конфигурацию:
1) Обработка «Универсальный обмен данными в формате XML», которая входит в состав большинства типовых конфигураций. Если её там не оказалось, то её легко найти на диске ИТС или на просторах интернета. В конфигурации она обзывается «УниверсальныйОбменДаннымиXML»
2) Правила обмена данными. Создаются с помощью «Конвертации данных». Работу с которой вам придётся освоить. Есть и видеокурсы и учебные пособия. Например: http://programmist1s.ru/wp-content/uploads/2013/06/Konvertatsiya_dannyih._Metodika_rabotyi_i_primeryi.pdf
3) Внешняя обработка, содержащая процедуры загрузки/выгрузки. Займемся её созданием:
Создаётся внешняя обработка в модуле объекта которой будет нижеприведённый текст (подставляете свои данные по базам и пользователям). Желательно создать отдельного пользователя с полными правами для обмена данными. Назовём обработку, к примеру, «ОбменДанными.epf».

 

Если ПараметрЗапуска = "Выгрузка" Тогда
Обработка=Обработки.УниверсальныйОбменДаннымиXML.Создать();

//Задаём необходимые для выгрузки параметры (необязательные для редактирования)
Обработка.РежимОбмена="Выгрузка";
Обработка.ЗагружатьДанныеВРежимеОбмена=Истина;
Обработка.ЗаписыватьРегистрыНаборамиЗаписей=Истина;
Обработка.ЗапоминатьЗагруженныеОбъекты=Истина;
Обработка.ИспользоватьОтборПоДатеДляВсехОбъектов=Истина;
Обработка.ВыгружатьТолькоРазрешенные=Истина;
//!Задали необходимые параметры для выгрузки

//Данные параметры необходимо перезаполнить ОБЯЗАТЕЛЬНО

//Устанавливаем ограничения на выгрузку по датам объектов
Обработка.ДатаНачала = ТекущаяДата() - 60*60*24*2;
Обработка.ДатаОкончания = '00010101';

//Если хотим выгружать данные в файл - ставим Ложь, Если Истина - будет произведена выгрузка в базу-приёмник
Обработка.НепосредственноеЧтениеВИБПриемнике=Истина;

//Если база-приёмник выгружаемых данных является серверной, то Ложь. Если файловая - Истина
Обработка.ТипИнформационнойБазыДляПодключения=Истина;

//!Обязательные параметры перезаполнили

//Если выгружаем данные в файл
Если Не Обработка.НепосредственноеЧтениеВИБПриемнике Тогда
Обработка.ИмяФайлаОбмена = "C:InboxОлегАКонвертациявыгрузка.xml";

//Если выгружаем даннные в базу
Иначе
Обработка.ПарольИнформационнойБазыДляПодключения="Админ";
Обработка.ПользовательИнформационнойБазыДляПодключения="суперкрутой";
Обработка.АутентификацияWindowsИнформационнойБазыДляПодключения=Ложь;
//Если приёмник данных - серверная база
Если Обработка.ТипИнформационнойБазыДляПодключения = Ложь Тогда
Обработка.ИмяСервераИнформационнойБазыДляПодключения="MainServ";
Обработка.ИмяИнформационнойБазыНаСервереДляПодключения="Buhia";
//Если приёмник данных - файловая база
Иначе
Обработка.ВерсияПлатформыИнформационнойБазыДляПодключения="V82";
Обработка.КаталогИнформационнойБазыДляПодключения ="C:InboxОлегАКлиентыЗевс БП20Зевс БП20";
КонецЕсли;
КонецЕсли;

//Действия над регистрацией при выгрузке по планам обмена
Обработка.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки=0;
// 0 - не снимать регистрацию,
// 1 - снимать регистрацию

Обработка.ЗагрузитьПравилаОбмена();

//ЕСЛИ НУЖНО ВЫГРУЖАТЬ ПО ПЛАНАМ ОБМЕНА, ТО ВКЛЮЧАЕМ ЭТОТ БЛОК И ПОДСТАВЛЯЕМ СВОЙ УЗЕЛ ПЛАНА ОБМЕНА
//Для Каждого Стр Из Обработка.ТаблицаПравилВыгрузки.Строки Цикл
// Стр.Включить=1;
// Для Каждого Стр1 Из Стр.Строки Цикл
//  Стр1.Включить=1;
//  Стр1.СсылкаНаУзелОбмена=ПланыОбмена.Полный.НайтиПоКоду("БП20");
// КонецЦикла;
//КонецЦикла;

Обработка.ВыполнитьВыгрузку();
ЗавершитьРаботуСистемы(Ложь);

ИначеЕсли ПараметрЗапуска  = "Загрузка" Тогда

ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.ИмяФайлаОбмена = "C:InboxОлегАВыгрузка.xml";
ОбработкаОбмена.РежимОбмена = "Загрузка";
ОбработкаОбмена.ОткрытьФайлЗагрузки(Истина);
ОбработкаОбмена.АрхивироватьФайл = Ложь;
ОбработкаОбмена.ВыполнитьЗагрузку();
ОбработкаОбмена = Неопределено;
ЗавершитьРаботуСистемы(Ложь);

КонецЕсли;

 

4) Bat файл выгрузки, который будет запускать 1с и внешнюю обработку с параметром запуска под пользователем, который предназначен для обмен данными. Файл необходимо создать к примеру в notepad++ с кодировкой OEM(MS-Dos), иначе работать не будет. Файл назовём, например «BatVygruz.bat». Текст будет следующим:

Если база файловая:
«C:Program Files (x86)1cv82common1cestart.exe» ENTERPRISE /F»C:InboxКБФ1Cv8_Base_8.1Зевс 83 БП3Зевс 83 БП3″ /N»РоботОбменаДанными» /P»pass» /DisableStartupMessages /RunModeManagedApplication /Execute»C:InboxОлегАОбменДанными.epf» /C»Выгрузка»
Пояснения:
а) C:Program Files (x86)1cv82common1cestart.exe — ваш путь к стартеру 1С
б) C:InboxКБФ1Cv8_Base_8.1Зевс 83 БП3Зевс 83 БП3 — ваш путь к файловой базе, из которой будем выгружать данные
в) РоботОбменаДанными — Имя пользователя, под которым запускам 1С для обмена данными
г) pass — пароль пользователя
д) /DisableStartupMessages — закрываем всплывающие окна при старте 1С
е) /RunModeOrdinaryApplication — запуск в обычном режиме толстый клиент
ж) C:InboxОлегАОбменДанными.epf — путь к нашей обработке, которая запустится при старте
з) Выгрузка — передаём параметр запуска 1С, сообщает, что надо выгружать данные

Если база серверная:
«C:Program Files (x86)1cv82common1cestart.exe» ENTERPRISE /S»Server1C/DataBase» /N»РоботОбменаДанными» /P»pass» /DisableStartupMessages /RunModeManagedApplication /Execute»C:InboxОлегАОбменДанными.epf» /C»Выгрузка»
Пояснения:
а) C:Program Files (x86)1cv82common1cestart.exe — ваш путь к стартеру 1С
б) Server1C/DataBase — ваш сервер на котором находится база и имя самой базы из которой выгружаем данные.
Остальные параметры аналогичны файловому варианту bat файла

5) Bat файл загрузки (при необходимости). Если вы решили выгружать данные в файл, а не напрямую в базу. То этот пункт нам тоже понадобится (обычно необходим).
Создание Bat файла загрузки аналогично файлу выгрузки, но отличается лишь параметр запуска, вместо «Выгрузка», мы ставим «Загрузка»

6) Задать расписание запуска наших Bat файлов загрузки/выгрузки на сервере. Для этого надо зайти в администрирование панели управления на сервере и в планировщике заданий создать новое задание запуска файла выгрузки на 23 часа каждый день и задание на загрузку с указанием Bat файла загрузки(если надо) на 04 часа к примеру.

27 Comments

  1. TrinitronOTV

    в чем различие между двумя файлами, предложенными для скачивания?

    Reply
  2. ollega

    Удалил лишний.

    Reply
  3. vampiroid

    Где прописан путь к файлу Правил обмена?

    Reply
  4. ollega

    (3) vampiroid, ОбработкаОбмена.ИмяФайлаПравилОбмена должно быть. Но я просто в режиме предприятия выбирал файл правил обмена и путь к нему сохранялся по умолчанию.

    Reply
  5. vampiroid

    (4) ollega, В моем случае, после загрузки правил обмена, помимо даты начала и окончания, необходимо выставить флаги что именно выгружать. Например, флаг «Выгружать документы». Подскажите пожалуйста, как это прописать в обработке.

    Reply
  6. maks_20

    Каким образом производится отправка обратной квитанции с подтверждением загрузки? Ведь если не снимать регистрацию с узла, то рано или поздно там накопится очень много объектов. Если этот механизм добавить получится более универсальное решение.

    Reply
  7. Saldor

    Запускаю bat, выдает:

    Reply
  8. Saldor

    Что, делать?

    Reply
  9. ollega

    (8) Saldor, посмотри на каракули в своём скрине. Следовательно с кодировкой у тебя проблемы. Следовательно надо bat-ник делать в кодировке OEM

    Reply
  10. CMK0001

    Олег Голубев, Тыж мой герой )

    Reply
  11. Pro-tone

    (6) в типовой обработке универсального обмена нет этой возможности, в моей есть все, но она платная, зато полный комплект с выборкой изменений по узлам, чисткой планов обмена, отправкой и принятием квитанций + хранение правил обмена в отдельном справочнике в виде дерева правил, в общем полный набор всех возможностей

    Reply
  12. brrart

    Спасибо, очень помогла методика. Правда немного допилил в плане получения правил обмена из макета. Ну и версию платформы тоже пришлось явно указать для СОМ-соединения с базой-приемником.

    Интересно, это можно заставить работать в качестве регламентного задания?

    Reply
  13. palax

    А подскажите куда собственно говоря подгрузить правила обмена в обработке? В скаченном варианте ничего нет. Или я что то не понял? Спасибо.

    Reply
  14. palax

    (13)Вопрос снят!

    Reply
  15. mrflatcher

    Спасибо. Скачал, чтобы поддержать 🙂

    Reply
  16. 127.0.0.0

    (12)

    да. в регламентные самые то, буквально не давно разобрался. если нужно скину код.

    Reply
  17. brrart

    (16) Было бы чудесно

    Reply
  18. 127.0.0.0
    Reply
  19. brrart

    (18) Спасибо!

    Reply
  20. kotlovD

    Дружище, спасибо тебе за мануал. Для управляемых форм слегка допилил. поместил в обработку с режимом запуска «Вызов серверного метода» и обмен работает по регламенту.

    Reply
  21. vis_tmp

    (20)Можешь дать твою допиленную обработку?

    Reply
  22. chg

    (20)Не поделитесь обработкой?

    Reply
  23. kotlovD

    (21) Вот обработка. по коду посмотри, там у меня авторизация идет к базе из собственного справочника. Ну и передается массив измененных документов в правила, я не пользовался планами обмена. Думаю разберешся

    Reply
  24. kotlovD

    (22) Ответил в (23)

    Reply
  25. vis_tmp

    (23)Спасибо, посмотрю

    Reply
  26. graphbuh

    (18) Добрый день, можете еще раз прикрепить обработку (не скачивается) / отравить сообщением. Спасибо!

    Reply
  27. mirrr

    Подскажите, в управляемом приложении на код в модуле объекта (который в публикации) выводятся ошибки:

    {ВнешняяОбработка.ОбменДанными.МодульОбъекта(1,6)}: Переменная не определена (ПараметрЗапуска)

    Если <<?>>ПараметрЗапуска = «Vigr» Тогда (Проверка: Сервер)

    <<?>>ЗавершитьРаботуСистемы(Ложь); (Проверка: Сервер)

    {ВнешняяОбработка.ОбменДанными.МодульОбъекта(96,5)}: Процедура или функция с указанным именем не определена (ЗавершитьРаботуСистемы)

    <<?>>ЗавершитьРаботуСистемы(Ложь); (Проверка: Сервер)

    Подскажите, что нужно доработать для управляемого приложения, чтобы не возникало ошибок в модуле объекта по коду из публикации?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *