Как настроить обмен данными в РИБ УТ 10.3 и решить проблемы с выгрузкой штрихкодов и отсутствием движений у документов?

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

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

Где найти правила выгрузки и регистрации в РИБ?

Многие пользователи, привыкшие к обменам через «Конвертацию данных 2.0», ищут внешние XML-файлы с правилами. Однако в классическом РИБ «из коробки» (план обмена «Полный») используются встроенные механизмы платформы. Разберем по шагам, где хранятся настройки логики миграции данных.

Во-первых, проанализируем Состав плана обмена. Для этого нам необходимо открыть базу в режиме «Конфигуратор», перейти в ветку Общие -> Планы обмена -> Полный и открыть вкладку «Состав». Здесь перечислены все объекты метаданных, которые участвуют в обмене. Если вы заметили, что какой-то справочник или регистр не передается в подчиненную базу, в первую очередь проверьте, стоит ли напротив него «галочка» в этом списке.

Во-вторых, обратим внимание на Авторегистрацию. Для каждого объекта в составе плана обмена можно установить режим авторегистрации:

В-третьих, выясним, есть ли в базе программные фильтры. В УТ 10.3 часто требуется ограничить передачу данных (например, по конкретной организации). Эта логика описывается не в правилах XML, а в Модуле объекта самого плана обмена. Нам нужно найти процедуру ПриОтправкеДанныхПодчиненному. Именно здесь программно проверяется, должен ли конкретный объект попасть в файл выгрузки или его отправку нужно отменить.

Почему не выгружаются новые штрихкоды?

Ситуация, когда номенклатура мигрирует, а ее штрихкоды — нет, является типовой для УТ 10.3. Проанализируем причину. Штрихкоды в этой программе хранятся в независимом регистре сведений Штрихкоды. В отличие от подчиненных справочников, записи регистра сведений являются самостоятельными сущностями.

Выясним возможные причины сбоя:

  1. Регистр не включен в состав обмена. Если в плане обмена Полный для регистра Штрихкоды не включена авторегистрация или он вовсе отсутствует в составе, данные не уйдут.
  2. Отсутствие владельца. Штрихкод ссылается на объект (например, единицу измерения или номенклатуру). Если владелец еще не доехал до подчиненной базы, запись регистра может быть отсечена платформой или привести к появлению «битых» ссылок.
  3. Программное подавление. В некоторых доработанных базах при записи штрихкода может использоваться параметр ОбменДанными.Получатели.АвтоЗаполнение = Ложь, что блокирует автоматическую очередь выгрузки.

Для решения проблемы рекомендуем использовать обработку «Регистрация изменений для обмена». Выберите узел-приемник и посмотрите, есть ли в списке изменений записи регистра Штрихкоды. Если их там нет, их нужно добавить вручную для теста или пересмотреть настройки состава плана обмена в конфигураторе.

Документ проведен, а движений нет: разбираем механизм загрузки

Это одна из самых коварных проблем РИБ. Вы открываете базу-приемник, видите документ с зеленой галочкой (проведен), открываете его движения по кнопке «Перейти», а там пусто. Почему так происходит?

Разберем ситуацию подробно. При обмене данными платформа 1С использует режим ОбменДанными.Загрузка = Истина. В этом режиме при записи документа не запускается процедура ОбработкаПроведения. Это сделано для того, чтобы база-приемник получила точно такие же данные, как в базе-отправителе, без пересчетов, которые могли бы привести к расхождениям из-за разницы в остатках.

Следовательно, движения документа (записи в регистрах накопления Продажи, ОстаткиТоваров и др.) должны передаваться в том же пакете данных, что и сам документ. Если документ приехал, а движения — нет, значит:

Посмотрим на пример кода, который может вызывать подобные проблемы в модуле набора записей регистра:


Процедура ПередЗаписью(Отказ, Замещение)
    Если ОбменДанными.Загрузка Тогда
        // Если здесь стоит логика очистки или возврата без записи,
        // то движения не будут сохранены при обмене.
        Возврат; 
    КонецЕсли;
КонецПроцедуры

Чтобы исправить ситуацию, при которой документ уже «пустой», можно перепровести его вручную. В этом случае запустится стандартный механизм проведения и движения сформируются. Однако для РИБ это лишь временная мера. Правильное решение — убедиться, что все регистры, по которым двигается документ, включены в Состав плана обмена с включенной авторегистрацией.

Диагностика и инструменты

Проанализируем, как быстро найти причину сбоя, не прибегая к сложному кодингу. Основной инструмент администратора 1С — консоль запросов или обработка регистрации изменений.

Рассмотрим алгоритм проверки:

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

Также полезно проверить настройки в пользовательском режиме. Перейдите в Сервис -> Обмен данными -> Настройки обмена данными. Хотя РИБ «Полный» подразумевает передачу всех данных, в некоторых случаях там могут быть активированы дополнительные галочки «Обмениваться по правилам», что переключает логику на использование внешних файлов. Если вы видите, что флаг «Использовать правила обмена» установлен, значит, ваша база работает в гибридном режиме, и вам действительно нужно искать файлы xml с правилами конвертации.

Выясним, как программно проверить, зарегистрирован ли объект. Мы можем использовать следующий фрагмент кода:


УзелОбмена = ПланыОбмена.Полный.НайтиПоКоду("ПБ"); // Код подчиненной базы
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.Штрихкоды.Изменения ГДЕ Узел = &Узел";
Запрос.УстановитьПараметр("Узел", УзелОбмена);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
    Сообщить("Изменения штрихкодов не зарегистрированы!");
КонецЕсли;

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

← На главную