19 марта, 2024

Пустые ссылки в запросе

В восьмерке условия в запросе срабатывают немного не так, как к тому привык “семерочник”, т.е. как это заведено в семерке. Например, в 7.7, если указать в запросе условие вида

Условие (Товар в ВыбТовар);

и при этом переменная ВыбТовар – пустой элемент справочника, в выборку попадут все варианты значений переменной Товар: пустые, группы, элементы.

В восьмерке есть похожий вариант наложения условия:

ГДЕ ПартииТоваров.Товар В ИЕРАРХИИ(&Товар);

если в параметр запроса Товар передать пустую ссылку, то в результат запроса попадут все непустые значения, т.е. группы и элементы, но не попадут записи регистра, где значение этого измерения не заполнено. Чтобы условие сработало также, как и в семерчном варианте нужно либо программно вообще убрать условие из текста запроса или переписать его например так:

ГДЕ (ПартииТоваров.Товар В ИЕРАРХИИ(&Товар) ИЛИ ПартииТоваров.Товар = &ПустаяСсылкаТовар);

потом в параметр запроса передать пустую ссылку справочника:

Запрос.Параметры.Вставить(“ПустаяСсылкаТовар”, Справочники.Товары.ПустаяСсылка());

Возможно есть способ и покрасивее, но я пока нашел только такой.

UPD для платформы 8.2 Пустую ссылку можно получить прямо в запросе с помощью функции ЗНАЧЕНИЕ, примерно в таком виде: ЗНАЧЕНИЕ(Справочник.Товары.ПустаяСсылка).