Помогите с СКД

1. user731414 42 05.07.17 06:08 Сейчас в теме
Подскажите пожалуйста есть отчет с группировкой с иерархией по номенклатуре, есть итоги по группам как средние значения, однако они считаются не верно, если цена поступления,продажи и наценка верны, то наценка в процентах не верна. Наценка в процентах вычисляется по формуле = наценка/цена поступления * 100.
Вопрос подскажите как в группах выводить для поля наценка в процентах не среднее значение, а что бы она вычислялась по формуле?
Настройки отчета представлены на скриншотах
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
4. spezc 782 05.07.17 06:53 Сейчас в теме
Попробуйте указать разные формулы для разных группировок (рассчитывать по) на закладке Ресурсы.
Прикрепленные файлы:
user731414; +1 Ответить
6. spezc 782 05.07.17 07:19 Сейчас в теме
Ваша СКД у меня не откроется, так как нет метаданных. Посмотрите на скрин. Добавьте два поля в ресурсы, с разными формулами и с разными "рассчитывать по"
Прикрепленные файлы:
user731414; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spezc 782 05.07.17 06:16 Сейчас в теме
Посмотрите на функцию языка выражений СКД ВычислитьВыражение. Погуглите примеры использования. Думаю это будет то, что вам нужно.

ВычислитьВыражение (EvalExpression) 
Функция ВычислитьВыражение предназначена для вычисления выражения в контексте некоторой группировки. Функция учитывает отбор группировок, но не учитывает иерархические отборы.
Функция не может применяться к группировке в групповом отборе этой группировки. 

Синтаксис:

ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)

Параметры:

Выражение. Тип Строка. Содержит вычисляемое выражение; 
Группировка. Тип Строка. Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем. Например:
Сумма(Продажи.СуммаОборот) / Вычислить("Сумма(Продажи.СуммаОборот)", "ОбщийИтог")

В данном примере в результате получится отношение суммы по полю "Продажи.СуммаОборот" записи группировки к сумме того же поля во всей компоновке;

ТипРасчета. Тип Строка. В случае если данный параметр имеет значение "ОбщийИтог", выражение будет вычисляться для всех записей группировки. 
В случае если значение параметра "Группировка", значения будут вычисляться для текущей групповой записи группировки. 
Если параметр имеет значение "ГруппировкаНеРесурса", то при вычислении функции для групповой записи по ресурсам, выражение будет вычислено для первой групповой записи исходной группировки. 
При вычислении функции ВычислитьВыражение со значением "ГруппировкаНеРесурса" для групповых записей, не являющихся группировками по ресурсам, функция вычисляется так же, как бы она вычислялась со значением параметра "Группировка". 
Компоновщик макета компоновки данных при генерации макета компоновки данных при выводе в макет поля – ресурса, по которому выполняется группировка, выдает в макет выражение, вычисляемое при помощи функции ВычислитьВыражение, с указанным параметром "ГруппировкаНеРесурса". Для остальных ресурсов в группировке по ресурсу выдаются обычные выражения ресурсов.

Если параметр имеет значение "Иерархия", то выражение нужно вычислять для родительской иерархической записи, если таковая имеется, и для всей группировки, если родительской иерархической записи не имеется. Компоновщик макета при генерации выражения для поля "% в группе иерархии" генерирует выражение, содержащее отношение выражения ресурса к функции ВычислитьВыражение для выражения ресурса, вычисляемого для текущей группировки с типом вычисления "Иерархия".

Начало. Указывает, с какой записи нужно начинать фрагмент, в котором рассчитывать агрегатные функции выражения и из какой записи получать значения полей вне агрегатных функций. Строка, содержащая одно из: 
"Первая" ("First"). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля. 
Например, Первая(3) – получение третьей записи от начала группировки.
Если первая запись выходит за пределы группировки, то считается, что записей нет. 
Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет. 
"Последняя" ("Last"). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля. 
Например, Последняя(3) – получение третьей записи от конца группировки.
Если последняя запись выходит за пределы группировки, то считается, что записей нет. 
Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет. 
"Предыдущая" ("Previous"). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки. 
Например, Предыдущая(2) – получение предыдущей от предыдущей записи. 
Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то получается первая запись группировки. 
При получении предыдущей записи для итога по группировке считается, получается первая запись. 
"Следующая" ("Next"). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки. 
Например, Следующая(2) – получение следующей от следующей записи. 
Если следующая запись выходит за пределы группировки, то считается, что записей нет. 
Например, если записей 3 и для третьей записи получают Следующая, то считается, что записей нет. 
При получении следующей записи для итога по группировке считается, что записи нет. 
"Текущая" ("Current"). Необходимо получить текущую запись. 
При получении для итога по группировке получается первая запись. 
"ОграничивающееЗначение" ("BoundaryValue"). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению. 
Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.
Конец. Указывает, до какой записи нужно продолжать фрагмент, в котором рассчитывать агрегатное выражение. Строка, содержащая одно из: 
"Первая" ("First"). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Первая(3) – получение третьей записи от начала группировки.
Если первая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет. 
"Последняя" ("Last"). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Последняя(3) – получение третьей записи от конца группировки.
Если последняя запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет. 
"Предыдущая" ("Previous"). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки. Например, Предыдущая(2) – получение предыдущей от предыдущей записи. 
Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то считается, что записей нет. 
При получении предыдущей записи для итога по группировке считается, получается последняя запись. 
"Следующая" ("Next"). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки. Например, Следующая(2) – получение следующей от следующей записи. 
Если следующая запись выходит за пределы группировки, получается последняя запись. Например, если записей 3 и для третьей записи получают Следующая, то получается третья запись. 
При получении следующей записи для итога по группировке считается, что записи нет. 
"Текущая" ("Current"). Необходимо получить текущую запись. 
При получении для итога по группировке получается первая запись. 
"ОграничивающееЗначение" ("BoundaryValue"). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
В качестве записи будет получаться последняя запись, значение поля упорядочивания у которой меньше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.01.2010.
Сортировка. Строка, в которой перечисляются выражения, разделенные запятыми, в направлении которых нужно упорядочивать последовательность. Если не указана, то упорядочивание выполняется также как и у группировки, для которой вычисляется выражение. После каждого выражения можно указать ключевое слово Возр, для упорядочивания по возрастанию, Убыв, для упорядочивания по убывания, Автоупорядочивание, для упорядочивания ссылочных полей по полям, по которым нужно упорядочивать объект, на который выполняется ссылка. Слово Автоупорядочивание может использоваться как со словом Возр, так и со словом Убыв. 
ИерархическаяСортировка. Аналогично сортировке. Применяется для упорядочивания иерархических записей. Если не указано, компоновщик макета генерирует упорядочивание в соответствии с упорядочиванием, указанным в параметре Сортировка. 
ОбработкаОдинаковыхЗначенийПорядка. Строка, содержащее одно из: 
"Вместе" ("Together") - обозначает, что для определения предыдущей и следующей записей используется последовательность упорядоченных записей; 
"Отдельно" ("Separately") - обозначает, что предыдущая и следующие записи определяются на основании значений выражений упорядочивания;
Например, если полученная последовательность упорядочена по дате:

1. 01 января 2001 Иванов М. 10
2. 02 января 2001 Петров С. 20
3. 02 января 2001 Сидоров Р. 30
4. 03 января 2001 Петров С. 40

При использовании обработки одинаковых значений порядка "Отдельно", предыдущей к записи 3 будет запись 2, а при использовании "Вместе" - запись 1. А фрагментом для текущей записи к записи 2 для "Отдельно" будет запись 2, а для "Вместе" - записи 2 и 3. Таким образом, сумма по текущей записи для "Отдельно" составит 20, а для "Вместе" - 50.

При указанном "Вместе" в параметрах Начало и Конец нельзя указывать смещение для позиций "Первая", "Последняя", "Предыдущая", "Следующая".

Значение по умолчанию "Отдельно". 

Примечания:

Функция учитывает отбор группировок, но не учитывает иерархические отборы.

Функция не может применяться к группировке в групповом отборе этой группировки. Например, в отборе группировки Номенклатура нельзя использовать выражение ВычислитьВыражение("Сумма(СуммаОборот)", , "ОбщийИтог") > 1000. Но такое выражение можно использовать в иерархическом отборе.

Если конечная запись предшествует начальной, то считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.

При расчете интервальных выражений для общего итога (параметр Группировка имеет значение "ОбщийИтог") считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.

Компоновщик макета при генерации выражения функции ВычислитьВыражение, в случае если выражение упорядочивания содержит поля, которые не могут быть использованы в группировке, заменяет функцию ВычислитьВыражение на NULL.

Показать
3. user731414 42 05.07.17 06:42 Сейчас в теме
Написано "Функция не может применяться к группировке в групповом отборе этой группировки. "
4. spezc 782 05.07.17 06:53 Сейчас в теме
Попробуйте указать разные формулы для разных группировок (рассчитывать по) на закладке Ресурсы.
Прикрепленные файлы:
user731414; +1 Ответить
5. user731414 42 05.07.17 07:04 Сейчас в теме
Что то не могу догнать, можете посмотреть я отчет прикрепил
Прикрепленные файлы:
ГотовыйОтчетПоТоварам.erf
6. spezc 782 05.07.17 07:19 Сейчас в теме
Ваша СКД у меня не откроется, так как нет метаданных. Посмотрите на скрин. Добавьте два поля в ресурсы, с разными формулами и с разными "рассчитывать по"
Прикрепленные файлы:
user731414; +1 Ответить
7. user731414 42 05.07.17 07:35 Сейчас в теме
Спасибо я уже сделал, очень помогли
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот