СКД: Как рассчитать вычисляемое поле начиная только с опред. группировки и выше? #502589


#0 by Alexx_MNH
Задача: Отчет написан на СКД. Группировки: 1. Менеджер 2. Контрагент Нужно рассчитывать общее значение вычисляемого поля (долга) по контрагенту в целом, при том, что у разных адресов значение долга различно по факту. Кроме этого нужно, чтобы полученные значения долга по контрагентам суммировались по Менеджеру и по общему итогу. Значение долга вычисляется функцией общего модуля. ПРИЧЕМ!!! : суммарный долг по каждому адресу не равен общему долгу по контрагенту, т.к. последний учитывает взаимосвязи всех документов по контрагенту. Проблема в чем - если вывожу долг для каждого адреса равным общему по контрагенту, то чтобы по контрагенту было корректное значение - получаю для него функцией Максимум. Однако для вышестоящих группировок такой фокус не проходит - нужно, чтобы значения, полученные по контрагентам, суммировались. А если для остальных группировок в настройке реквизитов указываю сумма(долг), то суммируются и значения по адресам, в результате чего получаем неверное значение. Подскажите плиз как можно это реализовать на СКД?
#1 by Kashemir
Двумя наборами реализуй. Расчет итогов каждой группировки в этой ситуации будет идти отдельно.
#2 by Alexx_MNH
Так у меня долг - вычисляемое поле - оно же вычисляется и присоединяется уже после обработки наборов? Может как-то через вложенную схему сделать, типа - во вложенной получаем набор без адресов и регистраторов, но с долгом, а потом доворачиваем их? Но опять же как тогда их объединять - долги же замножатся?
#3 by Kashemir
Попробую с приближением к условию задачи. Основной набор создаешь с детализацией до торговой точки. В дополнительный наборе рассчитывай общий долг  без детализации до торговой точки(адреса). Естественно соединения наборов не будут содержать соединения по торговой точке. В этой ситуации при выводе значения долга с детализацией до торговой точке для каджой будут повторяться значения общего долга контрагента, однако при получении итога в разрезе всего контрагента значения не будут суммироваться и все так же будет значение общего долга контрагента, однако на вышестоящих группировках (по которым были соединения) будут корректно расчитаны итоги (к примеру  просуммированы задолженности всех контрагентов менеджера)
#4 by НЕА123
игры с NULL не смогут помочь?
#5 by Alexx_MNH
Интересное предложение! Спасибо! Сейчас попробую! По результатам отпишусь. Можно по-подробнее, что имеешь под этим в виду?
#6 by НЕА123
насчет имеется ввиду: по NULL можно определить, какая группировка (утверждение с натяжкой...). т.е., например, если то это группировка по Контрагенту.
#7 by Alexx_MNH
Не прокатит. СКД, насколько я понимаю логику ее работы, формирует набор записей, а группировка происходит на последнем этапе перед выводом информации. Т.е. когда я получаю значение долга - группировок еще нет. Вот если бы можно было на вкладке Ресурсы указывать вместо стандартных фукций суммы и т.п. вызов функции общего модуля, то тогда бы внутри самой функции можно было бы делать проверку на NULL, чтобы определить для какой группировки мы получаем значение...
#8 by НЕА123
не знаю, как там у тебя сделано. у меня работало.
#9 by Alexx_MNH
Хых! А по ходу дела так делать можно! Тогда этот вариант тоже можно проверить. В первую очередь проверю вариант с двумя наборами, т.к. он кажется более технически правильным. Затем, если не получится - с NULL и результат скину.
#10 by Alexx_MNH
> В дополнительный наборе рассчитывай общий долг  без детализации до торговой точки(адреса). А как рассчитать вычисляемое поле только по одному из наборов данных? Вычисляемые поля рассчитываются же уже после связывания данных различных наборов? Или нет?
#11 by Kashemir
Не могу понять зачем тебе вообще вычисляемое поле. В зависимости от ситуации схема сама определяет возможно ли добавить расчет вычисляемого поля в сам запрос, либо требуется программный дорасчет после получения результатов запроса и связывания. В случае когда в вычисляемом поле используется данные 2 наборов - естественно рассчет будет после связывания.
#12 by Kashemir
+ Если все так уж хочется расчет программный делать - в этой ситуации гораздо быстрее будет расчитать долги гамузом и скормить дополнительным набором типа объект (ТЗ).
#13 by Alexx_MNH
В моей ситуации для получения значения долга используется функция общего модуля, внутри которой идет сложный рассчет. Переносить рассчет внутрь запроса практически нереально. Сейчас попробую, кнечна, указать поля одного набора в параметрах функции, рассчитывающей поле. Однако терзают меня следующие сомнения: функцию 1с в запрос схема вставить не сможет, т.к. язык запросов 1с8 их не поддерживает. Поэтому наверняка навесит ее на объединение. А в этом случае значения одного и того же поля будут заполнены и для адресов и учитываться в суммировании верхних группировок.
#14 by Alexx_MNH
Что значит расчитать гамузом?
#15 by Alexx_MNH
(10,11) Попробовал объединением наборов - все равно считает значения некорректно. Попробовал рассчитывать количество адресов и делить на это количество итоги по группам, однако считает неправильно - делит почему-то на меньшее количество... :(
#16 by Alexx_MNH
Всем спасибо! Победил таки данную задачу. Решил через рассчет количества адресов в отдельном наборе и делением долга контрагента общего, который привязывался к строкам итогов по адресам на их количество. Изначально считалось не правильно, т.к. в наборе я указал отбор по адресу в настройках построителя и хоть выбирал из запроса только контрагента и суммарное значение его адресов, тем не менее при связи наборов отбор по адресу все-таки происходил. После убирания отбора в наборе все стало нормально.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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