1с скд обчислювані поля приклади. Схема компонування даних (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)), то буде отримана запис з датою 01.02. 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. При зазначеному "Разом" в параметрах Початок і Кінець можна вказувати зміщення для позицій "Перша", "Остання", "Попередня", "Наступна". Значення за замовчуванням "Окремо".
приклад:
Отримання відносини суми по полю "Продажі.СуммаОборот" записи угруповання до суми того ж поля у всій компонуванні:
Сума (Продажі.СуммаОборот) / ВичіслітьВираженіе ( "Сума (Продажі.СуммаОборот)", "ОбщійІтог").

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

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

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

синтаксис:
ВичіслітьВираженіеСГруппіровкойМассів (Вираз, ВираженіяПолейГруппіровкі, ОтборЗапісей, ОтборГруппіровок)

параметри:

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


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

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

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

параметри:

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

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

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

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

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

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

синтаксис:
Порядковий номер()

приклад:
Порядковий номер()

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

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

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

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

параметри:

  • значення - вираз, який потрібно відформатувати;
  • ФорматнаяСтрока - форматна рядок задається відповідно до форматної рядком 1С: Підприємство.
приклад:
Формат (РасходниеНакладние.СуммаДок, "ЧДЦ \u003d 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) - дана функція призначена для отримання номера тижні року з значення типу Дата. Тижня року нумеруються, починаючи з 1.

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

параметр:

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

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С СКД) - автоматичне формування керованої форми звіту, а при подальшому розвитку даного напрямку, є важливим фактором при виборі методу розробки звіту. Але через складність структури Схеми компонування даних (1С СКД) і величезної кількості налаштувань часто призводить до більш тривалої розробки звіту, ніж через «конструктор вихідний форми». Тому програмісту 1С необхідно розбиратися у всіх тонкощах роботи Схеми компонування даних (1С СКД), щоб в подальшому прискорити час розробки формування звітів.

Розберемо перші три вкладки Схеми компонування даних (1С СКД) - набір даних, зв'язку набору даних і обчислювані поля.

Набір даних в 1С СКД

Набір даних включає в себе можливість створення трьох об'єктів - запит, об'єкт і об'єднання, зупинимося докладніше на кожному з них:

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

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

Поля, тут ми вибираємо ті об'єкти, які повинні потрапити в звіт, прапор дочірні вказує, чи будуть доступні дочірні елементи по об'єкту чи ні, логічно, що у строкових, числових і подібних даних не можна буде встановити прапор в положення Істина.

Умови, тут ми вибираємо ті об'єкти, які можна буде використовувати в умовах в СКД.

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

Спочатку створимо макет схема компонування даних у документа і назвемо СКД (наприклад: 1С СКД), в ньому створюємо набір даних об'єкт, далі заповнюємо поля, наприклад, маємо у документа табличну частину товари з реквізитами - номенклатура, кількість і ціна.

Додамо три поля і заповнюємо по кожному колонку поле найменуванням реквізитів, інші колонки заповняться автоматично:

Створимо кнопку на формі документа, опишемо механізм роботи в керованих формах:

& НаКліенте

Процедура Друк ()

НашОтчет \u003d ПечатьНаСервере (); // викликаємо функцію на сервері

НашОтчет.Показать (); // виводимо сформований звіт

КонецПроцедури

&На сервері

Функція ПечатьНаСервере ()

Об'ектДокумента \u003d РеквізітФормиВЗначеніе ( "Об'єкт");

//поміщаємо табличну частину Товари в структуру з найменуванням ТовариСКД так само, як ми вказали в самій СКД ім'я об'єкта, що містить дані

НаборДанних \u003d Новий Структура;

НаборДанних.Вставіть ( "ТовариСКД", Об'ектДокумента.Товари);

//отримуємо наш макет і виставляємо настройки за замовчуванням, щоб всі налаштування виводу звіту бралися з нашого макета

НашМакет \u003d Об'ектДокумента.ПолучітьМакет ( "СКД");

Налаштування \u003d НашМакет.НастройкіПоУмолчанію;

//створюємо макет компонування даних з нашими налаштуваннями

КомпоновщікМакета \u003d Новий КомпоновщікМакетаКомпоновкіДанних;

МакетКомпоновкі \u003d КомпоновщікМакета.Виполніть (НашМакет, Налаштування);

//виконуємо компонування даних з нашим набором даних

ПроцессорКомпоновкіДанних \u003d Новий ПроцессорКомпоновкіДанних;

ПроцессорКомпоновкіДанних.Ініціалізіровать (МакетКомпоновкі, НаборДанних);

//формуємо табличний документ і виводимо в нього наш звіт

ДокументОтчета \u003d Новий ТаблічнийДокумент;

ПроцессорВивода \u003d Новий ПроцессорВиводаРезультатаКомпоновкіДаннихВТаблічнийДокумент;

ПроцессорВивода.УстановітьДокумент (ДокументОтчета);

ПроцессорВивода.Вивесті (ПроцессорКомпоновкіДанних);

Повернення ДокументОтчета;

КонецФункціі

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

Про б'едіненіе

У нього ми можемо поміщати наш запити і об'єкти, але на відміну від зв'язку, він просто додає таблиці один до одного, тобто якщо ми зв'яжемо дві однакових таблиці, то отримаємо в підсумку одну, а при об'єднанні, вона подвоїться, розглянемо на простому прикладі :

Маємо таблиці:

При зв'язку ми отримаємо:

А при об'єднанні:

Розглянемо тепер заповнення колонок в наборах даних (деякі пропустимо, так як пов'язані з іншими вкладками, до них повернемося в майбутніх статтях):

- поле, Вказуємо загальна назва реквізиту;

­­- шлях, Вказуємо назву реквізиту, за яким будемо до нього звертатися в СКД, наприклад, в обчислюваних полях;

- заголовок, Вказуємо найменування реквізиту, яке буде виводиться в звіті;

- обмеження поля, Вказуємо доступність даного реквізиту;

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

- вираз, за \u200b\u200bяким обчислюється уявлення поле, Зручно використовувати, коли нам потрібно змінити трохи висновок реквізитів, наприклад, нам потрібно, щоб після імені номенклатури виводився склад, На якому знаходиться вона, тоді заповнимо наступне: Номенклатура + "знаходиться на складі" + Склад. Повторюся, що звернення реквізитами здійснюється через назву, зазначену в колонці шлях;

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

- тип значення, Вказується тип значення реквізиту, заповнювати необхідно, якщо будете користуватися таким полем;

- доступні значення, Працює лише при заповненому типі значення, Відкриваємо форму заповнення і в колонці значення вказуємо елемент, який потрібно змінити, відповідно до типу, це може бути зумовлені об'єкти або у числових, наприклад, реквізитів прості значення, в поданні вказуємо, на що нам потрібно поміняти, приклад булевского типу:

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

Зв'язки набору даних в 1С СКД

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

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

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

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

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

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

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

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

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

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

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

Способи виведення даних табличній частині в один рядок, включаючи спосіб з використанням функції ВичіслітьВираженіе, розглянуто в статті
  • 1С-Бітрікс
  • Одна з найважливіших областей бізнес-софта - це звітність. Від того, наскільки легко налаштувати під мінливі потреби бізнесу (і законодавства) існуючий звіт або зробити новий, може залежати (причому не в переносному сенсі!) Доля бізнесу, будь то звіт для податкової інспекції чи діаграма залежності попиту на товари від сезону та інших факторів . Потужна і гнучка система звітності, що дозволяє легко витягти з системи потрібні дані, представити їх в доступному для розуміння вигляді, що дозволяє кінцевому користувачеві перенастроювати стандартний звіт так, щоб побачити дані в новому світлі - це ідеал, до якого має прагнути кожна бізнес-система.

    У платформі «1С: Підприємство» за побудову звітів відповідає механізм під назвою «Система компоновки даних» (скорочено СКД). У цій статті ми постараємося дати короткий опис ідеї і архітектури механізму СКД і його можливостей.


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

    Трохи історії

    У найпершій версії платформи «1С: Підприємство 8», версії 8.0, звіти робилися так:
    1. Писався один або кілька запитів на мові запитів 1С (SQL-подібна мова, докладніше про нього нижче).
    2. Писався код, який переносив результати виконаних запитів в табличний документ або в діаграму. Код також міг робити роботу, яку в запиті зробити неможливо - наприклад, обчислював значення, використовуючи вбудовану мову 1С.
    Підхід прямолінійний, але не найзручніший - візуальних налаштувань мінімум, все доводиться програмувати «врукопашну». А один з козирів на той момент зовсім нової платформи «1С: Підприємство 8» - це мінімізація в прикладному рішенні обсягу коду, який потрібно писати вручну, зокрема, за рахунок візуального проектування. Логічно було б піти цим же шляхом і в механізмі побудови звітів. Що і було зроблено шляхом розробки нового механізму - Системи Компонування Даних.

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

    Постановка задачі

    Завдання перед командою розробки стояла така - зробити систему створення звітів, засновану не так на алгоритмічній (тобто через написання коду), а на декларативному підході до створення звітів. І ми вважаємо, що завдання успішно вирішили. З нашого досвіду, близько 80% необхідної звітності може бути реалізована за допомогою СКД без єдиної строчки коду (за винятком написання формул обчислюваних полів), здебільшого - через візуальні налаштування.
    Розробка першої версії СКД зайняла близько 5 людино-років.

    дві мови

    У створенні звітів задіяні дві мови. Один - мова запитів, використовуваний для вибірки даних. Другий - мова виразів компонування даних, призначений для запису виразів, використовуваних в різних частинах системи, наприклад, в настройках компонування даних, для опису виразів користувальницьких полів.

    Мова запитів

    Мова запитів заснований на SQL і легко освоюється знають SQL. Приклад запиту:

    Легко бачити аналоги стандартних для SQL-запиту секцій - SELECT, FROM, GROUP BY, ORDER BY.

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

    • Звернення до полів через точку. Якщо поля будь-якої таблиці мають контрольний тип (зберігають посилання на об'єкти іншої таблиці), розробник може в тексті запиту посилатися на них через ".", При цьому кількість рівнів вкладеності таких посилань система не обмежує (наприклад, ЗаказКліента.Соглашеніе.Організація. Телефон).
    • Багатовимірне і багаторівневе формування підсумків. Підсумки і Проміжні підсумки формуються з урахуванням угруповання і ієрархії, обхід рівнів може виконуватися в довільному порядку з підбиттям Проміжні підсумки, забезпечується коректне побудова підсумків по тимчасовим вимірам.
    • Підтримка віртуальних таблиць. Віртуальні таблиці, що надаються системою, дозволяють отримати практично готові дані для більшості прикладних задач без необхідності складання складних запитів. Так, віртуальна таблиця може надати дані по залишкам товарів в розрізі періодів на якийсь момент часу. При цьому віртуальні таблиці максимально використовують збережену інформацію, наприклад, раніше розраховані підсумки і т.д.
    • Тимчасові таблиці. Мова запитів дозволяє використовувати в запитах тимчасові таблиці. З їх допомогою можна підвищити продуктивність запитів, в деяких випадках знизити кількість блокувань і зробити текст запиту більш легким для сприйняття.
    • Пакетні запити. Для більш зручної роботи з тимчасовими таблицями в мові запитів підтримується робота з пакетними запитами - таким чином, створення тимчасової таблиці і її використання містяться в один запит. Пакетний запит являє собою послідовність запитів, між якими ставиться крапка з комою ( ";"). Запити в пакеті виконуються один за іншим. Результатом виконання пакетного запиту, в залежності від використовуваного методу, буде або результат, що повертається останнім запитом пакету, або масив результатів всіх запитів пакета в тій послідовності, в якій слідують запити в пакеті.
    • Отримання уявлень посилальних полів. Кожна об'єктна таблиця (в якій зберігається довідник або документ) має віртуальне поле - «Представлення». Це поле містить текстове представлення об'єкта і полегшує роботу творця звітів. Так, для документа це поле містить всю ключову інформацію - назва типу документа, його номер і дату (наприклад, «Продаж 000000003 від 06.07.2017 17:49:14»), позбавляючи розробника від написання обчислюваного поля.
    • та ін.
    Механізм запитів автоматично модифікує запит з урахуванням ролей, до яких належить користувач, від імені якого виконується запит (тобто користувач побачить тільки ті дані, які має право бачити) і функціональних опцій (тобто відповідно до налаштованої в прикладному рішенні функціональністю).

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

    наприклад:

    • ВИБРАТИ. У цій пропозиції описуються поля, які користувач зможе вибирати для виведення. Після цього ключового слова через кому перераховуються псевдоніми полів з основного списку вибірки запиту, які будуть доступними для настройки. Приклад: (ВИБРАТИ Номенклатура, Склад)
    • ДЕ. Описуються поля, на які користувач зможе накладати відбір. В даному реченні використовуються поля таблиць. Використання псевдонімів полів списку вибірки неприпустимо. Кожна частина об'єднання може містити власний елемент ДЕ. Приклади: (ДЕ Номенклатура. *, Склад), (ДЕ Документ.Дата\u003e \u003d & ДатаНачала, Документ.Дата<= &ДатаКонца}
    • та ін.
    Приклад використання розширень:

    Мова виразів компонування даних

    Мова виразів компонування даних призначений для запису виразів, використовуваних, зокрема, для опису виразів користувальницьких полів. СКД дозволяє визначати в звіті призначені для користувача поля, використовуючи або власні вислови, або набори варіантів з умовами їх вибору (аналог CASE в SQL). Призначені для користувача поля є аналогом обчислюваних полів. Вони можуть задаватися як в конфігураторі, так і в режимі «1С: Підприємство», але в виразах користувальницьких полів можна використовувати функції загальних модулів. Тому призначені для користувача поля призначені скоріше для користувача, ніж для розробника.

    приклад:

    Процес створення звіту на СКД

    При створенні звіту нам потрібно створити макет, який визначає, як дані будуть відображатися в звіті. Можна створити макет, який базується на схемі компоновки даних. Схема компонування даних описує суть даних, які надаються звіту (звідки отримувати дані і як можна управляти їх компонуванням). Схема компонування даних являє собою базу, на основі якої можуть бути сформовані різноманітні звіти. Схема компонування даних може містити:
    • текст запиту з інструкціями системи компоновки даних;
    • опис декількох наборів даних;
    • докладний опис доступних полів;
    • опис зв'язків між декількома наборами даних;
    • опис параметрів отримання даних;
    • опис макетів полів і угруповань;
    • та ін.

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

    Підсумком запуску конструктора запитів буде текст запиту (на мові запитів «1С: Підприємства»). Цей текст можна при необхідності скорегувати вручну:

    Наборів даних в схемі компоновки даних може бути кілька, набори даних можуть бути пов'язані в макеті довільним чином, можуть бути додані обчислювані поля, задані параметри звіту і т.п. Варто згадати цікаву особливість роботи механізму запитів в 1С: Підприємстві. Запити в кінцевому підсумку транслюються в діалект SQL, специфічний для СУБД, з якої безпосередньо працює додаток. Ми взагалі намагаємося задіяти можливості серверів СУБД по максимуму (нас обмежує те, що ми використовуємо тільки ті можливості, які є одночасно у всіх підтримуваних платформою «1С: Підприємство» СУБД - MS SQL, Oracle, IBM DB2, PostgreSQL). Таким чином, на рівні запиту в обчислюваних полях ми можемо використовувати тільки ті функції, які транслюються в SQL.

    А ось на рівні схеми компонування даних ми вже можемо додавати власні поля і використовувати в них функції на вбудованій мові розробки 1С (в тому числі і написані нами), що сильно розширює можливості звітів. Технічно це виглядає так - все, що можна транслювати в SQL, транслюється в SQL, запит виконується на рівні СУБД, результати запиту поміщаються в пам'ять сервера додатків 1С і СКД обчислює для кожного запису значення обчислюваних полів, чиї формули написані на мові 1С.


    Додавання користувальницьких полів

    У звіт можна додати будь-яку кількість таблиць і діаграм:


    дизайнер звітів


    Звіт під час виконання

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

    Коротко описати процес побудови і формування звіту можна так:

    • Розробник в design time за допомогою дизайнера (або в runtime за допомогою коду) визначає схему компоновки даних:
      • Текст запиту / запитів
      • Опис обчислюваних полів
      • Зв'язки між запитами (якщо їх декілька)
      • параметри звіту
      • Налаштування за замовчуванням
      • І т.д.
    • Вищеописані настройки зберігаються в макеті
    • Користувач відкриває звіт
      • Можливо, робить додаткові налаштування (наприклад, змінює значення параметрів)
      • Натискає кнопку «Сформувати»
    • Налаштування користувача застосовуються до схеми компонування даних, визначеної розробником.
    • Формується проміжний макет компонування даних, що містить в собі інструкції, звідки отримувати дані. Зокрема, коригуються запити, задані в макеті. Так, із запиту видаляються поля, які не використовуються в звіті (це робиться з метою мінімізувати обсяг одержуваних даних). У запит додаються всі поля, які беруть участь в формулах обчислюваних полів.
    • У справу включається процесор компонування даних. Процесор компонування виконує запити, здійснює зв'язок наборів даних, розраховує значення обчислюваних полів і ресурсів, виконує угруповання. Словом, робить всі розрахунки, які не були виконані на рівні СУБД.
    • Процесор виведення даних запускає запит на виконання і виводить отримані дані в табличний документ, діаграму і т.п.


    Процес формування звіту механізмом СКД

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

    призначені для користувача настройки

    Весь інструментарій СКД доступний як розробнику, так і кінцевому користувачеві. Але практика показала, що кінцевого користувача часто лякає велика кількість можливостей інструменту. Тим більше що в більшості випадків вся міць налаштувань кінцевому користувачеві і не потрібна - йому досить мати швидкий доступ до налаштування одного-двох параметрів звіту (наприклад, періоду і контрагента). Починаючи з певної версії платформи у розробника звіту з'явилася можливість відзначити, які налаштування звіту доступні користувачеві. Робиться це за допомогою прапорця «Включати в призначені для користувача настройки». Також у налаштувань звіту з'явився прапор «Режим відображення», який приймає одне з трьох значень:
    • Швидкий доступ. Налаштування буде виведена безпосередньо в верхню частину вікна звіту.
    • Звичайний. Налаштування буде доступна через кнопку «Налаштування».
    • Недоступний. Налаштування буде недоступна кінцевому користувачеві.


    Режим відображення настройки в design time


    Відображення настройки в режимі «Швидкий доступ» під час виконання (під кнопкою «Сформувати»)

    плани розвитку

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

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

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

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

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