gifts2017

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

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

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

Давным давно мной был написан отчет "Продажи товаров по отгрузке" http://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:

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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

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


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

1. Vladimir (Boroda) 07.11.11 20:17
Спасибо! Такие небольшие статьи (своего рода "маленькие хитрости") очень даже как нужны, особенно при начальном освоении 8-ки.
2. Сергей Королев (extrim-style) 08.11.11 09:13
Совсем не русский? Беда... Использовал гугл-переводчик? Я плакал над текстом. О, ужас!
3. Сергей Королев (extrim-style) 08.11.11 09:18
4. Сергей Королев (extrim-style) 08.11.11 09:19
Хотя нет, лучше бы гугл-переводчик юзал. Он по-крайней мере не делает грамматических ошибок...
5. Константин Соболевский (Константин С.) 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) 14.11.11 01:45
Не осознал ценности данной статьи.
У Хрусталёвой гораздо грамотнее написано. Вот если б где найти полное описание синтаксиса и допустимых функций для этого "языка СКД"... Так надоело искать аналоги и в угадайку играть.
Хотя вот есть http://infostart.ru/public/97199/
11. Максим (sh_max) 14.11.11 08:20
(10) ИТС. Статья "Язык выражений системы компоновки данных".
12. Константин Соболевский (Константин С.) 14.11.11 11:57
(10) Yashazz, публикация расчитана на пользователя который не открывает конфигуратор, т.е. не программиста. Для бухгатера которому надо чуть добавить информации в готовый отчет, в ней изложенно достаточно. А если он/она захочет большего, тогда в помощь книги, синтакс-помошник, итс и прочее...
13. Сергей Митяев (sm0123) 15.11.11 16:54
последний пример можно упростить
ВЫБОР
КОГДА УСЛОВИЕ_1
ТОГДА ВАРИАНТ_1
КОГДА УСЛОВИЕ_2
ТОГДА ВАРИАНТ_2
...
ИНАЧЕ
ВАРИАНТ_ИНАЧЕ
КОНЕЦ
14. Александр Лагунов (kit) 17.11.11 01:09
Спасибо автору. Я только начинаю осваивать СКД.
15. Артур Аюханов (artbear) 18.11.11 11:37
Если уж описывать пользовательские поля, можно было бы упомянуть о возможности использования этих полей не только как ресурсов, но и как измерений для группировок по ним
Для этого не нужно заполнять итоговое поле, можно оставить его пустым.
В результате у поля будет не зеленый значок, обозначающий ресурс, а обычный.
Подобное поле удобно юзать, например, как период и делать группировку по нужным периодам (день, неделя, месяц и т.п.)
16. 1801 29.11.11 13:43
Что ни говорите, а статья полезна своим содержанием! Делает из пользователя-обезьяны продвинутого пользователя, учит его шевелить мозгами, повышает самооценку и удовлетворение от работы. Лично я угробил полдня на разборы работы пользовательских полей и дальше арифметических действий так и не ушел. Спасибо автору.
Однако, действительно жалко, что русские люди не знают русского языка.
17. Константин Соболевский (Константин С.) 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) 08.02.12 14:22
отличная статья, спасибо.
22. Сергей (lsp71) 27.02.12 12:22
Хорощая статья для юзеров.
А программерам очень рекомендую книгу Хрусталевой Е.Ю. "Разработка сложных отчетов в 1С Предприятии 8. Система компоновки данных". Не ленитесь, там таких "откровений" полкниги, а вторые полкниги - как это все реализуется программно.
SlavaVNL; cleaner_it; bol; +3 Ответить 1
23. Михаил Кушев (ImPenguin) 12.03.12 07:59
Спасибо, отличная статья, с помощью нее смог создать несколько пользовательских полей, которые очень помогают в работе! Автор молодец!
24. Zixi (Zixi) 31.08.12 15:37
Очень помогло! Спасибо автору!
25. f f (fnv) 07.09.12 11:53
Интересно, я с пользовательскими работала, но только примитивно, сложение-вычитание, не знала, что можно делать сложные практически запросы именно из пользовательского режима...
26. Артем Бардюг (Йожкин Кот) 26.10.12 10:59
Цена продажи для итоговых полей неправильно написана. Должно быть так
Сумма([Сумма продажи]) / Сумма(Количество)
А лучше так
Выбор когда Сумма(Количество) = 0 Тогда 0 Иначе Сумма([Сумма продажи]) / Сумма(Количество) Конец
RodinMax; +1 Ответить
27. oksevi (oksevi) 31.10.12 10:54
Спасибо.
Подскажите, пожалуйста, возможно ли в пользовательском поле выполнить преобразование текстовой строки в число для выполнения арифметической операции?
Если точнее - номенклатура учитывается в штуках, но в комментарии каждой номенклатуры проставлен объем. Необходимо в пользовательском поле отчета проставить формулу: количество номенклатуры из документа * на объем из комментария к исходной номенклатуры
[Номенклатура.Комментарий] * Количество или Число([Номенклатура.Комментарий]) * Количество -не проходит.
28. Константин Соболевский (Константин С.) 31.10.12 17:40
(27) oksevi, увы такой возможности нет.
Но можно, используя в компоновке данных, в Вычисляемых полях используя внешнюю функцию получить нужное значение.
Еще вариант использовать Свойства справочника, т.е. создать к примеру для Номенклатуры свойство Объем с типом число. Вот к нему обращаться.
29. Сергей Видякин (badboychik) 20.05.13 10:56
Маленькая деталь - в режиме конструктора поля должны задаваться по ПУТИ, а в пользовательском режиме - по ЗАГОЛОВКУ. Т.е. одно и то же выражение в конструкторе должно задаваться как "ДоляПоСтатье*СтоимостьПродажи", а в пользовательском режиме уже как "[Доля по статье]*[Стоимость продажи]".
У хрусталевой это не описано, найдено методом тыка
OpKc; lx@; +2 Ответить
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) 25.09.13 12:09
(32) donex, Удалось ли решить поставленную задачу с использованием пользовательских полей?

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