PrintWizard: поддержка представлений ЗУП в конструкторе

14.12.23

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

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

Небольшое вступительное слово

Наверное, вопрос «что такое представления», будет один из первых при собеседованиях на вакансию "зупера". Утверждать я не буду, но ходят такие слухи. Я как разработчик с ЗУП-ом общаюсь на "вы", поскольку не так много имел опыта работы с ним. Даже сейчас, когда "погружение" в механизм представлений был достаточно долгим и серьезным, я все еще считаю, что ЗУП не очень-то и знаю. Хотя бы потому, что внедрять его - это отдельная кухня. Впрочем, внедрять и разрабатывать все-таки разные задачи. Поэтому была задача разобраться - разобрался. 

Но поскольку я в ЗУП-е все-таки джун, если будут какие-то дополнения к моим пояснениям в статье - пожалуйста в комментарии, обязательно изучу и дополню свои знания.

 

Благодарности

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

 

Что такое представления?

Начиная с редакции 3 в конфигурации “Зарплата и управление персоналом” (сокр. ЗУП) появился полезный механизм выборки данных, называемый (в профессиональной среде) механизм представлений. Данный механизм позволяет выбирать данные из разных регистров в одну таблицу, получать периодические данные с учетом различных дат формирования информации. Но самое главное, что запросы “отвязаны” от структуры конфигурации. Об этом заботится “вендор” (разработчик конфигурации, то есть 1С). Это позволяет пользователям относительно безопасно обновлять конфигурации, а также разработчику дает некоторый простор для манипуляции со структурой хранения без ущерба для обратной совместимости.

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

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

Простой пример - данные штатного расписания. Запрос с использованием представления имеет следующий вид

ВЫБРАТЬ
	ДАТАВРЕМЯ(1, 1, 1) КАК Период,
	ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
	ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
	ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
	ЗНАЧЕНИЕ(Справочник.ТарифныеСетки.ПустаяСсылка) КАК ТарифнаяСетка,
	ЗНАЧЕНИЕ(Справочник.РазрядыКатегорииДолжностей.ПустаяСсылка) КАК РазрядКатегория,
	0 КАК КоличествоСтавок
ПОМЕСТИТЬ Представления_ШтатноеРасписание
ИЗ
	ВТ_ТаблицаФильтра КАК ВТ_ТаблицаФильтра
ГДЕ
	"ТолькоРазрешенные" = "ЛОЖЬ"
	И "ВключатьНачисления" = "ЛОЖЬ"

Однако исходный запрос к базе данных будет иметь практически 415 строк, сформирует 5 временных таблиц и будет обращаться к 4 физическим таблицам (результат в свернутом блоке).

 
 Готовый запрос

По этой причине использование запросов с представлениями - важный и удобный способ получения информации в конфигурации ЗУП.

 

А в чем сложность, бро? Нормально делай - нормально будет

Именно так мне ответил один знакомый, который уже давно в "ЗУП ногой". Ну или если не дословно так, то где-то близко. Однако, для меня был вопрос в следующем: а что, все ЗУПеры знают все представления, все поля в них, запросы пишут на раз-два? Не поверю... 

На первом шаге мне сильно помогли статьи "Консоль запросов для ЗУП 3.х" и "Представления в ЗУП". Первая в том, что я увидел, во что превращаются представления, вторая в том, что я смог найти "точки входа" для изучения, а также некоторые примеры работы с представлениями. За что авторам однозначно низкий поклон.

И вот когда была найдена "точка входа", на первом этапе я переписал себе все представления, которые смог найти по коду.

К слову, небольшая часть из них оказалось достаточно "нишевой" историей и не попали в официальный список поддерживаемых конструктором представлений.

На втором этапе встала задача получения всех требований (например, нужна ли таблица фильтров или нет), какие есть параметры, а также список полей и принципы формирования.

На последнем этапе начались эксперименты с запросами, изучение готовых результатов с целью определения нюансов. Где-то на этом этапе были сформирован первый прототип конструктора представлений. Который потом пережил немало изменений, унификаций и доработок.

 

Конструктор представлений ЗУП

О том, что конструктор печатных форм (PrintWizard) автоматически определяет себя в ЗУПе, добавляет соответствующие кнопки и реализует поддержку, в целом можно особо подробно не рассказывать. Просто знайте, он это умеет, знает, добавляет и всячески пытается упростить вашу задачу. 

Поэтому сразу перейдем к тому, а что из себя представляет конструктор представлений. Внешне форма конструктора выглядит следующим образом:

 

 

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

При активизации строки пакета, правая часть окна будет изменяться в соответствии с типом пакета. Однако все закладки (Настройки, Текст, Результат) будут неизменно на месте.

 

Закладка "Настройки"

Закладка "Настройки" будет наполнена, если активизировать строку пакета представления. На ней будут представлены настройки и поля для конструирования "пустышки" представления.

На представленной форме настройки доступны возможности:

  • указать, какая временная таблица будет являться фильтрующей при подготовке данных. При этом будут доступны как временные таблицы пакетов текущего запроса, так и временные таблицы из ранее созданных строк макета печатной формы (или консоли запросов);
  • установить дополнительные настройки и параметры. На представленной форме это параметры:
    • только разрешенные
    • формировать с периодичность День
  • указать поля, которые необходимо получить при формировании представления

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

Во многих таблицах есть необходимость указывать временную таблицу для отбора данных (см. поле “Имя таблицы фильтра”). Это временная таблица, которую необходимо заполнить по определенным правилам. И только данные из нее будут получены при формировании представления. Данное требование направлено на оптимизацию запросов при обращении к базе данных. Для таблиц фильтров предусмотрена подсказка по правилам ее формирования. А также возможность по нажатию на кнопку “Создать” сгенерировать запросы для данных таблиц.

Закладка "Текст"

Данная закладка будет содержать подготовленный текст запроса активной строки пакета запросов (в левой части).

 

 

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

 

Закладка "Результат"

На данной закладке будет представлен итоговый результат, который будет возвращен в результате работы конструктора.

 

 

Предусмотрена возможность просмотра результата в двух вариантах:

  • представление - это текст запроса, который будет возвращен конструктором в результате его работы
  • готовый запрос - это реальный текст запроса, который будет сгенерирован программой при выполнении данного запроса

Готовый текст запроса можно скопировать и использовать по вашему усмотрению.

 

Итоги

Поддержка механизма представлений в ЗУП дополнительно с конструктором расширяет возможности при разработке печатных форм, а также делает их использование "ближе" к пользователю PrintWizard (будь то программист или аналитик). Позволяет удобным и доступным образом создавать запросы. А также не требует необходимости исследования кода типовой конфигурации, для изучения поддерживаемых представлений, тестов для выяснения состава полей и требований при формировании таблиц представлений. Ведь эту работу проделал за вас я )))))).

Конструктор представлений в PrintWizard поддерживает следующие таблицы:

  • ШтатноеРасписание
  • ТекущаяКадроваяРасстановка
  • ФункциональныеОпцииОрганизаций
  • ФактическиеОтпускаСотрудников
  • ПлановыеНачисленияСотрудников
  • ПлановыеУдержанияСотрудников
  • СтажиСотрудников
  • Периоды
  • КадровыеДанныеСотрудников
  • КадровыеДанныеФизическихЛиц
  • РабочиеМестаСотрудников
  • СотрудникиОрганизации
  • ОтработанноеВремя
  • ДанныеУчетаРабочегоВремениСотрудников
  • ДанныеУчетаВремениИСостоянийСотрудников
  • СрезПоследних
  • СрезПервых
  • ТаблицаРегистра

Дополнительно:

  • при наличии подсистемы АттестацииСотрудников
    • СотрудникиПодлежащиеАттестации
  • при наличии подсистемы ОхранаТруда (ЗУП КОРП)
    • РабочиеМестаОхраныТруда
  • при наличии подсистемы КадровоеПланирование (ЗУП КОРП)
    • ПоказателиКадровогоПлана
  • при наличии подсистемы ПодборПерсонала (ЗУП КОРП)
    • СведенияОКандидатах
    • ЛичныеДанныеКандидатов


P.S.

Но на этом история "заигрываний" с ЗУП не заканчивается. Для некоторых (в основном крупных) компаний есть очень востребованная история, когда на один документ (например Назначение планового начисления) может существовать несколько вариантов печатной формы, в зависимости от какого-либо параметра. При этом, часто данные печатные формы не то чтобы сильно отличаются друг от друга. Как правило имеют одинаковые источники данных и общую структуру.

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

Но это будет где-то в начале 2024. Все таки, хоть я и стараюсь быть волшебником, но выходит это с трудом. Так что, следите за новостями на Инфостарт, подписывайтесь на канал в телеграмм и будьте в курсе.

И конечно же, приходите на вебинар, я постараюсь провести его интересно и динамично. Тем более он бесплатный ))))

Данная статья является анонсом функциональности, которая появится в релизе 2023.3.

См. также

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

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

10000 руб.

02.09.2020    156997    849    399    

855

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

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

8400 руб.

20.08.2024    6589    47    22    

60

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

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

9360 руб.

17.05.2024    22575    66    43    

114

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

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

10000 руб.

10.11.2023    10093    36    19    

61

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

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

22200 руб.

06.10.2023    15054    34    7    

70

SALE! %

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

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

4800 3840 руб.

14.01.2013    187066    1134    0    

907

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

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

15000 руб.

07.10.2021    17115    6    32    

42

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

Программист - это человек, непрерывно принимающий решения. Написание кода не является процессом принятия решения - это всего лишь трансляция ваших желаний. Если вас периодически тяготит написание сотен строк кода ради решения задач, то прошу обратить внимание. Данный продукт позволит существенно сократить время на рутинные операции при разработке. За счет библиотечной реализации сокращается объём кода, а его читаемость повышается. К библиотеке прилагается документация API и шаблоны кода для наиболее популярных методов.

4200 руб.

16.04.2021    15374    6    10    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1744 14.12.23 15:40 Сейчас в теме
(0) Добрый день!
Как потом можно использовать представления из конструктора или запросы из конструктора? Можно ли например использовать в отчетах? Или использовать в расширениях для расширения типовых механизмов?
2. vandalsvq 1587 14.12.23 16:13 Сейчас в теме
(1) в PrintWizard задействованы внутренние механизмы ЗУП. Сам конструктор через внутренние механизмы получает доступные поля, показывает "готовый" запрос и выполняет его при формировании печатных форм (или в консоли запросов конструктора). Поэтому полученные при помощи PrintWizard представления совершенно точно могут быть использованы в отчетах ЗУП. Ну или другим произвольным методом, если вызывать обработку представлений ЗарплатаКадрыОбщиеНаборыДанных.ПолучитьЗапросПоПредставлению перед выполнением запроса.
3. RustIG 1744 14.12.23 18:04 Сейчас в теме
7. Vinzor 107 21.12.23 23:52 Сейчас в теме
(1) Я в этом году начал писать отчеты на представлениях. Очень хорошая практика и прокачка навыков!
Трансформирую в "полноценный" запрос в отчете СКД разными способами.
1. Как написал автор статьи, через ЗарплатаКадрыОбщиеНаборыДанных.ПолучитьЗапросПоПредставлению().
Это если надо потом еще как-то обработать результат выборки перед тем, как отправить его в компоновку

2. В Процедуре ПрикКомпоновкеРезультата()
применяю ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(ЭтотОбъект)

В составлении запроса юзаю 2 обработки: Консоль запросов и Обработку получения типовых "представлений" и "перекрутки" запроса в полноценный.
Веду запрос в консоли запросов, добавляя новые выборки, потом "прогоняю" его во второй обработке и тестирую в консоли.
Вот такие "костыли"
4. Evg-Lylyk 4835 14.12.23 21:12 Сейчас в теме
Отличная работа
it_tungus; vandalsvq; +2 Ответить
5. JinAir7460 15.12.23 21:19 Сейчас в теме
Офигеть как вы на Федора Смолова как похожи
6. vandalsvq 1587 15.12.23 21:51 Сейчас в теме
(5) даже не знал кто это, посмотрел. Мне показалось что нет )))) наверное фотка такая ))))
Оставьте свое сообщение