КД: Передача параметров из выгрузки в загрузку (в т.ч. и на ранние стадии) при обмене из 7.7 в 8.х Кратко суть проблемы можно озвучить цитатой из документации: "Передача параметра из источника в приемник доступна только при обмене между информационными базами на платформе 1С:Предприятие 8".
Ниже излагается способ передачи глобальных параметров при таком обмене без правки выгруженного из КД 2 модуля выгрузки и без правки самой КД 2.
Итак, в обработчике ПередВыгрузкойДанных пишем код:
Код 1C v 8.2 УП УзелПарам= СоздатьУзел( "ЗначениеПараметра" ) ;
УстановитьАтрибут( УзелПарам, "Имя" , "НашПараметр1" ) ;
УстановитьАтрибут( УзелПарам, "Тип" , "Строка" ) ;
ЗаписатьЭлемент( УзелПарам, "Значение" , "Значение нашего параметра 1" ) ;
ДобавитьПодчиненный( rootNode, УзелПарам) ;
УзелПарам= СоздатьУзел( "ЗначениеПараметра" ) ;
УстановитьАтрибут( УзелПарам, "Имя" , "НашПараметр2" ) ;
УстановитьАтрибут( УзелПарам, "Тип" , "Булево" ) ;
ЗаписатьЭлемент( УзелПарам, "Значение" , "true" ) ;
ДобавитьПодчиненный( rootNode, УзелПарам) ;
после этого данные параметры будут абсолютно штатно загружены в стандартной обработке "Универсальный обмен данными в формате XML (2.1.5)".
Ещё хотелось бы заметить, что содержимое обработчика ПослеЗагрузкиПараметров при таком обмене также не выгружается в файл обмена. Исправить данную оплошность можно так же, записав в обработчике ПередВыгрузкойДанных
Код 1C v 8.2 УП АлгПослеЗагрузкиПараметров=
"СтрокаКода1;" + РазделительСтрок+
"СтрокаКода2;" + РазделительСтрок+
"СтрокаКода3;" ;
ЗаписатьЭлемент( rootNode, "АлгоритмПослеЗагрузкиПараметров" , АлгПослеЗагрузкиПараметров) ;
Нюанс : чтобы иметь параметры на ранних стадиях загрузки, например, в обработчиках ПередЗагрузкойДанных или ПередОбработкой в ПОД (правилах очистки данных), нужно помещать выгружаемые параметры в корень узла с выгружаемыми данными:
Код 1C v 8.2 УП ИмяПараметра= "НашПараметр1" ;
ТипПараметра= "Строка" ;
ЗначениеПараметра= "Значение нашего параметра 1" ;
УзелПравил= rootNode. getElementsByTagName( "ПравилаОбмена" ) . item( 0 ) ;
УзелПередЗагрузкой= УзелПравил. getElementsByTagName( "ПередЗагрузкойДанных" ) . item( 0 ) ;
КоллУзлов= УзелПередЗагрузкой. childNodes;
Для НомУзла= 0 По КоллУзлов. length- 1 Цикл
ТекУзел= КоллУзлов. item( НомУзла) ;
Если ( ТекУзел. nodeType= 3 ) Тогда
ТекУзел. nodeValue= РазделительСтрок+ "Параметры." + ИмяПараметра+ "=" + ? ( ТипПараметра= "Строка" , """ " , "" ) +
ЗначениеПараметра+ ? ( ТипПараметра= "Строка" , """ " , "" ) + ";" + РазделительСтрок+ РазделительСтрок+
ТекУзел. nodeValue;
Прервать ;
КонецЕсли ;
КонецЦикла ;
Автор: andrewks - Источник
Категория:
Конвертация данных, Обмен, Перенос Написании Выгрузки и Загрузки Данных используя Универсальный обмен данными в формате XML Написании обработок для выгрузки и загрузки данных используя методы обработки "Универсальный обмен данными в формате xml"
Принцип работы:
При изменении даты в форме, табличное поле заполняется документами за выбранную дату.
Сами правила обмена были вставлены в обработку как макет с типом "Двоичные данные".
При ВЫГРУЗКЕ используется код:
Код 1C v 8.х Процедура ДействияФормыВыгрузка(Кнопка)
ДиалогФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
ДиалогФайла. Фильтр = "Файл данных (*.xml)|*.xml" ;
ДиалогФайла. ПолноеИмяФайла = "Retail_" + СтрЗаменить( Формат( Дата, "ДФ=dd.MM.yyyy" ) , "." , "-" ) ;
Если ДиалогФайла. Выбрать( ) Тогда
ИмяФайла = ДиалогФайла. ПолноеИмяФайла;
Попытка
ВыгрузитьДанные( ИмяФайла) ;
ДвоичныеДанные = Новый ДвоичныеДанные( ИмяФайла) ;
ДвоичныеДанные. Записать( ИмяФайла) ;
Исключение
Предупреждение( "Внешний файл не сохранен
|" + ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецЕсли ;
КонецПроцедуры
Процедура ВыгрузитьДанные(ИмяФайлаОбмена)
Обработка= Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
Обработка. РежимОбмена= "Выгрузка" ;
ВремФайл = ПолучитьИмяВременногоФайла( "xml" ) ;
МакетПравилОбмена = ПолучитьМакет( "ПравилаВыгрузки" ) ;
МакетПравилОбмена. Записать( ВремФайл) ;
Обработка. ИмяФайлаПравилОбмена = ВремФайл;
Обработка. ЗагружатьДанныеВРежимеОбмена = Истина ;
Обработка. ЗаписыватьРегистрыНаборамиЗаписей = Истина ;
Обработка. ЗапоминатьЗагруженныеОбъекты = Истина ;
Обработка. ИспользоватьОтборПоДатеДляВсехОбъектов = Истина ;
СписокДок = Новый Массив;
Для каждого Стр Из Документы Цикл
Если НЕ Стр. Флаг Тогда
Продолжить;
КонецЕсли ;
СписокДок. Добавить( Стр. Реализация) ;
КонецЦикла ;
Обработка. ДатаНачала = Дата;
Обработка. ДатаОкончания = КонецДня( Дата) ;
Обработка. ВыгружатьТолькоРазрешенные = Истина ;
Обработка. ИмяФайлаОбмена = ИмяФайлаОбмена;
Обработка. ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0 ;
Обработка. ЗагрузитьПравилаОбмена( ) ;
Обработка. Параметры. Вставить( "Документы" , СписокДок) ;
Обработка. ВыполнитьВыгрузку( ) ;
КонецПроцедуры
Отбор по документам осуществляется с помощью параметра "Документы", описанного в
правилах обмена.
При ЗАГРУЗКЕ используем следующий код:
Код 1C v 8.х ОбработкаОбмена = Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
ОбработкаОбмена. ИмяФайлаОбмена = ФайлЗагрузки;
ОбработкаОбмена. РежимОбмена = "Загрузка" ;
ОбработкаОбмена. ОткрытьФайлЗагрузки( Истина ) ;
ОбработкаОбмена. АрхивироватьФайл = Ложь ; ;
ОбработкаОбмена. ВыполнитьЗагрузку( ) ;
ОбработкаОбмена = Неопределено ;
Посмотрите по этой теме:
Обработка - Универсальный обмен данными в формате XML
Автоматическая выгрузка / загрузка данных используя Универсальный обмен данными в формате XML и Регламентное Задание
Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" Категория:
Обработки Как вывести всплывающее сообщение пользователю? В 8.2 нужно воспользоваться функцией ПоказатьОповещениеПользователя
Код 1C v 8.2 УП ПоказатьОповещениеПользователя("Документ не записан!",
"http://doc.ru",
"О правилах заполнения документа, читайте здесь!",
БиблиотекаКартинок.Важно);
Код 1C v 8.х #Если Клиент Тогда
Форма = Источник. ПолучитьФорму( ) ;
Если Форма. Открыта( ) Тогда
ПоказатьОповещениеПользователя( "Ошибка" , ПолучитьНавигационнуюСсылку( Источник. Ссылка) , "Не указана организация. Невозможно распределить платежи по документам расчетов с контрагентом" , БиблиотекаКартинок. Ошибка32 ) ;
КонецЕсли ;
#КонецЕсли
В 7.7 и 8.1 всплывающие окна отсутствуют, но это легко решается использованием:
Код 1C v 7.x WshShell= СоздатьОбъект( "WScript.Shell" ) ;
WshShell. Popup( "Текст сообщения" , , "Текст заголовка" , 20 ) ;
или внешних компанент, например:
MiracleV8: Универсальная компонента для 1С 7.7 и 1С 8.x
[Tray1C] Сворачивание 1С в системный трей
Вывод иконки с восклицательным знаком в трей! Используя
AutoHotkey :
Код 1C v 8.х
Процедура ВывестиСообщениеМессенджера(бПарам = Истина) Экспорт
#Если Клиент Тогда
сКаталог = СокрЛП( Константы. КаталогПолногоДоступа. Получить( ) ) + "БП\MessageService" ;
ИмяФайла = сКаталог + "\autohotkey.exe" ;
Файл = Новый Файл( ИмяФайла) ;
ИмяФайлаИНИ = сКаталог + "\autohotkey.ini" ;
Если бПарам Тогда
ИмяФайлаИНИ_Задачи = сКаталог + "\autohotkey_Yes.ini" ;
Иначе
ИмяФайлаИНИ_Задачи = сКаталог + "\autohotkey_No.ini" ;
КонецЕсли ;
ФайлИНИ_Задачи = Новый Файл( ИмяФайлаИНИ_Задачи) ;
Если Файл. Существует( ) И ФайлИНИ_Задачи. Существует( ) Тогда
Попытка
КопироватьФайл( ИмяФайлаИНИ_Задачи, ИмяФайлаИНИ) ;
ЗапуститьПриложение( ИмяФайла, сКаталог) ;
Если бПарам Тогда
ПараметрыСеанса. бСостояниеМессенджера = Истина ;
Иначе
ПараметрыСеанса. бСостояниеМессенджера = Ложь ;
КонецЕсли ;
Исключение
КонецПопытки ;
КонецЕсли ;
#КонецЕсли
КонецПроцедуры
Категория:
Встроенные Функции