Форма выбора (подбор) в управляемых формах
Разработка - Работа с интерфейсом
Продолжение статьи коллеги starik-2005.
Статья будет состоять из нескольких приведенных примеров кода с описанием того, как прибегнуть к Подбору.
Пример 1.
Простой вызов формы выбора с одним возвращаемым результатом:
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура("РежимВыбора",Истина);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) ///Событие формы
РезультатСсылка = ВыбранноеЗначение; ///Выбранное значение, вернет ссылку (документа в нашем примере)
КонецПроцедуры
Пример 2.
Выбор нескольких значений (документов или справочников) :
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",ложь);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
МассивСсылок = ВыбранноеЗначение; ///Вернётся массив с выбранными значениями (Даже если значение только одно )
КонецПроцедуры
В первых 2-х примерах мы использовали обработчик (Событие) формы "ОбработкаВыбора".
Теперь рассмотрим пример с использованием "Обработки оповещения", на мой взгляд более удобно )
Пример 3.
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина); ///Если хотим несколько значений
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтотОбъект,"ПодборРеализации");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,
ЭтотОбъект, , , , ОбработкаВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) Экспорт
//Дополнительные условия если необходимо
//Если ДопПараметры = "ПодборРеализации" тогда
Если Значение = Неопределено Тогда ///Если ничего не выбрать - вернется пустое значение (Неопределено)
Возврат;
КонецЕсли;
МассивДокументов = Значение ///Если Множественный Выбор - то вернется массив
//КонецЕсли;
КонецПроцедуры
Пример 4.
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина); ///Если хотим несколько значений
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтотОбъект,"ПодборРеализации");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,
ЭтотОбъект, , , , ОбработкаВыбора);
КонецПроцедуры
&НаСервере
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) Экспорт
Если Значение = Неопределено Тогда ///Если ничего не выбрать - вернется пустое значение (Неопределено)
Возврат;
КонецЕсли;
МассивДокументов = Значение ///Если Множественный Выбор - то вернется массив
КонецПроцедуры
Мы видим что открывается форма выбора (из списка документов "Реализация товаров и услуг"), но иногда необходимо добавить некий отбор, чтобы при открытии формы не выводить все документы в целом.
Допустим мы хотим выбрать из списка документы только с товаром, для этого установим отбор по "Виду операции". Вид операции - это поле(реквизит) динамического списка, и отбор можно установить по всем доступным полям.
Пример 5.
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
///Создаем структуру с отбором и добавляем значения
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ВидОперации", ПредопределенноеЗначение("Перечисление.ВидыОперацийРеализацияТоваров.Товары"));
//ПараметрыОтбора.Вставить("Дата", ТекущаяДата()); ///Дополнительный отбор
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора); ///Добавляем отбор в параметры формы
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина);
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтотОбъект,"Подбор");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,
ЭтотОбъект, , , , ОбработкаВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) Экспорт
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
МассивДокументов = Значение;
КонецПроцедуры
Есть моменты когда не всегда можно обойтись простым отбором, например необходимо открыть форму выбора со списком за определенный период.
Для этого передаем вместо Отбора -Фиксированные настройки в форму выбора.
Пример 6.
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
///Если хотим несколько условий
ГруппаОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВидОперации");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ПредопределенноеЗначение("Перечисление.ВидыОперацийРеализацияТоваров.Товары");
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.больше;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = НачалоГода(ТекущаяДата());
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомпоновки);
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина);
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтотОбъект,"Подбор");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,
ЭтотОбъект, , , , ОбработкаВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) Экспорт
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
МассивДокументов = Значение
КонецПроцедуры
Пример 7.
Как открыть форму выбора с Позиционированием ранее выбранного значения:
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Ложь);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",ложь);
Если РанееВыбранныйДокумент <> Неопределено Тогда ///Реквизит формы, ранее выбранное значение из открываемой формы
//ПараметрыФормы.Вставить("УстановитьПараметрыФункциональныхОпцийФормы",Новый Структура("ТекущаяСтрока",РанееВыбранныйДокумент)); /// Можно и так
ПараметрыВыбора.Вставить("ТекущаяСтрока", РанееВыбранныйДокумент); /// Подсказка от подписчика: user1502278
КонецЕсли;
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтотОбъект,"Подбор");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,
ЭтотОбъект, , , , ОбработкаВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) экспорт
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
МассивДокументов = Значение
КонецПроцедуры
Тестировалось на 1С:Предприятие 8.3 (8.3.16.1063) и 1С:Предприятие 8.3 (8.3.13.1644), Спасибо за внимание, возможно, кому-то поможет)
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)
Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!
31720 руб.
27.03.2025 92293 69 44
Универсальные функции 1С 8.3 1С:Документооборот Россия Платные (руб)
ДО+ — расширение конфигурации, в котором собран постоянно пополняемый набор из 33 востребованных доработок для 1С:Документооборот КОРП 3.0: согласование задач прямо из мессенджеров MAX и Telegram, отзыв согласования и исполнения, гибкие повторные круги, эскалация с точностью до минут, контроль исполнительской дисциплины, выгрузка вложений в ZIP и склейка PDF, реестр документов в Excel, проверка дублей контрагентов и регистрационных номеров. Каждая возможность активируется отдельным флажком в режиме предприятия — включается только то, что нужно конкретной организации. Список функций расширяется с каждым релизом — текущая версия 2.1.0. Режим AddOn: типовая конфигурация не модифицируется, обновления ДО ставятся штатно, дополнительные лицензии и внешние компоненты не требуются. Внедрение силами администратора — около часа.
30000 руб.
09.07.2026 1422 1 0
Консолидация данных Работа с интерфейсом Разработчик Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 1C:ERP Узбекистан Беларусь Кыргызстан Россия Казахстан Платные (руб)
Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.
6088 руб.
17.10.2025 3654 3 0
Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)
Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.
36600 руб.
28.08.2025 10341 2 2
Универсальные функции Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.
21.05.2024 68806 dimanich70 87
WEB-интеграция Универсальные функции Механизмы платформы 1С Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.
28.08.2023 32110 YA_418728146 8
Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)
Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.
2 стартмани
22.08.2023 10305 121 progmaster 23
Работа с интерфейсом Разработчик 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)
"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.
1 стартмани
05.07.2022 17963 kalyaka 8
ПараметрыВыбора.Вставить("УстановитьПараметрыФункциональныхОпцийФормы",Новый Структура("ТекущаяСтрока",РанееВыбранныйДокумент));
Это лишнее, достаточно просто:
ПараметрыВыбора.Вставить(ТекущаяСтрока", РанееВыбранныйДокумент);только странно что везде в открываемую форму передается ЭтаФорма
вот если в первом примере передать ЭлементФормы.ПолеВвода
тогда не не понадобиться процедура ОбработкаВыбора
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура("РежимВыбора",Истина);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,ЭтаФорма.Элементы.ПолеРезультата);
КонецПроцедуры
//&НаКлиенте
//Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) ///Событие формы
//
// РезультатСсылка = ВыбранноеЗначение; ///Выбранное значение, вернет ссылку (документа в нашем примере)
//
//КонецПроцедуры Показать
,,,,,,,,,,,,,
ПараметрыОтбора = Новый Структура;
//ПараметрыОтбора.Вставить("ВидОперации", ПредопределенноеЗначение("Перечисление.ВидыОперацийРеализацияТоваров.Товары"));
ПараметрыОтбора.Вставить("ВыборГруппИЭлементов ", ИспользованиеГруппИЭлементов.Группы); //Вот так
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить("Отбор", ПараметрыОтбора); ///Добавляем отбор в параметры формы
ПоказатьА приватных методов НаКлиентеНаСервереБезКонтекста вообще можно создать несколько штук с одинаковым именем.
,,,,,,,,,,,,,
ПараметрыОтбора = Новый Структура;
//ПараметрыОтбора.Вставить("ВидОперации", ПредопределенноеЗначение("Перечисление.ВидыОперацийРеализацияТоваров.Товары"));
ПараметрыОтбора.Вставить("ВыборГруппИЭлементов ", ИспользованиеГруппИЭлементов.Группы); //Вот так
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить("Отбор", ПараметрыОтбора); ///Добавляем отбор в параметры формы
ПоказатьПараметрыВыбора.Вставить("УстановитьПараметрыФункциональныхОпцийФормы",Новый Структура("ТекущаяСтрока",РанееВыбранныйДокумент));
Это лишнее, достаточно просто:
ПараметрыВыбора.Вставить(ТекущаяСтрока", РанееВыбранныйДокумент);С помощью данной статьи удалось создавать форму выбора из Справочника в Документе. Работает подбор по определенному значению реквизита справочника и т.д. Спасибо!
Однако прошу подсказать как при открытии формы видеть только те номенклатурные позиции, у которых ненулевые остатки на складе(склад - реквизит документа, в котором мы находимся)?
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
ГруппаОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = МассивНоменклатуры(); ///Список номенклатуры с 0 остатком
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыВыбора,
ЭтаФорма, , , , ОбработкаВыбора);
КонецПроцедуры
&НаСервере
Функция МассивНоменклатуры()
масс = новый массив;
Для каждого стр из объект.товары цикл
Если стр.Остаток <0 тогда
масс.Добавить(стр.Номенклатура);
Конецесли;
возврат масс;
Конецфункции
Конецфункции
ПоказатьЕдинственное немного доработал код под свою задачу и все работает!!!
Функция МассивНоменклатуры(Склад)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиНоменклатурОстатки.Склад КАК Склад,
| ОстаткиНоменклатурОстатки.Номенклатура КАК Номенклатура,
| ОстаткиНоменклатурОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиНоменклатур.Остатки КАК ОстаткиНоменклатурОстатки
|ГДЕ
| ОстаткиНоменклатурОстатки.Склад = &Склад";
Запрос.УстановитьПараметр("Склад", Склад);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Массив = новый Массив;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Массив.Добавить(ВыборкаДетальныеЗаписи.Номенклатура);
КонецЦикла;
Возврат Массив;
КонецФункции
Показать
&НаКлиенте
Процедура Подбор(Команда)
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
ГруппаОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВидНоменклатуры");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ПредопределенноеЗначение("Перечисление.ВидНоменклатуры.Товар");
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = МассивНоменклатуры(Объект.Склад); ///Список номенклатуры с ненулевым остатком
ПарамВыбора = Новый Структура("ФиксированныеНастройки, РежимВыбора, ЗакрыватьПриВыборе",НастройкиКомпоновки, Истина, Ложь);
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");
Форма = ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",ПарамВыбора,ЭтаФорма, , , , ОбработкаВыбора);
КонецПроцедуры
Показать
&НаКлиенте
Процедура Подбор(Команда)
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
ГруппаОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВидНоменклатуры");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ПредопределенноеЗначение("Перечисление.ВидНоменклатуры.Товар");
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = МассивНоменклатуры(); ///Список номенклатуры с ненулевым остатком
ПарамВыбора = Новый Структура("ФиксированныеНастройки, РежимВыбора, ЗакрыватьПриВыборе",НастройкиКомпоновки, Истина, Ложь);
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");
Форма = ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",ПарамВыбора,ЭтаФорма, , , , ОбработкаВыбора);
КонецПроцедуры
Функция МассивНоменклатуры()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиНоменклатурОстатки.Склад КАК Склад,
| ОстаткиНоменклатурОстатки.Номенклатура КАК Номенклатура,
| ОстаткиНоменклатурОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиНоменклатур.Остатки КАК ОстаткиНоменклатурОстатки
|ГДЕ
| ОстаткиНоменклатурОстатки.Склад = &Склад";
Запрос.УстановитьПараметр("Склад", Объект.Склад);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номенклатура");
КонецФункции
ПоказатьДелаю всё по примеру №2, но открываемая форма не открывается в режиме выбора.
Подскажите, нужно ловить передаваемые параметры в процедуре "ПриСозданииНаСервере" и прописывать параметры выбора ручками (но это как-то не особо удобно) или я что-то упускаю?
Проверьте, используется ли форма выбора (Скрин1)
И посмотрите у формы выбора, в свойствах реквизита формы "Список" должно быть включено свойство "Режим выбора"
Если у вас нет формы выбора (У вас открывается форма списка) Тогда процедура будет такая:
Форма = ПолучитьФорму("Справочник.Товары.ФормаСписка");
Форма.Элементы.Список.РежимВыбора = Истина;
Форма.Открыть();
Если создать отдельную форму для выбора, то там в свойствах списка уже будет установлен режим выбора по умолчанию. Тогда зачем его ещё раз передавать в параметрах (ПараметрыФормы.Вставить("РежимВыбора",Истина);)?
Если использовать предложенный Вами способ, то программа выдаёт следующую ошибку:
"Ошибка при установке значения атрибута контекста (РежимВыбора)
Форма.Элементы.Список.РежимВыбора = Истина;
по причине:
Изменение свойства недоступно"
Выходит, что для корректной работы описанного в статье подбора, необходимо иметь две формы списка и постоянно дублировать форму списка в форму выбора, что не очень удобно (если производятся изменения в форме списка, то их нужно продублировать и в форме выбора).
Чтобы форма выбора возвращала выбранное значение
(32)
"Ошибка при установке значения атрибута контекста (РежимВыбора)
Форма.Элементы.Список.РежимВыбора = Истина;
по причине:
Изменение свойства недоступно"
Извиняюсь, ввел в заблуждение... Форму списка нельзя открыть для выбора без дополнительных манипуляций с самой формой списка.
Помогите пожалуйста с отбором в расширении. В расширение добавил в табличную часть документа "счет" дополнительную колонку с выбором из справочника "кассы"(иерархический, тоже добавлен) , хочу чтобы при открытии открывалась форма подбора (присутствует) с отбором по "Родителю" в моем случае "Контрагент" в этом документе .
в свойствах элемента создаем событие "НачалоВыбора"
&НаКлиенте
Процедура уч_Товарыуч_НомерЗаводскойНомерОбработкаВыбораВместо(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Структура = Новый Структура("Владелец", Объект.Контрагент) ;
ОткрытьФорму("Справочник.Кассы.ФормаВыбора", Структура, Элемент);
КонецПроцедуры
//в форме выбора добавляем событие "ПриСозданииНаСервере"
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// структура с параметрами сохранилась в переменной "Параметры"
Контрагент = Параметры.Владелец;
Если ЗначениеЗаполнено(Контрагент) Тогда
// Список отбора состоит из 1 контрагента
Список.Отбор.Элементы.Очистить();
СписокДляОтбора = Новый СписокЗначений;
СписокДляОтбора.Добавить(Контрагент);
// Установим отбор со созданному выше списку
Отбор = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
Отбор.Использование = Истина;
Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
Отбор.ПравоеЗначение = СписокДляОтбора;
Элементы.Список.Обновить();
КонецЕсли;
КонецПроцедуры
Показатьпока не указал "форму выбора" в справочнике "кассы" как основную не получалось.
Возможно, что отбор уже указан в конфигураторе для динамического списка. В этом случае вы пытаетесь установить 2 одинаковых отбора по одному списку, попробуйте получить форму, очистить отбор, потом добавить свой и открыть
Для ЗУП 3.1.27.93 сделана обработка, в которой :
&НаКлиенте
Процедура Подбор(Команда)
Оповещение = Новый ОписаниеОповещения("ПодборЗавершение",ЭтотОбъект);
ПараметрыФормы = Новый Структура;
// ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
// ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ОткрытьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.ФормаВыбора",
ПараметрыФормы,,,,,Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПодборЗавершение(Результат,ДопПараметры) ЭКСПОРТ
Если Результат=Неопределено Тогда
Возврат;
КонецЕсли;
Таблица = Объект.СписокВедомостей;
Для каждого Эл из Результат Цикл
Если Таблица.НайтиСтроки(Новый Структура("Ведомость",Эл)).Количество() = 0 Тогда
НовСтр = Таблица.Добавить();
НовСтр.Ведомость = Эл;
НовСтр.КВыплате = ПолучитьКВыплатеНаСервере(Эл)
Иначе
Сообщить("Уже есть - "+Эл);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показатьтолько странно что везде в открываемую форму передается ЭтаФорма
вот если в первом примере передать ЭлементФормы.ПолеВвода
тогда не не понадобиться процедура ОбработкаВыбора
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура("РежимВыбора",Истина);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,ЭтаФорма.Элементы.ПолеРезультата);
КонецПроцедуры
//&НаКлиенте
//Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) ///Событие формы
//
// РезультатСсылка = ВыбранноеЗначение; ///Выбранное значение, вернет ссылку (документа в нашем примере)
//
//КонецПроцедуры Показатьможет что-то еще нужно где-то поставить?
Если убираю эту строку ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Ложь),
то срабатывает, но смысла в массиве тогда?
&НаКлиенте
Асинх Процедура ВыбратьНоменклатуру(Команда)
НоменклатураСсылка=ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка");
НоменклатураСсылка= Ждать ВвестиЗначениеАсинх(НоменклатураСсылка,"Выберите номенклатуру");
//...
КонецПроцедурыПоясню, создаю свой документ для КА 2.5. В нем добавляю кнопку которая открывает окно выбора документов реализация товаров и услуг, где пользователь должен иметь возможность выбирать много документов РТУ. Но при создании следующего документа при нажатии на кнопку подбора в списке выбора не должны появляться те документы РТУ которые уже были использованы ранее в других документах моего вида? Тоесть я создал документ например Маршрутный лист, у него в табличную часть загружаються товары из документов РТУ выбранных мной через кнопку. Создавая следующий документ я не должен видеть Реализации добавленные в ранее созданый маршрутный лист, как это сделать?
Рейтинг: 1126
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1233756
Создание 08.05.20 12:00
Обновление 01.11.25 10:41
Просмотры 439862
Загрузки 0
Рейтинг
419
Комментарии 56
Код открыт Да
Рубрики Универсальные функции Работа с интерфейсом
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)