Имя: Пароль:
1C
 
Создание списка значений и добавление фильтра при создании отчета
, , ,
0 Dasvi
 
16.06.22
12:44
Доброго всем времени суток!
В общем чувствую что делаю все не так
Есть функция УстановитьПараметрыЗапроса(Запрос)
В ней есть один из указаных параметров:
Если ЗначениеЗаполнено(Отдел) Тогда
        Текст = Текст + ?(Текст = "", "", " И ") + "
        |            Субконто2.Менеджер.Отдел  = &Отдел
        |                ";
        Запрос.УстановитьПараметр("Отдел", Отдел);        
КонецЕсли;

В форме соответственно есть поле с выбором отдела которая привязана к Справочники.Отделы

Так же есть Функция с ПолучтьНаСервере() в ней мы производим фильрацию реализаций и из подходящих нам составляем Отчет
На данный момент с помощью этих фильтров модно выбрать только один "Отдел","Организацию" и тд. Пользователь выбирает их и соответсвенно формирует Отчет , происходит магия, отчет на экране , все четко , с добавлением новых фильров я разобрался, осталась еще одна проблема
Но задача в том что бы добавить возможность поиска по нескольким отделам, пользователь может выбрать несколько отделов, другие фильры , магия , и отчет соответсвенно
Проблема как раз в том что у меня никак не получается это реализовать, как я понял мне нужно создать функцию в которой можно будет сформировать Список Значений с выбранными отделами и далее уже этот список добавить в :
Если ЗначениеЗаполнено(Отдел) Тогда
        Текст = Текст + ?(Текст = "", "", " И ") + "
        |            Субконто2.Менеджер.Отдел  = &Отдел
        |                ";
        Запрос.УстановитьПараметр("Отдел", Отдел);        
КонецЕсли;
будет ли это корректно ? По ощущениям работать вроде как и может, а вроде как и нет
До этого создавал массив, запихивал туда несколько отделов и циклом запускал здесь на месте формирования запроса
Если ЗначениеЗаполнено(Отдел) Тогда
        Текст = Текст + ?(Текст = "", "", " И ") + "
        |            Субконто2.Менеджер.Отдел  = &Отдел
        |                ";
        Запрос.УстановитьПараметр("Отдел", Отдел);        
    КонецЕсли;
но это так не работает потому что в итоге он формирует по последнему отделу в массиве

Фильтрация в Выбрать Из выглядит примерно так:

ИЗ
    |                    РегистрБухгалтерии.Хозрасчетный.Остатки(
    |                            &ДатаОстатков,
    |                            Счет = &СчетНОМЕР
    |                                ИЛИ Счет = &СчетНОМЕР ИЛИ Счет = &СчетНОМЕР,
    |                            , " + ДобавитьУсловияЗапроса(Запрос) + ") КАК ХозрасчетныйОстатки) КАК ТаблОстатков
    |            
Это один пример из других, формируюся таблицы, обьединяются и происходит выгрузка , сам код этот я не писал , дали пару задач сказали делать) И на этой я остановился конкретно
Может не совсем корректно изложил суть вопроса, спрашивайте готов на все ответить, про СКД знаю , но еще не изучал, тк как перешел на 1с ку неделю назад, в выходные как раз займусь основательным изучением СКД и Формированием Запросов
1 Dasvi
 
16.06.22
12:45
Забыл написать функцию в которой выбираются отделы , максимально сырая , буду править но пока что она на таком этапе:
&НаКлиенте
Процедура ДобавитьОтдел(Команда)
     Отделы = Новый СписокЗначений;
         Отделы.Добавить(Отдел);
        
        ВыбраноеЗначение = ВыбратьИзСписка(Отделы);
        
        Если ВыбраноеЗначение <> Неопределено Тогда
                Сообщить(ВыбраноеЗначение.Значение);
        КонецЕсли;
КонецПроцедуры
2 Мультук
 
гуру
16.06.22
13:02
(1) Псевдокод

ГДЕ
    Субконто2.Менеджер.Отдел  = &Отдел
//===

Запрос.УстановитьПараметр("Отдел", Отдел);    


Меняем на список


ГДЕ
    Субконто2.Менеджер.Отдел В (&СписокОтделов)

//===

СписокОтделов = Новый СписокЗначений;
СписокОтделов.Добавить(Отдел);
СписокОтделов.Добавить(Отдел2);
СписокОтделов.Добавить(Отдел3);

Запрос.УстановитьПараметр("СписокОтделов", СписокОтделов);    


P.S.
На форме можно завести реквизит с типом СписокЗначений


P.P.S.
Всякие эксперименты лучше делать во внешних обработках/отчетах
Они сохраняются ГОРАЗДО быстрее чем конфигурация, не нужно перезапускать 1С предприятие
3 Dasvi
 
16.06.22
14:11
(2) Сделал практически так как Вы предлагаете:
Если ЗначениеЗаполнено(Отдел) Тогда
        Текст = Текст + ?(Текст = "", "", " И ") + "
        |            Субконто2.Менеджер.Отдел  В (&СписокОтделов)
        |                ";
        
        СписокОтделов = Новый СписокЗначений;
         СписокОтделов.Добавить(Отдел);
        ВыбраноеЗначение = ВыбратьИзСписка(СписокОтделов);
        
        Запрос.УстановитьПараметр("СписокОтделов", СписокОтделов);        
    КонецЕсли;
Но теперь ругается на то что нельзя выполнять это на клиенте, это фиксится изменением &НаСервере/&НаСервере&НаКлиенте?
Иль же все не так просто? Да и с точки зрения оптимизации корректно ли это?
4 Dasvi
 
16.06.22
14:12
(3) А не , добавлением этого (&НаСервере/&НаСервере&НаКлиенте?) не фиксится -_-
5 Dasvi
 
16.06.22
14:13
Получается нужно формировать список значений на клиенте, далее перекидывать его в Список Значений на Сервере который и будет использрован в данном фильтре, правильтно понимаю?
6 Dasvi
 
16.06.22
14:17
В общем то он ругается на то , что метод недоступен на сервере  " ВыбраноеЗначение = ВыбратьИзСписка(СписокОтделов); "
7 Dasvi
 
16.06.22
14:40
(3) Разобрался, я затупок нужно просто удалить ВыбраноеЗначение = ВыбратьИзСписка(СписокОтделов);
8 Dasvi
 
16.06.22
14:46
(2) Спасибо все работает на Ура,
Если ЗначениеЗаполнено(Отдел) Тогда
        Текст = Текст + ?(Текст = "", "", " И ") + "
        |            Субконто2.Менеджер.Отдел  В (&СписокОтделов)
        |                ";        
        СписокОтделов = Новый СписокЗначений;
         СписокОтделов.Добавить(Отдел);
        СписокОтделов.Добавить(Отдел2);
        
        Запрос.УстановитьПараметр("СписокОтделов", СписокОтделов);        
КонецЕсли;

В форме создано 2 поле Отдел и Отдел2 , с привязкой к реквизитам Отдел и Отдел2

Есть ли возможность Создать Поле с выбором нескольких "Отделов" на случай если пользователь захочет их штук 10 выбрать ? Что бы не создавать те же самые 10 полей выбора ? Или же как то програмно каждый раз когда в 1 поле пользователь выбирает нужный отдел , добавлять второе поле с выбором уже другого отдела и тд
9 Мультук
 
гуру
16.06.22
15:03
(8)

1) Есть типовые конфигурации.
Там тоже не всегда все идеально, но по большей части "как в учебнике".
Берем, ставим демо-базу и смотрим "как оно там у взрослых". В 90% ответы там есть.

2) Идем на сайт курсы-по-1с.рф
Регистрируемся.
Жмем на ссылка "Бесплатно"

У них же есть куча платных курсов

3) Тратим каждый день 1-2 часа на самообучение.
Изучаем объектную модель. Формы, запросы, таблицыЗначений, справочники, документы и т.п.

4) Смотрим примеры на
https://helpf.pro/

Примеры старые, но *базовые вещи* актуальны до сих пор
10 Dasvi
 
16.06.22
15:15
(9) Понял, Спасибо)
2 + 2 = 3.9999999999999999999999999999999...