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