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