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

01.07.10

Разработка - Математика и алгоритмы

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

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

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

Кнопки:

Добавить с Формулой Добавить("[.]",ФлагМножПодбора=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

См. также

Экспорт нескольких MXL таблиц в один XLS файл, на отдельные листы. Простой алгоритм

Загрузка и выгрузка в Excel Математика и алгоритмы Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Статья посвящена распространённому вопросу - как сохранить несколько таблиц (отчетов) в формате MXL, с которым работает 1С, на отдельные листы одного Excel файла. Освещается простой алгоритм решения проблемы штатными средствами, без использования внешних модулей и библиотек (не относящихся к 1С и Excel).

23.11.2015    18901    etmarket    14    

20

.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия

Разработка внешних компонент Математика и алгоритмы Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия, а так же генерация модулей на C# и 1С для подключения к событиям. Использование DynamicMethod и ILGenerator. Представлены примеры для использовании событий System.IO.FileSystemWatcher (Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях каталога или файла в каталоге.) и SerialPort (обработка сканера штрих кода подключенного к COM порту). Обертка позволяет использовать классы .Net только на языке 1С. Реализация 1C Messenger описанного здесь http://infostart.ru/public/434771/

12.11.2015    51085    Serginio    36    

57

Степень сходства двух наименований справочника

Математика и алгоритмы Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Статья посвящена исследованию следующего вопроса: необходимо сравнить 2 наименования справочников с целью вычисления их степени сходства. По задумке, степень сходства должна выражаться в процентах.

1 стартмани

25.02.2015    24449    etmarket    46    

17

Задача про сгибание листка

Математика и алгоритмы Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Часто при приеме на работу встречается задача про сгибание листка

1 стартмани

26.02.2013    19480    11    Sbelyi78    38    

9

Универсальная печать таблицы значений

Математика и алгоритмы Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Универсальная печать таблицы значений, которую не стыдно прикрутить к рабочей базе данных. Группировка данных, подсчет итогов, составление диаграмм, выгрузка в быстрый доступ к исходной ТЗ.

1 стартмани

23.05.2012    14763    66    McSeem    3    

8

Тригонометрические функции в 7.7

Математика и алгоритмы Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Алгоритм получения значения тригонометрических функций путем разложения их в ряд Тейлора

1 стартмани

04.03.2012    8589    4    nysysimara    10    

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

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

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

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


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