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

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

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

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

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

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

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

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

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

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

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

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

Синтаксис:

ВычислитьВыражение(,)

Описание:

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

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

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

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

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

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

Параметры

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

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

Например:

Сумма(Продажи.СуммаОборот)/Вычислить("Сумма(Продажи.СуммаОборот)", "ОбщийИтог")

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

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

· ОбщийИтог — выражение будет вычисляться для всех записей группировки.

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

· Группировка — выражение будет вычисляться для текущей групповой записи группировки.

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

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

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

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

· Первая (First )

· Последняя (Last )

· Предыдущая (Previous )

· Следующая (Next )

· Текущая (Current )

· ОграничивающееЗначение (BoundaryValue ) ОграничивающееЗначение

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

· Первая (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 .

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

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

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

· Отдельно (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С:Предприятие».

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

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

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

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


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

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

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

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

Параметры:

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

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

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

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

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

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

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

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

  1. нарастающий итог в группировке;
  2. нарастающий итог в кросс-таблице;
  3. получение предыдущего значения;
  4. вывод ТЧ в одной строке.

1. Получение показателя нарастающим итогом

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

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

2. Получение значения показателя из предыдущей строки

Получим курс валюты на дату и предыдущую дату. Для этого создаем вычисляемое поле и в поле выражение пишем следующее выражение (см. рисунок 5):
ВычислитьВыражение("Курс", "Предыдущая", "Предыдущая")
которое будет брать предыдущее значение курса валюты для текущей строки, последний параметр функции ограничивает получение данных.
Так как работаем на уровне детальных записей, сразу переходим к вкладке "Настройки" и создаем группировку - детальные записи.

3. Получение показателя нарастающим итогом в кросс-таблице

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

4. Вывод данных табличной части в одну строку

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

Схема компоновки данных (1С СКД) - удобный конструктор для создания в программных продуктах 1С:Предприятие сложных отчетов, способствующих развитию и отслеживанию автоматизации производства, позволяющих сделать их максимально гибкими и красивыми за минимум времени. Дополнительный плюс Схемы компоновки данных (1С СКД) - автоматическое формирование управляемой формы отчета, а при дальнейшем развитии данного направления, является важным фактором при выборе метода разработки отчета. Но из-за сложности структуры Схемы компоновки данных (1С СКД) и огромного количества настроек зачастую приводит к более длительной разработке отчета, чем через «конструктор выходной формы». Поэтому программисту 1С необходимо разбираться во всех тонкостях работы Схемы компоновки данных (1С СКД), чтобы в дальнейшем ускорить время разработки формирования отчетов.

Разберем первые три вкладки Схемы компоновки данных (1С СКД) – набор данных, связи набора данных и вычисляемые поля.

Набор данных в 1С СКД

Набор данных включает в себя возможность создания трёх объектов – запрос, объект и объединение, остановимся подробнее на каждом из них:

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

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

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

Условия, здесь мы выбираем те объекты, которые можно будет использовать в условиях в СКД.

Часть работы выполняется в схеме компоновки данных, часть программно, рассмотрим на простом примере:

Сначала создадим макет схема компоновки данных у документа и назовем СКД (например: 1С СКД), в нем создаем набор данных объект, далее заполняем поля, к примеру, имеем у документа табличную часть товары с реквизитами – номенклатура, количество и цена.

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

Создадим кнопку на форме документа, опишем механизм работы в управляемых формах:

&НаКлиенте

Процедура Печать()

НашОтчет = ПечатьНаСервере(); //вызываем функцию на сервере

НашОтчет.Показать(); //выводим сформированный отчет

КонецПроцедуры

&НаСервере

Функция ПечатьНаСервере()

ОбъектДокумента = РеквизитФормыВЗначение(“Объект”);

//помещаем табличную часть Товары в структуру с наименованием ТоварыСКД так же, как мы указали в самой СКД имя объекта, содержащего данные

НаборДанных = Новый Структура;

НаборДанных.Вставить(“ТоварыСКД”, ОбъектДокумента.Товары);

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

НашМакет = ОбъектДокумента.ПолучитьМакет(“СКД”);

Настройки = НашМакет.НастройкиПоУмолчанию;

//создаем макет компоновки данных с нашими настройками

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки = КомпоновщикМакета.Выполнить(НашМакет, Настройки);

//выполняем компоновку данных с нашим набором данных

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, НаборДанных);

//формируем табличный документ и выводим в него наш отчет

ДокументОтчета = Новый ТабличныйДокумент;

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ДокументОтчета);

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

Возврат ДокументОтчета;

КонецФункции

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

Объединение

В него мы можем помещать наш запросы и объекты, но в отличие от связи, он просто прибавляет таблицы друг к другу, то есть если мы свяжем две одинаковых таблицы, то получим в итоге одну, а при объединении, она удвоится, рассмотрим на простом примере:

Имеем таблицы:

При связи мы получим:

А при объединении:

Рассмотрим теперь заполнение колонок в наборах данных (некоторые пропустим, так как связаны с другими вкладками, к ним вернемся в будущих статьях):

- поле , указываем общее название реквизита;

­­- путь , указываем название реквизита, по которому будем к нему обращаться в СКД, к примеру, в Вычисляемых полях ;

- заголовок , указываем наименование реквизита, которое будет выводится в отчете;

- ограничение поля , указываем доступность данного реквизита;

- ограничение реквизитов , указываем доступность дочерних элементов, важно, если указана доступность реквизитов, то и само поле будет доступно, возможно в будущих релизах изменят данную механику;

- выражение, по которому вычисляется представление поле , удобно использовать, когда нам нужно изменить немного вывод реквизитов, к примеру, нам нужно, чтобы после имени номенклатуры выводился склад , на котором находится она, тогда заполним следующее: Номенклатура + “ находится на складе ” + Склад. Повторюсь, что обращение реквизитам осуществляется через название, указанное в колонке путь;

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

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

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

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

Связи набора данных в 1С СКД

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

Мы довольно подробно рассмотрели настройки отчетов, реализованных на базе СКД. Теперь разберем более тонкие и детальные настройки вариантов отчета. Окно «продвинутых» настроек варианта отчета вызывается по команде «Еще» - «Прочее» - «Изменить вариант отчета».

Окно изменения варианта отчета разделено на две части:

1. Структура отчета.

2. Настройки отчета.


Раздел структуры варианта отчета аналогичен вкладке «Структура» стандартных настроек отчета. Назначение и настройка группировок подробно рассмотрена в ч. 1 статьи.

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

Раздел настроек варианта отчета дает пользователю широкие возможности по конфигурированию отчета под свои потребности. Она практически полностью совпадает со стандартными настройками отчета, рассмотренными в ч. 1. Рассмотрим все вкладки раздела и отметим различия.

Раздел настроек состоит из следующих вкладок:

1. Параметры. Содержит параметры СКД, доступные пользователю.

Параметр СКД - некоторое значение, использующееся для получения данных отчета. Это может быть значение условия для отбора или проверки данных, а также вспомогательное значение.


Таблица параметров представлена в формате «Параметр»-«Значение». При необходимости можно менять значения параметров. Нажатие на кнопку «Свойства элемента пользовательских настроек» открывает пользовательские настройки элемента.


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

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

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


Пользователь может добавить два вида полей:

  • Новое поле выбор…
  • Новое поле выражение…

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


Например, вычислим оценку количества продаж. Будем считать, что, если продано меньше 10 единиц товара, продали мало, а если больше 10 единиц - много. Для этого зададим 2 значения вычисляемого поля: первое будет с отбором «Количество товаров Меньше или равно "10"», второе с отбором «Количество товаров Больше "10"».

Поля выражения позволяют вычислять значение используя произвольные алгоритмы. В них могут использоваться функции языка запросов и встроенного языка программирования 1С. Окно редактирования поля выражения содержит два поля для выражений детальных и итоговых записей. Итоговые записи - это группировки, настроенные в области «Структура отчета», в них необходимо использовать агрегатные функции («Сумма», «Минимум», «Максимум», «Количество»).

Например, вычислим средний процент скидки. Средний процент скидки рассчитывается по формуле: [Сумма продаж без скидки] - [Сумма продаж со скидкой] / [Сумма продаж без скидки]. Необходимо помнить, что сумма продаж без скидки может быть нулевой, поэтому используем оператор ВЫБОР для проверки. Получим следующие выражения:

· Для детальных записей:

Выбор

Когда [Сумма продаж без скидки] = 0

Тогда 0

Иначе [Сумма продаж без скидки] - [Сумма продаж со скидкой] / [Сумма продаж без скидки]

Конец

· Для итоговых записей:

Выбор

Когда Сумма([Сумма продаж без скидки]) = 0

Тогда 0

Иначе Сумма([Сумма продаж без скидки]) - Сумма([Сумма продаж со скидкой]) / Сумма([Сумма продаж без скидки])

Конец

Как было сказано ранее, в выражении итоговых записей используем агрегатную функцию «Сумма».

3. Группируемые поля. Содержит поля, по которым будет группироваться результат варианта отчета. Группируемые поля настраиваются отдельно для каждой из группировок, но можно задать общие группируемые поля для варианта отчета, если выбрать в дереве структуры корень «Отчет». Можно добавить поле из результата отчета, пользовательское поле или выбрать авто поле, тогда система подберет поля автоматически. Также данная вкладка позволяет изменять порядок следования группируемых полей.


4. Поля. Содержит поля, которые будут выведены в результат варианта отчета. Поля настраиваются отдельно для каждой из группировок, но можно задать общие поля для варианта отчета, если выбрать в дереве структуры корень «Отчет». Можно добавить поле из результата отчета, пользовательское поле или выбрать авто поле, тогда система подберет поля автоматически. Также данная вкладка позволяет изменять порядок следования полей.

Поля можно группировать, чтобы логически выделить какую-либо часть отчета или задать особое расположение колонок. При добавлении группы становится активна колонка «Расположение» и позволяет выбрать один из вариантов расположения:

  • Авто - система располагает поля автоматически;
  • Горизонтально - поля располагаются горизонтально;
  • Вертикально - поля располагаются вертикально;
  • В отдельной колонке - поля располагаются в разных колонках;
  • Вместе - поля располагаются в одной колонке.


5. Отбор. Содержит отборы, используемые в варианте отчета. Настройка отборов была подробно рассмотрена в части 1 данной статьи. Отборы настраиваются отдельно для каждой из группировок, но можно задать общие отборы для варианта отчета, если выбрать в дереве структуры корень «Отчет».


6. Сортировка. Содержит поля сортировки, используемые в варианте отчета. Настройка полей сортировки была подробно рассмотрена в части 1 данной статьи. Сортировка настраиваются отдельно для каждой из группировок, но можно задать общие поля сортировки для варианта отчета, если выбрать в дереве структуры корень «Отчет».


7. Условное оформление. Содержит элементы условного оформления, используемые в варианте отчета. Настройка условного оформления была подробно рассмотрена в части 1 данной статьи. Условное оформление настраивается отдельно для каждой из группировок, но можно задать общие элементы условного оформления для варианта отчета, если выбрать в дереве структуры корень «Отчет».


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


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


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