Синтаксическая ошибка 1с запрос

Синтаксическая ошибка ВЫБРАТЬ при выполнении запроса

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

Синтаксическая ошибка ВЫБРАТЬ

Рис.1 Скриншот ошибки «Выбрать»

Например, в случаях:

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

Замечу, что такая ошибка возникает при ручной правке текста, поскольку при формировании  конструктором запроса, он вставляет разделители самостоятельно:

Разделение подзапросов

Цифры в начале ошибки (на рисунке — 386,1) —  это номер строки в запросе. При большом тексте  такая информация поможет быстрее локализовать ошибку.

Поведение системы

Выполнение запроса прерывается, но система продолжает работать

Мода имеет такое же отношение к оригинальности, как любая другая реклама к товару.

Синтаксическая ошибка в запросе ☑ 0

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»);

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»);

2

ДенисЧ

01.03.15

10:46

(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1

тут ошибка

3

Записьдампа

01.03.15

10:49

КОНЕЦ разделить на Сумму и умножить на 100 КОНЦОВ

=)

4

hhhh

01.03.15

10:55

два раза КОНЕЦ впендюрил, элементарно же.

5

pnamik

01.03.15

11:15

в общем, так и не получилось. изначально было в отчете наценка в виде

….

ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА

                              | (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.Сумма * 100

                              |    КОНЕЦ КАК Наценка,

по аналогии хотел добавить в текст запроса рентабельность (в макет добавил)

ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ  ТОГДА

                              | (Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма)*-1 ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100

                              |    КОНЕЦ КАК Рентабельность

выдал ошибку (0).

Думаю (2) прав. чем заменить это выражение, не знаю.

6

ДенисЧ

01.03.15

11:17

второй конец убери. А то как-то неприлично получается…

7

Wobland

01.03.15

11:17

-(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма). внезапно, правда?

8

pnamik

01.03.15

11:29

предлагаемые варианты (6) и (7) попробовал. та же синтаксическая ошибка. не понимание — это ужас.

9

pnamik

01.03.15

11:31

{Форма.Форма(107)}: Ошибка при вызове метода контекста (Выполнить): {(27, 2)}: Синтаксическая ошибка «ВЫБОР»

<<?>>ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ ТОГДА

        РезультатЗапроса = Запрос.Выполнить();

10

Wobland

01.03.15

11:33

(9) выборы и концы пересчитал?

11

pnamik

01.03.15

11:33

варианты

ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ  ТОГДА

                              | -(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма) ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100

                              |    КОНЕЦ КАК Рентабельность

или

ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ  ТОГДА

                              | -(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма) ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) / ДвиженияПоПартиям.СуммаПрод * 100

                              |    КОНЕЦ КАК Рентабельность

или же

ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ  ТОГДА

                              | -(Чеки.СуммаВсего — ДвиженияПоПартиям.Сумма) ИНАЧЕ (ДвиженияПоПартиям.СуммаПрод — ДвиженияПоПартиям.Сумма) КОНЕЦ / ДвиженияПоПартиям.СуммаПрод * 100

                              |    КАК Рентабельность

или же еще в разных вариациях

12

Wobland

01.03.15

11:35

я вижу ошибку в поле, которое заканчивается на 26й строке

13

pnamik

01.03.15

11:37

т.е. в этой строке:

ВЫБОР КОГДА ДвиженияПоПартиям.КодОперации = &КВ  ТОГДА ?

14

pnamik

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

Wobland

01.03.15

11:40

(13) сам считай свои строки

17

pnamik

01.03.15

11:49

(15) умница, спасибо. по крайней мере пока ошибок нет. проверю правильно ли считает. Думаю, все будет правильно. т.к. формула правильная. Нужно было аналогии чуть сверху начинать.

18

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
Процедура ОбработкаПроведения(Отказ, Режим)
    
    
    Движения.ОстаткиМатериалов.Записывать = Истина;
    Движения.СтоимостьМатериалов.Записывать = Истина;
    Движения.Продажи.Записывать = Истина;
    
    // Создать менеджер временных таблиц
    МенеджерВТ = Новый МенеджерВременныхТаблиц;
    
    #Область НоменклатураДокумента
 
    Запрос = Новый Запрос;
    
     // Укажем, какой менеджер временных таблиц использует этот запрос
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
 
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
        |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры 
        |                                                     КАК ВидНоменклатуры,
        |   ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,
        |   СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) 
        |                                       КАК КоличествоВДокументе,
        |   СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) 
        |                                    КАК СуммаВДокументе
        |ПОМЕСТИТЬ НоменклатураДокумента
        |ИЗ
        |   Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
        |ГДЕ
        |   ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
        |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры
        |   ОказаниеУслугиПереченьНоменклатуры.НаборСвойств ";
 
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
 
    РезультатЗапроса = Запрос.Выполнить();
    #КонецОбласти
    
    
     #Область ДвиженияДокумента
    
    Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос2.Текст = "ВЫБРАТЬ
                    |    НоменклатураДокумента.Номенклатура,
                    |    НоменклатураДокумента.ВидНоменклатуры,
                    |    НоменклатураДокумента.НаборСвойств,
                    |    НоменклатураДокумента.КоличествоВДокументе,
                    |    НоменклатураДокумента.СуммаВДокументе,
                    |   ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,
                    |   ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество
                    |ИЗ
                    |    НоменклатураДокумента КАК  НоменклатураДокумента
                    |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
                    |               ,
                    |               Материал В
                    |                   (ВЫБРАТЬ
                    |                       НоменклатураДокумента.Номенклатура
                    |                   ИЗ
                    |                       НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки
                    |       ПО  НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал
                    |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(
                    |               ,
                    |               Материал В
                    |                   (ВЫБРАТЬ
                    |                       НоменклатураДокумента.Номенклатура
                    |                   ИЗ
                    |                       НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки
                    |       ПО  НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал  ";
                    
                    
        // Установим необходимость блокировки данных в регистрах СтоимостьМатериалов
         // и ОстаткиМатериалов
      Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;
      Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;
                    
    // Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе
    Движения.СтоимостьМатериалов.Записать();
    Движения.ОстаткиМатериалов.Записать();
                    
    РезультатЗапроса = Запрос2.Выполнить();
    
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда
              СтоимостьМатериала = 0;
         Иначе
              СтоимостьМатериала =
              ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;
        КонецЕсли;
        
        
        
        Если ВыборкаДетальныеЗаписи.ВидНоменклатуры =
            Перечисления.ВидыНоменклатуры.Материал Тогда 
            // регистр ОстаткиМатериалов Расход
        Движение = Движения.ОстаткиМатериалов.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;
        Движение.Склад = Склад;
        Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
        // регистр СтоимостьМатериалов Расход
        Движение = Движения.СтоимостьМатериалов.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * СтоимостьМатериала;
                                                                  
                                                                   
    КонецЕсли;
    
    // Регистр Продажи
        Движение = Движения.Продажи.Добавить();
        Движение.Период = Дата;
        Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.Клиент = Клиент;
        Движение.Мастер = Мастер;
        Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
        Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;
        Движение.Стоимость = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе;
 
    
 
    КонецЦикла;
    Движения.Записать();
    #КонецОбласти
    
    
    #Область КонтрольОстатков
           Если Режим = РежимПроведенияДокумента.Оперативный Тогда
           // Проверить отрицательные остатки
           Запрос3 = Новый Запрос;
           Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
           Запрос3.Текст = "ВЫБРАТЬ
                           |    ОстаткиМатериаловОстатки.Материал,
                           |    ОстаткиМатериаловОстатки.НаборСвойств,
                           |    ОстаткиМатериаловОстатки.КоличествоОстаток
                           |ИЗ
                           |    РегистрНакопления.ОстаткиМатериалов.Остатки(,(Материал, НаборСвойств)В
                           |                    (ВЫБРАТЬ
                           |                        НоменклатураДокумента.Номенклатура
                           |                        НоменклатураДокумента.НаборСвойств
                           |                    ИЗ
                           |                        НоменклатураДокумента)
                           |                И Склад = &Склад) КАК ОстаткиМатериаловОстатки
                           |ГДЕ
                           |    ОстаткиМатериаловОстатки.КоличествоОстаток < 0 ";
                           
           Запрос3.УстановитьПараметр("Склад", Склад);
           РезультатЗапроса = Запрос3.Выполнить();
           ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
           
              Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
              Сообщение = Новый СообщениеПользователю();
              Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +
                       " единиц материала """ + ВыборкаДетальныеЗаписи.Материал + """" + 
                       " из набора свойств """ + ВыборкаДетальныеЗаписи.НаборСвойств + """";
               Сообщение.Сообщить();
                    Отказ = Истина;
КонецЦикла;
 
            КонецЕсли;
 
#КонецОбласти   
КонецПроцедуры

Миниатюры

Синтаксическая ошибка в запросе 1С
 



0



kulkrise
04.11.2013 17:37 Прочитано: 2935

1С 8.2 БП 2.0 Обычное приложениеКод 1C v 8.2 УП

 	МойЗапрос = Новый Запрос;
МойЗапрос.Текст =
"ВЫБРАТЬ
|Список.Контрагент.Код КАК Код
|Список.Контрагент.Наименование КАК Наименование
|Список.Контрагент.Родитель КАК ГруппаКонтрагентов
|Список.Контрагент.НаименованиеПолное КАК ПолноеНаименование
|Список.Контрагент.ИНН КАК ИНН
|Список.Контрагент.КПП КАК КПП
|Список.Контрагент.КодПоОКПО КАК КодПоОКПО
|Список.Контрагент.ОсновнойБанковскийСчет.НомерСчета КАК РасчетныйСчет
|Список.Контрагент.ОсновнойБанковскийСчет.Банк.Наименование КАК НаименованиеБанка
|Список.Контрагент.ОсновнойБанковскийСчет.Банк.Код КАК БИКБанка
|Список.Контрагент.ОсновнойБанковскийСчет.Банк.КоррСчет КАК КоррСчетБанка
|Список.Контрагент.ОсновнойДоговорКонтрагента.ВидДоговора КАК ВидДоговора
|Список.Контрагент.ОсновнойДоговорКонтрагента.Номер КАК НомерДоговора
|Список.Контрагент.ОсновнойДоговорКонтрагента.Дата КАК ДатаДоговора
|Список.Контрагент.ОсновнойДоговорКонтрагента.СрокДействия КАК СрокДействия
|ИЗ Документ.РеализацияТоваровУслуг КАК Список, Документ.ПоступлениеТоваровУслуг КАК Список";
РезультатЗапроса = МойЗапрос.Выполнить().Выбрать();

Выдается сообщение «Синтаксическая ошибка». В чем ошибка?

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
04.11.2013 21:53 Ответ № 1

(0) kulkrise, так а на что ругается?

kulkrise
04.11.2013 22:13 Ответ № 2

{(3, 1)}: Синтаксическая ошибка «Список.Контрагент.Наименование»
<<?>>Список.Контрагент.Наименование КАК Наименование

и так по каждому пункту, даже если данный пункт убрать в комментарий

E_Migachev
04.11.2013 22:25 Ответ № 3

а кто это написал: |ИЗ Документ.РеализацияТоваровУслуг КАК Список, Документ.ПоступлениеТоваровУслуг КАК Список»; ?
из может быть только из одной таблицы, например:
|ИЗ Документ.РеализацияТоваровУслуг КАК Список

kulkrise
04.11.2013 22:32 Ответ № 4

писала я на основании примера из учебника, может и быть и так как,
но смысл в том, что данные по контрагентам должны выбираться не только
из документов по реализации, но и из документов по поступлению.

Дополнительно: мне подсказали. что у меня нет запятой после каждого
выбираемого параметра, что и было мной исправлено, добавлено ОБЪДИНИТЬ ВСЕ.

Код 1C v 8.2 УП

 МойЗапрос = Новый Запрос;
МойЗапрос.Текст =
"ВЫБРАТЬ
|Контрагент.Код КАК Код,
|Контрагент.Наименование КАК Наименование,
|Контрагент.Родитель КАК ГруппаКонтрагентов,
|Контрагент.НаименованиеПолное КАК ПолноеНаименование,
|Контрагент.ИНН КАК ИНН,
|Контрагент.КПП КАК КПП,
|Контрагент.КодПоОКПО КАК КодПоОКПО,
|Контрагент.ОсновнойБанковскийСчет.НомерСчета КАК РасчетныйСчет,
|Контрагент.ОсновнойБанковскийСчет.Банк.Наименование КАК НаименованиеБанка,
|Контрагент.ОсновнойБанковскийСчет.Банк.Код КАК БИКБанка,
|Контрагент.ОсновнойБанковскийСчет.Банк.КоррСчет КАК КоррСчетБанка,
|Контрагент.ОсновнойДоговорКонтрагента.ВидДоговора КАК ВидДоговора,
|Контрагент.ОсновнойДоговорКонтрагента.Номер КАК НомерДоговора,
|Контрагент.ОсновнойДоговорКонтрагента.Дата КАК ДатаДоговора,
|Контрагент.ОсновнойДоговорКонтрагента.СрокДействия КАК СрокДействия,
|ИЗ Документ.РеализацияТоваровУслуг
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ
|Контрагент.Код КАК Код,
|Контрагент.Наименование КАК Наименование,
|Контрагент.Родитель КАК ГруппаКонтрагентов,
|Контрагент.НаименованиеПолное КАК ПолноеНаименование,
|Контрагент.ИНН КАК ИНН,
|Контрагент.КПП КАК КПП,
|Контрагент.КодПоОКПО КАК КодПоОКПО,
|Контрагент.ОсновнойБанковскийСчет.НомерСчета КАК РасчетныйСчет,
|Контрагент.ОсновнойБанковскийСчет.Банк.Наименование КАК НаименованиеБанка,
|Контрагент.ОсновнойБанковскийСчет.Банк.Код КАК БИКБанка,
|Контрагент.ОсновнойБанковскийСчет.Банк.КоррСчет КАК КоррСчетБанка,
|Контрагент.ОсновнойДоговорКонтрагента.ВидДоговора КАК ВидДоговора,
|Контрагент.ОсновнойДоговорКонтрагента.Номер КАК НомерДоговора,
|Контрагент.ОсновнойДоговорКонтрагента.Дата КАК ДатаДоговора,
|Контрагент.ОсновнойДоговорКонтрагента.СрокДействия КАК СрокДействия,
|ИЗ Документ.ПоступлениеТоваровУслуг";
РезультатЗапроса = МойЗапрос.Выполнить().Выбрать();

выводится сообщение об ошибке
{(17, 1)}: Синтаксическая ошибка «ИЗ»
<<?>>ИЗ Документ.РеализацияТоваровУслуг

kulkrise
04.11.2013 22:51 Ответ № 5

Как мне указали, ошибка здесь заключалась в запятой после СрокДействия, т.е.
перечисление схожих конструкций закончилось, а я ставлю запятую.

это исправлено, судя по тому, что ни на что не ругается из выборки запроса — уже хорошо, однако теперь ругается на следующее (при этом, когда выборка производилась из справочника контрагентов не запросом, а выборкой данных, в обработке этой строки проблем не наблюдалось):

Код 1C v 8.2 УП

    Если НЕ РезультатЗапроса.ПометкаУдаления Тогда

Код 1C v 8.2 УП

 Пока РезультатЗапроса.Следующий() Цикл
// Исключение объектов, помеченных на удаление
Если НЕ РезультатЗапроса.ПометкаУдаления Тогда
// Тело цикла
КонецЕсли;
КонецЦикла;
E_Migachev
04.11.2013 23:41 Ответ № 6

(5) kulkrise, так создавай запрос через конструктор и не будет проблем
эти запросы совершенно неправильные

Mokey
05.11.2013 11:23 Ответ № 7

В первом посте запятых нет вообще, во втором — лишняя перед ИЗ, вот и весь вопрос

DJ_Serega
05.11.2013 11:28 Ответ № 8

Непонятен смысл запроса. А на ошибки уже указали.

Подсказка: Вы можете добавить любую страничку в Избранное щелкнув по значку

Понравилась статья? Поделить с друзьями:
  • Синоним слову исправить ошибки
  • Синоним типовые ошибки
  • Синоним слова совершать ошибки
  • Синоним слова ошибка оплошность
  • Синоним слова исправление ошибок