Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Конвертация данных: Передача параметров из 7.7 в 8.x
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > База знаний > Не наши статьи > 1С:Предприятие 8.2
Vofka
В «Конвертации Данных» заложен удобный механизм передачи параметров – по сути переменных конвертации – между базами. Одна проблема: передача эта работает только если обмен происходит между двумя «восьмерками». По какой-то причине «семерочная» сторона обмена вообще обделена всякими интересными плюшками КД.

Тем не менее, если нельзя, но очень хочется, всегда можно найти выход. Обработка загрузки читает файлы из семерки и из восьмерки одинаково, не проверяя версию платформы-источника, так что никто не мешает нам создать нужную структуру тегов для «параметров» своими силами!


Приступим. Сразу скажу, что для примера я создал 2 простые конфигурации в 7 и в 8, с одним документом («ОбычныйДокумент») и одним справочником («Организация»). В семерке еще есть константа «ОсновнаяОрганизация», которую мы и будем передавать через параметр.

Для начала разберемся, что нам надо получить в выходном файле. После непродолжительного копания в восьмерочной обработке «УниверсальныйОбменДаннымиXML» можно найти, что параметры передаются в теге «ЗначениеПараметра» у которого есть атрибут «Имя» и, собственно, значение. Значением может быть любой объект, передаваемый через КД, по сути значение это читается при помощи той же функции, что и свойства объектов, описываемые в ПКО. Для желающих увидеть все своими глазами: процедуры «ПроизвестиЧтениеДанных()» и «ЗагрузитьЗначенияПараметровОбменаДанными()» в модуле обработки.

Объем работ теперь более-менее очерчен, посмотрим, как добиться нужного результата. Смотрим в семерочную обработку выгрузки данных и находим код для создания узлов в файле выгрузки (напр. «ВыгрузитьСвойства()»). Творчески его перерабатываем и получаем что-то такое:

УзелПараметра = СоздатьУзел("ЗначениеПараметра");

УстановитьАтрибут(УзелПараметра, "Имя", "СообщениеВсемуМиру");

ЗаписатьЭлемент(УзелПараметра, "Значение", "Здравствуй, Мир!" );


Все хорошо, но таким способом можно передать только значения примитивных типов. Возникает резонный вопрос: что делать, если надо передать что-то более интересное (ссылку, например)? Выгрузим ссылку и вставим узел выгрузки как значение параметра! Вот так:

УзелПараметра = СоздатьУзел("ЗначениеПараметра");

узелСсылки = ВыгрузитьПоПравилу(константа.ОсновнаяФирма,,,,"Организации");

УстановитьАтрибут(УзелПараметра, "Имя", "ОсновнаяОрганизация");

ДобавитьПодчиненный(УзелПараметра, узелСсылки);

ДобавитьПодчиненный(rootNode, УзелПараметра);


Как видно из кода, мы не создаем подчиненный узел «Значение», поскольку он необходим только для передачи примитивных типов. В случае передачи ссылочного типа с его работой справляется сам узел ссылки.

Отлично, с кодом выгрузки разобрались. Теперь надо понять, куда его добавить. Хотелось бы, чтобы передаваемый параметр был определен во время загрузки всех объектов, поэтому надо сделать так, чтобы код отработал перед обработкой ПВД.

Можно, например, сделать искусственное ПВД с минимальным порядком выполнения, в обработчик которому добавить вышеописанный код. Но любое ПВД можно выключить вручную в обработке выгрузки, так что этот способ нельзя назвать надежным. Поэтому посмотрим на события конвертации – «ПередВыгрузкойДанных» как раз подойдет для наших целей.

Осталось добавить передаваемые параметры в таблице настройки (важно поставить галочку «при загрузке», остальное не обязательно; см. последний скриншот к статье)

Готово! Теперь параметр будет прочтен в самом начале загрузки данных на стороне приемника и будет доступен через структуру «Параметры»!



Пара слов, зачем это вообще может быть нужно.

Через параметры можно регулировать какие-то опции загрузки. Вместо того, чтобы писать несколько «рабочих» правил с разными задачами, можно параметрами переключать различные сценарии обработки на приемнике.

Через параметры можно передавать какие-нибудь «метаданные» о выгрузке – например, имя человека, который ее делал.

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

Можно придумать еще много вариантов использования этого механизма, надеюсь, кому-то он хоть немного облегчит процесс переноса данных между платформами.





PS. В прикрепленных файлах есть архив с конфигурациями источника и приемника. Они необязательны для разбора примеров, вся необходимая информация и так содержится в файле правил, но кому-то может быть проще смотреть на метаданные в родном конфигураторе, а не в обработке «Описание конфигурации» из КД.

PSS. Ну и , собственно, прикрепленные файлы (pro1c.org.ua): Нажмите для просмотра прикрепленного файла

необходимо зарегистрироваться для просмотра ссылки
avogadro
У меня не получилось ни фига.

Параметр создал НаименованиеОрганизации (строка), птицу При загрузке поставил.

Вставил ПередВыгрузкой:

УзелПараметра = СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелПараметра, "НаименованиеОрганизации", "НаименованиеОрганизации");
ЗаписатьЭлемент(УзелПараметра, "Значение", СтрЗаменить(СокрЛП(Константа.НазваниеОрганизации), """", ""));


В восьмерке ПослеЗагрузки (справочника)

Наименование = Параметры.НаименованиеОрганизации;


- пустое.

Что я сделал неправильно?
Virsy
Навернео надо было "Имя" использовать во втором параметре:

УстановитьАтрибут(УзелПараметра, "Имя", "НаименованиеОрганизации");
Spacer
Цитата(Vofka @ 17.01.12, 14:39) необходимо зарегистрироваться для просмотра ссылки
В «Конвертации Данных» заложен удобный механизм передачи параметров – по сути переменных конвертации – между базами. Одна проблема: передача эта работает только если обмен происходит между двумя «восьмерками».

А может быть проблема в следующем?:
Цитата
Для 1С:Предприятие 7.7:

Для инициализации параметров при выгрузке на платформе 1С:Предприятие 7.7 необходимо использовать функцию УстановитьЗначениеПараметраКонвертации(ИмяПараметра, Значение), где
ИмяПараметра – Строка – имя устанавливаемого параметра
Значение – Произвольный – значение устанавливаемого параметра

Пример:

УстановитьЗначениеПараметраКонвертации("МойПараметр_1", "Значение параметра (1)");
УстановитьЗначениеПараметраКонвертации("МойПараметр_2", "Значение параметра (2)");
serkus
Цитата(Vofka @ 17.01.12, 13:39) необходимо зарегистрироваться для просмотра ссылки
PSS. Ну и , собственно, прикрепленные файлы (pro1c.org.ua): Нажмите для просмотра прикрепленного файла

необходимо зарегистрироваться для просмотра ссылки


Извините за нескромный вопрос: а какой пароль на архив? 09000000.gif
Vofka
Вопрос, действительно, не скромный. Перед тем как задавать такие вопросы - нужно ознакомиться с правилами.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.