Имя: Пароль:
1C
1С v8
Помогите разобрать запрос SQL который выгружает документы в 1С
0 Aneya
 
11.12.13
14:15
strsql = "SELECT T_Headers.ID, T_Headers.TDate, T_Headers.DocNumber, T_Headers.Comments, T_Objects.ID AS otkuda_id, " & _
"T_Objects.ObjDesc AS otkuda, T_Objects_1.ID AS kuda_id, T_Objects_1.ObjDesc AS kuda, " & _
"Sum([Quantity]) AS кол, Sum([Quantity]*[CostNational]) AS sebest, " & _
"Sum([Quantity]*[RetailPrice]) AS roznica, Sum([Quantity]*([CostNational]-[VATValue])) AS безНДС, " & _
"T_Objects.ID_ClientTyp AS otkuda_type, T_Objects_1.ID_ClientTyp AS kuda_type " & _
"FROM ((T_Headers INNER JOIN T_Objects ON T_Headers.ID_Objects = T_Objects.ID) " & _
"INNER JOIN T_Transactions ON T_Headers.ID = T_Transactions.ID_Headers) " & _
"INNER JOIN T_Objects AS T_Objects_1 ON T_Headers.ID_ObjectsContr = T_Objects_1.ID " & _
"WHERE T_Headers.TDate >= '" & godmesden(MyDataN) & "' " & _
"And T_Headers.TDate <= '" & godmesden(MyDataK) & "' " & _
"And T_Headers.Status = 1 " & _
"And (T_Headers.ID_Moves = 5) And T_Objects.ID_ObjTyp = 1 And T_Objects_1.ID_ObjTyp = 1 " & _
"And (T_Headers.SpecNo <> 1 Or T_Headers.SpecNo Is Null) " & _
"GROUP BY T_Headers.ID, T_Headers.TDate, T_Headers.Comments, T_Objects.ID, T_Headers.DocNumber, T_Objects.ObjDesc, " & _
"T_Objects_1.ID, T_Objects_1.ObjDesc, " & _
"T_Objects.ID_ClientTyp, T_Objects_1.ID_ClientTyp " & _
"ORDER BY T_Headers.TDate, T_Objects.ID, T_Headers.DocNumber"

strsql2 = "SELECT T_Headers.ID, T_Headers.TDate, T_Headers.DocNumber, T_Headers.Comments, T_Objects.ID AS Kuda_id, " & _
"T_Objects.ObjDesc AS Kuda, T_Objects_1.ID AS Otkuda_id, T_Objects_1.ObjDesc AS Otkuda, " & _
"Sum([Quantity]) AS кол, Sum([Quantity]*[CostNational]) AS sebest, " & _
"Sum([Quantity]*[RetailPrice]) AS roznica, Sum([Quantity]*([CostNational]-[VATValue])) AS безНДС, " & _
"T_Objects.ID_ClientTyp AS kuda_type, T_Objects_1.ID_ClientTyp AS otkuda_type " & _
"FROM ((T_Headers INNER JOIN T_Objects ON T_Headers.ID_Objects = T_Objects.ID) " & _
"INNER JOIN T_Transactions ON T_Headers.ID = T_Transactions.ID_Headers) " & _
"INNER JOIN T_Objects AS T_Objects_1 ON T_Headers.ID_ObjectsContr = T_Objects_1.ID " & _
"WHERE T_Headers.TDate >= '" & godmesden(MyDataN) & "' " & _
"And T_Headers.TDate <= '" & godmesden(MyDataK) & "' " & _
"And T_Headers.Status = 1 " & _
"And (T_Headers.ID_Moves = 2) And T_Objects.ID_ObjTyp = 1 And T_Objects_1.ID_ObjTyp = 1 " & _
"And (T_Headers.SpecNo <> 1 Or T_Headers.SpecNo Is Null) " & _
"GROUP BY T_Headers.ID, T_Headers.TDate, T_Headers.Comments, T_Objects.ID, T_Headers.DocNumber, T_Objects.ObjDesc, " & _
"T_Objects_1.ID, T_Objects_1.ObjDesc, " & _
"T_Objects.ID_ClientTyp, T_Objects_1.ID_ClientTyp " & _
"ORDER BY T_Headers.TDate, T_Objects_1.ID, T_Headers.DocNumber"

Не могу понять почему во FROME не указывается таблица, и что за операция "& _"?
1 1Сергей
 
11.12.13
14:16
"& _" - перенос строки
2 Sammo
 
11.12.13
14:20
Что значит не указывается таблица. Вполне себе указывается.
T_Headers + внытренние соединения
3 1Сергей
 
11.12.13
14:24
а вообще, рекомендую Notepad++ с плагином Poor Mans TSQL Formatter.

Вот твой запрос, отформатированный этой штукой:


SELECT T_Headers.ID
    ,T_Headers.TDate
    ,T_Headers.DocNumber
    ,T_Headers.Comments
    ,T_Objects.ID AS Kuda_id
    ,T_Objects.ObjDesc AS Kuda
    ,T_Objects_1.ID AS Otkuda_id
    ,T_Objects_1.ObjDesc AS Otkuda
    ,Sum([Quantity]) AS кол
    ,Sum([Quantity] * [CostNational]) AS sebest
    ,Sum([Quantity] * [RetailPrice]) AS roznica
    ,Sum([Quantity] * ([CostNational] - [VATValue])) AS безНДС
    ,T_Objects.ID_ClientTyp AS kuda_type
    ,T_Objects_1.ID_ClientTyp AS otkuda_type
FROM (
    (
        T_Headers INNER JOIN T_Objects ON T_Headers.ID_Objects = T_Objects.ID
        ) INNER JOIN T_Transactions ON T_Headers.ID = T_Transactions.ID_Headers
    )
INNER JOIN T_Objects AS T_Objects_1 ON T_Headers.ID_ObjectsContr = T_Objects_1.ID
WHERE T_Headers.TDate >= '" & godmesden(MyDataN) & "'
    AND T_Headers.TDate <= '" & godmesden(MyDataK) & "'
    AND T_Headers.STATUS = 1
    AND (T_Headers.ID_Moves = 2)
    AND T_Objects.ID_ObjTyp = 1
    AND T_Objects_1.ID_ObjTyp = 1
    AND (
        T_Headers.SpecNo <> 1
        OR T_Headers.SpecNo IS NULL
        )
GROUP BY T_Headers.ID
    ,T_Headers.TDate
    ,T_Headers.Comments
    ,T_Objects.ID
    ,T_Headers.DocNumber
    ,T_Objects.ObjDesc
    ,T_Objects_1.ID
    ,T_Objects_1.ObjDesc
    ,T_Objects.ID_ClientTyp
    ,T_Objects_1.ID_ClientTyp
ORDER BY T_Headers.TDate
    ,T_Objects_1.ID
    ,T_Headers.DocNumber
4 Aneya
 
11.12.13
14:27
Sammo , но вроде должно быть так
FROM T_Headers (INNER JOIN T_Objects ON T_Headers.ID_Objects = T_Objects.ID)  а не FROM ((T_Headers INNER JOIN T_Objects ON T_Headers.ID_Objects = T_Objects.ID))
5 Aneya
 
11.12.13
14:31
Sammo, просто запрос не мой, сказали его разобрать, интересно, что указывается всего 1 таблица, а в выборке учавствует несколько
6 Aneya
 
11.12.13
14:33
Сергей, спасибо, но что -то запрос не хочет работать в MSSQL
7 Aneya
 
11.12.13
14:35
(3) Сергей, спасибо, но что -то запрос не хочет работать в MSSQL
8 Aneya
 
11.12.13
14:36
(2) Sammo , но вроде должно быть так
FROM T_Headers (INNER JOIN T_Objects ON T_Headers.ID_Objects = T_Objects.ID)  а не FROM ((T_Headers INNER JOIN T_Objects ON T_Headers.ID_Objects = T_Objects.ID)),
9 Aneya
 
11.12.13
14:36
(2) просто запрос не мой, сказали его разобрать, интересно, что указывается всего 1 таблица, а в выборке учавствует несколько
10 Ёпрст
 
11.12.13
14:47
(8) скобки там явно не в том месте или пропущен селект
11 Aneya
 
11.12.13
14:49
(10) а если вместо изначального запроса
вместо inner join применю where?
Например
SELECT T_Headers.ID
    ,T_Headers.TDate
    ,T_Headers.DocNumber
    ,T_Headers.Comments
    ,T_Objects.ID AS Kuda_id
    ,T_Objects.ObjDesc AS KudaName
    ,T_Objects_1.ID AS Otkuda_id
    ,T_Objects_1.ObjDesc AS OtkudaName
    ,Sum([Quantity]) AS кол
    ,Sum([Quantity] * [CostNational]) AS sebest
    ,Sum([Quantity] * [RetailPrice]) AS roznica
    ,Sum([Quantity] * ([CostNational] - [VATValue])) AS безНДС
    ,T_Objects.ID_ClientTyp AS kuda_type
    ,T_Objects_1.ID_ClientTyp AS otkuda_type

FROM [TradeX].[dbo].[T_Headers],[TradeX].[dbo].[T_Objects],[TradeX].[dbo].[T_Objects] as T_Objects_1, [TradeX].[dbo].[T_Transactions]

WHERE T_Headers.TDate >= '31.01.2010'
    AND T_Headers.TDate <= '31.12.2010'
    AND T_Headers.STATUS = 1
    AND (T_Headers.ID_Moves = 2)
    AND T_Objects.ID_ObjTyp = 1
    AND T_Objects_1.ID_ObjTyp = 1
    AND (
        T_Headers.SpecNo <> 1
        OR T_Headers.SpecNo IS NULL
        )
    and T_Headers.ID_Objects = T_Objects.ID
    and T_Headers.ID = T_Transactions.ID_Headers
    and T_Headers.ID_ObjectsContr = T_Objects_1.ID  
GROUP BY T_Headers.ID
    ,T_Headers.TDate
    ,T_Headers.Comments
    ,T_Objects.ID
    ,T_Headers.DocNumber
    ,T_Objects.ObjDesc
    ,T_Objects_1.ID
    ,T_Objects_1.ObjDesc
    ,T_Objects.ID_ClientTyp
    ,T_Objects_1.ID_ClientTyp
ORDER BY T_Headers.TDate
    ,T_Objects_1.ID
    ,T_Headers.DocNumber
12 1Сергей
 
11.12.13
14:52
(7) в каком смысле "не хочет"?
13 Aneya
 
11.12.13
14:55
(12) аа нет, все ок, спасибо вам большое)))
14 Aneya
 
11.12.13
15:01
Всем спасибо, разобралась с помощью 1Сергея
15 МихаилМ
 
11.12.13
16:04
группировка по комментарию - моветон