gifts2017

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

Опубликовал Олег Голубев (ollega) в раздел Обмен - Обмен через 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)\1cv82\common\1cestart.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)\1cv82\common\1cestart.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)\1cv82\common\1cestart.exe" ENTERPRISE /S"Server1C/DataBase" /N"РоботОбменаДанными" /P"pass" /DisableStartupMessages /RunModeManagedApplication /Execute"C:\Inbox\ОлегА\ОбменДанными.epf" /C"Выгрузка"
Пояснения:
а) C:\Program Files (x86)\1cv82\common\1cestart.exe - ваш путь к стартеру 1С
б) Server1C/DataBase - ваш сервер на котором находится база и имя самой базы из которой выгружаем данные.
Остальные параметры аналогичны файловому варианту bat файла

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

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ОбменДаннымУО.7z
.7z 190,63Kb
27.05.14
77
.7z 190,63Kb 77 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Лыткин (TrinitronOTV) 27.05.14 19:57
в чем различие между двумя файлами, предложенными для скачивания?
2. Олег Голубев (ollega) 28.05.14 04:31
3. vampiroid vampiroid (vampiroid) 30.12.14 04:53
Где прописан путь к файлу Правил обмена?
4. Олег Голубев (ollega) 30.12.14 08:14
(3) vampiroid, ОбработкаОбмена.ИмяФайлаПравилОбмена должно быть. Но я просто в режиме предприятия выбирал файл правил обмена и путь к нему сохранялся по умолчанию.
5. vampiroid vampiroid (vampiroid) 09.01.15 04:10
(4) ollega, В моем случае, после загрузки правил обмена, помимо даты начала и окончания, необходимо выставить флаги что именно выгружать. Например, флаг "Выгружать документы". Подскажите пожалуйста, как это прописать в обработке.
6. Максим Бурляев (maks_20) 03.03.16 17:10
Каким образом производится отправка обратной квитанции с подтверждением загрузки? Ведь если не снимать регистрацию с узла, то рано или поздно там накопится очень много объектов. Если этот механизм добавить получится более универсальное решение.
7. Алексей Андреев (Saldor) 20.04.16 03:06
8. Алексей Андреев (Saldor) 20.04.16 03:07
9. Олег Голубев (ollega) 20.04.16 13:34
(8) Saldor, посмотри на каракули в своём скрине. Следовательно с кодировкой у тебя проблемы. Следовательно надо bat-ник делать в кодировке OEM
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа