|
v7: Выполнение рачетов в запросе. | ☑ | ||
---|---|---|---|---|
0
exec11
15.04.21
✎
13:21
|
Сейчас у меня отчет выглядит не по человечески. Сначало идет детализация, потом итоговая строка для групп. В ней суммирование, оно делается в коде ручками.
Хочется привести к человеческому виду. То есть на оборот. Строка с сумирование по группе. Посути текущая стоимость товара в группе. Потом детализация. И так. Есть регистр по партиям товаров. Он участвует в запрос. Код не привожу, там много лишнего. Вопрос пока узкий. Нужно. Получить стоимость группы товаров по текущей (прайсовой) цене. Сделать это надо в запросе. В коде сейчас я это делаю так: |Функция КонКол=КонОст(ЗапОстаток); СуммОбщий = СуммОбщий + Запрос.ЗапНоменклатура.Цена.Получить(РабочаяДата()) * Запрос.КонКол Была смелая мысль в запрос добавить: |Функция СумДок=Сумма(ЗапНоменклатура.Цена.Получить(РабочаяДата()) * КонКол); но она провлилась. Не нравится КонКол, хотя он стоит чуть выше в запросе. Может что почитать по функция подскажите.. в интернете пока что то не находится интересное .. |
|||
1
Builder
15.04.21
✎
13:35
|
Получить() в запросе не надо, он возьмет значение на последнюю дату периода в запросе.
Ну и вот как то так работало вроде: |Функция СумДок=Сумма(ЗапНоменклатура.Цена * Запрос.КонКол ); |
|||
2
Mikeware
15.04.21
✎
13:38
|
для реализации таких "смелых мыслей" лучше использовать прямые запросы.
|
|||
3
Builder
15.04.21
✎
13:40
|
+ к(1) Еще при такой записи был прикол с округлением.
|
|||
4
2S
15.04.21
✎
13:45
|
А свою функцию чего не описать?
|
|||
5
GreyK
15.04.21
✎
13:46
|
Можно и так:
//_____________________________________________________________________________ Функция ПолучитьКолКуплено(Товар,ТекущийДокумент) Перем ТСтрока; Себестоимость=0; Если ТаблДвижений.НайтиЗначение(Товар,ТСтрока,"Товар")=1 Тогда Расходы=ТаблДвижений.ПолучитьЗначение(ТСтрока,"Расходы"); ТСтрока=0; Если Расходы.НайтиЗначение(ТекущийДокумент,ТСтрока,"Документ")=1 Тогда Себестоимость=Расходы.ПолучитьЗначение(ТСтрока,"СуммаКуплено"); Расходы.УстановитьЗначение(ТСтрока,"СуммаКуплено",0); КолКуплено=Расходы.ПолучитьЗначение(ТСтрока,"КолКуплено"); Расходы.УстановитьЗначение(ТСтрока,"КолКуплено",0); Возврат КолКуплено; КонецЕсли; КонецЕсли; Возврат 0; КонецФункции //ПолучитьКолКуплено //_____________________________________________________________________________ Функция ПолучитьСебестоимость() Возврат Себестоимость; КонецФункции //ПолучитьСебестоимость ..... |Функция КолКуплено = Сумма(Количество-Количество+ПолучитьКолКуплено(Товар,ТекущийДокумент)); |Функция СуммаКуплено = Сумма(Сумма-Сумма+ПолучитьСебестоимость());"; |
|||
6
DimVad
15.04.21
✎
13:46
|
"Строка с сумирование по группе. Посути текущая стоимость товара в группе. Потом детализация. "
Ну если суммирование делается в коде ручками то можно сделать в коде расчеты (первый проход), вывести заголовок а потом - расшифровку (второй проход). Можно данные из запроса брать в таблицу значений тогда всё будет легко с группировками. Ну а можно всё это "рукапашество" попробовать заменить на отчёт на СКД, там разные интересные функции есть... |
|||
7
DimVad
15.04.21
✎
13:47
|
Тьфу, не посмотрел что это про клюшки. Простите пожалуйста...
|
|||
8
Builder
15.04.21
✎
13:48
|
(6) СКД на клюшках - это сильно :)
Такие отчеты проще делать на ИндексированнойТаблице |
|||
9
Mikeware
15.04.21
✎
13:49
|
(7) первая часть как раз легко реализуется и на клюшках тоже.
А индексированнаяТаблица заменить СКД во многих случаях. |
|||
10
Mikeware
15.04.21
✎
13:50
|
(8) ну пытался же кто-то сделать нечто подобное...
году в 2007-2008. |
|||
11
DimVad
15.04.21
✎
13:52
|
(9) Да, в первой части я имел в виду таблицу с индексами (это в терминах снеговика). Выгрузил все данные из запроса, добавил нужные индексы, и поехало - вот такие группы, вот отбор по группам...
|
|||
12
Mikeware
15.04.21
✎
13:55
|
(11) с индексированнойТаблицей примерно так же - Сгруппировать, выражения группировки ему, и выражения суммирования - на выходе получаешь по сути дерево готовое, его и выводишь - хоть рекурсивно, хоть вручную. для ускорения можно и индексов накинуть
|
|||
13
exec11
15.04.21
✎
14:12
|
(1) Ошибка:
|Функция КонКол=КонОст(ЗапОстаток); |Функция СумДок=Сумма(ЗапНоменклатура.Цена * КонКол); КОНКОЛ<<?>> Переменная не определена (КОНКОЛ) Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда {Отчет.ПоГруппам1.Форма.Модуль(36)}: Функция СумДок=Сумма(ЗапНоменклатура.Цена * КонКол <<?>> ); Запрос[12] : Ошибка в выражении 'КонКол' |
|||
14
Builder
15.04.21
✎
14:31
|
(13) Даже скопипастить сложно? Или посмотреть внимательно что в (1) написано.
* Запрос.КонКол |
|||
15
Злопчинский
15.04.21
✎
14:56
|
"Строка с сумирование по группе. По сути текущая стоимость товара в группе. Потом детализация."
навоз-вопрос, все делается штатно, например таким извратом типа как в (6) - выводишь строку-группу, итог = пусто. запоминаешь адрес. - выводишь детализацию. считаешь итог. - закончилась детализация - получаешь ячейку отчета по замомненному адресу - в свойство Текст пишешь итог |
|||
16
Mikeware
15.04.21
✎
14:59
|
(15) но ведь приятно, когда ИТЗ сделает это вместо тебя, не правда ли?
|
|||
17
Злопчинский
15.04.21
✎
15:09
|
(16) а то!
одно бесит! плюсик как модификатор сортировки - похерили в ИТЗ, только "-" оставили... неудобно иногда |
|||
18
Злопчинский
15.04.21
✎
15:10
|
(16) если бы еще ИТЗ так работала когда поменял в Тзпотомок колонку числовую суммировочную - на родительском уровне - оно само скорректировалось в итоговом значении...
а то приходится извращаться... |
|||
19
Cthulhu
15.04.21
✎
15:11
|
(16): если ради только этого добавлять 1спп - то неправда.
|
|||
20
Злопчинский
15.04.21
✎
15:12
|
(19) ну, можно еще выполняемым модулем генерить исключения вменяемо
|
|||
21
Cthulhu
15.04.21
✎
15:14
|
(20): а еще можно собаку завести...
|
|||
22
exec11
15.04.21
✎
15:17
|
(13) Моя не внимательность. Каюсь. Все получилось.
Теперь для расчета в в процентах от общий стоимости по группам, нужно все просумировать. Добавляем еще одну строку : |Функция КонКол=КонОст(ЗапОстаток); |Функция СумДок=Сумма(ЗапНоменклатура.Цена * Запрос.КонКол); |Функция СумОбщая=Сумма(Запрос.СумДок); Вроде логичо. Но не получилось. СумДок и СумОбщая оказались равными. Накопления не происходит. Почему ? (15) - закончилась детализация - получаешь ячейку отчета по замомненному адресу - в свойство Текст пишешь итог Интересненько, это как ? По сути то что надо. А можно как то по подробней ? Или где почитать ?? |
|||
23
Mikeware
15.04.21
✎
15:23
|
(19) 1спп и формекс уже давно входят в джентльменский набор джентльменов-клюшечников.
(21) зачем тебе заводная собака? |
|||
24
Mikeware
15.04.21
✎
15:23
|
(22) Область(запомненыйАдрес).Текст=формат(Итог)
|
|||
25
Злопчинский
15.04.21
✎
15:35
|
(22) "Вроде логичо. Но не получилось. СумДок и СумОбщая оказались равными. Накопления не происходит. Почему ?"
потому что это сущности одного уровня иерархии. паралельно считаются, друг от друга ника кне зависятю |
|||
26
exec11
15.04.21
✎
16:31
|
(25) Как накопить в запросе сумму всех СумДок ? Ни как ?
(24) Спасибо, буду изучать ! |
|||
27
ADirks
16.04.21
✎
06:47
|
(26) можешь ещё тут поизучать https://infostart.ru/public/15510/
|
|||
28
Злопчинский
16.04.21
✎
09:36
|
(26) Группировкой в запросе, ясен пень.
Сделай искуственную группировку, на самом верхнем уровне, на этой группировке будет сумма всех сумм |
|||
29
Arbuz
16.04.21
✎
16:27
|
(16) Ещё приятнее когда это делают оконные функции SQL
|
|||
30
Злопчинский
16.04.21
✎
21:22
|
(29) отсыпьте мне...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |