Почему при обмене РИБ в 1С:Управление торговлей 11 пропадают движения документов и как это исправить?

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

Работа с распределенными информационными базами (РИБ) в современных конфигурациях на платформе «1С:Предприятие 8.3» (таких как Управление торговлей 11, ERP Управление предприятием 2 или Комплексная автоматизация 2) претерпела значительные изменения по сравнению со старыми редакциями. Архитектура метаданных усложнилась, и теперь перенос документов «один в один» часто сопровождается скрытыми механизмами оптимизации проведения и отложенной регистрации изменений.

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

Причина 1. Проблемы авторегистрации и выгрузки регистра «Товары организаций»

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

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

Проанализируем решение этой проблемы. Для восстановления целостности данных нам необходимо принудительно включить выгрузку движений этого регистра в плане обмена после инициализации узла. Мы можем сделать это программно, добавив регистр в состав обмена или зарегистрировав его записи вручную. Рассмотрим пример кода для принудительной регистрации движений регистра накопления по узлу обмена:


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

Применение этого подхода гарантирует, что физические движения регистра будут принудительно доставлены в подчиненную базу вместе с транзакцией обмена данными.

Причина 2. Ошибки в регистре сведений «Реестр документов» и битые ссылки

В современных конфигурациях 1С активно используется служебный регистр сведений РеестрДокументов. Он предназначен для быстрого построения динамических списков и журналов документов в интерфейсе пользователя. Если запись в этом регистре отсутствует, повреждена или содержит неактуальные данные, документ может физически существовать в базе данных (и даже иметь движения по регистрам), но не отображаться в стандартных списках и журналах.

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

«Ошибка чтения файла сообщения обмена: Ошибка при вызове метода контекста (ЗакончитьЧтение): Ошибка при выполнении обработчика - ПередЗаписью... Преобразование значения к типу Булево не может быть выполнено»

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

Для исправления ситуации выполним очистку регистра сведений РеестрДокументов от записей с битыми ссылками. Напишем для этого простую обработку:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Реестр.Документ КАК Документ,
    |	Реестр.ТипСсылки КАК ТипСсылки
    |ИЗ
    |	РегистрСведений.РеестрДокументов КАК Реестр";
    
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

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

Сообщить("Очищено битых записей в реестре документов: " + КоличествоОчищенных);

После удаления записей с битыми ссылками в обоих узлах обмена рекомендуется запустить стандартную процедуру «Исправление ошибок в данных» или перестроить индекс реестра документов с помощью типовой обработки «Заполнение реестра документов» из состава конфигурации.

Причина 3. Ошибки сериализации XDTO и версий платформы

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

Если при выгрузке реквизит типа Булево записывается в XML-файл обмена некорректно, то при чтении в подчиненном узле код конфигурации не может распознать значение. Для устранения этой проблемы выполните следующие действия:

  1. Обновите технологическую платформу «1С:Предприятие» в центральном и всех периферийных узлах до актуальной стабильной версии (не ниже 8.3.15, а лучше актуальной 8.3.22/8.3.23). Важно, чтобы на всех серверах и клиентах использовалась строго одинаковая версия платформы.
  2. Очистите кэш метаданных на рабочих станциях и серверах приложений, так как искажение кэша конфигурации часто приводит к сбоям сопоставления типов XML при чтении сообщений обмена.

Причина 4. Влияние функциональных опций и констант

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

Выясним причину этого поведения. Логика проведения документов в Управление торговлей 11 сильно зависит от состояния функциональных опций (ФО). Если в центральной базе включены опции ИспользоватьНесколькоСкладов или ИспользоватьОрдерныеСклады, а в периферийной базе эти константы по какой-то причине (например, сбой при начальной инициализации узла) выключены, то при проведении документов алгоритмы проведения будут игнорировать склады и обрезать движения по регистру Товары на складах.

Рассмотрим порядок синхронизации функциональных опций:

  1. Проверьте значения ключевых констант в периферийном узле через «Все функции» (или «Функции для технического специалиста»).
  2. Убедитесь, что настройки параметров учета в подчиненном узле полностью идентичны настройкам в главном узле.
  3. Принудительно зарегистрируйте к обмену константы и настройки параметров учета из центрального узла, чтобы актуализировать функциональные опции в подчиненной базе.

Причина 5. Неправильно установленная дата начала выгрузки документов

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

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

Рекомендуется проанализировать настройки фильтрации и при необходимости временно сдвинуть дату начала выгрузки на момент начала ведения учета в базе, либо воспользоваться обработкой регистрации изменений для принудительной выгрузки исторических остатков и документов, формирующих партии.

Резюме и общий алгоритм действий для администратора

Если вы столкнулись с потерей движений или ошибками обмена в РИБ на базе УТ 11.4, выполните следующие шаги:

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