Запрос: распределить количество по месяцам #711684


#0 by echo77
В общем есть запрос, который возвращает выборку вида: Нужно распределить количество начиная с первого месяца таким образом, чтобы оно не превышало НадоОтгрузить в этом месяце, т.е. выборка должна получиться следующая Месяц      НадоОтгрузить   Отгружаем Январь          2              2 Февраль         3              1 Как проще и понятнее сделать? Если что это будет в отчете на СКД
#1 by Fragster
зачем именно запросом?
#2 by Fragster
это же в один проход делается
#3 by Wobland
я бы делал циклом и не любил мозх. как-то принцип нарастающего итога здесь не применим
#4 by echo77
Запросом, потому что отчет на СКД
#5 by Wobland
если ты не в курсе, то СКД - это система компоновки _данных_
#6 by echo77
в курсе
#7 by Bober
а есть подать в скд тз?
#8 by vicof
Можешь в выражение ресурса свою формулу запихать, все посчитается
#9 by echo77
можно, только какую? Здесь я привел простой пример. На самом деле запрос строится объединением кучи запросов В отчете куча отборов
#10 by Wobland
а с этого места поподробнее, пожалуйста. у ТС есть упорядочивание
#11 by vicof
ВычислитьВыражение, и параметрами можно получать следующее или предыдущее значение группировки. Отнимать, ВЫБОР КОГДА для сравнения с 0, ну и все, наверное
#12 by Wobland
пасиба, почитаю на досуге
#13 by echo77
пойму перечитывать свои статьи по СКД...
#14 by echo77
пойду
#15 by echo77
*пойду
#16 by echo77
Что-то не получается через ВычислитьВыражение
#17 by vicof
Это только под сильный алкоголь. У меня тоже не с первого раза получилось. Нужно просто внимательно справку к функции читать, там более-менее понятно для ванг написано.
#18 by echo77
Как пользоваться ВычислитьВыражение я знаю. Не понятно как учесть в вычислениях ранее распределенные суммы
#19 by vicof
ЛОви
#20 by Bober
пример: ВЫБОР КОГДА ВычислитьВыражение("Сумма(Количество)", , , "Первая","Предыдущая") Есть null Тогда     ВЫБОР КОГДА Количество > &КРаспределению Тогда &КРаспределению Иначе Количество Конец КОГДА ВычислитьВыражение("Сумма(Количество)", , , "Первая","Предыдущая") > &КРаспределению Тогда 0 Иначе     ВЫБОР КОГДА &КРаспределению - ВычислитьВыражение("Сумма(Количество)", , , "Первая","Предыдущая") > Количество Тогда Количество иначе &КРаспределению - ВычислитьВыражение("Сумма(Количество)", , , "Первая","Предыдущая") КОнец Конец
#21 by Kalambur
ВычислитьВыражениеСГруппировкойМассив
#22 by mikeA
как посчитать нарастающий итог запросом ты надеюсь знаешь. после этого таблица будет Месяц    НадоОтгрузить    НадоОтгрузитьИтог    ОтгруженоИтог Январь    2                2                    0 Февр    3                5                    2 Март    5                10                    5 дальше совсем просто ВЫБОР     КОГДА ОтгруженоИтог >= Количество ТОГДА 0     КОГДА ОтгруженоИтог + НадоОтгрузить > Количество ТОГДА Количество - ОтгруженоИтог     ИНАЧЕ НадоОтгрузить КОНЕЦ
#23 by DirecTwiX
Только после того, как запрос написал, понял, о каком итоге ты говоришь - сначала не стал всё сообщение читать) На здоровье: :)
#24 by Homer
он не работает, взял для примера Распределить  = 7
#25 by Лодырь
Обычное же фифо в запросе, не?
#26 by echo77
Спасибо, это перепечатка из моей статьи Но не могу сообразить как мне это поможет
#27 by Лодырь
Можно пояснить чем задача отличается от стандартной задачи распределения количества по партиям?
#28 by echo77
Думаю, ничем. Нужно реализовать в СКД. Попробую
#29 by Bober
а чем тебе вариант не устроил?
#30 by agorbunov
С нарастающим итогом, все просто ВЫБРАТЬ     Т.Месяц,     Т.НадоОтгрузить,     ТаблицаОтгрузок.НадоОтгрузить,
#31 by echo77
Пока не проверял. Сейчас буду все пробовать. Спасибо
#32 by Bober
отпишись по результату.
#33 by echo77
Не получается так. Возможно проблема в том, что у меня все это дело в разрезе номенклатуры и заказов
#34 by Bober
тогда нужно указать группировку или группировать нужным образом. я же показал пример расчета по таблице из
#35 by echo77
Этот пример вполне жизнеспособен! Спасибо! Вам тоже спасибо
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С