Что необходимо для автоматического обмена данными, без внесения изменений в конфигурацию:
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 часа к примеру.
в чем различие между двумя файлами, предложенными для скачивания?
Удалил лишний.
Где прописан путь к файлу Правил обмена?
(3) vampiroid, ОбработкаОбмена.ИмяФайлаПравилОбмена должно быть. Но я просто в режиме предприятия выбирал файл правил обмена и путь к нему сохранялся по умолчанию.
(4) ollega, В моем случае, после загрузки правил обмена, помимо даты начала и окончания, необходимо выставить флаги что именно выгружать. Например, флаг «Выгружать документы». Подскажите пожалуйста, как это прописать в обработке.
Каким образом производится отправка обратной квитанции с подтверждением загрузки? Ведь если не снимать регистрацию с узла, то рано или поздно там накопится очень много объектов. Если этот механизм добавить получится более универсальное решение.
Запускаю bat, выдает:
Что, делать?
(8) Saldor, посмотри на каракули в своём скрине. Следовательно с кодировкой у тебя проблемы. Следовательно надо bat-ник делать в кодировке OEM
Олег Голубев, Тыж мой герой )
(6) в типовой обработке универсального обмена нет этой возможности, вмоей есть все, но она платная, зато полный комплект с выборкой изменений по узлам, чисткой планов обмена, отправкой и принятием квитанций + хранение правил обмена в отдельном справочнике в виде дерева правил, в общем полный набор всех возможностей
Спасибо, очень помогла методика. Правда немного допилил в плане получения правил обмена из макета. Ну и версию платформы тоже пришлось явно указать для СОМ-соединения с базой-приемником.
Интересно, это можно заставить работать в качестве регламентного задания?
А подскажите куда собственно говоря подгрузить правила обмена в обработке? В скаченном варианте ничего нет. Или я что то не понял? Спасибо.
(13)Вопрос снят!
Спасибо. Скачал, чтобы поддержать 🙂
(12)
да. в регламентные самые то, буквально не давно разобрался. если нужно скину код.
(16) Было бы чудесно
(18) Спасибо!
Дружище, спасибо тебе за мануал. Для управляемых форм слегка допилил. поместил в обработку с режимом запуска «Вызов серверного метода» и обмен работает по регламенту.
(20)Можешь дать твою допиленную обработку?
(20)Не поделитесь обработкой?
(21) Вот обработка. по коду посмотри, там у меня авторизация идет к базе из собственного справочника. Ну и передается массив измененных документов в правила, я не пользовался планами обмена. Думаю разберешся
(22) Ответил в (23)
(23)Спасибо, посмотрю
(18) Добрый день, можете еще раз прикрепить обработку (не скачивается) / отравить сообщением. Спасибо!
Подскажите, в управляемом приложении на код в модуле объекта (который в публикации) выводятся ошибки:
{ВнешняяОбработка.ОбменДанными.МодульОбъекта(1,6)}: Переменная не определена (ПараметрЗапуска)
Если <<?>>ПараметрЗапуска = «Vigr» Тогда (Проверка: Сервер)
<<?>>ЗавершитьРаботуСистемы(Ложь); (Проверка: Сервер)
{ВнешняяОбработка.ОбменДанными.МодульОбъекта(96,5)}: Процедура или функция с указанным именем не определена (ЗавершитьРаботуСистемы)
<<?>>ЗавершитьРаботуСистемы(Ложь); (Проверка: Сервер)
Подскажите, что нужно доработать для управляемого приложения, чтобы не возникало ошибок в модуле объекта по коду из публикации?