gifts2017

Загрузка массива значений в стандартную форму "Редактирование списка значений" из табличного документа

Опубликовал Михаил В (mikhailv) в раздел Обработки - Универсальные обработки

Обработка позволяет подбирать большое количество элементов справочника или документов в Список значений по коду или наименованию для справочников и по дате и номеру, дате и периоду, по представлению для документов. Может пригодиться при заполнении отборов в отчетах, табличных частях, списках документов или справочников
Иногда бывает необходимо построить совершенно разные отчеты с отбором по некоторому перечню, например, продажи по некоторому списку контрагентов или номенклатуры, дебиторку по некоторому списку реализаций, или же запустить Групповую обработку справочников и документов по некоторому заранее составленному списку. 
Думаю, нет смысла обсуждать выгоду от автоматического подбора в отбор длинных списков - это очевидно.
 
Данная задача не решается без модификации конфигурации.
 
Варианты решения:
1) модифицировать код форм каждого из отчетов, внедряя несколько строк, которые заменяют для каждого из элементов на форме стандартную обработку редактирования списка на свою (как это сделано у e.kogan)
2) модифицировать формы выбора объектов, внедряя несколько строк, которые добавляют на форму кнопку, позволяющую "оповещать о выборе" стандартную обработку редактирования списка (как это сделано здесь).
 
Мне больше нравится второй подход, т.к. своих отчетов может быть наделано много, и еще есть стандартные отчеты (остатки товаров на складах, оборотно-сальдовая), в которые не очень хочется лезть. Зато с объектами, которые нужно подбирать, всё несколько проще - 3-5 документов и 3-5 справочников. Вдобавок форму выбора в типовых редко меняют и при обновлении сильно не мешает.
Но, при желании, подходы можно комбинировать. Например, в Универсальной обработке справочников и документов я также и первый подход реализовал.
 
Если сравнивать сами обработки по функционалу, то вышеупомянутая обработка более универсальная. В текущей обработке зато есть загрузка по дате и периоду и по представлению, что на практике встречается часто. Также из плюшек - для каждого документа или справочника запоминается последний выбранный режим.
 
Хитрости
Одна из проблем, которую удалось решить для универсальности модификаций форм выбора: найти основной реквизит формы выбора и определить его тип. Тема поднималась на ИнфоСтарте, но решалась она довольно злобным кодом, поэтому решил, не мудрствуя лукаво, использовать то, что в формах выбора справочников (документов) в 99% случаев основной реквизит называется "СправочникСписок" ("ДокументСписок"), т.к. так его именует конструктор.
 
А уже тип (имя типа) определяется через отбор по ссылке
ФормаВыбора["СправочникСписок"].ТекСписок.Отбор.Ссылка.Значение.Метаданные().Имя
или так (если в отборе уже был список)
ФормаВыбора["СправочникСписок"].ТекСписок.Отбор.Ссылка.Значение[0].Метаданные().Имя
 
Стандартную форму "Редактирование списка значений" заполняем оповещением:

Для каждого СтрокаПодбора Из ТаблицаПодбора Цикл
    ФормаВыбора.ОповеститьОВыборе(СтрокаПодбора.Ссылка);
КонецЦикла;

 
И еще на последок: как-то понадобилось отобрать в форме списка документов по произвольному отбору. Решение нашлось такое: включаем доступность отбора по ссылке в форме списка:
 
Процедура ПриОткрытии()
   ЭлементыФормы.Список.НастройкаОтбора.Ссылка.Доступность = Истина;
КонецПроцедуры
 
и пользуемся этой обработкой.
 
Внедрение
Внедрение описано в макете README.
 
Если вкратце, то необходимо в процедуру "ПриОткрытии" формы выбора добавить код, который рисует кнопку на командной панели:
 
     ЭлементыФормы.ДействияФормы.Кнопки.Добавить("ПодобратьСписком", ТипКнопкиКоманднойПанели.Действие, "Подобрать списком", Новый Действие("ДействияФормыПодобратьСписком"));
 
А также в модуль формы добавить саму процедуру-обработчик нажатия кнопки.
Процедура ДействияФормыПодобратьСписком(Кнопка)
     
     МнПодбор = Обработки.МножественныйПодбор.Создать();
     Если МнПодбор.Инициализировать(ЭтаФорма) Тогда
          //успех
          МнПодбор.Подобрать(ЭтаФорма)
     КонецЕсли;
     
КонецПроцедуры
 
  
Замечания и отзывы приветствуются!
 
Обновления
05.12.2013 - добавлен подбор по документам (в том числе - по представлениям); добавлена версия для 8.1; обновлена статья

Скачать файлы

Наименование Файл Версия Размер
Обработка группового подбора для 8.2 7
.epf 17,71Kb
05.12.13
7
.epf 1.6 17,71Kb Скачать
Обработка группового подбора для 8.2 25
.epf 8,57Kb
05.12.13
25
.epf 1.0 8,57Kb Скачать
Обработка группового подбора для 8.1 1
.epf 16,68Kb
05.12.13
1
.epf 1.6 16,68Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Ийон Тихий (cool.vlad4) 15.12.11 18:08
щас придет yashazz или e.kogan (не поню у кого из них точно была подобная публикация) и скажут уже было, не удивил.
2. Анатолий (Yasen) 15.12.11 19:14
Я не знаю, было ли, но плюс поставил
Михаил, если я правильно понял изначальную задачу - надо формировать отчеты с отбором по данным табличной части документа.
Посмотрите мою давнюю разработку УПП: вызов универсального отчета из любого документа
Я вызывал "Универсальный отчет" и заполнял его теми настройками которыми удавалось заполнить. Было удобно для контроля движений документа не в форме списка регистра, а непосредственно в отчете.
Если удастся скрестить эти два механизма - мой вызов из документа и Ваш подбор значений в список - честь Вам и хвала )
3. Miffka (mikhailv) 16.12.11 10:47
(1) cool.vlad4, я согласен, это похоже на разработку e-kogan-а, однако у моей есть одно преимущество: обработка работает с ЛЮБЫМИ отчетами, при этом сами отчеты НЕ НУЖНО модифицировать, как у него. Вместо этого, модифицировать нужно формы выбора, что, на мой взгляд, немного проще, чем залезать в каждый отчет (обычно, справочники, которые нужно так подбирать, исчисляются единицами, а отчеты - десятками). Тем более, в типовые отчеты... Однако, это конечно, же, не панацея для не снятых с поддержки конфигураций.
(2) Yasen, нет, цель была в том, чтобы отфильтровать в отчете по некоторому большому списку. Напр., имеется произвольный список номенклатуры, которая понравилась директору, и по ней хочется построить отчет. ИЛИ, хотим проставить некоторое свойство/категорию у объекта по некоторому опять же списку: берём групповую обработку справочников и документов, отбор "ссылка в списке" и загружаем список.
А чего, собственно, не хватает в Вашей обработке? Вроде бы она самодостаточна?
4. Ийон Тихий (cool.vlad4) 18.12.11 17:40
(3) понятно....только поправка - у неё
5. Анатолий (Yasen) 22.12.11 22:16
Miffka пишет:
А чего, собственно, не хватает в Вашей обработке?


Она работает только с универсальным отчетом. Не с СКД.
6. Miffka (mikhailv) 23.12.11 11:05
(5) Yasen, на самом деле тут два аспекта.
Первый: если требуется заполнять универсальный отчет/скд для контроля движений по документу, ИМХО по ТЧ фильтровать нет большого смысла. Если, конечно, пользователь (чисто гипотетически) захочет посмотреть продажи по номенклатуре, которая у него есть в документе.
И второй - программное заполнение отбора по списку, в т.ч. в СКД, - это немного другая задача, достаточно лёгкая при этом: создаём список значений и в отборы его. Если загвоздка в том, как создать отбор в СКД - могу озвучить.
Повторюсь, эта обработка была написана, когда мне принесли список из 30 проектов и попросили построить по ним отчет. Я решил разработать нечто универсальное, и чтобы это не нужно было встраивать в каждый отчет в нескольких местах и проч.
7. Анатолий (Yasen) 23.12.11 13:48
Miffka пишет:
ИМХО по ТЧ фильтровать нет большого смысла


Бывает нужно. К примеру, моя обработка родилась в результате многочисленных выверок себестоимости в УПП.
То есть возник вопрос по какому-то из производственных документов. И тогда очень удобно открыть отчет с уже заполненными заказами, номенклатурными группами и характеристиками, а дальше уже с помощью отчета анализировать - что же там случилось.

Но судя по количеству скачиваний данной обработки, эта моя идея не очень востребована :)
8. Руслан Микулович (rumik007) 09.02.12 16:15
Спасибо за обработку!!! Тока вот написано под 8.1, а лежит под 8.2, пришло переделать на 8.1
9. Miffka (mikhailv) 09.02.12 17:04
(8) rumik007, спасибо и вам.
Ставя галочку 8.1, честно говоря, думал о "не-управляемой" форме обработки:) Когда залью более свежую версию - галочку сниму, наверное, т.к. в планах нет поддержки 8.1: все базы на 8.2 или в режиме совместимости.
10. Руслан Микулович (rumik007) 09.02.12 18:41
(9) Miffka,

Я под 8.1 немного чуть-чуть времени потратил и перекинул, и все пошло на ура!!! Так ято еще раз спасибо за идею. Как раз понадобилось отбора по сто и более позиций выбирать.
11. Ксюша Феерия (Феерия) 11.10.13 15:42
Очень удобно. Когда подкоплю денег, скачаю)