Каталог решений - Полезные примеры составления схемы компоновки данных #1

Полезные примеры составления схемы компоновки данных #1

Полезные примеры составления схемы компоновки данных #1

В наличии

Данная статья появилась благодаря периодически появляющимся вопросам на сайте http://1cskd.ru/. Задачи, которые задают авторы вопросов совсем не тривиальные, но их можно решить с помощью СКД.

Категория:

Описание

Оглавление

  1. Посчитать разницу с предыдущей записью
  2. Поместить таблицу значений в ячейку табличного документа
  3. Пронумеровать колонки
  4. Чередование групп с выделением цветом
  5. Остатки в разрезе характеристик. Характеристики в строку с количеством в скобках
  6. Соединить две таблицы с ключом Строка = Число
  7. Сортировка по строке как по числу

 

Посчитать разницу с предыдущей записью

Пример того как можно получить поля предыдущей записи в группировке и не только. Удобно для вычисления разницы значений предыдущей цены и текущей.

Автор данного вопроса хотел посчитать отклонение текущей цены от предыдущей. Мое решение выглядит так:

Суть решения заключается в использовании функции языка выражений СКД ВычислитьВыражение() в добавленном вычисляемом поле, которое я назвал Дельта. У функции следующие параметры:

Параметры:

  • Выражение. Тип Строка;
  • Группировка. Тип Строка;
  • ТипРасчета. Тип Строка;
  • Начало. Строка, содержащая одно из вариантов;
  • Конец. Строка, содержащая одно из вариантов;
  • Сортировка. Строка;
  • ИерархическаяСортировка;
  • ОбработкаОдинаковыхЗначенийПорядка

Нас интересует 4 и 5 параметр (Начало и Конец). Выражение будет выглядеть следующим образом:

isNULL((ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Цена", , , "Предыдущая", "Предыдущая") - Цена), 0)

— здесь вычисляем предыдущее значение поля Цена и из него вычитаем текущее значение поля Цена. Естественно, для первой записи предыдущее значение не будет вычислено и результат вычитания со значением текущего поля будет Null, поэтому что бы все было «чисто» используем функцию isNULL(естьNull), чтобы преобразовать Null в число ноль.

 

Поместить таблицу значений в ячейку табличного документа

Иногда бывает необходимо поместить табличную часть документа или данные, которые представляют собой строки табличной части в одну ячейку табличного документа, например так:

 

Для этого необходимо воспользоваться функцией: ВычислитьВыражениеСГруппировкойТаблицаЗначений(), у которой есть параметры:

  • Выражение — выражение, которое нужно вычислить. Тип Строка. В строке может быть перечислено несколько выражений через запятую. После каждого выражения может быть необязательное ключевое слово КАК и имя колонки таблицы значений. Например: "Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж".
  • ВыраженияПолейГруппировки — выражения полей группировки, перечисленные через запятую. Например, "Контрагент, Партия";
  • ОтборЗаписей — выражение, применяемое к детальным записям. Например, "ПометкаУдаления = Ложь";
  • ОтборГруппировок — отбор, применяемый к групповым записям. Например: "Сумма(СуммаОборот) > &Параметр1".

Для этого создаем вычисляемое поле, в которое будем выводить получившуюся таблицу, затем помещаем это поле в ресурсы с выражением

ВычислитьВыражениеСГруппировкойТаблицаЗначений("Номенклатура, Количество")

 

Пронумеровать колонки

Пример того как можно пронумеровать колонки в СКД.

Обсуждалось здесь: http://forum.infostart.ru/forum26/topic88579/

Суть решения:

  1. Создаем запрос, в котором нумеруем строки результата запроса в пределах определенного подчинения
  2. Выводим результат в кросс-таблицу

ВАЖНО!

После того как строки в запросе пронумерованы их необходимо поместить в ВТ и потом из этой ВТ выбирать, иначе СКД сделает все по-своему и в группировку попадут не те поля

 

Для того чтобы получить результат необходимо создать:

1. Вычисляемое поле с выражением "Сотрудник" + Формат(НПП,"ЧЦ=3; ЧВН=")
2. Вычисляемое поле ФИО, в которое просто поместить Сотрудник
3. Ресурс с выражением Максимум(ФИО) или просто ФИО – никакой разницы

 

Чередование групп с выделением цветом

 Где-то на Мисте или на том же 1Cskd.ru был вопрос как подсвечивать разным цветом строки, образующие группы

 Это достигается созданием вычисляемого поля:

ВычислитьВыражение("Количество (Различные Номенклатура)",,,"Первая", "Предыдущая",,,"Вместе") % 2

Считаем количество различных "группировок" поля Номенклатура, группировки получается считать за счет установки значения параметра ОбработкаОдинаковыхЗначенийПорядка = "Вместе"

 Остаток от деления на два даст понять это четная группа или нет, соответственно, создаем элемент условного оформления с условием Поле = 1

Более простое решение предложил Skillhoster:

ВычислитьВыражение("Количество (Различные Номенклатура)",,,"Первая", "Текущая") % 2

 

Остатки в разрезе характеристик. Характеристики в строку с количеством в скобках

На том же 1CSkd.ru была такая тема, в которой автор просит помочь сделать отчет, где в одной из колонок необходим перечень характеристик(размеры обуви) с их количеством. http://1cskd.ru/2013/05/podskazhite-novichku-v-skd/

Это достигается использованием все той же функции ВычислитьВыражениеСГруппировкойМассив()

В этом примере функция выглядит так:

ВычислитьВыражениеСГруппировкойМассив("ХарактеристикаНоменклатуры.Наименование +
""("" + Формат(КоличествоОстаток,""ЧГ=0"") + "")""",
,
 "ЗначениеЗаполнено(ХарактеристикаНоменклатуры)")

Третий параметр — это отбор, позволяет избежать представления пустой строки "" – соответственно вы не увидите остатков без характеристик

 

Соединить две таблицы с ключом Строка = Число

Или вариант как в СКД значение типа число преобразовать в строку

Периодически на форумах вижу тему вида «Как преобразовать число в строку в запросе». Если вы пишете отчет на СКД и вам необходимо выполнить подобное преобразование, то никаких хитростей в запросе писать не надо.

Для того чтобы преобразовать число в строку, достаточно просто воспользоваться функцией языка выражений системы компоновки данных СКД Строка() или Формат()

Для того чтобы преобразовать строку в число можно воспользоваться функцией Вычислить()

 

Сортировка по строке как по числу

Задача не новая и периодически встречающаяся. Меня, например впервые попросили это сделать в отчете «Расчетные листки организаций» — необходимо было отсортировать расчетные листки по табельному номеру сотрудника как по числу. В последний раз встретил этот вопрос здесь http://www.forum.mista.ru/topic.php?id=716045

В своем примере я просто выведу справочник сотрудники, отсортировав его по табельному номеру (коду)

Результат будет выглядеть следующим образом:

Это достигается, созданием вычисляемого поля и использованием функции языка выражений СКД Вычислить()

  1. Создаем вычисляемое поле ТабНомерЧисло, с выражением: Вычислить(Сотрудник.Код)
  2. Сортируем по этому полю

по сути это преобразование строки в число с помощью функции языка выражений СКД Вычислить()

 


Советую так же посмотреть «Видеоуроки по СКД»(легко ищется в гугле)

При разработке я использую сконвертированную консоль отчетов СКД+.

Так же рекомендую посмотреть //sale.itcity.ru/public/86764/

has been added to your cart:
Оформление заказа