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

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 Платные (руб)

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

6000 руб.

16.01.2015    61797    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54403    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16698    21    4    

35

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Модель состояния для MVC

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

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

1 стартмани

05.07.2022    3665    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12080    1    5    

10

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    8810    1    2    

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


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

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

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


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

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

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

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


Показать
Alexs_7574; dart17; alex99232014; adhocprog; +4 Ответить
17. UtSpar 134 09.04.21 08:15 Сейчас в теме
Если мы работаем с полем формы то код что указан в КомандаОткрытьФормуВыбора должен быть в обработчике начало выбора с указание стандартной обработки в ложь.
user1165146; +1 Ответить
18. user1502278 229 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 1000 26.11.21 09:53 Сейчас в теме
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
	НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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



Функция МассивНоменклатуры() 
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОстаткиНоменклатурОстатки.Склад КАК Склад,
        |    ОстаткиНоменклатурОстатки.Номенклатура КАК Номенклатура,
        |    ОстаткиНоменклатурОстатки.КоличествоОстаток КАК КоличествоОстаток
        |ИЗ
        |    РегистрНакопления.ОстаткиНоменклатур.Остатки КАК ОстаткиНоменклатурОстатки
        |ГДЕ
        |    ОстаткиНоменклатурОстатки.Склад = &Склад";
    
    
    Запрос.УстановитьПараметр("Склад", Объект.Склад);
    
    Возврат  Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номенклатура");
    
  КонецФункции
Показать
astreikaea; +1 Ответить
25. Kirill_A 21.12.21 17:00 Сейчас в теме
ПараметрыВыбора = Новый Структура;
- это было очень жестоко )))
26. user5300 1000 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 5277 28.12.21 16:30 Сейчас в теме
30. Valeric650 28.07.22 11:20 Сейчас в теме
Добрый день.
Делаю всё по примеру №2, но открываемая форма не открывается в режиме выбора.
Подскажите, нужно ловить передаваемые параметры в процедуре "ПриСозданииНаСервере" и прописывать параметры выбора ручками (но это как-то не особо удобно) или я что-то упускаю?
31. user5300 1000 28.07.22 11:36 Сейчас в теме
(30)
Проверьте, используется ли форма выбора (Скрин1)

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


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

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

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

Выходит, что для корректной работы описанного в статье подбора, необходимо иметь две формы списка и постоянно дублировать форму списка в форму выбора, что не очень удобно (если производятся изменения в форме списка, то их нужно продублировать и в форме выбора).
33. user5300 1000 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 1000 07.09.22 13:51 Сейчас в теме
38. Cthulhu 1 02.05.23 16:21 Сейчас в теме
А как настроить отбор ч/з фикс.настройки если в открываемой (для выбора, если єто важно) форме списка основной реквизит - динамический список? ошибка: "Невозможно применить фиксированные настройки. Пересекаются элементы отбора"
39. user5300 1000 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 1000 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 Сейчас в теме
спасибо за памятку
только странно что везде в открываемую форму передается ЭтаФорма

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

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

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

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

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

//&НаКлиенте
//Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) ///Событие формы
//	
//     РезультатСсылка =  ВыбранноеЗначение; ///Выбранное значение, вернет ссылку (документа в нашем примере)
//
//КонецПроцедуры
Показать
Оставьте свое сообщение