| 
    
            
         
         | 
    
    
  | 
Как правильно переделать запрос? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Miss1C    
     03.12.12 
            ✎
    13:18 
 | 
         
        Выбираю записи с регистров накопления, если документ был проведен по "бу" и "ну", получаю 2 записи, как получить одну?
  
        ВЫБРАТЬ ТоварыНаСкладахОбороты.Регистратор, ТоварыНаСкладахОбороты.КоличествоПриход КАК КоличествоПриход, ТоварыНаСкладахОбороты.КоличествоРасход, ПартииТоваровНаСкладахОбороты.СтоимостьПриход, ПартииТоваровНаСкладахОбороты.СтоимостьРасход, ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.СтоимостьПриход КАК СтоимостьБУПриход, ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.СтоимостьРасход КАК СтоимостьБУРасход, ПартииТоваровНаСкладахНалоговыйУчетОбороты.СтоимостьПриход КАК СтоимостьНУПриход, ПартииТоваровНаСкладахНалоговыйУчетОбороты.СтоимостьРасход КАК СтоимостьНУРасход, ТоварыНаСкладахОбороты.Регистратор.ОтражатьВБухгалтерскомУчете КАК БухгалтерскийУчет, ТоварыНаСкладахОбороты.Регистратор.ОтражатьВНалоговомУчете КАК НалоговыйУчет, ТоварыНаСкладахОбороты.Регистратор.ОтражатьВУправленческомУчете КАК УправленческийУчет, ВЫБОР КОГДА ПартииТоваровНаСкладахОбороты.СтоимостьПриход <> 0 ТОГДА "1" КОГДА ПартииТоваровНаСкладахОбороты.СтоимостьРасход <> 0 ТОГДА "2" КОНЕЦ КАК Поле1, ПартииТоваровНаСкладахОбороты.Регистратор КАК Регистратор1 ИЗ РегистрНакопления.ТоварыНаСкладах.Обороты(&ДатаНач, &ДатаКон, Регистратор, Склад = &Склад) КАК ТоварыНаСкладахОбороты ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.Обороты(&ДатаНач, &ДатаКон, Регистратор, Склад = &Склад) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОбороты ПО ТоварыНаСкладахОбороты.Регистратор = ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладахНалоговыйУчет.Обороты(&ДатаНач, &ДатаКон, Регистратор, Склад = &Склад) КАК ПартииТоваровНаСкладахНалоговыйУчетОбороты ПО ТоварыНаСкладахОбороты.Регистратор = ПартииТоваровНаСкладахНалоговыйУчетОбороты.Регистратор ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Обороты(&ДатаНач, &ДатаКон, Регистратор, Склад = &Склад) КАК ПартииТоваровНаСкладахОбороты ПО ТоварыНаСкладахОбороты.Регистратор = ПартииТоваровНаСкладахОбороты.Регистратор УПОРЯДОЧИТЬ ПО Поле1  | 
|||
| 
    1
    
        Wobland    
     03.12.12 
            ✎
    13:19 
 | 
         
        правильно соединить по всем измерениям? запрос даже не смотрел     
         | 
|||
| 
    2
    
        Maxus43    
     03.12.12 
            ✎
    13:20 
 | 
         
        ВЫБОР
  
        КОГДА ПартииТоваровНаСкладахОбороты.СтоимостьПриход <> 0 ТОГДА "1" КОГДА ПартииТоваровНаСкладахОбороты.СтоимостьРасход <> 0 ТОГДА "2" КОНЕЦ КАК Поле1, ПартииТоваровНаСкладахОбороты.Регистратор КАК Регистратор1 убрать это и сгруппировать. в соединения не вникал, чото там нечисто  | 
|||
| 
    3
    
        Miss1C    
     03.12.12 
            ✎
    13:26 
 | 
         
        (2) Убрала, не помогло     
         | 
|||
| 
    4
    
        Wobland    
     03.12.12 
            ✎
    13:27 
 | 
         
        (3) что нечисто в соединениях, скажи нам, о  инженер знаний     
         | 
|||
| 
    5
    
        Miss1C    
     03.12.12 
            ✎
    13:29 
 | 
         
        (4) Да сделала уже, надо было группировать)))     
         | 
|||
| 
    6
    
        Wobland    
     03.12.12 
            ✎
    13:31 
 | 
         
        (5) поздравляю! обращайся, если что     
         | 
|||
| 
    7
    
        sapphire    
     03.12.12 
            ✎
    13:37 
 | 
         
        (0) Агрегировать результат.
  
        .. Ну и ТоварыНаСкладахОбороты.Регистратор.ОтражатьВБухгалтерскомУчете равносильно "SELECT * FROM *" (c)  | 
|||
| 
    8
    
        mikecool    
     03.12.12 
            ✎
    13:42 
 | 
         
        почему тебе муж не помогает?     
         | 
|||
| 
    9
    
        Wobland    
     03.12.12 
            ✎
    13:43 
 | 
         
        (8) PR ревнует     
         | 
|||
| 
    10
    
        mikecool    
     03.12.12 
            ✎
    13:43 
 | 
         
        (9) а он разве не муж еще? должен был, как честный мужчина...     
         | 
|||
| 
    11
    
        Wobland    
     03.12.12 
            ✎
    13:47 
 | 
         
        (10) ух ты, сколько я пропустил     
         | 
|||
| 
    12
    
        Miss1C    
     03.12.12 
            ✎
    13:50 
 | 
         
        ВЫБОР
  
        КОГДА ТоварыНаСкладахОбороты.Регистратор <> NULL ТОГДА ТоварыНаСкладахОбороты.Регистратор КОГДА ПартииТоваровНаСкладахОбороты.Регистратор <> NULL ТОГДА ПартииТоваровНаСкладахОбороты.Регистратор КОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор <> NULL ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор КОНЕЦ КАК Регистратор, Регистратор у меня идет по ВТ ПартииТоваровНаСкладахБухгалтерскийУчетОбороты, но он пустой, что не так сделала?  | 
|||
| 
    13
    
        Maxus43    
     03.12.12 
            ✎
    13:51 
 | 
         
        ТоварыНаСкладахОбороты.Регистратор ЕСТЬNULL
  
        <> NULL - всегда истина, ибо NULL <> NULL  | 
|||
| 
    14
    
        Stim    
     03.12.12 
            ✎
    13:51 
 | 
         
        (12)пустой <> null     
         | 
|||
| 
    15
    
        Miss1C    
     03.12.12 
            ✎
    13:54 
 | 
         
        Вот так?
  
        ВЫБОР КОГДА ТоварыНаСкладахОбороты.Регистратор ЕСТЬ NULL ТОГДА ТоварыНаСкладахОбороты.Регистратор КОГДА ПартииТоваровНаСкладахОбороты.Регистратор ЕСТЬ NULL ТОГДА ПартииТоваровНаСкладахОбороты.Регистратор КОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор ЕСТЬ NULL ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор КОНЕЦ КАК Регистратор,  | 
|||
| 
    16
    
        Maxus43    
     03.12.12 
            ✎
    13:56 
 | 
         
        (15) так хотя бы условие сработает. общая логика запроса мне не ясна     
         | 
|||
| 
    17
    
        Miss1C    
     03.12.12 
            ✎
    13:57 
 | 
         
        (13) Если <> NULL - всегда истина, тогда в этом условии в качестве регистратора будит что? 
  
        ВЫБОР КОГДА ТоварыНаСкладахОбороты.Регистратор <> NULL ТОГДА ТоварыНаСкладахОбороты.Регистратор ИНАЧЕ ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор  | 
|||
| 
    18
    
        Miss1C    
     03.12.12 
            ✎
    14:01 
 | 
         
        У меня получается <> NULL - всегда ложь;     
         | 
|||
| 
    19
    
        samozvanec    
     03.12.12 
            ✎
    14:04 
 | 
         
        (18) не слушай их, любое сравнение с нулом возвратит ложь     
         | 
|||
| 
    20
    
        Miss1C    
     03.12.12 
            ✎
    14:04 
 | 
         
        (13) Все равно регистратор = NULL     
         | 
|||
| 
    21
    
        Maxus43    
     03.12.12 
            ✎
    14:06 
 | 
         
        (19) ну или так, не помню) смысл в том что для проверки ЕСТЬNULL юзать надо     
         | 
|||
| 
    22
    
        Miss1C    
     03.12.12 
            ✎
    14:06 
 | 
         
        (19) Как тогда сравнить?     
         | 
|||
| 
    23
    
        Miss1C    
     03.12.12 
            ✎
    14:06 
 | 
         
        (21) Все равно не получается     
         | 
|||
| 
    24
    
        samozvanec    
     03.12.12 
            ✎
    14:07 
 | 
         
        (22) ЧотоТам ЕСТЬ NULL
  
        НЕ ЧотоТам ЕСТЬ NULL ЕСТЬNULL(ЧотоТам, ЧоПодставитьЕслиНул) = СЧемСравнить такие варианты есть  | 
|||
| 
    25
    
        Miss1C    
     03.12.12 
            ✎
    14:10 
 | 
         
        ВЫБОР
  
        КОГДА (НЕ ТоварыНаСкладахОбороты.Регистратор ЕСТЬ NULL ) ТОГДА ТоварыНаСкладахОбороты.Регистратор КОГДА (НЕ ПартииТоваровНаСкладахОбороты.Регистратор ЕСТЬ NULL ) ТОГДА ПартииТоваровНаСкладахОбороты.Регистратор КОГДА (НЕ ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор ЕСТЬ NULL ) ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор КОНЕЦ Если так, тогда с группировками получается 2 записи  | 
|||
| 
    26
    
        samozvanec    
     03.12.12 
            ✎
    14:16 
 | 
         
        (25) смотри, каким полем отличаются     
         | 
|||
| 
    27
    
        Miss1C    
     03.12.12 
            ✎
    14:18 
 | 
         
        (26) Регистратором, один с типом NULL один с типом ДокументСсылка     
         | 
|||
| 
    28
    
        samozvanec    
     03.12.12 
            ✎
    14:37 
 | 
         
        (27) регистратор нулл? где-то косяк     
         | 
|||
| 
    29
    
        samozvanec    
     03.12.12 
            ✎
    14:39 
 | 
         
        (27) у тебя всего 4 таблицы, какой-то не хватает при выборе регистратора     
         | 
|||
| 
    30
    
        samozvanec    
     03.12.12 
            ✎
    14:40 
 | 
         
        (29) ПартииТоваровНаСкладахНалоговыйУчетОбороты.Регистратор
  
        вот этой  | 
|||
| 
    31
    
        samozvanec    
     03.12.12 
            ✎
    14:40 
 | 
         
        (30) вот этой поля у тебя не хватает при выборе)     
         | 
|||
| 
    32
    
        Miss1C    
     03.12.12 
            ✎
    14:42 
 | 
         
        (31) Спасибо большое     
         | 
|||
| 
    33
    
        Miss1C    
     03.12.12 
            ✎
    14:43 
 | 
         
        (+32) Не внимательная     
         | 
|||
| 
    34
    
        sapphire    
     03.12.12 
            ✎
    14:44 
 | 
         
        (12) Да всё не так.     
         | 
|||
| 
    35
    
        samozvanec    
     03.12.12 
            ✎
    14:45 
 | 
         
        (34) самое главное - вовремя)     
         | 
|||
| 
    36
    
        sapphire    
     03.12.12 
            ✎
    14:45 
 | 
         
        (25) Огород из CASE-ов замедляет работу системы вцелом.
  
        Используй ОБЪЕДИНИТЬ ВСЕ (UNION ALL)  | 
|||
| 
    37
    
        sapphire    
     03.12.12 
            ✎
    14:53 
 | 
         
        Идея примерно такая:
  
        ВЫБРАТЬ ТоварыНаСкладахОбороты.Регистратор, SUM(ТоварыНаСкладахОбороты.КоличествоПриход) КАК КоличествоПриход, SUM(ТоварыНаСкладахОбороты.КоличествоРасход), 0 СтоимостьПриход,//ПартииТоваровНаСкладахОбороты.СтоимостьПриход, 0 СтоимостьРасход,//ПартииТоваровНаСкладахОбороты.СтоимостьРасход, 0 СтоимостьБУПриход,//ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.СтоимостьПриход КАК СтоимостьБУПриход, 0 СтоимостьБУРасход, //ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.СтоимостьРасход КАК СтоимостьБУРасход, 0 СтоимостьНУПриход, //ПартииТоваровНаСкладахНалоговыйУчетОбороты.СтоимостьПриход КАК СтоимостьНУПриход, 0 СтоимостьНУРасход, //ПартииТоваровНаСкладахНалоговыйУчетОбороты.СтоимостьРасход КАК СтоимостьНУРасход, //ТоварыНаСкладахОбороты.Регистратор.ОтражатьВБухгалтерскомУчете КАК БухгалтерскийУчет, //ТоварыНаСкладахОбороты.Регистратор.ОтражатьВНалоговомУчете КАК НалоговыйУчет, // ТоварыНаСкладахОбороты.Регистратор.ОтражатьВУправленческомУчете КАК УправленческийУчет, //ВЫБОР // КОГДА ПартииТоваровНаСкладахОбороты.СтоимостьПриход <> 0 // ТОГДА "1" // КОГДА ПартииТоваровНаСкладахОбороты.СтоимостьРасход <> 0 // ТОГДА "2" 0 КАК Поле1//КОНЕЦ КАК Поле1 ИЗ РегистрНакопления.ТоварыНаСкладах.Обороты(&ДатаНач, &ДатаКон, Регистратор, Склад = &Склад) КАК ТоварыНаСкладахОбороты GROUP BY ТоварыНаСкладахОбороты.Регистратор UNION ALL SELECT ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор, 0 КоличествоПриход, 0 КоличествоРасход, SUM(ПартииТоваровНаСкладахОбороты.СтоимостьПриход) СтоимостьПриход, SUM(ПартииТоваровНаСкладахОбороты.СтоимостьРасход) СтоимостьРасход, 0 СтоимостьБУПриход,//ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.СтоимостьПриход КАК СтоимостьБУПриход, 0 СтоимостьБУРасход, //ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.СтоимостьРасход КАК СтоимостьБУРасход, 0 СтоимостьНУПриход, //ПартииТоваровНаСкладахНалоговыйУчетОбороты.СтоимостьПриход КАК СтоимостьНУПриход, 0 СтоимостьНУРасход, //ПартииТоваровНаСкладахНалоговыйУчетОбороты.СтоимостьРасход КАК СтоимостьНУРасход, //ТоварыНаСкладахОбороты.Регистратор.ОтражатьВБухгалтерскомУчете КАК БухгалтерскийУчет, //ТоварыНаСкладахОбороты.Регистратор.ОтражатьВНалоговомУчете КАК НалоговыйУчет, // ТоварыНаСкладахОбороты.Регистратор.ОтражатьВУправленческомУчете КАК УправленческийУчет, //ВЫБОР // КОГДА ПартииТоваровНаСкладахОбороты.СтоимостьПриход <> 0 // ТОГДА "1" // КОГДА ПартииТоваровНаСкладахОбороты.СтоимостьРасход <> 0 // ТОГДА "2" 0 КАК Поле1//КОНЕЦ КАК Поле1 FROM РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.Обороты(&ДатаНач, &ДатаКон, Регистратор, Склад = &Склад) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОбороты GROUP BY ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор,  | 
|||
| 
    38
    
        sapphire    
     03.12.12 
            ✎
    14:54 
 | 
         
        (33) Что дальше с дополненной "простыней" а-ля (37) делать знаешь или сама догадаешься?     
         | 
|||
| 
    39
    
        Miss1C    
     03.12.12 
            ✎
    16:08 
 | 
         
        (36) Сильно замедляет?     
         | 
|||
| 
    40
    
        sapphire    
     03.12.12 
            ✎
    16:16 
 | 
         
        (39) Для каждой записи вычисляется     
         | 
|||
| 
    41
    
        sapphire    
     03.12.12 
            ✎
    16:17 
 | 
         
        (39) "Но не в форме тут дело, а в принципе" (с)
  
        Речь идет о подходе вообще.  | 
|||
| 
    42
    
        Bober    
     03.12.12 
            ✎
    18:48 
 | 
         
        (0)
  
        1. вот это все портит ТоварыНаСкладахОбороты.Регистратор.ОтражатьВБухгалтерскомУчете КАК БухгалтерскийУчет, ТоварыНаСкладахОбороты.Регистратор.ОтражатьВНалоговомУчете КАК НалоговыйУчет, ТоварыНаСкладахОбороты.Регистратор.ОтражатьВУправленческомУчете КАК УправленческийУчет  | 
|||
| 
    43
    
        Bober    
     03.12.12 
            ✎
    18:49 
 | 
         
        (0) ПОЛНОЕ СОЕДИНЕНИЕ заменить на объединить все     
         | 
|||
| 
    44
    
        Kashemir    
     03.12.12 
            ✎
    19:04 
 | 
         
        +(43) Поддерживаю. Соединению тут делать нечего.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |