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