Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Конвертация данных: Передача параметров из 7.7 в 8.x          
Vofka Подменю пользователя
сообщение 17.01.12, 13:39
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

В «Конвертации Данных» заложен удобный механизм передачи параметров – по сути переменных конвертации – между базами. Одна проблема: передача эта работает только если обмен происходит между двумя «восьмерками». По какой-то причине «семерочная» сторона обмена вообще обделена всякими интересными плюшками КД.

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


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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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



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

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

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

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

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





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

PSS. Ну и , собственно, прикрепленные файлы (pro1c.org.ua): Прикрепленный файл  KD_peredacha_parametrov_iz_77_v_8.zip ( 14,02 килобайт ) Кол-во скачиваний: 232


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

Спасибо сказали: brutalv4, craneua, takefive, vadim007,

avogadro Подменю пользователя
сообщение 17.01.12, 15:47
Сообщение #2

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0

У меня не получилось ни фига.

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

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

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


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

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


- пустое.

Что я сделал неправильно?

Сообщение отредактировал Vofka - 06.05.13, 10:15

Virsy Подменю пользователя
сообщение 20.07.12, 15:11
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

Spacer Подменю пользователя
сообщение 05.05.13, 5:53
Сообщение #4

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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

Пример:

УстановитьЗначениеПараметраКонвертации("МойПараметр_1", "Значение параметра (1)");
УстановитьЗначениеПараметраКонвертации("МойПараметр_2", "Значение параметра (2)");

serkus Подменю пользователя
сообщение 07.06.13, 11:02
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 26
Из: Украина, Лозовая
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Vofka @ 17.01.12, 13:39) *
PSS. Ну и , собственно, прикрепленные файлы (pro1c.org.ua): Прикрепленный файл  KD_peredacha_parametrov_iz_77_v_8.zip ( 14,02 килобайт ) Кол-во скачиваний: 232


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


Извините за нескромный вопрос: а какой пароль на архив? 09000000.gif

Vofka Подменю пользователя
сообщение 07.06.13, 11:22
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Вопрос, действительно, не скромный. Перед тем как задавать такие вопросы - нужно ознакомиться с правилами.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 14:52
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!