![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1
|
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1 ![]() |
(с) http://www.forum.mista.ru/topic.php?id=432196
Наткнулся тут на похожую тему - Умножение в запросе , вообщем в некоторых случаях нужно реализовать умножение в запросе. Пример реальной задачи. Торговля и Склад. Товар забит с базовой единицей штука, а основной, ну к примеру коробка. Требуется в отчете "Ведомость по остаткам ТМЦ" получить результаты в килограммах. Решением в такой ситуации может послужить конечно списание всего товара, заведение в справочник номенклатуры нового товара, с базовой единицей кг. А можно и изменить запрос. Только вот каким образом умножать количество на вес базовой единицы, чтобы еще и в группах получать корректные значения. На самом деле все очень просто, вводим в запрос дополнительную переменную вес: Код |Вес = Регистр.ОстаткиТМЦ.Номенклатура.БазоваяЕдиница.Вес, | Регистр.РезервыТМЦ.Номенклатура.БазоваяЕдиница.Вес; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоНачОст = НачОст(Количество); Функция КоличествоНачОст у нас уже есть, остается придумать как посчитать КоличествоНачОст * Вес (при обходе группировок делать это тяжко, принимая во внимание что у нас выводятся итоги по группам, намного проще было бы, если бы процедура умножения производилась в самом запросе. Если сделать что-то вроде: Код |Функция ВесНачОст = Сумма(Запрос.КоличествоНачОст * Вес); То результат получится. Но к сожалению функция Сумма округляет результат до целых, отбрасывая дробную часть. Что непреемлемо. Несколько простых примеров: Код |Функция ПростоСумма = Сумма(9.9); при одном "суммировании" внутри запроса выдаст 10 вместо 9.9, однако Код Функция ПростоСумма = Сумма(9.9 + ПеременнаяЗапроса - ПеременнаяЗапроса); Выдаст 9.9 с точностью, которую имеет ПеременнаяЗапроса. Т.е. если у переменной запроса точность знаков после запятой 4, то Сумма выдаст 9.9000. Итого для подсчета начального остатка веса получаем следующую функцию: Код |Функция ВесНачОст = Сумма(Запрос.КоличествоНачОст * Вес + Количество - Количество); Не так красиво на первый взгляд - но зато работает, и выдает корректные результаты по группам. -------------------- |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 23.6.2025, 21:20 | |
|