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

Программирование - Практика программирования

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

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

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

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

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

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

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

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

184

См. также

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


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

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

вы так уверены, в моей национальности?
не возникало вопроса, что отсутствует способность к таким знаниям (кому что дано)?
19. 1801 09.12.11 17:01 Сейчас в теме
(17) Если задел Вас этим, то прошу у Вас прощения!
18. Helena_83 08.12.11 08:58 Сейчас в теме
Очень полезная публикация. Спасибо автору.
20. sh_max 24.01.12 16:29 Сейчас в теме
На заметку. Может кому пригодиться:
ВЫБОР КОГДА Поле = NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ
будет всегда возвращать 1, а вот этот работает корректно
ВЫБОР КОГДА Поле Есть Null ТОГДА 0 ИНАЧЕ 1 КОНЕЦ
khakasia.ru; ilya4; Designer1C; +3 Ответить
21. SoulPower 4 08.02.12 14:22 Сейчас в теме
отличная статья, спасибо.
22. lsp71 27.02.12 12:22 Сейчас в теме
Хорощая статья для юзеров.
А программерам очень рекомендую книгу Хрусталевой Е.Ю. "Разработка сложных отчетов в 1С Предприятии 8. Система компоновки данных". Не ленитесь, там таких "откровений" полкниги, а вторые полкниги - как это все реализуется программно.
SlavaVNL; cleaner_it; bol; +3 Ответить
47. SlavaVNL 8 19.02.15 11:43 Сейчас в теме
(22) Респект за отличную идею!
Не могу не поделиться!

Половину дня сидел думал как в СКД представить дату в виде HH:mm:ss, при условии, что часов больше 24. СКД хоть убей ставит следующий день и часы новых суток.
Так, например, 30 часов в вышеозначенном формате выглядит так: 06:00:00. Попытка вычислять и собирать часы минуты секунды как текст ни к чему путному не привела.
И тут:
Хрусталёва "разработка сложных отчетов" страница 138 . Перефразирую: "В пользовательских полях и в выражениях представления можно использовать функции из общего модуля. Для этого они должны быть объявлены как экспортные". ДА! эта фраза должна быть первой строкой в учебниках по СКД!
odin-7610; getnight; Stety; Perrojka; Alien_job; +5 Ответить
23. ImPenguin 23 12.03.12 07:59 Сейчас в теме
Спасибо, отличная статья, с помощью нее смог создать несколько пользовательских полей, которые очень помогают в работе! Автор молодец!
24. Zixi 31.08.12 15:37 Сейчас в теме
Очень помогло! Спасибо автору!
25. fnv 07.09.12 11:53 Сейчас в теме
Интересно, я с пользовательскими работала, но только примитивно, сложение-вычитание, не знала, что можно делать сложные практически запросы именно из пользовательского режима...
26. Йожкин Кот 1053 26.10.12 10:59 Сейчас в теме
Цена продажи для итоговых полей неправильно написана. Должно быть так
Сумма([Сумма продажи]) / Сумма(Количество)
А лучше так
Выбор когда Сумма(Количество) = 0 Тогда 0 Иначе Сумма([Сумма продажи]) / Сумма(Количество) Конец
user811769; RodinMax; +2 Ответить
27. oksevi 31.10.12 10:54 Сейчас в теме
Спасибо.
Подскажите, пожалуйста, возможно ли в пользовательском поле выполнить преобразование текстовой строки в число для выполнения арифметической операции?
Если точнее - номенклатура учитывается в штуках, но в комментарии каждой номенклатуры проставлен объем. Необходимо в пользовательском поле отчета проставить формулу: количество номенклатуры из документа * на объем из комментария к исходной номенклатуры
[Номенклатура.Комментарий] * Количество или Число([Номенклатура.Комментарий]) * Количество -не проходит.
28. Константин С. 542 31.10.12 17:40 Сейчас в теме
(27) oksevi, увы такой возможности нет.
Но можно, используя в компоновке данных, в Вычисляемых полях используя внешнюю функцию получить нужное значение.
Еще вариант использовать Свойства справочника, т.е. создать к примеру для Номенклатуры свойство Объем с типом число. Вот к нему обращаться.
29. badboychik 60 20.05.13 10:56 Сейчас в теме
Маленькая деталь - в режиме конструктора поля должны задаваться по ПУТИ, а в пользовательском режиме - по ЗАГОЛОВКУ. Т.е. одно и то же выражение в конструкторе должно задаваться как "ДоляПоСтатье*СтоимостьПродажи", а в пользовательском режиме уже как "[Доля по статье]*[Стоимость продажи]".
У хрусталевой это не описано, найдено методом тыка
magnetto72; andogskiy; OpKc; lx@; +4 Ответить
30. нОлька 30.07.13 10:10 Сейчас в теме
Очень полезная статья. Спасибо автору. !!!!
31. makcyta.89 28.08.13 15:01 Сейчас в теме
Обращаюсь ко всем есть отчет свод начислений после некоторых настроек он теперь имеет вид в прикрепленном файле. нужно создать пользовательское поле которое будет отображать по каждому подразделению среднею зарплату.
Образно примерно так:
Среднее начисление = ПодразделениеОрганизации.Сумма/ ПодразделениеОрганизации.КоличествоСотрудников
Прикрепленные файлы:
32. makcyta.89 28.08.13 15:02 Сейчас в теме
Обращаюсь ко всем есть отчет свод начислений после некоторых настроек он теперь имеет вид в прикрепленном файле. нужно создать пользовательское поле которое будет отображать по каждому подразделению среднею зарплату.
Образно примерно так:
Среднее начисление = ПодразделениеОрганизации.Сумма/ ПодразделениеОрганизации.КоличествоСотрудников
Прикрепленные файлы:
33. b1958 11 25.09.13 12:09 Сейчас в теме
(32) donex, Удалось ли решить поставленную задачу с использованием пользовательских полей?

34. Константин С. 542 27.09.13 14:25 Сейчас в теме
41. b1958 11 17.12.14 11:14 Сейчас в теме
(34) "Страница не найдена" - интересно, что на ней было?
42. Константин С. 542 17.12.14 14:20 Сейчас в теме
(41) b1958,
пример как реализовать.
43. blacat09 26.12.14 00:51 Сейчас в теме
(42) подскажите, пожалуйста как сделать выравнивание пользовательской колонки по правой стороне? По умолчанию выравнивание левое.
44. Константин С. 542 26.12.14 13:01 Сейчас в теме
(43) blacat09, в принце для этого есть "Условное оформление", там можно по играться с положением поля. Только для числа это не работает.
35. alex_shkut 40 04.12.13 16:18 Сейчас в теме
Вы забыли указать функцию Формат(Выражение, "ЧДЦ=2"), иногда помогает побороть числа типа 12,1254000000123
vasiliy_b; RodinMax; pirm2; korol-ar; +4 Ответить
37. nana_rge 28.05.14 08:43 Сейчас в теме
(35)
В УПП у меня не работает, пишет - неверные параметры AVG.
Такой вариант
Окр(Выражение, 2)
можно использовать.
36. Alex1Cnic 124 09.01.14 11:47 Сейчас в теме
Нашел статью вовремя... Плюсууую
38. nana_rge 28.05.14 09:14 Сейчас в теме
а... ну "неверные параметры AVG" выходило из-за среднего по итогам,
в режиме суммы по итогам просто пустое поле выводит без ошибок...
39. wowkai 4 21.08.14 14:17 Сейчас в теме
Спасибо! очень пригодилась инфа.
А кто подскажет у пользовательских полях есть возможность использовать функции из общего модуля? Или эта возможность только есть в вычисляемых полях.
40. jobkostya1c8 01.09.14 17:18 Сейчас в теме
Хорошая статья для практики.
45. Leits 2 15.01.15 12:59 Сейчас в теме
а в пользовательских полях можно поймать текущую дату?
57. Johney20 18.05.18 15:18 Сейчас в теме
46. Константин С. 542 15.01.15 13:54 Сейчас в теме
ТекущаяДата()
в полях можно использовать теже выражения что в запросе
58. Johney20 18.05.18 15:20 Сейчас в теме
(46) может, я что-то не так делаю, но у меня просто "ТекущаяДата()" не работает(
59. Константин С. 542 18.05.18 16:48 Сейчас в теме
(58) чуть ниже посмотрите п.55 и 56, там описанно
48. AnPet 15.07.15 09:51 Сейчас в теме
Спасибо за полезную статью!
Два дня мучился чтобы посчитать итоги по условию и эта конструкция разрешила проблему:
Сумма(Выбор

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

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

Как бы в формулу пользовательского поля втиснуть текущую дату или параметр Период? Пробовала через общие модули - ошибка формулы.
56. echo77 906 16.02.18 10:32 Сейчас в теме
(54) Можно сделать вот так:
К параметрам обращаться нужно через слово Параметры, затем точка и как ты видишь название параметра в режиме предприятие. Если название параметра состоит из нескольких слов - то его нужно взять в квадратные скобки.
Вот еще нормальная статья https://infostart.ru/public/267055/
Прикрепленные файлы:
OksDallas; +1 Ответить
55. Константин С. 542 16.02.18 09:58 Сейчас в теме
используйте &
Прикрепленные файлы:
OksDallas; +1 Ответить
60. Volfy 127 23.05.18 11:08 Сейчас в теме
У меня в таблице была подобная ошибка из за незаполненного одного поля в документе, по итогу данные есть но группировку сделать таблица не могла и обработчики Insull не срабатывали.
61. ya1 14.08.18 23:00 Сейчас в теме
Как в пользовательском поле указать выражение на выбор первого дата платежа
62. ya1 14.08.18 23:02 Сейчас в теме
во вложении пример в отчете
Прикрепленные файлы:
63. Константин С. 542 15.08.18 10:24 Сейчас в теме
(62) Не уверен что это можно решить пользовательским полями.
Если на вскидку такое или в запросе вычислять или попробовать СКД - Ресурс
Оставьте свое сообщение