Оглавление
- Посчитать разницу с предыдущей записью
- Поместить таблицу значений в ячейку табличного документа
- Пронумеровать колонки
- Чередование групп с выделением цветом
- Остатки в разрезе характеристик. Характеристики в строку с количеством в скобках
- Соединить две таблицы с ключом Строка = Число
- Сортировка по строке как по числу
Посчитать разницу с предыдущей записью
Пример того как можно получить поля предыдущей записи в группировке и не только. Удобно для вычисления разницы значений предыдущей цены и текущей.
Автор данного вопроса хотел посчитать отклонение текущей цены от предыдущей. Мое решение выглядит так:
Суть решения заключается в использовании функции языка выражений СКД ВычислитьВыражение() в добавленном вычисляемом поле, которое я назвал Дельта. У функции следующие параметры:
Параметры:
- Выражение. Тип Строка;
- Группировка. Тип Строка;
- ТипРасчета. Тип Строка;
- Начало. Строка, содержащая одно из вариантов;
- Конец. Строка, содержащая одно из вариантов;
- Сортировка. Строка;
- ИерархическаяСортировка;
- ОбработкаОдинаковыхЗначенийПорядка
Нас интересует 4 и 5 параметр (Начало и Конец). Выражение будет выглядеть следующим образом:
isNULL((ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Цена", , , "Предыдущая", "Предыдущая") - Цена), 0)
- здесь вычисляем предыдущее значение поля Цена и из него вычитаем текущее значение поля Цена. Естественно, для первой записи предыдущее значение не будет вычислено и результат вычитания со значением текущего поля будет Null, поэтому что бы все было «чисто» используем функцию isNULL(естьNull), чтобы преобразовать Null в число ноль.
Поместить таблицу значений в ячейку табличного документа
Иногда бывает необходимо поместить табличную часть документа или данные, которые представляют собой строки табличной части в одну ячейку табличного документа, например так:
Для этого необходимо воспользоваться функцией: ВычислитьВыражениеСГруппировкойТаблицаЗначений(), у которой есть параметры:
- Выражение - выражение, которое нужно вычислить. Тип Строка. В строке может быть перечислено несколько выражений через запятую. После каждого выражения может быть необязательное ключевое слово КАК и имя колонки таблицы значений. Например: "Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж".
- ВыраженияПолейГруппировки - выражения полей группировки, перечисленные через запятую. Например, "Контрагент, Партия";
- ОтборЗаписей - выражение, применяемое к детальным записям. Например, "ПометкаУдаления = Ложь";
- ОтборГруппировок - отбор, применяемый к групповым записям. Например: "Сумма(СуммаОборот) > &Параметр1".
Для этого создаем вычисляемое поле, в которое будем выводить получившуюся таблицу, затем помещаем это поле в ресурсы с выражением
ВычислитьВыражениеСГруппировкойТаблицаЗначений("Номенклатура, Количество")
Пронумеровать колонки
Пример того как можно пронумеровать колонки в СКД.
Обсуждалось здесь: http://forum.infostart.ru/forum26/topic88579/
Суть решения:
- Создаем запрос, в котором нумеруем строки результата запроса в пределах определенного подчинения
- Выводим результат в кросс-таблицу
ВАЖНО!
После того как строки в запросе пронумерованы их необходимо поместить в ВТ и потом из этой ВТ выбирать, иначе СКД сделает все по-своему и в группировку попадут не те поля
Для того чтобы получить результат необходимо создать:
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
В своем примере я просто выведу справочник сотрудники, отсортировав его по табельному номеру (коду)
Результат будет выглядеть следующим образом:
Это достигается, созданием вычисляемого поля и использованием функции языка выражений СКД Вычислить()
- Создаем вычисляемое поле ТабНомерЧисло, с выражением: Вычислить(Сотрудник.Код)
- Сортируем по этому полю
по сути это преобразование строки в число с помощью функции языка выражений СКД Вычислить()
Советую так же посмотреть «Видеоуроки по СКД»(легко ищется в гугле)
При разработке я использую сконвертированную консоль отчетов СКД+.
Так же рекомендую посмотреть //infostart.ru/public/86764/