Как программно создать или настроить форму выбора в 1С:Предприятие 8.3?

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

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

Метод 1. Подмена стандартной формы выбора через событие НачалоВыбора

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

Разберем алгоритм действий по шагам:

  1. Перейдем в свойства элемента формы (поля ввода), для которого нужно изменить форму выбора.
  2. Создадим обработчик события НачалоВыбора.
  3. Внутри обработчика установим параметр СтандартнаяОбработка в значение Ложь. Это скажет платформе, что стандартное окно выбора открывать не нужно.
  4. Вызовем метод ОткрытьФорму(), указав путь к нашей кастомной форме.

Пример кода для реализации этого метода:


&НаКлиенте
Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    // Отменяем стандартное открытие формы выбора справочника
    СтандартнаяОбработка = Ложь;
    
    // Параметры для новой формы (фильтры, отборы)
    ПараметрыВыбора = Новый Структура;
    ПараметрыВыбора.Вставить("Отбор", Новый Структура("ЮридическоеФизическоеЛицо", ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо")));
    
    // Открываем свою форму (например, форму из расширения или другую форму справочника)
    ОткрытьФорму("Справочник.Контрагенты.Форма.ФормаВыбораСпециальная", ПараметрыВыбора, Элемент);
    
КонецПроцедуры

Этот метод позволяет полностью контролировать процесс: мы можем передать любые параметры, установить специфические отборы и даже открыть форму совсем другого объекта, если это необходимо по логике процесса.

Метод 2. Программное изменение состава колонок в Динамическом списке

Проанализируем ситуацию, описанную в сообщениях форума: на форме видны только Дата и Номер, а остальные реквизиты скрыты или отсутствуют. Если мы работаем с управляемыми формами, то данные в формах выбора обычно отображаются с помощью объекта ДинамическийСписок.

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

Для этого используется событие ПриСозданииНаСервере. Выясним, как добавить поле программно:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // 1. Изменяем текст запроса динамического списка, чтобы включить нужные поля
    ТекстЗапроса = Список.ТекстЗапроса;
    // Предположим, нам нужно добавить поле "ИНН" для контрагента
    // Если запрос основной таблицы, платформа сама подтянет поля, если они есть в метаданных.
    // Если запрос произвольный, его нужно переписать:
    Список.ТекстЗапроса = "ВЫБРАТЬ Ссылка, Код, Наименование, ИНН ИЗ Справочник.Контрагенты";

    // 2. Программно добавляем элемент формы (колонку в таблицу)
    НоваяКолонка = Элементы.Добавить("ИНН", Тип("ПолеФормы"), Элементы.Список);
    НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
    НоваяКолонка.ПутьКДанным = "Список.ИНН";
    НоваяКолонка.Заголовок = "ИНН организации";
    
КонецПроцедуры

Использование метода Элементы.Добавить() позволяет динамически формировать интерфейс в зависимости от прав пользователя или условий задачи, что критически важно в сложных системах.

Метод 3. Работа в «закрытых» конфигурациях через Расширения

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

Посмотрим, как решить задачу через расширение:

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

Например, мы можем использовать аннотацию &Вместо("ПриСозданииНаСервере"), чтобы изменить видимость стандартных реквизитов, которые платформа скрывает по умолчанию.

Метод 4. Пользовательская настройка (без программирования)

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

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

Важный момент для администраторов: эти настройки можно сохранить и программно или через консоль администрирования «раздать» всем пользователям системы. Это избавляет от необходимости вносить изменения в программный код и упрощает обновление конфигурации.

Метод 5. Управление видимостью программно

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

В форме выбора часто используется именно управление видимостью колонок в зависимости от параметров, переданных при открытии формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Проверяем параметр, переданный при открытии
    Если Параметры.Свойство("РежимКраткогоСписка") И Параметры.РежимКраткогоСписка Тогда
        Элементы.СписокКод.Видимость = Ложь;
        Элементы.СписокИНН.Видимость = Ложь;
    КонецЕсли;
КонецПроцедуры

Особенности работы с Базовыми версиями

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

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

← На главную