В работе с распределенными информационными базами (РИБ) на базе 1С:Управление торговлей 11 часто возникают ситуации, когда данные в центральной базе и на узлах отображаются по-разному. Одной из специфических проблем является «исчезновение» партнеров из формы выбора в документах закупки (Приобретение товаров и услуг) или финансовых документах (РКО), при этом в общем списке справочника партнеры могут быть видны. Особенно странно это выглядит, когда видимость объекта зависит от установки флага «Прочие отношения».
В данной статье мы подробно разберем, почему так происходит, проанализируем внутренние механизмы платформы и программные фильтры, а также составим пошаговый план по восстановлению корректной работы системы.
Разберем основной технический нюанс. В современных версиях УТ 11 для оптимизации построения динамических списков и корректного отображения иерархии используется вспомогательный регистр сведений ИерархияПартнеров. Если запись о партнере отсутствует в этом регистре на конкретном узле РИБ, система не сможет корректно обработать запрос динамического списка, и партнер просто не попадет в выборку.
Почему это происходит в РИБ? При обмене данными может возникнуть ситуация, когда сам объект (справочник Партнеры) успешно мигрировал на узел, а записи вспомогательного регистра не были зарегистрированы к обмену или были повреждены. Особенно часто это проявляется при изменении «типовых» признаков (Поставщик, Клиент, Прочие отношения), так как при записи объекта срабатывают подписки на события, обновляющие этот регистр.
Для решения этой проблемы проанализируем состояние регистра на узле:
ИерархияПартнеров.Посмотрим на пример кода, который можно использовать во внешней обработке для принудительного обновления иерархии:
Выборка = Справочники.Партнеры.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектПартнер = Выборка.ПолучитьОбъект();
// При записи объекта в УТ 11 автоматически вызываются механизмы обновления иерархии
ОбъектПартнер.ОбменДанными.Загрузка = Истина;
ОбъектПартнер.Записать();
КонецЦикла;
Важный момент: Иногда флаг ОбменДанными.Загрузка = Истина может блокировать обновление вспомогательных регистров. В таком случае попробуем вызвать экспортную процедуру модуля менеджера справочника, отвечающую за обновление данных (если таковая предусмотрена в вашем релизе).
Если с регистром иерархии все в порядке, рассмотрим ситуацию с программными фильтрами. Часто программисты ищут проблему в стандартных настройках формы («Еще» -> «Настроить список»), но не находят там активных отборов. Однако в 1С существует понятие фиксированного отбора, который устанавливается из кода и не виден пользователю.
Выясним, где именно может накладываться фильтр. Рассмотрим процедуру ПриСозданииНаСервере в форме выбора партнеров. Там может быть прописана логика, анализирующая вид документа. Например, если открывается форма выбора из документа «Приобретение», система может автоматически добавлять условие:
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поставщик");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементОтбора.Использование = Истина;
Если при этом у партнера стоит галка «Прочие отношения», и в конфигурации прописана сложная логика исключения (например, партнер не должен быть одновременно и «Прочим», и «Поставщиком» для определенных операций), он исчезнет из списка. Проверить это можно через Расширение конфигурации, переопределив свойство «Основная форма настроек динамического списка», чтобы увидеть все скрытые поля и условия.
Система безопасности 1С (RLS — Restriction at Level of Records) в УТ 11 работает через специальные регистры ключей доступа. Если в центральной базе партнер доступен, а на узле — нет, это может означать, что регламентное задание «Обновление данных о доступности партнеров» не отработало на узле РИБ.
Проанализируем шаги для проверки этой гипотезы:
КлючиДоступаКПартнерам. Если он пуст или содержит неактуальные данные для текущего пользователя, партнеры не будут отображаться в формах выбора.В УТ 11 существует функциональная опция «Независимое ведение партнеров и контрагентов». Если в центре она включена, а на узле из-за ошибки обмена константами выключена (или наоборот), механизмы фильтрации в запросах динамических списков начинают работать непредсказуемо. Система может пытаться найти связи в таблицах, которые не заполнены, что приводит к пустому результату в форме выбора.
Проверим настройки в разделе «НСИ и администрирование» -> «CRM и маркетинг» -> «Настройки CRM». Убедимся, что положение флага совпадает на обоих узлах базы.
Не стоит забывать и о «бытовых» проблемах платформы. Иногда фиксированные настройки формы или параметры выбора «залипают» в локальном кэше метаданных пользователя на конкретном компьютере. Это объясняет, почему стандартный сброс настроек («Установить стандартные настройки») не приносит результата.
Для устранения этой вероятности выполним следующие действия:
%LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8.Если вы столкнулись с тем, что установка флага «Прочие отношения» скрывает партнера в РИБ, выполните диагностику по следующему алгоритму:
ИерархияПартнеров в центре и на узле. Это самая вероятная причина в 90% случаев.Использование флага «Прочие отношения» часто является триггером для изменения логики работы запроса динамического списка. Убедившись в целостности вспомогательных регистров и актуальности регламентных заданий, вы вернете корректную видимость всех контрагентов в вашей системе.