Вход | Регистрация
 

Программно формируемая СКД и итоговый запрос макета

Программно формируемая СКД и итоговый запрос макета
Я
   YAGolova
 
14.08.19 - 13:27
Вопрос к знатокам СКД. Формирую схему программно таким образом, что текст основного запроса выходит примерно такой:

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура
{ВЫБРАТЬ
    Номенклатура.* КАК Номенклатура}
ИЗ
    Справочник.Номенклатура КАК Номенклатура
{ГДЕ
    Номенклатура.Ссылка.* КАК Номенклатура1,
    Номенклатура.Ссылка.* КАК Номенклатура}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
        Номенклатура.Ссылка КАК Номенклатура

ИЗ
    Справочник.Номенклатура КАК Номенклатура
{ГДЕ
    Номенклатура.Ссылка.* КАК Номенклатура2,
    Номенклатура.Ссылка.* КАК Номенклатура}

На платформе 8.3.7 из этого запроса при установке отборов на номенклатура1 и номенклатура2 выходил запрос

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура = &П

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
        Номенклатура.Ссылка КАК Номенклатура

ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура = &П1

Переставили платформу на 8.3.13 и выходит запрос:

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура = &П И NULL = &П1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
        Номенклатура.Ссылка КАК Номенклатура

ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    NULL = &П И Номенклатура = &П1

Что в итоге естественно никаких данных не возвращает. Это задекларированное поведение платформы? Обойти это как то возможно?
 
 
   YAGolova
 
1 - 14.08.19 - 13:35
Вот что нашел при описании изменений поведения платформы. Для 8.3.1 они прям писали:
При использовании в запросе набора данных системы компоновки данных с автоматическим заполнением доступных настроек конструкции ОБЪЕДИНИТЬ или ОБЪЕДИНИТЬ ВСЕ, и накладывании отбора на реквизит поля, отбор накладывается только в тех частях объединения, в которых данный реквизит существует. При применении отбора к полю отбор применяется только в тех частях, где выражение поля не равно NULL.

Источник: https://dl03.1c.ru/content/Platform/8_3_15_1565/1cv8upd_8_3_15_1565.htm#55463269-77f0-11e1-b5d1-e61f135f174b
   yavasya
 
2 - 14.08.19 - 14:04
(0) бро, это шедевр

ГДЕ 
    NULL = &П И Номенклатура = &П1 

какая задача хть?
   Конструктор1С
 
3 - 14.08.19 - 14:42
(0) а зачем ты именуешь одно и то же поле по-разному?

{ГДЕ 
    Номенклатура.Ссылка.* КАК Номенклатура1, 
    Номенклатура.Ссылка.* КАК Номенклатура} 
{ГДЕ 
    Номенклатура.Ссылка.* КАК Номенклатура2, 
    Номенклатура.Ссылка.* КАК Номенклатура}
   YAGolova
 
4 - 14.08.19 - 15:11
(3) Т.к. хочу наложить разные отборы по номенклатуре в разных частях объединения. Там есть еще одно поле в это запросе, я просто сократил его. В каждой части запроса есть
ВЫБРАТЬ 
    Номенклатура.Ссылка КАК Номенклатура,
    &Сегмент1 КАК Сегмент

Соответственно таблица в итоге должна получиться где сегмент/номенклатура
   YAGolova
 
5 - 14.08.19 - 15:12
(2) Так как раз платформа делает - эти NULL мне и мешают. Раньше такого поведения не было
   kabanoff
 
6 - 14.08.19 - 15:18
(0) Да, я тоже столкнулся с этим в 8.3.13.1644.
Вот мои наблюдения: https://forum.infostart.ru/forum9/topic203141/message2266395/

(1) Да, разработчики обещают исправить это в 8.3.14.
   kabanoff
 
7 - 14.08.19 - 15:20
(0) Вариант обхода - сформировать промежуточные временные таблицы и компоновочные отборы наложить именно в них.
   YAGolova
 
8 - 14.08.19 - 15:25
(7) Это понятно, просто у меня этих объединений дохрена и плодить временные таблицы как то не кошерно

Список тем форума
Рекламное место пустует  Рекламное место пустует
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.