При работе с 1С:Документооборот 2.1.31.5 пользователи могут столкнуться с ситуацией, когда при выборе элементов справочника "Полные роли" из внешней обработки или некоторых стандартных форм отображается только код элемента вместо его осмысленного наименования. Это может значительно затруднить работу, поскольку выбор осуществляется не по понятному описанию, а по техническому идентификатору. Однако, если открыть тот же справочник через "функции для технического исполнителя" или после выбора элемента, наименование отображается корректно. Мы рассмотрим эту проблему и предложим пути ее решения.
Давайте вместе разберемся, почему возникает такая ситуация, и какие шаги необходимо предпринять, чтобы форма выбора справочника "Полные роли" всегда отображала наименования элементов.
Для начала, проанализируем, почему система ведет себя таким образом. Мы видим, что в одних случаях наименования элементов справочника "Полные роли" отображаются (например, через "функции для технического исполнителя" или после окончательного выбора элемента), а в других – нет (при открытии формы выбора из внешних обработок). Это указывает на то, что сами наименования существуют и могут быть получены, но стандартная форма выбора по умолчанию не знает, как их отобразить.
Отсутствие стандартного реквизита "Наименование": В ходе анализа конфигурации выясняется, что у справочника "Полные роли" отсутствует стандартный реквизит Наименование. Это критически важный момент, поскольку большинство стандартных механизмов 1С, включая автоматическую генерацию форм выбора, по умолчанию ориентируются именно на этот реквизит для отображения текстового представления элемента.
Генерация формы выбора по умолчанию: Если для справочника не определена собственная "Форма выбора", система 1С автоматически генерирует ее. Эта сгенерированная форма по умолчанию пытается отобразить поля Код и Наименование. Поскольку реквизит Наименование отсутствует, отображается только Код.
Проверка через "Изменить форму": Попытка изменить форму списка или выбора через "Еще/Изменить форму" также подтверждает, что в доступных полях для отображения присутствует только Код, что еще раз указывает на отсутствие стандартного реквизита или правильно настроенного представления.
Программное формирование наименования: Тот факт, что наименования видны через "функции для технического исполнителя" и отображаются после выбора элемента, говорит о том, что наименования формируются программно. Это может происходить в каких-либо обработчиках события объекта или посредством вычисляемого поля в динамическом списке основной формы списка справочника, которое комбинирует значения других реквизитов или вызывает специальную функцию.
Свойство "Представление" справочника: Каждый справочник в 1С имеет свойство "Представление", которое определяет, как элемент справочника будет выглядеть в пользовательском интерфейсе. Если это свойство не настроено на использование другого подходящего реквизита или вычисляемого поля, система будет использовать Код или системное представление.
Итак, главная причина кроется в отсутствии стандартного реквизита Наименование и соответствующей настройки свойства "Представление" или специализированной формы выбора, которая бы программно формировала нужное наименование.
Исходя из выявленных причин, мы можем предложить несколько подходов к решению проблемы.
Наиболее надежным и гибким способом решения данной проблемы является создание и настройка собственной формы выбора для справочника "Полные роли" в режиме "Конфигуратор". Это позволит нам полностью контролировать, какие поля и каким образом будут отображаться пользователю.
Открываем Конфигуратор: Запускаем 1С в режиме "Конфигуратор" и переходим к ветке справочника "Полные роли".
Создаем новую форму: Разворачиваем справочник "Полные роли", находим узел "Формы" и добавляем новую форму. В качестве типа формы мы выбираем "Форма выбора".
Размещаем динамический список: На только что созданную форму выбора мы добавляем основной элемент управления – ДинамическийСписок. Этот элемент позволяет гибко настроить вывод данных, включая вычисляемые поля.
Настраиваем динамический список:
В свойствах ДинамическогоСписка устанавливаем Основную таблицу в значение Справочник.ПолныеРоли.
Переходим на вкладку "Настройка списка" (обычно доступна через кнопку с увеличительным стеклом или правой кнопкой мыши на элементе списка) и выбираем "Изменить динамический список".
В открывшемся окне "Настройка динамического списка" нам нужно добавить новое поле. Поскольку стандартного реквизита Наименование у нас нет, мы создадим вычисляемое поле.
Нажимаем кнопку "Добавить поле", выбираем тип "Вычисляемое поле".
В колонке "Путь к данным" или "Выражение представления" (в зависимости от версии и режима настройки) мы указываем выражение, которое будет формировать наименование. Мы можем использовать существующие реквизиты справочника "Полные роли", которые в совокупности дают осмысленное представление. Например, если у справочника есть реквизиты ИдентификаторРоли и ОписаниеРоли, мы можем объединить их:
ИдентификаторРоли + " (" + ОписаниеРоли + ")"
Или, если существует специальная функция модуля объекта, которая возвращает представление, мы можем вызвать ее, например:
ПредставлениеОбъекта(Ссылка)
Где ПредставлениеОбъекта – это экспортируемая функция в модуле объекта справочника "Полные роли", которая программно формирует требуемую строку.
Даем этому вычисляемому полю понятное Заголовок, например, "Полное наименование роли".
Добавляем это новое вычисляемое поле в список полей, отображаемых на форме динамического списка. При этом мы можем скрыть стандартное поле Код, чтобы пользователям было удобнее.
Назначаем форму основной: После того как форма выбора создана и настроена, нам необходимо назначить ее "Основной формой выбора" для справочника. Для этого в свойствах самого справочника "Полные роли" в Конфигураторе находим свойство Основная форма выбора и указываем на нашу новую форму.
После этих шагов при каждом вызове формы выбора справочника "Полные роли" будет использоваться наша настроенная форма, отображающая сформированное наименование.
Если в справочнике "Полные роли" уже существует другой реквизит строкового типа, который содержит осмысленное наименование (например, ПолноеИмяРоли или Описание), и это значение достаточно для представления элемента, то можно попробовать более простое решение – настроить свойство "Представление" самого справочника.
Открываем Конфигуратор: Запускаем 1С в режиме "Конфигуратор" и переходим к свойствам справочника "Полные роли".
Настраиваем свойство "Представление": В палитре свойств справочника находим раздел "Представление". Здесь есть несколько свойств:
Основное представление: Здесь можно выбрать, как будет формироваться основное представление элемента. Если есть подходящий реквизит, выбираем его.
Представление объекта: Здесь указываем имя метода модуля объекта, который будет возвращать строковое представление объекта.
Представление списка: Аналогично, метод для представления в списках.
Если есть реквизит, например, ТекстПредставленияРоли, который уже содержит нужное наименование, мы можем установить Основное представление в "В поле" и выбрать этот реквизит. Если же наименование формируется сложно, то следует использовать Представление объекта и в модуле объекта справочника реализовать функцию, например, ПолучитьНаименование(), которая возвращает нужную строку. Тогда в свойстве Представление объекта мы укажем ПолучитьНаименование.
// В модуле объекта справочника ПолныеРоли
Функция ПолучитьНаименование() Экспорт
// Здесь формируем наименование, используя реквизиты объекта
Возврат ИдентификаторРоли + " - " + ОписаниеРоли;
КонецФункции
Важно понимать, что это решение повлияет на представление объекта во всей системе, а не только в форме выбора.
Помимо настроек форм, если вам необходимо получить наименование элемента справочника программно (например, в запросах или при работе с объектами в коде), вы всегда можете явно обращаться к нужным реквизитам справочника или вызывать методы модуля объекта, которые формируют представление.
Например, если у справочника есть реквизиты Идентификатор и Назначение, можно получить их так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПолныеРоли.Идентификатор КАК ИдентификаторРоли,
| ПолныеРоли.Назначение КАК НазначениеРоли
|ИЗ
| Справочник.ПолныеРоли КАК ПолныеРоли
|ГДЕ
| ПолныеРоли.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаЭлементСправочника);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
ПолноеНаименование = Результат.ИдентификаторРоли + " (" + Результат.НазначениеРоли + ")";
КонецЕсли;
Это гарантирует, что вы всегда получите нужное представление, даже если формы по умолчанию не отображают его корректно.
Мы выяснили, что проблема отображения только кода в форме выбора справочника "Полные роли" в 1С:Документооборот 2.1.31.5 связана с отсутствием стандартного реквизита Наименование и настроенной формы выбора. Наиболее полным и надежным решением является создание собственной формы выбора с использованием динамического списка и вычисляемого поля, которое будет программно формировать нужное наименование из доступных реквизитов справочника.
Как альтернативное, более простое решение, мы рассмотрели настройку свойства "Представление" самого справочника, если для этого есть подходящий реквизит или функция в модуле объекта. Выбрав подходящий подход, вы сможете обеспечить удобство работы пользователей, всегда отображая осмысленное наименование элементов справочника "Полные роли" в формах выбора.