1С: быстрый способ использовать правила обмена в обход узлов РИБ
ПО, гаджеты и железо 22 Сен 2013Суть задачи: иногда возникает необходимость выгрузить данные из, например, 1С:Бухгалтерии предприятия в 1С:Управление торговлей, но не по узлам обмена распределенной информационной базы (РИБ), а через обработку Универсальный обмен данными XML. Это, например, может возникнуть когда Вы создаете новую базу УТ, и хотите импортировать справочник из БП в УТ, не настраивая двусторонний обмен данными или собственные правила обмена, или бухгалтеру привычнее и удобнее выгружать данные за выбранный период, а не по принципу регистрации обмена.
Решение: первое что Вам, возможно, захочется сделать, это просто выгрузить стандартные правила обмена БП-УТ из конфигурации БП, и просто подцепить их в обработку. Но, нажав кнопку «Выгрузить данные», Вы получите огорчающее сообщение:
Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(4,52)}: Переменная не определена (УзелДляОбмена)
Вся проблема в том, что при выгрузке через РИБ, в контексте выполнения модулей правил обмена доступен узел обмена, в переменной «УзелДляОбмена», в реквизитах которого содержатся различные настройки. Собственно, пути решения два:
1. Дописывать правила обмена, что в данном случае будет крайне геморройным мероприятием, связанным с бесконечным поиском и заменой в текстах правил обмена и с физическим и умственным истощением человека делающего это.
2. Дать доступ к вышеуказанной переменной.
Собственно, мы с Вами, коллега, будем рассматривать второй вариант. Для этого нужно следовать следующему рецепту:
1. Выгрузим правила обмена. Для этого, откроем конфигуратор, найдем в ветке ОбщиеМакеты макет, в данном случае, с названием ПравилаОбмена_БП_УТ, откроем его, и через меню «Файл/Сохранить как», сохраним с расширением .xml
2. Сохраним обработку УниверсальныйОбменДаннымиXML в файл. Найдем ее в дереве конфигурации, щелкнем правой кнопкой мыши, выберем «Сохранить как внешнюю обработку/отчет».
3. Откроем данную обработку (из файла), и добавим в нее реквизит УзелДляОбмена, тип данных, в нашем случае, «ПланОбменаСсылка.ОбменУправлениеТорговлейБухгалтерияКОРП».
4. В версии конфигурации Бухгалтерия предприятия, 2.0.37.12 (возможно, и в более ранних), нужно в модуль объекта данной обработки (в самый конец) вставить две строки, указанные ниже, иначе мы получим еще одно безрадостное сообщение типа «Переменная не определена»:
мИнформацияОПользовательскихПоляхПоискаПриВыгрузкеДанных = Новый Соответствие();
мИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие();
5. Сохраняем и открываем обработку в режиме 1С:Предприятие.
6. В реквизите «УзелДляОбмена», который мы добавили, выбираем узел из плана обмена — лучше создать новый, и прописать в нем необходимые условия. К сожалению, в этом месте создается одна небольшая проблема: с этого момента все изменения информационной базы начинают регистрироваться и сохраняться в соответствующих таблицах. В связи с этим, я рекомендую периодически сбрасывать зарегистрированные объекты через Монитор обмена данными (закладка «Дополнительно», кнопка «Подробно», затем «Удалить всю регистрацию»). В прочем, этот процесс можно и автоматизировать, прописав соответствующие действия в обработке обмена, при каждом обмене данными.
7. Заполняем остальные реквизиты (выгруженные на шаге 1 правила обмена, файл данных или настройки прямого подключения, период выгрузки, отборы и т.п.)
8. Делаем выгрузку данных.
Соль/сахар по вкусу. Ваши вопросы оставляйте в комментариях.
p.s. Не забудьте рассказать своим клиентам или сотрудникам как не подхватить вирус или шифровальщик. Ещё, можете почитать как поудобнее обустроиться за компьютером.
27 Фев 2014 в 05:10
Статья очень понравилась. Лаконично и то, что надо.
Для Украины УТУ 2.3 -> БУкр 1.2 нужно еще пошаманить немного. Мне нужен был только отбор по Организации.
1) загрузить правила в конвертацию и добавить параметр «Организация», поставить галку при загрузке, тип — СправочникСсылка.Организации
2) на закладке Основная -> ПередВыгрузкойОбъекта
оставить только
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда
Если ОбщегоНазначения.ЕстьРеквизитДокумента(«Организация», Объект.Метаданные()) И
(Параметры.Организация Объект.Организация) и (ЗначениеЗаполнено(Параметры.Организация)) Тогда
Отказ = Истина;
КонецЕсли;
КонецЕсли;
Вобщем с этими изменениями данный совет работает и с украинскими конфигурациями.
22 Май 2014 в 11:50
Добрый день! А этот алгоритм для обмена БП и УНФ можно использовать?
23 Май 2014 в 13:18
Приветствую.
Даже не знаю… Если УниверсальныйОбменДаннымиXML под управляемыми формами запустите и подобным образом модифицируете, то может что-то и получится. Только алгоритм там другой будет по-любому. Если честно, не делал подобного между конфигурациями на управляемых формах.
23 Май 2014 в 13:55
А вообще, товарищ порекомендовал способ, в котором не нужно изобретать велосипед. Он есть в УТ11, возможно, есть и в УНФ. Это стандартный обмен данными, в котором Вы можете произвести выгрузку произвольных объектов без регистрации изменений. Скриншот по ссылке http://www.evernote.com/shard/s38/sh/c8e18cd0-c093-4ef6-ba2c-5b35e73044cc/fbc60fe315b7874a2b39777ff260d82b
24 Май 2014 в 16:33
Спасибо, про него знаю, но не устраивает, нельзя выбрать период, заменяет документы измененные и пр.будем изобретать)
31 Май 2014 в 10:23
На днях пришлось решить похожую задачу, только с выгрузкой из УТ 11 в БП 2.0. Можно использовать ту же самую обработку УниверсальныйОбменДаннымиXML, запустив УТ 11 в режиме обычного приложения. Ну и ещё в модуль самой обработки придётся вставить заглушки, для некоторых процедур вызываемых из правил обмена (правила обмена, в случае с БП 2.0, при онлайн-обмене выполнялись в контексте обработки ОбработчикиВыгрузкиВБухгалтериюПредприятия20, если я не ошибаюсь).