1с массив в параметрах скд
Здравствуйте, уважаемый читатель! У нас очередной урок по основам системы компоновки. В третьей части вы познакомились с функциями языка выражений СКД, увидели особенности работы системы компоновки, а также разобрались с основными настройками полей компоновки. А сейчас мы рассмотрим новый материал. Поехали!
Дополнительные настройки полей СКД.
Колонка «Тип значения» позволяет указать тип данных для поля компоновки. Зачем указывать тип, например для поля «Номенклатура», если итак известно какого он типа? Это необходимо в случае, если поле компоновки составного типа. Можно выбрать определенный тип, тогда при отборе по этому полю будут выбираться значения данного типа.
Колонка «Доступные значения» позволяет указать доступные для выбора значения и ограничить выбор пользователя определёнными рамками.
Колонка «Оформление» позволяет задавать оформление полю компоновки, не используя макеты. Можно указать цвет шрифта, цвет рамки, ориентацию текста и т.д.
Колонка «Параметры редактирования» позволяет указать, как редактировать поле компоновки. Например, можно указать быстрый выбор элементов из списка в отборе. По умолчанию поле компоновки все параметры редактирования наследует от объекта метаданных.
Вычисляемые поля
На закладке «Вычисляемые поля» компоновки данных можно создавать свои вычисляемые поля.
Зачем нужны вычисляемые поля, если их можно создавать на уровне запроса? Не все поля можно описать с помощью запроса. Если нужно составить сложное поле из разных наборов данных, например типа запрос и объект, тогда без вычисляемых полей не обойтись. Добавить поле компоновки данных нельзя, если источником данных является запрос и стоит автозаполнение, а с помощью вычисляемых можно добавить сколько угодно полей.
В колонке вычисляемого поля «Выражение» нужно написать произвольное выражение, которое использует поля компоновки данных, обращаясь по их пути (колонка «Путь» на закладке «Наборы данных»). Либо можно использовать функции математического преобразования, либо обращаться к функциям общих модулей. Например, запишем в колонке «Путь к данным» название вычисляемого поля «Отклонение», а в поле «Выражение» следующее:
Посмотрите ещё один пример с применением функций СКД Массив и СоединитьСтроки, а ещё можно скачать отчёт по ГТД с использованием этих функций.
По сути, для вычисляемых полей задаются те же самые настройки, что и для полей компоновки. Здесь нет только колонки «Группа иерархии». При написании вычисляемых полей нельзя обращаться к другим вычисляемым полям.
Как передавать параметры и отборы в отчет, построенный на СКД без создания формы отчета?
Как выровнять заголовки столбцов по центру в отчете СКД?
Нужно задать два параметра в поле «Оформление» на закладке «Наборы данных»:
Также на закладке «Настройки» внизу вы найдете еще одну закладку: «Условное оформление». Там для каждой группировки, параметра и т.д. можно задать оформление, какое вы хотите.
Кажется, все рассказал! Как вы помните у вас есть возможность задавать вопросы, если возникли таковые. Постараюсь ответить. В будущем планирую написать еще статьи по этой теме, поэтому не забудьте подписаться на обновления нашего сайта, чтобы не пропустить! Также, обязательно составлю тест для закрепления материала из этого урока.
Акваланг к тому, что погружение довольно глубокое. В литературе встречается мало ссылок на эту тему и пока не «приспичит» в ней не разберешься. Не возникнет даже посыла к такому действию ;) Кстати, в документации об этом сказано очень плохо и непоследовательно, приходится обращаться к сторонней литературе.
В СКД существует 2 вида источников данных: Запрос, объект и объединение (эта штука не в счет, она не источник данных, а обработчик имеющихся). См рис 1:
Итак, если с источником (набором) данных типа «Запрос» нам более или менее понятно, как работать, то по поводу набора данных «Объект» есть трудности.
Для начала опишу, что мы хотим получить на выходе:
Отчет, пользователь нажал кнопку «Сформировать» и отобразился список номенклатуры (см. рис. 2):
Да, я допустил одну неточность, а именно: на снимке нет кнопки «Сформировать«, но есть кнопка «новое действе» (чуть позже объясню, почему так получилось ;)
Да, да! Еще момент: весь этот список выводится из набора данных «Объект»:
Решение:
- Создаем внешний отчет;
- Добавляем макет СКД, назовем его «ОсновнаяСхемаКомпановкиДанных»;
- Добавляем в него набор данных «Объект», назначаем ему имя «СписокНоменклатуры» (должно быть так же, как и в рис. 3);
- В настройках отчета особо не экспериментируем, пусть будет все просто (см. рис. 4)
Ок, половину дела сделали ;)
Теперь сгенерируем основную форму отчета (да, еще момент! Моя конфигурация работает на обычном интерфейсе, но думаю, на управляемых формах вы найдете решение ;) Итак, форма:
Здесь и возникает проблема! Если нажать на кнопку «сформировать» (рис. 5.), то мы увидим ошибку!
Решению данной проблемы я и посвятил данную статью!
Перехватить событие кнопки «Сформировать» не получилось, поэтому, решил воспользоваться костылем. Запустил конфигурацию в режиме отладки и постарался найти ту самую кнопку «сформировать».
Вставлял в форме процедуру «Сформировать», но в нее нет заходов, пришлось переопределить действие кнопки «сформировать» перед открытием формы:
На рис. 8 помимо изменения действия формы приведен пример запроса, его обработки и передачи сгенерированных данных в СКД. Изучим его белее внимательно:
- Генерируем входные данные для СКД;
- Инициализируем СКД;
- Выводим результат НА ФОРМУ (обратите на это так же внимание!).
Вспомним схему взаимодействия объектов системы компоновки данных:
Схема компоновки данных во внешнем отчете дотупна как глобальный объект в методе формы СхемаКомпоновкиДанных. К ней так же можно обратиться по имени, передав его в метод ПолучитьМакет (см. Рис. 8)
Далее, самостоятельно изучите используя представленную схему на рис. 9 и справочную систему, как и зачем взаимодействовать с данными объектами ;)
Основной кусок кода приведен ниже:
Да! Вот еще приятный момент.
В данном примере, как видите (см. рис. 2), вывод осуществляется в форму, а не в табл. документ! И это очень хорошо, ведь мы можем работать с формой (программно перехватывать события элемента формы, делать всякие фишки с drag and drop и прочее ;)
В табличном документе мы можем просто вывести обработанные данные на экран и передать управление документом пользователю и мы не можем никак влиять на дальнейший процесс редактирования данного контента!
См. в справочной системе «Поле табличного документа«, а я всего лишь приведу выдержку из встроенной документации системы 1с Предприятие 8.2:
«Поле табличного документа представляет собой табличный документ, размещенный в форме. Наряду с многообразием оформительских возможностей табличного документа это позволяет организовывать обработку событий, возникающих при выборе ячеек, картинок, а также других элементов управления, размещенных в поле табличного документа.»
Что-то вроде 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). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначениев скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 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С:Предприятие».
Подстрока(, , ) – Данная функция предназначена для выделения подстроки из строки.
ДлинаСтроки() – Функция предназначена для определения длины строки. Параметр — выражение строкового типа
Строка() – Если в качестве параметра передан массив, то функция возвращает строку, содержащую строковые представления всех элементов массива, разделенных символами “; “. Если в качестве параметра передана таблица значений, то функция возвращает строку, содержащую строковые представления всех строк таблицы значений, причем представления ячеек каждой строки разделяются символами “; “, а строки — смиволом перевода строки. Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка.
Важно! Если параметр функции имеет тип Строка и в нем указывается имя поля, которое содержит пробелы, то такое имя поля должно быть заключено в квадратные скобки.
Например: "[Количество Оборот]".
1. Сумма (Total) - рассчитывает сумму значений выражений, переданных ей в качестве аргумента для всех детальных записей. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
2. Количество (Count) - рассчитывает количество значений отличных от значения NULL. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
Синтаксис :
Количество([Различные] Параметр)
В указания получения различных значений следует перед параметром метода Количество указать Различные (Distinct).
Пример :
Количество(Продажи.Контрагент)
Количество(Различные Продажи.Контрагент)
3. Максимум (Maximum) - получает максимальное значение. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
4. Минимум (Minimum) - получает минимальное значение. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
5. Среднее (Average) - получает среднее значение для значений, отличных от NULL. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
6. Массив (Array) - формирует массив, содержащий для каждой детальной записи значение параметра.
Синтаксис :
Массив([Различные] Выражение)
В качестве параметра можно использовать таблицу значений. При этом результатом работы функции будет массив, содержащий значения первой колонки таблицы значений, переданной в качестве параметра. Если выражение содержит функцию Массив, то считается, что данное выражение является агрегатным. Если указано ключевое слово Различные, то получаемый массив не будет содержать дублирующихся значений.
7. ТаблицаЗначений (ValueTable) - формирует таблицу значений, содержащую столько колонок, сколько параметров у функции. Детальные записи получаются из наборов данных, которые нужны для получения всех полей, участвующих в выражениях параметров функции.
Синтаксис :
ТаблицаЗначений([Различные] Выражение1 [КАК ИмяКолонки1][, Выражение2 [КАК ИмяКолонки2]. ])
Если параметрами функции выступают поля–остатки, то в результирующую таблицу значений попадут значения для записей по уникальным комбинациям измерений из других периодов. При этом значения получаются только для полей-остатков, измерений, счетов, полей периодов и их реквизитов. Значениями остальных полей в записях из других периодов считаются равными NULL. Если выражение содержит функцию ТаблицаЗначений, то считается, что данное выражение является агрегатным. Если указано ключевое слово Различные, то в получаемой таблице значений не будет строк, содержащих одинаковые данные. После каждого параметра может располагаться необязательное ключевое слово КАК и имя, которое будет назначено колонке таблицы значений.
Пример :
ТаблицаЗначений(Различные Номенклатура, ХарактеристикаНоменклатуры КАК Характеристика)
8. Свернуть (GroupBy) - предназначена для удаления дубликатов из массива.
Синтаксис :
Свернуть(Выражение, НомераКолонок)
- Выражение - выражение типа Массив или ТаблицаЗначений, значения элементов которого нужно свернуть;
- НомераКолонок - (если выражение имеет тип ТаблицаЗначений) тип Строка. Номера или имена (через запятую) колонок таблицы значений, среди которых нужно искать дубликаты. По умолчанию – все колонки.
9. ПолучитьЧасть (GetPart) - получает таблицу значений, содержащую определенные колонки из исходной таблицы значений.
Синтаксис :
ПолучитьЧасть(Выражение, НомераКолонок)
- Выражение - тип ТаблицаЗначений. Таблица значений, из которой нужно получить колонки;
- НомераКолонок - тип Строка. Номера или имена (через запятую) колонок таблицы значений, которые нужно получить.
Пример :
ПолучитьЧасть(Свернуть(ТаблицаЗначений(НомерТелефона, Адрес) ,"НомерТелефона"),"НомерТелефона");
10. Упорядочить (Order) - предназначена для упорядочивания элементов массива и таблицы значений.
Синтаксис :
Упорядочить(Выражение, НомераКолонок)
- Выражение - Массив или ТаблицаЗначений, из которой нужно получить колонки;
- НомераКолонок - (если выражение имеет тип ТаблицаЗначений) номера или имена (через запятую) колонок таблицы значений, по которым нужно упорядочить. Может содержать направление упорядочивания и необходимость автоупорядочивания: Убыв/Возр + Автоупорядочивание.
Пример :
Упорядочить(ТаблицаЗначений(НомерТелефона, Адрес, ДатаЗвонка),"ДатаЗвонка Убыв");
11. СоединитьСтроки (JoinStrings) - предназначена для объединения строк в одну строку.
Синтаксис :
СоединитьСтроки (Значение, РазделительЭлементов, РазделителиКолонок)
- Значение - выражения, которые нужно объединить в одну строку. Если является Массивом, то в строку будут объединяться элементы массива. Если является ТаблицаЗначений, то в строку будут объединяться все колонки и строки таблицы;
- РазделительЭлементов - строка, содержащая текст, который нужно использовать в качестве разделителя между элементами массива и строками таблицы значений. По умолчанию – символ перевода строк;
- РазделителиКолонок - строка, содержащая текст, который нужно использовать в качестве разделителя между колонками таблицы значений. По умолчанию "; ".
12. ГрупповаяОбработка (GroupProcessing) - возвращает объект ДанныеГрупповойОбработкиКомпоновкиДанных. В объект в свойство Данные помещается в виде таблицы значений значения группировок для каждого выражения, указанного в параметре функции Выражения. В случае использования иерархической группировки каждый уровень иерархии обрабатывается отдельно. Значения для иерархических записей также помещаются в данные. В свойство ТекущийЭлемент объекта помещается строка таблицы значений, для которой в настоящий момент вычисляется функция.
Синтаксис :
ГрупповаяОбработка(Выражения, ВыраженияИерархии, ИмяГруппировки)
- Выражения. Выражения, которые нужно вычислить. Строка, в которой через запятую перечислены выражения, которые нужно вычислить. После каждого выражение возможно наличие необязательного ключевого слова КАК и имени колонки результирующей таблицы значений. Каждое выражение образует колонку таблицы значений свойства Данные объекта ДанныеГрупповойОбработкиКомпоновкиДанных.
- ВыраженияИерархии. Выражения, которые нужно вычислить для иерархических записей. Аналогично параметру Выражения с тем отличием, что параметр ВыраженияИерархии используется для иерархических записей. Если параметр не указан, то для вычисления значений для иерархических записей используется выражения, указанные в параметре Выражение.
- ИмяГруппировки. Имя группировки, в которой нужно вычислять группировку обработки. Строка. Если не указано, то вычисление происходит в текущей группировке. Если вычисление идет в таблице и параметр содержит пустую строку, или не указан, то значение вычисляется для группировки – строки. Компоновщик макета при генерации макета компоновки данных заменяет данное имя на имя группировки в результирующем макете. Если группировка не доступна, то функция будет заменена на значение NULL.
14. Любой (Any) - если хоть одна запись имеет значение Истина, то результат Истина, иначе Ложь
15. СтандартноеОтклонениеГенеральнойСовокупности (Stddev_Pop) - вычисляет стандартное отклонение совокупности. Вычисляется по формуле: SQRT(ДисперсияГенеральнойСовокупности(X)).
Пример :
X | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Y | 7 | 1 | 2 | 5 | 7 | 34 | 32 | 43 | 87 |
Результат: 805.694444
16. СтандартноеОтклонениеВыборки (Stddev_Samp) - вычисляет совокупное типовое стандартное отклонение. Вычисляется по формуле: SQRT(ДисперсияВыборки(X)).
Пример :
X | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Y | 7 | 1 | 2 | 5 | 7 | 34 | 32 | 43 | 87 |
Результат: 28.3847573
17. ДисперсияВыборки (Var_Samp) - вычисляет типовое различие ряда чисел без учета значений NULL в этом наборе. Вычисляется по формуле: (Сумма(X^2) - Сумма(X)^2 / Количество(X)) / (Количество(X) - 1). Если Количество(X) = 1, то возвращается значение NULL.
18. ДисперсияГенеральнойСовокупности (Var_Pop) - вычисляет различие совокупности ряда чисел без учета значений NULL в этом наборе. Вычисляется по формуле: (Сумма(X^2) - Сумма(X)^2 / Количество(X)) / Количество(X)
19. КовариацияГенеральнойСовокупности (Covar_Pop) - вычисляет ковариацию ряда числовых пар. Вычисляется по формуле: (Сумма(Y * X) - Сумма(X) * Сумма(Y) / n) / n, где n число пар (Y, X) в которых ни Y ни X не являются NULL.
Синтаксис :
КовариацияГенеральнойСовокупности(Y, X)
20. КовариацияВыборки (Covar_Samp) - вычисляет типовое различие ряда чисел без учета значений NULL в этом наборе. Вычисляется по формуле: (Сумма(Y * X) - Сумма(Y) * Сумма(X) / n) / (n-1), где n число пар (Y, X) в которых ни Y ни X не являются NULL.
Синтаксис :
КовариацияВыборки(Y, X)
21. Корреляция (Corr) - вычисляет коэффициент корреляции ряда числовых пар. Вычисляется по формуле: КовариацияГенеральнойСовокупности(Y, X) / (СтандартноеОтклонениеГенеральнойСовокупности(Y) * СтандартноеОтклонениеГенеральнойСовокупности(X)). Не учитываются пары, в которых Y или X равны NULL.
Синтаксис :
Корреляция(Y, X)
22. РегрессияНаклон (Regr_Slope) - вычисляет наклон линии. Вычисляется по формуле: КовариацияГенеральнойСовокупности(Y, X) / ДисперсияГенеральнойСовокупности(X). Вычисляется без учета пар, содержащих NULL.
Синтаксис :
РегрессияНаклон(Y, X)
23. РегрессияОтрезок (Regr_Intercept) - вычисляет Y-точку пересечения линии регресса. Вычисляется по формуле: Среднее(Y) - РегрессияНаклон(Y, X) * Среднее(X). Вычисляется без учета пар, содержащих NULL.
Синтаксис :
РегрессияОтрезок(Y, X)
24. РегрессияКоличество (Regr_Count) - вычисляет количество пар не содержащих NULL.
Синтаксис :
РегрессияКоличество(Y, X)
25. РегрессияR2 (Regr_R2) - вычисляет коэффициент детерминации. Вычисляется без учета пар, содержащих NULL.
Синтаксис :
РегрессияR2(Y, X)
- Y - тип Число;
- X - тип Число.
- Null - если ДисперсияГенеральнойСовокупности(X) = 0;
- 1 - если ДисперсияГенеральнойСовокупности(Y)=0 И ДисперсияГенеральнойСовокупности(X)<>0;
- POW(Корреляция(Y,X),2) - если ДисперсияГенеральнойСовокупности(Y)>0 И ДисперсияГенеральнойСовокупности(X)<>0.
26. РегрессияСреднееX (Regr_AvgX) - вычисляет среднее число X после исключения X и Y пар, где или X или Y являются пустыми. Среднее(X) вычисляется без учета пар, содержащих NULL.
Синтаксис :
РегрессияСреднееX(Y, X)
27. РегрессияСреднееY (Regr_AvgY) - вычисляет среднее число Y после исключения X и Y пар, где или X или Y являются пустыми. Среднее(Y) вычисляется без учета пар, содержащих NULL.
Синтаксис :
РегрессияСреднееY(Y, X)
28. РегрессияSXX (Regr_SXX) - вычисляется по формуле: РегрессияКоличество(Y, X) * ДисперсияГенеральнойСовокупности(X). Вычисляется без учета пар, содержащих NULL.
Синтаксис :
РегрессияSXX(Y, X)
- Y - тип Число;
- X - тип Число.
Пример :
X | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Y | 7 | 1 | 2 | 5 | 7 | 34 | 32 | 43 | 87 |
Результат: 60
29. РегрессияSYY (Regr_SYY) - вычисляется по формуле: РегрессияКоличество(Y, X) * ДисперсияГенеральнойСовокупности(Y). Вычисляется без учета пар, содержащих NULL.
Синтаксис :
РегрессияSYY(Y, X)
30. РегрессияSXY (Regr_SXY) - вычисляется по формуле: РегрессияКоличество(Y, X) * КовариацияГенеральнойСовокупности(Y, X). Вычисляется без учета пар, содержащих NULL.
Синтаксис :
РегрессияSXY (Y, X)
31. МестоВПорядке (Rank)
Синтаксис :
МестоВПорядке(Порядок, ПорядокИеррахии, ИмяГруппировки)
- Порядок – тип Строка. Содержит выражения, в последовательности которых нужно расположить групповые записи, разделенные через запятую. Направление упорядочивания управляется при помощи слов Возр, Убыв. После поля также можно указать строку Автоупорядочивание, что обозначает, что при упорядочивании ссылок нужно использовать поля упорядочивания, определенные для объекта, на который ссылка. Если последовательность не указана, то значение рассчитывается в последовательности группировки;
- ПорядокИеррахии – тип Строка. Содержит выражения упорядочивания для иерархических записей;
- ИмяГруппировки – тип Строка. Имя группировки, в которой нужно вычислять группировку обработки. Если не указано, то вычисление происходит в текущей группировке. Если вычисление идет в таблице и параметр содержит пустую строку, или не указан, то значение вычисляется для группировки – строки. Компоновщик макета при генерации макета компоновки данных заменяет данное имя на имя группировки в результирующем макете. Если группировка не доступна, то функция будет заменена на значение NULL.
Пример :
МестоВПорядке("[Количество Оборот]")
32. КлассификацияABC (ClassificationABC)
Синтаксис :
КлассификацияABC(Значение, КоличествоГрупп, ПроцентыДляГрупп, ИмяГруппировки)
Содержание
Набор данных — запрос.
- В отличие от обычного запроса в запросе для компоновки данных отсутствует предложение ИТОГИ. Вместо этого итоги формируются на закладке «Ресурсы». На этой закладке выбираются поля, по которым необходимо получить итоговые выражения. А на закладке «Настройки» указывается в каком разрезе будут получаться итоги, то есть здесь создаются соответствующие группировки и по ним рассчитываются ресурсы. Более подробно об этом можно прочитать в статье Настройка итогов в схеме компоновки данных 1С.
- Следующий момент касается настройки отборов. Существует две возможности выполнения.
- Через настройки варианта отчёта. Это можно сделать на вкладке «Настройки» — «Отбор». Если используем этот вариант, то он является наиболее гибким, так как можно указывать разные виды сравнений, которые может выбирать даже пользователь. Кроме того, при использовании этого варианта, условия фильтрации налагаются в самом запросе. Если отчёт базируется на пакетном запросе с использованием временных таблиц, тогда отбор будет воздействовать на все таблицы пакетного запроса, где встречается поле отбора.
- На уровне запроса. Если используем запрос, то кроме операции равенство не сможем использовать ничего.
Исключением является случай, когда нам нужно выполнить «жёсткую» фильтрацию данных по некоторому значению. Допустим, по значению перечисления. Во вкладке «Параметры» можем задать условие. Если включим флаг «Ограничение доступности», то пользователь не сможет отменить это условие.
- Если в запросе указать некоторое поле сортировки, то пользователь в настройке своего варианта отчета укажет другое поле, тогда наша настройка, выполненная на уровне запроса будет иметь низший приоритет. Сначала будет выполняться сортировка, установленная пользователем в настройке варианта отчета. Поэтому, если нужно выставить сортировку «по умолчанию», то используем настройки варианта отчёта в Конфигураторе.
- А если необходимо настроить «жёсткую» сортировку в отчете, чтобы пользователь не смог её поменять? Тогда устанавливаем сортировку на уровне запроса, а на закладке «Наборы данных» настроим ограничение поля. Выделим нужный набор данных и в колонке «Ограничение поля» — «Упорядочивание» поставим галочку.
Параметры виртуальных таблиц.
- Построение виртуальных таблиц регистров бухгалтерии, регистров накопления, регистров сведений зависит от заданной даты. Это может быть как одна дата, так и интервал, как например, для таблицы остатков и оборотов. СКД создана так, что если в основе отчёта лежит виртуальная таблица, тогда необходимо дать пользователю выбрать, за какой интервал или на какую дату формировать отчёт. СКД автоматически добавляет необходимые параметры периода в схему компоновки.
- Если в запросе выбрана виртуальная таблица остатков или виртуальная таблица регистров сведений, тогда автоматически добавляется параметр с названием «Период».
- Если в запросе выбрана виртуальная таблица остатков и оборотов или виртуальная таблица оборотов, тогда автоматически добавляются параметры «НачалоПериода» и «КонецПериода».
- Что сделать, если нужно получить остатки на конец периода? Существует два способа:
- Заходим на вкладку «Параметры» и в параметре «Период» в колонке «Выражения» пишем следующее:
&КонецПериода. Также включим флаг «Ограничение доступности». - Полностью избавляемся от параметра «Период» и заменяем его на параметр «КонецПериода». Настроим необязательный параметр виртуальной таблицы:
- Заходим на вкладку «Наборы данных» нажимаем на кнопку «Конструктор запроса…».
- На вкладке «Компоновка данных» в левом верхнем углу нажимаем кнопку для вызова диалога «Параметры виртуальной таблицы» (это серая квадратная кнопка с изображением шестерёнки на фоне маленькой таблицы).
- В поле «Период» диалогового окна пишем: &КонецПериода.
- Теперь в тексте запроса набора данных в параметрах виртуальной таблицы этот параметр появиться в окружении фигурных скобок:
Фигурные скобки указывают на расширение языка запросов компоновки данных. Также это указывает на то, что этот параметр является необязательным. Это означает, что если он не будет определён в схеме компоновки данных, то остатки будут получены на текущую дату.
Расширение языка запросов.
Это специальные инструкции, которые заключены в фигурные скобки в тексте запроса. В этих инструкциях указываются поля и параметры, которыми можно оперировать при настройке варианта отчёта. Данные из фигурных скобок будут присутствовать в схеме компоновки даже в том случае, когда флажок «Автозаполнение» отключен.
Когда создаётся набор данных запрос, по умолчанию происходит автоматическое заполнение доступных полей схемы компоновки данных на основании созданного запроса (флажок «Автозаполнение» установлен на закладке «Наборы данных»).
Как работает автозаполнение доступных полей схемы компоновки данных?
- Становятся доступными поля из списка выборки запроса и их дочерние поля.
- Если выбираем из регистра накопления, то даже не включённые в запрос поля регистра становятся доступными в полях компоновки данных. Но эти поля доступны только для отбора (в условных выражениях)
и их нельзя будет использовать в качестве выходных полей. - Параметры виртуальных таблиц «Период», «НачалоПериода» и «КонецПериода» становятся
доступными для отбора. - Если в тексте запроса указано «жёсткое» условие, тогда этот параметр тоже будет добавлен на закладке «Параметры».
Если флажок «Автозаполнение» снят, то поля схемы компоновки данных очищаются, но остаются параметры, заключённые в фигурные скобки в тексте запроса.
Как самостоятельно заполнить поля схемы компоновки данных?
Снимаем флажок «Автозаполнение» на закладке «Наборы данных».
Нажимаем на кнопку «Конструктор запроса…». Сформируем следующий запрос:
На вкладке «Таблицы» можем задать параметры виртуальных таблиц для всех таблиц.
Теперь на вкладке «Компоновка данных» выбираем закладку «Поля». Здесь задаём поля выборки, которые
будут представлены в схеме компоновки.Поле «И..» означает, что будут включены в выборку дочерние записи
полей сложного типа, таких как справочники и документы и т.п. Если поле примитивного типа, такого как число, то поставить флаг в поле «И..» будет невозможно.Выберем два поля «Номенклатура» и «Количество». Для поля «Номенклатура» установим флаг «И..»,
чтобы выбирались дочерние записи. Получиться следующий запрос:В новом запросе, в фигурных скобках, появилась ещё одна секция ВЫБРАТЬ — это текст расширения, который указывает на поля, которые будут доступны в компоновке. Поле «Номенклатура.*» указывает, что будет доступно поле «Номенклатура» и её дочерние реквизиты, такие как «Код», «Наименование» и т.п. Итак, мы заполнили поля компоновки самостоятельно.
Но сейчас мы не можем использовать поля в условиях компоновки. Если зайти на закладку «Настройки» и выбрать вкладку «Отбор», то нельзя установить условия ни на одно поле, которое мы выбрали в предыдущем пункте. Почему?
Наложение условий на параметры виртуальной таблицы также нужно указывать на вкладке «Компоновка данных» Конструктора запроса. В левом верхнем углу нажимаем кнопку для вызова диалога «Параметры виртуальной таблицы»
(это серая квадратная кнопка с изображением шестерёнки на фоне маленькой таблицы). В поле «Условие» диалогового окна пишем: Номенклатура. Теперь в тексте запроса набора данных в параметрах виртуальной таблицы этот параметр «Номенклатура» появиться в окружении фигурных скобок:В обычном языке запросов указание параметра выглядит так: Номенклатура = &Номенклатура. Но в расширении языка запросов это записывается по-другому. Указывается только название поля. Здесь мы не указываем операцию равенства, неравенства или в иерархии, так как пользователь сам будет выбирать нужную операцию в своих настройках.
На вкладке «Компоновка данных» Конструктора запроса мы видим ёще одну закладку, «Условия». Она нужна, чтобы указать в расширении языка запросов условия на предложение ГДЕ. Выберем поле «Количество». Теперь это поле доступно в условиях на закладке «Настройки» — «Отбор». А в тексте запроса появились новые строчки, заключенные в фигурные скобки.
Если отбор по полю количество будет указан, то в итоговый запрос будет вставлено это предложение. Где вид условия и значение сравнения будет определяться по настройке варианта отчёта.
Итак, я думаю, что на сегодня материала достаточно. Если остались непонятные моменты, то не стесняйтесь спрашивать, ведь для этого и предусмотрена возможность комментирования. Уже подготовлен тест для закрепления этого материала, так что пройдите его, чтобы улучшить знания!
А в третей части этой серии уроков мы рассмотрим функции языка выражений СКД, поговорим об особенностях работы системы компоновки, а также разберем основные настройки полей компоновки. Успехов, в понимании этого нелегкого материала!
Читайте также: