1с скд вычисляемые поля примеры. Функции языка выражений системы компоновки данных. Работа со значением NULL
В свете ближайшего выхода 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С:Предприятие».
Подстрока (, , ) - Данная функция предназначена для выделения подстроки из строки.
ДлинаСтроки () - Функция предназначена для определения длины строки. Параметр — выражение строкового типа
Строка () - Если в качестве параметра передан массив, то функция возвращает строку, содержащую строковые представления всех элементов массива, разделенных символами "; ". Если в качестве параметра передана таблица значений, то функция возвращает строку, содержащую строковые представления всех строк таблицы значений, причем представления ячеек каждой строки разделяются символами "; ", а строки — смиволом перевода строки. Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка.
Одним из самых удобных и уникальных инструментов разработки в 1С является система компоновки данных (СКД). Мало в каких информационных системах разработчики могут создавать отчеты без написания программного кода. Данный механизм разрабатывался с целью упростить и ускорить разработку отчетных форм и дать больше возможностей пользователям в работе с выводимыми данными. Последнее очень высоко ценится продвинутыми пользователями, которые благодаря этому могут самостоятельно настроить отчет под собственные нужды, не ожидая действий разработчиков.
Создание отчета в 1С через СКД
Процесс разработки отчета при помощи СКД можно разделить на следующие этапы:
- Создание запроса. Запрос можно написать вручную или обойтись без программного кода, воспользовавшись удобным интерфейсом;
- Настройка отчета. Выбираются поля, итоги, группировки, параметры, оформление отчета;
- После этого нам останется лишь подключить получившийся отчет в конфигурацию любым доступным способом.
Несмотря на возможность пользователей настраивать отчеты на СКД, создавать их необходимо через конфигуратор.
Рассмотрим пример создания внешнего отчета на СКД:
Теперь заходим в 1С, открываем наш отчет, чтобы удостовериться в правильности совершенных действий. Данные все отражены, группировки можно сворачивать и разворачивать. Как видите, СКД позволяет получать полноценные отчеты без написания кода за исключением нестандартных требований. Учитывая, что большинство отчетов имеют схожую структуру, знание СКД позволит существенно сократить время на разработку этих объектов.
Большую популярность этому механизму обеспечила поддержка широких возможностей при формировании отчета. Причем пользоваться ими могут не только разработчики, но и простые пользователи.
Возможности СКД
Бывают ситуации, когда мы сделали отчет, а потом приходит пользователь и просит сделать небольшую доработку. Например, вместо названий номенклатуры выводить артикулы. СКД позволяет такие доработки делать пользователям самостоятельно с помощью кнопки «Еще» - «Изменить вариант…».
Открывшееся окно похоже на окно настройки в отчете в конфигураторе, а также оно имеет схожие функции. Чтобы решить поставленную задачу пользователь должен зайти во вкладку «Поля» и изменить поле «Номенклатура». Это поле для редактирования открывается двойным щелчком, и становится доступна кнопка «Выбрать…».
Открывшееся окно предоставляет нам возможность выбора любого значения, которое будет фигурировать в поле «Номенклатура». У некоторых полей слева фигурирует знак плюса – в эти поля разработчик поместил ссылки, значит, мы можем увидеть их реквизиты. Раскрываем «Номенклатура» и видим артикул, который нам и нужен. Выделяем его и выбираем.
В окне изменения вариантов отчета заложены многие полезные функции системы компоновки данных. К примеру, пользователь самостоятельно может изменить порядок группировок, добавить отбор или наложить условное оформление. Завершаем редактирование и формируем отчет – как видим, вся номенклатура теперь отображается в виде артикулов.
Механизм СКД 1С:Предприятие 8.3 также имеет расширенный функционал для разработчиков. При разработке отчета мы пользовались всего 2 вкладками – «Наборы данных» и «Настройки», но в СКД их намного больше. Чтобы пользоваться всеми функциями системы компоновки данных, необходимо представлять, для чего каждая из вкладок нужна:
- Наборы данных – здесь перечислены все запросы, участвующие в формировании отчета;
- Связи наборов данных – используется для построения связи между различными запросами с первой вкладки;
- Вычисляемые поля – перечень добавленных полей не из запроса. Чаще всего используется в случаях, когда на основании значений нескольких полей из запроса нужно получить 1 значение;
- Ресурсы. В 1С так называются поля, по которым необходимо знать итоги. Ресурсы поддерживают различные арифметические операции – сумму, количество, максимум и другие;
- Параметры. Используются, если для формирования отчета необходимо, чтобы пользователь ввел определенные данные – дату, подразделений или номенклатуру, например;
- Макеты. Предназначены для тех случаев, когда пользователи хотят увидеть уникально оформленный отчет. Создать отдельное место для подписей или новую верхнюю часть отчета – все это можно здесь;
- Вложенные схемы. Они необходимы, когда ваш отчет должен содержать данные других отчетов;
- Настройки. В разделе объявляются выводимые поля, группировки, настраивается внешний вид отчета.
Количество возможностей, заложенных в механизме СКД разработчиками, велико, но многие из них используются крайне редко. Даже опытные программисты 1С за годы работы могут не использовать некоторые функции. Для начала успешной работы в СКД достаточно знать основные понятия и часто используемые настройки. В редких случаях на помощь придет документация.
В свете ближайшего выхода 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С:Предприятие».
Подстрока (, , ) - Данная функция предназначена для выделения подстроки из строки.
ДлинаСтроки () - Функция предназначена для определения длины строки. Параметр — выражение строкового типа
Строка () - Если в качестве параметра передан массив, то функция возвращает строку, содержащую строковые представления всех элементов массива, разделенных символами "; ". Если в качестве параметра передана таблица значений, то функция возвращает строку, содержащую строковые представления всех строк таблицы значений, причем представления ячеек каждой строки разделяются символами "; ", а строки — смиволом перевода строки. Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка.
Войдите на сайт как ученик
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: считаем итоги (ресурсы)
Целью этого урока будет:
- Написать отчёт, который выводит список продуктов (справочник Еда), их калорийность и вкус.
- Сделать группировку продуктов по их цвету.
- Познакомиться с возможностью подведения итогов (ресурсы) и вычисляемыми полями.
Создаём новый отчёт
Как и на предыдущих уроках открываем базу "Гастроном " в конфигураторе и создаём новый отчёт через меню "Файл "->"Новый... ":
Вид документа - внешний отчёт :
В форме настройки отчёта пишем имя "Урок3 " и нажимаем кнопку "Открыть схему компоновки данных ":
Оставляем имя схемы по умолчанию и нажимаем кнопку "Готово ":
Добавляем запрос через конструктор
На закладке "Набор данных " нажимаем зелёный плюсик и выбираем пункт "Добавить набор данных - запрос ":
Вместо того, чтобы писать текст запроса вручную, вновь запускаем конструктор запроса :
На вкладке "Таблицы " перетягиваем таблицу "Еда " из первой колонки во вторую:
Выбираем из таблицы "Еда " поля, которые будем запрашивать. Для этого перетаскиваем поля "Наименование ", "Вкус ", "Цвет " и "Калорийность " из второй колонки в третью:
Получилось вот так:
Нажимаем кнопку "ОК " - текст запроса сформировался автоматически:
Формируем настройки представления отчёта
Переходим на закладку "Настройки " и нажимаем на волшебную палочку , чтобы вызвать конструктор настроек :
Выбираем вид отчета "Список ..." и нажимаем кнопку "Далее ":
Перетаскиваем из левой колонки в правую поля, которые будут отображаться в списке и нажимаем "Далее ":
Перетаскиваем из левой колонки в правую поле "Цвет " - по нему будет происходить группировка строк в отчёте. Нажимаем "ОК ":
А вот и результат работы конструктора. Иерархия нашего отчёта:
- отчёт в целом
- группировка "Цвет"
- детальные записи - строки с названиями еды
Сохраним отчёт (кнопка дискета ) и не закрывая конфигуратора тут же откроем его в режиме пользователя. Получилось вот так:
Меняем порядок колонок
Но давайте поменяем порядок колонок (стрелки вверх-вниз), чтобы он был таким как на рисунке ниже:
Сохраним отчёт и вновь откроем в режиме пользователя:
Отлично, так гораздо лучше.
Подводим итог (сумму) по калорийности
Было бы неплохо выводить итог калорийности продуктов по группам. Чтобы видеть сумму калорийности всех продуктов, скажем, белого или жёлтого цвета. Или узнать общую калорийность вообще всех продуктов в базе.
Для этого существует механизм вычисления ресурсов.
Переходим на вкладку "Ресурсы " и перетаскиваем поле "Калорийность " (мы же по нему собираемся итог подводить) из левой колонки в правую.
При этом в поле выражение выбираем из выпадающего списка "Сумма(Калорийность) ", так как итогом будет являться сумма всех входящих в итог элементов:
Сохраняем и формируем отчёт:
У нас появились итоги по каждой из групп и по отчёту в целом.
Подводим итог (среднее) по калорийности
Теперь давайте сделаем так, чтобы в ещё одной колонке выводилась средняя калорийность продуктов по группам и в целом по отчёту.
Трогать уже имеющуюся колонку "Калорийность" нельзя - в неё уже выводится итог-сумма, поэтому заведём ещё одно поле , которое будет являться точной копией поля "Калорийность".
Чтобы завести такое "виртуальное" поле воспользуемся механизмом вычисляемых полей .
Переходим на закладку "Вычисляемые поля " и нажимаем зелёный плюсик:
В колонке "Путь к данным " пишем имя нового поля (слитно , без пробелов ). Пусть оно будет называться "СредняяКалорийность ", а в колонке "Выражение " пишем имя уже существующего поля, на основании которого будет рассчитываться новое поле. Пишем туда "Калорийность ". Колонка "Заголовок " заполнится автоматически.
Мы добавили новое поле ("СредняяКалорийность "), но в отчёте оно само по себе не появится - нужно или вновь вызывать конструктор настроек ("волшебная палочка") или добавить это поле вручную .
Поступим вторым способом. Для этого переходим на закладку "Настройки ", выбираем "Отчет " (ведь мы хотим добавить поле в целом к отчёту), выбираем внизу закладку "Выбранные поля " и перетаскиваем поле "СредняяКалорийность " из левой колонки в правую:
Получилось вот так:
Сохраняем и формируем отчет:
Поле появилось и мы видим, что его значениями являются значения поля "Калорийность". Отлично!
Для этого вновь воспользуемся уже знакомым нам механизмом ресурсов (подведение итогов). Переходим на закладку "Ресурсы " и перетаскиваем поле "СредняяКалорийность " из левой колонки в правую:
При этом в колонке "Выражение " выбираем "Среднее(СредняяКалорийность) ":
Сохраняем и формируем отчёт:
Видим, что по группам, то есть по каждому цвету, и по отчёту в целом совершенно верно посчиталось среднее значение. Но присутствуют лишние записи по отдельным продуктам (не по группам), которые хотелось бы убрать из отчёта.
Знаете почему они появились (значения не по группам)? Потому что, когда мы добавляли поле "СредняяКалорийность " в настройки отчёта, на втором шаге мы выделили весь отчёт в целом и это новое поле попало в элемент "Детальные записи ".
Исправим ошибку. Для этого вернёмся на закладку "Настройки ", выберем "Детальные записи " сначала сверху (шаг 2), а затем "Детальные записи " снизу (шаг 3), перейдём на закладку "Выбранные поля " и увидим в её правой колонке элемент "Авто ".
Элемент "Авто " - это не одно поле. Это несколько полей, которые попадают сюда автоматически на основании вышестоящих настроек.
Чтобы увидеть, что это за поля - нажмём на элемент "Авто " правой кнопкой и выберем пункт "Развернуть ":
Элемент "Авто " раскрылся в следующие поля:
А вот и наше поле "СредняяКалорийность ", которое попало сюда из пункта "Отчет ", когда мы его туда перетаскивали. Просто снимем галку рядом с этим полем, чтобы убрать его вывода.