Имя: Пароль:
1C
1C 7.7
v7: Ошибка при выполнении прямого запроса SQL
0 burrya
 
22.05.13
11:25
ТекстЗапроса = "
       |SELECT
       |    Жур.IDDoc as [Док $Документ],
       |    Жур.IDDocDef as Док_вид,
       |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as Дата,
       |     $ДокНЗ.ДатаЗакрытия as ДатаЗакрытия,
       |     $ДокНЗ.ИтогоКОплате as ИтогоКОплате,
       |     $СпрКл.УчастникБонуснойПрограммы as УчастникБонуснойПрограммы,
       |     $СпрКл.БонуснаяКарта as БонуснаяКарта,
       |     РегВзаиморасчеты.Докум as ДокументВзаиморасчеты,
       |     РегВзаиморасчеты.СуммаНВПриход as СуммаОплаты
       |FROM
       |    _1SJourn Жур (nolock)
       |INNER JOIN
       |    $Документ.НарядЗаказ as ДокНЗ (nolock) ON ДокНЗ.IDDoc = Жур.IDDoc
       |INNER JOIN
       |    $Справочник.Клиенты as СпрКл (nolock) ON $ДокНЗ.Клиент = СпрКл.ID
       |INNER JOIN
       |    $РегистрОстаткиОбороты.Взаиморасчеты(:ДатаНачалаРаботыСистемы, :ДатаКон~,,,, Докум = Жур.IDDoc, (Докум), (СуммаНВ)) as РегВзаиморасчеты ON Жур.IDDoc = РегВзаиморасчеты.Докум
       |WHERE
       |    Жур.IDDocDef = $ВидДокумента.НарядЗаказ AND
       |    Жур.Closed & 1 = 1 AND
       |     Жур.IsMark = 0 AND
       |    $ДокНЗ.ДатаЗакрытия BETWEEN convert(datetime, :ДатаНач) AND convert(datetime, :ДатаКон) AND
       |    $СпрКл.УчастникБонуснойПрограммы = 1 AND
       |     $СпрКл.БонуснаяКарта <> $ПустойИД
       |
       |UNION
       |
       |SELECT
       |    Жур.IDDoc as [Док $Документ],
       |    Жур.IDDocDef as Док_вид,
       |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as Дата,
       |     $ДокРН.ДатаЗакрытия as ДатаЗакрытия,
       |     $СпрКл.УчастникБонуснойПрограммы as УчастникБонуснойПрограммы,
       |     $СпрКл.БонуснаяКарта as БонуснаяКарта,
       |     РегВзаиморасчеты.Докум as ДокументВзаиморасчеты,
       |     РегВзаиморасчеты.СуммаНВПриход as СуммаОплаты
       |FROM
       |    _1SJourn Жур (nolock)
       |INNER JOIN
       |    $Документ.РеализНакладная as ДокРН (nolock) ON ДокРН.IDDoc = Жур.IDDoc
       |INNER JOIN
       |    $Справочник.Клиенты as СпрКл (nolock) ON $ДокРН.Клиент = СпрКл.ID
       |INNER JOIN
       |    $РегистрОстаткиОбороты.Взаиморасчеты(:ДатаНачалаРаботыСистемы, :ДатаКон~,,,, Докум = Жур.IDDoc, (Докум), (СуммаНВ)) as РегВзаиморасчеты ON Жур.IDDoc = РегВзаиморасчеты.Докум
       |WHERE
       |    Жур.IDDocDef = $ВидДокумента.РеализНакладная AND
       |    Жур.Closed & 1 = 1 AND
       |     Жур.IsMark = 0 AND
       |    $ДокРН.ДатаЗакрытия BETWEEN convert(datetime, :ДатаНач) AND convert(datetime, :ДатаКон) AND
       |    $СпрКл.УчастникБонуснойПрограммы = 1 AND
       |     $СпрКл.БонуснаяКарта <> $ПустойИД";// ON Жур.IDDoc = РегВзаиморасчеты.Докум
   ODBCRecordset.УстановитьТекстовыйПараметр("ДатаНачалаРаботыСистемы", Константа.ДатаНачалаРаботыПрограммотехники);
   ODBCRecordset.УстановитьТекстовыйПараметр("ДатаНач", Константа.ДатаСтартаБонуснойСистемы);
   ODBCRecordset.УстановитьТекстовыйПараметр("ДатаКон", ТекущаяДата() - 14);
   ODBCRecordset.Отладка(1);
   ОсновнойЗапрос = ODBCRecordset.ВыполнитьИнструкцию(ТекстЗапроса);
   я=ОсновнойЗапрос.ВыбратьСтроку();


Выходит ошибка:
State 42000, native 107, message [Microsoft][ODBC SQL Server Driver][SQL Server]The column prefix 'Жур' does not match with a table name or alias name used in the query.
1 burrya
 
22.05.13
11:26
без объединения с $РегистрОстаткиОбороты.Взаиморасчеты запрос выполняется
2 Ненавижу 1С
 
гуру
22.05.13
11:26
наверное нельзя русские алиасы создавать
3 Ёпрст
 
22.05.13
11:27
во втором юнионе сделай другой алияс.. метапарсер не очень дружит, когда в юнионах одинаковые псевдонимы таблиц.
4 1Сергей
 
22.05.13
11:27
количество колонок не совпадает
5 cdiamond
 
22.05.13
11:28
Два Жура
6 Ненавижу 1С
 
гуру
22.05.13
11:28
а не...
разве можно в параметрах писать так?
Докум = Жур.IDDoc
с точки зрения вызова система не знает про Жур
7 viktor_vv
 
22.05.13
11:32
(6) Нельзя, да и смысла не вижу в таком соединении.
8 viktor_vv
 
22.05.13
11:35
А у него это еще и в параметрах в условии написано.
9 Ненавижу 1С
 
гуру
22.05.13
11:35
(8) кхм... а я в (6) не ИМЕННО ЭТО написал?
10 viktor_vv
 
22.05.13
11:54
(9) Ну я типа и подтвердил (6), там же с вопросом было, можно ли, я и подтвердил, что нельзя так писать :).
11 burrya
 
22.05.13
14:49
Спасибо.

Подскажите еще пожалуйста как в запросе получить строковый ИД вида документа или длинный ИД объекта. Дело в том что измерение по регистру Взаиморасчеты Докум - документ неопределенного вида, поэтому на сервере он лежит ввиде длинной строки. Из-за чего пока не могу сделать ДЖОИН - в журнале короткий ИД, в регистре длинный.
12 Ёпрст
 
22.05.13
14:52
$ВидДокумента
$ВидДокумента36
13 1Сергей
 
22.05.13
15:22
(11) в чём дело-то было?
14 ЧеловекДуши
 
22.05.13
15:23
(0) Вроде понятно написал, что нет колонки Жур в таблице :)
15 burrya
 
22.05.13
16:33
(12) Спасибо.
А, если заранее не известен тип документа, и, например, нужно получить дату документа неопределенного типа.
16 viktor_vv
 
22.05.13
16:38
(15) Содиняй с журналом документов по условию типа

ON Жур.IDDoc = Right(РегВзаиморасчеты.Докум,9)

но тут томроза могут быть.
17 Serginio1
 
22.05.13
16:39
LEFT OUTER JOIN _1SJOURN AS Журнал With (NOLOCK) ON substring(Рег.Документ,5,Len(Рег.Документ)) = Журнал.IDDOC
18 Serginio1
 
22.05.13
16:40
(16) Там вначале ВидДокумента идет
when left($ЗаказПоставщику.ДокОснование,4)= $ВидДокумента36.ЗаявкаПокупателя then
19 Serginio1
 
22.05.13
16:41
(18) Тьфу Right не заметил. Прошу прощения.
20 burrya
 
22.05.13
17:14
(16)(17)А если в журнале будут такие же ИДшники но для других видов документов?
(18) я заранее не знаю вид документа
21 Ёпрст
 
22.05.13
17:15
(20) iddoc уникален во всей базе, ибо 1 табличка 1sjourn
22 Serginio1
 
22.05.13
17:22
(20) Я к тому, что если нужно произвести некоторые действия от конкретного вида документа. Вид для неопределенного документа записывается в первых 4 символах.
23 burrya
 
22.05.13
17:22
(21)(22) я понял, спасибо