1С скд вычислить сумма

1С скд вычислить сумма

1с. СКД. Вычисляемое поле в группировке.
Эта методика используется:
— когда итог в группировке отчета СКД 1с требуется не просто просуммировать колонку подчиненныч строк, а вычислить значение по формуле.
— когда вам надо показать только итог в группировке, не показывая основного значения.

Делается эта фишка следующим образом:
1. В отчет СКД добавить вычисляемое поле, Выражение=0

2. ДВАЖДЫ добавить в "Ресурсы" вычисляемое поле. Один раз как "0", второй как "Вычислить(. ". Для каждого проставить "Расчитывать по. " группировки кому считать — в "Вычислить(. ", кому нет — в "0".

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

Например:
Сумма(Продажи.СуммаОборот) / Вычислить(«Сумма(Продажи.СуммаОборот)», «ОбщийИтог»)
В данном примере в результате получится отношение суммы по полю «Продажи.СуммаОборот» записи группировки к сумме того же поля во всей компоновке.
Еще пример:
ВычислитьВыражение("Сумма(Стоимость)/Выбор Когда Сумма(Количество)=0 Тогда 1 Иначе Сумма(Количество) Конец","Подразделение","Группировка")

Уточнение!
Существует более другой, более простой, метод вывода не суммовых итогов в группировке, который можно использовать в некоторых случаях. Ярким примером такого использования является колонка с процентами. Делается это через пользовательские поля.

Программирование как созидательный процесс.

1С СКД: Суммирование значений на различных уровнях группировок

В данной небольшой заметке хочу показать, как можно произвести суммирование значений на различных уровнях группировки, в отчете с использованием системы компоновки данными.
Как показано на изображении, только на уровне группировки «Группы номенклатуры», рассчитывается ресурс «Заказать», в нем отображается, сколько нужно заказать по текущей группе номенклатуры исходя из определенных условий:

1С СКД: Суммирование значений на различных уровнях группировок

Соответственно, теперь необходимо рассчитать итоги, по выше находящимся группировкам («Склады», «ТипыСкладов») и общий итог.
Для этого используется функция ВычислитьВыражениеСГруппировкойМассив:
ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ (EVALEXPRESSIONWITHGROUPARRAY)
Синтаксис:
ВычислитьВыражениеСГруппировкойМассив( , , , )
Описание:
Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет преобразовано в НаборДанных.Контрагент.
Компоновщик макета при генерации выражений для вывода пользовательского поля, в выражении которого присутствует только функцияВычислитьМассивСГруппировкойМассив(), генерирует выводимое выражение таким образом, чтобы выводимая информация была упорядочена. Например, для пользовательского поля с выражением:

ВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаОборот)", "Контрагент")
Компоновщик макета сгенерирует для вывода следующее выражение:

Параметры:

Тип: Строка. Выражение, которое нужно вычислить. Строка, например, Сумма(СуммаОборот).

Тип: Строка. Выражения полей группировки – выражения полей группировки, перечисленные через запятую. Например, Контрагент, Партия.

Тип: Строка. Выражение, описывающее отбор, применяемый к детальным записям. В выражении не поддерживается использование агрегатных функций. Например,ПометкаУдаления = Ложь.

Тип: Строка. Выражение, описывающее отбор, применяемый к групповым записям. Например, Сумма(СуммаОборот) > &Параметр1.
Пример:

Максимум(ВычислитьВыражениеСГруппировкойМассив ("Сумма(СуммаОборот)", "Контрагент"));

Подробное описание синтаксиса функции можно найти по адресу http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Теперь для расчета, продублируем поле «Заказать», с различными значениями «Рассчитывать по…», используя следующие выражения, обратите внимание, что в каждом выше стоящем уровне используются значения уровней ниже стоящих группировок.

В итоге получаем следующую конструкцию:

1С СКД: Суммирование значений на различных уровнях группировок

1С СКД: Суммирование значений на различных уровнях группировок : 5 комментариев

Отлично, спасибо, очень помогла статья.

Хорошая статья. Благодарю.

А у меня не получилось…выходит ошибка — Отчет не сформирован ! Функция не найдена «ЧИСЛО».

Читайте также:  Порт com1 где находится

Сумма(ВычислитьВыражениеСГруппировкойВМассив(«ВЫБОР КОГДА МесяцОтчета «» ТОГДА
ВЫРАЗИТЬ(Сумма(Показатель)+0.01, «ЧИСЛО(15,0)») ИНАЧЕ 0 КОНЕЦ
«,»МесяцОтчета»))

К предыдущему комментарию, вдруг кому пригодится:
1. ВычислитьВыражениеСГруппировкойВМассив — предлог «В» не нужен
2. Если внутри ВычислитьВыражениеСГруппировкойМассив используется ВЫРАЗИТЬ, то «»ЧИСЛО(15,0)»» обрамляется двойными кавычками

Реально выручил когда уже думал придется руками считать!

Что-то вроде FAQ Отзывов (3) В закладки

В свете ближайшего выхода 8.2.14, попытаюсь описать некоторые новые функции системы компоновки данных.

Открываем схему компоновки данных, желательно во внешнем отчете, чтобы было проще редактировать.

Добавляем набор данных типа запрос и пишем, либо вручную, либо с помощью конструктора запросов простейший запрос:

1. Настраиваем запрос в СКД.

2. Настраиваем вычисляемые поля в СКД

3. Выполняем настройку компоновки данных на закладке настройки

4. Запускаем 1С Предприятие 8.2.14. Открываем отчет. Формируем, получаем.

Описание самих новых функций:

1. ТекущаяДата()

Возвращает системную дату. При компоновке макета компоновки во всех выражениях, которые присутствуют в компоновке, функция ТекущаяДата()заменяется значением текущей даты.

2. ВЫЧИСЛИТЬВЫРАЖЕНИЕ()

Синтаксис:

Функция предназначена для вычисления выражения в контексте некоторой группировки.

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

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

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

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

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

Тип: Строка. Выражение, которое надо вычислить.

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

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

Тип: Строка. Параметр может принимать следующие значения:

  • ОбщийИтог — выражение будет вычисляться для всех записей группировки.
  • Иерархия — выражение будет вычисляться для родительской иерархической записи, если таковая имеется, и для всей группировки, если родительской иерархической записи не имеется.
  • Группировка — выражение будет вычисляться для текущей групповой записи группировки.
  • ГруппировкаНеРесурса — при вычисление функции для групповой записи по ресурсам, выражение будет вычислено для первой групповой записи исходной группировки.

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

Компоновщик макета компоновки данных при генерации макета компоновки данных при выводе в макет поля-ресурса, по которому выполняется группировка, помещает в макет выражение, вычисляемое при помощи функции ВычислитьВыражение(), с указанием параметраГруппировкаНеРесурса. Для остальных ресурсов в группировке по ресурсу помещаются обычные выражения ресурсов.

Тип: Строка. Указывает, с какой записи нужно начинать фрагмент, в котором рассчитывать агрегатные функции выражения и из какой записи получать значения полей вне агрегатных функций. Значение может быть одним из следующих:

  • Первая (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). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначениев скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
Читайте также:  Как изменить размер текста в windows 10

В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.

Тип: Строка. Перечисляются выражения, разделенные запятыми, которые описываютправила упорядочивания. Если не указана, то упорядочивание выполняется также как и у группировки, для которой вычисляется выражение. После каждого выражения можно указать ключевое слово Возр (для упорядочивания по возрастанию), Убыв (для упорядочивания по убывания) и Автоупорядочивание (для упорядочивания ссылочных полей по полям, по которым нужно упорядочивать объект, на который выполняется ссылка). Слово Автоупорядочивание может использоваться как со словом Возр, так и со словом Убыв.

Тип: Строка. Аналогично параметру Сортировка. Применяется для упорядочивания иерархических записей. Если не указано, компоновщик макета генерирует упорядочивание в соответствии с упорядочиванием, указанным в параметре Сортировка.

Тип: Строка. Указывает правило определения предыдущей или следующий записи в случае если есть несколько записей с одинаковым значением упорядочивания:

  • Отдельно (Separately) обозначает, что для определения предыдущей и следующей записей используется последовательность упорядоченных записей. Значение по умолчанию.
  • Вместе (Together) обозначает, что предыдущая и следующие записи определяются на основании значений выражений упорядочивания.

Например, если полученная последовательность упорядочена по дате:

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

Если значение параметра равно Отдельно, то:

§ предыдущей записью к записи 3 будет запись 2.

§ если расчетный фрагмент определяется как Текущая, Текущая (соответственно, параметры Начало и Конец), то для записи 2 этот фрагмент будет состоять из одной записи 2. Выражение ВычислитьВыражение(«Сумма(Значение)”, , , Текущая, Текущая) будет равно 20.

Если значение параметра равно Вместе, то:

§ предыдущей записью к записи 3 будет запись 1.

§ если расчетный фрагмент определяется как Текущая, Текущая (соответственно, параметры Начало и Конец), то для записи 2 этот фрагмент будет состоять из записей 2 и 3. Выражение ВычислитьВыражение(«Сумма(Значение)”, , , Текущая, Текущая) будет равно 50.

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

Если требуется рассчитать сумму с накоплением, то можно использовать следующее выражение:

ВычислитьВыражение(“Сумма(СуммаОборот)”, , , “Первая”, “Текущая”)

Если требуется получить значение группировки в предыдущей строке, то можно использовать следующее выражение:

Список новых функций:

ВычислитьВыражениеСГруппировкойМассив( , , , ) –

Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.

ВычислитьВыражениеСГруппировкойТаблицаЗначений( , , , ) –

Функция возвращает таблицу значений, каждая строка которой содержит результат вычисления выражений для группировки по указанному полю

ЗначениеЗаполнено( ) – Возвращает Истина, если значение отлично от значения данного типа по умолчанию, отлично от значенияNULL, отлично от пустой ссылки, отлично от значения Неопределено. Для логических значений осуществляется проверка на значение NULL. Для строк осуществляется проверка на отсутствие не пробельных символов

Формат( , ) – Получить отформатированную строку переданного значения. Форматная строка задается в соответствии с форматной строкой системы «1С:Предприятие».

Подстрока( , , ) – Данная функция предназначена для выделения подстроки из строки.

ДлинаСтроки( ) – Функция предназначена для определения длины строки. Параметр — выражение строкового типа

Строка( ) – Если в качестве параметра передан массив, то функция возвращает строку, содержащую строковые представления всех элементов массива, разделенных символами “; “. Если в качестве параметра передана таблица значений, то функция возвращает строку, содержащую строковые представления всех строк таблицы значений, причем представления ячеек каждой строки разделяются символами “; “, а строки — смиволом перевода строки. Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка .

Ссылка на основную публикацию
Adblock detector