Способы получения данных из ЗУП

31.12.20

Разработка - Механизмы типовых конфигураций

Рассмотрены варианты получения данных в конфигурации Зарплата и управление персоналом 3.1.

Скачать файл

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

Наименование Бесплатно
Способы получения данных из ЗУП:
.epf 11,73Kb
262
262 Скачать бесплатно

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

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

Способ 1. Использование программного интерфейса.

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

 


Как видно, код очень простой и компактный. Мне это решение не нравится по нескольким причинам. 

  1. Не все функции для получения данных находятся в программном интерфейсе соответствующего общего модуля.  Вендор не обещал обратную совместимость для служебных процедур и функций,  которой как раз и является функция УправлениеШтатнымРасписанием.ДанныеПозицийШтатногоРасписания(..).
  2. К функции выше нет описания. Приходится тратить время на то, чтобы понять что она делает и что надо для ее вызова. 
  3. Таким образом получается несколько коллекций с нужными значениями. Нам требуется их обработать и создать одну коллекцию.

Способ 2. Использование менеджера временных таблиц.

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

Воспользуемся процедурами по созданию временной таблицы в менеджере.

 

 

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

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

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

Но и тут есть крайне досадные недостатки.

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

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

 

3 способ. Использование СКД

Вспомним как строился отчет в статье Пример создания кадрового отчета для ЗУП 3.1.

Мы собрали запрос-пустышку. А что если и тут поступить так же? Соберем пустышку :

 


Получим реально исполняемый запрос процедурой ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц()

 

 

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

Создаем СКД программно, связываем с компоновщиком, компонуем макет. 

 

 

Запрос в макете компоновки заметно похудел.

 

Отлично. Дальше дело вкуса. Можно вывести результат в коллекцию, можно получить выборку.

Конечно, и этот метод не идеален.

  1. Требуются дополнительные усилия по созданию СКД, тем более полностью программно. 
  2. Получение  макета компоновки, как правило, занимает много времени.

Однако , мне такой способ видится наиболее полезным.

Макет компоновки можно закешировать, как, тема не этой статьи, но способы оптимизации есть. Работа со схемой компоновки данных мне видится гораздо более полезной для опыта разработчика , нежели изучение дебрей ЗУП на предмет поиска способов вытащить данные. Здесь мы знаем лишь об одной функции ЗарплатаКадрыОбщиеНаборыДанных.ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц() И из нее, если нам надо, можем распутать клубок с процедурами по созданию временных таблиц. Да, эта функция тоже находится в служебном программном интерфейсе, но если разработчик ее переименует или изменит,  будет проще разобраться в работе одной функции, чем искать, куда переехала СоздатьВТ из УправленияШтатнымРасписанием...

 

К статье прилагается обработка с примерами. Тестировалось на релизе Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.14.369).

Представления Программный интерфейс ЗУП СКД

См. также

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

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    1752    PROSTO-1C    0    

18

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    1758    Vidz    0    

11

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

Очень часто в написании кода требуется обращаться к предопределённым значениям. Если идёт обращение к типовым предопределённым значениям, то проблем не возникает.

24.06.2024    1111    olja-ljaaa    0    

3

Механизмы типовых конфигураций Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Проблемы при создании ресурсной спецификации. Связь настроек спецификации и настроек структуры заказа в ЕРП 2.5.

06.05.2024    1197    It-digit    1    

2

Механизмы типовых конфигураций Ценообразование, анализ цен Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

11.04.2024    1066    tango    5    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 1913 18.01.21 11:02 Сейчас в теме
2. aShumakoff 154 18.01.21 11:38 Сейчас в теме
(1)Спасибо большое... Признаюсь, не знал что такая возможность появилась. Плюс как раз хотел давно попробовать вариант, когда одна СКД готовит данные для другой СКД. Попробую сделать такой пример: 2 СКД и МВТ
3. Nowa 45 20.04.21 16:01 Сейчас в теме
Спасибо! Давно хотел разобраться как получать данные, но не из типовой процедуры.
4. krisver 5 29.03.23 17:19 Сейчас в теме
Оставьте свое сообщение