Суббота, 05.10.2024, 10:25
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Конструктор запросов ИР. Оптимизатор ИЛИ
nclockworkerДата: Четверг, 22.04.2021, 06:45 | Сообщение # 1
Генерал-майор
Группа: Пользователи
Сообщений: 437
Репутация: 342
Статус: Оффлайн

В целях оптимизации запросов рекомендуется заменять условие ИЛИ на "ОБЪЕДИНИТЬ ВСЕ". Это не сложно сделать для не иерархических условий. Но у меня есть такое:



Код
ВЫБРАТЬ * ИЗ РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров
ГДЕ
ИСТИНА
   И СебестоимостьТоваров.Период МЕЖДУ &НачалоПериода И &КонецПериода
   И (ЛОЖЬ
      ИЛИ (ИСТИНА
         И СебестоимостьТоваров.ХозяйственнаяОперация В (ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СписаниеТоваровПоТребованию),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПеремещениеТоваров),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаВСоставОС),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаВСоставНМА),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаВЭксплуатациюБУНУ),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СборкаТоваров),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РазборкаТоваров),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту))
         И СебестоимостьТоваров.Подразделение = &Подразделение)
      ИЛИ (ИСТИНА
         И СебестоимостьТоваров.ХозяйственнаяОперация В (ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПустаяСсылка),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПеремещениеТоваров),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаВСоставОС),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПересортицаТоваров),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПересортицаТоваровСПереоценкой),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаПродукцииИзПроизводства),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаПереработчику),
            ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаПрочиеЦели))
         И ВЫБОР
            КОГДА ТИПЗНАЧЕНИЯ(СебестоимостьТоваров.АналитикаУчетаНоменклатуры.МестоХранения) = ТИП(Справочник.Склады)
               ТОГДА ВЫРАЗИТЬ(СебестоимостьТоваров.АналитикаУчетаНоменклатуры.МестоХранения КАК Справочник.Склады).Подразделение = &Подразделение
            КОГДА ТИПЗНАЧЕНИЯ(СебестоимостьТоваров.АналитикаУчетаНоменклатуры.МестоХранения) = ТИП(Справочник.СтруктураПредприятия)
               ТОГДА (ВЫРАЗИТЬ(СебестоимостьТоваров.АналитикаУчетаНоменклатуры.МестоХранения КАК Справочник.СтруктураПредприятия)) = &Подразделение
            ИНАЧЕ ЛОЖЬ
         КОНЕЦ))
   И СебестоимостьТоваров.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
   И (ЛОЖЬ
      ИЛИ СебестоимостьТоваров.РазделУчета В (ЗНАЧЕНИЕ(Перечисление.РазделыУчетаСебестоимостиТоваров.ТоварыНаСкладах))
      ИЛИ (ИСТИНА
         И СебестоимостьТоваров.РазделУчета В (ЗНАЧЕНИЕ(Перечисление.РазделыУчетаСебестоимостиТоваров.ПроизводственныеЗатраты))
         И (ЛОЖЬ
            ИЛИ ТИПЗНАЧЕНИЯ(СебестоимостьТоваров.Регистратор) = ТИП(Документ.ВнутреннееПотреблениеТоваров)
            ИЛИ СебестоимостьТоваров.ХозяйственнаяОперация В (ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаПродукцииИзПроизводства)))))
   И СебестоимостьТоваров.СтоимостьРегл + СебестоимостьТоваров.ДопРасходыРегл + СебестоимостьТоваров.ПостатейныеПостоянныеРегл + СебестоимостьТоваров.ПостатейныеПеременныеРегл <> 0
   И НЕ (ПОДСТРОКА(ЕСТЬNULL(СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура.ГруппаФинансовогоУчета.Наименование, ""), 1, 2) ПОДОБНО "08")


Хотелось бы в Конструкторе запросов ИР видеть инструмент, который умеет "Разворачивать" такие запросы в несколько отдельных через ОБЪЕДИНИТЬ ВСЕ с учетом Иерархии условия.
Прикрепления: 3045440.png (31.9 Kb)
 
  • Страница 1 из 1
  • 1
Поиск: