Синтаксическая ошибка ВЫБРАТЬ при выполнении запроса
Синтаксическая ошибка «ВЫБРАТЬ»<?> ВЫБРАТЬ возникает в 1С, когда в тексте запроса идут его блоки в подряд без разделения между собой.
Рис.1 Скриншот ошибки «Выбрать»
Например, в случаях:
- объединения запросов, когда подзапросы должны отделяться служебными словами «ОБЪЕДИНИТЬ» или «ОБЪЕДИНИТЬ ВСЕ«
- два запроса идущие в подряд для последующей выборки методом ВыбратьПакет(): требуется их разделение » ; «
- последующая выборка из временной таблицы: также необходимо разделение » ; «
- неверный синтаксис во вложенном запросе в конструкции ГДЕ Значение В (Выбрать ссылка из Справочники.ПримерСправочника): доступно только сравнение » В ()«, а не «=«, «>» и прочее
Замечу, что такая ошибка возникает при ручной правке текста, поскольку при формировании конструктором запроса, он вставляет разделители самостоятельно:
Цифры в начале ошибки (на рисунке — 386,1) — это номер строки в запросе. При большом тексте такая информация поможет быстрее локализовать ошибку.
Поведение системы
Выполнение запроса прерывается, но система продолжает работать
Мода имеет такое же отношение к оригинальности, как любая другая реклама к товару.
pnamik
01.03.15
✎
10:40
Добрый день
1С 8.0.18.2. самописная конфа.
При сформировании отчета валовая прибыль выдает ошибку:
{Форма.Форма(107)}: Ошибка при вызове метода контекста (Выполнить): {(29, 8)}: Синтаксическая ошибка «КАК»
КОНЕЦ <<?>>КАК Рентабельность
РезультатЗапроса = Запрос.Выполнить();
Не понимаю, как исправить. Помогите, пожалуйста
Часть текста запроса:
Запрос = Новый Запрос(«ВЫБРАТЬ
| ДвиженияПоПартиям.Период,
| ДвиженияПоПартиям.Регистратор,
| ДвиженияПоПартиям.КодОперации,
| ДвиженияПоПартиям.Номенклатура КАК Номенклатура,
| ДвиженияПоПартиям.Склад КАК Склад,
| ДвиженияПоПартиям.Партия КАК Партия,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -1*0 ИНАЧЕ 1 КОНЕЦ * ДвиженияПоПартиям.Количество КАК Количество,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА -Чеки.СуммаВсего*0 ИНАЧЕ
| ДвиженияПоПартиям.СуммаПрод КОНЕЦ КАК Выручка,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -1 ИНАЧЕ 0 КОНЕЦ * ДвиженияПоПартиям.Количество КАК КоличествоВозврат,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА -Чеки.СуммаВсего ИНАЧЕ
| 0 КОНЕЦ КАК ВыручкаВозврат,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -1 ИНАЧЕ 1 КОНЕЦ * ДвиженияПоПартиям.Сумма КАК Себестоимость,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма КОНЕЦ КАК ВаловаяПрибыль,
| ВЫБОР
| КОГДА ЕСТЬNULL(ДвиженияПоПартиям.Сумма, 0) = 0
| ТОГДА 0
| ИНАЧЕ
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.Сумма * 100
| КОНЕЦ КАК Наценка,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100
| КОНЕЦ КАК Рентабельность
|ИЗ
| РегистрНакопления.ДвиженияПоПартиям КАК ДвиженияПоПартиям
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.КассовыйЧек.Покупки КАК Чеки
| ПО Чеки.Ссылка = ДвиженияПоПартиям.Регистратор
| И Чеки.НомерСтроки = ДвиженияПоПартиям.НомерСтроки
|ГДЕ
| ДвиженияПоПартиям.Период МЕЖДУ &НачалоПериода И &КонецПериода
| И ДвиженияПоПартиям.Регистратор ССЫЛКА Документ.КассовыйЧек» +
?(МассивНоменклатуры.Количество() > 0, » И ДвиженияПоПартиям.Номенклатура В ИЕРАРХИИ(&МассивНоменклатуры)», «») +
?(СкладЗаполнен = Истина, » И ДвиженияПоПартиям.Склад В ИЕРАРХИИ(&Склад)», «») +
?(ПартияЗаполнен = Истина, » И ДвиженияПоПартиям.Партия В ИЕРАРХИИ(&Партия)», «») + »
|ИТОГИ
| СУММА(КоличествоВозврат),
| СУММА(ВыручкаВозврат),
| СУММА(Количество),
| СУММА(Выручка),
| СУММА(Себестоимость),
| СУММА(ВаловаяПрибыль),
| СУММА(Наценка),
| СУММА(Рентабельность)
|ПО
| ОБЩИЕ,
| Номенклатура ИЕРАРХИЯ»);
Запрос.УстановитьПараметр(«КВ», Перечисления.КодыОпераций.ВозвратОтПокупателя);
Запрос.УстановитьПараметр(«НачалоПериода», НачалоДня(НачалоПериода));
Запрос.УстановитьПараметр(«КонецПериода», КонецДня(КонецПериода));
Запрос.УстановитьПараметр(«МассивНоменклатуры», МассивНоменклатуры);
Запрос.УстановитьПараметр(«Склад», Склад);
Запрос.УстановитьПараметр(«Партия», Партия);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ОбработкаПрерыванияПользователя();
Макет = ПолучитьМакет(«МакетВариант1»);
pnamik
01.03.15
✎
10:41
Запрос = Новый Запрос(«ВЫБРАТЬ
| ДвиженияПоПартиям.Период,
| ДвиженияПоПартиям.Регистратор,
| ДвиженияПоПартиям.КодОперации,
| ДвиженияПоПартиям.Номенклатура КАК Номенклатура,
| ДвиженияПоПартиям.Склад КАК Склад,
| ДвиженияПоПартиям.Партия КАК Партия,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -1*0 ИНАЧЕ 1 КОНЕЦ * ДвиженияПоПартиям.Количество КАК Количество,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА -Чеки.СуммаВсего*0 ИНАЧЕ
| ДвиженияПоПартиям.СуммаПрод КОНЕЦ КАК Выручка,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -1 ИНАЧЕ 0 КОНЕЦ * ДвиженияПоПартиям.Количество КАК КоличествоВозврат,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА -Чеки.СуммаВсего ИНАЧЕ
| 0 КОНЕЦ КАК ВыручкаВозврат,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -1 ИНАЧЕ 1 КОНЕЦ * ДвиженияПоПартиям.Сумма КАК Себестоимость,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма КОНЕЦ КАК ВаловаяПрибыль,
| ВЫБОР
| КОГДА ЕСТЬNULL(ДвиженияПоПартиям.Сумма, 0) = 0
| ТОГДА 0
| ИНАЧЕ
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.Сумма * 100
| КОНЕЦ КАК Наценка,
| ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100
| КОНЕЦ КАК Рентабельность
|ИЗ
| РегистрНакопления.ДвиженияПоПартиям КАК ДвиженияПоПартиям
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.КассовыйЧек.Покупки КАК Чеки
| ПО Чеки.Ссылка = ДвиженияПоПартиям.Регистратор
| И Чеки.НомерСтроки = ДвиженияПоПартиям.НомерСтроки
|ГДЕ
| ДвиженияПоПартиям.Период МЕЖДУ &НачалоПериода И &КонецПериода
| И ДвиженияПоПартиям.Регистратор ССЫЛКА Документ.КассовыйЧек» +
?(МассивНоменклатуры.Количество() > 0, » И ДвиженияПоПартиям.Номенклатура В ИЕРАРХИИ(&МассивНоменклатуры)», «») +
?(СкладЗаполнен = Истина, » И ДвиженияПоПартиям.Склад В ИЕРАРХИИ(&Склад)», «») +
?(ПартияЗаполнен = Истина, » И ДвиженияПоПартиям.Партия В ИЕРАРХИИ(&Партия)», «») + »
|ИТОГИ
| СУММА(КоличествоВозврат),
| СУММА(ВыручкаВозврат),
| СУММА(Количество),
| СУММА(Выручка),
| СУММА(Себестоимость),
| СУММА(ВаловаяПрибыль),
| СУММА(Наценка),
| СУММА(Рентабельность)
|ПО
| ОБЩИЕ,
| Номенклатура ИЕРАРХИЯ»);
Запрос.УстановитьПараметр(«КВ», Перечисления.КодыОпераций.ВозвратОтПокупателя);
Запрос.УстановитьПараметр(«НачалоПериода», НачалоДня(НачалоПериода));
Запрос.УстановитьПараметр(«КонецПериода», КонецДня(КонецПериода));
Запрос.УстановитьПараметр(«МассивНоменклатуры», МассивНоменклатуры);
Запрос.УстановитьПараметр(«Склад», Склад);
Запрос.УстановитьПараметр(«Партия», Партия);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ОбработкаПрерыванияПользователя();
Макет = ПолучитьМакет(«МакетВариант1»);
ДенисЧ
01.03.15
✎
10:46
(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1
тут ошибка
Записьдампа
01.03.15
✎
10:49
КОНЕЦ разделить на Сумму и умножить на 100 КОНЦОВ
=)
hhhh
01.03.15
✎
10:55
два раза КОНЕЦ впендюрил, элементарно же.
pnamik
01.03.15
✎
11:15
в общем, так и не получилось. изначально было в отчете наценка в виде
….
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.Сумма * 100
| КОНЕЦ КАК Наценка,
по аналогии хотел добавить в текст запроса рентабельность (в макет добавил)
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100
| КОНЕЦ КАК Рентабельность
выдал ошибку (0).
Думаю (2) прав. чем заменить это выражение, не знаю.
ДенисЧ
01.03.15
✎
11:17
второй конец убери. А то как-то неприлично получается…
Wobland
01.03.15
✎
11:17
-(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма). внезапно, правда?
pnamik
01.03.15
✎
11:29
предлагаемые варианты (6) и (7) попробовал. та же синтаксическая ошибка. не понимание — это ужас.
pnamik
01.03.15
✎
11:31
{Форма.Форма(107)}: Ошибка при вызове метода контекста (Выполнить): {(27, 2)}: Синтаксическая ошибка «ВЫБОР»
<<?>>ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
РезультатЗапроса = Запрос.Выполнить();
Wobland
01.03.15
✎
11:33
(9) выборы и концы пересчитал?
pnamik
01.03.15
✎
11:33
варианты
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма) ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100
| КОНЕЦ КАК Рентабельность
или
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма) ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) / ДвиженияПоПартиям.СуммаПрод * 100
| КОНЕЦ КАК Рентабельность
или же
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма) ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100
| КАК Рентабельность
или же еще в разных вариациях
Wobland
01.03.15
✎
11:35
я вижу ошибку в поле, которое заканчивается на 26й строке
pnamik
01.03.15
✎
11:37
т.е. в этой строке:
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА ?
pnamik
01.03.15
✎
11:38
(9) имеется ввиду это?
|ИТОГИ
| СУММА(КоличествоВозврат),
| СУММА(ВыручкаВозврат),
| СУММА(Количество),
| СУММА(Выручка),
| СУММА(Себестоимость),
| СУММА(ВаловаяПрибыль),
| СУММА(Наценка),
| СУММА(Рентабельность)
Записьдампа
01.03.15
✎
11:40
Лишний конец уравновешивается выбором! =)
ВЫБОР
КОГДА ЕСТЬNULL(ДвиженияПоПартиям.Сумма, 0) = 0
ТОГДА
0
ИНАЧЕ
ВЫБОР
КОГДА ДвиженияПоПартиям.КодОперации = &КВ
ТОГДА
Чеки.СуммаВсего - ДвиженияПоПартиям.Сумма)*-1
ИНАЧЕ
(ДвиженияПоПартиям.СуммаПрод - ДвиженияПоПартиям.Сумма)
КОНЕЦ / ДвиженияПоПартиям.Сумма * 100
КОНЕЦ КАК Наценка,
ВЫБОР
КОГДА ЕСТЬNULL(ДвиженияПоПартиям.СуммаПрод, 0) = 0
ТОГДА
0
ИНАЧЕ
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ
ТОГДА
(Чеки.СуммаВсего - ДвиженияПоПартиям.Сумма)*-1
ИНАЧЕ
(ДвиженияПоПартиям.СуммаПрод - ДвиженияПоПартиям.Сумма)
КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100
КОНЕЦ КАК Рентабельность
Wobland
01.03.15
✎
11:40
(13) сам считай свои строки
pnamik
01.03.15
✎
11:49
(15) умница, спасибо. по крайней мере пока ошибок нет. проверю правильно ли считает. Думаю, все будет правильно. т.к. формула правильная. Нужно было аналогии чуть сверху начинать.
pnamik
01.03.15
✎
11:57
(16), (6), (4), (2) также спасибо за участие в обсуждении
Вот текст запроса
ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта,
| ЦеныНоменклатурыСрезПоследних.ВидЦены,
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Характеристика
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.ВидЦены В(&ТипЦен)
| И ЦеныНоменклатурыСрезПоследних.Номенклатура В(&Номенлатуры)"
Запрос построено на конструкторе запросов.
Текст ошибки
{Форма.ГлавнаяФорма.Форма(206)}: Ошибка при вызове метода контекста (Выполнить)
ТабЗначРезультат = Запрос.Выполнить().Выгрузить();
по причине:
{(4, 2)}: Синтаксическая ошибка "ИЗ"
<<?>>ИЗ
-
Вопрос задан
-
2351 просмотр
Ошибка синтаксиса языка запроса.
Вам нужно определится с тем, что вы используете. Если работаете с физической таблицей, то источник = РегистрСведений.ЦеныНоменклатуры. Если хотите виртуальную таблицу срезу последних, то даже не обязательно задавать время среза и условие (которое вы запихнули в секцию ГДЕ), но обязательно указать круглые кавычки!
ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта,
| ЦеныНоменклатурыСрезПоследних.ВидЦены,
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Характеристика
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены В(&ТипЦен) и Номенклатура В(&Номенлатуры)) КАК ЦеныНоменклатурыСрезПоследних»
Пригласить эксперта
-
Показать ещё
Загружается…
23 сент. 2023, в 01:31
6000 руб./за проект
23 сент. 2023, в 01:13
3000 руб./за проект
22 сент. 2023, в 23:30
6500 руб./за проект
Минуточку внимания
0 / 0 / 0
Регистрация: 24.03.2018
Сообщений: 2
1
24.03.2018, 18:19. Показов 10802. Ответов 3
Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{Документ.ОказаниеУслуги.МодульОбъекта(42)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(19, 4)}: Синтаксическая ошибка «ОказаниеУслугиПереченьНоменклатуры.НаборСвойств»
<<?>>ОказаниеУслугиПереченьНоменклатуры.НаборСвойств
P.S Я по книги делаю, Радченко, 100 раз все проверил, все сделал как там.
Изначально запрос строился в конструкторе, но после добавление Плана видов характеристик, в документ Оказание услуг добавили поле НаборСвойств и запрос дополнил в ручную этой строкой!
Объясните поподробнее пожалуйста, а то я в 1С пару дней!
код
1C | ||
|
Миниатюры
0
kulkrise |
|
||
---|---|---|---|
1С 8.2 БП 2.0 Обычное приложениеКод 1C v 8.2 УП
Выдается сообщение «Синтаксическая ошибка». В чем ошибка? |
Yandex |
|
||
---|---|---|---|
E_Migachev |
|
||
---|---|---|---|
(0) kulkrise, так а на что ругается? |
kulkrise |
|
||
---|---|---|---|
|
{(3, 1)}: Синтаксическая ошибка «Список.Контрагент.Наименование»
<<?>>Список.Контрагент.Наименование КАК Наименование и так по каждому пункту, даже если данный пункт убрать в комментарий |
E_Migachev |
|
||
---|---|---|---|
а кто это написал: |ИЗ Документ.РеализацияТоваровУслуг КАК Список, Документ.ПоступлениеТоваровУслуг КАК Список»; ? |
kulkrise |
|
||
---|---|---|---|
писала я на основании примера из учебника, может и быть и так как,
но смысл в том, что данные по контрагентам должны выбираться не только из документов по реализации, но и из документов по поступлению. Дополнительно: мне подсказали. что у меня нет запятой после каждого Код 1C v 8.2 УП
выводится сообщение об ошибке |
kulkrise |
|
||
---|---|---|---|
|
Как мне указали, ошибка здесь заключалась в запятой после СрокДействия, т.е.
перечисление схожих конструкций закончилось, а я ставлю запятую. это исправлено, судя по тому, что ни на что не ругается из выборки запроса — уже хорошо, однако теперь ругается на следующее (при этом, когда выборка производилась из справочника контрагентов не запросом, а выборкой данных, в обработке этой строки проблем не наблюдалось): Код 1C v 8.2 УП
Код 1C v 8.2 УП
|
E_Migachev |
|
||
---|---|---|---|
|
(5) kulkrise, так создавай запрос через конструктор и не будет проблем |
Mokey |
|
||
---|---|---|---|
В первом посте запятых нет вообще, во втором — лишняя перед ИЗ, вот и весь вопрос |
DJ_Serega |
|
||
---|---|---|---|
Непонятен смысл запроса. А на ошибки уже указали. |
Подсказка: Вы можете добавить любую страничку в Избранное щелкнув по значку |