Имя: Пароль:
1C
1С v8
Оператор Не В в запросах
0 amadeus2010
 
08.06.12
14:03
Добрый день, помогите разобраться как использовать оператор В в запросах.Есть 2 запроса соединенные между собой через правое соединение.Эти запросы соединяются с основным запросом так
//////////////////////////////////////////////////////////////////

ГДЕ
   ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток > 0
   И (НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В
               (ВЫБРАТЬ
                   ВТБ.Заказ
               ИЗ
                   ВТЗаказПоКоличествуКассет КАК ВТБ))
///////////////////////////////////////////////////////////////////

Смысл соединения 2 запросов с основным  в том чтобы не выводить заказы покупателя где количество товара меньше 5 единиц.При выводе в консоль отчетов выходят пустые поля. Если я убираю НЕ то выводится список товаров где количество товара меньше 5,т.е то что должно отсекаться.В чем ошибка написания запроса?
1 DrShad
 
08.06.12
14:06
это не соединение
2 amadeus2010
 
08.06.12
14:23
у меня есть
///////////////////////////////////////////////////////////////////////
запрос1 выбрать заказы.ссылка, количество
поместить ВТЗаказы из....  
где количество<5
правое соединение
запрос2 выбрать заказ.ссылка,количество
основной запрос.............с содержимым
где
ГДЕ
   ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток > 0
   И (НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В
               (ВЫБРАТЬ
                   ВТБ.Заказ
               ИЗ
                   ВТЗаказПоКоличествуКассет КАК ВТБ))
//////////////////////////////////////////////////////////////////////////////
3 Buster007
 
08.06.12
14:25
может нет больше 5?
4 amadeus2010
 
08.06.12
14:26
(3) не совсем понял вас
5 vicof
 
08.06.12
14:26
можно попридираться?
1. .Ссылка не нужно
2. Нормально запрос можно было выложить?
6 amadeus2010
 
08.06.12
14:28
я могу выложить весь запрос только он очень большой и вряд ли кто-нибудь будет его читать в пятницу после обеда:))
7 Buster007
 
08.06.12
14:30
а, догнал, не из той таблицы ты данные тащишь судя по всему раз пустые поля выводятся
8 ssh2006
 
08.06.12
14:31
(2) из-за где количество<5 соединение становится внутренним
9 Buster007
 
08.06.12
14:35
(8) а я подумал что это другой запрос...
10 amadeus2010
 
08.06.12
14:35
ну что же придется выложить весь запрос может что-то прояснится
////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТоварыКРаспределениюПоРейсамОстаткиПЕТШАХДАГ.Заказ
ПОМЕСТИТЬ ВТЗаказПоКоличествуКассет
ИЗ
   (ВЫБРАТЬ
       ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка КАК Заказ,
       СУММА(ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток / ТоварыКРаспределениюПоРейсамОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент) КАК КоличествоОБЩЕЕ
   ИЗ
       РегистрНакопления.ТоварыКРаспределениюПоРейсам.Остатки(
               &Дата,
               ЗаказПокупателя.ДатаОтгрузки >= &ЗаказПокупателяДатаНачала
                   И ЗаказПокупателя.ДатаОтгрузки <= &ЗаказПокупателяДатаКонца) КАК ТоварыКРаспределениюПоРейсамОстатки
   
   СГРУППИРОВАТЬ ПО
       ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка
   
   ИМЕЮЩИЕ
       СУММА(ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток / ТоварыКРаспределениюПоРейсамОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент) < 5) КАК ТоварыКРаспределениюПоРейсамОстаткиОБЩЕЕ
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка КАК Заказ,
           СУММА(ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток / ТоварыКРаспределениюПоРейсамОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент) КАК КоличествоШахдагПЕТ
       ИЗ
           РегистрНакопления.ТоварыКРаспределениюПоРейсам.Остатки(
                   &Дата,
                   ЗаказПокупателя.ДатаОтгрузки >= &ЗаказПокупателяДатаНачала
                       И ЗаказПокупателя.ДатаОтгрузки <= &ЗаказПокупателяДатаКонца
                       И (Номенклатура.Родитель.Ссылка В ИЕРАРХИИ (&ПЕТ)
                           ИЛИ Номенклатура.Родитель.Ссылка В ИЕРАРХИИ (&ШАХДАГ))) КАК ТоварыКРаспределениюПоРейсамОстатки
       
       СГРУППИРОВАТЬ ПО
           ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка) КАК ТоварыКРаспределениюПоРейсамОстаткиПЕТШАХДАГ
       ПО (ТоварыКРаспределениюПоРейсамОстаткиПЕТШАХДАГ.Заказ = ТоварыКРаспределениюПоРейсамОстаткиОБЩЕЕ.Заказ)
           И (ТоварыКРаспределениюПоРейсамОстаткиПЕТШАХДАГ.КоличествоШахдагПЕТ = ТоварыКРаспределениюПоРейсамОстаткиОБЩЕЕ.КоличествоОБЩЕЕ)
;

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

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

ИНДЕКСИРОВАТЬ ПО
   Номенклатура,
   ХарактеристикаНоменклатуры,
   СерияНоменклатуры,
   РегистраторРейс
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТоварыВРейсахОбороты.Рейс КАК Рейс,
   ТоварыВРейсахОбороты.Номенклатура КАК Номенклатура,
   ТоварыВРейсахОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   ТоварыВРейсахОбороты.СерияНоменклатуры КАК СерияНоменклатуры,
   СУММА(ЕСТЬNULL(ТоварыВРейсахОбороты.КоличествоОборот, 0)) КАК КоличествоОборот
ПОМЕСТИТЬ ВТТоварыВРейсахОбороты
ИЗ
   РегистрНакопления.ТоварыВРейсах.Обороты(, , , Состояние <> &CостояниеРейсаЗакрыт) КАК ТоварыВРейсахОбороты

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

ИНДЕКСИРОВАТЬ ПО
   Рейс,
   Номенклатура,
   ХарактеристикаНоменклатуры,
   СерияНоменклатуры
;

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

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

ИНДЕКСИРОВАТЬ ПО
   КоличествоОборот,
   Номенклатура,
   ХарактеристикаНоменклатуры,
   СерияНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Контрагент.КодОракл КАК КодОракл,
   ВЫБОР
       КОГДА ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Грузополучатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
           ТОГДА ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Контрагент.Регион
       ИНАЧЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Грузополучатель.Регион
   КОНЕЦ КАК Регион,
   ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Контрагент КАК Контрагент,
   ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Контрагент.Наименование КАК КонтрагентНаименование,
   ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя КАК Заказ,
   ТоварыКРаспределениюПоРейсамОстатки.Номенклатура,
   ТоварыКРаспределениюПоРейсамОстатки.ХарактеристикаНоменклатуры,
   ТоварыКРаспределениюПоРейсамОстатки.СерияНоменклатуры,
   ТоварыКРаспределениюПоРейсамОстатки.ЕдиницаИзмерения,
   ТоварыКРаспределениюПоРейсамОстатки.ТипПоставки,
   ТоварыКРаспределениюПоРейсамОстатки.Цена,
   ТоварыКРаспределениюПоРейсамОстатки.СтавкаНДС,
   ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток КАК КоличествоКРаспределению,
   ТоварыКРаспределениюПоРейсамОстатки.СуммаВзаиморасчетовОстаток КАК Сумма,
   ТоварыКРаспределениюПоРейсамОстатки.ЕдиницаИзмерения.Вес * ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток / ТоварыКРаспределениюПоРейсамОстатки.ЕдиницаИзмерения.Коэффициент * ТоварыКРаспределениюПоРейсамОстатки.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Вес,
   ТоварыКРаспределениюПоРейсамОстатки.СуммаУпрОстаток КАК СуммаУпр,
   ТоварыКРаспределениюПоРейсамОстатки.ЕдиницаИзмерения.Объем * ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток / ТоварыКРаспределениюПоРейсамОстатки.ЕдиницаИзмерения.Коэффициент * ТоварыКРаспределениюПоРейсамОстатки.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Объем,
   ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Дата,
   ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Номер,
   ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ВТТоварыВРейсах.КоличествоОборот, 0) КАК КоличествоОстаток
ИЗ
   ВТЗаказПоКоличествуКассет КАК ВТПоКолВуКассет
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКРаспределениюПоРейсам.Остатки(
               &Дата,
               ЗаказПокупателя.ДатаОтгрузки >= &ЗаказПокупателяДатаНачала
                   И ЗаказПокупателя.ДатаОтгрузки <= &ЗаказПокупателяДатаКонца) КАК ТоварыКРаспределениюПоРейсамОстатки
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаРейс, Склад.ТипСклада <> &СкладМашина) КАК ТоварыНаСкладахОстатки
           ПО ТоварыКРаспределениюПоРейсамОстатки.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
               И ТоварыКРаспределениюПоРейсамОстатки.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры
               И ТоварыКРаспределениюПоРейсамОстатки.СерияНоменклатуры = ТоварыНаСкладахОстатки.СерияНоменклатуры
           ЛЕВОЕ СОЕДИНЕНИЕ ВТТоварыВРейсах КАК ВТТоварыВРейсах
           ПО ТоварыКРаспределениюПоРейсамОстатки.Номенклатура = ВТТоварыВРейсах.Номенклатура
               И ТоварыКРаспределениюПоРейсамОстатки.ХарактеристикаНоменклатуры = ВТТоварыВРейсах.ХарактеристикаНоменклатуры
               И ТоварыКРаспределениюПоРейсамОстатки.СерияНоменклатуры = ВТТоварыВРейсах.СерияНоменклатуры
       ПО (ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка <> ВТПоКолВуКассет.Заказ)
ГДЕ
   ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток > 0
   И (НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В
               (ВЫБРАТЬ
                   ВТБ.Заказ
               ИЗ
                   ВТЗаказПоКоличествуКассет КАК ВТБ))

УПОРЯДОЧИТЬ ПО
   Регион,
   КонтрагентНаименование
ИТОГИ
   СУММА(КоличествоКРаспределению),
   СУММА(Сумма),
   СУММА(Вес),
   СУММА(СуммаУпр),
   СУММА(Объем)
ПО
   Регион,
   Контрагент,
   Заказ
//////////////////////////////////////////////////////////////////
11 amadeus2010
 
08.06.12
14:44
есть какие-либо предложения по теме вопроса?
12 Buster007
 
08.06.12
14:49
а тебе не кажется что
ИЗ
   ВТЗаказПоКоличествуКассет КАК ВТПоКолВуКассет
И
ГДЕ
 
   НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В
               (ВЫБРАТЬ
                   ВТБ.Заказ
               ИЗ
                   ВТЗаказПоКоличествуКассет КАК ВТБ))
это херня какая-то?
13 zinch
 
08.06.12
14:54
А что в ВТЗаказПоКоличествуКассет попадает?
14 amadeus2010
 
08.06.12
14:59
ВТЗаказПоКоличествуКассет в него должно попасть данные из 2 запросов с проверкой на условие  меньше 5
15 zinch
 
08.06.12
15:01
А если так?
ГДЕ
   ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток МЕЖДУ 0 И 5
16 ssh2006
 
08.06.12
15:07
(14) в логике у тебя ошибка. Делаешь Левое соединение к таблице ВТЗаказПоКоличествуКассет КАК ВТПоКолВуКассет и на соединяемую таблицу накладываешь условие  
ГДЕ
 
   НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В
               (ВЫБРАТЬ
                   ВТБ.Заказ
               ИЗ
                   ВТЗаказПоКоличествуКассет КАК ВТБ))

Соединение получается внутренним и в итоге получается что из первой таблицы нужно выбрать те записи, которых одновременно нет в этой же таблице нет. Поэтому и пусто
17 hhhh
 
08.06.12
15:08
(14) чего вы паритесь уже четвертый месяц? Сделайте в заказе реквизит КоличествоВЗаказеМеньше5Единиц. А в запросе напишите

ГДЕ
   ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток > 0
   И РаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка.КоличествоВЗаказеМеньше5Единиц = ЛОЖЬ

и ПРОФИТ.
18 amadeus2010
 
08.06.12
15:12
(16)как можно исправить эту ошибку
///////////////////////////////////////////////////////////////////
ГДЕ
   ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток > 0
   И (НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В
               (ВЫБРАТЬ
                   ВТЗаказПоКоличествуКассет.Заказ
               ИЗ
                   ВТЗаказПоКоличествуКассет))
//////////////////////////////////////////////////////////////////////////
19 amadeus2010
 
08.06.12
15:22
я имею ввиду про соединения
20 amadeus2010
 
08.06.12
15:36
есть кто-нибудь?
21 ssh2006
 
08.06.12
15:37
(19) перепиши свой запрос, что еще сказать. Как исправить запрос "выбрать 1 где 1 <> 1" ?
22 amadeus2010
 
08.06.12
15:51
понимаю что если запрос не работает то его надо исправить, не подскажите в каком направлении идти?
23 amadeus2010
 
08.06.12
16:24
О кей, забудем про то что написано выше и рассмотрим вопрос по-другому. Есть ВТЗаказ в которой сидят заказ1 и заказ2. Есть второй запрос выводящий список определенных заказов к примеру
выбрать заказпокупателя.ссылка
из документы.заказпокупателя как заказ покупателя
Как этот запрос изменить так чтобы в него не попадали заказы из ВТЗаказ?
24 amadeus2010
 
09.06.12
08:02
О кей, забудем про то что написано выше и рассмотрим вопрос по-другому. Есть ВТЗаказ в которой сидят заказ1 и заказ2. Есть второй запрос выводящий список определенных заказов к примеру
выбрать заказпокупателя.ссылка
из документы.заказпокупателя как заказ покупателя
Как этот запрос изменить так чтобы в него не попадали заказы из ВТЗаказ?
25 Cube
 
09.06.12
08:05
26 amadeus2010
 
09.06.12
09:11
Доброе утро касаясь темы запроса.Сегодня утром проверил его на другой базе подключенной к другому серверу.Запрос в том виде который я выложил работает на другой базе,но есть определенные моменты. Если в заказе  количество товара принадлежащего к одной из групп ПЕТ или Шахдаг суммарно меньше 5,запрос работает,но если в заказ добавить например  20л бутыль -1шт, ПЕТ товар 1шт, Шахдаг товар-1шт, то запрос не работает,выводятся только названия колонок. Получается что запрос может сравнивать только те группы которые указаны в условии отбора в верхней части запроса. А как можно обойти эту ситуацию чтобы он сравнивал все товары в заказе и отсекал те где количество меньше 5 и оставлял в заказе те строки которые не принадлежат  к ПЕТ или Шахдаг?
27 amadeus2010
 
09.06.12
10:53
есть какие-то предположения на этот счет?
28 Buster007
 
09.06.12
11:47
(27) тебе уже написали выше где в твоем запросе ошибка, что ты ещё хочешь? чтобы за тебя запрос написали?
29 amadeus2010
 
09.06.12
16:58
ошибку исправил запрос работает,всем спасибо