Исходная задача
Есть нетиповая УТ, предположим, версии 10.3.14.4, очень сильно крученая. Необходимо настроить односторонний обмен с БП 2.0 последней редакции, желательно при помощи плана обмена для регистрации новых объектов и выгрузки таковых в БП.
Набор инструментов
1. Нетиповая УТ (aka NUT), открытая в конфигураторе, запущенная в режиме предприятия.
Смотрим в планы обмена — ага, есть ОбменУправлениеТорговлейБухгалтерияКОРП, есть и механизмы регистрации, то что нам нужно.
2. Типовая БП (aka BP), запущенная в режиме предприятия.
3. Типовая (!) УТ (aka TUT) какой-нибудь последней редакции, способная обмениваться с имеющейся БП, открытая в конфигураторе.
Собственно настройка
1. Находим в конфигураторе TUT обработку ПомощникНастройкиОбменаДаннымиСБухгалтерияПредприятияКОРП. Выгружаем её во внешнюю через вызываемое правой кнопкой мыши контекстное меню, пункт «Сохранить как внешнюю обработку, отчет…»
2. В ней же находим макет ПравилаОбмена_УТ_БПКОРП, сохраняем его в текстовый файл, переименовываем расширение в .xml, получаем готовые правила обмена. Почти готовые. То есть их надо открыть в блокноте, найти строку «Параметры.Вставить(«ПервыйОбмен», Истина)» и вместо Истина поставить Ложь. Сохраняем, откладываем.
3. Идем в NUT, режим предприятие.
4. Открываем сохраненную обработку из TUT. Перед нами помощник настройки обмена данными. Идем пошагово, включаем экспертный режим, попутно устанавливаем все необходимые для себя настройки (не буду расписывать, кто хоть раз настраивал такой обмен, знает всё назубок).
5. Доходим до выгрузки справочников. Тут начинается самое интересное.
6. Обработчик выгрузки нет-нет, да и будет натыкаться на метаданные и их значения, которых нет в нашей старой NUT. Что делать?
7. Поскольку NUT совсем нетиповая — не стесняемся в методах. У нас открыт конфигуратор TUT! Находим объект, контрол-ц, идем в конфигуратор NUT, в соответствующем месте конфигурации контрол-в. Закрываем предприятие NUT, обновляем конфигурацию NUT, открывает предприятие NUT, открываем помощник обмена, проходим по уже созданной настройке до выгрузки справочников и делаем то же самое, до победного конца.
Мне понадобилось так скопировать-вставить значения перечисления ВидыОперацийРеализацияТоваров, несколько других перечислений, документ КорректировкаПоступления, несколько регистров сведений, пожалуй и всё, по времени это было недолго.
Да, на новые ссылочные объекты метаданных лучше назначить типовой роли Пользователь право на чтение, мало ли где используется реквизит неопределенного вида ДокументСсылка или СправочникСсылка, или запрос без РАЗРЕШЕННЫЕ и т.п.
8. Добились выгрузки справочников. Идем в BP, запускаем встроенный стандартный помощник настройки обмена с конфигурацией «Управление торговлей», подхватываем файл настройки, полученный из NUT, создаем настройку обмена. Для одностороннего обмена идем в справочник НастройкиОбменаДанными, находим нашу настройку, и на вкладке «Настройки обмена данными», в табличной части «Настройки выгрузки» ставим все объекты «Не выгружать».
9. Загружаем в BP при помощи того же встроенного в BP стандартного помощника настройки обмена данными справочники из NUT, выгружаем обратно получившиеся ссылки на объекты в BP (все происходит автоматом).
10. Возвращаемся опять в предприятие NUT. Загружаем справочники из BP, переходим к этапу выгрузки документов.
11. Вот тут интересное НО. При переходе на этот этап помощник обмена данными заменяет имеющиеся правила обмена в сохраненной настройке в справочнике «Настройки обмена данными» на типовой макет правил из конфигурации NUT! А он у нас там, разумеется, древний как сама NUT. Поэтому заходим в сохраненную настройку и заменяем старые правила на заранее подготовленные, сохраняем и выгружаем документы. При возникновении «катаклизмов» уже знаем что делать (контрол-ц, контрол-в).
Далее, используя стандартные процедуры обмена, выполняем обмен между базами данных когда угодно.
Что еще можно сказать в защиту метода (копи-паст объектов). Использовал его для настройки обмена из нетиповой «Торговля и склад 7.7» в типовую БП 3.0, только там, как ни странно, все было несколько попроще. Наверное потому что обмен выполняется через обычную одностороннюю выгрузку для последующей загрузки в БП 3.0 обработкой УниверсальныйОбменДаннымиXML.
Конвертация данных всё же понадобится потом, для настройки выгрузки документов, для которых нет реквизитов в нетиповой УТ, типа СчетФактураВыданный или СчетФактураПолученный и т.д.
Если по какой-то причине для первичного обмена документами, документы для выгрузки таки не зарегистрировались — можно воспользоваться групповой обработкой регистрации документов для выбранного плана обмена:
Спасибо за внимание к моим «многобукаф»)
(0) к вопросу о правах на объекты для Пользователя — лучше еще добавить право на Просмотр тех же документов, потому что сталкивался с ситуацией, когда в отчетах обращались к реквизитам документа, тогда право на Чтение не поможет. Как минимум в настройках СКД появятся зачеркнутые поля и т.д.
Мне кажется, что копипаст — это хорошо, даже очень хорошо и ускоряет процесс разработки, но Вам повезло, что все заработало. Добавление нового реквизита через буфер обмена в старую версию поможет, только если на него не завязано никакой логики. Документы с пустыми реквизитами в приемнике могут просто не провестись и тут начнется танец с бубном, то ли его в источнике заполнять, то ли в правилах алгоритм заполнения значениями по умолчанию писать.
Про ТиС 7.7 имел мега печальный опыт. Там обработчики при выгрузки объектов содержали хренову кучу кода и как назлоон содержал вызовы функций из общего модуля, которых там не было или состав их параметров был другим. Трудоемкость допиливания правил оказалась почти равной обновлению ТиС. В итоге сдался и написал свой обмен с нуля.
Собственно все зависит от количества и качества отличий типового свежего источника от того, который мы имеем.
(2) monkbest, согласен про документы с пустыми реквизитами, написал в конце публикации, что так-таки конвертация понадобится — загрузить уже имеющиеся правила обмена и править. Поскольку в УТ в принципе этой информации нет и заполнять ее никто не будет, то, видимо, все будем заполнять на стороне приемника.
Про нетиповую ТиС — я взял самые что ни на есть типовые правила выгрузки, которые лежали в ExtForms развернутой типовой конфигурации ТиС, и в нетиповую пришлось добавить пару реквизитов в Регистры и пару в документы, чтобы выгрузка из старой конфигурации заработала. Насколько я знаю, все обработчики в этом случае прячутся в саму обработку выгрузки. Поскольку и БП 3.0 была типовая, то в ней было всё, что нужно для загрузки.\r
Чем больше отличий, тем дольше плясать, согласен, в ином случае проще обмен написать самому, это да.
Сэнсэй, это прекрасно! Уверен, множеству людей поможет статья.
К вопросу о копипасте. Я давече в самописной конфе создавал с нуля обмен данными на основе планов обменов и правил. Тот что в 10.3. За полтора дня скопировал ворох справочников, общих модулей, регистров и т.д. и взлетело! минимум отладки.
(4), (5), Миша, рад тебя видеть! Положительный опыт это здорово, спасибо за поддержку. С меня лайк)
(0) если предварительно сравнить нетиповую и типовую конфу УТ, то можно более-менее правильно оценить стоит ли игра свеч.
(7) Rustig, сложный вопрос, далеко не всё используется для выгрузки.
Вернее было, наверное:
1. Взять правила обмена, зашитые в старую конфигурацию, загрузить в КД.
2. Взять правила обмена, зашитые в новую конфигурацию, также загрузить в КД.
3. И сравнить два элемента справочника Конфигурации в КД, старой УТ и новой УТ. Тогда будет понятно, какое количество объектов придется копировать-вставлять.
(7) Rustig, даже не так. Сравнение конфигураций ничего не даст, даже через встроенную в КД обработку «Сравнение метаданных», потому что конфигурация может быть сколько угодно сложной, но правила могут быть написаны только для части объектов.
Поэтому каким-то образом надо сравнивать именно объекты, для которых существуют правила…
Cпасибо! Очень интересная статья. Для начинающего специалиста самое оно.