Синтаксическая ошибка ВЫБРАТЬ при выполнении запроса
Синтаксическая ошибка «ВЫБРАТЬ»<?> ВЫБРАТЬ возникает в 1С, когда в тексте запроса идут его блоки в подряд без разделения между собой.

Рис.1 Скриншот ошибки «Выбрать»
Например, в случаях:
- объединения запросов, когда подзапросы должны отделяться служебными словами «ОБЪЕДИНИТЬ» или «ОБЪЕДИНИТЬ ВСЕ«
- два запроса идущие в подряд для последующей выборки методом ВыбратьПакет(): требуется их разделение » ; «
- последующая выборка из временной таблицы: также необходимо разделение » ; «
- неверный синтаксис во вложенном запросе в конструкции ГДЕ Значение В (Выбрать ссылка из Справочники.ПримерСправочника): доступно только сравнение » В ()«, а не «=«, «>» и прочее
Замечу, что такая ошибка возникает при ручной правке текста, поскольку при формировании конструктором запроса, он вставляет разделители самостоятельно:

Цифры в начале ошибки (на рисунке — 386,1) — это номер строки в запросе. При большом тексте такая информация поможет быстрее локализовать ошибку.
Поведение системы
Выполнение запроса прерывается, но система продолжает работать
Реклама — искусство превращения полуправды в полную ложь.
20.09.13 — 12:39
Добрый день!
Помогите разобраться где ошибка во вложенном запросе, точнее я не очень понимаю как правильно его написать. Вот кусок запроса, и он выдает ошибку «Синтаксическая ошибка «ВЫБРАТЬ»
// Цена
ВЫБОР
КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена
Тогда ВЫБОР
КОГДА ТЧ.ЦенаВнутренная = 1
ТОГДА
(ВЫБРАТЬ
РаботникиОрганизацийСрезПоследних.Стоимость1часа
ИЗ
РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец, ФизЛицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
РаботникиОрганизацийСрезПоследних.Организация = &Организация
АВТОУПОРЯДОЧИВАНИЕ) КАК ВложенныйЗапросРаботникиОрганизаций
ИНАЧЕ ТЧ.ЦенаВнутренная
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК ЦенаРабочаяСмена,
1 — 20.09.13 — 12:40
Не прокатит так.
2 — 20.09.13 — 12:41
+(0) ошибку выдает на 6 строку (как здесь)
3 — 20.09.13 — 12:43
(1) ага, не прокатывает, наверно нужно чтобы было предложение с «ИЗ»
4 — 20.09.13 — 12:45
(3) Нужно для начала читать документацию. И осознавать, что запросы 1с — это не запросы SQL
5 — 20.09.13 — 12:46
(0)
а скобку закрыть не пробовали?
6 — 20.09.13 — 12:47
(0) в снеговике это не реализовано.. пока
7 — 20.09.13 — 12:47
(4) хотя, конечно, в выражении ВЫБОР так нельзя, видимо
8 — 20.09.13 — 12:47
(3) смысл этого выбора в том заключается, что сначала идет условие на то что является ли эта номенклатура «Рабочей сменой», если да то опять условие: если Цена(стоимость 1 часа) этой рабочей смены = 1 (такое у нас бывает на внутренние работы), то нужно эту стоимость брать из вложенного подзапроса из период. РС РаботникиОрганизаций, иначе если не равно 1, то из ТЧ — табличной части документа
9 — 20.09.13 — 12:48
нет там реализации подзапроса в кейсе
10 — 20.09.13 — 12:49
(5) в какой строке?
11 — 20.09.13 — 12:52
В качестве цены у тебя получается результат запроса.
Выбери ВложенныйЗапросРаботникиОрганизаций.Стоимость1часа
12 — 20.09.13 — 12:52
(4) а какую документацию почитать?
13 — 20.09.13 — 12:52
(11) да
14 — 20.09.13 — 12:55
(11) а как это написать ?
15 — 20.09.13 — 13:00
Написала так:
// Цена
ВЫБОР
КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена
Тогда ВЫБОР
КОГДА ТЧ.ЦенаВнутренная = 1
ТОГДА
ВЫБРАТЬ ВложенныйЗапросРаботникиОрганизаций.Стоимость1часа ИЗ
(ВЫБРАТЬ
РаботникиОрганизацийСрезПоследних.Стоимость1часа
ИЗ
РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец, ФизЛицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
РаботникиОрганизацийСрезПоследних.Организация = &Организация
АВТОУПОРЯДОЧИВАНИЕ) КАК ВложенныйЗапросРаботникиОрганизаций
ИНАЧЕ ТЧ.ЦенаВнутренная
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК ЦенаРабочаяСмена,
16 — 20.09.13 — 13:01
(15) + но все равно ошибка
17 — 20.09.13 — 13:04
(15)Было же сказано, что не работает так. Можно соединить.
18 — 20.09.13 — 13:06
(17) а как тогда сделать по-другому?
19 — 20.09.13 — 13:07
(15) приведи полный текст запроса
20 — 20.09.13 — 13:08
(19)
ВЫБРАТЬ
ДатаСоздания,
Клиент,
Сумма(СуммаРабочаяСмена) КАК СуммаРабСмена,
Сумма(КоличествоРабочаяСмена) КАК КоличествоРабочаяСмена,
Сумма(ЦенаРабочаяСмена) КАК ЦенаРабочаяСмена,
Сумма(СуммаДопРаботы) КАК СуммаДопРаботы,
Сумма(СуммаПитание) КАК СуммаПитание,
Сумма(СуммаТранспорт) КАК СуммаТранспорт
ИЗ
(ВЫБРАТЬ
Ссылка.ДатаСоздания,
Ссылка.Клиент,
// Количество
ВЫБОР
КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена
Тогда ТЧ.Количество
ИНАЧЕ 0
КОНЕЦ КАК КоличествоРабочаяСмена,
ВЫБОР
КОГДА ТЧ.Работы.Наименование НЕ ПОДОБНО &РабСмена
Тогда ТЧ.Количество
ИНАЧЕ 0
Конец КАК КоличествоДопРаботы,
0 КАК КоличествоПитание,
0 КАК КоличествоТранспорт,
// Цена
ВЫБОР
КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена
Тогда ВЫБОР
КОГДА ТЧ.ЦенаВнутренная = 1
ТОГДА
ВЫБРАТЬ ВложенныйЗапросРаботникиОрганизаций.Стоимость1часа ИЗ
(ВЫБРАТЬ
РаботникиОрганизацийСрезПоследних.Стоимость1часа
ИЗ
РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец, ФизЛицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
РаботникиОрганизацийСрезПоследних.Организация = &Организация
АВТОУПОРЯДОЧИВАНИЕ) КАК ВложенныйЗапросРаботникиОрганизаций
ИНАЧЕ ТЧ.ЦенаВнутренная
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК ЦенаРабочаяСмена,
ВЫБОР
КОГДА ТЧ.Работы.Наименование НЕ ПОДОБНО &РабСмена
Тогда ТЧ.ЦенаВнутренная
ИНАЧЕ 0
Конец КАК ЦенаДопРаботы,
0 КАК ЦенаПитание,
0 КАК ЦенаТранспорт,
// Сумма
ВЫБОР
КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена
Тогда ТЧ.Количество*ТЧ.ЦенаВнутренная
ИНАЧЕ 0
КОНЕЦ КАК СуммаРабочаяСмена,
ВЫБОР
КОГДА ТЧ.Работы.Наименование НЕ ПОДОБНО &РабСмена
Тогда ТЧ.Количество*ТЧ.ЦенаВнутренная
ИНАЧЕ 0
Конец КАК СуммаДопРаботы,
0 КАК СуммаПитание,
0 КАК СуммаТранспорт
ИЗ
Документ.ЗаявкаНаряд.Работы КАК ТЧ
ГДЕ
Ссылка.Работы.Исполнитель = &Исполнитель
И
Ссылка.ДатаСоздания Между &Начало и &Конец
ОБЪЕДИНИТЬ
ВЫБРАТЬ
Ссылка.ДатаСоздания,
Ссылка.Клиент,
// Количество
0 КАК КоличествоРабочаяСмена,
0 КАК КоличествоДопРаботы,
(ВЫБОР
Когда ТЧ.Работы.Наименование ПОДОБНО &Питание
Тогда
ТЧ.Количество
КОНЕЦ) КАК КоличествоПитание,
(ВЫБОР
Когда ТЧ.Работы.Наименование ПОДОБНО &Транспорт
Тогда
ТЧ.Количество
Конец) КАК КоличествоТранспорт,
// Цена
0 КАК ЦенаРабочаяСмена,
0 КАК ЦенаДопРаботы,
(ВЫБОР
Когда ТЧ.Работы.Наименование ПОДОБНО &Питание
Тогда
ТЧ.ЦенаВнутренная
КОНЕЦ) КАК ЦенаПитание,
(ВЫБОР
Когда ТЧ.Работы.Наименование ПОДОБНО &Транспорт
Тогда
ТЧ.ЦенаВнутренная
Конец) КАК ЦенаТранспорт,
// Сумма
0 КАК СуммаРабочаяСмена,
0 КАК СуммаДопРаботы,
(ВЫБОР
Когда ТЧ.Работы.Наименование ПОДОБНО &Питание
Тогда
ТЧ.Количество*ТЧ.ЦенаВнутренная
КОНЕЦ) КАК СуммаПитание,
(ВЫБОР
Когда ТЧ.Работы.Наименование ПОДОБНО &Транспорт
Тогда
ТЧ.Количество*ТЧ.ЦенаВнутренная
Конец) КАК СуммаТранспорт
ИЗ
Документ.ЗаявкаНаряд.НакладныеРасходы КАК ТЧ
ГДЕ
Ссылка.Работы.Исполнитель = &Исполнитель
И
Ссылка.ДатаСоздания Между &Начало и &Конец ) КАК ВложенныйЗапрос
СГРУППИРОВАТЬ ПО ДатаСоздания, Клиент
УПОРЯДОЧИТЬ ПО
ДатаСоздания, Клиент
ИТОГИ ПО ОБЩИЕ
21 — 20.09.13 — 13:08
(18) см. (9).
22 — 20.09.13 — 13:10
(21) уже посмотрела, тогда как иначе сделать?
23 — 20.09.13 — 13:14
Всё-таки лучше через соединение.
24 — 20.09.13 — 13:15
(22) + понятно что цену можно оставить такой какая есть и уже потом ее вытащить, после выполнения запроса, но хочется чтоб в запросе все считалось
25 — 20.09.13 — 13:15
(23) а что с чем соединять?
26 — 20.09.13 — 13:17
ФизЛицо, которое во вложенном запросе есть в документе?
27 — 20.09.13 — 13:19
(26) оно есть в табличной части, из которой берутся цифры
28 — 20.09.13 — 13:20
Брутально
29 — 20.09.13 — 13:21
Или соединить документ с регистром по реквизиту Организация (думаю в документе он должен быть). И оставить то же условие по ФизЛицу.
30 — 20.09.13 — 13:21
(26) в документе есть реквизит «Исполнитель», но бывают случаи когда в ТЧ помимо исполнителя еще другой сотрудник выбран, поэтому физлицо берется из ТЧ документа
31 — 20.09.13 — 13:22
(29) проблема в том что в документе нету реквизита Организация(
32 — 20.09.13 — 13:25
(30) Ну так соединяй по ФизЛицу из ТЧ.
33 — 20.09.13 — 13:26
(31) у нас несколько организаций, но только в одной возможны такие случаи когда стоимость 1 часа = 1, и именно по ней идет отбор в подзапросе
34 — 20.09.13 — 13:32
Всё, что в ВЫБОР оставляешь.
Вложенный запрос убираешь. Вместо него — РаботникиОрганизацийСрезПоследних.Стоимость1часа
ну и в конце
ИЗ
Документ.ЗаявкаНаряд.Работы КАК ТЧ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец) КАК РаботникиОрганизацийСрезПоследних
ПО ТЧ.Сотрудник = РаботникиОрганизацийСрезПоследних.ФизЛицо
ГДЕ
…
35 — 20.09.13 — 13:52
(34) спасибо большое! единственное что получилось так, что когда в регистре РаботникиОрганизаций 1 запись по сотруднику, то запрос правильно выдает, а когда записей в регистре несколько по этому сотрдунику но от разных дат, то Цена 1 часа суммируется
36 — 20.09.13 — 13:54
(35) + как сделать чтобы выбиралась только последняя запись?
37 — 20.09.13 — 14:00
(35) СрезПоследних выдаёт несколько записей? Тогда смотри какие ещё измерения у регистра.
38 — 20.09.13 — 14:02
(37) у регистра 3 измерения: ФизЛицо, Организация, Подразделение
39 — 20.09.13 — 14:10
(38)Это клево. Какой смысл?
Тогда так
Выбрать РабОрг.Стоимость1часа из (Выбрать физлицо, максимум(период) как Период из РегистрСведений.РаботникиОрганизаций как РаботникиОрганизаций где Организация=&Организация) как ВложеныйЗапрос
Левое соединение РегистрСведений.РаботникиОрганизаций как РабОрг
по РабОрг.Физлицо = ВложеныйЗапрос.Физлицо
и РабОрг.Период = ВложеныйЗапрос.Период
40 — 20.09.13 — 14:18
(39) этот запрос написать вместо этого ?
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец) КАК РаботникиОрганизацийСрезПоследних
ПО ТЧ.Исполнитель = РаботникиОрганизацийСрезПоследних.ФизЛицо
41 — 20.09.13 — 14:23
(40)Вместо РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец)
42 — 20.09.13 — 14:26
(41) ошибку выдает:
Поле не входит в группу «Физлицо»
Выбрать Физлицо
43 — 20.09.13 — 14:26
Вот так вернее для ваших целей.
Выбрать РабОрг.Стоимость1часа, РабОрг.Физлицо
из (Выбрать физлицо, максимум(период) как Период из РегистрСведений.РаботникиОрганизаций как РаботникиОрганизаций где Организация=&Организация и Период <=&Конец
Сгруппировать по физлицо
) как ВложеныйЗапрос
Левое соединение РегистрСведений.РаботникиОрганизаций как РабОрг
по РабОрг.Физлицо = ВложеныйЗапрос.Физлицо
и РабОрг.Период = ВложеныйЗапрос.Период
44 — 20.09.13 — 14:27
(42)Да, группировку забыла, смотри (43)
45 — 20.09.13 — 14:40
(44) спасибо) только запрос выдает стоимости1часа без отбора по организации
46 — 20.09.13 — 14:50
(45) разобралась, в конце надо было еще одну строчку добавить
где РабОрг.организация = &Организация (43) чтоб отбор был по организации у второй таблицы
47 — 20.09.13 — 14:54
(44) запрос вставила вместо РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец) выдает ошибку:
Ожидается имя таблицы
<<?>>Выбрать РабОрг.физлицо
48 — 20.09.13 — 15:02
(47)А скобочки есть?
ЛЕВОЕ СОЕДИНЕНИЕ (ТУТ_ТЕКСТ_ЗАПРОСА) КАК РаботникиОрганизацийСрезПоследних
ПО ТЧ.Исполнитель = РаботникиОрганизацийСрезПоследних.ФизЛицо
49 — 23.09.13 — 07:42
(48) ага спасибо )
50 — 23.09.13 — 09:58
У меня не считает итог по строке — такое возможно осуществить в запросе?
«ВЫБРАТЬ
| ДатаСоздания,
| Клиент,
| Проведен,
| Сумма(СуммаРабочаяСмена) КАК СуммаРабочаяСмена,
| Сумма(КоличествоРабочаяСмена) КАК КоличествоРабочаяСмена,
| Сумма(ЦенаРабочаяСмена) КАК ЦенаРабочаяСмена,
| Сумма(СуммаДопРаботы) КАК СуммаДопРаботы,
| Сумма(СуммаПитание) КАК СуммаПитание,
| Сумма(СуммаТранспорт) КАК СуммаТранспорт,
| Сумма(СуммаРабочаяСмена+СуммаДопРаботы+СуммаПитание+СуммаТранспорт) КАК СуммаИтог
51 — 23.09.13 — 10:00
(50) + т.е. в последней строчке почему-то считает «Суммаитог» как СуммаРабочаяСмена а остальные суммы не прибавляет
AnisaL
52 — 23.09.13 — 10:35
(51) а если в ИТогах написать, то получится?
I have this query:
$FullName = mysql_real_escape_string($_REQUEST['name']);
$EmailAdd = mysql_real_escape_string($_REQUEST['email_address']);
$City = mysql_real_escape_string($_REQUEST['city']);
$State = mysql_real_escape_string($_REQUEST['state']);
$SqlEInsert= "INSERT INTO `td_email` VALUES ((SELECT ownerid FROM 'td_events' where event_id = '$EvID'),'$EmailAdd','$FullName', '$City' ,'$State')";
$RsEmail = mysql_query($SqlEInsert) or die('Error :' . mysql_error());
but I’m getting the following error when I run the application
Error :You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near »td_events’ where event_id = ‘394’),’email@hotmail.com’,’Full Name’, ‘Atl’ at line 1
j0k
22.4k28 gold badges80 silver badges88 bronze badges
asked Jul 1, 2012 at 16:02
3
You don’t need ‘ for the table name when you want to use quotes then you have to use `
$SqlEInsert= "INSERT INTO td_email VALUES ((SELECT ownerid FROM td_events WHERE event_id = '$EvID'),'$EmailAdd','$FullName', '$City' ,'$State')";
And please take a look at SQL Injections and Security
$SqlEInsert= "INSERT INTO td_email VALUES ((SELECT ownerid FROM td_events WHERE event_id = '".(int)$EvID."'),'".mysql_real_escape_string($EmailAdd)."','".mysql_real_escape_string($FullName)."', '".mysql_real_escape_string($City)."' ,'".mysql_real_escape_string($State)."')";
answered Jul 1, 2012 at 16:09
René HöhleRené Höhle
26.4k22 gold badges72 silver badges82 bronze badges
The td_event is a field name rather than a value. Escape it with an apostrophe.
$SqlEInsert= "INSERT INTO `td_email` VALUES ((SELECT ownerid FROM `td_events` where event_id = '$EvID'),'$EmailAdd','$FullName', '$City' ,'$State')";
answered Jul 1, 2012 at 16:08
Nikolay DutchukNikolay Dutchuk
6832 gold badges6 silver badges11 bronze badges
Make sure your values are escaped. You can run them through: mysql_real_escape_string() to do so.
answered Jul 1, 2012 at 16:05
Micah CarrickMicah Carrick
9,8073 gold badges31 silver badges42 bronze badges
0
I have this query:
$FullName = mysql_real_escape_string($_REQUEST['name']);
$EmailAdd = mysql_real_escape_string($_REQUEST['email_address']);
$City = mysql_real_escape_string($_REQUEST['city']);
$State = mysql_real_escape_string($_REQUEST['state']);
$SqlEInsert= "INSERT INTO `td_email` VALUES ((SELECT ownerid FROM 'td_events' where event_id = '$EvID'),'$EmailAdd','$FullName', '$City' ,'$State')";
$RsEmail = mysql_query($SqlEInsert) or die('Error :' . mysql_error());
but I’m getting the following error when I run the application
Error :You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near »td_events’ where event_id = ‘394’),’email@hotmail.com’,’Full Name’, ‘Atl’ at line 1
j0k
22.4k28 gold badges80 silver badges88 bronze badges
asked Jul 1, 2012 at 16:02
3
You don’t need ‘ for the table name when you want to use quotes then you have to use `
$SqlEInsert= "INSERT INTO td_email VALUES ((SELECT ownerid FROM td_events WHERE event_id = '$EvID'),'$EmailAdd','$FullName', '$City' ,'$State')";
And please take a look at SQL Injections and Security
$SqlEInsert= "INSERT INTO td_email VALUES ((SELECT ownerid FROM td_events WHERE event_id = '".(int)$EvID."'),'".mysql_real_escape_string($EmailAdd)."','".mysql_real_escape_string($FullName)."', '".mysql_real_escape_string($City)."' ,'".mysql_real_escape_string($State)."')";
answered Jul 1, 2012 at 16:09
René HöhleRené Höhle
26.4k22 gold badges72 silver badges82 bronze badges
The td_event is a field name rather than a value. Escape it with an apostrophe.
$SqlEInsert= "INSERT INTO `td_email` VALUES ((SELECT ownerid FROM `td_events` where event_id = '$EvID'),'$EmailAdd','$FullName', '$City' ,'$State')";
answered Jul 1, 2012 at 16:08
Nikolay DutchukNikolay Dutchuk
6832 gold badges6 silver badges11 bronze badges
Make sure your values are escaped. You can run them through: mysql_real_escape_string() to do so.
answered Jul 1, 2012 at 16:05
Micah CarrickMicah Carrick
9,8073 gold badges31 silver badges42 bronze badges
0
| programmist1c82 |
|
||
|---|---|---|---|
|
|
Доброго времени суток всем. Выбираю для счета услуги (для УТ 10.3).
Написал запрос: Код 1C v 8.2 УП
Форма добавилась, но при печати: Не удалось сформировать внешнюю печатную форму! Ошибка при вызове метода контекста (Выполнить): {(14, 1)}: Синтаксическая ошибка «ИЗ» <<?>>ИЗ |
need help on a MySQL query, can’t seem to figure out how to correctly write this statement. I am trying to nest a select in an insert statment and ifnull is also used.
INSERT INTO vo (vo_id, agreement_id, serial_no, vo_date, vo_status)
VALUES (NULL, '3', (SELECT IFNULL(max(serial_no),1) FROM vo WHERE agreement_id = '3'), CURDATE(), 'Open')
Any help is appreciated!
Thank you!
EDIT: Error i got in mysql is : #1093 — You can’t specify target table ‘vo’ for update in FROM clause
![]()
potashin
43.8k11 gold badges82 silver badges107 bronze badges
asked May 13, 2014 at 19:53
1
You can get rid of this error by wrapping your subquery in another subquery without WHERE clause :
INSERT INTO vo
(vo_id, agreement_id, serial_no, vo_date, vo_status)
VALUES
(NULL, '3', (SELECT x.*
FROM (SELECT IFNULL(max(serial_no),1)
FROM vo
WHERE agreement_id = '3'
) x), CURDATE(), 'Open')
answered May 13, 2014 at 19:54
![]()
potashinpotashin
43.8k11 gold badges82 silver badges107 bronze badges
5
Try this
INSERT INTO vo (vo_id, agreement_id, serial_no, vo_date, vo_status)
VALUES (NULL, '3', (SELECT * from (SELECT IFNULL(max(serial_no),1) FROM vo WHERE agreement_id = '3')t), CURDATE(), 'Open')
answered May 13, 2014 at 20:01
![]()
echo_Meecho_Me
36.8k5 gold badges58 silver badges78 bronze badges
1