gifts2017

Заполнение списков для отборов в отчетах и обработках

Опубликовал Neman Entorin (ne_en) в раздел Программирование - Теория программирования

Когда нужно побыстрому навоять простенький отчетик с парой отборов значений, то я использую давно созданный набор.

Этот набор состоит из СпискаЗначений на форме для отбора, Кнопок для работы со списком и Процедур вызываемых кнопками, ну и конечно же Отбором в запросе

Список должен иметь имя Выб, (например ВыбНоменклатура, ВыбСырье)

Кнопки:

Добавить с Формулой Добавить("[.]",ФлагМножПодбора=0) (например Добавить("Номенклатура"),Добавить("Сырье.Номенклатура"),Добавить("Сырье.Материалы",1)). Для добавления одной (ФлагМножПодбора=0) или нескольких (ФлагМножПодбора=1) позиций в список.

ИмяОтбора - Имя, используемое для объединения отбора в одну группу для списка, кнопок и переменной в запросе.

ВидСправочника - Используется для выбора значения, когда в отборе могут участвовать значения из разных справочников. Например, Номенклатура и Материалы или Кассы и РасчетныеСчета

Если ВидСправочника не используется, то за ВидСправочника берется само ИмяОтбора

Удалить с именем КнУд (например КнУдНоменклатура,КнУдСырье), с формулой УдалитьСтр("") (например УдалитьСтр("Номенклатура"), УдалитьСтр("Сырье"))

Удалить всё с именем КнУдВсе , с формулой Выб.УдалитьВсе();Форма.КнУдВсе.Доступность(0);Форма.КнУд.Доступность(0)

(прим. формулу тоже можно конечно реализовать в виде процедуры, но не заморачивало никогда, потому как все просто, причем если не заморачиваться с доступностью, то формула вообще упрощается до Выб.УдалитьВсе())

 

Для доп отборов соответственно нужно Добавить ещё комплект Список и Кнопки.

 

В Модуль формы отчета/обработки нужно добавить:

Перем ИмяПодбора;

//******************************************************************************
Процедура Добавить(Тип="Номенклатура",Реж=0)
    Перем ФормаПодбора;
    МестоРазделителя=Найти(Тип,".");
    ИмяПодбора=?(МестоРазделителя=0,Тип,Лев(Тип,МестоРазделителя-1));
    Тип_=?(МестоРазделителя=0,Тип,Сред(Тип,МестоРазделителя+1));
    ОткрытьПодбор("Справочник."+Тип_,"ФромаСписка",ФормаПодбора,Реж);
    ФормаПодбора.ВыборГруппы(1)
КонецПроцедуры

//******************************************************************************
Процедура ОбработкаПодбора(Эл)
    Перем Спис,КнУдВсе,КнУд;
    Стр=Шаблон("[глПрисвоить(Спис,Выб"+ИмяПодбора+")]");
    Стр=Шаблон("[глПрисвоить(КнУдВсе,Форма.КнУдВсе"+ИмяПодбора+")]");
    Стр=Шаблон("[глПрисвоить(КнУд,Форма.КнУд"+ИмяПодбора+")]");
    Спис.Установить(?(Эл.ЭтоГруппа()=0,"","*Группа*-")+СокрЛП(Эл.Наименование)+" (Код-"+СокрЛП(Эл.Код)+")",Эл.ТекущийЭлемент());
    КнУдВсе.Доступность(1);
    КнУд.Доступность(1)
КонецПроцедуры

//******************************************************************************
Процедура УдалитьСтр(Тип="Номенклатура")
    Перем Спис,КнУдВсе,КнУд;
    Стр=Шаблон("[глПрисвоить(Спис,Выб"+Тип+")]");
    Стр=Шаблон("[глПрисвоить(КнУдВсе,Форма.КнУдВсе"+Тип+")]");
    Стр=Шаблон("[глПрисвоить(КнУд,Форма.КнУд"+Тип+")]");
 
    РСпис=Спис.РазмерСписка();
    НСтр=Спис.ТекущаяСтрока();
    Ф=0;
    Если Число(НСтр)>0 Тогда
        Спис.УдалитьЗначение(НСтр);
        Ф=1
    КонецЕсли;
    Если (РСпис>1) И (Ф=1) Тогда
        Спис.ТекущаяСтрока(?(НСтр<>РСпис,НСтр,НСтр-1))
    КонецЕсли;
    Если (РСпис=1) И (Ф=1) Тогда
        КнУдВсе.Доступность(0);
        КнУд.Доступность(0)
    КонецЕсли
КонецПроцедуры

К запросу естественно добавляю эти отборы простым способом

Если Выб.РазмерСписка()>0 Тогда
    ТекстЗапроса=ТекстЗапроса+"Условие(Выб.Принадлежит()=1);"
КонецЕсли;

Например так:

Если ВыбНоменклатура.РазмерСписка()>0 Тогда
    ТЗЗ=ТЗЗ+"Условие(ВыбНоменклатура.Принадлежит(Продукция)=1);"
КонецЕсли;
Если ВыбСырье.РазмерСписка()>0 Тогда
    ТЗЗ=ТЗЗ+"Условие(ВыбСырье.Принадлежит(Затрата)=1);"
КонецЕсли;

Ну и ещё у меня в ГМ находится функция (везде сразу вставляю, нравится)

//******************************************************************************
Функция глПрисвоить(Чему,Что) Экспорт
 // Этой фукцией можно присваивать Чему значение Что
 // Шаблон("[глПрисвоить("+("НазвРекв"+Н)+","+(ЗначРекв)+")]");
     Чему = Что;
     Возврат ""
КонецФункции

 

Но если её не ставить в ГМ, то нужно её тоже добавить в модуль формы отчета/обработки

 

В конечном итоге, создание нового такого отчета у меня начинается с копипасты списка, кнопок и куска модуля с какого-то уже готового такого вот простого отчета, если нужно (бывает все теже наборы фильтров) переименовываю список, имя отбора, Вид справочника и кнопки удаления и начинаю уже воять отчет, потому как работа с созданием отбора уже закончена. Т.о. на создание одного набора отбора уходит около пары минут с перекурами Cool

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Neman Entorin (ne_en) 01.07.10 11:16
В качестве развития темы есть мысли, но нет особого желания сделать возможность добавления одной кнопкой, типа: Добавить("Сырье(Материалы,Номенклатура)",1), чтоб при нажатии кнопки выпадал списочек (например в виде меню) для выбора вида справочника. Причем получится выбор одного справочника без списка не исключается (Добавить("Сырье(Материалы)",1))
2. Neman Entorin (ne_en) 01.07.10 11:22
Эх... Хорошо бы чтоб на сайте была кнопочка для автоматической расцветки модулей... Хотя бы в режиме создания темы
3. Александр Рытов (Арчибальд) 01.07.10 11:28
4. Епрст (Ёпрст) 01.07.10 19:21
Ээх.. кто бы нормальный поиск сделал:
http://infostart.ru/public/14653/

А по теме - универсальней МФ во всех отчетах типовых еще ничего нет, в лучшем случае, Класс.МножественныйФильтр и его аналоги...

И нафига такой "велосипед" ? Неудобно.
1 список- туды-сюда, а если их будет штук 10 ??
А доп условия на список ? Входит в список/не входит/все кроме и т.д...

Так,что смотрите типовые отчеты, МФ оттуда прикручивается за 2 сек в любой свой отчет.


5. Neman Entorin (ne_en) 02.07.10 04:35
(4) Ну когда чё понавороченее, так и делаю, а когда за 30 минут навоять отчетик с парой тройкой отборов, тогда вот так вот.
6. Епрст (Ёпрст) 02.07.10 08:44
(5) неудобно. Даже иметь 2 списка значений на форме - не комильфо.
7. Neman Entorin (ne_en) 07.07.10 03:42
(6) А в МФ типа один список :)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа