Інтернет Windows Android

Система компоновки даних 1с 8.3 обчислювані поля. Функції мови виразів системи компоновки даних

Увійдіть на сайт як учень

Увійдіть як учень, щоб отримати доступ до матеріалів школи

Система компоновки даних 1С 8.3 для початківців: вважаємо підсумки (ресурси)

Метою цього уроку буде:

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

Створюємо новий звіт

Як і на попередніх уроках відкриваємо базу " гастроном"В конфігураторі і створюємо новий звіт через меню" файл"->"Новий...":

Вид документа - зовнішній звіт:

У формі настройки звіту пишемо ім'я " Урок3"І натискаємо кнопку" Відкрити схему компоновки даних":

Ми залишаємо ім'я схеми за замовчуванням і натискаємо кнопку " Готово":

Додаємо запит через конструктор

На закладці " Набір данних"натискаємо зеленийплюсик і вибираємо пункт " Додати набір даних - запит":

Замість того, щоб писати текст запиту вручну, знову запускаємо конструктор запиту:

На вкладці " таблиці"Перетягуємо таблицю" їжа"З першої колонки в другу:

Вибираємо з таблиці " їжа"Поля, які будемо запитувати. Для цього перетягуємо поля" Найменування", "смак", "колір"І" калорійність"З другої колонки в третю:

Вийшло ось так:

Натискаємо кнопку " ОК"- текст запиту сформувався автоматично:

Формуємо налаштування відображення звіту

Переходимо на закладку " налаштування"І натискаємо на чарівну паличку, щоб визвати конструктор налаштувань:

Вибираємо вид звіту " перелік... "і натискаємо кнопку" далі":

Перетягуємо з лівої колонки в праву поля, які будуть відображатися в списку і натискаємо " далі":

Перетягуємо з лівої колонки в праву поле " колір"- по ньому буде відбуватися угруповання рядків в звіті. натискаємо " ОК":

А ось і результат роботи конструктора. Ієрархія нашого звіту:

  • звіт в цілому
  • угруповання "Колір"
  • детальні записи - рядки з назвами їжі

Збережемо звіт (кнопка дискета) і не закриваючи конфігуратора тут же відкриємо його в режимі користувача. Вийшло ось так:

Міняємо порядок колонок

але давайте поміняємо порядок колонок (стрілки вгору-вниз), щоб він був таким як на малюнку нижче:

Збережемо звіт і знову відкриємо в режимі користувача:

Відмінно, так набагато краще.

Підводимо підсумок (суму) по калорійності

Було б непогано виводити підсумок калорійності продуктів по групах. Щоб бачити суму калорійності всіх продуктів, скажімо, білого або жовтого кольору. Або дізнатися загальну калорійність взагалі всіх продуктів в базі.

Для цього існує механізм обчислення ресурсів.

Переходимо на вкладку " ресурси"І перетягуємо поле" калорійність"(Ми ж по ньому збираємося підсумок підводити) з лівої колонки в праву.

При цьому в полі вираз вибираємо зі списку " Сума (Калорійність)", Так як підсумком буде сума всіх вхідних в підсумок елементів:

Зберігаємо і формуємо звіт:

У нас з'явилися підсумки по кожній з груп і за звітом в цілому.

Підводимо підсумок (середнє) по калорійності

Тепер давайте зробимо так, щоб у ще одній колонці виводилася середня калорійність продуктів по групам і в цілому по звіту.

Чіпати вже наявну колонку "Калорійність" не можна - в неї вже виводиться підсумок-сума, тому заведемо ще одне поле, Яке буде точною копією поля "Калорійність".

Щоб завести таке "віртуальне" поле скористаємося механізмом обчислюваних полів.

Переходимо на закладку " обчислювані поля"І натискаємо зеленийплюсик:

У колонці " Шлях до даних"Пишемо ім'я нового поля ( разом, без пропусків). Нехай воно буде називатися " СредняяКалорійность", А в колонці" вираз"Пишемо ім'я вже існуючого поля, на підставі якого буде розраховуватися нове поле. Пишемо туди" калорійність". Колонка" Заголовок"Заповниться автоматично.

Ми додали нове поле ( " СредняяКалорійность"), Але в звіті воно саме по собі не з'явиться - потрібно або знову викликати конструктор налаштувань ( "Чарівна паличка") або додати це поле вручну.

зробимо другим способом. Для цього переходимо на закладку " налаштування", Вибираємо" звіт"(Адже ми хочемо додати поле в цілому до звіту), вибираємо внизу закладку" Вибрані поля"І перетягуємо поле" СредняяКалорійность"З лівої колонки в праву:

Вийшло ось так:

Зберігаємо і формуємо звіт:

Поле з'явилося і ми бачимо, що його значеннями є значення поля "Калорійність". Відмінно!

Для цього знову скористаємося вже знайомим нам механізмом ресурсів (підведення підсумків). Переходимо на закладку " ресурси"І перетягуємо поле" СредняяКалорійность"З лівої колонки в праву:

При цьому в колонці " вираз"Вибираємо" Середнє (СредняяКалорійность)":

Зберігаємо і формуємо звіт:

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

Знаєте чому вони з'явилися (значення не по групах)? Тому що, коли ми додавали поле " СредняяКалорійность"В налаштування звіту, на другому кроці ми виділили весь звіт в цілому і це нове поле потрапило в елемент " детальні записи".

Виправимо помилку. Для цього повернемося на закладку " налаштування", Виберемо" детальні записи"Спочатку зверху (крок 2), а потім" детальні записи"Знизу (крок 3), перейдемо на закладку" Вибрані поля"І побачимо в її правій колонці елемент" авто".

елемент " авто"- це не одне поле. Це кілька полів, які потрапляють сюди автоматично на підставі вищих налаштувань.

Щоб побачити, що це за поля - натиснемо на елемент " авто" правою кнопкою і виберемо пункт " Розгорнути":

елемент " авто"Розкрився в наступні поля:

А ось і наше поле " СредняяКалорійность", Яке потрапило сюди з пункту" звіт", Коли ми його туди перетягували. Просто знімемо галку поруч з цим полем, щоб прибрати його виведення.

Мова виразів системи компоновки даних

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

Вирази використовуються в наступних підсистемах:

  • схема компонування даних - для опису обчислюваних полів, полів підсумків, виразів зв'язку і т.д .;
  • настройки компонування даних - для опису виразів користувальницьких полів;
  • макет компонування даних - для опису виразів зв'язку наборів даних, опису параметрів макета і т.д.

літерали

У вираженні можуть бути присутніми літерали. Можливі літерали наступних типів:

  • рядок;
  • число;
  • Дата;
  • Булево.

рядок

Строковий літерал записується в символах «" », наприклад:

"Строковий літерал"

При необхідності використання всередині строкового литерала символу «" », слід використовувати два таких символів.

наприклад:

"Літерал" "в лапках" ""

число

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

10.5 200

Дата

Літерал типу дата записується за допомогою ключового литерала ДАТАВРЕМЯ (DATETIME). Після цього ключового слова, в дужках, через кому перераховуються рік, місяць, день, години, хвилини, секунди. Вказівка \u200b\u200bчасу не обов'язково.

наприклад:

ДАТАВРЕМЯ (1975, 1, 06) - Шосте січня 1975 року ДАТАВРЕМЯ (2006, 12, 2, 23, 56, 57) - Друге грудня 2006 року, 23 години 56 хвилин 57 секундода, 23 години 56 хвилин 57 секунд

булево

Булеві значення можуть бути записані за допомогою літералів Істина (True), Брехня (False).

значення

Для вказівки литералов інших типів (системних перерахувань, зумовлених даних) використовується ключове слово Значення, після якого в дужках йде вказівка \u200b\u200bімені литерала.

Значення (ВідСчета. Активний)

Операції над числами

унарний -

Дана операція призначена для зміни знака числа на зворотний. наприклад:

Продажі.Колічество

унарний +

Дана операція не виконує над числом ніяких дій. наприклад:

Продажі.Колічество

бінарний -

Дана операція призначена для обчислення різниці двох чисел. наприклад:

ОстаткіІОбороти.НачальнийОстаток - ОстаткіІОбороти.КонечнийОстаток ОстаткіІОбороти.НачальнийОстаток - 100 400 - 357

бінарний +

Дана операція призначена для обчислення суми двох чисел. наприклад:

ОстаткіІОбороти.НачальнийОстаток + ОстаткіІОбороти.Оборот ОстаткіІОбороти.НачальнийОстаток + 100 400 + 357

твір, добуток

Дана операція призначена для обчислення добутку двох чисел. наприклад:

Номенклатура.Цена * 1.2 2 * 3.14

розподіл

Дана операція призначена для отримання результату ділення одного операнда на другий. наприклад:

Номенклатура.Цена / 1.2 2 / 3.14

Залишок від ділення

Дана операція призначена для отримання залишку від ділення одного операнда на другий. наприклад:

Номенклатура.Цена% 1.2 2% 3.14

Операції над рядками

Конкатенація (Бінарний +)

Дана операція призначена для конкатенації двох рядків. наприклад:

Номенклатура.Артікул + ":" + Номенклатура.Наіменованіе

подібно

Дана операція перевіряє відповідність рядка переданому шаблоном.

Значним оператора ПОДІБНО є ІСТИНА, якщо значення<Выражения> задовольняє шаблоном, і БРЕХНЯ в іншому випадку.

Наступні символи в<Строке_шаблона> мають сенс, відмінний від просто чергового символу рядка:

  • % - відсоток: послідовність, яка містить нуль і більш довільних символів;
  • _ - підкреслення: один довільний символ;
  • [...] - один або кілька символів у квадратних дужках: один символ, будь-який з перерахованих всередині квадратних дужок. У перерахуванні можуть зустрічатися діапазони, наприклад a-z, які означають довільний символ, що входить в діапазон, включаючи кінці діапазону;
  • [^ ...] - в квадратних дужках значок заперечення, за яким слід один або кілька символів: будь-який символ, крім тих, які перераховані слідом за значком заперечення;

Будь-який інший символ означає сам себе і не несе ніякого додаткового навантаження. Якщо в якості самого себе необхідно записати один з перерахованих символів, то йому повинен передувати<Спецсимвол>, Вказаний після ключового слова спецсимволи (ESCAPE).

Наприклад, шаблон

"% АБВ [абвг] \\ _ абв%" спецсимволи "\\"

означає подстроку, що складається з послідовності символів: літери А; літери Б; літери В; однієї цифри; однією з букв а, б, в або г; символу підкреслення; літери а; літери б; букви в. Причому ця послідовність може розташовуватися, починаючи з довільної позиції в рядку.

операції порівняння

Так само

Дана операція призначена для порівняння двох операндів на рівність. наприклад:

Продажі.Контрагент \u003d Продажі.НоменклатураОсновнойПоставщік

Не дорівнює

Дана операція призначена для порівняння двох операндів на нерівність. наприклад:

Продажі.Контрагент<> Продажі.НоменклатураОсновнойПоставщік

менше

Дана операція призначена для перевірки того, що перший операнд менше другого. наприклад:

ПродажіТекщіе.Сумма< ПродажиПрошлые.Сумма

більше

Дана операція призначена для перевірки того, що перший операнд більше другого. наприклад:

ПродажіТекщіе.Сумма\u003e ПродажіПрошлие.Сумма

Менше або дорівнює

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

ПродажіТекщіе.Сумма<= ПродажиПрошлые.Сумма

Більше чи рівно

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

ПродажіТекщіе.Сумма\u003e \u003d ПродажіПрошлие.Сумма

операція В

Дана операція здійснює перевірку наявності значення в переданому списку значень. Результатом операції буде Істина, в разі, якщо значення знайдено, або Брехня - в іншому випадку. наприклад:

Номенклатура В (& Товар1, & Товар2)

Операція перевірки наявності значення в наборі даних

Операція здійснює перевірку наявності значення в зазначеному наборі даних. Набір даних для перевірки повинен містити одне поле. наприклад:

Продажі.Контрагент В Контрагенти

Операція перевірки значення на NULL

Дана операція повертає значення Істина в разі, якщо значення є значенням NULL. наприклад:

Продажі.Контрагент Є NULL

Операція перевірки значення на нерівність NULL

Дана операція повертає значення Істина в разі, якщо значення не є значенням NULL. наприклад:

Продажі.Контрагент Є НЕ NULL

Логічні операції

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

операція НЕ

Операція НЕ повертає значення Істина в разі, якщо її операнд має значення Брехня, і значення Брехня в разі, якщо її операнд має значення Істина. наприклад:

НЕ Документ.Грузополучатель \u003d Документ.Грузоотправітель

операція І

Операція І повертає значення Істина в разі, якщо обидва операнда мають значення Істина, і значення Брехня в разі, якщо один з операндів має значення Брехня. наприклад:

Документ.Грузополучатель \u003d Документ.Грузоотправітель І Документ.Грузополучатель \u003d & Контрагент

операція АБО

Операція АБО повертає значення Істина в разі, якщо один з операндів має значення Істина, і Брехня в разі, якщо обидва операнда мають значення Брехня. наприклад:

Документ.Грузополучатель \u003d Документ.Грузоотправітель АБО Документ.Грузополучатель \u003d & Контрагент

агрегатні функції

Агрегатні функції здійснюють деяку дію над набором даних.

сума

Агрегатна функція Сума розраховує суму значень виразів, переданих їй як аргумент для всіх детальних записів. наприклад:

Сума (Продажі.СуммаОборот)

кількість

Функція Кількість розраховує кількість значень відмінних від значення NULL. наприклад:

Кількість (Продажі.Контрагент)

кількість різних

Ця функція розраховує кількість різних значень. наприклад:

Кількість (Різні Продажі.Контрагент)

максимум

функція отримує максимальне значення. наприклад:

Максимум (Остаткі.Колічество)

мінімум

Функція отримує мінімальне значення. наприклад:

Мінімум (Остаткі.Колічество)

середнє

Функція отримує середнє значення для значень, відмінних від NULL. наприклад:

Середнє (Остаткі.Колічество)

інші операції

операція ВИБІР

Операція Вибір призначена для здійснення вибору одного з декількох значень при виконанні деяких умов. наприклад:

Вибір Коли Сума\u003e 1000 Тоді Сума Інакше 0 Кінець

Правила порівняння двох значень

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

  • NULL (найнижчий);
  • булево;
  • число;
  • Дата;
  • рядок;
  • довідкові типи

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

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

  • у типу Булево значення ІСТИНА більше значення БРЕХНЯ;
  • у типу Число звичайні правила порівняння для чисел;
  • у типу Дата більш ранні дати менше пізніших;
  • у типу Рядок - порівняння рядків відповідно до встановлених національними особливостями бази даних;
  • посилальні типи порівнюються на основі своїх значень (номера запису і т. п.).

Робота зі значенням NULL

Будь-яка операція, в якій значення одного з операндів NULL, буде давати результат NULL.

Є винятки:

  • операція І повертатимуть NULL тільки в разі, якщо жоден з операндів не має значення Брехня;
  • операція АБО буде повертати NULL тільки в разі, якщо жоден з операндів не має значення Істина.

пріоритети операцій

Операції мають наступні пріоритети (перший рядок має нижчий пріоритет):

  • В, Є NULL, Є НЕ NULL;
  • =, <>, <=, <, >=, >;
  • Бінарний +, бінарний -;
  • *, /, %;
  • Унарний +, Унарний -.

Функції мови виразів системи компоновки даних

обчислити

Функція Обчислити призначена для обчислення виразу в контексті деякої угруповання. Функція має такі параметри:

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

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

рівень

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

Рівень ()

Номер по порядку

Отримати наступний порядковий номер.

Номер по порядку()

НомерПоПорядкуВГруппіровке

Повертає наступний порядковий номер у поточному угрупованню.

НомерПоПорядкуВГруппіровке ()

формат

Отримати отформатированную рядок переданого значення.

Форматна рядок задається відповідно до форматної рядком 1с Підприємство.

параметри:

  • значення;
  • Форматна рядок.

Формат (РасходниеНакладние.СуммаДок, "ЧДЦ \u003d 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.

параметри:

  • Конвертувати вираз;
  • Вказівка \u200b\u200bтипу. Тип Рядок. Містить рядок типу. Наприклад, "Число", "Рядок" і т.п. Крім примітивних типів дана рядок може містити ім'я таблиці. У цьому випадку буде здійснена спроба висловити до заслання на зазначену таблицю.

Висловити (Данние.Реквізіт1, "Число (10,3)")

ЕстьNull

Ця функція повертає значення другого параметра в разі, якщо значення першого параметра NULL.

В іншому випадку буде повернуто значення першого параметра.

ЕстьNULL (Сума (Продажі.СуммаОборот), 0)

Функції загальних модулів

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

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

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

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

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

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

1. Отримання показника наростаючим підсумком

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

Якщо кількість товару наростаючим підсумком потрібно отримувати на рівні детальних записів, то функцію ВичіслітьВираженіе задаємо для обчислюваного поля на вкладці "Обчислювані поля" (див. Малюнок 3).
Залежно від рівня отримання наростаючого підсумку, створюємо угруповання (див. Малюнок 4): на рівні ресурсів - угруповання по товарах, на рівні ДЗ - угруповання детальних записів.
Малюнок 4. Угруповання звіту з наростаючим підсумком

2. Отримання значення показника з попереднього рядка

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

3. Отримання показника наростаючим підсумком в крос-таблиці

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

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

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

У світлі найближчого виходу 8.2.14, спробую описати деякі нові функції системи компоновки даних.

Відкриваємо схему компоновки даних, бажано в зовнішньому звіті, щоб було простіше редагувати.

Додаємо набір даних типу запит і пишемо, або вручну, або за допомогою конструктора запитів найпростіший запит:

1. Налаштовуємо запит в СКД.

2. Налаштовуємо обчислювані поля в СКД

3. Виконуємо настройку макета даних на закладці налаштування

4. Запускаємо 1С Підприємство 8.2.14. Відкриваємо звіт. Формуємо, отримуємо.

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

1. Поточна дата()

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

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

синтаксис:

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

опис:

Функція призначена для обчислення виразу в контексті деякої угруповання.

Функція враховує відбір угруповань, але не враховує ієрархічні відбори.

Функція не може застосовуватися до угруповання в груповому відборі цього угруповання. Наприклад, у відборі угруповання Номенклатура не можна використовувати вираз ВичіслітьВираженіе ( «Сума (СуммаОборот)", «ОбщійІтог»)\u003e 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. Створення запиту. Запит можна написати вручну або обійтися без програмного коду, скориставшись зручним інтерфейсом;
  2. Налаштування звіту. Вибираються поля, підсумки, угруповання, параметри, оформлення звіту;
  3. Після цього нам залишиться лише підключити вийшов звіт в конфігурацію будь-яким доступним способом.

Незважаючи на можливість користувачів налаштовувати звіти на СКД, створювати їх необхідно через конфігуратор.

Розглянемо приклад створення зовнішнього звіту на СКД:


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

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

можливості СКД

Бувають ситуації, коли ми зробили звіт, а потім приходить користувач і просить зробити невелику доопрацювання. Наприклад, замість назв номенклатури виводити артикули. СКД дозволяє такі доробки робити користувачам самостійно за допомогою кнопки «Ще» - «Змінити варіант ...».


Вікно схоже на вікно настройки в звіті в конфігураторі, а також воно має схожі функції. Щоб вирішити поставлену задачу користувач повинен зайти у вкладку «Поля» і змінити поле «Номенклатура». Це поле для редагування відкривається подвійним клацанням, і стає доступна кнопка «Вибрати ...».


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


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


Механізм СКД 1С: Підприємство 8.3 також має розширений функціонал для розробників. При розробці звіту ми користувалися всього 2 вкладками - «Набори даних» і «Налаштування», але в СКД їх набагато більше. Щоб користуватися всіма функціями системи компоновки даних, необхідно уявляти, для чого кожна з вкладок потрібна:

  1. Набори даних - тут перераховані всі запити, які беруть участь у формуванні звіту;
  2. Зв'язки наборів даних - використовується для побудови зв'язку між різними запитами з першої вкладки;
  3. Обчислювані поля - перелік доданих полів не з запиту. Найчастіше використовується в випадках, коли на підставі значень декількох полів із запиту потрібно отримати 1 значення;
  4. Ресурси. В 1С так називаються поля, за якими необхідно знати підсумки. Ресурси підтримують різні арифметичні операції - суму, кількість, максимум і інші;
  5. Параметри. Використовуються, якщо для формування звіту необхідно, щоб користувач ввів певні дані - дату, підрозділів або номенклатуру, наприклад;
  6. Макети. Призначені для тих випадків, коли користувачі хочуть побачити унікальне оформлений звіт. Створити окреме місце для підписів або нову верхню частину звіту - все це можна тут;
  7. Вкладені схеми. Вони необхідні, коли ваш звіт повинен містити дані інших звітів;
  8. Налаштування. У розділі оголошуються виводяться поля, угруповання, налаштовується зовнішній вигляд звіту.


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