УФ. Программное создание "УниверсалныйОбменДаннымиXML"

1. Zundell 21.04.22 12:51 Сейчас в теме
Добрый день!

Просьба открыть немножко глаза, запутался. Задача в целом простая: При помощи обработки "УниверсалныйОбменДаннымиXML" по расписанию выгружать данные. БП 3.0. Пока бьюсь, сделал по кнопке.

Таким способом элементов выгружает ровно 0. Если открывать "УниверсалныйОбменДаннымиXML" интерактивно, по данным правилам все выгружается четко, как нужно.



Модуль внешней обработки:

Процедура Выгрузить() Экспорт
	
	Обработка = СоздатьИнициализироватьОбработкуВыгрузки();
	
	Попытка
		Обработка.ВыполнитьВыгрузку();
	Исключение
		Строка = "Выгрузка не выполнена ";
		Сообщить(Строка);
	КонецПопытки;
	
КонецПроцедуры	

Функция СоздатьИнициализироватьОбработкуВыгрузки()
	
	ИмяВременногоФайлаОбработкиОбмена = ПолучитьИмяВременногоФайла("epf"); 
	ДвоичныеДанные = ПолучитьМакет("УниверсальныйОбменДаннымиXML");
	ДвоичныеДанные.Записать(ИмяВременногоФайлаОбработкиОбмена);
	ОбработкаВыгрузки = ВнешниеОбработки.Создать(ИмяВременногоФайлаОбработкиОбмена,ложь);
	
	ЗаполнитьНастройкиУниверсальногоОбмена(ОбработкаВыгрузки);
	
	Возврат ОбработкаВыгрузки;
	
КонецФункции

Процедура ЗаполнитьНастройкиУниверсальногоОбмена(ОбработкаВыгрузки)
	
	ДвоичныеДанные = ПолучитьМакет("ПравилаОбменаXML");
	ИмяВременногоФайла	= ПолучитьИмяВременногоФайла("xml"); 
	ДвоичныеДанные.Записать(ИмяВременногоФайла);
	
	ОбработкаВыгрузки.ИмяФайлаПравилОбмена = ИмяВременногоФайла;
	ОбработкаВыгрузки.ЗагрузитьПравилаОбмена(ИмяВременногоФайла);
	
	ОбработкаВыгрузки.ИмяФайлаОбмена = "\\serv1c8\BSO-BU\Файл_выгрузки_Документы.xml";
	
КонецПроцедуры
Показать


Модуль формы:

&НаСервере
Процедура ВыполнитьВыгрузкуНаСервере()
	
	Об = РеквизитФормыВЗначение("Объект");
	Об.Выгрузить();

КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьВыгрузку(Команда)
	
	ВыполнитьВыгрузкуНаСервере();
	 
КонецПроцедуры
Показать



В ПравилаОбмена выгружаю контрагентов зарегистрированных в ПланеОбмена:

Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. PhoenixAOD 62 22.04.22 08:15 Сейчас в теме
4. Zundell 22.04.22 11:10 Сейчас в теме
(3) Гуглить умею, спасибо за совет.
2. orlin553 22.04.22 08:09 Сейчас в теме
Если ты в регламентном задании делаешь то тебе файл правил надо загружать.

Пример вот так
Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
	Обработка.ИмяФайлаОбмена          = ПолучитьИмяВременногоФайла(".xml");	
	Обработка.РежимОбмена	 		  = ИдентификаторКоманды;

	ДвоичныеДанные = ВернутьДвоичныеДанныеПравил(УзелОбмена);
	Если ДвоичныеДанные = Неопределено Тогда
	    ЗаписьВЖурналаРегистрации("Не удалось получить правила обмена из регистра по узлу "+СокрЛП(УзелОбмена.Наименование), ИдентификаторКоманды);
		Возврат Ложь;
	КонецЕсли;
	
	Обработка.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0;//Не Удалять
	Обработка.ЭтоИнтерактивныйРежим = Ложь;
	Обработка.мБылиПрочитаныПравилаОбменаПриЗагрузке = Ложь;
	
	ТД = Новый ТекстовыйДокумент;
	Попытка
		ТД.Прочитать(ДвоичныеДанные.ОткрытьПотокДляЧтения());
		Обработка.ЗагрузитьПравилаОбмена(ТД.ПолучитьТекст(),"Строка");
	Исключение
		ЗаписьВЖурналаРегистрации("Ошибка загрузки правил."+Символы.ПС+ОписаниеОшибки(), ИдентификаторКоманды);
		Возврат Ложь;
	КонецПопытки;	

	Для Каждого СтрокаВПД Из Обработка.ТаблицаПравилВыгрузки.Строки Цикл
		УстановитьУзелОбменаУСтрокДерева(Обработка.ТаблицаПравилВыгрузки.Строки, УзелОбмена);
	КонецЦикла;
	
	Обработка.ИмяФайлаПравилОбмена    =  "НельзяОставлятьПустым";
	Обработка.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления = Ложь;
        НомерОтправленного = УзелОбмена.НомерОтправленного + 1;
	НомерПринятого	   = УзелОбмена.НомерПринятого;

	Обработка.ВыполнитьВыгрузку();

Показать
5. Zundell 22.04.22 11:13 Сейчас в теме
(2) Правила загружаются:

ДвоичныеДанные = ПолучитьМакет("ПравилаОбменаXML");
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
ДвоичныеДанные.Записать(ИмяВременногоФайла);

ОбработкаВыгрузки.ИмяФайлаПравилОбмена = ИмяВременногоФайла;
ОбработкаВыгрузки.ЗагрузитьПравилаОбмена(ИмяВременногоФайла);

чувствую упустил какие-то нюансы именно с выгрузкой в фоне...не могу понят только какие
6. orlin553 22.04.22 12:07 Сейчас в теме +0.9 $m
(5)
Вот так загружаешь правила
ДвоичныеДанные = ПолучитьМакет("ПравилаОбменаXML");
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
ДвоичныеДанные.Записать(ИмяВременногоФайла);

ТД = Новый ТекстовыйДокумент;
    Попытка
        ТД.Прочитать(ДвоичныеДанные.ОткрытьПотокДляЧтения());
        Обработка.ЗагрузитьПравилаОбмена(ТД.ПолучитьТекст(),"Строка");
    Исключение
        ЗаписьВЖурналаРегистрации("Ошибка загрузки правил."+Символы.ПС+ОписаниеОшибки(), ИдентификаторКоманды);
    КонецПопытки;
Показать


Теперь делаем загрузку

Для Каждого СтрокаВПД Из Обработка.ТаблицаПравилВыгрузки.Строки Цикл
        УстановитьУзелОбменаУСтрокДерева(Обработка.ТаблицаПравилВыгрузки.Строки, УзелОбмена);
    КонецЦикла;


Процедура УстановитьУзелОбменаУСтрокДерева
Процедура УстановитьУзелОбменаУСтрокДерева(Дерево, УзелОбмена)
	Для Каждого Строка Из Дерево Цикл	
		Если Строка.ЭтоГруппа Тогда	
			УстановитьУзелОбменаУСтрокДерева(Строка.Строки, УзелОбмена);	
		Иначе
			Если Строка.СпособОтбораДанных = "ПроизвольныйАлгоритм" Тогда Продолжить; КонецЕсли;
			Строка.СсылкаНаУзелОбмена = УзелОбмена;	
		КонецЕсли;	
	КонецЦикла;
КонецПроцедуры
Показать


И выполняем

Обработка.ВыполнитьВыгрузку()


Примерно так...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот