Очень часто бывает необходимо на форме дать возможность пользователю выбрать настройки на форме (перед нажатием кнопки «Выполнить все»). Когда нужно выбрать одно значение из нескольких предопределенных – часто используется выпадающий список значений 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. Гиперссылка в пользовательском режиме