Синтаксическая ошибка ВЫБРАТЬ при выполнении запроса
Синтаксическая ошибка «ВЫБРАТЬ»<?> ВЫБРАТЬ возникает в 1С, когда в тексте запроса идут его блоки в подряд без разделения между собой.
Рис.1 Скриншот ошибки «Выбрать»
Например, в случаях:
- объединения запросов, когда подзапросы должны отделяться служебными словами «ОБЪЕДИНИТЬ» или «ОБЪЕДИНИТЬ ВСЕ«
- два запроса идущие в подряд для последующей выборки методом ВыбратьПакет(): требуется их разделение » ; «
- последующая выборка из временной таблицы: также необходимо разделение » ; «
- неверный синтаксис во вложенном запросе в конструкции ГДЕ Значение В (Выбрать ссылка из Справочники.ПримерСправочника): доступно только сравнение » В ()«, а не «=«, «>» и прочее
Замечу, что такая ошибка возникает при ручной правке текста, поскольку при формировании конструктором запроса, он вставляет разделители самостоятельно:
Цифры в начале ошибки (на рисунке — 386,1) — это номер строки в запросе. При большом тексте такая информация поможет быстрее локализовать ошибку.
Поведение системы
Выполнение запроса прерывается, но система продолжает работать
Об идеалах нации можно судить по ее рекламе.
Синтаксическая ошибка в запросе |
Я |
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»);
1 — 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»);
2 — 01.03.15 — 10:46
(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1
тут ошибка
3 — 01.03.15 — 10:49
КОНЕЦ разделить на Сумму и умножить на 100 КОНЦОВ
=)
4 — 01.03.15 — 10:55
два раза КОНЕЦ впендюрил, элементарно же.
5 — 01.03.15 — 11:15
в общем, так и не получилось. изначально было в отчете наценка в виде
….
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.Сумма * 100
| КОНЕЦ КАК Наценка,
по аналогии хотел добавить в текст запроса рентабельность (в макет добавил)
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100
| КОНЕЦ КАК Рентабельность
выдал ошибку (0).
Думаю (2) прав. чем заменить это выражение, не знаю.
6 — 01.03.15 — 11:17
второй конец убери. А то как-то неприлично получается…
7 — 01.03.15 — 11:17
-(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма). внезапно, правда?
8 — 01.03.15 — 11:29
предлагаемые варианты (6) и (7) попробовал. та же синтаксическая ошибка. не понимание — это ужас.
9 — 01.03.15 — 11:31
{Форма.Форма(107)}: Ошибка при вызове метода контекста (Выполнить): {(27, 2)}: Синтаксическая ошибка «ВЫБОР»
<<?>>ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
РезультатЗапроса = Запрос.Выполнить();
10 — 01.03.15 — 11:33
(9) выборы и концы пересчитал?
11 — 01.03.15 — 11:33
варианты
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма) ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100
| КОНЕЦ КАК Рентабельность
или
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма) ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) / ДвиженияПоПартиям.СуммаПрод * 100
| КОНЕЦ КАК Рентабельность
или же
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА
| -(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма) ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100
| КАК Рентабельность
или же еще в разных вариациях
12 — 01.03.15 — 11:35
я вижу ошибку в поле, которое заканчивается на 26й строке
13 — 01.03.15 — 11:37
т.е. в этой строке:
ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА ?
14 — 01.03.15 — 11:38
(9) имеется ввиду это?
|ИТОГИ
| СУММА(КоличествоВозврат),
| СУММА(ВыручкаВозврат),
| СУММА(Количество),
| СУММА(Выручка),
| СУММА(Себестоимость),
| СУММА(ВаловаяПрибыль),
| СУММА(Наценка),
| СУММА(Рентабельность)
15 — 01.03.15 — 11:40
Лишний конец уравновешивается выбором! =)
ВЫБОР КОГДА ЕСТЬNULL(ДвиженияПоПартиям.Сумма, 0) = 0 ТОГДА 0 ИНАЧЕ ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА Чеки.СуммаВсего - ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод - ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.Сумма * 100 КОНЕЦ КАК Наценка, ВЫБОР КОГДА ЕСТЬNULL(ДвиженияПоПартиям.СуммаПрод, 0) = 0 ТОГДА 0 ИНАЧЕ ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА (Чеки.СуммаВсего - ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод - ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100 КОНЕЦ КАК Рентабельность
16 — 01.03.15 — 11:40
(13) сам считай свои строки
17 — 01.03.15 — 11:49
(15) умница, спасибо. по крайней мере пока ошибок нет. проверю правильно ли считает. Думаю, все будет правильно. т.к. формула правильная. Нужно было аналогии чуть сверху начинать.
pnamik
18 — 01.03.15 — 11:57
(16), (6), (4), (2) также спасибо за участие в обсуждении
FannuSun 1 / 1 / 0 Регистрация: 11.01.2019 Сообщений: 16 |
||||
1 |
||||
1C 8.x Синтаксическая ошибка «ВЫБОР»21.01.2019, 06:47. Показов 4651. Ответов 7 Метки нет (Все метки)
Выдает ошибку «Синтаксическая ошибка «ВЫБОР»». Пожалуйста, объясните что здесь неправильно
0 |
1188 / 727 / 211 Регистрация: 22.04.2013 Сообщений: 5,352 Записей в блоге: 1 |
|
21.01.2019, 08:45 |
2 |
говорящая за себя тема. молодец. долго наверно придумывал
0 |
1 / 1 / 0 Регистрация: 11.01.2019 Сообщений: 16 |
|
21.01.2019, 09:06 [ТС] |
3 |
Я просто не знал, как описать проблему в теме. Выбор заканчивается КОНЕЦом
0 |
Phil 434 / 305 / 92 Регистрация: 28.05.2014 Сообщений: 1,247 |
||||
21.01.2019, 11:09 |
4 |
|||
Так?
0 |
1188 / 727 / 211 Регистрация: 22.04.2013 Сообщений: 5,352 Записей в блоге: 1 |
|
21.01.2019, 12:16 |
5 |
Phil, а зачем ты опять пишешь выбор ? увидел. Не по теме: я так понимаю, что вариант лож + лож не рассматривается.
0 |
1 / 1 / 0 Регистрация: 11.01.2019 Сообщений: 16 |
|
21.01.2019, 12:27 [ТС] |
6 |
А разве Иначе мы не используем?
0 |
Phil 434 / 305 / 92 Регистрация: 28.05.2014 Сообщений: 1,247 |
||||
21.01.2019, 13:51 |
7 |
|||
Yulunga,
копипаст…
0 |
Dethmontt |
22.01.2019, 14:10
|
Не по теме:
я так понимаю, что вариант лож + лож не рассматривается. Иначе «Вечно!!!»
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
22.01.2019, 14:10 |
Для заданого 0<=n<=200.Расматриваемого как возраст человека,вывести фразу вида: «Мне 21 год», «Мне 32 года», «мне 12 лет». Cоздать ссылку на реквизит «Наименование» справочника «Специалисты» из справочника «ЗаявкаНаОбучениеКлиентов» Кто может поделиться конфигурацией и базой для «общепита» или «ресторана», хочу потестить
У кого есть от нее DVD? Поделитесь, пожалуйста, если у… Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 8 |
AnisaL
20.09.13 — 12:39
Добрый день!
Помогите разобраться где ошибка во вложенном запросе, точнее я не очень понимаю как правильно его написать. Вот кусок запроса, и он выдает ошибку «Синтаксическая ошибка «ВЫБРАТЬ»
// Цена
ВЫБОР
КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена
Тогда ВЫБОР
КОГДА ТЧ.ЦенаВнутренная = 1
ТОГДА
(ВЫБРАТЬ
РаботникиОрганизацийСрезПоследних.Стоимость1часа
ИЗ
РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец, ФизЛицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
РаботникиОрганизацийСрезПоследних.Организация = &Организация
АВТОУПОРЯДОЧИВАНИЕ) КАК ВложенныйЗапросРаботникиОрганизаций
ИНАЧЕ ТЧ.ЦенаВнутренная
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК ЦенаРабочаяСмена,
ДенисЧ
1 — 20.09.13 — 12:40
Не прокатит так.
AnisaL
2 — 20.09.13 — 12:41
+(0) ошибку выдает на 6 строку (как здесь)
AnisaL
3 — 20.09.13 — 12:43
(1) ага, не прокатывает, наверно нужно чтобы было предложение с «ИЗ»
ДенисЧ
4 — 20.09.13 — 12:45
(3) Нужно для начала читать документацию. И осознавать, что запросы 1с — это не запросы SQL
kanalex
5 — 20.09.13 — 12:46
(0)
а скобку закрыть не пробовали?
Ёпрст
6 — 20.09.13 — 12:47
(0) в снеговике это не реализовано.. пока
kanalex
7 — 20.09.13 — 12:47
(4) хотя, конечно, в выражении ВЫБОР так нельзя, видимо
AnisaL
8 — 20.09.13 — 12:47
(3) смысл этого выбора в том заключается, что сначала идет условие на то что является ли эта номенклатура «Рабочей сменой», если да то опять условие: если Цена(стоимость 1 часа) этой рабочей смены = 1 (такое у нас бывает на внутренние работы), то нужно эту стоимость брать из вложенного подзапроса из период. РС РаботникиОрганизаций, иначе если не равно 1, то из ТЧ — табличной части документа
Ёпрст
9 — 20.09.13 — 12:48
нет там реализации подзапроса в кейсе
AnisaL
10 — 20.09.13 — 12:49
(5) в какой строке?
George Wheels
11 — 20.09.13 — 12:52
В качестве цены у тебя получается результат запроса.
Выбери ВложенныйЗапросРаботникиОрганизаций.Стоимость1часа
AnisaL
12 — 20.09.13 — 12:52
(4) а какую документацию почитать?
AnisaL
13 — 20.09.13 — 12:52
(11) да
AnisaL
14 — 20.09.13 — 12:55
(11) а как это написать ?
AnisaL
15 — 20.09.13 — 13:00
Написала так:
// Цена
ВЫБОР
КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена
Тогда ВЫБОР
КОГДА ТЧ.ЦенаВнутренная = 1
ТОГДА
ВЫБРАТЬ ВложенныйЗапросРаботникиОрганизаций.Стоимость1часа ИЗ
(ВЫБРАТЬ
РаботникиОрганизацийСрезПоследних.Стоимость1часа
ИЗ
РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец, ФизЛицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
РаботникиОрганизацийСрезПоследних.Организация = &Организация
АВТОУПОРЯДОЧИВАНИЕ) КАК ВложенныйЗапросРаботникиОрганизаций
ИНАЧЕ ТЧ.ЦенаВнутренная
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК ЦенаРабочаяСмена,
AnisaL
16 — 20.09.13 — 13:01
(15) + но все равно ошибка
catena
17 — 20.09.13 — 13:04
(15)Было же сказано, что не работает так. Можно соединить.
AnisaL
18 — 20.09.13 — 13:06
(17) а как тогда сделать по-другому?
manti
19 — 20.09.13 — 13:07
(15) приведи полный текст запроса
AnisaL
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).
AnisaL
22 — 20.09.13 — 13:10
(21) уже посмотрела, тогда как иначе сделать?
George Wheels
23 — 20.09.13 — 13:14
Всё-таки лучше через соединение.
AnisaL
24 — 20.09.13 — 13:15
(22) + понятно что цену можно оставить такой какая есть и уже потом ее вытащить, после выполнения запроса, но хочется чтоб в запросе все считалось
AnisaL
25 — 20.09.13 — 13:15
(23) а что с чем соединять?
George Wheels
26 — 20.09.13 — 13:17
ФизЛицо, которое во вложенном запросе есть в документе?
AnisaL
27 — 20.09.13 — 13:19
(26) оно есть в табличной части, из которой берутся цифры
Dmitry1c
28 — 20.09.13 — 13:20
Брутально
George Wheels
29 — 20.09.13 — 13:21
Или соединить документ с регистром по реквизиту Организация (думаю в документе он должен быть). И оставить то же условие по ФизЛицу.
AnisaL
30 — 20.09.13 — 13:21
(26) в документе есть реквизит «Исполнитель», но бывают случаи когда в ТЧ помимо исполнителя еще другой сотрудник выбран, поэтому физлицо берется из ТЧ документа
AnisaL
31 — 20.09.13 — 13:22
(29) проблема в том что в документе нету реквизита Организация(
George Wheels
32 — 20.09.13 — 13:25
(30) Ну так соединяй по ФизЛицу из ТЧ.
AnisaL
33 — 20.09.13 — 13:26
(31) у нас несколько организаций, но только в одной возможны такие случаи когда стоимость 1 часа = 1, и именно по ней идет отбор в подзапросе
George Wheels
34 — 20.09.13 — 13:32
Всё, что в ВЫБОР оставляешь.
Вложенный запрос убираешь. Вместо него — РаботникиОрганизацийСрезПоследних.Стоимость1часа
ну и в конце
ИЗ
Документ.ЗаявкаНаряд.Работы КАК ТЧ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец) КАК РаботникиОрганизацийСрезПоследних
ПО ТЧ.Сотрудник = РаботникиОрганизацийСрезПоследних.ФизЛицо
ГДЕ
…
AnisaL
35 — 20.09.13 — 13:52
(34) спасибо большое! единственное что получилось так, что когда в регистре РаботникиОрганизаций 1 запись по сотруднику, то запрос правильно выдает, а когда записей в регистре несколько по этому сотрдунику но от разных дат, то Цена 1 часа суммируется
AnisaL
36 — 20.09.13 — 13:54
(35) + как сделать чтобы выбиралась только последняя запись?
George Wheels
37 — 20.09.13 — 14:00
(35) СрезПоследних выдаёт несколько записей? Тогда смотри какие ещё измерения у регистра.
AnisaL
38 — 20.09.13 — 14:02
(37) у регистра 3 измерения: ФизЛицо, Организация, Подразделение
catena
39 — 20.09.13 — 14:10
(38)Это клево. Какой смысл?
Тогда так
Выбрать РабОрг.Стоимость1часа из (Выбрать физлицо, максимум(период) как Период из РегистрСведений.РаботникиОрганизаций как РаботникиОрганизаций где Организация=&Организация) как ВложеныйЗапрос
Левое соединение РегистрСведений.РаботникиОрганизаций как РабОрг
по РабОрг.Физлицо = ВложеныйЗапрос.Физлицо
и РабОрг.Период = ВложеныйЗапрос.Период
AnisaL
40 — 20.09.13 — 14:18
(39) этот запрос написать вместо этого ?
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец) КАК РаботникиОрганизацийСрезПоследних
ПО ТЧ.Исполнитель = РаботникиОрганизацийСрезПоследних.ФизЛицо
catena
41 — 20.09.13 — 14:23
(40)Вместо РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец)
AnisaL
42 — 20.09.13 — 14:26
(41) ошибку выдает:
Поле не входит в группу «Физлицо»
Выбрать Физлицо
catena
43 — 20.09.13 — 14:26
Вот так вернее для ваших целей.
Выбрать РабОрг.Стоимость1часа, РабОрг.Физлицо
из (Выбрать физлицо, максимум(период) как Период из РегистрСведений.РаботникиОрганизаций как РаботникиОрганизаций где Организация=&Организация и Период <=&Конец
Сгруппировать по физлицо
) как ВложеныйЗапрос
Левое соединение РегистрСведений.РаботникиОрганизаций как РабОрг
по РабОрг.Физлицо = ВложеныйЗапрос.Физлицо
и РабОрг.Период = ВложеныйЗапрос.Период
catena
44 — 20.09.13 — 14:27
(42)Да, группировку забыла, смотри (43)
AnisaL
45 — 20.09.13 — 14:40
(44) спасибо) только запрос выдает стоимости1часа без отбора по организации
AnisaL
46 — 20.09.13 — 14:50
(45) разобралась, в конце надо было еще одну строчку добавить
где РабОрг.организация = &Организация (43) чтоб отбор был по организации у второй таблицы
AnisaL
47 — 20.09.13 — 14:54
(44) запрос вставила вместо РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец) выдает ошибку:
Ожидается имя таблицы
<<?>>Выбрать РабОрг.физлицо
catena
48 — 20.09.13 — 15:02
(47)А скобочки есть?
ЛЕВОЕ СОЕДИНЕНИЕ (ТУТ_ТЕКСТ_ЗАПРОСА) КАК РаботникиОрганизацийСрезПоследних
ПО ТЧ.Исполнитель = РаботникиОрганизацийСрезПоследних.ФизЛицо
AnisaL
49 — 23.09.13 — 07:42
(48) ага спасибо )
AnisaL
50 — 23.09.13 — 09:58
У меня не считает итог по строке — такое возможно осуществить в запросе?
«ВЫБРАТЬ
| ДатаСоздания,
| Клиент,
| Проведен,
| Сумма(СуммаРабочаяСмена) КАК СуммаРабочаяСмена,
| Сумма(КоличествоРабочаяСмена) КАК КоличествоРабочаяСмена,
| Сумма(ЦенаРабочаяСмена) КАК ЦенаРабочаяСмена,
| Сумма(СуммаДопРаботы) КАК СуммаДопРаботы,
| Сумма(СуммаПитание) КАК СуммаПитание,
| Сумма(СуммаТранспорт) КАК СуммаТранспорт,
| Сумма(СуммаРабочаяСмена+СуммаДопРаботы+СуммаПитание+СуммаТранспорт) КАК СуммаИтог
AnisaL
51 — 23.09.13 — 10:00
(50) + т.е. в последней строчке почему-то считает «Суммаитог» как СуммаРабочаяСмена а остальные суммы не прибавляет
AnisaL
52 — 23.09.13 — 10:35
(51) а если в ИТогах написать, то получится?
Вот текст запроса
ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта,
| ЦеныНоменклатурыСрезПоследних.ВидЦены,
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Характеристика
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.ВидЦены В(&ТипЦен)
| И ЦеныНоменклатурыСрезПоследних.Номенклатура В(&Номенлатуры)"
Запрос построено на конструкторе запросов.
Текст ошибки
{Форма.ГлавнаяФорма.Форма(206)}: Ошибка при вызове метода контекста (Выполнить)
ТабЗначРезультат = Запрос.Выполнить().Выгрузить();
по причине:
{(4, 2)}: Синтаксическая ошибка "ИЗ"
<<?>>ИЗ
-
Вопрос заданболее трёх лет назад
-
2216 просмотров
Ошибка синтаксиса языка запроса.
Вам нужно определится с тем, что вы используете. Если работаете с физической таблицей, то источник = РегистрСведений.ЦеныНоменклатуры. Если хотите виртуальную таблицу срезу последних, то даже не обязательно задавать время среза и условие (которое вы запихнули в секцию ГДЕ), но обязательно указать круглые кавычки!
ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта,
| ЦеныНоменклатурыСрезПоследних.ВидЦены,
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Характеристика
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены В(&ТипЦен) и Номенклатура В(&Номенлатуры)) КАК ЦеныНоменклатурыСрезПоследних»
Пригласить эксперта
-
Показать ещё
Загружается…
06 июн. 2023, в 20:24
3500 руб./за проект
06 июн. 2023, в 20:08
100 руб./за проект
06 июн. 2023, в 20:05
150 руб./за проект