Имя: Пароль:
1C
 
Несколько условий в запросе
0 jerry mouse
 
20.07.10
10:34
Здравствуйте!
Не могу разобраться что к чему. Есть запрос, приведенный ниже. ЕСть три условия.Каждое из условия, когда оно остается в запросе одно, работает верно. Когда я подключаю все три условия (через И), 1С их игнорирует. Подскажите, в чем причина :(

ВЫБРАТЬ
 СправочникНоменклатура.Ссылка,
 СправочникНоменклатура.ПометкаУдаления,
 СправочникНоменклатура.Предопределенный,
 СправочникНоменклатура.Родитель,
 СправочникНоменклатура.ЭтоГруппа,
 СправочникНоменклатура.Код,
 СправочникНоменклатура.Наименование,
 СправочникНоменклатура.ПолноеНаименование,
 СправочникНоменклатура.СрокГарантии,
 СправочникНоменклатура.Гарантийный,
 СправочникНоменклатура.НеВключатьВРозничныйПрайс,
 СправочникНоменклатура.СтараяПозиция,
 СправочникНоменклатура.ТипНоменклатуры,
 ЗапросЦена1.Номенклатура КАК Номенклатура1,
 ЗапросЦена1.ТипЦены КАК ТипЦены1,
 ЗапросЦена1.Цена КАК Цена1,
 ЗапросОстатки.КоличествоОстаток КАК КоличествоОстатки,
 ЗапросОстатки.БроньОстаток КАК БроньОстатки,
 ЗапросЦена1.Цена * &КурсПересчета1 КАК ВалЦена1
ИЗ
 Справочник.Номенклатура КАК СправочникНоменклатура
   ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ  
     ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
       ЦеныНоменклатурыСрезПоследних.ТипЦены КАК ТипЦены,
       ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
       ИЗ
       РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК        ЦеныНоменклатурыСрезПоследних
ГДЕ
   ЦеныНоменклатурыСрезПоследних.ТипЦены.Ссылка = &ТипЦены1) КАК ЗапросЦена1
   ПО СправочникНоменклатура.Ссылка = ЗапросЦена1.Номенклатура.Ссылка
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           СкладОстатки.Номенклатура КАК Номенклатура,
           СУММА(СкладОстатки.КоличествоОстаток) КАК КоличествоОстаток,
           СУММА(СкладОстатки.БроньОстаток) КАК БроньОстаток
       ИЗ
           РегистрНакопления.ОстакиТМЦ.Остатки КАК СкладОстатки
       СГРУППИРОВАТЬ ПО
           СкладОстатки.Номенклатура) КАК ЗапросОстатки
       ПО СправочникНоменклатура.Ссылка = ЗапросОстатки.Номенклатура.Ссылка
ГДЕ  
       ((&ТолькоПрайс = ЛОЖЬ) ИЛИ ((&ТолькоПрайс = ИСТИНА) И (СправочникНоменклатура.НеВключатьВРозничныйПрайс = ЛОЖЬ)))
     И ((&ТолькоНаСкладе = ЛОЖЬ) ИЛИ ((&ТолькоНаСкладе = ИСТИНА) И ((ЗапросОстатки.КоличествоОстаток + ЗапросОстатки.БроньОстаток) > &ПорогОтображения)))
     И ((&СтарыеПозиции = ИСТИНА) ИЛИ ((&СтарыеПозиции = ЛОЖЬ) И (СправочникНоменклатура.СтараяПозиция = ЛОЖЬ)))
1 mirosh
 
20.07.10
10:35
(0) ((&ТолькоПрайс = ЛОЖЬ) ИЛИ ((&ТолькоПрайс = ИСТИНА)   - прикольна!!!
2 dimoff
 
20.07.10
10:36
(1) Не тупим, тут как раз все в порядке
3 mirosh
 
20.07.10
10:37
(2) мне просто подход понравился, я вижу, что все в порядке.
4 dimoff
 
20.07.10
10:37
Что значит итгонорирует? Все выводит или ничего не выводит?
5 dimoff
 
20.07.10
10:38
(3) Гораздо прикольней
РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК        ЦеныНоменклатурыСрезПоследних
ГДЕ
   ЦеныНоменклатурыСрезПоследних.ТипЦены.Ссылка = &ТипЦены1
6 jerry mouse
 
20.07.10
11:14
(4)
выводит все.
т.е. даже если указано выводить только то, что в наличии, выводит все

(5) а что не так? есть несколько типов цен, мне надо выводить в общий список только один тип цен (розницу), поэтому я из регитров сведений выбираю только данные по этому типу цены
7 Defender aka LINN
 
20.07.10
11:16
На что только люди не идут, чтобы отбор не использовать...
8 dimoff
 
20.07.10
11:17
(6) Во всех учебниках по 8ке будущий специалист предостерегается от главной(не считая залета подруги) ошибки в своей жизни - ВСЕГДА условия по виртуальным таблицам должны указываться в её параметрах во избежание тормозов
9 mirosh
 
20.07.10
11:19
(8) Если эти условия по измерениям.
10 jerry mouse
 
20.07.10
11:22
(8)(9) а чуть поподробнее можно?
11 mirosh
 
20.07.10
11:23
12 Asmody
 
20.07.10
11:23
(10) РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,ТипЦены = &ТипЦены1) КАК        ЦеныНоменклатурыСрезПоследних
13 jerry mouse
 
20.07.10
11:27
(11) спасибо, буду читать
(12) я такой конструкции не видел, спасибо

Переделаю запрос, тогда проблема с условиями может и отпадет.
14 Рыжий Лис
 
20.07.10
11:39
(13) вот это
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           СкладОстатки.Номенклатура КАК Номенклатура,
           СУММА(СкладОстатки.КоличествоОстаток) КАК КоличествоОстаток,
           СУММА(СкладОстатки.БроньОстаток) КАК БроньОстаток
       ИЗ
           РегистрНакопления.ОстакиТМЦ.Остатки КАК СкладОстатки
       СГРУППИРОВАТЬ ПО
           СкладОстатки.Номенклатура) КАК ЗапросОстатки
       ПО СправочникНоменклатура.Ссылка = ЗапросОстатки.Номенклатура.Ссылка

можно заменить на
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстакиТМЦ.Остатки КАК ЗапросОстатки
       ПО СправочникНоменклатура.Ссылка = ЗапросОстатки.Номенклатура
15 jerry mouse
 
23.07.10
01:34
Проблема решилась после того как я явно преобразовал NULL в 0, хотя это странно

ЕСТЬNULL(ЗапросОстатки.КоличествоОстаток, 0) КАК КоличествоОстатки,
ЕСТЬNULL(ЗапросОстатки.БроньОстаток, 0) КАК БроньОстатки,
ЕСТЬNULL(ЗапросЦена1.Цена, 0) * &КурсПересчета1 КАК ВалЦена1
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший