Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Выполнение рачетов в запросе.

v7: Выполнение рачетов в запросе.
Я
   exec11
 
15.04.21 - 13:21
Сейчас у меня отчет выглядит не по человечески. Сначало идет детализация, потом итоговая строка для групп. В ней суммирование, оно делается в коде ручками.
Хочется привести к человеческому виду. То есть на оборот. Строка с сумирование по группе. Посути текущая стоимость товара в группе. Потом детализация.

И так. Есть регистр по партиям товаров. Он участвует в запрос. Код не привожу, там много лишнего. Вопрос пока узкий.
Нужно. Получить стоимость группы товаров по текущей (прайсовой) цене. Сделать это надо в запросе.

В коде сейчас я это делаю так:
        |Функция КонКол=КонОст(ЗапОстаток);

    СуммОбщий = СуммОбщий + Запрос.ЗапНоменклатура.Цена.Получить(РабочаяДата())  *  Запрос.КонКол

Была смелая мысль в запрос добавить:

    |Функция СумДок=Сумма(ЗапНоменклатура.Цена.Получить(РабочаяДата())  * КонКол);

но она провлилась. Не нравится КонКол, хотя он стоит чуть выше в запросе.

Может что почитать по функция подскажите.. в интернете пока что то не находится интересное ..
   Builder
 
1 - 15.04.21 - 13:35
Получить() в запросе не надо, он возьмет значение на последнюю дату периода в запросе.
Ну и вот как то так работало вроде:

  |Функция СумДок=Сумма(ЗапНоменклатура.Цена  * Запрос.КонКол );
   Mikeware
 
2 - 15.04.21 - 13:38
для реализации таких "смелых мыслей" лучше использовать прямые запросы.
   Builder
 
3 - 15.04.21 - 13:40
+ к(1) Еще при такой записи был прикол с округлением.
   2S
 
4 - 15.04.21 - 13:45
А свою функцию чего не описать?
   GreyK
 
5 - 15.04.21 - 13:46
Можно и так:

//_____________________________________________________________________________

Функция ПолучитьКолКуплено(Товар,ТекущийДокумент)
    Перем ТСтрока;
    Себестоимость=0;
    Если ТаблДвижений.НайтиЗначение(Товар,ТСтрока,"Товар")=1 Тогда
        Расходы=ТаблДвижений.ПолучитьЗначение(ТСтрока,"Расходы");
        ТСтрока=0;
        Если Расходы.НайтиЗначение(ТекущийДокумент,ТСтрока,"Документ")=1 Тогда
            Себестоимость=Расходы.ПолучитьЗначение(ТСтрока,"СуммаКуплено");
            Расходы.УстановитьЗначение(ТСтрока,"СуммаКуплено",0);
            КолКуплено=Расходы.ПолучитьЗначение(ТСтрока,"КолКуплено");
            Расходы.УстановитьЗначение(ТСтрока,"КолКуплено",0);
            Возврат КолКуплено;
        КонецЕсли;
    КонецЕсли;
    Возврат 0;
КонецФункции//ПолучитьКолКуплено

//_____________________________________________________________________________
Функция ПолучитьСебестоимость()
    Возврат Себестоимость;
КонецФункции//ПолучитьСебестоимость



.....
    |Функция КолКуплено = Сумма(Количество-Количество+ПолучитьКолКуплено(Товар,ТекущийДокумент));
    |Функция СуммаКуплено = Сумма(Сумма-Сумма+ПолучитьСебестоимость());";
   DimVad
 
6 - 15.04.21 - 13:46
"Строка с сумирование по группе. Посути текущая стоимость товара в группе. Потом детализация. "
Ну если суммирование делается в коде ручками то можно сделать в коде расчеты (первый проход), вывести заголовок а потом - расшифровку (второй проход).

Можно данные из запроса брать в таблицу значений тогда всё будет легко с группировками.
Ну а можно всё это "рукапашество" попробовать заменить на отчёт на СКД, там разные интересные функции есть...
   DimVad
 
7 - 15.04.21 - 13:47
Тьфу, не посмотрел что это про клюшки. Простите пожалуйста...
   Builder
 
8 - 15.04.21 - 13:48
(6) СКД на клюшках - это сильно :)
Такие отчеты проще делать на ИндексированнойТаблице
   Mikeware
 
9 - 15.04.21 - 13:49
(7) первая часть как раз легко реализуется и на клюшках тоже.  
А индексированнаяТаблица заменить СКД во многих случаях.
   Mikeware
 
10 - 15.04.21 - 13:50
(8) ну пытался же кто-то сделать нечто подобное...
году в 2007-2008.
   DimVad
 
11 - 15.04.21 - 13:52
(9) Да, в первой части я имел в виду таблицу с индексами (это в терминах снеговика). Выгрузил все данные из запроса, добавил нужные индексы, и поехало - вот такие группы, вот отбор по группам...
   Mikeware
 
12 - 15.04.21 - 13:55
(11) с индексированнойТаблицей  примерно так же - Сгруппировать, выражения группировки ему, и выражения суммирования - на выходе получаешь по сути дерево готовое, его и выводишь - хоть рекурсивно, хоть вручную. для ускорения можно и индексов накинуть
   exec11
 
13 - 15.04.21 - 14:12
(1) Ошибка:

    |Функция КонКол=КонОст(ЗапОстаток); 
    |Функция СумДок=Сумма(ЗапНоменклатура.Цена  * КонКол);

    КОНКОЛ<<?>>
    Переменная не определена (КОНКОЛ)
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    {Отчет.ПоГруппам1.Форма.Модуль(36)}: Функция СумДок=Сумма(ЗапНоменклатура.Цена  * КонКол <<?>> );    
    Запрос[12] : Ошибка в выражении 'КонКол'
   Builder
 
14 - 15.04.21 - 14:31
(13) Даже скопипастить сложно? Или посмотреть внимательно что в (1) написано.
* Запрос.КонКол
   Злопчинский
 
15 - 15.04.21 - 14:56
"Строка с сумирование по группе. По сути текущая стоимость товара в группе. Потом детализация."
навоз-вопрос, все делается штатно, например таким извратом типа как в (6)
- выводишь строку-группу, итог = пусто. запоминаешь адрес.
- выводишь детализацию. считаешь итог.
- закончилась детализация - получаешь ячейку отчета по замомненному адресу - в свойство Текст пишешь итог
   Mikeware
 
16 - 15.04.21 - 14:59
(15) но ведь приятно, когда ИТЗ сделает это вместо тебя, не правда ли?
   Злопчинский
 
17 - 15.04.21 - 15:09
(16) а то!
одно бесит! плюсик как модификатор сортировки - похерили в ИТЗ, только "-" оставили... неудобно иногда
   Злопчинский
 
18 - 15.04.21 - 15:10
(16) если бы еще ИТЗ так работала когда поменял в Тзпотомок колонку числовую суммировочную - на родительском уровне - оно само скорректировалось в итоговом значении...
а то приходится извращаться...
   Cthulhu
 
19 - 15.04.21 - 15:11
(16): если ради только этого добавлять 1спп - то неправда.
   Злопчинский
 
20 - 15.04.21 - 15:12
(19) ну, можно еще выполняемым модулем генерить исключения вменяемо
   Cthulhu
 
21 - 15.04.21 - 15:14
(20): а еще можно собаку завести...
   exec11
 
22 - 15.04.21 - 15:17
(13) Моя не внимательность. Каюсь. Все получилось.

Теперь для расчета в в процентах от общий стоимости по группам, нужно все просумировать. Добавляем еще одну строку :


    |Функция КонКол=КонОст(ЗапОстаток); 
    |Функция СумДок=Сумма(ЗапНоменклатура.Цена  * Запрос.КонКол);    

    |Функция СумОбщая=Сумма(Запрос.СумДок);

Вроде логичо. Но не получилось. СумДок и СумОбщая оказались равными. Накопления не происходит. Почему ?

(15) - закончилась детализация - получаешь ячейку отчета по замомненному адресу - в свойство Текст пишешь итог

Интересненько, это как ? По сути то что надо. А можно как то по подробней ? Или где почитать ??
   Mikeware
 
23 - 15.04.21 - 15:23
(19) 1спп и формекс уже давно входят в джентльменский набор  джентльменов-клюшечников.
(21) зачем тебе заводная собака?
   Mikeware
 
24 - 15.04.21 - 15:23
(22) Область(запомненыйАдрес).Текст=формат(Итог)
   Злопчинский
 
25 - 15.04.21 - 15:35
(22) "Вроде логичо. Но не получилось. СумДок и СумОбщая оказались равными. Накопления не происходит. Почему ?"
потому что это сущности одного уровня иерархии. паралельно считаются, друг от друга ника кне зависятю
   exec11
 
26 - 15.04.21 - 16:31
(25) Как накопить в запросе сумму всех СумДок ?  Ни как ?

(24) Спасибо, буду изучать !
   ADirks
 
27 - 16.04.21 - 06:47
(26) можешь ещё тут поизучать https://infostart.ru/public/15510/
   Злопчинский
 
28 - 16.04.21 - 09:36
(26) Группировкой в запросе, ясен пень.
Сделай искуственную группировку, на самом верхнем уровне, на этой группировке будет сумма всех сумм
   Arbuz
 
29 - 16.04.21 - 16:27
(16) Ещё приятнее когда это делают оконные функции SQL
   Злопчинский
 
30 - 16.04.21 - 21:22
(29) отсыпьте мне...
 
 Рекламное место пустует


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.