Имя: Пароль:
1C
 
Условие для построителя отчета в виртуальных таблицах
0 alxbzm
 
18.05.09
15:03
В общем, глюк в следующем: в УТ 10.3 делаю запрос по регистру "Партии товаров".

Что хочу: получить список номенклатуры по этому регистру по определенным условиям и потом получить еще раз список номенклатуры, но  уже исключая номенклатуру из первого списка. Условия хочу "запихать" в построитель отчета. Получается в итоге интересная и неприятная в стиле 1С вещь: построитель отчета во вложенном запросе для виртуальной таблицы игнорирует настройки. Вот кусок запроса, на примере которого это наглядно демонстрируется:

ВЫБРАТЬ
   ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
           ,
           ,
           ,
           ,
           (НЕ Номенклатура В
                   (ВЫБРАТЬ
                       ПартииТоваровНаСкладахОстаткиИОбороты1.Номенклатура
                   ИЗ
                       РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(, , , , {(СерияНоменклатуры.Проект).* КАК ВключаемыйПроект}) КАК ПартииТоваровНаСкладахОстаткиИОбороты1
                   СГРУППИРОВАТЬ ПО
                                   ПартииТоваровНаСкладахОстаткиИОбороты1.Номенклатура)) {(СерияНоменклатуры.Проект).* КАК ИсключаемыйПроект}) КАК ПартииТоваровНаСкладахОстаткиИОбороты

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
1 ТелепатБот
 
гуру
18.05.09
15:03
2 alxbzm
 
18.05.09
15:05
Так вот, ИсключаемыйПроект в отборе виден, а ВключаемыйПроект - нет. Причем конструктор без каких-либо ошибок сам выкидывает условие для построителя. Что это? Глюк или так специально задумано? Как тогда в таком случае обходить это ограничение????
3 Defender aka LINN
 
18.05.09
15:09
Соединением сделай. Думаю, в 1С даже и не думали, что кто-то такое будет делать :)
4 alxbzm
 
18.05.09
15:15
(3) - ага - называется попытался сделать как доктор прописал - ограничил вторую выборку на уровне самой виртуальной таблицы, чтобы ускорить запрос, а в результате получил граблями в лоб.

Самое раздражающее в данной ситуации, что если вместо условий для построителя написать явные условия, то все работает - как это ни странно. А в 1С все-таки подумали что такое может быть - я же говорю - конструктор запроса специально выкидывает конструкции с "{}" из вложенного запроса....

В общем цензурных слов не осталось - отправляйте в копилку недоделок.
5 alxbzm
 
18.05.09
15:29
(0) у меня сейчас истерика начнется: вытащил запрос из условий виртуальной таблицы и написал через условие "ГДЕ". ТОТ ЖЕ ЭФФЕКТ:

ВЫБРАТЬ
   ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(, , , , {(СерияНоменклатуры.Проект).* КАК ИсключаемыйПроект}) КАК ПартииТоваровНаСкладахОстаткиИОбороты
ГДЕ
   ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура В(ВЫБРАТЬ
                       ПартииТоваровНаСкладахОстаткиИОбороты1.Номенклатура
                   ИЗ
                       РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(, , , , {((СерияНоменклатуры.Проект).* КАК ВключаемыйПроект}) КАК ПартииТоваровНаСкладахОстаткиИОбороты1
                   СГРУППИРОВАТЬ ПО
                                   ПартииТоваровНаСкладахОстаткиИОбороты1.Номенклатура)

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура


Конструктор запроса выкидывает условие для построителя из виртуальной таблицы в условии. Лыжи однозначно не едут....
6 alxbzm
 
25.05.09
16:19
Все-таки еще подниму эту тему.

Вопрос собственно в следующем: как тогда мне выкинуть из одного множества номенклатуры другое? Если можно то пример пожалуйста.

Как объединить два множества понятно - через ВНУТРЕННЕЕ СОЕДИНЕНИЕ. А вот как тогда исключить одно из другого?
7 alxbzm
 
28.05.09
10:54
Ура. Если долго мучиться - что-нибудь получится. Если кому интересно - обошел данную засаду путем временных таблиц. В первой делаешь фильтр по нужным критериям, во второй - делаешь запрос минус то, что получилось в первой. Спасибо мне что есть я у себя ))))))
8 hhhh
 
28.05.09
10:58
(7) что-то слишком тупо. А элементарное ЛЕВОЕ СОЕДИНЕНИЕ не пробовал?
9 alxbzm
 
28.05.09
11:13
(8) Не получится через ЛЕВОЕ СОЕДИНЕНИЕ из одного множества исключить другое. Присоединить - да. А вот исключить - я по крайней мере не додумался. Если предложите варианты - буду признателен
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.