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

Суть рішення полягає у використанні функції мови виразів СКДОбчислитиВираз() у доданому обчислюваному полі, яке я назвавДельта. Функція має такі параметри:
- Вираз. ТипРядок ;
- Угруповання. ТипРядок ;
- Тип Розрахунку. ТипРядок ;
- Початок. Рядок, що містить один з варіантів;
- Кінець. Рядок, що містить один з варіантів;
- Сортування. Рядок;
- ІєрархічнаСортування ;
- ОбробкаОдінаковихЗначеньПорядку
Нас цікавить 4 та 5 параметр (Початок таКінець ). Вираз виглядатиме так:
isNULL((ВИЧИСЛИТИВИРАД("Ціна", , , "Попередня", "Попередня") - Ціна), 0)
- тут обчислюємо попереднє значення поляЦіна і з нього віднімаємо поточне значення поляЦіна. Природно, для першого запису попереднє значення не буде обчислено і результат віднімання зі значенням поточного поля буде Null, тому щоб все було «чисто» використовуємо функцію isNULL(єNull), щоб перетворити Null в число нуль.

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

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

- Створюємо запит, у якому нумеруємо рядки результату запиту в межах певного підпорядкування
- Виводимо результат у крос-таблицю
ВАЖЛИВО!
Після того, як рядки в запиті пронумеровані, їх необхідно помістити в ВТ і потім з цієї ВТ вибирати, інакше СКД зробить все по-своєму і в угруповання потраплять не ті поля.
Для того щоб отримати результат необхідно створити обчислюване поле з виразом"Співробітник" + Формат(НВП,"ЧЦ=3; ЧВН=") і обчислюване поле ПІБ, в яке просто помістити Співробітник, потімпоміщаємо полеПІБ в ресурс з виразомМаксимум(ПІБ) або простоПІБ - ніякої різниці
Чергування груп із виділенням кольором
Десь на Місті або на тому ж 1Cskd.ru було питання як підсвічувати різним кольором рядки, що утворюють групи

Це досягається створенням поля, що обчислюється:
ВизначитиВираз("Кількість (Різні Номенклатура)". "Перша", "Попередня". "Разом") % 2
Вважаємо кількість різних "угруповань" поля Номенклатура, угруповання виходить вважати за рахунок встановлення значення параметра ОбробкаОдинаковихЗначеньПорядку = "Разом"
Залишок від поділу на два дасть зрозуміти це парна група чи ні, відповідно, створюємо елемент умовного оформлення з умовоюПоле = 1
Залишки у розрізі характеристик. Характеристики у рядок з кількістю у дужках

Це досягається використанням тієї ж функціїОбчислитиВираз СгрупуваннямМассив()
У цьому прикладі функція виглядає так:
ОбчислитиВираз СгрупуваннямМасив( "ХарактеристикаНоменклатури.Найменування + ""("" + Формат(КількістьЗалишок,""ЧГ=0"") + "")"", , "ЗначенняЗаповнено(Характеристика"Номенклатура
Третій параметр - це відбір, що дозволяє уникнути уявлення порожнього рядка "" - відповідно ви не побачите залишків без характеристик
З'єднати дві таблиці з ключем Рядок = Число
Або варіант як у СКД значення типу число перетворити на рядок
Періодично на форумах бачу тему виду «Як перетворити число на рядок у запиті». Якщо ви пишете звіт на СКД і вам необхідно виконати подібне перетворення, то жодних хитрощів у запиті не треба писати.
Для того, щоб перетворити число в рядок,досить просто скористатися функцією мови виразів системи компонування даних СКДРядок() абоФормат()
Для того щоб перетворити рядок на число можна скористатися функцієюОбчислити()
Сортування за рядком як за числом
Завдання не нова і періодично зустрічається. Мене, наприклад, вперше попросили це зробити у звіті «Розрахункові листки організацій » - необхідно було відсортувати розрахункові листки за табельним номером співробітника як за кількістю. Востаннє зустріло це питання тут http://www.forum.mista.ru/topic.php? >
У своєму прикладі я просто виведу довідник співробітники, відсортувавши його за табельним номером (кодом)
Результат буде виглядати так:

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