Имя: Пароль:
1C
1С v8
Построитель отчета, необязательный параметр виртуальной таблицы
0 vdeemer
 
01.12.21
13:42
Здравствуйте!
Отчет на ОФ, использую в тексте построителя запроса сабж:

ВЫБРАТЬ
Долги.Контрагент КАК Контрагент,
Долги.СуммаРубОстаток КАК СуммаДолга,
Долги.Договор КАК Договор
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(, Фирма = &Фирма {(Контрагент В ИЕРАРХИИ (&Покупатели))}) КАК Долги


Потом при запуске вставляю параметр


Если ЗначениеЗаполнено(Покупатели) Тогда
    ПостроительОтчета.Параметры.Вставить("Покупатели", Покупатели);
КонецЕсли;
ПостроительОтчета.Выполнить();
РезультатПостроителя = ПостроительОтчета.Результат;


Несмотря на наличие параметра, выборка все равно без его учета. Подскажите, что я делаю не так? Спасибо.
1 youalex
 
01.12.21
13:53
Если параметр неопциональный, убери фигурные скобки.
Если опциональный - можно сделать через отбор типа
Остатки(, Фирма = &Фирма {(Контрагент КАК Покупатели)})
, вид сравнения - в группе из списка.
2 vdeemer
 
01.12.21
14:06
(1) не взлетело, выбирает все
3 Ryzeman
 
01.12.21
14:10
(0) Отчёт точно на СКД?
4 vdeemer
 
01.12.21
14:11
(3) при чем здесь СКД? Построитель отчета.
5 youalex
 
01.12.21
14:11
(2) смотри Построитель.ПолучитьЗапрос()
6 Ryzeman
 
01.12.21
14:15
(4) А построитель так умеет? Необязательные условия для виртуальных таблиц в фигурных скобках? Я думал это только расширение языка запросов в СКД.
7 vdeemer
 
01.12.21
14:15
(5) ...Остатки(, Фирма = &Фирма)
Т.е. не увиделось того, что в скобках(((
(6) Умеет, только я вот пока не соображу, каким пальцем ему показывать))
8 youalex
 
01.12.21
14:17
(7) Отбор добавь программно, с "вид сравнения - в группе из списка."
9 vdeemer
 
01.12.21
14:17
10 vdeemer
 
01.12.21
14:17
(8) так-то понятно, но это же виртуальная таблица, хотелось кошерно сделать
11 youalex
 
01.12.21
14:18
(10) в СКД/Построителе отборы в параметрах вирт таблиц это и есть кошерно)
Если тебе не нужно жестко условие прописать.
12 vdeemer
 
01.12.21
14:25
(11) чот я сомневаюсь... А если условие надо наложить (накласть) на поле, которое потом в результате даже не появится?
13 youalex
 
01.12.21
14:41
(12) в смысле. Ты же на отбор накладываешь на измерение вирт. таблицы. И пусть даже это поле не появится, но отбор то проявится в любом случае.
14 vdeemer
 
01.12.21
15:16
(11) (12) (13) извините, был напуган (с)
Все так и есть на самом деле.
Если кому понадобится, то вот решение:
Текст запроса Остатки(, Фирма = &Фирма {(Контрагент КАК Покупатели)}),



    ПолеОтбораПоПокупателям = ПостроительОтчета.Отбор.Добавить("Покупатели");

    Если ЗначениеЗаполнено(Покупатели) Тогда

        ПолеОтбораПоПокупателям.Значение = Покупатели;
        ПолеОтбораПоПокупателям.Использование = Истина;        
        ПолеОтбораПоПокупателям.ВидСравнения  = ВидСравнения.ВСпискеПоИерархии;
    Иначе
       ПостроительОтчета.Отбор.Удалить(ПостроительОтчета.Отбор.Индекс(ПолеОтбораПоПокупателям));
    КонецЕсли;
15 youalex
 
01.12.21
15:47
(14) можно проще (и нагляднее)
ПолеОтбораПоПокупателям.Использование = ЗначениеЗаполнено(Покупатели)

Но это уже больше вскусовщина)
16 Михаил Козлов
 
01.12.21
16:02
Если не ошибаюсь, с построителем можно обойтись без фильтра в тексте запроса. Достаточно на форму вывести отборы построителя.
А он уже сам разберется, есть фильтр и какое значение вида сравнения.
В запросе построителя заполнить секцию
{ГДЕ
    Контрагент.* КАК Контрагент,
......
}
17 youalex
 
01.12.21
16:03
(16) {ГДЕ
    Контрагент.*
Это косяк, если Контрагент измерение регистра вирт. таблицы
18 youalex
 
01.12.21
16:08
(16) но обязательно условие отбора в построителе прописывать не обязательно (вроде),- это нужно например, чтобы переназначить имя отбора (если например в разных регистрах одноименное измерение, и нужно эти отборы разделить) , а так построитель и так "поймет", что нужно условие запихать именно в параметр вирт. таблицы. В СКД примерно такая же логика, но там еще завязано на галку "Автозаполнение"