Украшения. Аксессуары. Дизайн ногтей. Цвета. Нанесение. Ногти

Примеры применения функции скд - вычислитьвыражение. Примеры применения функции скд - вычислитьвыражение 1с скд общие итоги по группировкам

Вопрос Обход запроса по группировкам, как собираются данные в запросе с конструкцией ИТОГИ ПО. Предположим, требуется организовать цикл, в котором должен формироваться массив заказов, в разрезе Контрагентов и Адреса доставки. Как это сделать?
Ответ Пишем запрос:

Запрос. Текст = "ВЫБРАТЬ | усЗаказНаОтгрузку.Ссылка КАК Ссылка, | усСтатусДокументов.Статус КАК Статус, | усЗаказНаОтгрузку.Контрагент КАК Контрагент, // Адрес доставки заключаем в "ВЫРАЗИТЬ", т.к. в метаданных Адрес Доставки - строка неограниченной длины и если ее не преобразовать в строку ограниченной длины, //то ее будет невозможно использовать в конструкции "ИТОГИ ПО" // и мы получим сообщение об ошибке вида "Недопустимое поле для группировки " | ВЫРАЗИТЬ(усЗаказНаОтгрузку.АдресДоставки КАК СТРОКА(350)) КАК АдресДоставки |ИЗ | РегистрСведений.усСтатусДокументов КАК усСтатусДокументов | ЛЕВОЕ СОЕДИНЕНИЕ Документ.усЗаказНаОтгрузку КАК усЗаказНаОтгрузку | ПО усСтатусДокументов.Документ = усЗаказНаОтгрузку.Ссылка |ГДЕ | усЗаказНаОтгрузку.Проведен | |УПОРЯДОЧИТЬ ПО | усСтатусДокументов.Статус.Порядок |ИТОГИ ПО | Контрагент, | АдресДоставки" ;

Результатом этого запроса будет набор данных примерно такого вида:

Контрагент 1

  • АдресДоставки1

Контрагент 1

  • АдресДоставки2

Контрагент2

  • АдресДоставки3

Теперь нам нужно получить три массива:
— заказ 1, заказ 2, заказ 3
— заказ 4, заказ 5
— заказ 6
Для получения этих массивов требуется организовать обход приведенного выше запроса «По группировкам с иерархией»:

СпособВыборки = ОбходРезультатаЗапроса. ПоГруппировкамСИерархией; Результат = Запрос. Выполнить () ; ВыборкаПервогоУровня = Результат. Выбрать(СпособВыборки) ; Пока ВыборкаПервогоУровня. Следующий() Цикл ВыборкаВторогоУровня = ВыборкаПервогоУровня. Выбрать(СпособВыборки) ; мсвЗаказов. Очистить() ; // очистили перед добавлением первого в список Пока ВыборкаВторогоУровня. Следующий() Цикл // внутри каждого уровня иерархии заказы упорядочены: "Создан", "В работу", "Ведутся работы", "Готов к отгрузке" (именно в таком порядке, порядок установлен в перечислении) ВыборкаТретьегоУровня = ВыборкаВторогоУровня. Выбрать(ОбходРезультатаЗапроса. Прямой) ; // параметр можно не передавать, по умолчанию способ выборки прямой Пока ВыборкаТретьегоУровня. Следующий() Цикл // внутри каждого уровня иерархии заказы упорядочены: "Создан", "В работу", "Ведутся работы", "Готов к отгрузке" (именно в таком порядке, порядок установлен в перечислении) мсвЗаказов. Добавить(ВыборкаТретьегоУровня. Ссылка) ; КонецЦикла ; СформироватьОтборПоЗаказу(мсвЗаказов) ; // тут мы по очереди получим в цикле требуемые массивы: [заказ 1, заказ 2, заказ 3], затем [заказ 4, заказ 5] и [заказ 6] КонецЦикла ; КонецЦикла ;

Примечание. Конструкция «УПОРЯДОЧИТЬ ПО усСтатусДокументов.Статус.Порядок» будет срабатывать внутри каждого массива, т.е. заказы будут упорядочены по статусу в каждом из полученных массивов.

Справка по расчету итогов запроса из описания в справке Конфигуратора

Расчет итогов запроса

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

Порядок расчета итогов запроса описывается в соответствии со следующими правилами:

<Описание итогов>

<Итоги> [<Список агрегатных функций>]

<Итоги>

ИТОГИ [<Список итоговых_полей>] ПО [ОБЩИЕ] <Список контрольных точек>

<Список итоговых_полей>

<Итоговое_поле> [,<Список_итоговых_полей> [, …]]

<Итоговое_поле>

<Агрегатная_функция> | <Выражение> [[КАК] <Псевдоним_поля>]

<Список контрольных точек>

<Контрольная точка> [, <Контрольная точка> [, …]]

<Контрольная точка>

<Выражение> [[ТОЛЬКО] ИЕРАРХИЯ] | [ПЕРИОДАМИ(Секунда | Минута | Час | День | Неделя | Месяц | Квартал | Год | Декада | Полугодие
[,<Литерал типа DATE> | <Идентификатор параметра>]
[,<Литерал типа DATE> | <Идентификатор параметра>])] [[КАК] Псевдоним поля]

Описание итогов начинается с обязательного ключевого слова ИТОГИ.

<Список агрегатных функций> содержит перечень агрегатных функций, которые необходимо рассчитывать в итогах. Агрегатные функции рассматриваются в .

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

Если контрольная точка является полем — субконто регистра бухгалтерии, то при получении итогов по этой контрольной точке будут игнорироваться значения NULL.

Агрегатные функции языка запросов

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

<Агрегатная функция>

СУММА (<Выражение>) |
СРЕДНЕЕ (<Выражение>) |
МИНИМУМ (<Выражение>) |
МАКСИМУМ (<Выражение>) |
КОЛИЧЕСТВО ([РАЗЛИЧНЫЕ] <Выражение> | *)

Пример:

Выбрать
Накладная.Номенклатура.Наименование,
Сумма (Накладная.Сумма) Как Сумма,
Среднее (Накладная.Сумма) Как Среднее,
Максимум (Накладная.Сумма) Как Максимум,
Минимум (Накладная.Сумма) Как Минимум,
Количество (Накладная.Сумма) Как Колич

Из

Сгруппировать По
Накладная.Номенклатура

Итоги Общие

Результат запроса:

Наименование Сумма Среднее Максимум Минимум Колич
265 955,45 12 511,12 40 000,23 555 8
Брюки детские 28 500,22 9 500,07 15 000 3 000 3
Рубашка «Ковбойка» 24 000 8 000 16 000 4 000 3
Джинсы женские 63 555 6 355,5 30 000 555 10
Свитер детский 6 400 6 400 6 400 6 400 1
Раковина «Лилия» 60 000,23 30 000,115 40 000,23 20 000 2
Мойдодыр «Аквариум» 65 500 21 833,33 40 000 8 000 3
Смеситель «Ультра» 15 000 15 000 15 000 15 000 1
Кухонный комбайн Крупс 3 000 3 000 3 000 3 000 1

Агрегатные функции могут использоваться в списке полей выборки, предложениях ИМЕЮЩИЕ, ИТОГИ, УПОРЯДОЧИТЬ ПО.

Агрегатная функция СУММА

Функция вычисляет арифметическую сумму всех попавших в выборку значений поля.

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

Если поле не может содержать числовых значений, то применение функции СУММА к такому полю вызовет ошибку. Если поле может содержать числовые значения (имеет составной тип данных), то данная функция может быть применена к такому полю. Но если среди значений поля в выборке встретится нечисловое значение (помимо значений NULL), это вызовет ошибку.

Агрегатная функция СРЕДНЕЕ

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

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

Если поле не может содержать числовых значений, то применение функции СРЕДНЕЕ к такому полю вызовет ошибку. Если поле может содержать числовые значения (имеет составной тип данных), то данная функция может быть применена к такому полю. Но если среди значений поля в выборке встретится нечисловое значение (помимо значений NULL), это вызовет ошибку.

Агрегатная функция МИНИМУМ

Функция вычисляет минимальное значение из всех попавших в выборку значений поля.

При определении минимального значения применяются правила сравнения значений, описанные в .

Агрегатная функция МАКСИМУМ

Функция вычисляет максимальное значение из всех попавших в выборку значений поля.

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

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

Агрегатная функция КОЛИЧЕСТВО

Функция подсчитывает количество значений параметра, попавших в выборку. В отличие от других агрегатных функций функция КОЛИЧЕСТВО допускает три способа использования.

  • Во-первых, функция позволяет подсчитать количество значений указанного поля, не равных NULL.
  • Во-вторых, функция позволяет подсчитать количество различных значений указанного поля, не равных NULL. Для этого перед спецификацией поля надо указать ключевое слово РАЗЛИЧНЫЕ.
  • В-третьих, функция позволяет подсчитать количество строк в результате запроса. Для этого в качестве параметра функции надо указать звездочку «*».

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

Пример:

ВЫБРАТЬ
Количество (*) Как Всего,
Количество (Различные Накладная.Номенклатура) Как Разные

Из
Документ.РасходнаяНакладная.Состав Как Накладная

Результат запроса:

Всего Разные
24 8

Расчет общих итогов

Для расчета итогов по всей таблице в предложении ИТОГИ следует указать слово ОБЩИЕ. В этом случае будут вычислены значения агрегатных функций для всех записей таблицы.

Пример:



ИТОГИ СУММА(Количество) По ОБЩИЕ

Результат запроса:

Товар Количество Номер Получатель
238
Кран 10 РНк-1 Урюпинскторг
Кран 8 РНк-3 Маг. «Хозяин»
Кран 44 РНк-4 Маг. «Гигант»
Кран 22 РНк-5 Урюпинскторг
Вантус 5 РНк-1 Урюпинскторг
Вантус 1 РНк-3 Маг. «Хозяин»
Вантус 14 РНк-4 Маг. «Гигант»
Стол 1 РНк-1 Урюпинскторг
Стол 15 РНк-2 Маг. «Мебель»
Стол 10 РНк-4 Маг. «Гигант»
Стул 55 РНк-2 Маг. «Мебель»
Стул 5 РНк-3 Маг. «Хозяин»
Стул 32 РНк-4 Маг. «Гигант»
Стул 16 РНк-5 Урюпинскторг

Логические выражения в языке запросов

В языке запросов в операциях выбора и в условиях отборов используются логические выражения:

<Логическое выражение>

<Выражение> |
<Выражение> <Операция сравнения> <Выражение> |
<Выражение> [НЕ] В [ИЕРАРХИИ] (<Список значений> | <Массив значений>) |
<Выражение> [НЕ] В [ИЕРАРХИИ] (<Описание запроса>) |
<Выражение> [НЕ] МЕЖДУ <Выражение> И <Выражение> |
<Выражение> ЕСТЬ [НЕ] NULL |
<Выражение> ССЫЛКА <Имя таблицы> |
<Выражение> [НЕ] ПОДОБНО <Литерал типа СТРОКА>
[СПЕЦСИМВОЛ <Литерал типа СТРОКА>]

<Операция сравнения>

> | < | = | >= | <= | <>

<Список значений>

<Выражение>[, <Выражение> [, …]]

Логическим выражением может быть:

При сравнении значений используются правила сравнения значений, описанные ниже.

Правила сравнения значений

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

  • сравнения значений в операторах сравнения;
  • определения максимального и минимального значений в агрегатных функциях МИНИМУМ и МАКСИМУМ;
  • упорядочивания записей результата запроса в соответствии с порядком, заданным в предложении УПОРЯДОЧИТЬ ПО.

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

  • тип NULL (самый низший);
  • тип Булево;
  • тип Число;
  • тип Дата;
  • тип Строка;
  • ссылочные типы.

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

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

  • у типа Булево значение ИСТИНА больше значения ЛОЖЬ;
  • у типа Число обычные правила сравнения для чисел;
  • у типа Дата более ранние даты меньше более поздних;
  • у типа Строка сравнения производится в соответствии с установленными национальными особенностями базы данных без учета концевых пробелов;
  • ссылочные типы сравниваются на основе своих значений (номера записи и т. п.);
  • не допускается сравнение полей неограниченной длины (строки неограниченной длины, ХранилищеЗначения, поле ТипЗначения из таблицы планов видов характеристик).

Важно! Любая операция сравнения двух значений, в которой участвует хотя бы одно значение NULL, дает результат, аналогичный значению ЛОЖЬ.

Оператор проверки совпадения значения

Форма оператора В для проверки совпадения с одним из перечисленных

Оператор В позволяет проверить, совпадает ли значение выражения, указанного справа от него, с одним из значений, описанных слева. Если совпадает хотя бы с одним – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ. Применение НЕ изменяет действие оператора на обратное. Сравнение значений производится по правилам, описанным в .

Пример:

Выбрать

Где
Справочник.Номенклатура.Родитель.Наименование
В («Бытовая техника», «Оргтехника»)

Форма оператора В для проверки принадлежности по иерархии

Для справочников проверка может осуществляться и на принадлежность по иерархии. Результатом оператора В ИЕРАРХИИ будет ИСТИНА, если значение выражения слева является ссылкой на элемент справочника и входит во множество значений справа или иерархически принадлежит какой-нибудь группе, содержащейся в этом множестве:

Пример:

// В качестве параметра Группа в запрос передается ссылка
// на какую-либо группу справочника Номенклатура.

Выбрать
Справочник.Номенклатура.Наименование

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

Пример:

Выбрать
Справочник.Номенклатура.Наименование

Форма оператора В для проверки совпадения значения с одним из результата запроса

Примером применения данного оператора может послужить следующее:

Пример:


ВЫБРАТЬ
Товары.Наименование
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Ссылка В
ВЫБРАТЬ
РасхНаклСостав.Товар
ИЗ

)

Результат запроса:

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

Пример:

// Выбрать названия товаров, которые присутствовали в расходных накладных
ВЫБРАТЬ
Товары.Наименование
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Ссылка НЕ В
ВЫБРАТЬ
РасхНаклСостав.Товар
ИЗ
Документ.РасхНакл.Состав КАК РасхНаклСостав
)

Результат запроса:

Заметим, что из запроса операции В возможно обращение к полям таблиц, которые встречались во внешнем запросе до появления операции.

Пример:

// Выбрать названия товаров, которые присутствовали в расходных накладных
ВЫБРАТЬ
Товары.Наименование
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Ссылка В
ВЫБРАТЬ
РасхНаклСостав.Товар
ИЗ
Документ.РасхНакл.Состав КАК РасхНаклСостав
ГДЕ
РасхНаклСостав.Товар = Товары.Ссылка
)

Результат запроса:

Оператор проверки вхождения значения в диапазон

Оператор МЕЖДУ позволяет проверить, входит ли значение выражения, указанного справа от него, в диапазон, указанный слева (вместе с границами диапазона). Если входит – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ. Применение НЕ изменяет действие оператора на обратное. Сравнение значений производится по правилам, описанным в .

Пример:

Выбрать


Где
Справочник.Номенклатура.ЗакупочнаяЦена МЕЖДУ 100 И 1000

Оператор проверки значения на NULL

Оператор ЕСТЬ NULL позволяет проверить значение выражения слева от него на NULL. Если значение равно NULL – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ. Применение НЕ изменяет действие оператора на обратное.

Пример:

Выбрать
Справочник.Номенклатура.Наименование,
Справочник.Номенклатура.ЗакупочнаяЦена
Где
Справочник.Номенклатура.ЗакупочнаяЦена Есть NULL

Оператор проверки ссылочного значения

Оператор ССЫЛКА позволяет проверить, является ли значение выражения, указанного справа от него, ссылкой на таблицу, указанную слева. Если да – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ. Разыменование таблиц описано в параграфе «Разыменование полей».

Пример:

Выбрать
Справочник.Номенклатура.Наименование,
Справочник.Номенклатура.ЕдиницаИзмерения
Где
Справочник.Номенклатура.ЕдиницаИзмерения Ссылка Справочник.ЕдиницыИзмерения

Оператор проверки строки на подобие шаблону

Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.

Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:

  • % (процент): последовательность, содержащая любое количество произвольных символов
  • _ (подчеркивание): один произвольный символ
  • […] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок
    В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
  • [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания

Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки.

Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.

Например, шаблон “%АБВ[абвг]_абв%” СПЕЦСИМВОЛ “” означает подстроку, состоящую из последовательности символов:
буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в.

Причем перед этой последовательностью может располагаться произвольный набор символов.

Итоги по иерархии

Есть возможность рассчитать итоги по иерархии. Для этого после имени поля, для которого вычисляются итоги необходимо указать ключевое слово ИЕРАРХИЯ. В результате будут рассчитаны итоги по контрольным точкам и итоги по иерархии для контрольных точек.

Пример:

ВЫБРАТЬ Док.Товар, Док.Количество, Док.Ссылка.Номер, Док.Ссылка.Получатель
ИЗ Документ.РасхНакл.Состав Как Док
УПОРЯДОЧИТЬ ПО Док.Товар
ИТОГИ СУММА(Количество) ПО Док.Товар ИЕРАРХИЯ

Результат запроса:

Товар Количество Номер Получатель
Сантехника 104
Кран 84
Кран 10 РНк-1 Урюпинскторг
Кран 8 РНк-3 Маг. “Хозяин”
Кран 44 РНк-4 Маг. “Гигант”
Кран 22 РНк-5 Урюпинскторг
Вантус 20
Вантус 5 РНк-1 Урюпинскторг
Вантус 1 РНк-3 Маг. “Хозяин”
Вантус 14 РНк-4 Маг. “Гигант”
Мебель 134
Стол 26
Стол 1 РНк-1 Урюпинскторг
Стол 15 РНк-2 Маг. “Мебель”
Стол 10 РНк-4 Маг. “Гигант”
Стул 108
Стул 55 РНк-2 Маг. “Мебель”
Стул 5 РНк-3 Маг. “Хозяин”
Стул 32 РНк-4 Маг. “Гигант”
Стул 16 РНк-5 Урюпинскторг

Пример:

ВЫБРАТЬ Док.Товар, Док.Количество, Док.Ссылка.Номер, Док.Ссылка.Получатель
ИЗ Документ.РасхНакл.Состав Док
УПОРЯДОЧИТЬ ПО Док.Товар
ИТОГИ СУММА(Количество) ПО Док.Товар ТОЛЬКО ИЕРАРХИЯ

Результат запроса:

Товар Количество Номер Получатель
Сантехника 104
Кран 10 РНк-1 Урюпинскторг
Кран 8 РНк-3 Маг. “Хозяин”
Кран 44 РНк-4 Маг. “Гигант”
Кран 22 РНк-5 Урюпинскторг
Вантус 5 РНк-1 Урюпинскторг
Вантус 1 РНк-3 Маг. “Хозяин”
Вантус 14 РНк-4 Маг. “Гигант”
Мебель 134
Стол 1 РНк-1 Урюпинскторг
Стол 15 РНк-2 Маг. “Мебель”
Стол 10 РНк-4 Маг. “Гигант”
Стул 55 РНк-2 Маг. “Мебель”
Стул 5 РНк-3 Маг. “Хозяин”
Стул 32 РНк-4 Маг. “Гигант”
Стул 16 РНк-5 Урюпинскторг

В компоновке данных настройка итогов выглядит несколько иначе, чем в запросах. Определим в системе компоновки данных набор данных «Запрос».

В самом запросе мы не настраиваем итоги, а переходим на закладку «Ресурсы» компоновки данных. На уровне схемы компоновки данных мы определяем ресурсы . Это те поля, которые нужно посчитать на уровне группировок. Нажмём на кнопку «>>» и система сама перенесёт все числовые поля и определит их в качестве ресурсов.

В ресурсах можно указывать и нечисловые поля. Например, если выбрать реквизит «Ссылка», то система подсчитает количество документов в наших группировках. Эта информация тоже может быть полезной. Итак, в схеме компоновки мы определяем только ресурсы , а сами группировки настраиваются на уровне варианта отчёта. Так же пользователь сам может создать группировки, которые хочет видеть в своей настройке варианта отчёта.

Создадим стандартную настройку компоновки данных.
Нажмём на кнопку «Открыть конструктор настроек».

Выберем тип отчета — список. Нажмём кнопку «Далее».

Выберем все поля и переместим поле контрагент на самую верхнюю позицию. Нажмём кнопку «Далее».

Выберем все поля и переместим поле контрагент на самую верхнюю позицию. Нажмём кнопку «OK».

Получилась следующая настройка:

Как видно, в настройке варианта отчёта ресурсы выделяются зелёной пиктограммой, чтобы можно было их быстро отличить от других полей.

Если открыть наш отчёт в режиме 1С:Предприятие и сформировать его, то мы увидим, что формируются итоговые данные на уровне группировок. Итоги по номенклатуре и по контрагентам.

Настройка ресурсов в схеме компоновки данных 1С

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

Здесь в поле «Выражение» мы можем написать и своё собственное выражение.

В поле «Выражение» мы можем обращаться и к функциям общих модулей.

Кроме того, можно указать в поле «Расчитывать по…» по каким группировкам необходимо рассчитывать ресурс. Если поле «Расчитывать по…» не заполнено, то итоговое значение ресурса будет считаться на всех уровнях группировки, которые определены в настройках варианта отчёта . В нашем случае нужно заполнить поле «Расчитывать по…» ресурса «Количество», так как мы можем продавать товар с разными единицами измерения. Например: масло в литрах и колёса в штуках. Не правда ли, нелогично будет складывать количество этих товаров? Поэтому нам нужно оставить суммирование количества на уровне номенклатуры, а на уровне контрагентов
суммирование уберём.

Если сформируем отчёт, то увидим, что итоги по количеству считаются только по номенклатуре, а по контрагентам итоги количества пустые.

Возможности при описании ресурсов в схеме компоновки данных 1С

Давайте рассмотрим ряд неочевидных особенностей связанных с описанием ресурсов .

  • Каждый ресурс можно определить несколько раз . Но это имеет смысл лишь в том случае, если
    ресурс будет рассчитываться по разным уровням группировок. Например, если количество, в одном случае
    суммируется для номенклатуры, а по контрагентам получаем минимальное значение.

Если сформируем отчёт, то увидим, что по контрагенту «Дерия» минимальная закупка составляет пять единиц номенклатуры «Бумага самоклеющаяся».

  • В поле «Выражение», кроме написания формулы, можно использовать специальную функцию компоновки данных которая называется «Вычислить» . Эта функция позволяет вычислить какое-то итоговое значение по определённой формуле. Например, по каждому контрагенту необходимо знать процент закупки в натуральных единицах относительно общего объёма. Но как получить общий объём закупок по количеству? Для этого воспользуемся функцией «Вычислить» и запишем следующее выражение в поле «Выражение»:
Сумма(Количество)/Вычислить("Сумма(Количество)", "ОбщийИтог")*100

Как видно, все параметры функции «Вычислить» являются строковыми . Чтобы поле количество отображалось в отчёте красиво, настроим его на вкладке «Наборы данных». В строке количество найдём поле «Параметры редактирования». Откроем диалог, отыщем строку «Формат» и отредактируем в нём форматную строку, поставив на вкладке «Число», значение «Точность» равным двум.

Запустим отчёт и увидим результат вычисления процента закупки по контрагенту «АУПП КОС ТОО» относительно
общего объёма:


В конце статьи хочу посоветовать вам бесплатный от Сотникова Анатолия. Это курс от опытного программиста. Он на отдельной базе покажет вам, как строить отчеты в СКД. Вам только нужно внимательно слушать и запоминать! Вы получите ответы на такие вопросы:
  • Как создать простой отчет в виде списка?
  • Для чего нужны колонки Поле, Путь и Заголовок на закладке «Поля»?
  • Какие существуют ограничения для полей компоновки?
  • Как правильно настраивать роли?
  • Какие существуют роли для полей компоновки?
  • Где найти закладку компоновка данных в запросе?
  • Как настраивать параметры в СКД?
  • Дальше еще интереснее...
Наверное, не стоит самому стараться бороздить интернет в поисках нужной информации? Тем более все готово для применения. Только начните! Все подробности о том, что есть в бесплатных видеоуроках

Вот один из уроков о закладке компоновки данных в запросе:

Листы Excel, содержащие большой объем информации, иногда могут выглядеть перегруженными и даже трудночитаемыми. Excel позволяет группировать данные, чтобы с легкостью скрывать и показывать различные разделы листа. К тому же Вы можете обобщить различные группы при помощи команды Промежуточный итог и придать структуру рабочему листу Excel. В этом уроке мы рассмотрим оба этих инструмента максимально подробно и на наглядных примерах.

Группировка строк и столбцов в Excel

Чтобы разгруппировать данные в Excel, выделите сгруппированные строки или столбцы, а затем щелкните команду Разгруппировать .

Как скрыть и показать группы


Подведение итогов в Excel

Команда Промежуточный итог позволяет автоматически создавать группы и использовать базовые функции, такие как СУММ, СЧЁТ и СРЗНАЧ, чтобы упростить подведение итогов. Например, команда Промежуточный итог способна вычислить стоимость канцтоваров по группам в большом заказе. Команда создаст иерархию групп, также называемую структурой, чтобы упорядочить информацию на листе.

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

Создание промежуточного итога

В следующем примере мы воспользуемся командой Промежуточный итог , чтобы определить сколько заказано футболок каждого размера (S, M, L и XL). В результате рабочий лист Excel обретет структуру в виде групп по каждому размеру футболок, а затем будет подсчитано общее количество футболок в каждой группе.


Просмотр групп по уровням

При подведении промежуточных итогов в Excel рабочий лист разбивается на различные уровни. Вы можете переключаться между этими уровнями, чтобы иметь возможность регулировать количество отображаемой информации, используя иконки структуры 1, 2, 3 в левой части листа. В следующем примере мы переключимся между всеми тремя уровнями структуры.

Хоть в этом примере представлено всего три уровня, Excel позволяет создавать до 8 уровней вложенности.

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

Удаление промежуточных итогов в Excel

Со временем необходимость в промежуточных итогах пропадает, особенно, когда требуется иначе перегруппировать данные на листе Excel. Если Вы более не хотите видеть промежуточные итоги, их можно удалить.


Чтобы удалить только группы, оставив промежуточные итоги, воспользуйтесь пунктом Удалить структуру из выпадающего меню команды Разгруппировать .

Войдите на сайт как ученик

Войдите как ученик, чтобы получить доступ к материалам школы

Система компоновки данных 1С 8.3 для начинающих: считаем итоги (ресурсы)

Целью этого урока будет:

  • Написать отчёт, который выводит список продуктов (справочник Еда), их калорийность и вкус.
  • Сделать группировку продуктов по их цвету.
  • Познакомиться с возможностью подведения итогов (ресурсы) и вычисляемыми полями.

Создаём новый отчёт

Как и на предыдущих уроках открываем базу "Гастроном " в конфигураторе и создаём новый отчёт через меню "Файл "->"Новый... ":

Вид документа - внешний отчёт :

В форме настройки отчёта пишем имя "Урок3 " и нажимаем кнопку "Открыть схему компоновки данных ":

Оставляем имя схемы по умолчанию и нажимаем кнопку "Готово ":

Добавляем запрос через конструктор

На закладке "Набор данных " нажимаем зелёный плюсик и выбираем пункт "Добавить набор данных - запрос ":

Вместо того, чтобы писать текст запроса вручную, вновь запускаем конструктор запроса :

На вкладке "Таблицы " перетягиваем таблицу "Еда " из первой колонки во вторую:

Выбираем из таблицы "Еда " поля, которые будем запрашивать. Для этого перетаскиваем поля "Наименование ", "Вкус ", "Цвет " и "Калорийность " из второй колонки в третью:

Получилось вот так:

Нажимаем кнопку "ОК " - текст запроса сформировался автоматически:

Формируем настройки представления отчёта

Переходим на закладку "Настройки " и нажимаем на волшебную палочку , чтобы вызвать конструктор настроек :

Выбираем вид отчета "Список ..." и нажимаем кнопку "Далее ":

Перетаскиваем из левой колонки в правую поля, которые будут отображаться в списке и нажимаем "Далее ":

Перетаскиваем из левой колонки в правую поле "Цвет " - по нему будет происходить группировка строк в отчёте. Нажимаем "ОК ":

А вот и результат работы конструктора. Иерархия нашего отчёта:

  • отчёт в целом
  • группировка "Цвет"
  • детальные записи - строки с названиями еды

Сохраним отчёт (кнопка дискета ) и не закрывая конфигуратора тут же откроем его в режиме пользователя. Получилось вот так:

Меняем порядок колонок

Но давайте поменяем порядок колонок (стрелки вверх-вниз), чтобы он был таким как на рисунке ниже:

Сохраним отчёт и вновь откроем в режиме пользователя:

Отлично, так гораздо лучше.

Подводим итог (сумму) по калорийности

Было бы неплохо выводить итог калорийности продуктов по группам. Чтобы видеть сумму калорийности всех продуктов, скажем, белого или жёлтого цвета. Или узнать общую калорийность вообще всех продуктов в базе.

Для этого существует механизм вычисления ресурсов.

Переходим на вкладку "Ресурсы " и перетаскиваем поле "Калорийность " (мы же по нему собираемся итог подводить) из левой колонки в правую.

При этом в поле выражение выбираем из выпадающего списка "Сумма(Калорийность) ", так как итогом будет являться сумма всех входящих в итог элементов:

Сохраняем и формируем отчёт:

У нас появились итоги по каждой из групп и по отчёту в целом.

Подводим итог (среднее) по калорийности

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

Трогать уже имеющуюся колонку "Калорийность" нельзя - в неё уже выводится итог-сумма, поэтому заведём ещё одно поле , которое будет являться точной копией поля "Калорийность".

Чтобы завести такое "виртуальное" поле воспользуемся механизмом вычисляемых полей .

Переходим на закладку "Вычисляемые поля " и нажимаем зелёный плюсик:

В колонке "Путь к данным " пишем имя нового поля (слитно , без пробелов ). Пусть оно будет называться "СредняяКалорийность ", а в колонке "Выражение " пишем имя уже существующего поля, на основании которого будет рассчитываться новое поле. Пишем туда "Калорийность ". Колонка "Заголовок " заполнится автоматически.

Мы добавили новое поле ("СредняяКалорийность "), но в отчёте оно само по себе не появится - нужно или вновь вызывать конструктор настроек ("волшебная палочка") или добавить это поле вручную .

Поступим вторым способом. Для этого переходим на закладку "Настройки ", выбираем "Отчет " (ведь мы хотим добавить поле в целом к отчёту), выбираем внизу закладку "Выбранные поля " и перетаскиваем поле "СредняяКалорийность " из левой колонки в правую:

Получилось вот так:

Сохраняем и формируем отчет:

Поле появилось и мы видим, что его значениями являются значения поля "Калорийность". Отлично!

Для этого вновь воспользуемся уже знакомым нам механизмом ресурсов (подведение итогов). Переходим на закладку "Ресурсы " и перетаскиваем поле "СредняяКалорийность " из левой колонки в правую:

При этом в колонке "Выражение " выбираем "Среднее(СредняяКалорийность) ":

Сохраняем и формируем отчёт:

Видим, что по группам, то есть по каждому цвету, и по отчёту в целом совершенно верно посчиталось среднее значение. Но присутствуют лишние записи по отдельным продуктам (не по группам), которые хотелось бы убрать из отчёта.

Знаете почему они появились (значения не по группам)? Потому что, когда мы добавляли поле "СредняяКалорийность " в настройки отчёта, на втором шаге мы выделили весь отчёт в целом и это новое поле попало в элемент "Детальные записи ".

Исправим ошибку. Для этого вернёмся на закладку "Настройки ", выберем "Детальные записи " сначала сверху (шаг 2), а затем "Детальные записи " снизу (шаг 3), перейдём на закладку "Выбранные поля " и увидим в её правой колонке элемент "Авто ".

Элемент "Авто " - это не одно поле. Это несколько полей, которые попадают сюда автоматически на основании вышестоящих настроек.

Чтобы увидеть, что это за поля - нажмём на элемент "Авто " правой кнопкой и выберем пункт "Развернуть ":

Элемент "Авто " раскрылся в следующие поля:

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

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


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

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

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

СоединитьСтроки(Массив(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений("Представление(Сумма(НаборДанных.СуммаОборот)),Сумма(НаборДанных.СуммаОборот)","НаборДанных.Контрагент"),"2")))

Параметры:

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

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

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

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

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

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

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