Почему в поле с составным типом данных не отображается нужный справочник в 1С

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

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

Анализ влияния синонимов на список выбора

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

Рассмотрим, как работает механизм сортировки в диалоговом окне «Выбор типа»:

  1. Система собирает все доступные типы, указанные в свойстве реквизита Тип.
  2. Для каждого типа извлекается его представление (синоним, если он заполнен, иначе — имя).
  3. Список сортируется по алфавиту именно по этим представлениям.

Выясним причину на примере: если вы ожидаете увидеть «Кассы» в начале списка (на букву «К»), а справочник имеет синоним «Лимит», он окажется гораздо ниже в списке. Проверьте свойства объекта метаданных в конфигураторе и убедитесь, что вы ищете правильное визуальное наименование.

Проверка прав доступа и механизма RLS

Если с синонимами все в порядке, но тип всё равно не отображается, проанализируем права доступа текущего пользователя. Платформа 1С спроектирована таким образом, чтобы не показывать пользователю те объекты, к которым у него нет доступа, даже на уровне выбора типа. Это делается для обеспечения безопасности и чистоты интерфейса.

Обратим внимание на следующие роли и права:

  1. Право «Чтение»: Позволяет системе знать о существовании объекта. Если оно отсутствует, тип точно не появится.
  2. Право «Просмотр»: Это право отвечает за отображение объекта в интерфейсных формах и списках выбора. Если «Чтение» есть, а «Просмотра» нет, тип может быть доступен программно, но в диалоге выбора типа его не будет.
  3. Ограничение доступа на уровне записей (RLS): В некоторых случаях сложные условия в шаблонах RLS могут приводить к тому, что при отсутствии прав на чтение всех записей справочника, сам тип начинает вести себя некорректно в интерфейсе, хотя это встречается реже.

Попробуем запустить сеанс под пользователем с полными правами. Если проблема исчезла — дело в настройках ролей.

Влияние функциональных опций

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

Платформа исключает типы, связанные с выключенными опциями, из:

Проверьте вкладку «Функциональные опции» в свойствах справочника. Если он там числится, выясните значение соответствующей опции в режиме «Предприятие».

Программное ограничение типа данных

Даже если в метаданных всё настроено верно, состав типов может ограничиваться в коде формы. Проанализируем программные способы управления доступными типами. В 1С существует свойство элемента формы ОграничениеТипа, которое имеет тип ОписаниеТипов.

Посмотрим на пример кода, который может выполняться в процедуре ПриСозданииНаСервере:


// Пример программного сужения списка типов
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("СправочникСсылка.Клиенты"));
МассивТипов.Добавить(Тип("Строка"));

// Устанавливаем ограничение для элемента формы "Объект.ПолучательДенег"
НовоеОписание = Новый ОписаниеТипов(МассивТипов);
Элементы.ПолучательДенег.ОграничениеТипа = НовоеОписание;

В данном примере, даже если в конфигураторе для реквизита ПолучательДенег указан справочник Кассы, пользователь его не увидит, так как мы программно переопределили доступные типы. Выполните глобальный поиск (Ctrl+Shift+F) по имени вашего элемента формы или реквизита, чтобы убедиться, что нигде не вызывается установка свойства ОграничениеТипа или ВыбиратьТип.

Связи параметров выбора и кэширование

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

Также не стоит исключать проблемы с локальным кэшем конфигурации. Если вы недавно меняли состав типов в конфигураторе и обновили базу (F7), но в пользовательском режиме изменения не видны, попробуйте очистить кэш. Выясним, как это сделать правильно:

  1. Удалите базу из списка в стартере 1С и добавьте её заново.
  2. Или используйте параметр запуска /ClearCache.

Использование расширений конфигурации

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

Итоги и рекомендации

Подводя итог, если вы столкнулись с «исчезновением» типа в диалоге:

Как правило, решение кроется в одном из этих пунктов, и внимательный аудит свойств метаданных позволяет быстро исправить ситуацию.

← На главную