Имя: Пароль:
1C
1С v8
Пакет запросов
0 арах
 
27.01.12
13:17
народ чето я туплю ... почему запрос возвращает нули когда рельно по етой позиции есть и цены и остатки?

ВЫБРАТЬ
   Номенклатура.Ссылка КАК НоменклатураСсылка,
   ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ПОМЕСТИТЬ ВТЗ
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
       ПО Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец
ГДЕ
   Номенклатура.ЭтоГруппа = ЛОЖЬ
   И Номенклатура.ВидНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
   И НЕ Номенклатура.Родитель В ИЕРАРХИИ (&группа)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТЗ.НоменклатураСсылка.Код,
   ВТЗ.НоменклатураСсылка.НаименованиеПолное,
   ВТЗ.Характеристика.Наименование,
   СУММА(ВЫБОР
           КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &видцен1
               ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
           ИНАЧЕ 0
       КОНЕЦ) КАК цена1,
   СУММА(ВЫБОР
           КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &видцен2
               ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
           ИНАЧЕ 0
       КОНЕЦ) КАК цена2,
   СУММА(ВЫБОР
           КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &видцен3
               ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
           ИНАЧЕ 0
       КОНЕЦ) КАК цена3,
   СУММА(ВЫБОР
           КОГДА НоменклатураСегмента.Сегмент = &Сегмент
               ТОГДА 1
           ИНАЧЕ 0
       КОНЕЦ) КАК ВИнтернетМагазин,
   СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток) КАК ВНаличииОстаток
ИЗ
   ВТЗ КАК ВТЗ
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОстатков, ) КАК ЦеныНоменклатурыСрезПоследних
       ПО ВТЗ.НоменклатураСсылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
           И ВТЗ.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
       ПО ВТЗ.НоменклатураСсылка = НоменклатураСегмента.Номенклатура
           И ВТЗ.Характеристика = НоменклатураСегмента.Характеристика
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
               &ДатаОстатков,
               Склад = &Склад1
                   ИЛИ Склад = &Склад2
                   ИЛИ Склад = &Склад3) КАК ТоварыНаСкладахОстатки
       ПО ВТЗ.НоменклатураСсылка = ТоварыНаСкладахОстатки.Номенклатура
           И ВТЗ.Характеристика = ТоварыНаСкладахОстатки.Характеристика
ГДЕ
   ВТЗ.НоменклатураСсылка = &НоменклатураСсылка

СГРУППИРОВАТЬ ПО
   ВТЗ.НоменклатураСсылка.Код,
   ВТЗ.НоменклатураСсылка.НаименованиеПолное,
   ВТЗ.Характеристика.Наименование
1 depthzer0
 
27.01.12
13:20
ГДЕ
   ВТЗ.НоменклатураСсылка = &НоменклатураСсылка
2 арах
 
27.01.12
13:22
(1) и че? это только для отбора конкретной позиции если убрать условие проблемма остатеся тка выподает весь справочник)
3 depthzer0
 
27.01.12
13:23
попробуй условие перенести в связь
4 арах
 
27.01.12
13:24
какое?
5 арах
 
27.01.12
13:24
оно мне воще не нужно это я для отладки наложил
6 depthzer0
 
27.01.12
13:25
пардон, невнимательно
так а параметр &ДатаОстатков - на эту дату есть цены?
7 арах
 
27.01.12
13:25
да есть и цены и остатки
8 арах
 
27.01.12
13:27
тут фишка в том что при пробеге по ВТЗ он выдает  тока одну строку даже еслли не делать группировку
9 pessok
 
27.01.12
13:29
(0) а зачем такие сложности для простейшего отчета?
ВЫБРАТЬ РАЗЛИЧНЫЕ
   СпрНом.Ссылка КАК Номенклатура,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена КАК ЦенаЗакупочная,
   ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаПродажная,
   ЦеныНоменклатурыСрезПоследних.Регистратор КАК РегистраторЦенПродажи,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Регистратор КАК РегистраторЦенПоставщика,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Валюта,
   ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
   Справочник.Номенклатура КАК СпрНом
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), ) КАК ТоварыНаСкладахОстатки
       ПО (ТоварыНаСкладахОстатки.Номенклатура = СпрНом.Ссылка)
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), ) КАК ЦеныНоменклатурыСрезПоследних
       ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = СпрНом.Ссылка)
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
       ПО (ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура = СпрНом.Ссылка)


не?
10 pessok
 
27.01.12
13:30
(8) по твоему запросу, затык наверняка в
НЕ Номенклатура.Родитель В ИЕРАРХИИ (&группа)
11 арах
 
27.01.12
13:36
(10)в том точно затыка нет ВТЗ формируется как надо... проверено в консоли:) это воще просто услове дл отбора не нежной группы:)
12 арах
 
27.01.12
13:37
(9)не так все просто фишка что нужна еще и характеристика и цены хранятся в 1 регистре:)
13 арах
 
27.01.12
13:39
отчет конечно простейший если делать несколькими запросами или разбором результата запроса...
а я захотел просто все сделать 1 запросом:)
14 kinsm
 
27.01.12
13:42
Что за конфа? Что за измерение ВидЦены?
Заем Родитель в НЕ Номенклатура.Родитель В ИЕРАРХИИ (&группа)?
15 pessok
 
27.01.12
13:44
(14) вот и я об том. Номенклатура.Ссылка В ИЕРАРХИИ (&группа)
16 арах
 
27.01.12
13:46
(14) Ут11
ВидЦены = типЦены в 7.7
Родитель в НЕ Номенклатура.Родитель В ИЕРАРХИИ (&группа) для того чтобы убрать не нужную группу из ВТЗ че непонятного?:)
17 pessok
 
27.01.12
13:47
(16) ну неправильно условие написано, говорят же тебе :)
18 pessok
 
27.01.12
13:48
+(17) тебе же надо ВСЮ номенклатуру из группы исключить, правильно?
19 арах
 
27.01.12
13:50
да, но эта группа имет кучу подгрупп... для етого наложено условие
20 pessok
 
27.01.12
13:51
(19) тебе надо ВСЕ подгруппы исключить?
21 арах
 
27.01.12
13:51
короче с ВТЗ все гуд вопорс во 2 запросе
22 арах
 
27.01.12
13:52
да все подгруппы из этой группы)
23 арах
 
27.01.12
13:52
24 kinsm
 
27.01.12
13:52
Все, понял походу. Теде нужно это условие ЦеныНоменклатурыСрезПоследних.ВидЦены = &видцен впихнуть в параметры виртуальной таблицы среза последних. Иначе неверно отработает
25 pessok
 
27.01.12
13:53
(21) если бы в ВТЗ было все гуд, то при ЛЕВОМ соединении у тебя выходили быб все записи... Логично?
26 kinsm
 
27.01.12
13:53
(23) Дык мы говорим, что РОДИТЕЛЬ!!! не верно
27 ptiz
 
27.01.12
13:54
У тебя первая часть запроса в ВТЗ возвращает для товаров без характеристик NULL в характеристике.
28 pessok
 
27.01.12
13:57
(26) кстати, и так взлетает, что странно. Только что в консоль загнал...
(27) дальше идет левое соединение, все равно должно все выводить...
29 pessok
 
27.01.12
14:00
ВЫБРАТЬ
   Номенклатура.Ссылка КАК НоменклатураСсылка,
   ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ПОМЕСТИТЬ ВТЗ
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
       ПО Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец
ГДЕ
   Номенклатура.ЭтоГруппа = ЛОЖЬ
   И Номенклатура.ВидНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
   И (НЕ Номенклатура.Родитель В ИЕРАРХИИ (&группа))

СГРУППИРОВАТЬ ПО
   ХарактеристикиНоменклатуры.Ссылка,
   Номенклатура.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТЗ.НоменклатураСсылка.Код,
   ВТЗ.НоменклатураСсылка.НаименованиеПолное,
   ВТЗ.Характеристика.Наименование,
   ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
   ВТЗ КАК ВТЗ
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОстатков, ) КАК ЦеныНоменклатурыСрезПоследних
       ПО ВТЗ.НоменклатураСсылка = ЦеныНоменклатурыСрезПоследних.Номенклатура

вот так отрабатывает нормально...
30 арах
 
27.01.12
14:01
(24) как его туды загнать если надо 3 цены вернуть?:)
(27) я в курсе... это не мешает.
(25)ну ачто там не верно? загни в консоль проверь
31 pessok
 
27.01.12
14:03
(30) на правах телепат-бота. А ты результат запроса случаем не в СКД обрабатываешь?
32 kinsm
 
27.01.12
14:03
ВЫБРАТЬ
   Номенклатура.Ссылка КАК НоменклатураСсылка,
   ЕСТЬNULL(ХарактеристикиНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК Характеристика
ПОМЕСТИТЬ ВТЗ
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
       ПО Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец
ГДЕ
   Номенклатура.ЭтоГруппа = ЛОЖЬ
   И Номенклатура.ВидНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
   И (НЕ Номенклатура.Родитель В ИЕРАРХИИ (&группа))
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТЗ.НоменклатураСсылка.Код,
   ВТЗ.НоменклатураСсылка.НаименованиеПолное,
   ВТЗ.Характеристика.Наименование,
   СУММА(ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихВид1.Цена, 0)) КАК цена1,
   СУММА(ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихВид2.Цена, 0)) КАК цена2,
   СУММА(ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихВид3.Цена, 0)) КАК цена3,
   СУММА(ВЫБОР
           КОГДА НоменклатураСегмента.Сегмент = &Сегмент
               ТОГДА 1
           ИНАЧЕ 0
       КОНЕЦ) КАК ВИнтернетМагазин,
   СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток) КАК ВНаличииОстаток
ИЗ
   ВТЗ КАК ВТЗ
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОстатков, ВидЦены = &видцен1) КАК ЦеныНоменклатурыСрезПоследнихВид1
       ПО ВТЗ.НоменклатураСсылка = ЦеныНоменклатурыСрезПоследнихВид1.Номенклатура
           И ВТЗ.Характеристика = ЦеныНоменклатурыСрезПоследнихВид1.Характеристика
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
       ПО ВТЗ.НоменклатураСсылка = НоменклатураСегмента.Номенклатура
           И ВТЗ.Характеристика = НоменклатураСегмента.Характеристика
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
               &ДатаОстатков,
               Склад = &Склад1
                   ИЛИ Склад = &Склад2
                   ИЛИ Склад = &Склад3) КАК ТоварыНаСкладахОстатки
       ПО ВТЗ.НоменклатураСсылка = ТоварыНаСкладахОстатки.Номенклатура
           И ВТЗ.Характеристика = ТоварыНаСкладахОстатки.Характеристика
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОстатков, ВидЦены = &видцен1) КАК ЦеныНоменклатурыСрезПоследнихВид2
       ПО ВТЗ.НоменклатураСсылка = ЦеныНоменклатурыСрезПоследнихВид2.Номенклатура
           И ВТЗ.Характеристика = ЦеныНоменклатурыСрезПоследнихВид2.Характеристика
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОстатков, ВидЦены = &видцен3) КАК ЦеныНоменклатурыСрезПоследнихВид3
       ПО ВТЗ.НоменклатураСсылка = ЦеныНоменклатурыСрезПоследнихВид3.Номенклатура
           И ВТЗ.Характеристика = ЦеныНоменклатурыСрезПоследнихВид3.Характеристика
ГДЕ
   ВТЗ.НоменклатураСсылка = &НоменклатураСсылка

СГРУППИРОВАТЬ ПО
   ВТЗ.НоменклатураСсылка.Код,
   ВТЗ.НоменклатураСсылка.НаименованиеПолное,
   ВТЗ.Характеристика.Наименование
33 kinsm
 
27.01.12
14:03
Вот так должен отработать
34 pessok
 
27.01.12
14:09
(33) ну если оно и отработает, то все равно это страшно :)
этож сколько таблиц запрос обходить будет?)
35 арах
 
27.01.12
14:11
(30)я его еще ни как не отрабатываю.. по консоле гоняю тока...
(32) спс так получается... я подозревал что надо сделать кучу соединений на один регистр но думал какнить без этого обойтись:)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший