Имя: Пароль:
1C
 
Вычисление процента от числа в запросе через СКД
0 bplmeddy
 
13.04.17
13:11
Доброго времени суток.
При написании отчёта на СКД, необходимо посчитать процент от числа.
Текст запроса (ВНИМАНИЕ! Много текста!)

ВЫБРАТЬ
    КассыОбороты.БалансКассыРасход,
    ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2)) КАК РасходДол,
    КассыОбороты.Период КАК Период,
    КОЛИЧЕСТВО(РасходнойДокумент.Ссылка) КАК КолПрод,
    ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот КАК СумаПродаж,
    ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот КАК СумаЗакупки,
    ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот КАК Прибыль,
    (ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) / ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот * 100 КАК ВПрибыль,
    (ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) / ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот * 100 КАК ВСебестоимость,
    Валюты.Курс
ИЗ
    РегистрНакопления.Кассы.Обороты(, , День, ТорговаяТочкаКассы.Ссылка = &ТоргТочка) КАК КассыОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, День, Склад.Ссылка = &ТоргТочка) КАК ПродажиОбороты
        ПО КассыОбороты.Период = ПродажиОбороты.Период
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнойДокумент КАК РасходнойДокумент
        ПО (РасходнойДокумент.Дата МЕЖДУ КассыОбороты.Период И КОНЕЦПЕРИОДА(КассыОбороты.Период, ДЕНЬ))
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Валюты
        ПО КассыОбороты.Валюта = Валюты.Ссылка
ГДЕ
    Валюты.Ссылка = &Валюта
    И РасходнойДокумент.Склад = &ТоргТочка

СГРУППИРОВАТЬ ПО
    КассыОбороты.БалансКассыРасход,
    КассыОбороты.Период,
    ПродажиОбороты.КоличествоОборот,
    ПродажиОбороты.ЦенаПродОборот,
    ПродажиОбороты.ЦенаЗакупОборот,
    ПродажиОбороты.ПрибыльОборот,
    Валюты.Курс

УПОРЯДОЧИТЬ ПО
    Период

Так вот, подозреваю, что проблема состоит в том, что система считает значение по формуле, но с неправильной последовательностью. Круглые скобки тоже игнорирует (к примеру: в тексте запроса проставляю скобки - без изменений, если скобки проставить а потом открыть конструктор запроса и даже без правок закрыт, система скобки отсекает). Буду очень благодарен за помощь в решении данной проблемы.
1 bplmeddy
 
13.04.17
13:12
(0) И да, оперировать в формулах значениями полученными в ходе предыдущих вычислений (СумаПродаж, СумаЗакупки) тоже не получается.
2 bplmeddy
 
13.04.17
13:14
(1) Забыл сказать: на выходе результаты подсчётов получаются совершенно астрономические.
3 bplmeddy
 
13.04.17
13:17
(0) Ещё уточнение, неправильный подсчёт идёт по этим формулам:

(ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) / ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот * 100 КАК ВПрибыль,
    (ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) / ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот * 100 КАК ВСебестоимость,
4 bplmeddy
 
13.04.17
13:59
Я так понимаю, никто не в курсе ? =)
5 bplmeddy
 
13.04.17
14:10
Лююююдиииии ау ! =)
6 anreko
 
13.04.17
14:16
Видимо нужно срочно менять блок "СГРУППИРОВАТЬ ПО", иначе без глубокого анализа не понять, что в итоге СУБД может выдать.
7 Одинесю
 
13.04.17
14:17
Разбей формулу на составляющие и проверяй что не так.
8 bplmeddy
 
13.04.17
14:18
(6) (7) Сейчас попробую.
9 anreko
 
13.04.17
14:25
А если такой попробовать, что-нибудь запрос Вам выдаст?

ВЫБРАТЬ
    СУММА(КассыОбороты.БалансКассыРасход),
    СУММА(ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) КАК РасходДол,
    КассыОбороты.Период КАК Период,
    КОЛИЧЕСТВО(РасходнойДокумент.Ссылка) КАК КолПрод,
    СУММА(ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот) КАК СумаПродаж,
    СУММА(ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) КАК СумаЗакупки,
    СУММА(ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) КАК Прибыль,
    СУММА((ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) / ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот * 100) КАК ВПрибыль,
    СУММА((ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) / ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот * 100) КАК ВСебестоимость,
    Валюты.Курс
ИЗ
    РегистрНакопления.Кассы.Обороты(, , День, ТорговаяТочкаКассы.Ссылка = &ТоргТочка) КАК КассыОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, День, Склад.Ссылка = &ТоргТочка) КАК ПродажиОбороты
        ПО КассыОбороты.Период = ПродажиОбороты.Период
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнойДокумент КАК РасходнойДокумент
        ПО (РасходнойДокумент.Дата МЕЖДУ КассыОбороты.Период И КОНЕЦПЕРИОДА(КассыОбороты.Период, ДЕНЬ))
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Валюты
        ПО КассыОбороты.Валюта = Валюты.Ссылка
ГДЕ
    Валюты.Ссылка = &Валюта
    И РасходнойДокумент.Склад = &ТоргТочка

СГРУППИРОВАТЬ ПО
    КассыОбороты.Период,
    Валюты.Курс

УПОРЯДОЧИТЬ ПО
    Период
10 bplmeddy
 
13.04.17
14:25
(6) Ничего не поменялось (при очистке группировки данные вообще начинают множественно дублироваться)
11 bplmeddy
 
13.04.17
14:28
(9) Всё то-же самое. =(
12 bplmeddy
 
13.04.17
14:30
ВЗЫВАЮ К СИЛЕ ВОЛШЕБНОГО ФОРУМА !!!
13 Вафель
 
13.04.17
14:32
% = А/Б*100
14 Вафель
 
13.04.17
14:33
но тут скорее всего что процент нужно по группировкам считать.
Те выражение нужно писать в ресурсах
15 dezss
 
13.04.17
14:34
Если это взять в скобки, то конструктор их отсекает? О_о
ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот
16 bplmeddy
 
13.04.17
14:34
(13) Формула вычисления процента мне известна.
17 bplmeddy
 
13.04.17
14:34
(15) Да, после открытия, закрытия конструктора, скобки пропадают.
18 dezss
 
13.04.17
14:34
(15) Всмысле, вот так
(ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) / (ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот) * 100 КАК ВПрибыль,
19 bplmeddy
 
13.04.17
14:35
(18) Да, система их игнорирует, а конструктор убирает.
20 bplmeddy
 
13.04.17
14:35
Прям восстание машин...
21 dezss
 
13.04.17
14:36
(20) А если в вычисляемые поля запихнуть?
22 bplmeddy
 
13.04.17
14:36
(21) Хмм, сейчас попробую.
23 dezss
 
13.04.17
14:37
(20) тогда есть одно решение
(ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход / Валюты.Курс КАК ЧИСЛО(10, 2))) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) / ПродажиОбороты.КоличествоОборот / ПродажиОбороты.ЦенаПродОборот * 100 КАК ВПрибыль,
24 anreko
 
13.04.17
14:37
Что мешает использовать временную таблицу, там рассчитать все цифры, а дополнительным запросом прибавить проценты?
25 Йохохо
 
13.04.17
14:54
в справке написано что надо так
ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход КАК ЧИСЛО(10, 2)) / Валюты.Курс
26 bplmeddy
 
13.04.17
14:55
(25)
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(9, 127)}: Синтаксическая ошибка
(ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот - (ВЫРАЗИТЬ(КассыОбороты.БалансКассыРасход КАК ЧИСЛО(10, 2) <<?>>/ Валюты.Курс)) - ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаЗакупОборот) / ПродажиОбороты.КоличествоОборот * ПродажиОбороты.ЦенаПродОборот * 100 КАК ВПрибыль,
27 bplmeddy
 
13.04.17
14:56
(26) Упс...секунду, затупил.
28 dezss
 
13.04.17
14:57
(27) ты попробуй 2 раза делить, как в (23)
29 bplmeddy
 
13.04.17
14:57
(27) (26) (25) Нет, все равно не работает. А вот в (21) вроде получается, сейчас попробую полностью переделать и отпишусь.
30 dezss
 
13.04.17
14:59
(29) да погодь ты все ломать....сделай как в (23)
31 2dolist
 
13.04.17
14:59
в конструкторе запросов забей, да покрути формулы
32 bplmeddy
 
13.04.17
15:05
(30) Сейчас попробую.
33 bplmeddy
 
13.04.17
15:12
(30) (28) (23) Долгих, здоровых и богатых тебе лет, добрый человек. =) Спасибо, всё теперь правильно, сам бы до такой фигни вряд-ли додумался бы.