Имя: Пароль:
1C
1C 7.7
v7: помогите с SQL запросом
0 6aToH
 
13.12.12
12:04
1с 7 ТиС и 1С++
Нужны строки Табличной части из двух документов (Реализация и Возврат)

Можно даже просто на SQL потом под 1С++ сам переделаю.

Получается 3 таблицы у нас:
_1SJOURN - журнал всех доокументов
DH1827 - Строки реализации
ВР3486 - Строки возврата

Нужно выбрать все строки документов Реализации и Возврата за период.
Как будет выглядеть в запросе FROM?
лучше сразу весь запрос.
1 mikecool
 
13.12.12
12:05
у тебя есть 1с++, если ты не знаешь, как ею взять таблицы и строки, то как собрался переделывать?
смотри в $Документ и в $ДокументСтроки
2 6aToH
 
13.12.12
12:05
там два запроса будет да?
3 Ёпрст
 
13.12.12
12:05
обычный селект и юнион алл
смотри в соседней ветке пример
4 6aToH
 
13.12.12
12:05
(1) это я понял
мне не понятно как связать эти таблицы
5 Ёпрст
 
13.12.12
12:06
(4) через union all
6 ADirks
 
13.12.12
12:10
|SELECT
   |    
   |FROM
   |    ЖурналДокументов жДок
   |    LEFT JOIN (
   |        SELECT IDDoc, ...  FROM докТЧРеализация
   |        UNION ALL
   |        SELECT IDDoc, ...  FROM докТЧВозврат
   |    ) докТЧ ON докТЧ.IDDoc = жДок.IDDoc
7 6aToH
 
13.12.12
12:14
пошел пробовать
8 МихаилМ
 
13.12.12
12:56
"все строки документов" = журнал не нужен
9 6aToH
 
13.12.12
12:57
(8) ссылка на документ нужна
10 МихаилМ
 
13.12.12
13:04
(9)
ссылка есть в таблицах тч
11 КонецЦикла
 
13.12.12
13:05
(9) В DT есть ссылка на документ, иначе как опеределить какому документу принадлежит табличная часть? :)
12 Ёпрст
 
13.12.12
13:06
(11)ему один хрен журнал нужен будет для типизации документа и отбора по периоду.
13 ADirks
 
13.12.12
13:13
запросы по документам, где был бы не нужен журнал - оч.большая редкость
14 Mikeware
 
13.12.12
13:14
(8) ему ж наверняка еще тип документа нужен будет для разбора, да и период для отбора. Возможно, еще и контрагент-договор...
15 Mikeware
 
13.12.12
13:15
(12) Ну, оттипизироваться-то можно и без журнала...
16 6aToH
 
13.12.12
13:29
не получается у меня всеравно

SELECT     Zhur.IDDOC AS Doc, Zhur.IDDOCDEF AS Doc_Vid
FROM         _1SJOURN Zhur LEFT OUTER JOIN
                         (SELECT     IDDOC, SP6908 AS TMC, SUM(SP3476) AS colvo, SUM(SP3479) AS SUMMA
                           FROM          DT3486
                           UNION ALL
                           SELECT     IDDOC, SP1824 AS TMC, SUM(SP1817) AS colvo, SUM(SP1820) AS SUMMA
                           FROM         DT1827) DOCTCH ON Zhur.IDDOC = DOCTCH.IDDOC
WHERE     (Zhur.DOCNO = 'AL00000063')
GROUP BY Zhur.IDDOC, Zhur.IDDOCDEF, DOCTCH.IDDOC

чего тут не так???
только не пинайте иди читай SQL как будет время первым делом начну читать.
17 Mikeware
 
13.12.12
13:30
(16)
"-мужик, ты пилу-то наточи!
--некогда мне точить, мне пилить надо!"
©
18 6aToH
 
13.12.12
13:31
(17) ага!!! )))))
19 Ёпрст
 
13.12.12
13:31
(16) ну во-первух, поля iddoc нет в _1sjourn в скуле
20 6aToH
 
13.12.12
13:31
(17) ты мне с этим помоги распилить твоей пилой а я свою наточу
21 1Сергей
 
13.12.12
13:32
(16)  у тебя выбираются ВСЕ документы
22 Ёпрст
 
13.12.12
13:32
а ёпт, ты же в шапке глядишь..
23 Ёпрст
 
13.12.12
13:32
точнее, в тЧ
24 Mikeware
 
13.12.12
13:32
(16) и нахрена тебе юзать внутренние имена полей, если у тебя есть уже метапарсер?
25 6aToH
 
13.12.12
13:33
(24) да потому что с прямым разобраться не могу, а с метопарсером еще хуже %)
26 МихаилМ
 
13.12.12
13:33
(19) есть поле IDDOC
в _1SJOURN
27 6aToH
 
13.12.12
13:33
тут бы без ошибок написать! (24)
28 Mikeware
 
13.12.12
13:33
(25) с ним легче.
29 Ёпрст
 
13.12.12
13:34
(26) ага
30 6aToH
 
13.12.12
13:34
(23) как это нет?
31 Serginio1
 
13.12.12
13:35
32 Serginio1
 
13.12.12
13:36
33 6aToH
 
13.12.12
13:37
34 ADirks
 
13.12.12
13:41
запихни запрос в QA - и тебе скажут чё там не так
а там всё не так :)

1. в подзапросе Sum() не надо
2. где эти колонки в основном селект-листе? Вот там-то как раз Sum() и д.б.
35 Mikeware
 
13.12.12
13:42
(33) открой для себя 1CQA/
36 6aToH
 
13.12.12
13:42
(34) сейчас попробую
37 ADirks
 
13.12.12
13:42
ну и
GROUP BY
  DOCTCH.IDDOC

это тоже круто, ага
38 6aToH
 
13.12.12
13:43
(37) это я понял
39 Ёпрст
 
13.12.12
13:43
|select ???.iddoc [??? $????????]
|   ,???.iddocdef ???_???
|   ,??.???????????? [???????????? $??????????.????????????]
|   ,sum(??.??????????) ??????????
|   ,sum(??.?????) ?????
|
|from _1sjourn ??? (nolock)
|left join
|   (
|    select
|         ???.iddoc iddoc,
|         $???.???????????? ????????????,
|         $???.?????????? ??????????,
|         $???.????? ?????
|    from $??????????????.?????????? ??? (nolock)
|    union all
|    select
|         ???.iddoc iddoc,
|         $???.????????????,
|         $???.??????????,
|         $???.?????  
|    from $??????????????.??????????? ??? (nolock)
|    ) ?? on ??.iddoc = ???.iddoc
|where ???.iddocdef in($????????????.??????????,$????????????.???????????)
|group by ???.iddoc ,???.iddocdef,??.????????????
40 Ёпрст
 
13.12.12
13:43
|select Жур.iddoc [Док $Документ]
|   ,Жур.iddocdef Док_вид
|   ,ТЧ.Номенклатура [Номенклатура $Справочник.Номенклатура]
|   ,sum(ТЧ.Количество) Количество
|   ,sum(ТЧ.Сумма) Сумма
|
|from _1sjourn Жур (nolock)
|left join
|   (
|    select
|         Док.iddoc iddoc,
|         $Док.Номенклатура Номенклатура,
|         $Док.Количество Количество,
|         $Док.Сумма Сумма
|    from $ДокументСтроки.Реализация Док (nolock)
|    union all
|    select
|         Док.iddoc iddoc,
|         $Док.Номенклатура,
|         $Док.Количество,
|         $Док.Сумма  
|    from $ДокументСтроки.Поступление Док (nolock)
|    ) ТЧ on ТЧ.iddoc = Жур.iddoc
|where Жур.iddocdef in($ВидДокумента.Реализация,$ВидДокумента.Поступление)
|group by Жур.iddoc ,Жур.iddocdef,ТЧ.Номенклатура
41 Ёпрст
 
13.12.12
13:44
так примерно
42 ADirks
 
13.12.12
13:44
и граждане, оформляйте запросы красиво, как (40) например - большая часть вопросов отвалится сразу
43 МихаилМ
 
13.12.12
13:48
(40)
тогда уж сворачивать по дублям в подзапросе.
44 Ёпрст
 
13.12.12
13:50
(43) а смысл ?
быстрее врят ли будет (план не видел, но думаю, так оно и есть)
45 МихаилМ
 
13.12.12
13:55
(0)
если таблица вся то минус одно поле группировки даст эфект
+
распараллеливание
union all


смысл - правильно писать а не кое-как.
т.е. быстродейтвие - не главное.
46 МихаилМ
 
13.12.12
13:55
(45) -> 44
47 trad
 
13.12.12
14:00
кстати в (40) ошибка - метапарсер не разберет имена полей разных таблиц с одинаковым алиасом.
но, с учетом (41), не в упрек Ёпрст. Так, наводка для ТС.
48 Ёпрст
 
13.12.12
14:01
ну не знаю, всегда стремился к последнему, т.е к скорости вполнения запроса
49 Ёпрст
 
13.12.12
14:01
(47) имеешь в виду в самом юнионе ?
т.е лучше Док2 писать ?
50 6aToH
 
13.12.12
14:02
(47) я уже задал разный
Ёпрст4 спасибо большое.
51 6aToH
 
13.12.12
14:02
(40) том примере многое стало понятней
52 6aToH
 
13.12.12
14:03
(49) если два разных документа и под одним "Док" выдавал ошибку
53 Ёпрст
 
13.12.12
14:03
Это и с ВиДДокумента я всегда путаю, когда там надо ВидДокумента36 использовать
:))

так что, тоже проверь
54 6aToH
 
13.12.12
14:04
|from $ДокументСтроки.Реализация Док (nolock)
|from $ДокументСтроки.Поступление Док (nolock)

переделал на

|from $ДокументСтроки.Реализация Док (nolock)
|from $ДокументСтроки.Поступление Док2 (nolock)
55 Ёпрст
 
13.12.12
14:05
(54) в селекте не забудь еще
56 6aToH
 
13.12.12
14:05
(55) конечно ))))
57 Ёпрст
 
13.12.12
14:05
58 ADirks
 
13.12.12
14:09
(43) Не стоит этого делать. Не разу не видел, чтобы от group by и даже where в подобном подзапросе была польза. А вот как оптимизатору башню сносит - видел.
Причина очень проста: ты думаешь, что умный, а у оптимизатора есть статистики.
59 6aToH
 
13.12.12
14:19
(53) а в чем разница??? ВидДокумента и ВидДокумента36
в mod_002.zip не слова про это!
разница между DBF и SQL что-ли???
по крайней мере в mod_zip там везде "ВидДокумента" используется в примерах.
60 Mikeware
 
13.12.12
14:21
(59) ВидДокумента - число. а ВидДокумента36 - это же число в 36-ричном коде