В распределенных информационных базах (РИБ) иногда случаются ситуации, которые на первый взгляд кажутся мистическими: документы, которые годами находились в подчиненном узле, внезапно исчезают после очередного сеанса синхронизации. В конфигурации 1С:Розница 2.3 такая проблема часто затрагивает специфический объект — Документ.ЛистКассовойКниги. Давайте вместе разберем, почему это происходит, как работает механизм миграции и какими способами можно восстановить данные.
Для начала проанализируем архитектуру решения. В отличие от конфигурации «1С:Бухгалтерия предприятия», где кассовая книга формируется как отчет «на лету», в 1С:Розница разработчики реализовали Лист кассовой книги как полноценный документ. Рассмотрим, к чему это приводит:
Магазин соответствует настройке узла.Выясним причину исчезновения. Если ночью фоновое задание по обмену данными удалило документы в филиале, это означает только одно: с точки зрения Центральной Базы (ЦБ) эти документы больше не должны находиться в этом узле. Система РИБ при синхронизации отправила команду УдалениеОбъекта.
Рассмотрим подробнее, какие события могут спровоцировать массовое удаление документов Лист кассовой книги из подчиненного узла:
Магазин в документах, механизм РИБ мгновенно реагирует. Как только объект перестает соответствовать фильтру узла, он регистрируется «на удаление» для этого узла. При следующем обмене филиал получает команду очистки.Заметим важный симптом: если после исчезновения старых листов новые документы начали создаваться с номера «1», это подтверждает, что база филиала теперь считает себя абсолютно «чистой» по данному виду учета, так как не видит в локальных таблицах предыдущих записей для анализа нумерации.
Если документы в Центральной Базе сохранились, их можно принудительно «вернуть» в филиал. Рассмотрим, как это сделать правильно. Посмотрим на алгоритм действий:
Во-первых, необходимо убедиться, что в документах в ЦБ заполнен правильный Магазин. Если реквизит пуст, регистрация не поможет — фильтр снова отсечет объект.
Во-вторых, воспользуемся обработкой «Регистрация изменений для обмена данными»:
Лист кассовой книги.После этого запустим синхронизацию. ЦБ увидит, что объекты зарегистрированы для выгрузки, и отправит их в подчиненный узел.
Бывают ситуации, когда штатная регистрация не срабатывает из-за сложных правил конвертации или поврежденных фильтров. В этом случае разберем по шагам метод прямого переноса:
ДокументОбъект.ЛистКассовойКниги.Важный момент: При загрузке через XML в РИБ документы могут снова исчезнуть при следующем обмене, если причина (неверный фильтр в ЦБ) не была устранена. Поэтому данный метод лучше использовать как экстренный, предварительно проверив настройки планов обмена.
Если мы хотим выяснить, почему объекты регистрируются на удаление, мы можем программно проверить текущие изменения для узла. Рассмотрим пример кода, который позволяет проанализировать состав зарегистрированных изменений для конкретного узла:
ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелСсылка, НомерСообщения);
Пока ВыборкаИзменений.Следующий() Цикл
Данные = ВыборкаИзменений.Получить();
Если ТипЗнч(Данные) = Тип("УдалениеОбъекта") Тогда
Сообщить("Объект типа " + Данные.ОбъектМетаданных().Имя + " будет удален в узле!");
КонецЕсли;
КонецЦикла;
Используя этот подход, мы можем заранее увидеть, что система готовит «сюрприз» для филиала, и остановить обмен до выяснения причин.
Подводя итог, проанализируем ситуацию: «чудес» в 1С не бывает. Исчезновение документов — это всегда результат работы алгоритмов синхронизации. Чтобы избежать подобного в будущем, рекомендуем:
Магазин в проведенных документах кассовой книги.Таким образом, мы выяснили, что восстановление данных возможно как штатными средствами регистрации изменений, так и через внешние инструменты выгрузки. Главное — устранить первопричину в Центральной Базе, чтобы избежать повторного инцидента.