Почему в УТ 11 при выборе видны не все партнеры и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В работе с распределенными информационными базами (РИБ) на базе 1С:Управление торговлей 11 часто возникают ситуации, когда данные в центральной базе и на узлах отображаются по-разному. Одной из специфических проблем является «исчезновение» партнеров из формы выбора в документах закупки (Приобретение товаров и услуг) или финансовых документах (РКО), при этом в общем списке справочника партнеры могут быть видны. Особенно странно это выглядит, когда видимость объекта зависит от установки флага «Прочие отношения».

В данной статье мы подробно разберем, почему так происходит, проанализируем внутренние механизмы платформы и программные фильтры, а также составим пошаговый план по восстановлению корректной работы системы.

Причина 1: Регистр сведений «Иерархия партнеров»

Разберем основной технический нюанс. В современных версиях УТ 11 для оптимизации построения динамических списков и корректного отображения иерархии используется вспомогательный регистр сведений ИерархияПартнеров. Если запись о партнере отсутствует в этом регистре на конкретном узле РИБ, система не сможет корректно обработать запрос динамического списка, и партнер просто не попадет в выборку.

Почему это происходит в РИБ? При обмене данными может возникнуть ситуация, когда сам объект (справочник Партнеры) успешно мигрировал на узел, а записи вспомогательного регистра не были зарегистрированы к обмену или были повреждены. Особенно часто это проявляется при изменении «типовых» признаков (Поставщик, Клиент, Прочие отношения), так как при записи объекта срабатывают подписки на события, обновляющие этот регистр.

Для решения этой проблемы проанализируем состояние регистра на узле:

  1. Откроем «Функции для технического специалиста» и найдем регистр ИерархияПартнеров.
  2. Проверим наличие записей по проблемным партнерам.
  3. Если записей нет или они некорректны, необходимо инициировать их обновление.

Посмотрим на пример кода, который можно использовать во внешней обработке для принудительного обновления иерархии:


Выборка = Справочники.Партнеры.Выбрать();
Пока Выборка.Следующий() Цикл
    ОбъектПартнер = Выборка.ПолучитьОбъект();
    // При записи объекта в УТ 11 автоматически вызываются механизмы обновления иерархии
    ОбъектПартнер.ОбменДанными.Загрузка = Истина; 
    ОбъектПартнер.Записать();
КонецЦикла;

Важный момент: Иногда флаг ОбменДанными.Загрузка = Истина может блокировать обновление вспомогательных регистров. В таком случае попробуем вызвать экспортную процедуру модуля менеджера справочника, отвечающую за обновление данных (если таковая предусмотрена в вашем релизе).

Причина 2: Фиксированные отборы динамического списка

Если с регистром иерархии все в порядке, рассмотрим ситуацию с программными фильтрами. Часто программисты ищут проблему в стандартных настройках формы («Еще» -> «Настроить список»), но не находят там активных отборов. Однако в 1С существует понятие фиксированного отбора, который устанавливается из кода и не виден пользователю.

Выясним, где именно может накладываться фильтр. Рассмотрим процедуру ПриСозданииНаСервере в форме выбора партнеров. Там может быть прописана логика, анализирующая вид документа. Например, если открывается форма выбора из документа «Приобретение», система может автоматически добавлять условие:


ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поставщик");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементОтбора.Использование = Истина;

Если при этом у партнера стоит галка «Прочие отношения», и в конфигурации прописана сложная логика исключения (например, партнер не должен быть одновременно и «Прочим», и «Поставщиком» для определенных операций), он исчезнет из списка. Проверить это можно через Расширение конфигурации, переопределив свойство «Основная форма настроек динамического списка», чтобы увидеть все скрытые поля и условия.

Причина 3: Механизм RLS и ключи доступа

Система безопасности 1С (RLS — Restriction at Level of Records) в УТ 11 работает через специальные регистры ключей доступа. Если в центральной базе партнер доступен, а на узле — нет, это может означать, что регламентное задание «Обновление данных о доступности партнеров» не отработало на узле РИБ.

Проанализируем шаги для проверки этой гипотезы:

  1. Перейдем в раздел «Администрирование» -> «Обслуживание» -> «Регламентные задания».
  2. Найдем задание, связанное с обновлением ключей доступа (обычно это «Обновление ключей доступа к объектам»).
  3. Выполним его принудительно.
  4. Проверим регистр сведений КлючиДоступаКПартнерам. Если он пуст или содержит неактуальные данные для текущего пользователя, партнеры не будут отображаться в формах выбора.

Причина 4: Рассинхронизация функциональных опций

В УТ 11 существует функциональная опция «Независимое ведение партнеров и контрагентов». Если в центре она включена, а на узле из-за ошибки обмена константами выключена (или наоборот), механизмы фильтрации в запросах динамических списков начинают работать непредсказуемо. Система может пытаться найти связи в таблицах, которые не заполнены, что приводит к пустому результату в форме выбора.

Проверим настройки в разделе «НСИ и администрирование» -> «CRM и маркетинг» -> «Настройки CRM». Убедимся, что положение флага совпадает на обоих узлах базы.

Причина 5: Локальный кэш конфигурации

Не стоит забывать и о «бытовых» проблемах платформы. Иногда фиксированные настройки формы или параметры выбора «залипают» в локальном кэше метаданных пользователя на конкретном компьютере. Это объясняет, почему стандартный сброс настроек («Установить стандартные настройки») не приносит результата.

Для устранения этой вероятности выполним следующие действия:

  1. Закроем 1С.
  2. Удалим базу из списка и добавим её заново (это сменит идентификатор кэша).
  3. Или вручную очистим папки %LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8.

Резюме и рекомендации

Если вы столкнулись с тем, что установка флага «Прочие отношения» скрывает партнера в РИБ, выполните диагностику по следующему алгоритму:

  1. Сверьте данные регистра ИерархияПартнеров в центре и на узле. Это самая вероятная причина в 90% случаев.
  2. Запустите обновление ключей доступа RLS, если используются ограничения прав.
  3. Проверьте программные отборы в форме выбора через отладчик или расширение, обращая внимание на параметры, передаваемые в форму из документа.

Использование флага «Прочие отношения» часто является триггером для изменения логики работы запроса динамического списка. Убедившись в целостности вспомогательных регистров и актуальности регламентных заданий, вы вернете корректную видимость всех контрагентов в вашей системе.

← На главную