При организации распределенной информационной базы (РИБ) в розничной торговле нередко используется схема, когда первичные документы ЧекККМ не передаются в центральный узел, а сворачиваются в документ ОтчетОРозничныхПродажах. Однако в случае сбоя или некорректной настройки синхронизации в центральной базе могут появиться битые ссылки вида <Объект не найден...>, что приводит к задвоению движений и расхождению складских остатков между узлами. Разберем причины возникновения этой ситуации и пошаговые способы исправления данных.
Проанализируем механику работы обмена данными в платформе 1С:Предприятие:
ТоварыНаСкладах). Если для регистра включена авторегистрация или движения были зарегистрированы кодом, а выгрузка самого документа ЧекККМ запрещена правилами, в узел-приемник попадает только набор записей. В базе-приемнике поле Регистратор становится битой ссылкой с уникальным идентификатором (UUID) документа из периферийной базы.ОтчетОРозничныхПродажах. Если удаление движений чека не зарегистрировалось для отправки, в центральной базе остаются старые движения по несуществующему чеку плюс новые движения отчета, что приводит к двойному списанию товара.Если в периферийной базе учет ведется корректно, а в центральной базе возникли расхождения, наиболее простой вариант — принудительно зарегистрировать правильные документы и связанные справочники для отправки в центральный узел.
Разберем по шагам, как выполнить регистрацию:
ОтчетОРозничныхПродажах за нужную дату.Номенклатура, чтобы исключить расхождения по аналитике.Важно: если чеки ККМ в периферийной базе уже находятся в статусе архивных, типовые механизмы конфигурации не позволят выполнить их перепроведение вручную. В этом случае синхронизацию следует выполнять через регистрацию итоговых документов списания и отчетов.
Если в регистре накопления центральной базы зависли движения с битым регистратором, их можно удалить программно через запись пустого набора записей регистра. Рассмотрим пример удаления зависших записей в регистре накопления ТоварыНаСкладах:
УИДДокумента = Новый УникальныйИдентификатор("a76c50e5-49c4-ff5b-11e5-d79738a36a10");
СсылкаНаЧек = Документы.ЧекККМ.ПолучитьСсылку(УИДДокумента);
Набор = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(СсылкаНаЧек);
Набор.Прочитать();
Если Набор.Количество() > 0 Тогда
Набор.Очистить();
Набор.Записать(Истина);
Сообщить("Движения по битой ссылке успешно удалены.");
КонецЕсли;
В результате выполнения этого кода платформа перезапишет пустой набор записей с отбором по несуществующему регистратору, сняв задвоенные остатки и удалив фантомное списание.
Для массового устранения ссылочных проблем в базе данных можно воспользоваться штатной процедурой конфигуратора:
Чтобы исключить повторение ситуации в будущем, проанализируем настройки планов обмена:
Авторегистрация в значение Запретить. Движения должны регистрироваться строго кодом вместе с родительским документом.ПриОтправкеДанныхГлавному, необходимо явно вызывать метод ПланыОбмена.УдалитьРегистрациюИзменений() как для самого документа, так и для наборов записей всех регистров, где он выступает регистратором.