Обчислювані поля СКД. Мова виразів системи компонування даних (1Cv8)

Здрастуйте, шановний читачу! У нас черговий урок з основ системи компонування. Ви познайомилися з функціями мови виразів СКД, побачили особливості роботи системи компонування, а також розібралися з основними налаштуваннями полів компонування. Нині ж ми розглянемо новий матеріал. Поїхали!

Додаткові параметри полів СКД.

Колонка "Тип значення"дозволяє вказати тип даних для поля компонування. Навіщо вказувати тип, наприклад для поля «Номенклатура», якщо так відомо якого типу? Це необхідно, якщо поле компонування складеного типу. Можна вибрати певний тип, тоді при відборі цього поля будуть вибиратися значення даного типу.

Колонка «Доступні значення»дозволяє вказати доступні для вибору значення та обмежити вибір користувача певними рамками.

Колонка «Оформлення»дозволяє ставити оформлення полю компонування, не використовуючи макети. Можна вказати колір шрифту, колір рамки, орієнтацію тексту тощо.

Колонка "Параметри редагування"дозволяє вказати, як редагувати поле компонування. Наприклад, можна вказати швидкий вибір елементів зі списку у відборі. За промовчанням поле компонування всі параметри редагування успадковує від метаданих об'єкта.

Обчислювані поля

На закладці «Обчислювані поля» компонування даних можна створювати свої поля, що обчислюються.

Навіщо потрібні поля, що обчислюються, якщо їх можна створювати на рівні запиту? Не всі поля можна описати за допомогою запиту. Якщо потрібно скласти складне поле з різних наборів даних, наприклад, типу запит і об'єкт, тоді без обчислюваних полів не обійтися. Додати поле компонування даних не можна, якщо джерелом даних є запит і автозаповнення, а за допомогою обчислюваних можна додати скільки завгодно полів.

У колонці поля «Вираз», що обчислюється, потрібно написати довільний вираз, який використовує поля компонування даних, звертаючись по їх шляху (колонка «Шлях» на закладці «Набори даних»). Або можна використовувати функції математичного перетворення, або звертатися до функцій загальних модулів. Наприклад, запишемо в колонці «Шлях до даних» назву поля «Відхилення», що обчислюється, а в полі «Вираз» наступне.

У світлі найближчого виходу 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С:Підприємство».

Підрядка(, , ) - Ця функція призначена для виділення підрядка з рядка.

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

Рядок() - Якщо як параметр переданий масив, то функція повертає рядок, що містить рядкові уявлення всіх елементів масиву, розділених символами ";". Якщо як параметр передана таблиця значень, то функція повертає рядок, що містить рядкові уявлення всіх рядків таблиці значень, причому уявлення осередків кожного рядка поділяються символами "; ", а рядки - змивом перекладу рядка. Якщо у якогось елемента рядкове уявлення порожнє, то замість його уявлення виводиться рядок.

У світлі найближчого виходу 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. Обчислити (Eval)- призначена для обчислення вираження у контексті деякого угруповання. Функція використовується для сумісності із попередніми версіями платформи. Замість неї рекомендується використовувати функцію Обчислити Вираз.

Синтаксис:
Обчислити (Вираз, Угруповання, Тип Розрахунку)

Параметри:

  • Вираз(Рядок). Містить вираз, що обчислюється;
  • Угруповання(Рядок). Містить ім'я угруповання, у якому необхідно обчислити вираз. Якщо в якості імені угруповання використовується порожній рядок, обчислення буде виконано в контексті поточного угруповання. Якщо в якості імені угруповання буде використаний рядок ЗагальнийПідсумок, обчислення буде виконано в контексті загального підсумку. В інших випадках обчислення виконуватиметься в контексті батьківського угруповання з таким ім'ям.
    Наприклад:
    Сума(Продажи.СумаОборот) / Обчислити("Сума(Продажі.СумаОборот)", "ЗагальнийПідсумок").
    В даному прикладі в результаті вийде відношення суми по полю "Продажи.СумаОборот" запису угруповання до суми того ж поля у всій компонуванні.
  • ТипРозрахунку(Рядок). Якщо цей параметр має значення "ЗагальнийПідсумок", вираз обчислюватиметься для всіх записів угруповання. Якщо значення параметра "Групування", значення будуть обчислюватися для поточного групового запису групування.
2. ОбчислитиВираз (EvalExpression) - призначена для обчислення вираження у контексті деякого угруповання. Функція враховує вибір угруповань, але не враховує ієрархічні відбори. Функція не може застосовуватися до групування у груповому відборі цього угруповання.

Синтаксис:
ОбчислитиВираз(Вираз, Угруповання, ТипРозрахунки, Початок, Кінець, Сортування, ІєрархічнаСортування, ОбробкаОдінаковихЗначеньПорядку)

Параметри:

  • Вираз(Рядок). Містить вираз, що обчислюється;
  • Угруповання(Рядок). Містить угруповання, в контексті якого необхідно обчислити вираз. Якщо в якості імені угруповання використовується порожній рядок, обчислення буде виконано в контексті поточного угруповання. Якщо в якості імені угруповання буде використаний рядок ЗагальнийПідсумок, обчислення буде виконано в контексті загального підсумку. В інших випадках обчислення виконуватиметься в контексті батьківського угруповання з таким ім'ям;
  • ТипРозрахунку(Рядок). Якщо цей параметр має значення "ЗагальнийПідсумок", вираз обчислюватиметься для всіх записів угруповання. Якщо значення параметра "Групування", значення будуть обчислюватися для поточного групового запису групування. Якщо параметр має значення "УгрупованняНеРесурса", то при обчисленні функції для групового запису за ресурсами, вираз буде обчислено для першого групового запису початкового групування. При обчисленні функції Обчислити Вираз зі значенням "Угруповання НеРесурсу" для групових записів, що не є угрупованнями за ресурсами, функція обчислюється так само, як вона обчислювалася зі значенням параметра "Угруповання". Компонувальник макета компонування даних при генерації макета компонування даних при виведенні в макет поля - ресурсу, за яким виконується угруповання, видає в макет вираз, що обчислюється за допомогою функції Обчислити Вираз, із зазначеним параметром "Угруповання НеРесурсу". Для інших ресурсів у групуванні ресурсом видаються типові висловлювання ресурсів. Якщо параметр має значення "Ієрархія", то вираз потрібно обчислювати для батьківського ієрархічного запису, якщо така є, і для всього угруповання, якщо батьківського ієрархічного запису немає. Компонувальник макету при генерації виразу для поля "% у групі ієрархії" генерує вираз, що містить відношення виразу ресурсу до функції Обчислити Вираз для виразу ресурсу, що обчислюється для поточного угрупування з типом обчислення "Ієрархія".
  • початок. Вказує, з якого запису потрібно починати фрагмент, в якому розраховувати агрегатні функції виразу та з якого запису отримувати значення полів поза агрегатними функціями. Рядок, що містить одне з:
    • "Перша" ("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)), то буде отриманий запис. 2010 року.
  • Кінець. Вказує, до якого запису слід продовжувати фрагмент, у якому розраховувати агрегатний вираз. Рядок, що містить одне з:
    • "Перша" ("First").
    • "Остання" ("Last").
    • "Попередня" ("Previous").
    • "Наступна" ("Next").
    • "Поточна" ("Current").
    • "Значення, що обмежує" ("BoundaryValue").
  • Сортування. Рядок, в якому перераховуються вирази, розділені комами, у напрямі яких потрібно впорядковувати послідовність. Якщо не вказано, то впорядкування виконується так само, як і у угруповання, для якого обчислюється вираз. Після кожного виразу можна вказати ключове слово Возр. Слово Автоупорядкування може використовуватися як зі словом Возр, і зі словом Убыв.
  • ІєрархічнаСортування. Аналогічно сортування. Застосовується для впорядкування ієрархічних записів. Якщо не вказано, компонувальник макету генерує упорядкування відповідно до впорядкування, зазначеного у параметрі Сортування.
  • ОбробкаОдінаковихЗначеньПорядку. Рядок, що містить одне з:
    • "Разом" ("Together") - означає, що для визначення попереднього та наступного записів використовується послідовність упорядкованих записів;
    • "Окремо" ("Separately") - означає, що попередній та наступні записи визначаються на підставі значень виразів упорядкування;
    Наприклад, якщо отримана послідовність упорядкована за датою:
    1. 01 січня 2001 року Іванов М. 10
    2. 02 січня 2001 року Петров С. 20
    3. 02 січня 2001 р. Сидоров Р. 30
    4. 03 січня 2001 року Петров С. 40
    При використанні обробки однакових значень порядку "Особливо", попереднього до запису 3 буде запис 2, а при використанні "Разом" - запис 1. А фрагментом для поточного запису до запису 2 для "Особливо" буде запис 2, а для "Разом" - записи 2 і 3. Таким чином, сума за поточним записом для "Особливо" становитиме 20, а для "Разом" - 50. При зазначеному "Разом" у параметрах Початок і Кінець не можна вказувати зміщення для позицій "Перша", "Остання", "Попередня", "Наступна". Значення за замовчуванням "Особливо".
Приклад:
Отримання відношення суми по полю "Продажи.СумаОборот" запису угруповання до суми того ж поля у всій компонуванні:
Сума (Продаж. Сума Оборот) / Обчислити Вираз ("Сума (Продаж. Сума Оборот)", "Загальний Підсумок").

У цьому прикладі обчислюється значення поточної ієрархії:
Вибір
Коли Рівень() > 0
Тоді ОбчислитиВираз("Посилання", "Ієрархія")
Інакше Null
Кінець

Примітки:
Функція враховує вибір угруповань, але не враховує ієрархічні відбори. Функція не може застосовуватися до групування у груповому відборі цього угруповання. Наприклад, у виборі угруповання Номенклатура не можна використовувати вираз ОбчислитиВираз("Сума(СумаОборот)", "ЗагальнийПідсумок") > 1000 . Але такий вираз можна використовувати у ієрархічному доборі. Якщо кінцева запис передує початкової, вважається, що записи до розрахунку детальних даних, і розрахунку агрегатних функцій відсутні. При розрахунку інтервальних виразів для загального підсумку (параметр Угруповання має значення "Загальний Підсумок") вважається, що запис для розрахунку детальних даних і розрахунку агрегатних функцій відсутні. Компонувальник макету при генерації виразу функції Обчислити Вираз, якщо вираз упорядкування містить поля, які не можуть бути використані в групуванні, замінює функцію Обчислити Вираз на NULL.

3. ОбчислитиВираз СгрупуваннямМасив (EvalExpressionWithGroupArray) - функція повертає масив, кожен елемент якого містить результат обчислення виразу для угруповання за вказаним полем.

Синтаксис:
ОбчислитиВираз СгрупуваннямМасив (Вираз, Вирази Полів Угруповання, Відбір Записів, Відбір Угруповань)

Параметри:

  • Вираз(Рядок) - вираз, який потрібно обчислити. Наприклад, "Сума(СумаОборот)";
  • ВиразиПолівУгруповання
  • Відбір записів
  • Відбір угруповань- Відбір, що застосовується до групових записів. Наприклад: "Сума(СумаОборот) > &Параметр1".
Приклад:
Максимум(ОбчислитиВираз ЗУгрупуваннямМасив ("Сума(СумаОборот)", "Контрагент"));


Компонувальник макета при генерації виразів для виведення поля користувача, у виразі якого присутня тільки функція ОбчислитиМассивСГруппировкой генерує вираз, що виводиться таким чином, щоб дані виводити уявлення і дані були впорядковані.
Наприклад, для поля користувача з виразом:
ОбчислитиВираз СгрупуваннямМасив("Сума(СумаОборот)", "Контрагент")
компонувальник макету згенерує для виведення такий вираз:
З'єднатиРядки(Масив(Упорядкувати(ОбчислитиВираз ізУгрупуваннямТаблицяЗначень ("Подання(Сума(НаборДаних.СумаОборот)), Сума(НаборДанних.СуммаОборот)", "НаборДаних.Контрагент")), "2"

4. ОбчислитиВираз СУгрупуваннямТаблицяЗначень (EvalExpressionWithGroupValueTable) - функція повертає таблицю значень, кожен елемент якого містить результат обчислення виразу для угруповання зазначеного поля.

Синтаксис:
ОбчислитиВираз СгрупуваннямТаблицяЗначень (Вираз, Вирази Полів Угруповання, Відбір Записів, Відбір Угруповань)

Параметри:

  • Вираз(Рядок) - вираз, який потрібно обчислити. У рядку може бути перераховано кілька виразів через кому. Після кожного виразу може бути необов'язковим ключовим словом ЯК та ім'я колонки таблиці значень. Наприклад: "Контрагент, Сума(СумаОборот) Як ОбсягПродаж".
  • ВиразиПолівУгруповання- Вирази полів угруповання, перераховані через кому. Наприклад, "Контрагент, Партія";
  • Відбір записів- Вираз, що застосовується до детальних записів. Наприклад, "Позначка Видалення = Брехня". Якщо в даному параметрі використовується агрегатна функція, при виконанні компонування даних виникне помилка;
  • Відбір угруповань- Відбір, що застосовується до групових записів. Наприклад: "Сума(СумаОборот) > &Параметр1".
Приклад:
ОбчислитиВираз СгрупуваннямТаблицяЗначень ("Контрагент ЯК Контрагент, Сума(СуммаОборот) Як ОбсягПродаж", "Контрагент")

Результатом роботи цієї функції буде таблиця значень з колонками Контрагент і Об'єм Продаж, в яких будуть контрагенти з їх обсягами продажів.
Компонувальник макета при генерації макета перетворює параметри функції терміни полів макета компонування даних. Наприклад, поле Контрагент буде конвертовано в НаборДаних.Контрагент.
Наприклад, поля користувача з виразом:
ОбчислитиВираз СгрупуваннямТаблицяЗначень ("Контрагент, Сума(СумаОборот)", "Контрагент")
Компонувальник макету згенерує для виведення такий вираз:
З'єднатиРядки(ОтриматиЧастина(Упорядкувати(ОбчислитиВираженняСУгрупованняТаблицяЗначень ("НаборДаних.Контрагент, НабірДаних.КонтрагентУявлення, Сума(НаборДанних.СуммаОборот), Подання(НаборДанних.Сум) .Контрагент"), "5, 1, 3" ), "2, 4"))

5. Рівень (Level) - Функція призначена для отримання поточного рівня запису.

Синтаксис:
Рівень()

Приклад:
Рівень()

6. НомерПорядку (SequenceNumber) - Отримати наступний порядковий номер.

Синтаксис:
Номер по порядку()

Приклад:
Номер по порядку()

7. НомерПорядкуУгрупованні (SequenceNumberInGrouping) - повертає наступний порядковий номер у поточному угрупованні.

Приклад:
НомерПорядкуУгрупованні()

8. Формат (Format) - Отримати відформатований рядок переданого значення.

Синтаксис:
Формат(Значення, ФорматнийРядок)

Параметри:

  • Значення- Вираз, який потрібно відформатувати;
  • ФорматнийРядок- Форматний рядок задається відповідно до форматного рядка 1С:Підприємство.
Приклад:
Формат (Витратні Накладні. Сумма Док, "ЧДЦ = 2")

9. ПочатокПеріоду (BeginOfPeriod)

Синтаксис:
ПочатокПеріоду(Дата, ТипПеріоду)

Параметри:

  • Дата(Дата). Вказана дата;
  • ТипПеріоду
Приклад:
ПочатокПеріоду(ДатаЧас(2002, 10, 12, 10, 15, 34), "Місяць")
Результат: 01.10.2002 0:00:00

10. КінецьПеріоду (EndOfPeriod) - функція призначена виділення певної дати із заданої дати.

Синтаксис:
КінецьПеріоду(Дата, ТипПеріоду)

Параметри:

  • Дата(Дата). Вказана дата;
  • ТипПеріоду(Рядок). Містить одне із значень: Хвилина; Година; День; Тиждень; Місяць; квартир; Рік; Декада; Півріччя.
Приклад:
КінецьПеріоду(ДатаЧас(2002, 10, 12, 10, 15, 34), "Тиждень")
Результат: 13.10.2002 23:59:59

11. ДодатиКДате (DateAdd) - функція призначена додавання до дати деякої величини.

Синтаксис:
ДодатиКДате(Вираз, ТипЗбільшення, Величина)

Параметри:

  • Вираз(Дата). Вихідна дата;
  • ТипЗбільшення(Рядок). Містить одне із значень: Хвилина; Година; День; Тиждень; Місяць; квартир; Рік; Декада; Півріччя.
  • Величина(Кількість). На скільки потрібно збільшити дату, частина ігнорується.
Приклад:
ДодатиКДате(ДатаЧас(2002, 10, 12, 10, 15, 34), "Місяць", 1)
Результат: 12.11.2002 10:15:34

12. РізницяДат (DateDifference) - Функція призначена для отримання різниці між двома датами.

Синтаксис:
РізницяДат (Вираз 1 , Вираз 2 , Тип Різниці)

Параметри:

  • Вираз1(Дата). Віднімається дата;
  • Вираз2(Дата). Вихідна дата;
  • ТипРізниці(Рядок). Містить одне із значень: Секунда; Хвилина; Година; День; Місяць; квартир; Рік.
Приклад:
РІЗНЕСТЬДАТ(ДАТАЧАС(2002, 10, 12, 10, 15, 34),
ДАТАВРЕМЯ(2002, 10, 14, 9, 18, 06), "ДЕНЬ")
Результат: 2

13. Підрядок (Substring) - Ця функція призначена для виділення підрядка з рядка.

Синтаксис:
Підрядок(Рядок, Позиція, Довжина)

Параметри:

  • Рядок(Рядок). Рядок, з якого виділяють підрядок;
  • Позиція(Кількість). Позиція символу, з якого починається виділення з рядка підрядка;
  • Довжина(Кількість). Довжина виділення підрядка.
Приклад:
ПІДСТРОКУ (Контрагенти. Адреса, 1, 4)

14. ДовжинаРядки (StringLength) - Функція призначена для визначення довжини рядка.

Синтаксис:
ДовжинаРядки(Рядок)

Параметр:

  • Рядок(Рядок). Рядок, довжину якої визначають.
Приклад:
Рядок(Контрагенти.Адреса)

15. Рік (Year)- дана функція призначена виділення року з значення типу Дата.

Синтаксис:
Рік(Дата)

Параметр:

  • Дата(Дата). Дата, за якою визначають рік.
Приклад:
РІК(РозхНакл.Дата)

16. Квартал (Quarter) - дана функція призначена виділення номера кварталу зі значення типу Дата. Номер кварталу у нормі знаходиться в діапазоні від 1 до 4.

Синтаксис:
Квартал(Дата)

Параметр:

  • Дата(Дата). Дата, за якою визначають квартал
Приклад:
КВАРТАЛ(РозхНакл.Дата)

17. Місяць (Month) - Ця функція призначена для виділення номера місяця із значення типу Дата. Номер місяця в нормі знаходиться в діапазоні від 1 до 12.

Синтаксис:
Місяць(Дата)

Параметр:

  • Дата(Дата). Дата, за якою визначають місяць.
Приклад:
МІСЯЦЬ(РозхНакл.Дата)

18. День Року (DayOfYear) - дана функція призначена для отримання дня року значення типу Дата. День року у нормі перебуває у діапазоні від 1 до 365(366).

Синтаксис:
ДеньРоку(Дата)

Параметр:

  • Дата(Дата). Дата, за якою визначають день року.
Приклад:
ДЕНЬ РОКУ(РозхНакл.Дата)

19. День (Day)- дана функція призначена для отримання дня місяця значення типу Дата. День місяця у нормі знаходиться в діапазоні від 1 до 31.

Синтаксис:
День(Дата)

Параметр:

  • Дата(Дата). Дата, за якою визначають дні місяця.
Приклад:
ДЕНЬ(РозхНакл.Дата)

20. Тиждень (Week) - дана функція призначена для отримання номера тижня року значення типу Дата. Тижня року нумеруються, починаючи з першого.

Синтаксис:
Тиждень(Дата)

Параметр:

  • Дата(Дата). Дата, за якою визначають номери тижня.
Приклад:
ТИЖДЕНЬ(РозхНакл.Дата)

21. День Тижня (WeekDay) - дана функція призначена для отримання дня тижня із значення типу Дата. День тижня у нормі знаходиться в діапазоні від 1 (понеділок) до 7 (неділя).

Синтаксис:
День Тижня (Дата)

Параметр:

  • Дата(Дата). Дата, за якою визначають день тижня.
Приклад:
ДЕНЬТИЖНЯ(РозхНакл.Дата)

22. Година (Hour)- Ця функція призначена для отримання години доби зі значення типу Дата. Година доби знаходиться в діапазоні від 0 до 23.

Синтаксис:
Час(Дата)

Параметр:

  • Дата(Дата). Дата, за якою визначають годину доби.
Приклад:
ЧАС(РозхНакл.Дата)

23. Хвилина (Minute) - дана функція призначена для отримання хвилини години значення типу Дата. Хвилина години в діапазоні від 0 до 59.

Синтаксис:
Хвилина(Дата)

Параметр:

  • Дата(Дата). Дата, за якою визначають хвилину години.
Приклад:
ХВИЛИНА(РозхНакл.Дата)

24. Секунда (Second) - дана функція призначена для отримання секунди хвилини значення типу Дата. Секунда хвилини в діапазоні від 0 до 59.

Синтаксис:
Секунда (Дата)

Параметр:

  • Дата(Дата). Дата, за якою визначають секунди хвилини.
Приклад:
СЕКУНДА(РозхНакл.Дата)

25. Виразити (Cast) - дана функція призначена для виділення типу виразу, який може містити складовий тип. У випадку, якщо вираз міститиме тип, відмінний від необхідного типу, буде повернуто значення NULL.

Синтаксис:
Виразити(Вираз, ВказівкаТипу)

Параметри:

  • Вираз- Перетворюваний вираз;
  • ВказівкаТипу(Рядок). Містить рядок типу. Наприклад, "Число", "Рядок" тощо. Крім примітивних типів, цей рядок може містити ім'я таблиці. У цьому випадку буде здійснено спробу висловити посилання на вказану таблицю.
Приклад:
Виразити(Дані.Реквізит1, "Число(10,3)")

26. ЄNull (IsNull) - Ця функція повертає значення другого параметра у разі, якщо значення першого параметра NULL. В іншому випадку буде повернено значення першого параметра.

Синтаксис:
ЄNull(Вираз1, Вираз2)

Параметри:

  • Вираз1- Перевірене значення;
  • Вираз2- значення, що повертається, якщо значення Вираз1 є NULL.
Приклад:
ЄNULL(Сума(Продажі.СумаОборот), 0)

27. ACos- обчислює арккосинус у радіанах.

Синтаксис:
ACos(Вираз)

Параметр:

  • Вираз(Кількість). Значення косинуса (в діапазоні -1...1), за яким визначається кут.
28. ASin- обчислює арксинус у радіанах.

Синтаксис:
ASin(Вираз)

Параметр:

  • Вираз(Кількість). Значення синуса (в діапазоні -1...1), за яким визначається кут.
29. ATan- обчислює арктангенс у радіанах.

Синтаксис:
ATan (Вираз)

Параметр:

  • Вираз(Кількість). Значення тангенсу, яким визначається кут.
30. Cos- обчислює косинус.

Синтаксис:
Cos (Вираз)

Параметр:

  • Вираз
31. Exp- Зведення числа e у ступінь.

Синтаксис:
Exp(Вираз)

Параметр:

  • Вираз(Кількість). Значення ступеня.
32. Log- Обчислює натуральний логарифм.

Синтаксис:
Log(Вираз)

Параметр:

  • Вираз
33. Log10- обчислює логарифм X на підставі 10.

Синтаксис:
Log10 (Вираз)

Параметр:

  • Вираз(Кількість). Початкове число більше 0.
34. Pow- зведення в ступінь.

Синтаксис:
Pow (Підстава, Показник)

Параметри:

  • Заснування(Кількість). Підстава операції зведення на ступінь.
  • Показник(Кількість). Показник ступеня.
35. Sin- обчислює синус.

Синтаксис:
Sin(Вираз)

Параметр:

  • Вираз(Кількість). Задається у радіанах.
36. Sqrt- Обчислює квадратний корінь.

Синтаксис:
Sqrt (Вираз)

Параметр:

  • Вираз(Кількість). Невід'ємне число.
37. Tan- Обчислює тангенс.

Синтаксис:
Tan(Вираз)

Параметр:

  • Вираз(Кількість). Значення синуса, яким визначається кут.
38. Окр (Round)- Округлює вихідне число до потрібної розрядності. Режим округлення стандартний (1,5 як 2).

Синтаксис:
Окр (вираз, розрядність)

Параметри:

  • Вираз(Кількість). Початкове число;
  • Розрядність(Кількість). Число знаків дробової частини, до яких проводиться округлення.
39. Ціл (Int)- Відсікає дробову частину числа.

Синтаксис:
Ціл(Вираз)

Параметр:

  • Вираз(Кількість). Дробове число.
40. Функції загальних модулів

Вираз механізму компонування даних може містити виклики функцій глобальних загальних модулів конфігурації. Ніякого додаткового синтаксису для виклику таких функцій не потрібно.

Приклад:
Скорочене Найменування (Документи. Посилання, Документи. Дата, Документи. Номер)

У цьому прикладі буде здійснено виклик функції "Скорочене Найменування" із загального модуля конфігурації.
Зазначимо, що використання функцій загальних модулів дозволено лише за умови відповідного параметра процесора компонування даних.
Крім того, функції загальних модулів не можуть бути використані у виразах полів користувача.

41. Подання (Resentation) - дана функція повертає рядкове представлення переданого значення примітивного типу. Для значень примітивного типу повертає саме значення.

<Пустое значение>".

Приклад:
Подання (Контрагент)

42. Рядок (String) - Ця функція перетворює передане значення на рядок.

Якщо в якості параметра використовується масив або таблиця значень, то функція повертає рядок, що містить рядкові уявлення всіх елементів масиву, розділених символами ";". Якщо у якогось елемента рядкове уявлення порожнє, то замість його уявлення виводиться рядок "<Пустое значение>".

Приклад:
Рядок(ДатаПродажі)

43. ЗначенняЗаповнено (ValueIsFilled)

Для значень NULL, Невизначено завжди повертає Брехня.
Для значень Бульово завжди повертає Істину.
Для інших типів повертає Істину, якщо значення відрізняється від стандартного значення для даного типу.

Приклад:
ЗначенняЗаповнено(ДатаДоставки)

44. РівеньУгрупуванні (LevelInGroup) - Ця функція отримує поточний рівень запису щодо угруповання.

Може бути використана для отримання рівня вкладеності запису в ієрархічному угрупованні.

Приклад:
РівеньУгрупованні()

45. ТипЗначення(ValueType)

Синтаксис:
ТипЗначення(Вираз)

Параметр:

  • Вираз(Рядок). Строкове значення типу.
Повертає тип Тип, що містить тип значення параметра функції.

Грамотне використання схеми компонування даних (СКД) дозволяє:

  • значно знизити час, необхідний розробки звіту;
  • позбавитися необхідності створення керованої форми обробника;
  • отримати на виході гарний результат із можливістю додаткового налаштування користувачем.

Але далеко не всі розробники максимально використовують можливості схеми, так як не всі її налаштування очевидні і інтуїтивно зрозумілі. Зокрема багато хто знає, що в 1С в СКД є поля, що обчислюються, проте, не до кінця представляють область їх використання і методи роботи з ними.

Що таке поле, що обчислюється

У більшості випадків як джерело даних у схемі компонування виступає запит. В принципі, всередині самого запиту вже можна використовувати різні формули, конструкції та вирази. Виникає закономірне питання, навіщо ж потрібний дублюючий функціонал?

Справа в тому, що СКД - це більше, ніж просто відображення результату виконання запиту і це прекрасно видно з форми створення схеми (Рис.1).

Обчислювані поля дозволяють виконувати певні дії зі сформованим набором даних:

  • Виводити в певну комірку масив даних, отриманих запитом, з'єднавши кілька рядків в один;
  • Звертатись до експортних функцій загального модуля;
  • Виконувати різні вирази, доступні для мови компонування та використання спеціальних функцій Обчислити Вираз.

Давайте за цим списком і ходімо.

Масив значень в одному осередку

Змоделюємо ситуацію, коли необхідно отримати в окремий осередок усі номери документів надходження за контрагентом:


таким чином, ми у нашій схемі створили додаткове розрахункове поле;


Як видно з наведеного прикладу, жодних складнощів у додаванні та обробці обчислюваних полів немає. Ми використовували дві функції: Масив() та З'єднатиРядки().

Декілька слів про останню. Крім першого параметра, що вказує на ідентифікатор масиву, значень або значення, можуть бути встановлені ще два:

  1. Розділювач Елементів – вказує, який символ відокремлюватиме один елемент масиву або один рядок таблиці значень від іншого (у нашому випадку ми опустили цей параметр і за умовчанням було призначено перенесення рядка);
  2. Розділювач Колонок – символ, який використовується для розділення колонок таблиці значень (за замовчуванням використовується крапка з комою).

Звернення до експортних функцій загального модуля

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

Декілька важливих моментів:

  • Функція обов'язково має бути експортною;
  • Якщо функція розташована в загальному модулі із встановленою ознакою «Глобальний», її виклик здійснюється безпосередньо на ім'я, інакше виклик функції має відбуватися за схемою «Ім'я загального модуля». «Ім'я функції».

Як приклад використання ми візьмемо той самий запит до документів надходження та виведемо в окрему колонку. Сам запит ми описувати не будемо, перейдемо безпосередньо до полів, що обчислюються:


Таким чином, бачимо, що практично будь-який обробник даних може бути ініціалізований зі СКД, що значно розширює можливості використання схеми.

Вирази мови компонування

Досить часто у роботі розробника виникає ситуація, як у полі СКД необхідно вивести результат поділу:

  1. Розрахувати середню вартість номенклатури;
  2. всілякі відсотки;
  3. Розрахунки середнього заробітку тощо.

Щоб уникнути проблем, у цих випадках бажано в полі, що обчислюється, ввести перевірку на розподіл на 0.

Зробити це можна за допомогою конструкції «Вибір Коли… Тоді… Інакше… Кінець».

Наприкінці кілька слів про досить нову функцію ОбчислитиВираз(). З її допомогою, зокрема можна обчислювати відхилення вартості між поточним і попереднім рядком, накопичувальний залишок і т.д.

Припустимо, отримати Суму Документу з попереднього рядка нашого запиту можна вказавши в полі «Вираз» значення Обчислити Вираз («СумаДокумента», «Попередня Сума»).