Имя: Пароль:
1C
1С v8
СКД: как передать необязательный параметр в выражение в ВычислитьВыражение
0 CaIIIka
 
07.07.25
17:37
Здравствуйте! Задача показалась простая, но решить нормальным способом не смог.

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

Чет не пойму, как передать в функцию общего модуля параметр отчета, который нельзя делать обязательным (использование-Авто). Тип параметра - СправочникСсылка.

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

ВычислитьВыражение("РаботаСКонтрагентами.Просрочка(&Период.ДатаНачала,&Период.ДатаОкончания,измКлиент,измПредприятие,&НужныйПараметр,Сумма(ресСуммаБазКонечныйОстаток),&ПоПоставщикам)","измКлиент","Группировка")

измКлиент и измПредприятие - поля запроса основного набора данных
&НужныйПараметр - необязательный параметр отчета (Использование-Авто)

Весь Инет перерыл, не нашел ничего. Выдает либо как ВычислитьВыражение использовать в различных вариациях, либо как с параметрами работать. Нейро тоже ничего. ИИ от Гугл выдал конструкцию:

ВЫБОР
    КОГДА &Параметр = НЕОПРЕДЕЛЕНО (или ЕСТЬ NULL)
        ТОГДА <Выражение при отсутствии параметра>
    ИНАЧЕ <Выражение с параметром>
КОНЕЦ

Но она тоже требует этот параметр, и ругается если не указан :)

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

Может есть способ проще?
Если что, 1С 8.2.19.130 (вдруг в "тройке" чего-то добавили).
1 timurhv
 
07.07.25
18:01
РаботаСКонтрагентами.Просрочка - там запрос чтоли?
Раз конфига древняя и не обновляется, лучше будет сделать через дополнительный набор данных - как вы и подумали.
Только, не понял зачем нужна дальнейшая передача и допил. Выбирайте сразу необходимые данные.
2 CaIIIka
 
07.07.25
18:16
(1) Запросы только в наборах данных в СКД. РаботаСКонтрагентами.Просрочка считает просрочку за период по контрагенту, организации и подразделению (тот самый параметр). Контрагент и организация - поля запроса СКД, они есть в выборке. Подразделение - необязательный параметр отчета.
3 vicof
 
07.07.25
18:33
(0) Обязательное и заполненное несколько разные вещи.
Обязательным его легко можно сделать в скдшке, а заполненность проверять в функции подсчета просрочки.
4 CaIIIka
 
07.07.25
18:34
(2) Обязательным его делать нельзя. Я в (0) говорил (3 абзац).
5 CaIIIka
 
07.07.25
18:37
Сведу задачу к минимуму:

Вычисляемое поле:
ВычислитьВыражение("ОбщМодуль.Просрочка(&НужныйПараметр)","измКлиент","Группировка")

&НужныйПараметр - Параметр отчета. Использование:Авто.

Как сделать, чтоб не ругалось, когда параметр не выбран (галка на параметре не стоит)?
6 youalex
 
07.07.25
18:38
Технически можно попробовать добавить обязательный параметр (использовать Всегда), с выражение = &Подразделение (твой параметр)