Использование дополнительных реквизитов и сведений в отчетах

05.04.23

Разработка - Инструментарий разработчика

Формирование отчётов с помощью дополнительных реквизитов и сведений. Дополнительные реквизиты как инструмент настройки отчётов. Тестировалось на платформе 8.3.22.1709, ОС Linux-Mint.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Шаблон обработки для заполнения дополнительных реквизитов и сведений
.epf 8,12Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

Использование дополнительных реквизитов и сведений в отчётах

Коротко о доп. реквизитах

Вместо длинного Дополнительные реквизиты и сведения мы будем использовать просто доп. реквизиты. Но так сделано исключительно для краткости. В данном случае мы имеем в виду оба этих механизма. 

Хотя между ними и есть отличия – причём, в ряде случаев довольно существенные – но поговорим мы об этом чуть позже.

То, что доп. реквизиты можно использовать в конфигурациях, основанных на БСП, знают все. Все знают, как включить подсистему, как заполнять данные и как настраивать отчёты. На это время тратить не будем. 

Вместо этого здесь мы бы хотели показать немного нестандартный сценарий использования доп. реквизитов при работе с отчётами.

Идея механизма состоит в том, чтобы у объекта можно было создать новый реквизит в пользовательском режиме. Без использования расширений и без изменений в конфигурации. То есть доп. реквизит это просто обычный реквизит, такой же, как и все остальные. С некоторыми особенностями, конечно, но всё же. 

Создаём реквизит, и он появляется в документах. Если нужно, заполняем его. Если нужно, показываем в отчётах.

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

Что бывает обычно: отчёт нужен для того, чтобы показать реквизит.
Что предлагаем мы: реквизит нужен для того, чтобы получить отчёт.

Пример

Для начала пример (а после устроим разбор полётов).

Продажи падают. Вообще-то у предприятии дела уже не первый день идут как-то нет очень. Всем, будем откровенны, давно пофигу, но вот собственники нервничают. Они решают, что нужно что-то делать, хотя что именно – непонятно. В порядке эксперимента взяли на работу нового маркетолога. Маркетолог оказался личностью весьма креативной. Маркетолог же. Он предложил рассматривать продажи в контексте знаков зодиака менеджеров. 

Долги ли, коротко ли, но, как и следовало ожидать, программисту прилетела задача: добавить этот самый знак зодиака в отчёт по продажам. Маркетолог на предыдущей работе уже видел 1С, поэтому даже смог сформулировать свой запрос примерно в таких терминах, что это «должна быть группировка верхнего уровня».

Что делать программисту? Это же типовой отчёт. Не убирать же замочек! Конечно, можно подправить запрос с помощью расширений, но это как-то уж совсем через чур… Из пушки по воробьям. Да и маркетолог непонятно, надолго ли с нами. В общем, на скорую руку программист решил создать в отчёте новое пользовательское поле. И вычислять знак там. Осталось правильно написать функцию. Гугл с Яндексом пришли на помощь (в процессе поисков даже оказалось, что на ИС есть похожие отчёты для БП и ЗУПа!) и в результате получилось примерно так:

Функции для СКД

Выбор

                Когда Месяц([Дата рождения]) = 12 И День([Дата рождения]) >= 22 Или Месяц([Дата рождения]) = 1 И День([Дата рождения])

                                Тогда "Козерог"

                Когда Месяц([Дата рождения]) = 11 И День([Дата рождения]) >= 23 Или Месяц([Дата рождения]) = 12 И День([Дата рождения])

                                Тогда "Стрелец"

                Когда Месяц([Дата рождения]) = 10 И День([Дата рождения]) >= 24 Или Месяц([Дата рождения]) = 11 И День([Дата рождения])

                                Тогда "Скорпион"

                Когда Месяц([Дата рождения]) = 9 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 10 И День([Дата рождения])

                                Тогда "Весы"

                Когда Месяц([Дата рождения]) = 8 И День([Дата рождения]) >= 22 Или Месяц([Дата рождения]) = 9 И День([Дата рождения])

                                Тогда "Дева"

                Когда Месяц([Дата рождения]) = 7 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 8 И День([Дата рождения])

                                Тогда "Лев"

                Когда Месяц([Дата рождения]) = 6 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 7 И День([Дата рождения])

                                Тогда "Рак"

                Когда Месяц([Дата рождения]) = 5 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 6 И День([Дата рождения])

                                Тогда "Близнецы"

                Когда Месяц([Дата рождения]) = 4 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 5 И День([Дата рождения])

                                Тогда "Телец"

                Когда Месяц([Дата рождения]) = 3 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 4 И День([Дата рождения])

                                Тогда "Овен"

                Когда Месяц([Дата рождения]) = 2 И День([Дата рождения]) >= 20 Или Месяц([Дата рождения]) = 3 И День([Дата рождения])

                                Тогда "Рыбы"

                Когда Месяц([Дата рождения]) = 1 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 2 И День([Дата рождения])

                                Тогда "Водолей"

                Иначе "-----"

Конец

Взято отсюда: //infostart.ru/1c/articles/70403/

Программист немного подправил логику и ещё учёл, что это поле для типового отчёт «Валовая прибыль» (там нет поля Дата рождения, но есть поле Менеджер). Теперь получилось как-то так:

Выбор
    Когда ГОД([Менеджер.Физическое лицо.Дата рождения]) = 1
        Тогда "Не указано"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 1 + 20
        Тогда "Козерог"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 2 + 19
        Тогда "Водолей"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 3 + 20
        Тогда "Рыбы"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 4 + 20
        Тогда "Овен"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 5 + 21
        Тогда "Телец"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 6 + 21
        Тогда "Близнецы"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 7 + 22
        Тогда "Рак"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 8 + 21
        Тогда "Лев"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 9 + 23
        Тогда "Дева"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 10 + 23
        Тогда "Весы"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 11 + 22
        Тогда "Скорпион"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 12 + 22
        Тогда "Стрелец"
    Когда 31 * МЕСЯЦ([Менеджер.Физическое лицо.Дата рождения]) + ДЕНЬ([Менеджер.Физическое лицо.Дата рождения]) <= 31 * 12 + 31
        Тогда "Козерог"
    Иначе "Не указано"
Конец

В любом случае первое впечатление – много букв (причём, одинаковых). Работает, конечно, но как-то всё громоздко. Неэлегантно. Программист задумался и решил пойти другим путём. Он создал свойство Знак зодиака, общее у справочников ФизЛица и Пользователи и написал меленькую обработку, которая его заполняет. Функция собственно определения знака получилось примерно такая: 

Функция ЗнакЗодиакаПоДате(Дата)
    
    НазванияСтрока  = "Козерог,Водолей,Рыбы,Овен,Телец,Близнецы,Рак,Лев,Дева,Весы,Скорпион,Стрелец,Козерог";
    ДниМесяцаСтрока = "20,     19,     20,  20,  21,   21,      22, 21, 23,  23,  22,      22";

    Названия  = СтрРазделить(НазванияСтрока, ",");
    ДниМесяца = СтрРазделить(ДниМесяцаСтрока, ",");

    МесяцДаты = Месяц(Дата);
    ДеньДаты  = День(Дата);
    
    ДеньГраницыЗнака = Число(ДниМесяца[МесяцДаты - 1]);
    
    Если ДеньДаты <= ДеньГраницыЗнака Тогда
        Название = Названия[МесяцДаты - 1];
    Иначе
        Название = Названия[МесяцДаты];
    КонецЕсли;
    
    Возврат Название;
    
КонецФункции  

Букв теперь гораздо меньше. Это приятно. И никаких потенциальных проблем с доступом к персональным сведениям. А в отчёт – и кстати, кайф в том, что это может быть вообще любой типовой отчёт, в котором есть ФизЛицо или Пользователь – нужно всего лишь добавить новое поле. Благо, в СКД даже есть конструктор формул. И всё!

Плюсы от использования доп. реквизитов

Итак, что полезного мы видим.

1. Очевидный, самый главный плюс: резко упрощаются настройки. Это работает везде, где можно использовать доп. реквизиты: поля, структура, отборы...

2. В отчёт можно вывести данные, которые этим отчётом получить не просто сложно, а невозможно в принципе. Например, нужно добавить в отчёт по продажам (привет от нашего маркетолога) стаж работы менеджера. Если в ERP ещё как-то можно написать отдельный специальный отчёт, то, например, в УТ, где нет кадровых данных, совсем никак.

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

4. Один и тот же доп. реквизит можно использовать в разных отчётах с разными задачами. В типовых отчётах на СКД с точки зрения пользовательских настроек это такой же реквизит, как и все остальные. Если в типовом отчёте есть сам реквизит, то и его «вложенные» (дополнительные в том числе) реквизиты есть тоже.

Выбор: реквизиты или сведения

Сейчас, как и говорили в самом начале, немного о том, чем отличаются дополнительные реквизиты и сведения.

Что именно использовать, одной стороны, дело вкуса, с другой – вопрос принципиальный. 

Перечислим некоторые факты, которые мы знаем про механизм(ы).

Реквизиты хранятся в самом объекте, а именно в табличной части ДополнительныеРеквизиты.
Сведения хранятся в специальном регистре ДополнительныеСведения.

Для того, чтобы записать реквизит, нужно записать сам объект.
При записи сведения нужно сделать запись в регистре, а объект записывать не нужно.

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

Обобщим сказанное.

То, что реквизиты хранятся в самом объекте, конечно, однозначно минус с точки зрения производительности при записи: сравните соответствующие обработчики в регистре и, например, в справочнике Номенклатура.

На реквизиты распространяются ограничения, которые есть у объекта. Например, дата запрета редактирования. Вообще, это может и плюсом и минусом. Зависит от ситуации. Если важно, чтобы реквизит оставался таким, каким он был при проведении документа, это плюс. Если реквизит согласно бизнес логике может изменяться задним числом, это минус. Однако здесь мы говорим о том сценарии, когда реквизиты заполняются независимо от документа. В конце дня, в конце месяца… но не при оформлении документа. В данном случае ограничения объекта будут мешать.

Реквизиты находятся на форме объекта. Если войти во вкус и насоздавать их штук, скажем, 10-20-30, только представьте, во что превратится форма объекта!

Таким образом, мы считаем, что конкретно для нашей задачи гораздо лучше использовать сведения.

Напоследок мнение. Просто личное мнение, ничего больше. Мы считаем, что не следует создавать новые реквизиты программно. Только вручную. Так процесс получается более осознанным. Иначе велик шанс наплодить – например, в случае ошибок в логике – ненужных реквизитов.


Обработка для обновления доп. реквизитов

Важное замечание. 

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

Прикладываем шаблон обработки, в которой реализована следующая упрощённая ситуация: у справочника ФизЛица есть дополнительное сведение Наименование. Обработка просто копирует туда наименование элемента. Опционально можно вставить перед наименованием первую букву этого наименования (это чтобы хоть как-то усложнить задачу!)

Нужно заменить это на вашу логику, а саму обработку добавить в список Внешние отчёты и обработки и настроить расписание.

Модуль обработки можно скопировать отсюда:

 

дополнительные реквизиты сведения отчеты

См. также

SALE! %

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    164049    910    402    

884

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    9604    78    33    

86

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    16110    39    9    

75

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    24653    79    48    

123

SALE! %

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

15000 10000 руб.

10.11.2023    10938    40    27    

66

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

4800 3840 руб.

14.01.2013    189233    1146    0    

916

SALE! %

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 15000 руб.

07.10.2021    17746    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

2220 руб.

21.02.2023    8205    8    38    

24
Оставьте свое сообщение