Почему один пользователь не видит номенклатуру в форме подбора КА 2.4 и как это исправить?

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

При работе в программе 1С:Комплексная автоматизация 2.4 (или 1С:ERP) администраторы и программисты иногда сталкиваются с загадочным поведением интерфейса: один конкретный пользователь в форме подбора товаров не видит определенную позицию номенклатуры. При этом у других сотрудников с точно такими же правами доступа и на тех же компьютерах эта позиция отображается без проблем. Обычный сброс настроек формы кнопкой «Установить стандартные настройки» в таких случаях не помогает.

Давайте подробно разберем эту ситуацию, проанализируем возможные причины и выработаем пошаговый алгоритм локализации и устранения этой проблемы.

Шаг 1. Сравнение реквизитов «правильной» и «неправильной» номенклатуры через Консоль запросов

Если номенклатура переносилась из более ранних версий программ (например, из 1С:КА 1.1 или 1С:УПП 1.3) либо создавалась программно сторонними обработками, велика вероятность нарушения целостности данных. В карточке могут отсутствовать или быть неверно заполнены системные реквизиты, которые не выводятся на форму, но участвуют в построении динамического списка подбора.

Для диагностики этой проблемы воспользуемся консолью запросов. Наша задача — выбрать одну позицию, которую видят все пользователи (правильную), и ту, которую проблемный пользователь не видит (неправильную), после чего сравнить абсолютно все их поля, включая скрытые и системные.

Выполним следующий запрос в консоли:


ВЫБРАТЬ
    *
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Ссылка В (&ПравильнаяНоменклатура, &ПроблемнаяНоменклатура)

Давайте проанализируем результаты выполнения запроса. Особое внимание уделим следующим реквизитам:

  1. ТипНоменклатуры — если этот реквизит оказался не заполнен (имеет значение ПустаяСсылка), то при построении динамического списка подбора, где накладываются ограничения прав RLS (Restriction at Record Level) или внутренние соединения с регистрами сведений, эта позиция будет гарантированно отсекаться.
  2. ИспользоватьХарактеристики и связанные настройки вида номенклатуры — некорректно перенесенные флаги использования характеристик могут ломать левые соединения в запросе динамического списка.
  3. Статус — убедимся, что у проблемной позиции не установлен статус «В разработке» или «Закрыта». Пользователи с ограниченными правами по умолчанию не видят в подборе номенклатуру с такими статусами, в то время как администраторы имеют к ней доступ.
  4. Недействителен — проверьте, не установлена ли эта системная галочка, которая скрывает карточку из стандартных списков выбора.

Если в ходе сравнения обнаружены расхождения или незаполненные реквизиты, их необходимо исправить. Сделать это можно с помощью типовой обработки «Групповое изменение реквизитов» или написав небольшую одноразовую обработку.

Шаг 2. Проверка скрытого кэша и глубокая очистка настроек пользователя

Стандартный интерактивный сброс настроек формы подбора через меню «Еще» -> «Изменить форму» -> «Установить стандартные настройки» сбрасывает только визуальное отображение колонок и кнопок. Настройки отборов динамического списка при этом могут оставаться сохраненными глубоко в системных таблицах базы данных.

Для полной очистки параметров подбора у конкретного пользователя выполним следующие действия в режиме 1С:Предприятие:

  1. Перейдем в раздел НСИ и администрирование -> Администрирование -> Настройки пользователей и прав.
  2. Откроем ссылку Персональные настройки пользователей, а затем перейдем в пункт Очистка настроек.
  3. В открывшемся окне выберем проблемного пользователя.
  4. В дереве настроек найдем форму подбора номенклатуры соответствующего документа (например, Документ.РеализацияТоваровУслуг.Форма.ФормаПодбораТоваров или общую форму подбора номенклатуры).
  5. Выделим эту строку и нажмем кнопку Очистить.

Этот метод гарантированно удаляет все пользовательские «мусорные» отборы, которые могли записаться в системное ХранилищеНастроек.

Шаг 3. Исключение скрытых пользовательских фильтров в самой форме подбора

В форме подбора 1С:Комплексная автоматизация 2.4 реализован сложный механизм фильтрации, настройки которого визуально не отображаются в стандартной панели отборов динамического списка. Пользователи часто случайно активируют их, даже не осознавая этого.

Давайте проверим наличие следующих установленных флагов в форме подбора у проблемного пользователя:

Шаг 4. Анализ ограничений на уровне записей (RLS) и групп доступа

Даже если у пользователей назначен одинаковый профиль групп доступа, их персональные ограничения могут существенно отличаться. Ограничения прав (RLS) в 1С работают как неявные условия ГДЕ, добавляемые к каждому запросу к базе данных.

Проанализируем следующие параметры безопасности:

  1. Группы доступа номенклатуры: проверим, заполнена ли у позиции «Перфит А база» группа доступа номенклатуры. Если у проблемного пользователя в его персональных настройках прав (или настройках его подразделения) нет разрешения на работу с этой конкретной группой доступа, система просто отфильтрует ее на уровне СУБД.
  2. Ограничения по складам и организациям: если форма подбора открывается из документа конкретной организации или конкретного склада, а у пользователя урезаны права на этот склад по RLS, связанные товары могут не выводиться в подборе из-за накладываемых ограничений на связанные остатки.

Шаг 5. Проверка влияния партнерских соглашений и сегментации

В комплексных конфигурациях 1С выбор номенклатуры жестко завязан на контекст создаваемого документа. Если у проблемного пользователя в силу его настроек по умолчанию или особенностей работы с клиентом в документ «Реализация товаров и услуг» подставляется определенное Соглашение с клиентом, в нем могут быть заданы ограничения:

Шаг 6. Поиск причины с помощью отладчика

Если все предыдущие шаги не принесли результата, придется прибегнуть к помощи конфигуратора и отладчика. Нам необходимо перехватить текст запроса динамического списка в момент его формирования.

Рассмотрим порядок действий для разработчика:

  1. Откроем конфигуратор, найдем форму подбора номенклатуры.
  2. Установим точку останова в модуле формы в процедуре ПриСозданииНаСервере или в обработчиках, связанных с динамическим списком (например, ПриПолученииДанныхНаСервере).
  3. Запустим сеанс под проблемным пользователем и дойдем до точки останова.
  4. В табло вычислим выражение СписокНоменклатура.КомпоновщикНастроек.ПолучитьНастройки().
  5. Проанализируем коллекцию Отбор. Именно там мы сможем увидеть программно наложенные фильтры, которые не отображаются в пользовательском интерфейсе, но отсекают нужную позицию.

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

← На главную