Имя: Пароль:
1C
1С v8
Как правильно переделать запрос?
,
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) Поддерживаю. Соединению тут делать нечего.