Почему в УТ 11.5 при обмене через РИБ не переносятся движения по ценам и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с распределенными информационными базами (РИБ) в 1С:Управление торговлей 11.5 системные администраторы и разработчики часто сталкиваются с неприятной ситуацией: документ Установка цен номенклатуры успешно мигрирует из центральной базы в периферийную, однако движения по регистрам сведений (фактические цены) в подчиненном узле отсутствуют. В итоге в дочерней базе документ есть, а цен нет. Проанализируем, почему это происходит и как восстановить корректную синхронизацию данных.

Разберем причину проблемы: Новое ценообразование 2.5

Основная причина кроется в масштабном обновлении архитектуры 1С. Начиная с версий УТ 11.5.7/11.5.8, компания 1С внедрила механизм «Ценообразование 2.5». В этой версии данные о ценах хранятся не в старом регистре ЦеныНоменклатуры, а в новом — ЦеныНоменклатуры25.

Система синхронизации в типовых конфигурациях (особенно в плане обмена «Полный») часто опирается на подписки на события, а не на авторегистрацию объектов. Если при выпуске очередного релиза разработчики добавили новый регистр, но забыли включить его в соответствующую подписку или в состав плана обмена, данные просто не будут помечаться к выгрузке. Рассмотрим, как выявить и устранить это упущение.

Проанализируем состав плана обмена и подписки на события

В современных версиях УТ для РИБ авторегистрация у большинства объектов отключена. Это сделано для того, чтобы программно управлять составом выгружаемых данных (например, фильтровать данные по организациям или складам). Регистрация изменений происходит в специальных подписках на события.

Выясним по шагам, где искать ошибку:

  1. Откроем Конфигуратор и найдем план обмена Полный (или СОтборами, если используется он).
  2. Перейдем на закладку Состав. Убедимся, что регистр сведений ЦеныНоменклатуры25 включен в состав плана обмена, а в колонке «Авторегистрация» стоит значение Запретить.
  3. Если регистрация запрещена, значит, она выполняется программно через подписки. Перейдем в ветку Общие -> Подписки на события.

Нас интересуют подписки, отвечающие за регистрацию наборов записей. Обычно они называются ПолныйРегистрацияНабора, ПолныйРегистрацияНабораЗаписей или аналогично для вашего плана обмена.

Пошаговое решение: исправление подписки на событие

Рассмотрим ситуацию, когда документ переносится, а движения — нет. Это означает, что регистрация документа (объекта) работает, а регистрация набора записей регистра (движений) — отсутствует. Нам необходимо проверить источник события в подписке.

  1. Найдем подписку на событие ПолныйРегистрацияНабора (название может незначительно отличаться в разных релизах, ищите по префиксу плана обмена).
  2. Откроем свойства этой подписки и посмотрим на поле Источник.
  3. Нажмем на кнопку выбора («...») в поле Источник и в открывшемся списке типов найдем РегистрСведенийНаборЗаписей.ЦеныНоменклатуры25.
  4. Если флажок напротив этого регистра снят — это и есть причина проблемы. Установим флажок, чтобы система «видела» изменения в ценах и регистрировала их для обмена.
  5. Сохраним изменения и обновим конфигурацию базы данных.

Проверим программный код обработчика регистрации

Иногда простого включения типа в подписку недостаточно, если в самом обработчике стоит жесткая фильтрация. Проанализируем типичный код в модуле, к которому обращается подписка (например, ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюНабораЗаписей):


Процедура ПолныйРегистрацияНабораПередЗаписью(Источник, Отказ, Замещение) Экспорт
    Если ОбменДаннымиСервер.ОбменДаннымиВключен() Тогда
        Возврат;
    КонецЕсли;
    
    // Проверка, включен ли регистр в логику обмена
    ТипИсточника = ТипЗнч(Источник);
    Если ТипИсточника = Тип("РегистрСведенийНаборЗаписей.ЦеныНоменклатуры25") Тогда
        // Здесь происходит вызов типовой процедуры регистрации
        ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Источник);
    КонецЕсли;
КонецПроцедуры

Посмотрим внимательно: если вы используете расширение или доработанную конфигурацию, убедитесь, что новый регистр версии 2.5 добавлен во все логические блоки, где ранее фигурировал старый регистр ЦеныНоменклатуры.

Рассмотрим альтернативные причины: Правила регистрации объектов (ПРОб)

Если конфигурация полностью типовая и вы не хотите снимать её с поддержки, проблема может быть в Правилах регистрации объектов. В УТ 11 они часто загружаются извне как XML-файлы.

Выполним следующие действия в режиме «1С:Предприятие»:

  1. Перейдем в раздел Администрирование -> Синхронизация данных.
  2. Откроем Параметры синхронизации данных для нужного узла РИБ.
  3. Найдем пункт Загрузить правила регистрации объектов.
  4. В ряде случаев помогает простое обновление правил на типовые из текущей поставки конфигурации. Если правила устарели, они могут игнорировать набор записей ЦеныНоменклатуры25, даже если он есть в составе плана обмена.

Проверка функциональных опций и патчей

Выясним, не заблокирована ли передача цен функциональными опциями. В 1С:УТ 11.5 важно, чтобы в периферийной базе настройки ценообразования полностью совпадали с центральной.

Проанализируем ситуацию: если в центре включено «Новое ценообразование», а в РИБ по какой-то причине (например, сбой при первом обмене) опция ИспользоватьНовоеЦенообразование не активировалась, система при загрузке может отсекать движения по «неизвестному» ей регистру.

Также рекомендуется проверить наличие установленных патчей (исправлений) от 1С. Для релизов 11.5.12.х выпускались патчи с описанием: «Исправлена регистрация изменений для регистров сведений в планах обмена РИБ». Установить их можно через: Администрирование -> Обслуживание -> Обновление программы -> Исправления (патчи).

Как принудительно «протолкнуть» данные без изменения кода

Если цены нужны в подчиненном узле «здесь и сейчас», а вносить правки в конфигуратор нет времени, воспользуемся стандартной обработкой «Регистрация изменений для обмена данными»:

  1. Откроем обработку (ее можно найти через «Все функции» или «Функции для технического специалиста»).
  2. Выберем узел РИБ, в который не ушли цены.
  3. Найдем в дереве объектов Регистры сведений -> Цены номенклатуры 2.5.
  4. Нажмем правой кнопкой мыши и выберем Зарегистрировать все изменения (или выберем конкретные записи по фильтру).
  5. Запустим синхронизацию. Данные будут принудительно добавлены в таблицу регистрации изменений и улетучатся в периферийную базу при следующем сеансе связи.

Резюмируем: основная проблема синхронизации цен в УТ 11.5 чаще всего связана с тем, что новый регистр ЦеныНоменклатуры25 «забыли» добавить в Источник подписки на событие ПолныйРегистрацияНабора. Проверка этого флажка в конфигураторе в 90% случаев решает проблему отсутствующих движений в РИБ.

← На главную