Пользовательские поля в отчетах СКД

Опубликовал Константин Соболевский (Константин С.) в раздел Программирование - Практика программирования

Дополнение готовых отчетов своими колонками.
В отчета сделанных с помощью "Схемы компоновки данных" из пользовательского режима можно добавлять свои Поля, которые будет выводиться при формировании.
В данных полях позволительно применять арифметические действа.

Давным давно мной был написан отчет "Продажи товаров по отгрузке" //infostart.ru/public/16477/. В данной публикации не будем обсуждать его актуальность и достоинства. Данный отчет возьмется как шаблон для экспериментов, видоизменений. Тем более в комментариях спрашивали, как добавлять Поля.

Открываем "Настройки..." и переходим на закладку "Пользовательские настройки".

 

 

 

2. Добавляем "Новое поле Выражение"

 

Заголовок:

Цена продажи

Как будет отображаться при формировании

Выражение детальных записей:

[Сумма продажи] / Количество

Собственно из чего получились данные

Выражение итоговых записей:

[Сумма продажи] / Количество

Выражение для получения итогов по группировкам

Добавление полей проставляет собой прописывание арифметических действий между Доступными полями, (это позволительно отмеченных зеленым квадратиком). Также особенность, если название такого поля состоит из двух или более слов, его необходимо заключить в квадратные скобки [  ]. Получиться вот так - [Сумма продажи].

  

После сохранения, это поле станет доступно для выбора:

 

 

Вот с помощью несложных манипуляций получаете нужное для себя значение. Данная возможность позволить добавлять нужные поля. В таких вариантах расчета как вам необходимо. Рентабельность, Эффективность и прочее значения будут считаться в вашей логики арифметических расчетов.

 

Итого, необходимо сохранить что вы сделали:

 

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

 

Функций,  используемые при написании полей.

1.    Арифметические « + , - , * , / » с этим понятно, думаю объяснить принцип их действия не надо.

2.    Логические выражения в используются для определения отборов.  « > , < , = , >= , <= , <>, И, ИЛИ, НЕ ». Данные выражения используется с операцией выбора.

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

ВЫБОР
    КОГДА < Операция выбора > ТОГДА <Выражение
>
    ИНАЧЕ <
Выражение
>
КОНЕЦ
Пример
:
ВЫБОР
    КОГДА Количество > 0 и Сумма > 0 ТОГДА «Правильно»
    ИНАЧЕ «Ошибка»
КОНЕЦ

Это расшифровывается так: при условии когда количество больше нуля и сумм больше нуля, будет выводиться текст «Правильно», а если хоть одно из условий не соблюдено выводиться «Ошибка».

4.    Встроенная функция, позволяет произвести определенные преобразования с полями.

ПОДСТРОКА ( «Выражение» , «Начальная позиция» , «Конечная Позиция») – выбирается часть «Выражения», ограниченного рамками «Начальной…» и «Конечной…».
Как это поисходит при значении Номенклатура - «Паста шоколадная» формула Подстрока(Номенклатура,1,5)  выведет значение «Паста»

Для работы с датой используются функции

ГОД(<Дата>), КВАРТАЛ(<Дата>), МЕСЯЦ(<Дата>), ДЕНЬГОДА(<Дата>), ДЕНЬ(<Дата>), НЕДЕЛЯ(<Дата>), ДЕНЬНЕДЕЛИ(<Дата>), ЧАС(<Дата>), МИНУТА(<Дата>), СЕКУНДА(<Дата>)

Будет выводится соответствующий названию функции значение.

НАЧАЛОПЕРИОДА(«Дата», «Период сдвига»), КОНЕЦПЕРИОДА(«Дата», «Период  сдвига»). Для данных функции, значение  Выражения даты на начало или конец заданной даты.

ДОБАВИТЬКДАТЕ («Дата», «Период сдвига», «Величина, на которую требуется увеличить дату») - функция позволяет увеличить или уменьшить дату на определенное значение.

 

РАЗНОСТЬДАТ («Дата1», «Дата2», «Период сдвига»- Функция предназначена для получения разницы между двумя датами.

«Период сдвига» одно из  «Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие». 

 

 5.Агрегатные функции языка запросов используются при группировке результатов подсчете итогов

СУММА ( <> ) арифметическую сумму всех попавших в выборку значений.
СРЕДНЕЕ ( <> ) вычисляет среднее значение всех попавших в выборку
МИНИМУМ ( <> ) вычисляет минимальное значение из всех попавших в выборку значений
МАКСИМУМ ( <> ) вычисляет максимальное значение из всех попавших в выборку значений
КОЛИЧЕСТВО ( <> ) подсчитывает количество значений параметра, попавших в выборку. Данная функция позволяет имеет варианты использования. КОЛИЧЕСТВО(*) - позволяет подсчитать количество строк в результате. КОЛИЧЕСТВО(РАЗЛИЧНЫЕ «Выражение») - позволяет подсчитать количество различных значений указанного поля.

Примеры:

Сумма(Выбор
    Когда Подстрока(Номенклатура, 1, 5) =
"Паста"
       
Тогда Количество *
0.2
   
Иначе Количество *
0.35
Конец)

Получится сумма значений при этом когда в начале наименования номенклатуры присутствует «Паста» в этом случает количество увеличивается на 0.2 если не присутствует увеличивается на 0.35. 

Год([Документ.Дата])

Выведется Год когда документ записан/проведен.

Более сложный пример, без расшифровки.

Выбор
    Когда Квартал([Документ.Дата]) = 1 И Подстрока(Номенклатура, 1, 5) =
"Паста"
       
Тогда Количество *
0.2
   
Иначе Выбор
            Когда Квартал([Документ.Дата]) =
2
               
Тогда Количество *
0.3
           
Иначе Выбор
                    Когда Квартал([Документ.Дата]) =
3
                       
Тогда Количество *
0.4
                   
Иначе Выбор
                            Когда Квартал([Документ.Дата]) =
4
                               
Тогда Количество *
0.5
                       
Конец
                Конец
        Конец
Конец

 

 

ps:

Бухгалтерская Справка для БП - //infostart.ru/public/64188/

Все налоги ФОТ по сотрудникам Для БП 2 - //infostart.ru/public/15836/

Реестр по документу Счет-ФактураВыданный для БП и УПП - //infostart.ru/public/18911/

Отчет по себестоимости и продажам товаров для БП - //infostart.ru/public/16477/

Одновременная печать Торг12 + С-Ф и Акт на услуги + С-Ф для БП - //infostart.ru/public/93943/

Одновременная печать Торг12 + С-Ф и Акт на услуги + С-Ф для УТ 10 - //infostart.ru/public/96636/

См. также

Комментарии
0. Константин Соболевский (Константин С.) 484 07.11.11 20:17 Сейчас в теме
Дополнение готовых отчетов своими колонками.
В отчета сделанных с помощью "Схемы компоновки данных" из пользовательского режима можно добавлять свои Поля, которые будет выводиться при формировании.
В данных полях позволительно применять арифметические действа.


Перейти к публикации

1. Vladimir (Boroda) 90 07.11.11 20:17 Сейчас в теме
Спасибо! Такие небольшие статьи (своего рода "маленькие хитрости") очень даже как нужны, особенно при начальном освоении 8-ки.
2. Сергей Королев (extrim-style) 6 08.11.11 09:13 Сейчас в теме
Совсем не русский? Беда... Использовал гугл-переводчик? Я плакал над текстом. О, ужас!
3. Сергей Королев (extrim-style) 6 08.11.11 09:18 Сейчас в теме
4. Сергей Королев (extrim-style) 6 08.11.11 09:19 Сейчас в теме
Хотя нет, лучше бы гугл-переводчик юзал. Он по-крайней мере не делает грамматических ошибок...
5. Константин Соболевский (Константин С.) 484 08.11.11 10:45 Сейчас в теме
(4) extrim-style, сограшусь орфография и стилистика изложения не мой конек. Статья направлена не 1С:специалисту, а пользователю пытающему упростить себе жизнь. По этому изложение на "бытовом" уровне, минимальнотехничесвом языке.
6. bar_s (bar_s) 08.11.11 12:08 Сейчас в теме
иногда пользовательские поля, ой как выручают.
7. Максим (sh_max) 08.11.11 13:50 Сейчас в теме
Раз публикация называется "Пользовательские поля в отчетах СКД" то вы и про поле выбора упомяните, тоже вещь полезная, может пригодиться. А если-бы добавили ещё и список функций которые можно использовать в полях выражения, то вообще супер была-бы публикация.
Nelfast; bol; +2 Ответить
8. JER MARK (JER_MARK) 09.11.11 17:49 Сейчас в теме
Спасибо автору. Действительно, этот момент нигде не описан (ну или по крайней мере, мне прежде не встречалось). Мне пригодится, часто работаю с СКД.
9. Серазм С (sserazm) 10.11.11 11:30 Сейчас в теме
А какие функции можно использовать в пользовательских полях ?
А то арифметических действий не хватает.
10. Яков Коган (Yashazz) 1987 14.11.11 01:45 Сейчас в теме
Не осознал ценности данной статьи.
У Хрусталёвой гораздо грамотнее написано. Вот если б где найти полное описание синтаксиса и допустимых функций для этого "языка СКД"... Так надоело искать аналоги и в угадайку играть.
Хотя вот есть http://infostart.ru/public/97199/
11. Максим (sh_max) 14.11.11 08:20 Сейчас в теме
(10) ИТС. Статья "Язык выражений системы компоновки данных".
12. Константин Соболевский (Константин С.) 484 14.11.11 11:57 Сейчас в теме
(10) Yashazz, публикация расчитана на пользователя который не открывает конфигуратор, т.е. не программиста. Для бухгатера которому надо чуть добавить информации в готовый отчет, в ней изложенно достаточно. А если он/она захочет большего, тогда в помощь книги, синтакс-помошник, итс и прочее...
13. Сергей Митяев (sm0123) 55 15.11.11 16:54 Сейчас в теме
последний пример можно упростить
ВЫБОР
КОГДА УСЛОВИЕ_1
ТОГДА ВАРИАНТ_1
КОГДА УСЛОВИЕ_2
ТОГДА ВАРИАНТ_2
...
ИНАЧЕ
ВАРИАНТ_ИНАЧЕ
КОНЕЦ
14. Александр Лагунов (kit) 61 17.11.11 01:09 Сейчас в теме
Спасибо автору. Я только начинаю осваивать СКД.
15. Артур Аюханов (artbear) 856 18.11.11 11:37 Сейчас в теме
Если уж описывать пользовательские поля, можно было бы упомянуть о возможности использования этих полей не только как ресурсов, но и как измерений для группировок по ним
Для этого не нужно заполнять итоговое поле, можно оставить его пустым.
В результате у поля будет не зеленый значок, обозначающий ресурс, а обычный.
Подобное поле удобно юзать, например, как период и делать группировку по нужным периодам (день, неделя, месяц и т.п.)
16. 1801 29.11.11 13:43 Сейчас в теме
Что ни говорите, а статья полезна своим содержанием! Делает из пользователя-обезьяны продвинутого пользователя, учит его шевелить мозгами, повышает самооценку и удовлетворение от работы. Лично я угробил полдня на разборы работы пользовательских полей и дальше арифметических действий так и не ушел. Спасибо автору.
Однако, действительно жалко, что русские люди не знают русского языка.
17. Константин Соболевский (Константин С.) 484 30.11.11 17:07 Сейчас в теме
1801 пишет:
Однако, действительно жалко, что русские люди не знают русского языка.

вы так уверены, в моей национальности?
не возникало вопроса, что отсутствует способность к таким знаниям (кому что дано)?
18. Елена Никифорова (Helena_83) 08.12.11 08:58 Сейчас в теме
Очень полезная публикация. Спасибо автору.
19. 1801 09.12.11 17:01 Сейчас в теме
(17) Константин С., Если задел Вас этим, то прошу у Вас прощения!
20. Максим (sh_max) 24.01.12 16:29 Сейчас в теме
На заметку. Может кому пригодиться:
ВЫБОР КОГДА Поле = NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ
будет всегда возвращать 1, а вот этот работает корректно
ВЫБОР КОГДА Поле Есть Null ТОГДА 0 ИНАЧЕ 1 КОНЕЦ
ilya4; Designer1C; +2 Ответить
21. Soul Power (SoulPower) 3 08.02.12 14:22 Сейчас в теме
отличная статья, спасибо.
22. Сергей (lsp71) 27.02.12 12:22 Сейчас в теме
Хорощая статья для юзеров.
А программерам очень рекомендую книгу Хрусталевой Е.Ю. "Разработка сложных отчетов в 1С Предприятии 8. Система компоновки данных". Не ленитесь, там таких "откровений" полкниги, а вторые полкниги - как это все реализуется программно.
SlavaVNL; cleaner_it; bol; +3 Ответить 1
23. Михаил Кушев (ImPenguin) 10 12.03.12 07:59 Сейчас в теме
Спасибо, отличная статья, с помощью нее смог создать несколько пользовательских полей, которые очень помогают в работе! Автор молодец!
24. Zixi (Zixi) 31.08.12 15:37 Сейчас в теме
Очень помогло! Спасибо автору!
25. f f (fnv) 07.09.12 11:53 Сейчас в теме
Интересно, я с пользовательскими работала, но только примитивно, сложение-вычитание, не знала, что можно делать сложные практически запросы именно из пользовательского режима...
26. Артем Бардюг (Йожкин Кот) 1027 26.10.12 10:59 Сейчас в теме
Цена продажи для итоговых полей неправильно написана. Должно быть так
Сумма([Сумма продажи]) / Сумма(Количество)
А лучше так
Выбор когда Сумма(Количество) = 0 Тогда 0 Иначе Сумма([Сумма продажи]) / Сумма(Количество) Конец
RodinMax; +1 Ответить
27. oksevi (oksevi) 31.10.12 10:54 Сейчас в теме
Спасибо.
Подскажите, пожалуйста, возможно ли в пользовательском поле выполнить преобразование текстовой строки в число для выполнения арифметической операции?
Если точнее - номенклатура учитывается в штуках, но в комментарии каждой номенклатуры проставлен объем. Необходимо в пользовательском поле отчета проставить формулу: количество номенклатуры из документа * на объем из комментария к исходной номенклатуры
[Номенклатура.Комментарий] * Количество или Число([Номенклатура.Комментарий]) * Количество -не проходит.
28. Константин Соболевский (Константин С.) 484 31.10.12 17:40 Сейчас в теме
(27) oksevi, увы такой возможности нет.
Но можно, используя в компоновке данных, в Вычисляемых полях используя внешнюю функцию получить нужное значение.
Еще вариант использовать Свойства справочника, т.е. создать к примеру для Номенклатуры свойство Объем с типом число. Вот к нему обращаться.
29. Сергей Видякин (badboychik) 54 20.05.13 10:56 Сейчас в теме
Маленькая деталь - в режиме конструктора поля должны задаваться по ПУТИ, а в пользовательском режиме - по ЗАГОЛОВКУ. Т.е. одно и то же выражение в конструкторе должно задаваться как "ДоляПоСтатье*СтоимостьПродажи", а в пользовательском режиме уже как "[Доля по статье]*[Стоимость продажи]".
У хрусталевой это не описано, найдено методом тыка
andogskiy; OpKc; lx@; +3 Ответить
30. нОлька (нОлька) 30.07.13 10:10 Сейчас в теме
Очень полезная статья. Спасибо автору. !!!!
31. donex (makcyta.89) 28.08.13 15:01 Сейчас в теме
Обращаюсь ко всем есть отчет свод начислений после некоторых настроек он теперь имеет вид в прикрепленном файле. нужно создать пользовательское поле которое будет отображать по каждому подразделению среднею зарплату.
Образно примерно так:
Среднее начисление = ПодразделениеОрганизации.Сумма/ ПодразделениеОрганизации.КоличествоСотрудников
Прикрепленные файлы:
32. donex (makcyta.89) 28.08.13 15:02 Сейчас в теме
Обращаюсь ко всем есть отчет свод начислений после некоторых настроек он теперь имеет вид в прикрепленном файле. нужно создать пользовательское поле которое будет отображать по каждому подразделению среднею зарплату.
Образно примерно так:
Среднее начисление = ПодразделениеОрганизации.Сумма/ ПодразделениеОрганизации.КоличествоСотрудников
Прикрепленные файлы:
33. Борис Нагорнов (b1958) 10 25.09.13 12:09 Сейчас в теме
(32) donex, Удалось ли решить поставленную задачу с использованием пользовательских полей?

34. Константин Соболевский (Константин С.) 484 27.09.13 14:25 Сейчас в теме
35. Александр Шкут (alex_shkut) 36 04.12.13 16:18 Сейчас в теме
Вы забыли указать функцию Формат(Выражение, "ЧДЦ=2"), иногда помогает побороть числа типа 12,1254000000123
vasiliy_b; RodinMax; pirm2; korol-ar; +4 Ответить 1
36. Алекс Одинэсник (Alex1Cnic) 122 09.01.14 11:47 Сейчас в теме
Нашел статью вовремя... Плюсууую
37. IgorV (nana_rge) 28.05.14 08:43 Сейчас в теме
(35)
В УПП у меня не работает, пишет - неверные параметры AVG.
Такой вариант
Окр(Выражение, 2)
можно использовать.
38. IgorV (nana_rge) 28.05.14 09:14 Сейчас в теме
а... ну "неверные параметры AVG" выходило из-за среднего по итогам,
в режиме суммы по итогам просто пустое поле выводит без ошибок...
39. Андрей Вовк (wowkai) 4 21.08.14 14:17 Сейчас в теме
Спасибо! очень пригодилась инфа.
А кто подскажет у пользовательских полях есть возможность использовать функции из общего модуля? Или эта возможность только есть в вычисляемых полях.
40. Константин Юрин (kostyaomsk) 69 01.09.14 17:18 Сейчас в теме
Хорошая статья для практики.
41. Борис Нагорнов (b1958) 10 17.12.14 11:14 Сейчас в теме
(34) Константин С., "Страница не найдена" - интересно, что на ней было?
42. Константин Соболевский (Константин С.) 484 17.12.14 14:20 Сейчас в теме
(41) b1958,
пример как реализовать.
43. 1 1 (blacat09) 26.12.14 00:51 Сейчас в теме
(42) Константин С., подскажите, пожалуйста как сделать выравнивание пользовательской колонки по правой стороне? По умолчанию выравнивание левое.
44. Константин Соболевский (Константин С.) 484 26.12.14 13:01 Сейчас в теме
(43) blacat09, в принце для этого есть "Условное оформление", там можно по играться с положением поля. Только для числа это не работает.
45. Igor Gorbachev (Leits) 1 15.01.15 12:59 Сейчас в теме
а в пользовательских полях можно поймать текущую дату?
46. Константин Соболевский (Константин С.) 484 15.01.15 13:54 Сейчас в теме
ТекущаяДата()
в полях можно использовать теже выражения что в запросе
47. Слава (SlavaVNL) 8 19.02.15 11:43 Сейчас в теме
(22) Респект за отличную идею!
Не могу не поделиться!

Половину дня сидел думал как в СКД представить дату в виде HH:mm:ss, при условии, что часов больше 24. СКД хоть убей ставит следующий день и часы новых суток.
Так, например, 30 часов в вышеозначенном формате выглядит так: 06:00:00. Попытка вычислять и собирать часы минуты секунды как текст ни к чему путному не привела.
И тут:
Хрусталёва "разработка сложных отчетов" страница 138 . Перефразирую: "В пользовательских полях и в выражениях представления можно использовать функции из общего модуля. Для этого они должны быть объявлены как экспортные". ДА! эта фраза должна быть первой строкой в учебниках по СКД!
Stety; Perrojka; Alien_job; +3 Ответить
48. Анатолий Левченко (AnPet) 15.07.15 09:51 Сейчас в теме
Спасибо за полезную статью!
Два дня мучился чтобы посчитать итоги по условию и эта конструкция разрешила проблему:
Сумма(Выбор

А я Сумму() пытался применять внутри конструкции Выбор.
49. Дмитрий Тихонов (tdml) 08.04.16 06:49 Сейчас в теме
Хорошая статья, спасибо автору.
Часто ещё округление необходимо, добавлю пример типа:
Выбор
	Когда [Начальный остаток] + Приход <> 0
		Тогда Выразить(Расход / ([Начальный остаток] + Приход) * 100, "ЧИСЛО(3, 0)")
	Иначе 0
Конец
...Показать Скрыть
50. Гость 17.08.16 12:04 Сейчас в теме
ЗУП 2,5 отчет список сотрудников
В пользовательском поле -> формула ->[Оклад, тарифная ставка]/[Cтавка]

Только берется первая "Оклад, тарифная ставка", которая имеет строковой тип
Ошибка: Отчет не сформирован. Неверные параметры "/".
Как указать в пользовательском поле брать ресурс, если 2 поля с одинаковым названием?
52. Гость 16.11.16 10:33 Сейчас в теме
(50) Гость, Подскажите, нашли ли вы ответ "Как указать в пользовательском поле брать ресурс, если 2 поля с одинаковым названием? "
Такая же проблема