Грамотное использование схемы компоновки данных (СКД) позволяет:
Но далеко не все разработчики по максимуму используют возможности схемы, так как не все её настройки очевидны и интуитивно понятны. В частности многие знают, что в 1С в СКД есть вычисляемые поля, однако, не до конца представляют область их использования и методы работы с ними.
В большинстве случаев в качестве источника данных в схеме компоновки выступает запрос. В принципе, внутри самого запроса уже можно использовать различные формулы, конструкции и выражения. Возникает закономерный вопрос, зачем же нужен дублирующий функционал?
Дело в том, что СКД – это нечто большее, нежели просто отображение результата выполнения запроса и это прекрасно видно из формы создания схемы (Рис.1).
Вычисляемые поля позволяют выполнять определенные действия со сформированным набором данных:
Давайте по этому списку и пойдем.
Смоделируем ситуацию, когда необходимо получить в отдельную ячейку все номера документов поступления по контрагенту:
таким образом, мы в нашей схеме создали дополнительное расчетное поле;
Как видно из приведенного примера, никаких сложностей в добавлении и обработке вычисляемых полей нет. Мы использовали две функции: Массив() и СоединитьСтроки().
Несколько слов о последней. Помимо первого параметра, указывающего на идентификатор массива, значений или значения, в ней могут быть установлены еще два:
В качестве источника данных для заполнения вычисляемого поля могут выступать функции общего модуля.
Несколько важных моментов:
В качестве примера использования мы возьмем тот же самый запрос к документам поступления и выведем в отдельную колонку. Сам запрос мы описывать не будем, перейдем непосредственно к вычисляемым полям:
Таким образом, мы видим, что практически любой обработчик данных может быть инициализирован из СКД, что значительно расширяет возможности использования схемы.
Достаточно часто в работе разработчика возникает ситуация, когда в поле СКД необходимо вывести результат деления:
Во избежание проблем, в этих случаях желательно в вычисляемое поле ввести проверку на деление на 0.
Сделать это можно с помощью конструкции «Выбор Когда ….Тогда… Иначе… Конец».
В конце несколько слов о достаточно новой функции ВычислитьВыражение(). С её помощью, в частности можно вычислять отклонения в стоимости между текущей и предыдущей строкой, накопительный остаток и т.д.
Допустим, получить СуммуДокумента из предыдущей строки нашего запроса можно указав в поле «Выражение» значение ВычислитьВыражение(«СуммаДокумента», «ПредыдущаяСумма»).
Схема компоновки данных (1С СКД) - удобный конструктор для создания в программных продуктах 1С:Предприятие сложных отчетов, способствующих развитию и отслеживанию автоматизации производства, позволяющих сделать их максимально гибкими и красивыми за минимум времени. Дополнительный плюс Схемы компоновки данных (1С СКД) - автоматическое формирование управляемой формы отчета, а при дальнейшем развитии данного направления, является важным фактором при выборе метода разработки отчета. Но из-за сложности структуры Схемы компоновки данных (1С СКД) и огромного количества настроек зачастую приводит к более длительной разработке отчета, чем через «конструктор выходной формы». Поэтому программисту 1С необходимо разбираться во всех тонкостях работы Схемы компоновки данных (1С СКД), чтобы в дальнейшем ускорить время разработки формирования отчетов.
Разберем первые три вкладки Схемы компоновки данных (1С СКД) – набор данных, связи набора данных и вычисляемые поля.
Набор данных в 1С СКД
Набор данных включает в себя возможность создания трёх объектов – запрос, объект и объединение, остановимся подробнее на каждом из них:
Представляет собой обычный запрос, который формируется по кнопке Конструктор запроса. Если установлен флаг Автозаполнение, то все выбранные реквизиты автоматически попадут в поля набора данных. Так же есть возможность самим настроить заполнение полей в запросе на вкладке Компоновка данных, где находятся три вкладки:
Таблицы, здесь выбираются таблицы, которые будут участвовать при формировании отчета, обычно выбираются данные по умолчанию, так как на вкладке Таблицы и поля мы уже выбрали нужные нам документы, справочники, регистры…
Поля, здесь мы выбираем те объекты, которые должны попасть в отчет, флаг дочерние указывает, будут ли доступные дочерние элементы по объекту или нет, логично, что у строковых, числовых и подобных данных нельзя будет установить флаг в положение Истина.
Условия, здесь мы выбираем те объекты, которые можно будет использовать в условиях в СКД.
Часть работы выполняется в схеме компоновки данных, часть программно, рассмотрим на простом примере:
Сначала создадим макет схема компоновки данных у документа и назовем СКД (например: 1С СКД), в нем создаем набор данных объект, далее заполняем поля, к примеру, имеем у документа табличную часть товары с реквизитами – номенклатура, количество и цена.
Добавим три поля и заполняем по каждому колонку поле наименованием реквизитов, остальные колонки заполнятся автоматически:
Создадим кнопку на форме документа, опишем механизм работы в управляемых формах:
&НаКлиенте
Процедура Печать()
НашОтчет = ПечатьНаСервере(); //вызываем функцию на сервере
НашОтчет.Показать(); //выводим сформированный отчет
КонецПроцедуры
&НаСервере
Функция ПечатьНаСервере()
ОбъектДокумента = РеквизитФормыВЗначение(“Объект”);
//помещаем табличную часть Товары в структуру с наименованием ТоварыСКД так же, как мы указали в самой СКД имя объекта, содержащего данные
НаборДанных = Новый Структура;
НаборДанных.Вставить(“ТоварыСКД”, ОбъектДокумента.Товары);
//получаем наш макет и выставляем настройки по умолчанию, чтобы все настройки вывода отчета брались из нашего макета
НашМакет = ОбъектДокумента.ПолучитьМакет(“СКД”);
Настройки = НашМакет.НастройкиПоУмолчанию;
//создаем макет компоновки данных с нашими настройками
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(НашМакет, Настройки);
//выполняем компоновку данных с нашим набором данных
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, НаборДанных);
//формируем табличный документ и выводим в него наш отчет
ДокументОтчета = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументОтчета);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Возврат ДокументОтчета;
КонецФункции
При желании можно получить области и любого другого макета и так же вывести в данном отчете, к примеру, имеем типовой макет формирования платежки и в нем очень хорошо создана шапка, тогда, чтобы нам не делать лишнюю работу, просто сначала получим макет, выведем шапку, потом сформируем и выведем наш отчет на СКД.
Объединение
В него мы можем помещать наш запросы и объекты, но в отличие от связи, он просто прибавляет таблицы друг к другу, то есть если мы свяжем две одинаковых таблицы, то получим в итоге одну, а при объединении, она удвоится, рассмотрим на простом примере:
Имеем таблицы:
При связи мы получим:
А при объединении:
Рассмотрим теперь заполнение колонок в наборах данных (некоторые пропустим, так как связаны с другими вкладками, к ним вернемся в будущих статьях):
- поле , указываем общее название реквизита;
- путь , указываем название реквизита, по которому будем к нему обращаться в СКД, к примеру, в Вычисляемых полях ;
- заголовок , указываем наименование реквизита, которое будет выводится в отчете;
- ограничение поля , указываем доступность данного реквизита;
- ограничение реквизитов , указываем доступность дочерних элементов, важно, если указана доступность реквизитов, то и само поле будет доступно, возможно в будущих релизах изменят данную механику;
- выражение, по которому вычисляется представление поле , удобно использовать, когда нам нужно изменить немного вывод реквизитов, к примеру, нам нужно, чтобы после имени номенклатуры выводился склад , на котором находится она, тогда заполним следующее: Номенклатура + “ находится на складе ” + Склад. Повторюсь, что обращение реквизитам осуществляется через название, указанное в колонке путь;
- выражение упорядочивание , удобный механизм настройки упорядочивания отчета, где условие можно задать вручную, аналогично предыдущему пункту, но как показывает практика, часто этот механизм работает не так, как хотелось бы, и советую пользоваться стандартной сортировкой;
- тип значения , указывается тип значения реквизита, заполнять необходимо, если будете пользоваться следующим полем;
- доступные значения , работает лишь при заполненном типе значения , открываем форму заполнения и в колонке Значение указываем элемент, который нужно изменить, согласно типу, это может быть предопределенные объекты или у числовых, к примеру, реквизитов простые значения, в представлении указываем, на что нам нужно поменять, пример булевского типа:
- оформление – стандартная настройка формата поля, аналогичная настройке в управляемых формах, позволяет более точно и красиво настроить вывод определенного реквизита.
Связи набора данных в 1С СКД
Здесь устанавливается только левое соединение , по принципу, аналогичному связей в запросах, в источнике связи указываем основную таблицу для соединения, в приемнике дополнительную. В выражение источник и выражение приемник указываем реквизиты, по которым будет происходить связь. Остальные колонки рассмотрим подробнее, когда будем разбирать вкладку Параметры . Если нет дополнительной связью с параметрами, то рекомендуется связь делать в запросе, это ускорит работу отчета.
1. Вычислить (Eval) - предназначена для вычисления выражения в контексте некоторой группировки. Функция используется для совместимости с предыдущими версиями платформы. Вместо неё рекомендуется использовать функцию ВычислитьВыражение.
Синтаксис
:
Вычислить(Выражение, Группировка, ТипРасчета)
Параметры :
Синтаксис
:
ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)
Параметры :
В данном примере вычисляется значение текущей иерархии:
Выбор
Когда Уровень() > 0
Тогда ВычислитьВыражение("Ссылка", "Иерархия")
Иначе Null
Конец
Примечания
:
Функция учитывает отбор группировок, но не учитывает иерархические отборы. Функция не может применяться к группировке в групповом отборе этой группировки. Например, в отборе группировки Номенклатура нельзя использовать выражение ВычислитьВыражение("Сумма(СуммаОборот)", "ОбщийИтог") > 1000 . Но такое выражение можно использовать в иерархическом отборе. Если конечная запись предшествует начальной, то считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют. При расчете интервальных выражений для общего итога (параметр Группировка имеет значение "ОбщийИтог") считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют. Компоновщик макета при генерации выражения функции ВычислитьВыражение, в случае если выражение упорядочивания содержит поля, которые не могут быть использованы в группировке, заменяет функцию ВычислитьВыражение на NULL.
3. ВычислитьВыражениеСГруппировкойМассив (EvalExpressionWithGroupArray) - функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Синтаксис
:
ВычислитьВыражениеСГруппировкойМассив (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)
Параметры :
Компоновщик макета при генерации выражений для вывода пользовательского поля, в выражении которого присутствует только функция ВычислитьМассивСГруппировкой генерирует выводимое выражение таким образом, чтобы данные выводить представления и данные были упорядочены.
Например, для пользовательского поля с выражением:
ВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаОборот)", "Контрагент")
компоновщик макета сгенерирует для вывода следующее выражение:
СоединитьСтроки(Массив(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений ("Представление(Сумма(НаборДанных.СуммаОборот)), Сумма(НаборДанных.СуммаОборот)", "НаборДанных.Контрагент"), "2")))
4. ВычислитьВыражениеСГруппировкойТаблицаЗначений (EvalExpressionWithGroupValueTable) - функция возвращает таблицу значений, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Синтаксис
:
ВычислитьВыражениеСГруппировкойТаблицаЗначений (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)
Параметры :
Результатом работы данной функции будет таблица значений с колонками Контрагент и ОбъемПродаж, в которых будут находиться контрагенты с их объемами продаж.
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет конвертировано в НаборДанных.Контрагент.
Например, пользовательского поля с выражением:
ВычислитьВыражениеСГруппировкойТаблицаЗначений ("Контрагент, Сумма(СуммаОборот)", "Контрагент")
Компоновщик макета сгенерирует для вывода следующее выражение:
СоединитьСтроки(ПолучитьЧасть(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений ("НаборДанных.Контрагент, НаборДанных.КонтрагентПредставление, Сумма(НаборДанных.СуммаОборот), Представление(НаборДанных.СуммаОборот), НаборДанных.ПолеУпорядочивание", "НаборДанных.Контрагент"), "5, 1, 3"), "2, 4"))
5. Уровень (Level) - функция предназначена для получения текущего уровня записи.
Синтаксис
:
Уровень()
Пример
:
Уровень()
6. НомерПоПорядку (SequenceNumber) - получить следующий порядковый номер.
Синтаксис
:
НомерПоПорядку()
Пример
:
НомерПоПорядку()
7. НомерПоПорядкуВГруппировке (SequenceNumberInGrouping) - возвращает следующий порядковый номер в текущей группировке.
Пример
:
НомерПоПорядкуВГруппировке()
8. Формат (Format) - получить отформатированную строку переданного значения.
Синтаксис
:
Формат(Значение, ФорматнаяСтрока)
Параметры :
9. НачалоПериода (BeginOfPeriod)
Синтаксис
:
НачалоПериода(Дата, ТипПериода)
Параметры :
10. КонецПериода (EndOfPeriod) - функция предназначена для выделения определенной даты из заданной даты.
Синтаксис
:
КонецПериода(Дата, ТипПериода)
Параметры :
11. ДобавитьКДате (DateAdd) - функция предназначена для прибавления к дате некоторой величины.
Синтаксис
:
ДобавитьКДате(Выражение, ТипУвеличения, Величина)
Параметры :
12. РазностьДат (DateDifference) - функция предназначена для получения разницы между двумя датами.
Синтаксис
:
РазностьДат(Выражение1 , Выражение2 , ТипРазности)
Параметры :
13. Подстрока (Substring) - данная функция предназначена для выделения подстроки из строки.
Синтаксис
:
Подстрока(Строка, Позиция, Длина)
Параметры :
14. ДлинаСтроки (StringLength) - функция предназначена для определения длины строки.
Синтаксис
:
ДлинаСтроки(Строка)
Параметр :
15. Год (Year) - данная функция предназначена для выделения года из значения типа Дата.
Синтаксис
:
Год(Дата)
Параметр :
16. Квартал (Quarter) - данная функция предназначена для выделения номера квартала из значения типа Дата. Номер квартала в норме находится в диапазоне от 1 до 4.
Синтаксис
:
Квартал(Дата)
Параметр :
17. Месяц (Month) - данная функция предназначена для выделения номера месяца из значения типа Дата. Номер месяца в норме находится в диапа-зоне от 1 до 12.
Синтаксис
:
Месяц(Дата)
Параметр :
18. ДеньГода (DayOfYear) - данная функция предназначена для получения дня года из значения типа Дата. День года в норме находится в диапазоне от 1 до 365(366).
Синтаксис
:
ДеньГода(Дата)
Параметр :
19. День (Day) - данная функция предназначена для получения дня месяца из значения типа Дата. День месяца в норме находится в диапазоне от 1 до 31.
Синтаксис
:
День(Дата)
Параметр :
20. Неделя (Week) - данная функция предназначена для получения номера недели года из значения типа Дата. Недели года нумеруются, начиная с 1.
Синтаксис
:
Неделя(Дата)
Параметр :
21. ДеньНедели (WeekDay) - данная функция предназначена для получения дня недели из значения типа Дата. День недели в норме находится в диапазоне от 1 (понедельник) до 7(воскресенье).
Синтаксис
:
ДеньНедели(Дата)
Параметр :
22. Час (Hour) - данная функция предназначена для получения часа суток из значения типа Дата. Час суток находится в диапазоне от 0 до 23.
Синтаксис
:
Час(Дата)
Параметр :
23. Минута (Minute) - данная функция предназначена для получения минуты часа из значения типа Дата. Минута часа находится в диапазоне от 0 до 59.
Синтаксис
:
Минута(Дата)
Параметр :
24. Секунда (Second) - данная функция предназначена для получения секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне от 0 до 59.
Синтаксис
:
Секунда(Дата)
Параметр :
25. Выразить (Cast) - данная функция предназначена для выделения типа из выражения, которое может содержать составной тип. В случае, если выражение будет содержать тип, отличный от требуемого типа, будет возвращено значение NULL.
Синтаксис
:
Выразить(Выражение, УказаниеТипа)
Параметры :
26. ЕстьNull (IsNull) - данная функция возвращает значение второго параметра в случае, если значение первого параметра NULL. В противном случае будет возвращено значение первого параметра.
Синтаксис
:
ЕстьNull(Выражение1, Выражение2)
Параметры :
27. ACos - вычисляет арккосинус в радианах.
Синтаксис
:
ACos(Выражение)
Параметр :
Синтаксис
:
ASin(Выражение)
Параметр :
Синтаксис
:
ATan(Выражение)
Параметр :
Синтаксис
:
Cos(Выражение)
Параметр :
Синтаксис
:
Exp(Выражение)
Параметр :
Синтаксис
:
Log(Выражение)
Параметр :
Синтаксис
:
Log10(Выражение)
Параметр :
Синтаксис
:
Pow(Основание, Показатель)
Параметры :
Синтаксис
:
Sin(Выражение)
Параметр :
Синтаксис
:
Sqrt(Выражение)
Параметр :
Синтаксис
:
Tan(Выражение)
Параметр :
Синтаксис
:
Окр(Выражение, Разрядность)
Параметры :
Синтаксис
:
Цел(Выражение)
Параметр :
Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации. Никакого дополнительно синтаксиса для вызова таких функций не требуется.
Пример
:
СокращенноеНаименование(Документы.Ссылка, Документы.Дата, Документы.Номер)
В данном примере будет осуществлен вызов функции "СокращенноеНаименование" из общего модуля конфигурации.
Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.
Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей.
41. Представление (Resentation) - данная функция возвращает строковое представление переданного значения не примитивного типа. Для значений примитивного типа возвращает само значение.
<Пустое значение>".
Пример
:
Представление(Контрагент)
42. Строка (String) - данная функция преобразует переданное значение в строку.
Если в качестве параметра используется массив или таблица значений, то функция возвращает строку, содержащую строковые представление всех элементов массива, разделенных символами "; ". Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка "<Пустое значение>".
Пример
:
Строка(ДатаПродажи)
43. ЗначениеЗаполнено (ValueIsFilled)
Для значений NULL, Неопределено всегда возвращает Ложь.
Для значений Булево всегда возвращает Истину.
Для остальных типов возвращает Истину, если значение отличается от значения по умолчанию для данного типа.
Пример
:
ЗначениеЗаполнено(ДатаДоставки)
44. УровеньВГруппировке (LevelInGroup) - данная функция получает текущий уровень записи относительно группировки.
Может быть использована для получения уровня вложенности записи в иерархической группировке.
Пример
:
УровеньВГруппировке()
45. ТипЗначения(ValueType)
Синтаксис
:
ТипЗначения(Выражение)
Параметр :
Язык выражений системы компоновки данных предназначен для записи выражений, используемых в различных частях системы.
Выражения используются в следующих подсистемах:
В выражении могут присутствовать литералы. Возможны литералы следующих типов:
Строковый литерал записывается в символах «”», например:
“Строковой литерал“
При необходимости использования внутри строкового литерала символа «”», следует использовать два таких символов.
Например:
“Литерал ““в кавычках“““
Число записывается без пробелов, в десятичном формате. Дробная часть отделяется при помощи символа «.». Например:
10.5 200
Литерал типа дата записывается при помощи ключевого литерала ДАТАВРЕМЯ (DATETIME). После данного ключевого слова, в скобках, через запятую перечисляются год, месяц, день, часы, минуты, секунды. Указание времени не обязательно.
Например:
ДАТАВРЕМЯ(1975, 1, 06) – Шестое января 1975 года ДАТАВРЕМЯ(2006, 12, 2, 23, 56, 57) – Второе декабря 2006 года, 23 часа 56 минут 57 секундода, 23 часа 56 минут 57 секунд
Булевы значения могут быть записаны при помощи литералов Истина (True), Ложь (False).
Для указания литералов других типов (системных перечислений, предопределенных данных) используется ключевое слово Значение, после которого в скобках идет указание имени литерала.
Значение(ВидСчета. Активный)
Данная операция предназначена для изменения знака числа на обратный. Например:
Продажи.Количество
Данная операция не выполняет над числом никаких действий. Например:
Продажи.Количество
Данная операция предназначена для вычисления разности двух чисел. Например:
ОстаткиИОбороты.НачальныйОстаток – ОстаткиИОбороты.КонечныйОстаток ОстаткиИОбороты.НачальныйОстаток - 100 400 – 357
Данная операция предназначена для вычисления суммы двух чисел. Например:
ОстаткиИОбороты.НачальныйОстаток + ОстаткиИОбороты.Оборот ОстаткиИОбороты.НачальныйОстаток + 100 400 + 357
Данная операция предназначена для вычисления произведения двух чисел. Например:
Номенклатура.Цена * 1.2 2 * 3.14
Данная операция предназначена для получения результата деления одного операнда на другой. Например:
Номенклатура.Цена / 1.2 2 / 3.14
Данная операция предназначена для получения остатка от деления одного операнда на другой. Например:
Номенклатура.Цена % 1.2 2 % 3.14
Данная операция предназначена для конкатенации двух строк. Например:
Номенклатура.Артикул + “: ”+ Номенклатура.Наименование
Данная операция проверяет соответствие строки переданному шаблону.
Значением оператора ПОДОБНО является ИСТИНА, если значение <Выражения> удовлетворяет шаблону, и ЛОЖЬ в противном случае.
Следующие символы в <Строке_шаблона> имеют смысл, отличный от просто очередного символа строки:
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>, указанный после ключевого слова СПЕЦСИМВОЛ (ESCAPE).
Например, шаблон
“%АБВ[абвг]\_абв%” СПЕЦСИМВОЛ “\”
означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем эта последовательность может располагаться, начиная с произвольной позиции в строке.
Данная операция предназначена для сравнения двух операндов на равенство. Например:
Продажи.Контрагент = Продажи.НоменклатураОсновнойПоставщик
Данная операция предназначена для сравнения двух операндов на неравенство. Например:
Продажи.Контрагент <> Продажи.НоменклатураОсновнойПоставщик
Данная операция предназначена для проверки того, что первый операнд меньше второго. Например:
ПродажиТекщие.Сумма < ПродажиПрошлые.Сумма
Данная операция предназначена для проверки того, что первый операнд больше второго. Например:
ПродажиТекщие.Сумма > ПродажиПрошлые.Сумма
Данная операция предназначена для проверки того, что первый операнд меньше либо равен второму. Например:
ПродажиТекщие.Сумма <= ПродажиПрошлые.Сумма
Данная операция предназначена для проверки того, что первый операнд больше либо равен второму. Например:
ПродажиТекщие.Сумма >= ПродажиПрошлые.Сумма
Данная операция осуществляет проверку наличия значения в переданном списке значений. Результатом операции будет Истина, в случае, если значение найдено, или Ложь - в противном случае. Например:
Номенклатура В (&Товар1, &Товар2)
Операция осуществляет проверку наличия значения в указанном наборе данных. Набор данных для проверки должен содержать одно поле. Например:
Продажи.Контрагент В Контрагенты
Данная операция возвращает значение Истина в случае, если значение является значением NULL. Например:
Продажи.Контрагент ЕСТЬ NULL
Данная операция возвращает значение Истина в случае, если значение не является значением NULL. Например:
Продажи.Контрагент ЕСТЬ НЕ NULL
Логические операции принимают в качестве операндов выражения, имеющие тип Булево.
Операция НЕ возвращает значение Истина в случае, если ее операнд имеет значение Ложь, и значение Ложь в случае, если ее операнд имеет значение Истина. Например:
НЕ Документ.Грузополучатель = Документ.Грузоотправитель
Операция И возвращает значение Истина в случае, если оба операнда имеют значение Истина, и значение Ложь в случае, если один из операндов имеет значение Ложь. Например:
Документ.Грузополучатель = Документ.Грузоотправитель И Документ.Грузополучатель = &Контрагент
Операция ИЛИ возвращает значение Истина в случае, если один из операндов имеет значение Истина, и Ложь в случае, если оба операнда имеют значение Ложь. Например:
Документ.Грузополучатель = Документ.Грузоотправитель ИЛИ Документ.Грузополучатель = &Контрагент
Агрегатные функции осуществляют некоторое действие над набором данных.
Агрегатная функция Сумма рассчитывает сумму значений выражений, переданных ей в качестве аргумента для всех детальных записей. Например:
Сумма(Продажи.СуммаОборот)
Функция Количество рассчитывает количество значений отличных от значения NULL. Например:
Количество(Продажи.Контрагент)
Эта функция рассчитывает количество различных значений. Например:
Количество(Различные Продажи.Контрагент)
Функция получает максимальное значение. Например:
Максимум(Остатки.Количество)
Функция получает минимальное значение. Например:
Минимум(Остатки.Количество)
Функция получает среднее значение для значений, отличных от NULL. Например:
Среднее(Остатки.Количество)
Операция Выбор предназначена для осуществления выбора одного из нескольких значений при выполнении некоторых условий. Например:
Выбор Когда Сумма > 1000 Тогда Сумма Иначе 0 Конец
Если типы сравниваемых значений отличаются друг от друга, то отношения между значениями определяются на основании приоритета типов:
Отношения между различными ссылочными типами определяются на основе ссылочных номеров таблиц, соответствующих тому или иному типу.
Если типы данных совпадают, то производится сравнение значений по следующим правилам:
Любая операция, в которой значение одного из операндов NULL, будет давать результат NULL.
Есть исключения:
Операции имеют следующие приоритеты (первая строка имеет низший приоритет):
Функция Вычислить предназначена для вычисления выражения в контексте некоторой группировки. Функция имеет следующие параметры:
В данном примере в результате получится отношение суммы по полю "Продажи.СуммаОборот" записи группировки к сумме того же поля во всей компоновке.
Функция предназначена для получения текущего уровня записи.
Уровень()
Получить следующий порядковый номер.
НомерПоПорядку()
Возвращает следующий порядковый номер в текущей группировке.
НомерПоПорядкуВГруппировке()
Получить отформатированную строку переданного значения.
Форматная строка задается в соответствии с форматной строкой 1С:Предприятие.
Параметры:
Формат(РасходныеНакладные.СуммаДок, "ЧДЦ=2")
Параметры:
НачалоПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц")
Результат:
01.10.2002 0:00:00
Функция предназначена для выделения определенной даты из заданной даты.
Параметры:
КонецПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), "Неделя")
Результат:
13.10.2002 23:59:59
Функция предназначена для прибавления к дате некоторой величины.
Параметры:
ДобавитьКДате(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц", 1)
Результат:
12.11.2002 10:15:34
Функция предназначена для получения разницы между двумя датами.
Параметры:
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), ДАТАВРЕМЯ(2002, 10, 14, 9, 18, 06), "ДЕНЬ")
Результат:
Данная функция предназначена для выделения подстроки из строки.
Параметры:
ПОДСТРОКА(Контрагенты.Адрес, 1, 4)
Функция предназначена для определения длины строки.
Параметр:
Строка(Контрагенты.Адрес)
Данная функция предназначена для выделения года из значения типа Дата.
Параметр:
ГОД(РасхНакл.Дата)
Данная функция предназначена для выделения номера квартала из значения типа Дата. Номер квартала в норме находится в диапазоне от 1 до 4.
Параметр
Данная функция предназначена для выделения номера месяца из значения типа Дата. Номер месяца в норме находится в диапа-зоне от 1 до 12.
Данная функция предназначена для получения дня года из значения типа Дата. День года в норме находится в диапазоне от 1 до 365(366).
Данная функция предназначена для получения дня месяца из значения типа Дата. День месяца в норме находится в диапазоне от 1 до 31.
Данная функция предназначена для получения номера недели года из значения типа Дата. Недели года нумеруются, начиная с 1.
Данная функция предназначена для получения дня недели из значения типа Дата. День недели в норме находится в диапазоне от 1 (понедельник) до 7(воскресенье).
Данная функция предназначена для получения часа суток из значения типа Дата. Час суток находится в диапазоне от 0 до 23.
Данная функция предназначена для получения минуты часа из значения типа Дата. Минута часа находится в диапазоне от 0 до 59.
Данная функция предназначена для получения секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне от 0 до 59.
Данная функция предназначена для выделения типа из выражения, которое может содержать составной тип. В случае, если выражение будет содержать тип, отличный от требуемого типа, будет возвращено значение NULL.
Параметры:
Выразить(Данные.Реквизит1, "Число(10,3)")
Данная функция возвращает значение второго параметра в случае, если значение первого параметра NULL.
В противном случае будет возвращено значение первого параметра.
ЕстьNULL(Сумма(Продажи.СуммаОборот), 0)
Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации. Никакого дополнительно синтаксиса для вызова таких функций не требуется.
В данном примере будет осуществлен вызов функции "СокращенноеНаименование" из общего модуля конфигурации.
Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.
Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей.