Имя: Пароль:
1C
1С v8
Синтаксическая ошибка в запросе
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) также спасибо за участие в обсуждении