Форма выбора (подбор) в управляемых формах

19.04.23

Разработка - Универсальные функции

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

Продолжение статьи коллеги 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), Спасибо за внимание, возможно, кому-то поможет)

Подбор УФ ФормаВыбора Отбор

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62984    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    18852    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10224    7    7    

10

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14728    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3578    56    progmaster    8    

4

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    5747    kalyaka    6    

33
Отзывы
18. user1502278 241 15.06.21 03:04 Сейчас в теме
ПараметрыВыбора.Вставить("УстановитьПараметрыФункциональныхОпцийФормы",Новый Структура("ТекущаяСтрока",РанееВыбранныйДокумент));


Это лишнее, достаточно просто:

ПараметрыВыбора.Вставить(ТекущаяСтрока", РанееВыбранныйДокумент);
birk; adhocprog; zaic; astreikaea; kseonbr; user5300; +6 Ответить
15. user5300 1063 13.06.20 10:37 Сейчас в теме
(14) Можно добавить дополнительный отбор, выбор для групп

,,,,,,,,,,,,,
ПараметрыОтбора = Новый Структура;
//ПараметрыОтбора.Вставить("ВидОперации", ПредопределенноеЗначение("Перечисление.ВидыОперацийРеализацияТоваров.Товары"));
ПараметрыОтбора.Вставить("ВыборГруппИЭлементов ", ИспользованиеГруппИЭлементов.Группы); //Вот так
 
	ПараметрыВыбора = Новый Структура;
	ПараметрыВыбора.Вставить("Отбор", ПараметрыОтбора); ///Добавляем отбор в параметры формы


Показать
Alexs_7574; dart17; alex99232014; adhocprog; +4 Ответить
46. GlukAl 22.03.24 15:29 Сейчас в теме
спасибо за памятку
только странно что везде в открываемую форму передается ЭтаФорма

вот если в первом примере передать ЭлементФормы.ПолеВвода

тогда не не понадобиться процедура ОбработкаВыбора

&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
 
	ПараметрыФормы = Новый Структура("РежимВыбора",Истина);

	ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,ЭтаФорма.Элементы.ПолеРезультата);

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

//&НаКлиенте
//Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) ///Событие формы
//	
//     РезультатСсылка =  ВыбранноеЗначение; ///Выбранное значение, вернет ссылку (документа в нашем примере)
//
//КонецПроцедуры
Показать
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CyberCerber 872 08.05.20 13:40 Сейчас в теме
Да, с серверными методами формы вечно какие-то косяки в платформе. Раньше приватные методы на сервере можно было вызывать вне формы.
А приватных методов НаКлиентеНаСервереБезКонтекста вообще можно создать несколько штук с одинаковым именем.
CratosX; user5300; +2 Ответить
2. marku 63 09.05.20 10:48 Сейчас в теме
Спасибо. Можно ещё пример с позиционированием, при открытии, на раннее выбранном документе.
5. user5300 1063 11.05.20 09:32 Сейчас в теме
(2) Добавил, пример 7.
16. ids79 8535 25.09.20 20:34 Сейчас в теме
(5)Чего-то не понял...
А почему не так:
ПараметрыВыбора.Вставить("ТекущаяСтрока",РанееВыбранныйДокумент);
?
e.simonova; Altez; alex99232014; ankr; Mechanist; +5 Ответить
3. artemusII 36 10.05.20 14:02 Сейчас в теме
"Работает до 8.3.13.1644, с 8.3.16.1063 этот метод недоступен"...

Не соглашусь - работает отлично. Проверено.
Прикрепленные файлы:
4. user5300 1063 11.05.20 09:02 Сейчас в теме
(3) У меня вываливается ошибка... Странно
Прикрепленные файлы:
6. Xershi 1555 11.05.20 16:12 Сейчас в теме
(4) возможно дело в режиме совместимости или тии не сделали.
Также может повлиять битность 1с.
9. user5300 1063 12.05.20 08:54 Сейчас в теме
(6) База типовая, БП 3, настройки типовые, x64
7. starik-2005 3087 12.05.20 00:12 Сейчас в теме
(4) Сделайте метод экспортным и должно взлететь... Ну и может повлиять модуль "ЭтаФорма" и "ЭтотОбъект".
гвость; +1 Ответить
8. user5300 1063 12.05.20 08:51 Сейчас в теме
(7)
"ЭтаФорма" и "ЭтотОбъект"

и так и так пробовал, не хочет работать ) на Сервере он должен без экспорта взлететь
10. starik-2005 3087 12.05.20 14:22 Сейчас в теме
(8)
на Сервере он должен без экспорта взлететь
Это раньше так было, теперь экспорт нужен и на сервере.
user5300; +1 Ответить
11. coollerinc 196 13.05.20 12:44 Сейчас в теме
Может кто подскажет, как сделать форму списка, формой выбора. Не программно? я так и не нашел этой галочки в свойствах формы
12. Romarius 16 15.05.20 10:06 Сейчас в теме
(11)
Ищите флажок на элементе списка
coollerinc; +1 Ответить
13. coollerinc 196 15.05.20 15:05 Сейчас в теме
14. IVC_goal 226 12.06.20 10:25 Сейчас в теме
Нет примера вывода Формы Выбора Группы с отбором. Это возможно?
15. user5300 1063 13.06.20 10:37 Сейчас в теме
(14) Можно добавить дополнительный отбор, выбор для групп

,,,,,,,,,,,,,
ПараметрыОтбора = Новый Структура;
//ПараметрыОтбора.Вставить("ВидОперации", ПредопределенноеЗначение("Перечисление.ВидыОперацийРеализацияТоваров.Товары"));
ПараметрыОтбора.Вставить("ВыборГруппИЭлементов ", ИспользованиеГруппИЭлементов.Группы); //Вот так
 
	ПараметрыВыбора = Новый Структура;
	ПараметрыВыбора.Вставить("Отбор", ПараметрыОтбора); ///Добавляем отбор в параметры формы


Показать
Alexs_7574; dart17; alex99232014; adhocprog; +4 Ответить
17. UtSpar 137 09.04.21 08:15 Сейчас в теме
Если мы работаем с полем формы то код что указан в КомандаОткрытьФормуВыбора должен быть в обработчике начало выбора с указание стандартной обработки в ложь.
user1165146; +1 Ответить
18. user1502278 241 15.06.21 03:04 Сейчас в теме
ПараметрыВыбора.Вставить("УстановитьПараметрыФункциональныхОпцийФормы",Новый Структура("ТекущаяСтрока",РанееВыбранныйДокумент));


Это лишнее, достаточно просто:

ПараметрыВыбора.Вставить(ТекущаяСтрока", РанееВыбранныйДокумент);
birk; adhocprog; zaic; astreikaea; kseonbr; user5300; +6 Ответить
19. maxim_saharov 06.08.21 15:39 Сейчас в теме
Спасибо большое - только первый и второй метод в обработке "НачалоВыбора" на 8.3.19.1229 не работает - и честно я не могу понять как это первый метод может работать ? ) Он может только для обычный форм ? ведь в нем же нету обработки оповещения. А вот третий супер метод еще раз Спасибо!
20. astreikaea 25.11.21 21:49 Сейчас в теме
Добрый день.
С помощью данной статьи удалось создавать форму выбора из Справочника в Документе. Работает подбор по определенному значению реквизита справочника и т.д. Спасибо!

Однако прошу подсказать как при открытии формы видеть только те номенклатурные позиции, у которых ненулевые остатки на складе(склад - реквизит документа, в котором мы находимся)?
21. user5300 1063 26.11.21 09:53 Сейчас в теме
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
	НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;

  
    ГруппаОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

	ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Ссылка");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.ВСписке;
	ЭлементОтбора.Использование  = Истина;
	ЭлементОтбора.ПравоеЗначение = МассивНоменклатуры();   ///Список номенклатуры с 0 остатком



	ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");

	ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыВыбора,
	        ЭтаФорма, , , , ОбработкаВыбора);

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

&НаСервере
Функция МассивНоменклатуры() 
    масс = новый массив;
    Для каждого стр из объект.товары цикл
        Если стр.Остаток <0 тогда
            масс.Добавить(стр.Номенклатура);
         Конецесли;
        возврат масс;
    Конецфункции
Конецфункции
Показать
user712426; astreikaea; +2 Ответить
22. user5300 1063 26.11.21 09:54 Сейчас в теме
23. astreikaea 26.11.21 14:07 Сейчас в теме
Спасибо большое!
Единственное немного доработал код под свою задачу и все работает!!!
Функция МассивНоменклатуры(Склад) 
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОстаткиНоменклатурОстатки.Склад КАК Склад,
		|	ОстаткиНоменклатурОстатки.Номенклатура КАК Номенклатура,
		|	ОстаткиНоменклатурОстатки.КоличествоОстаток КАК КоличествоОстаток
		|ИЗ
		|	РегистрНакопления.ОстаткиНоменклатур.Остатки КАК ОстаткиНоменклатурОстатки
		|ГДЕ
		|	ОстаткиНоменклатурОстатки.Склад = &Склад";
	
	
	Запрос.УстановитьПараметр("Склад", Склад);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Массив = новый Массив;
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	Массив.Добавить(ВыборкаДетальныеЗаписи.Номенклатура);
	КонецЦикла;
Возврат Массив;
  КонецФункции
Показать

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

   	ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Ссылка");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = МассивНоменклатуры(Объект.Склад);   ///Список номенклатуры с ненулевым остатком

	ПарамВыбора = Новый Структура("ФиксированныеНастройки, РежимВыбора, ЗакрыватьПриВыборе",НастройкиКомпоновки, Истина, Ложь);
	ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");
	Форма = ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",ПарамВыбора,ЭтаФорма, , , , ОбработкаВыбора);

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

Показать
24. user5300 1063 26.11.21 14:13 Сейчас в теме
(23) Пожалуйста ))

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

       ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Ссылка");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = МассивНоменклатуры();   ///Список номенклатуры с ненулевым остатком

    ПарамВыбора = Новый Структура("ФиксированныеНастройки, РежимВыбора, ЗакрыватьПриВыборе",НастройкиКомпоновки, Истина, Ложь);
    ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");
    Форма = ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",ПарамВыбора,ЭтаФорма, , , , ОбработкаВыбора);

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



Функция МассивНоменклатуры() 
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОстаткиНоменклатурОстатки.Склад КАК Склад,
        |    ОстаткиНоменклатурОстатки.Номенклатура КАК Номенклатура,
        |    ОстаткиНоменклатурОстатки.КоличествоОстаток КАК КоличествоОстаток
        |ИЗ
        |    РегистрНакопления.ОстаткиНоменклатур.Остатки КАК ОстаткиНоменклатурОстатки
        |ГДЕ
        |    ОстаткиНоменклатурОстатки.Склад = &Склад";
    
    
    Запрос.УстановитьПараметр("Склад", Объект.Склад);
    
    Возврат  Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номенклатура");
    
  КонецФункции
Показать
astreikaea; +1 Ответить
25. Kirill_A 21.12.21 17:00 Сейчас в теме
ПараметрыВыбора = Новый Структура;
- это было очень жестоко )))
26. user5300 1063 22.12.21 16:00 Сейчас в теме
27. Kirill_A 24.12.21 12:45 Сейчас в теме
(26) ПараметрыВыбора такое определение не пройдет - будет ошибка - так как это словосочетание зарезервировано системой. Мелочь но может времени отнять у новичков ...
user712426; SagittariusA; allshumilov; user659124_s.kostina; +4 Ответить
29. allshumilov 04.02.22 17:09 Сейчас в теме
(27) Парень ты маладец )) двойное тебе КУ )) а аффторы эцих с гвоздями, но потом ))) ибо тоже маладец
28. John_d 5891 28.12.21 16:30 Сейчас в теме
30. Valeric650 28.07.22 11:20 Сейчас в теме
Добрый день.
Делаю всё по примеру №2, но открываемая форма не открывается в режиме выбора.
Подскажите, нужно ловить передаваемые параметры в процедуре "ПриСозданииНаСервере" и прописывать параметры выбора ручками (но это как-то не особо удобно) или я что-то упускаю?
31. user5300 1063 28.07.22 11:36 Сейчас в теме
(30)
Проверьте, используется ли форма выбора (Скрин1)

И посмотрите у формы выбора, в свойствах реквизита формы "Список" должно быть включено свойство "Режим выбора"


Если у вас нет формы выбора (У вас открывается форма списка) Тогда процедура будет такая:

Форма = ПолучитьФорму("Справочник.Товары.ФормаСписка");
Форма.Элементы.Список.РежимВыбора = Истина;
Форма.Открыть();
Прикрепленные файлы:
32. Valeric650 28.07.22 12:14 Сейчас в теме
(31) Спасибо за ответ. Я использую общую форму для списка и для выбора.
Если создать отдельную форму для выбора, то там в свойствах списка уже будет установлен режим выбора по умолчанию. Тогда зачем его ещё раз передавать в параметрах (ПараметрыФормы.Вставить("РежимВыбора",Истина);)?

Если использовать предложенный Вами способ, то программа выдаёт следующую ошибку:
"Ошибка при установке значения атрибута контекста (РежимВыбора)
Форма.Элементы.Список.РежимВыбора = Истина;
по причине:
Изменение свойства недоступно"

Выходит, что для корректной работы описанного в статье подбора, необходимо иметь две формы списка и постоянно дублировать форму списка в форму выбора, что не очень удобно (если производятся изменения в форме списка, то их нужно продублировать и в форме выбора).
33. user5300 1063 29.07.22 11:09 Сейчас в теме
(32)

ещё раз передавать в параметрах

Чтобы форма выбора возвращала выбранное значение


(32)
Если использовать предложенный Вами способ, то программа выдаёт следующую ошибку:
"Ошибка при установке значения атрибута контекста (РежимВыбора)
Форма.Элементы.Список.РежимВыбора = Истина;
по причине:
Изменение свойства недоступно"

Извиняюсь, ввел в заблуждение... Форму списка нельзя открыть для выбора без дополнительных манипуляций с самой формой списка.
34. webandroid 2 01.09.22 23:03 Сейчас в теме
Нет еще примеров с расширениями.
Помогите пожалуйста с отбором в расширении. В расширение добавил в табличную часть документа "счет" дополнительную колонку с выбором из справочника "кассы"(иерархический, тоже добавлен) , хочу чтобы при открытии открывалась форма подбора (присутствует) с отбором по "Родителю" в моем случае "Контрагент" в этом документе .
35. webandroid 2 02.09.22 09:56 Сейчас в теме
отвечаю сам себе, конечно пример не универсальный но дает понять принцип.
в свойствах элемента создаем событие "НачалоВыбора"
&НаКлиенте
Процедура уч_Товарыуч_НомерЗаводскойНомерОбработкаВыбораВместо(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Структура = Новый Структура("Владелец", Объект.Контрагент) ;
	ОткрытьФорму("Справочник.Кассы.ФормаВыбора", Структура, Элемент);


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

//в форме выбора добавляем событие "ПриСозданииНаСервере"

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

пока не указал "форму выбора" в справочнике "кассы" как основную не получалось.
36. SGordon1 07.09.22 13:31 Сейчас в теме
в 4 примере - ПараметрыВыбора опечатка же?
37. user5300 1063 07.09.22 13:51 Сейчас в теме
38. Cthulhu 1 02.05.23 16:21 Сейчас в теме
А как настроить отбор ч/з фикс.настройки если в открываемой (для выбора, если єто важно) форме списка основной реквизит - динамический список? ошибка: "Невозможно применить фиксированные настройки. Пересекаются элементы отбора"
39. user5300 1063 02.05.23 16:31 Сейчас в теме
(38)
Возможно, что отбор уже указан в конфигураторе для динамического списка. В этом случае вы пытаетесь установить 2 одинаковых отбора по одному списку, попробуйте получить форму, очистить отбор, потом добавить свой и открыть
40. Cthulhu 1 02.05.23 16:37 Сейчас в теме
(39)
спасибо.
извините за, возможно, глупый вопрос, но все-таки: как это может выглядеть в коде?
41. Wefast 04.09.23 14:04 Сейчас в теме
Если открывается форма выбора по умолчанию - у нее заполнены параметры. Например Текущая организация.
Могу ли я не делать свое открытие формы, а только добавить свой параметр?
42. Cthulhu 1 06.09.23 15:06 Сейчас в теме
а как бы установить (в форме списка документа) отбор по значению реквизита его табличной части?
43. pentanom 25 26.10.23 15:59 Сейчас в теме
Хотел воспользоваться примерами № 3 или № 4 (не понял чем они различаются).
Для ЗУП 3.1.27.93 сделана обработка, в которой :
&НаКлиенте
Процедура Подбор(Команда)
	
    Оповещение = Новый ОписаниеОповещения("ПодборЗавершение",ЭтотОбъект);
	
	ПараметрыФормы = Новый Структура;
//	ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
//	ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
	ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
	ПараметрыФормы.Вставить("РежимВыбора", Истина);
	
    ОткрытьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.ФормаВыбора",
		ПараметрыФормы,,,,,Оповещение,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

КонецПроцедуры
	
&НаКлиенте
Процедура ПодборЗавершение(Результат,ДопПараметры) ЭКСПОРТ
	
	Если Результат=Неопределено Тогда
	    Возврат;
	КонецЕсли;
	Таблица = Объект.СписокВедомостей;
    Для каждого Эл из Результат Цикл
        Если Таблица.НайтиСтроки(Новый Структура("Ведомость",Эл)).Количество() = 0 Тогда
            НовСтр = Таблица.Добавить();
            НовСтр.Ведомость = Эл;
			НовСтр.КВыплате = ПолучитьКВыплатеНаСервере(Эл)
		Иначе
			Сообщить("Уже есть - "+Эл);
        КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры    

Показать
но почему-то не получается множественный выбор. Что нужно еще сделать?
44. user5300 1063 26.10.23 17:02 Сейчас в теме
(43) Только что проверил ваш пример - всё получается, нужно выделить строки (alt либо shift) и нажать "Выбрать" - тогда перенесутся выделенные строки.
pentanom; +1 Ответить
45. pentanom 25 26.10.23 17:48 Сейчас в теме
46. GlukAl 22.03.24 15:29 Сейчас в теме
спасибо за памятку
только странно что везде в открываемую форму передается ЭтаФорма

вот если в первом примере передать ЭлементФормы.ПолеВвода

тогда не не понадобиться процедура ОбработкаВыбора

&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
 
	ПараметрыФормы = Новый Структура("РежимВыбора",Истина);

	ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,ЭтаФорма.Элементы.ПолеРезультата);

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

//&НаКлиенте
//Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) ///Событие формы
//	
//     РезультатСсылка =  ВыбранноеЗначение; ///Выбранное значение, вернет ссылку (документа в нашем примере)
//
//КонецПроцедуры
Показать
47. user834246 26.04.24 10:42 Сейчас в теме
не работает процедура обработки оповещения если есть параметр ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Ложь), но работает для встроеной процедуры ОбработкаВыбора формы
48. user640247 23.09.24 09:46 Сейчас в теме
если через оповещение делаю, то у меня почему-то значение Неопределено...
может что-то еще нужно где-то поставить?

Если убираю эту строку ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Ложь),
то срабатывает, но смысла в массиве тогда?
Оставьте свое сообщение