Меняем стандартную форму выбора для реквизита формы на свою форму с запросом

Программирование - Практика программирования

Алгоритм действий для смены стандартной формы выбора для реквизита формы на свою форму со своей выборкой данных и возвратом нескольких параметров в вызывающую форму

На улице должливый день, а по заданию "партии" надо в Документе ВыпускГотовойПродукции в табличной части, для реквизита Партия выбрать документ ПоступлениеПолуфабриков. Реквизит Партия имеет тип Документ.ПоступлениеПолуфабрикатов, вроде бы выбор очевиден! Но надо выбрать не все документы, а так, что бы менеджер с ума не сошел от представленного разнообразия, а показать ему только те документы, которые имеют нужный Склад и Номенклатуру, да и вдобавок ненулевой остаток из Регистра накоплений Партии. Тряхнем стариной, приступим!

Добавим ФормуВыбора для документа ПоступлениеПолуфабрикатов

В свойствах списка поставим галочку Произвольный запрос

 

 

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

В запросе появились два параметра. Склад и Номенклатура. Передачей их в запрос займемся чуть позже. Закрываем редактор запроса.

Форма, после редактирования запроса, обиделась и съежилась, Теперь нет табличной части. Остались лишь одинокие Дата и Номер,а все потому что у них пропал путь к данным.

Восстановим.

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

Теперь вернемся к документу ВыпускГотовойПродукции, к реквизиту Партии и пропишем параметры (Склад и Номенклатура), которые должны передаться в ФормуВыбора документа ПоступлениеПолуфабрикатов. Мы же не хотим выплачивать больничные менеджеру.

Щелкаем на Партии и выбираем СвязиПараметорВыбора

Добавляем два параметра: Склад и Номенклатура

Для реквизита Партии, если у нас несколько форм выбора, укажем нашу форму выбора, как основную. Если ФормаВыбора одна ее можно не указывать

 

Осталось передать наши параметры в Список ФормыВыбора документа  ПоступленияПолуфабрикатов. В ФормеВыбора используем предопределенную процедуру ПриСозданииНаСервере

Пробуем как это работает

Жмем Показать все, что бы появилась наша ФормаВыбора

Теперь хотелось бы передать значение Остатка в вызывающую форму, что бы заполнить колонку Количество.

Задействуем события Списка ФормыВыбора документа ПоступлениеПолуфабрикатов, которые отвечают за выбор пользователем конкретного документа. Это предопределенные процедуры ВыборЗначения и ОбработкаВыбора.

 

Пропишем для них программный код в котором задействуем Оповестить для возврата остатка в вызывающую форму.

 

Передадим наш остаток в виде структуры, через параметр.

В вызывающей форме, ВыпускГотовойПродукции назначим обработку ОбработкаОповещения

Пропишем код

Все!

См. также

Лучшие комментарии
10. Андрей Овсянкин (Evil Beaver) 4341 04.10.17 09:38 Сейчас в теме
(3)
Связи параметров выбора при список-основной реквизит автоматом наложат отбор.


Не совсем. Здесь сделано через Параметры дин. списка, а не через его Отбор. Поэтому параметры выбора автоматически не применятся к запросу списка.

В любом случае, хорошая познавательная статья по механике форм выбора. Даже если и не без греха - побольше бы статей, и поменьше бы скептических критиков.
maxopik2; Dmitri93; wiseowl; +3 Ответить
Остальные комментарии
1. Александр Лыткин (TrinitronOTV) 01.10.17 07:35 Сейчас в теме
Лично для меня...познавательно, но один вопрос: если в типовой конфе в документе "Поступление полуфабрикатов" появится форма выбора, то достаточно будет просто переименовать нашу добавленную форму выбора?
2. Александр Гельмер (ah7777777) 131 01.10.17 11:10 Сейчас в теме
Переименовать? А для чего? Немного не понял вопроса
5. Александр Лыткин (TrinitronOTV) 02.10.17 12:19 Сейчас в теме
(2) В обновлении фирма 1С добавила в этот документ свою форму выбора, тогда что будет при обновлении?
6. Александр Гельмер (ah7777777) 131 02.10.17 12:45 Сейчас в теме
(5) Это вопросы из другой серии.
9. Александр Лыткин (TrinitronOTV) 03.10.17 05:27 Сейчас в теме
11. Виталий Петров (vipetrov2) 05.10.17 12:10 Сейчас в теме
(5) Есть основная форма выбора только одна. А просто форм выбора можно наделать сколько угодно и они не будут конфликтовать. В статье как раз описывается, как сделать свою форму выбора, не делая ее основной. Только в статье используется название "ФормаВыбора", но его лучше поменять, например, на "ФормаВыбораСОстатками".
12. Александр Лыткин (TrinitronOTV) 05.10.17 12:38 Сейчас в теме
(11) так я к этому и подводил, ИМХО и надо называть как-то нестандартно
3. Uladzimir - (nvv1970) 01.10.17 11:48 Сейчас в теме
Жесть какая-то... Чую беспощадно заминусуют публикацию.

Если нужно сделать форму "только для реквизита", то не стоит ее указывать основной. И в принципе основная - она для выбора документа... Выбор специфический, док без партии уже не выберешь.
Запрос к остаткам в динамическом списке без параметров?
Зачем в принципе параметры?? "Компоновщик данных" в запросе... слыхали? Указываем параметры отбора в фигурных скобочках. А в вашем случае (автозаполнения) полей этого и не требуется.
Связи параметров выбора при список-основной реквизит автоматом наложат отбор. Не нужно ничего городить, никакого программного кода.
Да и с обработкой выбора ерунда какая-то... Выбор тоже работает без программного кода.
Ересь, не иначе...
AlexGroovy; Spacer; +2 Ответить
10. Андрей Овсянкин (Evil Beaver) 4341 04.10.17 09:38 Сейчас в теме
(3)
Связи параметров выбора при список-основной реквизит автоматом наложат отбор.


Не совсем. Здесь сделано через Параметры дин. списка, а не через его Отбор. Поэтому параметры выбора автоматически не применятся к запросу списка.

В любом случае, хорошая познавательная статья по механике форм выбора. Даже если и не без греха - побольше бы статей, и поменьше бы скептических критиков.
maxopik2; Dmitri93; wiseowl; +3 Ответить
13. Uladzimir - (nvv1970) 08.10.17 13:53 Сейчас в теме
(10)
Здесь сделано через Параметры дин. списка, а не через его Отбор. Поэтому параметры выбора автоматически не применятся к запросу списка.
Ну так ничего хорошего в этом нет. Скорее это можно считать неестественным методом фильтрации выборки для компоновщика. По крайней мере действий и кода становится больше.
15. Андрей Овсянкин (Evil Beaver) 4341 10.10.17 12:59 Сейчас в теме
(13) Тем не менее, мне кажется, что механика форм раскрыта в статье неплохо. А конкретная реализация, ну да, можно тут кое-чего покритиковать.
4. Александр Гельмер (ah7777777) 131 01.10.17 12:44 Сейчас в теме
Все поняно, а как обратится к регистру партий? Это одно из условий отбора
7. Max Avramenko (A_Max) 14 02.10.17 17:46 Сейчас в теме
СКД (в данном случае динамический список) сам достаточно умный чтобы наложенный отбор перенсти внутрь скобок виртуальной таблицы.
14. Андрей Овсянкин (Evil Beaver) 4341 10.10.17 12:57 Сейчас в теме
(7) я бы вот проверил данный факт sql профайлером. Теоретически да, а как в реале - не поручусь за это.
16. Max Avramenko (A_Max) 14 10.10.17 17:31 Сейчас в теме
(14) Профайлер даже не нужен, гораздо удобней использовать "Консоль системы компоновки данных" с ИТС.
Хотя признаю я ошибся. Всё-таки нужно скд немного помочь добавив фигурные скобки в условия виртуальной таблицы:
ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.ТипЦен,
	ЦеныНоменклатурыСрезПоследних.Номенклатура,
	ЦеныНоменклатурыСрезПоследних.Валюта,
	ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ТипЦен)}) КАК ЦеныНоменклатурыСрезПоследних


Теперь если добавить отборы на тип цен и валюту получится вот такой запрос:
ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен,
	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
	ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ЦеныНоменклатурыСрезПоследних.Валюта) КАК ВалютаПредставление,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ЦеныНоменклатурыСрезПоследних.Номенклатура) КАК НоменклатураПредставление,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ЦеныНоменклатурыСрезПоследних.ТипЦен) КАК ТипЦенПредставление
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &П2) КАК ЦеныНоменклатурыСрезПоследних
ГДЕ
	ЦеныНоменклатурыСрезПоследних.Валюта = &П
Показать
17. Андрей Овсянкин (Evil Beaver) 4341 11.10.17 10:22 Сейчас в теме
(16) Мы тут вроде как про ДинамическийСписок, а не про СКД. Понятно, что один базируется на другом, но все же. Я вот на 100% не уверен в том, что платформа подставит правильные отборы в параметры ДС. Скорее всего да, но, повторюсь, лучше проверить.
18. Max Avramenko (A_Max) 14 11.10.17 16:26 Сейчас в теме
(17) Я уже давно проверил и использую эту возможность постоянно. Во многих формах динамические списки которые настраиваются прогграмно отборами и если-бы не такая "донастройка", то тормозило бы несусветно.
Есть конечно некоторые "особенности", но всё-таки это СКД.
Evil Beaver; +1 Ответить
8. Александр Гельмер (ah7777777) 131 02.10.17 18:22 Сейчас в теме
Т.е. не надо передавать параметры к запросу к регистру партий?
Оставьте свое сообщение