Имя: Пароль:
1C
1C 7.7
v7: 1c++ v3 прямые запросы win2003 Sql 7 1cv77-27
0 ssvertov
 
17.11.16
21:30
1.Запрос выполняется, но при использовании
RS.УложитьСписокОбъектов(спсКлиенты, "#Klienti","Контрагенты");

выдает сообщение (серым)
Internal error:
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'table'.

при этом на sql 2008 все работает без этого сообщения..

есть ли возможность исправить?
1 mehfk
 
17.11.16
21:32
Исходники 1с++ открыты - исправляй.
2 ssvertov
 
17.11.16
21:33
прикольно...
3 Franchiser
 
гуру
17.11.16
21:56
ВрТабл = "";
RS.УложитьСписокОбъектов(спсКлиенты, ВрТабл, "Контрагенты");
4 Franchiser
 
гуру
17.11.16
21:58
УложитьСписокОбъектов / PutObjectList
Синтаксис: УложитьСписокОбъектов(Объект, ИмяТабл, ВидСпр)
Параметры:
Объект - тип: Справочник/Документ/СписокЗначений (содержащий элементы типа Справочник, Документ). Объект, который необходимо уложить во временную таблицу.
ИмяТабл - тип: Строка. Возвращаемое значение. Имя временной таблицы, которое будет сгенерировано методом и возвращено через этот параметр.
ВидСпр - тип: Строка. Вид справочника для иерархического включения элементов.
5 ssvertov
 
17.11.16
22:15
я встречал этот синтаксис: - вызывает интерес - как он связывает условие по отбору из спсКлиенты?? в теле запроса (по типу данных "Контрагенты")

Запрос работает и получил "серым":
Internal error:
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'set'.
6 Franchiser
 
гуру
17.11.16
22:21
ну разбивать запрос - подставив полученное имя ВТ:
ВрТаблГрупп = "";
Запрос.УложитьСписокОбъектов(ВыбКонтр, ВрТаблГрупп, "Контрагенты");

ТекстЗапроса="
|SELECT
|    Док.IDDoc as [Док $Документ.Счет],
|    $Док.Контрагент as [Контрагент $Справочник.Контрагенты]
|FROM
|    $Документ.Счет as Док
|WHERE
|    $Док.Контрагент IN (SELECT Val FROM " + ВрТаблГрупп + ")
|";
7 Franchiser
 
гуру
17.11.16
22:25
для начала напиши RS.Отладка(1)
Может в чем ошибка
8 Franchiser
 
гуру
17.11.16
22:27
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'set'.
выглядит так будто параметр какой-то не установлен
9 ssvertov
 
17.11.16
23:22
Спасибо за помощь: это все относится к соседней ветке

            ВрТаблГрупп="";
            RS.УложитьСписокОбъектов(спсКлиенты, ВрТаблГрупп,"Контрагенты");
            
            ТекстЗапроса = "
            |SELECT
            |     Рег.Контрагент AS [Контрагент $Справочник.Контрагенты]
            |    , Рег.Период AS Период
            |    , Sum(Рег.ДолгНачальныйОстаток) AS НачТов
            |    , Sum(Рег.ДолгПриход) AS ПрихТов
            |    , Sum(Рег.ДолгРасход) AS РасхТов
            |    , Sum(Рег.ДолгКонечныйОстаток) AS КонТов
            |FROM $РегистрОстаткиОбороты.ВзаиморасчетыПокупателей(:ДатаНачала,:ДатаКонца~,ДЕНЬ,ДвиженияИГраницыПериода,,(Контрагент IN (SELECT val FROM " + ВрТаблГрупп + ")),Контрагент,Долг) AS Рег
            |GROUP BY Рег.Контрагент,Рег.Период
            |";    
            //RS.Отладка(1);
            RS.SetQueryTimeout(0);  
            
            RS.SetTextParam("ДатаНачала", Дата1);
            RS.SetTextParam("ДатаКонца" , Дата2);  
            
            табЗапрос = CreateObject("ТаблицаЗначений");
            табЗапрос = RS.ВыполнитьИнструкцию(ТекстЗапроса);
            RS.Закрыть();  

Получил:
Internal error:
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около ключевого слова "set".
табЗапрос = RS.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\BASES\ETS\ETSOPTTIP\EXTFORMS\SQL\1С-БЫСТРО.ERT(328)}: Meta name parser error: это метаимя разрешить невозможно "$РегистрОстаткиОбороты.ВзаиморасчетыПокупателей"State 42000, native 137, message [Microsoft][ODBC SQL Server Driver][SQL Server]Необходимо объявить скалярную переменную "@_CP_2".

1.:ДатаКонца~~ - ошибку дает
2.В консоли "1cqa" работает это

SELECT
  Рег.Контрагент AS [Контрагент $Справочник.Контрагенты]
, Рег.Период AS Период
, Sum(Рег.ДолгНачальныйОстаток) AS НачТов
, Sum(Рег.ДолгПриход) AS ПрихТов
, Sum(Рег.ДолгРасход) AS РасхТов
, Sum(Рег.ДолгКонечныйОстаток) AS КонТов
FROM $РегистрОстаткиОбороты.ВзаиморасчетыПокупателей(:ДатаНачала,:ДатаКонца~,ДЕНЬ,ДвиженияИГраницыПериода,,(Контрагент IN (SELECT val FROM #Klienti)),Контрагент,Долг) AS Рег
GROUP BY Рег.Контрагент,Рег.Период

где Klienti= тип данных "VLI"

такие дела
10 ssvertov
 
18.11.16
00:49
рабочий вариант для sql2008 (РежимRPC=0)

SELECT
Рег.Фирма AS [Фирма $Справочник.Фирмы]
, Рег.Период AS Период
, Рег.Контрагент AS [Контрагент $Справочник.Контрагенты]
, Sum(Рег.ДолгНачальныйОстаток) AS НачТов
, Sum(Рег.ДолгПриход) AS ПрихТов
, Sum(Рег.ДолгРасход) AS РасхТов
, Sum(Рег.ДолгКонечныйОстаток) AS КонТов
FROM $РегистрОстаткиОбороты.ВзаиморасчетыПокупателей(:ДатаНачала,:ДатаКонца~,ДЕНЬ,ДвиженияИГраницыПериода,,,(Фирма,Контрагент),Долг) AS Рег
INNER JOIN #Klienti ON #Klienti.Val = Контрагент
INNER JOIN #Firma ON #Firma.Val = Фирма
GROUP BY Рег.Фирма,Рег.Период,Рег.Контрагент
ORDER BY 1,2,3

для sql 7.0 (РежимRPC=0) не пашет (а надо(( )
Meta name parser error: это метаимя разрешить невозможно "$РегистрОстаткиОбороты.ВзаиморасчетыПокупателей"State 42000, native 2750, message [Microsoft][ODBC SQL Server Driver][SQL Server]Column or parameter #4: Specified column precision 38 is greater than the maximum precision of 28.
11 Туц
 
18.11.16
01:42
(10) Ну во-первых,
INNER JOIN #Klienti ON #Klienti.Val = Контрагент
INNER JOIN #Firma ON #Firma.Val = Фирма
надо так
INNER JOIN #Klienti ON #Klienti.Val = РЕГ.Контрагент
INNER JOIN #Firma ON #Firma.Val = РЕГ.Фирма