Как исправить ошибку «Объект не найден» и восстановить остатки после обмена РИБ в 1С

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

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

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

Проанализируем механику работы обмена данными в платформе 1С:Предприятие:

  1. Передача движений регистров без самого документа: в состав плана обмена входят не только сами документы, но и связанные наборы записей регистров (например, ТоварыНаСкладах). Если для регистра включена авторегистрация или движения были зарегистрированы кодом, а выгрузка самого документа ЧекККМ запрещена правилами, в узел-приемник попадает только набор записей. В базе-приемнике поле Регистратор становится битой ссылкой с уникальным идентификатором (UUID) документа из периферийной базы.
  2. Рассинхронизация при архивации чеков: если сеанс обмена выполнился до закрытия кассовой смены, движения чеков успели передаться в центральный узел. После закрытия смены в периферийной базе чеки переходят в статус архивных и их движения очищаются, а вместо них создается ОтчетОРозничныхПродажах. Если удаление движений чека не зарегистрировалось для отправки, в центральной базе остаются старые движения по несуществующему чеку плюс новые движения отчета, что приводит к двойному списанию товара.

Способ 1. Принудительная регистрация и повторная синхронизация документов

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

Разберем по шагам, как выполнить регистрацию:

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

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

Способ 2. Программная очистка движений по битой ссылке в базе-приемнике

Если в регистре накопления центральной базы зависли движения с битым регистратором, их можно удалить программно через запись пустого набора записей регистра. Рассмотрим пример удаления зависших записей в регистре накопления ТоварыНаСкладах:


УИДДокумента = Новый УникальныйИдентификатор("a76c50e5-49c4-ff5b-11e5-d79738a36a10");
СсылкаНаЧек = Документы.ЧекККМ.ПолучитьСсылку(УИДДокумента);

Набор = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(СсылкаНаЧек);
Набор.Прочитать();

Если Набор.Количество() > 0 Тогда
    Набор.Очистить();
    Набор.Записать(Истина);
    Сообщить("Движения по битой ссылке успешно удалены.");
КонецЕсли;

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

Способ 3. Использование штатного «Тестирования и исправления»

Для массового устранения ссылочных проблем в базе данных можно воспользоваться штатной процедурой конфигуратора:

  1. Создадим резервную копию информационной базы.
  2. Запустим информационную базу в режиме Конфигуратор.
  3. Перейдем в меню Администрирование > Тестирование и исправление...
  4. Установим флаг «Проверка ссылочной целостности».
  5. В переключателе при наличии ссылок на несуществующие объекты выберем:
    1. «Очищать ссылки» — если требуется удалить некорректные записи регистров, ссылающиеся на несуществующие чеки.
    2. «Создавать объекты» — если требуется создать документ-заглушку, который отобразится в интерфейсе и позволит отменить его проведение штатными средствами.
  6. Нажмем кнопку «Выполнить» и дождемся завершения операции.

Как предотвратить появление битых ссылок при обмене РИБ

Чтобы исключить повторение ситуации в будущем, проанализируем настройки планов обмена:

  1. Управление авторегистрацией регистров: в дереве метаданных конфигурации для планов обмена у регистров, движения по которым делают невыгружаемые документы, необходимо установить свойство Авторегистрация в значение Запретить. Движения должны регистрироваться строго кодом вместе с родительским документом.
  2. Синхронное снятие с регистрации: если документ исключается из отправки программно в обработчике ПриОтправкеДанныхГлавному, необходимо явно вызывать метод ПланыОбмена.УдалитьРегистрациюИзменений() как для самого документа, так и для наборов записей всех регистров, где он выступает регистратором.
  3. Регламент обмена: обмен с центральным узлом рекомендуется выполнять после штатного закрытия кассовой смены и полной архивации чеков в узле торговой точки.
← На главную