Рассмотрим распространенную архитектурную ситуацию в территориально распределенной сети магазинов на базе конфигурации 1С:Розница. Нередко внедренцы разделяют потоки передачи данных и конфигурации. Центральный узел (ЦУ) используется исключительно для распространения конфигурации подчиненным узлам (ПУ) через распределенную информационную базу (РИБ). При этом сами торговые узлы отправляют и получают бизнес-данные напрямую в управляющую центральную базу (ЦБР) по правилам конвертации и регистрации данных.
Когда в конфигурации изменяются метаданные (например, добавляются новые реквизиты в справочники или документы), возникает задача: как централизованно и без ручного входа в сотни магазинов обновить правила конвертации и регистрации данных на стороне торговых точек? Разберем правильные архитектурные подходы и детальный алгоритм реализации на основе типовых механизмов Библиотеки стандартных подсистем (БСП).
Если логика выгрузки во всех подчиненных узлах идентична, наиболее надежный и штатный способ — встроить обновленные правила прямо в метаданные конфигурации. В таком сценарии файл конфигурации распространяется штатным механизмом РИБ из ЦУ во все ПУ, а при обновлении информационной базы правила автоматически считываются из макетов и перезаписывают данные в системных регистрах.
Разберем по шагам, как устроен этот механизм в подсистеме ОбменДанными:
ПравилаОбмена (для правил конвертации) и ПравилаРегистрации (для правил регистрации объектов). Если используется двусторонний обмен с контролем корреспондента, также актуализируется макет ПравилаОбменаКорреспондента.ОбменДаннымиПереопределяемый в экспортной функции ПолучитьПланыОбмена():
Процедура ПолучитьПланыОбмена(ПланыОбменаПодсистемы) Экспорт
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменРозницаЦентральнаяБаза);
КонецПроцедуры
ОпределитьНастройки():
Процедура ОпределитьНастройки(Настройки) Экспорт
Настройки.ИспользоватьПравилаКонвертации = Истина;
Настройки.ИспользоватьПравилаРегистрации = Истина;
КонецПроцедуры
Проанализируем скрытые подводные камни, с которыми можно столкнуться при использовании данного метода на практике:
ПравилаДляОбменаДанными. Автоматическая перезапись из макетов при обновлении выполняется процедурой ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными() только в том случае, если в регистре установлен источник «Из конфигурации». Если ранее администратор или внедренцы загрузили правила вручную из файла через интерфейс, система сохраняет флаг внешнего источника и проигнорирует новые макеты из конфигурации. В таком случае потребуется программно переключить признак источника./UpdateCfg. Если узлы работают в автоматическом режиме без регулярного перезапуска сеансов предприятия под правами администратора, правила останутся прежними до фактического выполнения процедур обновления БСП.Посмотрим на пример кода в обработчике обновления или отдельной внешней обработке, регистрирующей объекты для выгрузки:
УзелЦБР = ПланыОбмена.ОбменРозницаЦентральнаяБаза.НайтиПоКоду("ЦБР");
Если ЗначениеЗаполнено(УзелЦБР) Тогда
ПланыОбмена.ЗарегистрироватьИзменения(УзелЦБР, Метаданные.Справочники.ФизическиеЛица);
КонецЕсли;
Если внесение изменений в метаданные конфигурации нежелательно или требуется применить правила оперативно, рассмотрим альтернативные варианты доставки:
ПравилаДляОбменаДанными.Таким образом, самым стабильным и сопровождаемым решением для распределенной сети является использование штатных макетов плана обмена, интегрированного в БСП, в сочетании с контролем автоматического перезапуска узлов и корректной перерегистрацией измененных данных.