| 
    
            
         
         | 
    
  | 
Соединение в запросе по двум признакам | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        kalisto    
     16.09.15 
            ✎
    00:36 
 | 
         
        Доброго времени суток, всем.
 
        Есть запрос, который выбирает данные из двух регистров: ВЫБРАТЬ ПартииТоваровНаСкладах.Номенклатура КАК Номенклатура, ВЫБОР КОГДА ПартииТоваровНаСкладах.ДокументДвижения <> НЕОПРЕДЕЛЕНО ТОГДА ПартииТоваровНаСкладах.ДокументДвижения ИНАЧЕ ПартииТоваровНаСкладах.Регистратор КОНЕЦ КАК Регистратор, СУММА(ВЫБОР КОГДА НЕ ПартииТоваровНаСкладах.ДокументОприходования ССЫЛКА Документ.ОприходованиеТоваров ТОГДА ВЫБОР КОГДА ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА ПартииТоваровНаСкладах.Стоимость * -1 ИНАЧЕ ПартииТоваровНаСкладах.Стоимость КОНЕЦ ИНАЧЕ ВЫБОР КОГДА НЕ ПартииТоваровНаСкладахУценка.ДокументОприходования.Уценка ТОГДА ВЫБОР КОГДА ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА ПартииТоваровНаСкладах.Стоимость * -1 ИНАЧЕ ПартииТоваровНаСкладах.Стоимость КОНЕЦ ИНАЧЕ ПартииТоваровНаСкладахУценка.Стоимость КОНЕЦ КОНЕЦ) КАК СтоимостьОборот ИЗ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладахУценка КАК ПартииТоваровНаСкладахУценка ПО ПартииТоваровНаСкладах.Номенклатура = ПартииТоваровНаСкладахУценка.Номенклатура И ПартииТоваровНаСкладах.Регистратор = ПартииТоваровНаСкладахУценка.ДокументДвижения ГДЕ ПартииТоваровНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаКонца И ПартииТоваровНаСкладахУценка.Период МЕЖДУ &ДатаНачала И &ДатаКонца И ПартииТоваровНаСкладах.Номенклатура = &НоменклатураСсылка И ПартииТоваровНаСкладахУценка.Номенклатура = &НоменклатураСсылка {ГДЕ ПартииТоваровНаСкладах.Номенклатура.* КАК Номенклатура, ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры} СГРУППИРОВАТЬ ПО ПартииТоваровНаСкладах.Номенклатура, ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры, ВЫБОР КОГДА ПартииТоваровНаСкладах.ДокументДвижения <> НЕОПРЕДЕЛЕНО ТОГДА ПартииТоваровНаСкладах.ДокументДвижения ИНАЧЕ ПартииТоваровНаСкладах.Регистратор КОНЕЦ Но в результат попадают не все докумменты из Регистра ПартииТоваровНаСкладах. Оказалось все просто. Если в документе нет движений по регистру ПартииТоваровНаСкладахУценка, то документ не попадпет в список. Т.е. если закомментировать строку ПартииТоваровНаСкладах.Регистратор = ПартииТоваровНаСкладахУценка.ДокументДвижения, то документ в список попадает, но получается полная ерунда. Вопрос в том, как отобрать в том числе и те документы, у которых нет движений по регистру ПартииТоваровНаСкладахУценка.  | 
|||
| 
    1
    
        Aleksandr N    
     16.09.15 
            ✎
    00:42 
 | 
         
        (0) Думаю, что условия:
 
        И ПартииТоваровНаСкладахУценка.Период МЕЖДУ &ДатаНачала И &ДатаКонца И ПартииТоваровНаСкладахУценка.Номенклатура = &НоменклатураСсылка в вашем случае лучше поставить в условия соединения, т.к. в противном случае у вас получается не совсем левое соединение.  | 
|||
| 
    2
    
        Сияющий в темноте    
     16.09.15 
            ✎
    00:46 
 | 
         
        У него тпи вообще соединения нет,так как он отбирает по номенклатуре,и логичнее просто сделать выборку по документам в отдельную таблицу а потом из этой таблицы вытянуть дпныве с соединением с регистрами,т будет null,если какого то регистра нет     
         | 
|||
| 
    3
    
        Aleksandr N    
     16.09.15 
            ✎
    00:48 
 | 
         
        (2) Согласен. Предполагаю, что это лучше сделать через временную таблицу.     
         | 
|||
| 
    4
    
        kalisto    
     16.09.15 
            ✎
    01:16 
 | 
         
        Подскажите, как будет выглядеть запрос с использованием временной таблицы. С запросами только начала разбираться, поэтому с построением текстов запросов еще не очень...     
         | 
|||
| 
    5
    
        hhhh    
     16.09.15 
            ✎
    10:54 
 | 
         
        (4) просто  ПартииТоваровНаСкладахУценка перенеси из ГДЕ в ПО. Не надо никаких таблиц     
         | 
|||
| 
    6
    
        bootini    
     16.09.15 
            ✎
    11:14 
 | 
         
        (5) Все таки лучше конечно виртуальные таблицы оборот регистров накопления использовать, а не физические ну и условия в ГДЕ по регистру уценки лишние, у него связи и так стоят.     
         | 
|||
| 
    7
    
        kalisto    
     16.09.15 
            ✎
    11:18 
 | 
         
        Условия в ГДЕ я убрала уже. И просьба, может кто дать ссылку на хорошую статью по виртуальным таблицам. Доделать бы уже этот отчет и забыть. Может кто еще приблизительно код подскажет, будут благодарна.     
         | 
|||
| 
    8
    
        olegves    
     16.09.15 
            ✎
    11:19 
 | 
         
        (5) +100 все условия по уценке убрать из ГДЕ в соедиинение     
         | 
|||
| 
    9
    
        kalisto    
     16.09.15 
            ✎
    11:50 
 | 
         
        (8) Убрала уже.     
         | 
|||
| 
    10
    
        bootini    
     16.09.15 
            ✎
    12:23 
 | 
         
        (7) 
 
        Много статей по виртуальным таблицам, вот например: http://www.develplatform.com/2013/06/1_23.html  | 
|||
| 
    11
    
        Aleksandr N    
     17.09.15 
            ✎
    02:40 
 | 
         
        (9) Не получилось?     
         | 
|||
| 
    12
    
        Aleksandr N    
     17.09.15 
            ✎
    02:56 
 | 
         
        (9) Попробуйте так:
 
        ВЫБРАТЬ ПартииТоваровНаСкладах.Номенклатура КАК Номенклатура, ВЫБОР КОГДА ПартииТоваровНаСкладах.ДокументДвижения <> НЕОПРЕДЕЛЕНО ТОГДА ПартииТоваровНаСкладах.ДокументДвижения ИНАЧЕ ПартииТоваровНаСкладах.Регистратор КОНЕЦ КАК Регистратор, СУММА(ВЫБОР КОГДА НЕ ПартииТоваровНаСкладах.ДокументОприходования ССЫЛКА Документ.ОприходованиеТоваров ТОГДА ВЫБОР КОГДА ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА ПартииТоваровНаСкладах.Стоимость * -1 ИНАЧЕ ПартииТоваровНаСкладах.Стоимость КОНЕЦ ИНАЧЕ ВЫБОР КОГДА НЕ ПартииТоваровНаСкладахУценка.ДокументОприходования.Уценка ТОГДА ВЫБОР КОГДА ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА ПартииТоваровНаСкладах.Стоимость * -1 ИНАЧЕ ПартииТоваровНаСкладах.Стоимость КОНЕЦ ИНАЧЕ ПартииТоваровНаСкладахУценка.Стоимость КОНЕЦ КОНЕЦ) КАК СтоимостьОборот ИЗ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладахУценка КАК ПартииТоваровНаСкладахУценка ПО ПартииТоваровНаСкладах.Номенклатура = ПартииТоваровНаСкладахУценка.Номенклатура И ПартииТоваровНаСкладах.Регистратор = ПартииТоваровНаСкладахУценка.ДокументДвижения И ПартииТоваровНаСкладахУценка.Период МЕЖДУ &ДатаНачала И &ДатаКонца И ПартииТоваровНаСкладахУценка.Номенклатура = &НоменклатураСсылка ГДЕ ПартииТоваровНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаКонца И ПартииТоваровНаСкладах.Номенклатура = &НоменклатураСсылка {ГДЕ ПартииТоваровНаСкладах.Номенклатура.* КАК Номенклатура, ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры} СГРУППИРОВАТЬ ПО ПартииТоваровНаСкладах.Номенклатура, ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры, ВЫБОР КОГДА ПартииТоваровНаСкладах.ДокументДвижения <> НЕОПРЕДЕЛЕНО ТОГДА ПартииТоваровНаСкладах.ДокументДвижения ИНАЧЕ ПартииТоваровНаСкладах.Регистратор  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |