1С выпадающий список значений на форме

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

Выпадающий список значений 1С на форме — добавьте на форму толстого клиента поле выбора, уточните его название. Чтобы пользователь не мог изменять список – снимите галочку «Редактирование текста» в свойствах поля выбора.

Сам список выбора добавим программно в обработчике формы «ПриОткрытии». У поля выбора есть подчиненный список значений ЭлементыФормы.ИмяПоляВыбора.СписокВыбора, а для установки значения по умолчанию, и для определения выбранного значения ЭлементыФормы.ИмяПоляВыбора.Значение:
Процедура ПриОткрытии()
ЭлементыФормы.ВыборЗначения.СписокВыбора.Очистить();
ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(0, «Создать документ»);
ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(1, «Изменить документ»);
ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(2, «Удалить документ»);
ЭлементыФормы.ВыборЗначения.Значение = 0;
КонецПроцедуры

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

  • Включим кнопку выбора списка
  • В свойстве «Список выбора» нажмите «…» и введите варианты
  • Результат выбора будет сохранен в выбранном реквизите


Выпадающий список значений 1С на форме — Вариант 2)

  • Включим кнопку выбора списка
  • Добавим обработчик «НачалоВыбораИзСписка»

&НаКлиенте
Процедура ВыбранноеЗначениеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
Элементы.ВыбранноеЗначение.СписокВыбора.Добавить(«Добавить документ»);
Элементы.ВыбранноеЗначение.СписокВыбора.Добавить(«Редактировать документ»);
Элементы.ВыбранноеЗначение.СписокВыбора.Добавить(«Удалить документ»);
КонецПроцедуры

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

Выпадающий список значений 1С на форме — Вариант 3)

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

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

Цитата Поле объекта недоступно для записи (ПереводИсточник)
Код «Формы документа»
// *********************
// * Переменные модуля *
// *********************
///////////////////////////////////////////////////
//
// Назначение: Поле для занесения выбранного счета
//
// Использование:
// — устанавливается: Процедура ПереводИсточникНачалоВыбора
// — считывается для адресации значения: Процедура ОбработкаВыбора
//
&НаКлиенте
Перем мВыборСчета;
// ****************
// * Подпрограммы *
// ****************
//////////////////////////////////////////////////////////////////////////////
//
// Процедура ПереводИсточникНачалоВыбора
//
// Назначение: Вызывает интерфейс выбора «ПереводИсточник»
//
// Вызов: При нажатии кнопки выбора или нажатии клавиши F4 на атрибуте «ПереводИсточник»
//
&НаКлиенте
Процедура ПереводИсточникНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// ====================================================================
// = Зафиксировать заненсение результата в «Элементы.ПереводИсточник» =
// ====================================================================
мВыборСчета = Новый Массив;
мВыборСчета.Добавить(«ПереводИсточник»);
// ==========================================================
// = Создадим форму выбора из «Справочник.НИС_Учт_Сч_Счета» =
// ==========================================================
фВыборСчета = ОткрытьФорму(«Справочник.НИС_Учт_Сч_Счета.Форма.ФормаВыбора»);
фВыборСчета.ВладелецФормы = ЭтаФорма;
фВыборСчета.Открыть();
// ===================================
// = Запретить стандартную обработку =
// ===================================
СтандартнаяОбработка = Ложь;
// =========================================================================
// = Результат выбора обрабатывается в процедуре события «ОбработкаВыбора» =
// =========================================================================
КонецПроцедуры // ПереводИсточникНачалоВыбора
//////////////////////////////////////////////////////////////////////////////
//
// Процедура ОбработкаВыбора
//
// Назначение: Заполняет выбранный «СчетДТ»
//
// Вызов: При выборе значения в подчиненной форме
//
&НаКлиенте
Процедура ОбработкаВыбора(пВыбранноеЗначение, пИсточникВыбора)
// =============================
// = Проверить источник выбора =
// =============================

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

Продолжаем разговор о открытие форм различным способом (и с различными целями), предыдущая статья рассказывала о том, как открыть форму с заполнением, а данная статья расскажет о том, ка открыть форму с отбором (форма списка, форма выбора) в обычном и управляемом приложении.

Открытие формы с отбором в обычном приложении

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

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

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

Открытие формы с отбором в управляемом приложении

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

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

Второй способ лишен недостатков первого способа, но выглядит значительно более громоздко:

И на всякий случай приведу третий способ, который, на самом деле, мало чем отличается от второго, но смотрите сами:

Не забывайте отключать стандартную обработку, если это требуется, а также указывать/не указывать владельца при получении/открытии формы.

В заключение отмечу, что я намеренно не использую модальное открытие формы списка/выбора (1С с некоторых пор приказала отказываться от модальности), но если у Вас есть потребность в модальности, то такое, разумеется, тоже возможно.

На этом все, надеюсь данная статья Вам помогла.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

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

Рассмотрим варианты размещения элементов на форме на примере вывода реквизитов документа на форму документа, состав документа представлен на рис. 1:

Рис. 1. Реквизиты документа

Добавляем форму документа, по умолчанию все элементы формы будут располагаться сверху вниз по порядку (рис. 2):

Рис. 2. Расположение элементов на форме по умолчанию

Сделаем форму более удобной для просмотра и ввода значений.

Поля Документ основание, Ответственный и Комментарий сдвинем вниз, для этого выделяем эти поля и нажимаем стрелку вниз (рис. 3):

Рис. 3. Перемещение полей

Поле Документ основание представим в виде ссылки, чтобы при нажатии открывалось значение реквизита Документ основание. Открываем свойства поля ДокументОснование правой кнопкой мыши Свойства или Alt Enter (рис. 4):

Рис. 4. Открытие свойств поля

В окне Свойства у свойства Вид устанавливаем значение Поле надписи, отмечаем галочкой свойство Гиперссылка (рис. 5). Можно убрать заголовок поля Документ основание:, если у свойства ПоложениеЗаголовка изменить значение на Нет.

Рис. 5. Настройка свойств поля-гиперссылки

Зададим обработку события нажатия гиперссылки: в окне Свойства в разделе События нажимаем на значок лупы у события Нажатие (рис. 6):

Рис. 6. Событие Нажатие

В открывшемся окне оставляем значение Создать на клиенте, нажимаем ОК. Откроется модуль формы документа с шаблоном процедуры ДокументОснованиеНажатие(), добавляем строку ПоказатьЗначение(,Объект.ДокументОснование); (рис. 7):

Рис. 7. Обработка нажатия на гиперссылку

Само значение реквизита ДокументОснование будет определяться при создании на основании, задаем это на вкладке Ввод на основании (рис. 9):

Рис. 9. Ввод на основании

и прописываем в процедуре ОбработкаЗаполнения() в модуле объекта документа (рис. 10, рис. 11):

Рис. 10. Открытие модуля объекта документа

Рис. 11. Создание процедуры ОбработкаЗаполнения() в модуле объекта документа

В процедуру ОбработкаЗаполнения() в модуле объекта документа добавим строку ДокументОснование = ДанныеЗаполнения.Ссылка;.

Теперь в пользовательском режиме у созданного на основании документа поле Документ основание будет выглядеть так (рис. 12):

Рис. 12. Гиперссылка в пользовательском режиме

1С выпадающий список значений на форме

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *