Рассмотрим неприятную ситуацию, с которой нередко сталкиваются администраторы и разработчики при сопровождении связки программ «1С:Управление торговлей» и «1С:Бухгалтерия предприятия». Типовой обмен данными между базами исправно функционировал по расписанию, однако после планового обновления конфигурации приемника («Бухгалтерия предприятия 3.0») интеграция дает сбой. При этом наблюдается специфическое поведение: документы из УТ выгружаются и успешно проводятся бухгалтером в БП, но при следующем сеансе синхронизации те же самые документы вновь поступают из торговли в первоначальном виде, затирая все внесенные бухгалтерские корректировки. При попытке проверить параметры обмена в интерфейсе «Синхронизация данных» нужная настройка вовсе исчезает из списка, хотя сам план обмена в дереве метаданных присутствует.
Проанализируем детально причины возникновения этой коллизии и разберем практические способы восстановления нормальной работы обмена данными.
Разберем по шагам, почему происходит постоянная повторная перезапись документов. В основе планов обмена платформы «1С:Предприятие» заложен механизм квитирования сообщений. Каждое отправляемое сообщение содержит реквизиты НомерОтправленного и НомерПринятого. Когда база-приемник успешно считывает пакет, она фиксирует входящий номер и в ответном сообщении отправляет квитанцию о доставке. Получив подтверждение, база-источник очищает таблицы регистрации изменений по переданным объектам.
Если на стороне конфигурации «Бухгалтерия предприятия» план обмена оказывается исключен из штатной цепочки подсистемы «Обмен данными» Библиотеки стандартных подсистем (БСП), нарушается цикл формирования квитанций. База БП не возвращает подтверждение приема пакета. Соответственно, в «Управлении торговлей» регистрация изменений не сбрасывается, и при каждом очередном обмене УТ повторно отправляет те же документы, стирая результаты ручной обработки бухгалтера.
В релизах линейки БП 3.0.44 и выше фирма «1С» начала планомерный перевод интеграций на универсальный формат обмена (EnterpriseData, КД 3.0), постепенно отказываясь от поддержки старых планов обмена на базе правил конвертации XML (КД 2.0). В результате из подсистем БСП были исключены процедуры инициализации для плана обмена ОбменУправлениеТорговлейБухгалтерияПредприятия30. Из-за отсутствия плана в списке поддерживаемых подсистемой обмена, БСП скрывает его из пользовательского интерфейса, а в регистре сведений ПравилаДляОбменаДанными перестают обновляться и читаться соответствующие правила.
Выясним причину на уровне программного кода конфигурации «Бухгалтерия предприятия». Для того чтобы подсистема синхронизации БСП знала, с какими планами обмена ей необходимо работать, используется коллекция метаданных подсистемы. В обновленных релизах план обмена обмена со старой УТ был удален из перечня.
Посмотрим на пример кода в общем модуле УчетОбособленныхПодразделений в процедуре ПолучитьПланыОбмена:
// В обновленном релизе остался только следующий состав:
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменУправлениеНебольшойФирмойБухгалтерия30);
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменРозницаБухгалтерияПредприятия30);
Чтобы вернуть отображение настроек и работу механизма, вернем нужный план обмена в коллекцию. Для этого выполним корректировку кода:
// Восстанавливаем регистрацию плана обмена с УТ 11
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия30);
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменРозницаБухгалтерияПредприятия30);
После внесения этого изменения и сохранения конфигурации настройка синхронизации снова отобразится в интерфейсе БСП, и программа возобновит штатный цикл отправки квитанций.
Если конфигурация типовая и находится на полной поддержке, включать возможность изменения ради одной строчки крайне нежелательно. Решим эту задачу с помощью механизма расширений конфигурации.
ПолучитьПланыОбмена с помощью аннотации &После:
&После("ПолучитьПланыОбмена")
Процедура Расш1_ПолучитьПланыОбмена(ПланыОбменаПодсистемы)
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия30);
КонецПроцедуры
Разберем, как защитить данные бухгалтера прямо сейчас, пока обмен не стабилизирован, и как убрать зацикленную перезапись документов.
НомерПринятого в УТ выставить равным значению НомерОтправленного, что имитирует успешное получение квитанции от базы-приемника.ПравилаДляОбменаДанными присутствует актуальная запись для узла обмена. Если запись отсутствует или повреждена, правила конвертации можно загрузить вручную из файла через форму регистра либо с помощью внешней обработки.Проанализировав эти решения, отметим, что возврат старого плана обмена через код или расширение является временной мерой. Для долгосрочной и стабильной работы связки систем рекомендуется запланировать обновление конфигурации «1С:Управление торговлей» до актуальных версий (11.4 / 11.5) с бесшовным переходом на современный обмен через универсальный формат EnterpriseData.