Недавно передо мной встала задача настройки регулярного обмена между конфигурациями «Управление торговлей 10.3» и УТ «Управление торговлей 11.3» (в моем случае это была «Управление торговлей и взаимоотношениями с клиентами (CRM)» от РАРУС). Эта конфигурация выполнена в виде рада надстроек на «Управление торговлей 11», процесс решения данной задачи для нее не будет отличаться от настройки обмена с конфигурацией «Управление торговлей 11», поэтому в статье используется именно этот термин. Для решения этой задачи был выбран давно проверенный и многократно испытанный механизм правил обмена, разрабатываемых, как известно, в специализированной конфигурации «Конвертация данных, редакция 2.1». После того, как правила были созданы, от клиента поступил запрос на подключение обмена в обратную сторону(«Управление торговлей 11»- «Управление торговлей 10.3») и настройку всего процесса в автоматическом режиме по требуемому расписанию.
Конфигурации на основе библиотеки стандартных подсистем предполагают использование обменов на основе EnterpriseData. Механизм, очевидно, более продвинутый по сравнению с тем, что предлагалось в более ранних конфигурациях, однако же, выбрасывать в корзину уже сделанные и отлаженные правила абсолютно не хотелось, поэтому было принято решение настраивать обмен на основе уже имеющихся правил обмена.
В моем случае обе базы находились на одном сервере, поэтому я настраивал обмен через COM-соединения. При расположении баз на разных компьютерах/серверах нужно будет произвести дополнительные манипуляции с базой «Управление торговлей 11», помимо указанных в статье, поскольку там нет никаких средств для настройки и выполнения обмена, основанного на правилах.
Для организации обмена придется вносить изменения в конфигурации обеих баз данных.
- В обе конфигурации следует добавить новый план обмена с одинаковым названием, например «ОбменУправлениеТорговлейУТиВсК». Флаг «Распределенная база данных» естественно, должен быть снят, в состав плана обмена должны быть включены объекты, которыми предполагается осуществлять обмен. Если предполагается обмениваться всеми подряд объектами, то можно оставить признак «Авторегистрация» в значении «Разрешить». Если же предполагается фильтрация выгружаемых данных по каким-либо признакам, например организациям, или складам (т.е., например, должны, выгружаться документы по одной организации), то для признака «Авторегистрация» следует установить значение «Запретить». Обязательно установить права на чтение для одной из ролей, используемых пользователями. Все вышеперечисленное следует выполнить для планов обмена в обеих базах данных.
- В случае, когда предполагается использование отборов для выгружаемых данных, самым удобным, очевидно, будет добавить в план обмена табличную часть, в которой будут перечислены отборы. Например, табличную часть «Организации», и/или «Склады» и т.п. В моем случае для обмена требовалось фильтровать данные, выгружаемые из «Управление торговлей 10.3» по признаку «Организация», из управления торговлей 11-й версии выгружать все данные без разбора. Поэтому в «Управление торговлей 10.3»в план обмена я добавил табличную часть «Организации», с одним реквизитом «Организация». В «Управление торговлей 11» был создан одноименный план обмена, в него включены нужные объекты, признак «Авторегистрация» в значение «Разрешить».
- Для всех объектов в «Управление торговлей 10.3» я установил признак «Авторегистрация» = «Запретить», в обработчик для типовой подписки на событие «ПередЗаписьюДокументаДляОбменаТорговляБухгалтерия»(очевидно, методически более верным решением было добавить собственную подписку на событие, но для простоты было сделано так) был добавлен следующий код:
Если НЕ Источник.ЭтоНовый() И ПланыОбмена.картОбменУправлениеТорговлейУТиВсК.ЭтотУзел().Метаданные().Состав.Содержит(Источник.Метаданные()) Тогда ВыборкаПО=ПланыОбмена.картОбменУправлениеТорговлейУТиВсК.Выбрать();
Пока ВыборкаПО.Следующий() Цикл
Если НЕ ВыборкаПО.ПометкаУдаления И НЕ ВыборкаПО.Ссылка=ПланыОбмена.картОбменУправлениеТорговлейУТиВсК.ЭтотУзел() Тогда Если ВыборкаПО.Организации.Количество()=0 ИЛИ (Источник.Метаданные().Реквизиты.Найти("Организация")<>Неопределено И
ВыборкаПО.Организации.Найти(Источник.Организация,"Организация")<>Неопределено) Тогда
ПланыОбмена.ЗарегистрироватьИзменения(ВыборкаПО.Ссылка,Источник.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
- Для того, чтобы обмен по созданному плану обмена мог выполняться стандартными средствами, в модуле плана обмена обязательно должно быть следующее содержимое(сделать нужно в обеих базах):
А) Объявлены переменные
Перем мЭтоНовыйЭлемент;
Перем мТаблицаОрганизацийДляВыгрузкиПередЗаписью;
Перем мОтборПоДатеДокумента;
Перем мИнформацияОНаличиеОрганизацииВРегистре;
Перем мИнформацияОБазовыхТипах;
Перем мКоличествоОрганизацийВУзле;
Перем мСоответствиеОрганизацийИУзлов;
Перем мСтарыйТипОбъектаОтправки;
Перем мИмяСтарогоБазовогоТипа;
Б) Инициализированы переменные
мТипУдалениеДанных = Тип("УдалениеОбъекта");
мТипРегистрСведенийНаборЗаписейОбъектыДоступаДокументов = Тип("РегистрСведенийНаборЗаписей.ОбъектыДоступаДокументов");
мИнформацияОНаличиеОрганизацииВРегистре = Новый Соответствие;
мИнформацияОБазовыхТипах = Новый Соответствие;
мСтарыйТипОбъектаОтправки = Неопределено;
мСоответствиеОрганизацийИУзлов = Неопределено;
В) Из плана обмена ОбменУправлениеТорговлейБухгалтерия или ОбменУправлениеТорговлейБухгалтерияКОРП без изменений перенесены процедуры и функции:
ОпределитьЕстьОтличияВТабличнойЧасти()
СравнитьТаблицыПоПолю(Таблица1, Таблица2, ИмяПоля)
УбратьИзРегистраДанныеНеНужныеДляПереносаПоОрганизации(ЭлементДанных)
ПолучитьИмяБазовогоТипаПоТипуОбъекта(ТипОбъекта) Экспорт
Г) Из плана обмена ОбменУправлениеТорговлейБухгалтерия или ОбменУправлениеТорговлейБухгалтерияКОРП перенесена процедура
ОпределитьТипОтправкиДанных(ЭлементДанных, ОтправкаЭлемента) Экспорт
И для нее уже нужно будет вносить изменения, поскольку там обрабатывается ситуация, когда выгружается объект, который не должен выгружаться согласно отборов, прописанных в табличных частях (такая ситуация может возникнуть в случае, когда табличная часть в один момент времени имела состав, согласно которому при подписке на событие объект был зарегистрирован в плане обмена, а к моменту выгрузки табличная часть была изменена, и выгружаемый объект уже не удовлетворяет условиям выгрузки. В моем случае не планировалось подобных событий, и хотя методически более правильным было прописать обработку для такого варианта, я не стал этого делать, и оставил процедуру пустой. Но такая процедура должна обязательно быть в модуле плана обмена, в противном случае обмен не заработает
- В конфигурацию «Управление торговлей 11» следует добавить следующие объекты, идентичные одноименным объектам в «Управление торговлей 10.3» (можно сделать Ctrl+C – Ctrl+V):
А) Перечисление «ПриоритетОбъектовОбмена»
Б) Перечисление «РезультатРассмотренияКоллизии»
В) Обработка «ОбменДаннымиXML»
Г) Регистр сведений «СоответствиеОбъектовДляОбмена»
Д) Регистр сведений «ОтложенныеДвиженияДокументов»
Е) Регистр сведений «КоллизииПриОбмене»
6. В конфигурации «Управлении торговлей 11» для общих модулей, процедуры из которых вызываются при записи объектов(как правило такая ситуация имеет место быть при подписках на события), следует установить признак «Внешнее соединение». В моем случае такая манипуляция потребовалась для общего модуля «ПроведениеСерверУТ» и большого количества модулей из состава подсистемы «Управление торговлей и взаимоотношениями с клиентами (CRM)». Не буду здесь приводить их список, отмечу лишь, что при настройке обмена с другими конфигурациями на основе БСП найти такие модули достаточно просто: следует выполнить все пункты, указанные в статье, затем, при попытке выполнения обмена процесс будет «валиться», и в описании ошибки будет выведено диагностическое сообщение, содержащее приблизительно следующую информацию: «Процедура такая-то» не обнаружена. После чего находим при помощи поиска по всем текстам эту процедуру, и у модуля проставляем признак «Внешнее соединение».
После совершения всех вышеизложенных манипуляций настраиваем обмен при помощи стандартных средств. Почти вся настройка обмена выполняется на стороне информационной базы «Управление торговлей 10.3».
- В базе «Управление торговлей 10.3», в режиме «1С предприятие» элементу плана обмена, соответствующему текущей информационной базе, присваиваем код, например «001»
- В базе «Управление торговлей 10.3», в режиме «1С предприятие» создаем новый элемент плана обмена, называем произвольным образом, присваиваем произвольный код, например наименование «Управление торговлей 11», код «002»
- В базе «Управление торговлей 11», в режиме «1С предприятие» создаем элемент плана обмена, называем произвольным образом, код присваиваем такой же, как код из п. 1
- В базе «Управление торговлей 11» , в режиме «1С предприятие», плану обмена, соответствующему текущей информационной базе, присваиваем код такой же, как в п. 2
- В базе «Управление торговлей 10.3», в режиме «1С предприятие» выполняем команду «Сервис-Прочие обмены данными-Выполнить обмен данными». В открывшемся окне из выпадающего списка, расположенного рядом с надписью «Выберите настройку», выбираем пункт «Настроить обмен данными»
- Далее, в открывшемся окне, выбираем наш элемент плана обмена данными, созданный в п. 2. В разделе «Правила выгрузки в базу обмена» подгружаем файл с правилами обмена «Управление торговлей 10»-> «Управление торговлей 11». В разделе «Правила выгрузки из базы обмена в текущую базу» подгружаем файл с правилами обмена «Управление торговлей 11»-> «Управление торговлей 10.3». В случае, когда выгрузка объектов в обратном направлении не требуется, в конфигурации «Конвертация данных» следует создать конвертацию, не содержащую ни одного привила выгрузки и правила обмена, где в качестве источника указать «Управление торговлей 11», приемник – «Управление торговлей 10», и указать файл правил(по сути «пустой») с этой конвертацией. Далее указываем тип обмена «Обмен через подключение к информационной базе», авторизацию, имя сервера, базы и т.п. После этого система готова к обмену. Для созданной настройки доступны все возможности стандартных обменов «Управление торговлей 10», в частности, выполнение обмена при помощи механизма регламентных заданий и отложенное проведение. Если статья была вам полезна, не забудьте нажать на звездочку рейтинга.