![]() |
![]() |
![]() |
|
Умножение в запросе [Решение] | ☑ | ||
---|---|---|---|---|
0
twilight5023
16.09.09
✎
18:09
|
Наткнулся тут на похожую тему - Умножение в запросе , вообщем в некоторых случаях нужно реализовать умножение в запросе. Пример реальной задачи. Торговля и Склад. Товар забит с базовой единицей штука, а основной, ну к примеру коробка. Требуется в отчете "Ведомость по остаткам ТМЦ" получить результаты в килограммах. Решением в такой ситуации может послужить конечно списание всего товара, заведение в справочник номенклатуры нового товара, с базовой единицей кг. А можно и изменить запрос. Только вот каким образом умножать количество на вес базовой единицы, чтобы еще и в группах получать корректные значения. На самом деле все очень просто, вводим в запрос дополнительную переменную вес:
|Вес = Регистр.ОстаткиТМЦ.Номенклатура.БазоваяЕдиница.Вес, | Регистр.РезервыТМЦ.Номенклатура.БазоваяЕдиница.Вес; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоНачОст = НачОст(Количество); Функция КоличествоНачОст у нас уже есть, остается придумать как посчитать КоличествоНачОст * Вес (при обходе группировок делать это тяжко, принимая во внимание что у нас выводятся итоги по группам, намного проще было бы, если бы процедура умножения производилась в самом запросе. Если сделать что-то вроде: |Функция ВесНачОст = Сумма(Запрос.КоличествоНачОст * Вес); То результат получится. Но к сожалению функция Сумма округляет результат до целых, отбрасывая дробную часть. Что непреемлемо. Несколько простых примеров: |Функция ПростоСумма = Сумма(9.9); при одном "суммировании" внутри запроса выдаст 10 вместо 9.9, однако Функция ПростоСумма = Сумма(9.9 + ПеременнаяЗапроса - ПеременнаяЗапроса); Выдаст 9.9 с точностью, которую имеет ПеременнаяЗапроса. Т.е. если у переменной запроса точность знаков после запятой 4, то Сумма выдаст 9.9000. Итого для подсчета начального остатка веса получаем следующую функцию: |Функция ВесНачОст = Сумма(Запрос.КоличествоНачОст * Вес + Количество - Количество); Не так красиво на первый взгляд - но зато работает, и выдает корректные результаты по группам. |
|||
1
Ковычки
16.09.09
✎
18:11
|
Условие( и че хошь считай
|
|||
2
twilight5023
16.09.09
✎
18:14
|
(1) Ну расскажи мне как посчитать с условием начальный остаток по регистру ОстаткиТМЦ в тоннаже? Нет, даже проще задача ... получить в запросе начальный остаток по ресурсу Количество умноженный на 2. Именно чтобы умножение происходило в запросе. Куда и как ты собираешься это условие впихнуть?
|
|||
3
twilight5023
16.09.09
✎
18:15
|
+2 С функцией НачОст в запросе ты никакого умножения не сделаешь. А на функцию Сумма не наложишь условия чтобы она считала начальный остаток. И?
|
|||
4
Ковычки
16.09.09
✎
18:18
|
(2) а кто сказал, что результат будет в запросе
|
|||
5
twilight5023
16.09.09
✎
18:20
|
(4) В условии зачачи сказано, что требуется получить "результат умножения в запросе". При обходе группировок зачастую сложновато что-то подсчитывать, в случае если требуется получить итоги по группам.
|
|||
6
МихаилМ
16.09.09
✎
19:00
|
то(0)
решение красивое. НО для SQL версии не эффективное тк подобное умножение 1с77 будет выполнять построчно на клиенте а затем агрегировать . те объем пересылаемой выборки будет на порядки больше. |
|||
7
Fragster
гуру
16.09.09
✎
19:04
|
Сумма(Выразить(9.9 как Число 10,3)) или какой там синтаксис...
|
|||
8
Fragster
гуру
16.09.09
✎
19:05
|
а, это 7... тогда пас.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |