Имя: Пароль:
1C
1C 7.7
v7: вопрос по прямому запросу к MSSQL
0 ksa-nsk
 
09.08.11
22:43
Здравствуйте,
не могу сообразить, как в прямой запрос для выборки документов по контрагенту
   
   ТекстЗапроса = "
   |SELECT
   |   Жур.IDDoc as [Док $Документ],
   |   Жур.IDDocDef as Док_вид,
   |    COALESCE($АВР.Контрагент, $СФ.Контрагент) as [Контрагент $Справочник.Контрагенты]
   |FROM
   |   _1SJourn Жур
   |LEFT JOIN
   |    $Документ.ОказаниеУслуг as АВР ON АВР.IDDoc = Жур.IDDoc
   |LEFT JOIN
   |    $Документ.СчетФактура as СФ ON СФ.IDDoc = Жур.IDDoc
   |WHERE
   |   ($АВР.Контрагент = :ВыбКонтрагент OR $СФ.Контрагент = :ВыбКонтрагент) AND
   |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
   |   Жур.Closed & 1 = 1
   |";
   
   RS.УстановитьТекстовыйПараметр("НачДата", НачДата);
   RS.УстановитьТекстовыйПараметр("КонДата", КонДата);  
   RS.УстановитьТекстовыйПараметр("ВыбКонтрагент", ВыбКонтрагент);  

добавить еще выборку по выпискам, пробовал
   ТекстЗапроса = "
   |SELECT
   |   Жур.IDDoc as [Док $Документ],
   |   Жур.IDDocDef as Док_вид,
   |    COALESCE($АВР.Контрагент, $СФ.Контрагент, $Выписка.Субконто1) as [Контрагент $Справочник]
   |FROM
   |   _1SJourn Жур
   |LEFT JOIN
   |    $Документ.ОказаниеУслуг as АВР ON АВР.IDDoc = Жур.IDDoc
   |LEFT JOIN
   |    $Документ.СчетФактура as СФ ON СФ.IDDoc = Жур.IDDoc
   |LEFT JOIN
   |    $Документ.Выписка as Выписка ON Выписка.IDDoc = Жур.IDDoc
   |WHERE
   |   ($АВР.Контрагент = :ВыбКонтрагент OR $СФ.Контрагент = :ВыбКонтрагент OR $Выписка.Субконто1 = :ВыбКонтрагент) AND
   |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
   |   Жур.Closed & 1 = 1
   |";
   
   
   RS.УстановитьТекстовыйПараметр("НачДата", НачДата);
   RS.УстановитьТекстовыйПараметр("КонДата", КонДата);  
   RS.УстановитьТекстовыйПараметр("ВыбКонтрагент", ВыбКонтрагент);  

ругается на Субконто1 - он в табличной части и неопределенного вида...
1 Rie
 
09.08.11
22:44
(0) Попробуй выделить из него ту часть, которая ID.
2 Лефмихалыч
 
09.08.11
22:46
хреново вам без v8...
3 ksa-nsk
 
09.08.11
22:50
(1) гмм, надо как-то умудриться обратиться к Субконто1 в Выписке, ну и привязать к запросу, в этом и проблема(
4 toypaul
 
гуру
09.08.11
23:04
соединять с табличной частью а не с шапкой надо. и выделять из Субконто1 ИД. в toysql это проще все делается
5 Азат
 
10.08.11
00:31
(3) ты хелп читал? неопр. реквизит будет иметь вид 9 + 4, если не ошибаюсь
6 Rie
 
10.08.11
00:33
(5) Ошибаешься. Неопределенный тип - 2 байта на тип, после которых уже идёт 9+4.
7 Азат
 
10.08.11
00:35
(6) легко может быть, но автору это посмотреть без особых проблем... что ему мешало просто в селект втыкнуть это поле и на него внимательно поглядеть
8 Варвар
 
10.08.11
01:25
(4) там много чего проще делается. В toysql.
9 ksa-nsk
 
12.08.11
10:13
все, сделал, на всякий случай, может кому сгодится,
   ТекстЗапроса = "
   |SELECT  
   |    Жур.IDDoc as [Док $Документ],
   |   Жур.IDDocDef as Док_вид,  
   |   CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
   |    COALESCE($ДокАВР.Контрагент, $ДокСФ.Контрагент, СпрК.ID) as [Контрагент $Справочник.Контрагенты],
   |    COALESCE($ДокАВР.Договор, $ДокСФ.Договор, СпрД.ID) as [Договор $Справочник.Договоры],
   |   СпрОрг.ID  as [Организация $Справочник.НашиОрганизации],
   |    COALESCE(ДокАВР.SP319, ДокСФ.SP11007, ВыпискаШ.SP228) as Расход,
   |   ВыпискаШ.SP227 as Приход
   |FROM
   |   _1SJourn Жур
   |LEFT JOIN
   |    $Справочник.НашиОрганизации as СпрОрг ON СпрОрг.ID  = :ВыбНашаОрганизация
   |LEFT JOIN
   |    $Справочник.Контрагенты as СпрК ON СпрК.ID  = :ВыбКонтрагент
   |LEFT JOIN
   |    $Справочник.Договоры as СпрД ON СпрД.ID = :ВыбДоговор
   |LEFT JOIN
   |    scs.dbo.DT238 as ВыпискаТ ON ВыпискаТ.IDDoc = Жур.IDDoc
   |LEFT JOIN
   |    scs.dbo.DH238 as ВыпискаШ ON ВыпискаШ.IDDoc = Жур.IDDoc
   |LEFT JOIN
   |    $Документ.ОказаниеУслуг as ДокАВР ON ДокАВР.IDDoc = Жур.IDDoc
   |LEFT JOIN
   |    $Документ.СчетФактура as ДокСФ ON ДокСФ.IDDoc = Жур.IDDoc
   |WHERE
   |    (LEFT(RIGHT(ВыпискаТ.SP231,17),11) = :ВыбКонтрагент
   |      OR $ДокАВР.Контрагент = :ВыбКонтрагент
   |        OR $ДокСФ.Контрагент = :ВыбКонтрагент)
   |    AND(LEFT(RIGHT(ВыпискаТ.SP232,17),11) =:ВыбДоговор
   |      OR $ДокАВР.Договор = :ВыбДоговор
   |        OR $ДокСФ.Договор = :ВыбДоговор)
   |    AND(LEFT(RIGHT(ВыпискаШ.SP50322,17),11) = :ВыбНашаОрганизация
   |      OR $ДокАВР.НашаОрганизация = :ВыбНашаОрганизация
   |        OR $ДокСФ.НашаОрганизация = :ВыбНашаОрганизация)
   |   AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |   AND Жур.Closed & 1 = 1
   |";  

это в выборка в разрезе Контрагента, Договора, Организации (реквизит шапок) + выводит итого по документу
10 ksa-nsk
 
12.08.11
10:15
Обрабатываются документы "ОказаниеУслуг", "СчетФактура", "Выписка"

тема закрыта)))
11 Ёпрст
 
12.08.11
11:12
(9) дык неверный же код..
(10) рано радуешься.

ЗЫ: и чего за манера не пользоваться метапарсером и писать SP и т.д..
12 Ёпрст
 
12.08.11
11:14
+11 я б даже больше сказал, не то что не верный, а бредовый..
13 ksa-nsk
 
12.08.11
11:34
(11),(12) для кого некрасивый и неверный, а у кого и рабочий, где ты раньше был с умными советами (хотя бы как к табличной части документа обратиться), когда вопрос был актуален.
14 Дык ё
 
12.08.11
12:44
(12) бредовый, тормозной - это да. а в каком месте он не верный? чета не соображу :-?
15 Ёпрст
 
12.08.11
16:22
(14)
LEFT JOIN
   |    $Справочник.НашиОрганизации as СпрОрг ON СпрОрг.ID  = :ВыбНашаОрганизация

И т.д по всем левым соединениям..
Ну и нафиг оно надо с таким условием в ON ?
:)))
16 Дык ё
 
12.08.11
16:46
(15) ну выбрал он N раз одну и ту же строку из справочника, ну вывел в селекте ид строки, который и так ему был известен.. я ж не про бредовость, а про неверность спрашиваю :-)
17 Ёпрст
 
12.08.11
16:56
(16) ну ладно, уговорил
18 Ёпрст
 
12.08.11
16:56
:)
Программист всегда исправляет последнюю ошибку.