ошибка команды where при запросе в БД sql из 1c

1. IgorZap 20.08.19 14:32 Сейчас в теме
Добрый день
направляю запрос (ниже) - запрос работает. Требуется поставить условие
Пытаюсь поставить условие - например вот так |where $csp_shift_number='2717' - ошибка

{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'where'.

В чем может быть ошибка?


Из внешней обработки 1с 83. направляю запрос в БД sql
//Инициализация переменных
ИмяСервераSQL = "***";
ПользовательSQL = "***";
ПарольSQL = "***";
БазаДанныхSQL = "***";

/////////////////////////////////////////
//Подключение к SQL-серверу
Попытка
Соединение = Новый COMОбъект("ADODB.Connection");
Команда = Новый COMОбъект("ADODB.Command");
Выборка = Новый COMОбъект("ADODB.RecordSet");
Соединение.ConnectionString =
"driver={SQL Server};" +
"server="+ИмяСервераSQL+";"+
"uid="+ПользовательSQL+";"+
"pwd="+ПарольSQL+";"+
"database="+БазаДанныхSQL+";";
Соединение.ConnectionTimeout = 30;
Соединение.CommandTimeout = 600;
//Открытие соединение
Соединение.Open();
Команда.ActiveConnection = Соединение;
Сообщить("Успешное подключение!");

Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ТаблицаSQL = "consolidated_shift_pos_report";
ТекЧисло = "109713";

ТекстИнструкции =
"SELECT top 10000
| trf_id, fsh_id, csp_shift_number
|FROM

// |where trf_id = '"+ТекЧисло+"'
// |where $csp_shift_number='2717'
|"+ТаблицаSQL;
//(CAST(Номенклатура._Folder AS int)=1)
// |where CAST(trf_id as int)='109713' "+ТаблицаSQL;
Попытка
Команда.CommandText = ТекстИнструкции;

// Param1 = Соединение.CreateParameter(ТекЧисло);
// Соединение.Parameters.Append(Param1);

Выборка = Команда.Execute();
Если Выборка.BOF = Ложь Тогда
Выборка.MoveFirst();
Пока Выборка.EOF = Ложь Цикл
Сообщить("[trf_id]="+Выборка.Fields("trf_id").Value
+", [fsh_id]="+Выборка.Fields("fsh_id").Value
+", [csp_shift_number]="+Выборка.Fields("csp_shift_number").Value);
Выборка.MoveNext();
КонецЦикла;
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Соединение.Close();
Сообщить("Соединение закрыто!");
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 20.08.19 14:41 Сейчас в теме
(1)
// |where trf_id = '"+ТекЧисло+"'
// |where $csp_shift_number='2717'


хмм. Если перевести в аналогии запроса 1С получиться:
Где что-то
Где что-то другое

Секция Где (where) должна быть одна. Ну и про символ $ уже сказали.
Используйте And
|where trf_id = '"+ТекЧисло+"'
|and csp_shift_number='2717'
4. spacecraft 20.08.19 14:48 Сейчас в теме
(1) и еще, секция where должна быть после указания таблицы.
ТекстИнструкции =
"SELECT top 10000
| trf_id, fsh_id, csp_shift_number
|FROM "+ТаблицаSQL+"
|where trf_id = '"+ТекЧисло+"'
|and csp_shift_number='2717' ";
2. nomad_irk 76 20.08.19 14:35 Сейчас в теме
Для чего ставите символ $ перед именем поля отбора?
5. IgorZap 20.08.19 14:57 Сейчас в теме
Спасибо огромное, эти две проблемы мне мешали. Работает!!!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот