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

14.12.23

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

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

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

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

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

 

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

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

 

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

 

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

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

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

 

 

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

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

 

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

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

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

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

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

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

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

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

 

 

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

 

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

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

 

 

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

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

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

 

Итоги

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

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

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

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

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


P.S.

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

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

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

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

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

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

12000 руб.

02.09.2020    115563    634    389    

684

Infostart PrintWizard

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

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

18000 руб.

06.10.2023    6409    13    3    

35

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    176339    1063    0    

838

Infostart УДиФ: Управление данными и формами

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

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

10000 руб.

10.11.2023    2654    4    1    

26

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    98583    238    97    

292

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23220    15    15    

30

Менеджер конфигураций 1С

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

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

1800 руб.

21.02.2023    6309    4    34    

16

Программное формирование существующих печатных форм

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

Получение списка печатных форм, формирование выбранной печатной формы и сохранение ее в файл.

1 стартмани

17.12.2021    15457    42    RocKeR_13    5    

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

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

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