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

Особое внимание уделим практическим примерам — от простого открытия справочника до сложных сценариев с передачей параметров и обработкой результатов. Вы узнаете, как избежать типичных ошибок, почему форма может не открываться, и как адаптировать код под разные версии платформы. Материал будет полезен как начинающим 1С-программистам, так и специалистам, которые хотят систематизировать свои знания.

Что такое режим выбора в 1С и зачем он нужен

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

  • 📌 Заполнения реквизитов — когда нужно выбрать значение из справочника (например, "Контрагент" в документе "Реализация").
  • 🔄 Межформенного взаимодействия — передача данных между формами без прямого редактирования.
  • 📊 Фильтрации данных — выбор элементов для отчётов или обработок.
  • 🔧 Автоматизации процессов — когда выбор пользователя запускает дальнейшие действия (например, печать документа).

Основное отличие режима выбора от обычного открытия формы — наличие кнопки Выбрать и возможность возвращать выбранные данные в вызывающую форму. Например, при выборе номенклатуры в документе "Поступление товаров" пользователь видит список товаров, выбирает нужный и возвращается к заполнению документа с автоматически подставленным значением.

💡

Если форма открывается в режиме выбора, но кнопка "Выбрать" неактивна, проверьте настройки прав доступа — возможно, у пользователя нет прав на чтение данных из этого справочника.

Способы открытия формы в режиме выбора

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

1. Через конфигуратор (для разработчиков)

Самый гибкий способ — программное открытие формы с использованием встроенного языка. Основные методы:

  • 📝 ОткрытьФорму() — универсальный метод для открытия любой формы.
  • 🔹 ОткрытьФормуМодально() — блокирует работу с другими окнами до закрытия текущей формы.
  • 🔄 ПолучитьФорму() — создаёт форму без её отображения (для дальнейшей настройки).

Пример кода для открытия справочника "Номенклатура" в режиме выбора:

Процедура ОткрытьСправочникНаВыбор()

Результат = ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ЭтотОбъект, Истина);

Если НЕ Результат.ВыбранноеЗначение = Неопределено Тогда

Сообщить("Вы выбрали: " + Результат.ВыбранноеЗначение.Наименование);

КонецЕсли;

КонецПроцедуры

2. Через пользовательский интерфейс (без программирования)

Пользователи без доступа к конфигуратору могут открывать формы в режиме выбора через:

  • 🖱️ Контекстное меню — правый клик на реквизите → "Выбрать из списка".
  • 🔍 Кнопку лупы рядом с полем ввода (если она активна).
  • 📋 Горячие клавишиF4 или Ctrl+Shift+F4 (зависит от настройки).
📊 Какой способ открытия формы в режиме выбора вы используете чаще?
Через конфигуратор (код)
Через пользовательский интерфейс
Горячие клавиши
Не знаю, как это сделать

3. Через внешние обработки

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

  • 🔧 Нестандартных фильтров (например, выбор только активных контрагентов).
  • 📊 Многокритериального поиска (по нескольким реквизитам одновременно).
  • 🔄 Интеграции с другими системами (выбор данных из внешних источников).

Пример: обработка для выбора номенклатуры с фильтром по остаткам на складе.

Пример кода для внешней обработки

Процедура КомандыФормы_ВыполнитьВыбор(Команда)

Фильтр = Новый Структура("ТолькоСОстатками", Истина);

Результат = ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ЭтотОбъект, Истина,, Фильтр);

Если Результат.ВыбранноеЗначение <> Неопределено Тогда

Возврат Результат.ВыбранноеЗначение;

Иначе

Возврат Неопределено;

КонецЕсли;

КонецПроцедуры

Параметры метода ОткрытьФорму() для режима выбора

Метод ОткрытьФорму() — самый универсальный инструмент для работы с формами. Для открытия в режиме выбора используются следующие параметры:

Параметр Описание Пример значения
ИмяФормы Имя открываемой формы (например, форма выбора справочника). "Справочник.Контрагенты.ФормаВыбора"
ВладелецФормы Объект, который будет владельцем формы (обычно ЭтотОбъект). ЭтотОбъект
РежимВыбора Флаг, указывающий, что форма открывается для выбора (Истина). Истина
ПараметрыФормы Дополнительные параметры (например, фильтры или начальные значения). Новый Структура("ФильтрПоГруппе", Истина)
Модальность Определяет, будет ли форма модальной (Истина — блокирует другие окна). Ложь

Пример с фильтром по группе справочника:

ПараметрыФормы = Новый Структура();

ПараметрыФормы.Вставить("ФильтрПоГруппе", Новый Структура("Родитель", Справочники.Номенклатура.НайтиПоНаименованию("Товары")));

Результат = ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ЭтотОбъект, Истина, , ПараметрыФормы);

💡

Если не указать параметр РежимВыбора = Истина, форма откроется в обычном режиме без возможности передачи выбранного значения.

Типичные ошибки и их решения

При работе с формами в режиме выбора разработчики и пользователи часто сталкиваются с типичными проблемами. Рассмотрим самые распространённые из них и способы их устранения:

1. Форма не открывается или открывается в обычном режиме

Причины и решения:

  • 🚫 Не указан параметр РежимВыбора = Истина → Добавьте его в вызов ОткрытьФорму().
  • 🔒 Недостаточно прав → Проверьте права пользователя на чтение данных справочника.
  • 🔧 Ошибка в имени формы → Убедитесь, что форма существует в конфигурации.

2. Кнопка "Выбрать" неактивна

Это происходит, если:

  • 📛 Не задан владелец формы → Передайте ЭтотОбъект во втором параметре.
  • 🔄 Форма открыта не в режиме выбора → Проверьте параметр РежимВыбора.
  • 🚫 Отсутствуют права на выбор → Настройте роли в конфигураторе.

3. Не передаётся выбранное значение

Частая ошибка — игнорирование возвращаемого значения метода ОткрытьФорму(). Пример правильной обработки:

РезультатВыбора = ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ЭтотОбъект, Истина);

Если РезультатВыбора.ВыбранноеЗначение <> Неопределено Тогда

Сообщить("Выбран: " + РезультатВыбора.ВыбранноеЗначение.Наименование);

Иначе

Сообщить("Выбор отменён пользователем");

КонецЕсли;

Указан ли параметр РежимВыбора = Истина?|Проверены ли права пользователя на чтение данных?|Корректно ли указано имя формы?|Передан ли владелец формы (ЭтотОбъект)?|Обработан ли результат выбора (РезультатВыбора.ВыбранноеЗначение)?-->

Работа с фильтрами и параметрами в режиме выбора

Одной из ключевых возможностей режима выбора является фильтрация данных. Это позволяет сузить список доступных для выбора элементов по заданным критериям. Фильтры передаются через параметр ПараметрыФормы в виде структуры.

Пример фильтрации справочника "Контрагенты" по типу (только "Покупатель"):

Параметры = Новый Структура();

Параметры.Вставить("Фильтр",

Новый Структура("ТипКонтрагента",

Новый Массив(Перечисление.ТипыКонтрагентов.Покупатель)

)

);

ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ЭтотОбъект, Истина, , Параметры);

Также можно передавать начальные значения для полей формы. Например, чтобы форма выбора открывалась с предварительно выбранной группой:

Параметры.Вставить("Группа", Справочники.Контрагенты.ПоискПоРеквизиту("ЭтоГруппа", Истина));
💡

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

Особенности работы с разными типами объектов

Режим выбора поддерживается для большинства объектов 1С:Предприятие, но есть нюансы в зависимости от типа:

1. Справочники

Самый распространённый случай. Особенности:

  • 📚 Поддерживаются иерархические справочники (можно фильтровать по группам).
  • 🔍 Доступен поиск по наименованию (клавиша F3).
  • 🔄 Можно выбирать несколько элементов (если разрешено в настройках формы).

2. Документы

При выборе документов учитывайте:

  • 📅 Можно фильтровать по дате или виду документа.
  • 🔒 Часто требуются дополнительные права на просмотр документов.
  • 📊 Полезно использовать отбор по статусу (например, только проведённые).

3. Перечисления

Для перечислений режим выбора упрощён:

  • 📋 Открывается список всех значений перечисления.
  • 🔹 Выбор всегда одиночный (нельзя выбрать несколько значений).
  • 🔧 Часто используется для заполнения реквизитов с типом "Перечисление".

Пример открытия формы выбора для перечисления "ВидыНоменклатуры":

Результат = ОткрытьФорму("Перечисление.ВидыНоменклатуры.ФормаВыбора", ЭтотОбъект, Истина);
Как открыть форму выбора для плана видов характеристик (ПВХ)?

Для ПВХ используется тот же подход, что и для справочников, но с указанием имени плана. Пример: ОткрытьФорму("ПланВидовХарактеристик.Цвета.ФормаВыбора", ЭтотОбъект, Истина);

Практические примеры для разных задач

Рассмотрим несколько реальных сценариев использования режима выбора, которые часто встречаются в работе с 1С:Предприятие.

1. Выбор номенклатуры с учётом остатков

Задача: открыть форму выбора номенклатуры, но показать только те товары, которые есть в наличии на складе.

Процедура ВыбратьНоменклатуруСОстатками()

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура.Ссылка КАК Ссылка

|ИЗ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваров

|ГДЕ ОстаткиТоваров.Количество > 0";

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

СписокДоступнойНоменклатуры = Новый Массив;

Пока Выборка.Следующий() Цикл

СписокДоступнойНоменклатуры.Добавить(Выборка.Ссылка);

КонецЦикла;

Параметры = Новый Структура();

Параметры.Вставить("Фильтр", Новый Структура("Ссылка", СписокДоступнойНоменклатуры));

ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ЭтотОбъект, Истина, , Параметры);

КонецПроцедуры

2. Выбор контрагента с проверкой долга

Задача: при выборе контрагента в документе "Реализация" показывать только тех, у кого нет просроченной задолженности.

Процедура ВыбратьКонтрагентаБезДолга()

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ РАЗЛИЧНЫЕ Контрагенты.Ссылка КАК Ссылка

|ИЗ Справочник.Контрагенты КАК Контрагенты

|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК Долги

|ПО Контрагенты.Ссылка = Долги.Контрагент

|ГДЕ Долги.СуммаОстаток <= 0 ИЛИ Долги.Контрагент ЕСТЬ NULL";

РезультатЗапроса = Запрос.Выполнить();

// Далее аналогично примеру выше: формируем фильтр и открываем форму

КонецПроцедуры

3. Множественный выбор для отчёта

Задача: позволить пользователю выбрать несколько организаций для формирования сводного отчёта.

Процедура ВыбратьНесколькоОрганизаций()

Параметры = Новый Структура();

Параметры.Вставить("РежимВыбораЭлементов", Перечисление.РежимыВыбораЭлементов.Множественный);

Результат = ОткрытьФорму("Справочник.Организации.ФормаВыбора", ЭтотОбъект, Истина, , Параметры);

Если Результат.ВыбранныеЗначения <> Неопределено Тогда

Для Каждого Организация Из Результат.ВыбранныеЗначения Цикл

Сообщить(Организация.Наименование);

КонецЦикла;

КонецЕсли;

КонецПроцедуры

💡

Для множественного выбора обязательно укажите параметр РежимВыбораЭлементов = Перечисление.РежимыВыбораЭлементов.Множественный.

FAQ: Частые вопросы по работе с режимом выбора

Как открыть форму выбора для документа с фильтром по дате?

Используйте параметр Фильтр с указанием диапазона дат. Пример:

Параметры = Новый Структура();

Параметры.Вставить("Фильтр",

Новый Структура("Дата",

Новый Структура("С", НачалоДня(ТекущаяДата()), "По", КонецДня(ТекущаяДата()))

)

);

ОткрытьФорму("Документ.ПоступлениеТоваров.ФормаВыбора", ЭтотОбъект, Истина, , Параметры);

Можно ли открыть форму выбора для регистра сведений?

Да, но только если для регистра сведений определена форма выбора в конфигураторе. Пример:

ОткрытьФорму("РегистрСведений.ЦеныНоменклатуры.ФормаВыбора", ЭтотОбъект, Истина);

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

Как передать выбранное значение в другую форму?

Используйте механизм владельца формы. Пример:

// В вызывающей форме:

Процедура ОткрытьВыборКонтрагента()

Результат = ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ЭтотОбъект, Истина);

Если Результат.ВыбранноеЗначение <> Неопределено Тогда

ЭлементыФормы.Контрагент.Значение = Результат.ВыбранноеЗначение;

КонецЕсли;

КонецПроцедуры

Выбранное значение автоматически передаётся в форму-владельца через объект Результат.

Почему при выборе не обновляется поле в документе?

Возможные причины:

  1. Не обработан результат выбора (проверьте код после ОткрытьФорму()).
  2. Поле не связано с реквизитом формы (проверьте свойства элемента управления).
  3. Отсутствуют права на изменение документа (проверьте роли пользователя).
Как сделать, чтобы форма выбора открывалась в отдельном окне?

Используйте параметр ОткрыватьВНовомОкне = Истина:

ПараметрыОкна = Новый Структура("ОткрыватьВНовомОкне", Истина);

ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ЭтотОбъект, Истина, , , ПараметрыОкна);

💡

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

⚠️ Внимание: В некоторых конфигурациях (например, 1С:Бухгалтерия 3.0) имена форм выбора могут отличаться от стандартных. Всегда проверяйте актуальные имена в конфигураторе через меню Все функции → Формы.