Содержание:
-
Проблематика
-
Расширенная консоль запросов для ЗУП
-
Исполняемые представления
-
Конструктор запросов
-
Генерация кода
-
Список доступных исполняемых представлений
-
Примеры запросов
-
Добавление собственных исполняемых представлений
-
Ссылка на репозиторий
- Ограничения
Конфигурация 1С:Зарплата и управление персоналом (ЗУП) отличается от большинства других типовых решений платформы — прежде всего тем, что активно использует программный интерфейс (ПИ) для получения и подготовки данных. Вместо привычной работы с регистрами и справочниками, разработчики вынуждены обращаться к методам, создающим временные таблицы:
-
СоздатьВТКадровыеДанныеСотрудников
-
СоздатьВТРабочиеМестаСотрудников
-
СоздатьВТДанныеУчетаВремениИСостоянийСотрудников т.п.
Разрыв между моделью и реализацией
Одна из сильных сторон платформы 1С — возможность строить запросы на основе метаданных, не вникая в технические детали реализации. Но ЗУП отходит от этой концепции. Здесь аналитики работают с понятиями вроде «сотрудник», «должность», «начисление», а разработчики — с методами, параметрами и временными таблицами, не имеющими аналогов в конфигурации.
В результате:
-
Стандартная консоль запросов становится не позволяет получать данные, так, как это задумано в типовой;
-
Аналитики ограничены в возможностях самостоятельного анализа;
-
Разработчики вынуждены разбираться с недокументированным API, что увеличивает порог входа и затраты на поддержку.
Простой пример: получить актуальную должность сотрудника
Даже казалось бы тривиальная задача — получить текущую должность сотрудника — не так проста.
На первый взгляд, запрос к виртуальной таблице РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних
должен решить проблему. Но на практике он может вернуть некорректный результат, например при наличии возвратных событий.
Пример посложнее: расшифровка базы начислений
Аналогично, в старых версиях конфигурации можно было использовать РегистрРасчета.Начисления.База
как виртуальную таблицу. Сейчас для получения базы начисления требуется цепочка вызовов, где каждый метод подготавливает временные таблицы, фильтры и агрегаты. Аналитику без доступа к коду решить такую задачу невозможно. А разработчику потребуется время на изучение механизма и отладку.
QueryConsole1C — это расширение для платформы 1С:Предприятие, включающее усовершенствованную консоль запросов с поддержкой расширенной семантики языка запросов. Ключевая особенность — поддержка нового типа источников данных: ИсполняемыеПредставления, которые можно рассматривать как аналог виртуальных таблиц, адаптированный под архитектуру ЗУП.
Что такое исполняемые представления?
Исполняемые представления позволяют напрямую использовать методы программного интерфейса (ПИ) конфигурации ЗУП внутри пакетов запросов. Эти методы формируют временные таблицы, содержащие актуальные данные, рассчитанные по правилам типовой бизнес-логики. Консоль автоматически вызывает нужный метод, подставляет параметры и делает результат доступным для SQL-запросов.
Зачем это нужно?
В типовой конфигурации ЗУП доступ к ключевым данным (начислениям, кадровой истории, рабочим местам, базам и т.п.) осуществляется через вызовы программного интерфейса. Без использования ПИ получение корректных данных в запросе — нетривиальная задача, требующая глубокого понимания внутренней структуры и алгоритмов конфигурации. При этом стандартная консоль запросов не позволяет интегрировать вызов ПИ в текст запроса, что делает многие сценарии анализа и диагностики практически недоступными.
QueryConsole1C устраняет это ограничение.
Для кого и для чего
Инструмент ориентирован на разработчиков, аналитиков и консультантов, которым необходимо:
-
Выполнять сложные запросы к данным ЗУП с учетом встроенной бизнес-логики;
-
Интерактивно анализировать содержимое временных таблиц, формируемых методами ПИ;
-
Генерировать код на встроенном языке 1С, где исполняемые представления автоматически преобразуются в вызовы ПИ;
-
Упрощать построение запросов через визуальный конструктор, поддерживающий расширения языка и работу с параметрами.
Исполняемые представления — это расширение концепции виртуальных таблиц платформы 1С, адаптированное под архитектуру конфигурации ЗУП. Они позволяют интегрировать вызовы программного интерфейса (ПИ) прямо в тело SQL-запроса, делая доступ к сложной логике получения данных максимально прозрачным и удобным.
Как это работает
При выполнении запроса, содержащего ссылку на исполняемое представление, консоль:
-
Определяет, какие параметры и фильтры указаны;
-
Выполняет код на встроенном языке 1С, который вызывает нужный метод ПИ;
-
Получает из него временную таблицу;
-
Подставляет эту таблицу как источник данных в SQL-запрос.
В итоге — запрос работает с результатом вызова метода ПИ так же, как если бы это была обычная временная таблица или виртуальная таблица платформы.
Пример использования
Для примера рассмотрим запрос получения данных учета времени по списку сотрудников. Источником данных в нём выступает исполняемое представление ДанныеУчетаВремениСотрудников
. Запрос включает описание временной таблицы фильтра и несколько именованных параметров:
ВЫБРАТЬ
ДанныеУчетаВремениСотрудников.Сотрудник КАК Сотрудник,
ДанныеУчетаВремениСотрудников.Дата КАК Дата,
ДанныеУчетаВремениСотрудников.ВидУчетаВремени КАК ВидУчетаВремени,
ДанныеУчетаВремениСотрудников.Дни КАК Дни,
ДанныеУчетаВремениСотрудников.Часы КАК Часы,
ДанныеУчетаВремениСотрудников.Смена КАК Смена,
ДанныеУчетаВремениСотрудников.НормаЧасов КАК НормаЧасов
ИЗ
ИсполняемоеПредставление.ДанныеУчетаВремениСотрудников(
(Сотрудник, ДатаНачала, ДатаОкончания) В
(ВЫБРАТЬ
Сотрудники.Ссылка КАК Ссылка,
&ДатаНачала КАК ДатаНачала,
&ДатаОкончания КАК ДатаОкончания
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
Сотрудники.Ссылка В (&СписокСотрудников)),
ДатаНачала = &ДатаНачала,
ДатаОкончания = &ДатаОкончания,
ДатаАктуальности = &ДатаНачала) КАК ДанныеУчетаВремениСотрудников
Синтаксис и параметры
ОписаниеВТФильтр
Первым (если поддерживается) идёт параметр-фильтр — временная таблица, содержащая список объектов, по которым нужно получить данные. Синтаксис такой же, как у подзапросов ВТ
в языке запросов:
(Поле1, Поле2) В (ВЫБРАТЬ ... ИЗ ... ГДЕ ...)
Именованные параметры
После фильтра указываются обычные именованные параметры, передаваемые в метод ПИ:
ИмяПараметра = Значение
Эти параметры управляют детализацией, флагами расчёта и другими аспектами поведения представления. Порядок указания не имеет значения.
Гибкость и совместимость
Исполняемые представления не накладывают ограничений на синтаксис запроса. Они поддерживают все типовые операции: соединения, фильтрацию, группировку, сортировку, вложенные подзапросы и т.д. Это делает их полноценными источниками данных в любом сценарии, где раньше приходилось вручную повторять логику ЗУП.
В состав QueryConsole1C входит конструктор запросов, предназначенный для упрощения создания запросов, в том числе с использованием исполняемых представлений. Это особенно важно для аналитиков и разработчиков, которым важно получить данные из ЗУП, не погружаясь в детали реализации программного интерфейса.
Основные возможности конструктора
-
Поддержка источников данных типа ИсполняемоеПредставление
, которые можно выбрать из списка так же, как регистры или справочники;
-
Редактирование параметров представления (в том числе фильтров с подзапросами) через пользовательский интерфейс;
Визуально конструктор запросов похож на конструктор запросов для управляемого приложения, входящий в состав платформы. Основные отличия это доступный список исполняемых представлений,
и возможность редактировать параметры исполняемых представлений через специальную форму.
Для удобства все исполняемые представления сгруппированы по подсистемам.

После выбора исполняемого представления откроется редактор параметров:

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

Кроме исполнения запросов, консоль также предоставляет возможности по генерации кода на основе запросов.

Можно сгенерировать код на встроенном языке, получающий ровно те же данные, что и запрос, на основе которого выполняется генерация. Обращения к исполняемым представлениям при этом будут автоматически заменены на вызовы соответствующих методов программного интерфейса.
Также можно сгенерировать код запроса-заглушки для отчета, который корректно обрабатывается механизмом представлений типового ЗУП (подробнее об этом: //infostart.ru/1c/articles/841337/).
Пример: генерация кода для получения среза последних.
Текст запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
КадроваяИсторияСотрудниковСрезПоследних.КоличествоСтавок КАК КоличествоСтавок
ПОМЕСТИТЬ ВТКадроаяИсторияСрез
ИЗ
ИсполняемоеПредставление.РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(
(Сотрудник, Период) В
(ВЫБРАТЬ
Сотрудники.Ссылка КАК Сотрудник,
&Период КАК Период
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
Сотрудники.Ссылка В (&СписокСотрудников))
) КАК КадроваяИсторияСотрудниковСрезПоследних
ГДЕ
КадроваяИсторияСотрудниковСрезПоследних.Подразделение = &Подразделение
ИНДЕКСИРОВАТЬ ПО
Сотрудник,
ДолжностьПоШтатномуРасписанию
Сгенерированный код на строенном языке:
Функция ПолучитьДанные(СписокСотрудников, Период, Подразделение)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
Запрос.УстановитьПараметр("Период", Период);
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Ссылка КАК Сотрудник,
| &Период КАК Период
|ПОМЕСТИТЬ ВТФильтрКадроваяИсторияСотрудниковСрезПоследних
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В(&СписокСотрудников)";
Запрос.Выполнить();
Измерения = Новый Массив();
СоответствиеИзмерений = Новый Соответствие();
СоответствиеИзмерений.Вставить("Период", "Период");
Измерения.Добавить("Сотрудник");
СоответствиеИзмерений.Вставить("Сотрудник", "Сотрудник");
ОписаниеВТФильтр = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистраПоВременнойТаблице(
"ВТФильтрКадроваяИсторияСотрудниковСрезПоследних",
Измерения);
ОписаниеВТФильтр.СоответствиеИзмеренийРегистраИзмерениямФильтра = СоответствиеИзмерений;
ПараметрыПостроения = ЗарплатаКадрыПериодическиеРегистры.ПараметрыПостроенияДляСоздатьВТИмяРегистраСрез();
ПараметрыПостроения.ИндексироватьПо = Новый Массив;
ПараметрыПостроения.ИндексироватьПо.Добавить("Сотрудник");
ПараметрыПостроения.ИндексироватьПо.Добавить("ДолжностьПоШтатномуРасписанию");
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(ПараметрыПостроения.ОтборыПрименяемыеКСрезу, "Подразделение", "=", Подразделение);
ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраСрезПоследних(
"КадроваяИсторияСотрудников",
Запрос.МенеджерВременныхТаблиц,
Истина,
ОписаниеВТФильтр,
ПараметрыПостроения,
"ВТКадроаяИсторияСрез");
КонецФункции
Обратите внимание, что на основе текста запроса автоматически заполнились такие параметры построения, как ИндексироватьПо
и ОтборыПрименяемыеКСрезу
, что положительно влияет на производительность.
Также, поскольку в исходном запросе использована инструкция РАЗРЕШЕННЫЕ
, параметр ТолькоРазрешенные
метода СоздатьВТИмяРегистраСрезПоследних
установлен в значение Истина
.
Также мы можем сгенерировать код запроса-заглушки для отчета, созданного с помощью СКД, который при выполнении будет корректно обработан типовым механизмом представлений ЗУП:
ВЫБРАТЬ
Сотрудники.Ссылка КАК Сотрудник,
&Период КАК Период
ПОМЕСТИТЬ ВТФильтрКадроваяИсторияСотрудниковСрезПоследних
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
Сотрудники.Ссылка В(&СписокСотрудников)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПУСТАЯССЫЛКА) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПУСТАЯССЫЛКА) КАК Подразделение,
ЗНАЧЕНИЕ(Справочник.ШтатноеРасписание.ПУСТАЯССЫЛКА) КАК ДолжностьПоШтатномуРасписанию,
0 КАК КоличествоСтавок
ПОМЕСТИТЬ Представления_СрезПоследних_КадроваяИсторияСотрудников
ИЗ
ВТФильтрКадроваяИсторияСотрудниковСрезПоследних КАК ВТФильтрКадроваяИсторияСотрудниковСрезПоследних
ГДЕ
"ТолькоРазрешенные" = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
КадроваяИсторияСотрудниковСрезПоследних.КоличествоСтавок КАК КоличествоСтавок
ПОМЕСТИТЬ ВТКадроаяИсторияСрез
ИЗ
Представления_СрезПоследних_КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудниковСрезПоследних
ГДЕ
КадроваяИсторияСотрудниковСрезПоследних.Подразделение = &Подразделение
ИНДЕКСИРОВАТЬ ПО
Сотрудник,
ДолжностьПоШтатномуРасписанию
Пример: генерация кода для получения рабочего времени и кадровых данных для сотрудников работающих в организации в заданном периоде.
Текст запроса:
ВЫБРАТЬ
СотрудникиОрганизации.Сотрудник КАК Сотрудник,
СотрудникиОрганизации.ТабельныйНомер КАК ТабельныйНомер,
СотрудникиОрганизации.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
СотрудникиОрганизации.КоличествоСтавок КАК КоличествоСтавок
ПОМЕСТИТЬ ВТСотрудники
ИЗ
ИсполняемоеПредставление.СотрудникиОрганизации(
Организация = &Организация,
НачалоПериода = &ДатаНачала,
РаботникиПоТрудовымДоговорам = ИСТИНА,
ПодработкиРаботниковПоТрудовымДоговорам = ЛОЖЬ,
РаботникиПоДоговорамГПХ = ЛОЖЬ) КАК СотрудникиОрганизации
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Сотрудники.Сотрудник КАК Сотрудник,
Сотрудники.ТабельныйНомер КАК ТабельныйНомер,
Сотрудники.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
Сотрудники.КоличествоСтавок КАК КоличествоСтавок,
ДанныеУчетаВремениСотрудников.ВидУчетаВремени КАК ВидУчетаВремени,
СУММА(ДанныеУчетаВремениСотрудников.Дни) КАК Дни,
СУММА(ДанныеУчетаВремениСотрудников.Часы) КАК Часы
ИЗ
ИсполняемоеПредставление.ДанныеУчетаВремениСотрудников(
(Сотрудник, ДатаНачала, ДатаОкончания) В
(ВЫБРАТЬ
ВТСотрудники.Сотрудник КАК Сотрудник,
&ДатаНачала КАК ДатаНачала,
&ДатаОкончания КАК ДатаОкончания
ИЗ
ВТСотрудники КАК ВТСотрудники),
ДатаНачала = &ДатаНачала,
ДатаОкончания = &ДатаОкончания,
ДатаАктуальности = &ДатаНачала) КАК ДанныеУчетаВремениСотрудников
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСотрудники КАК Сотрудники
ПО ДанныеУчетаВремениСотрудников.Сотрудник = Сотрудники.Сотрудник
СГРУППИРОВАТЬ ПО
Сотрудники.Сотрудник,
Сотрудники.ТабельныйНомер,
Сотрудники.ДолжностьПоШтатномуРасписанию,
Сотрудники.КоличествоСтавок,
ДанныеУчетаВремениСотрудников.ВидУчетаВремени
Сгенерированный код:
Функция ПолучитьДанные(Организация, ДатаНачала, ДатаОкончания)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
ПараметрыПолученияДанных = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоВременнойТаблице();
ПараметрыПолученияДанных.ИмяВТФизическиеЛица = Неопределено;
ПараметрыПолученияДанных.Организация = Организация;
ПараметрыПолученияДанных.НачалоПериода = ДатаНачала;
ПараметрыПолученияДанных.РаботникиПоТрудовымДоговорам = Истина;
ПараметрыПолученияДанных.ПодработкиРаботниковПоТрудовымДоговорам = Ложь;
ПараметрыПолученияДанных.РаботникиПоДоговорамГПХ = Ложь;
ПараметрыПолученияДанных.КадровыеДанные = Новый Массив();
ПараметрыПолученияДанных.КадровыеДанные.Добавить("КОЛИЧЕСТВОСТАВОК");
ПараметрыПолученияДанных.КадровыеДанные.Добавить("ДОЛЖНОСТЬПОШТАТНОМУРАСПИСАНИЮ");
ПараметрыПолученияДанных.КадровыеДанные.Добавить("ТАБЕЛЬНЫЙНОМЕР");
ПараметрыПолученияДанных.КадровыеДанные.Добавить("СОТРУДНИК");
КадровыйУчет.СоздатьВТСотрудникиОрганизации(
Запрос.МенеджерВременныхТаблиц,
Ложь,
ПараметрыПолученияДанных,
"ВТСотрудники");
Запрос.Текст =
"ВЫБРАТЬ
| ВТСотрудники.Сотрудник КАК Сотрудник,
| &ДатаНачала КАК ДатаНачала,
| &ДатаОкончания КАК ДатаОкончания
|ПОМЕСТИТЬ ВТФильтрДанныеУчетаВремениСотрудников
|ИЗ
| ВТСотрудники КАК ВТСотрудники";
Запрос.Выполнить();
ПараметрыПолученияДанных = УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников();
ПараметрыПолученияДанных.ИмяВТСотрудники = "ВТФильтрДанныеУчетаВремениСотрудников";
ПараметрыПолученияДанных.ИмяВТРезультат = "ВТДанныеУчетаВремениСотрудников";
ПараметрыПолученияДанных.РассчитыватьПлановоеВремя = Ложь;
ПараметрыПолученияДанных.ДатаНачала = ДатаНачала;
ПараметрыПолученияДанных.МесяцДатаНачала = НачалоМесяца(ПараметрыПолученияДанных.ДатаНачала);
ПараметрыПолученияДанных.ДатаОкончания = ДатаОкончания;
ПараметрыПолученияДанных.МесяцДатаОкончания = КонецМесяца(ПараметрыПолученияДанных.ДатаОкончания);
ПараметрыПолученияДанных.ДатаАктуальности = ДатаНачала;
ПараметрыПолученияДанных.ПолучатьУсловияТрудаИТерритории = Ложь;
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(
Запрос.МенеджерВременныхТаблиц,
Ложь,
ПараметрыПолученияДанных);
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Сотрудник КАК Сотрудник,
| Сотрудники.ТабельныйНомер КАК ТабельныйНомер,
| Сотрудники.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| Сотрудники.КоличествоСтавок КАК КоличествоСтавок,
| ДанныеУчетаВремениСотрудников.ВидУчетаВремени КАК ВидУчетаВремени,
| СУММА(ДанныеУчетаВремениСотрудников.Дни) КАК Дни,
| СУММА(ДанныеУчетаВремениСотрудников.Часы) КАК Часы
|ИЗ
| ВТДанныеУчетаВремениСотрудников КАК ДанныеУчетаВремениСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСотрудники КАК Сотрудники
| ПО ДанныеУчетаВремениСотрудников.Сотрудник = Сотрудники.Сотрудник
|
|СГРУППИРОВАТЬ ПО
| Сотрудники.Сотрудник,
| Сотрудники.ТабельныйНомер,
| Сотрудники.ДолжностьПоШтатномуРасписанию,
| Сотрудники.КоличествоСтавок,
| ДанныеУчетаВремениСотрудников.ВидУчетаВремени";
Возврат Запрос.Выполнить();
КонецФункции
Кадровый учет
-
ИсполняемоеПредставление.ДанныеСотрудников
Обеспечивает доступ к методу КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников
.
Позволяет получить данные о сотруднике (позиция, начисления и т.п.), включая персональные данные физического лица (контактная информация, образование и т.п.).
-
ИсполняемоеПредставление.ДанныеФизическихЛиц
Обеспечивает доступ к методу КадровыйУчет.СоздатьВТКадровыеДанныеФизическихЛиц
.
Позволяет получить данные физических лиц (ФИО, документы, образование и т.п.).
-
ИсполняемоеПредставление.СотрудникиОрганизации
Обеспечивает доступ к методу КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоВременнойТаблице
.
Позволяет получить сотрудников организации (или подразделения), работающих на заданную дату или в заданном периоде.
Также позволяет получить данные о работающих сотрудниках в определенный момент времени.
-
ИсполняемоеПредставление.РабочиеМестаСотрудников
Обеспечивает доступ к методу КадровыйУчет.СоздатьВТРабочиеМестаСотрудников
.
Позволяет получить информацию о рабочих местах сотрудников (организация, подразделение, позиция ШР, количество ставок и т.п.).
В зависимости от параметров учитываются как сотрудники по трудовым договорам (включая подработки), так и сотрудники по договорам ГПХ.
-
ИсполняемоеПредставление.СтажиФизическихЛиц
Обеспечивает доступ к методу КадровыйУчет.СоздатьВТСтажиФизическихЛиц
.
Позволяет получить стаж физических лиц, рассчитанный на заданные даты.
Общее
- ИсполняемоеПредставление.Периоды
Обеспечивает доступ к методу ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды
.
Позволяет получить таблицу дат в диапазоне от начала до окончания интервала, указанного в параметрах.
Периодичность также задается в параметрах (ДЕНЬ, МЕСЯЦ, ГОД).
Отпуска
-
ИсполняемоеПредставление.ОстаткиОтпусков
Обеспечивает доступ к методу ОстаткиОтпусков.ОстаткиОтпусков
.
Позволяет получить информацию об остатке отпусков по сотрудникам на указанную дату.
-
ИсполняемоеПредставление.ФактическиеОтпускаСотрудников
Обеспечивает доступ к методу ОстаткиОтпусков.СоздатьВТФактическиеОтпускаСотрудников
.
Позволяет получить информацию о фактических отпусках сотрудников.
Регистры расчета
- ИсполняемоеПредставление.РегистрРасчета.ИмяРегистра.База
Позволяет получить информацию о расчетной базе для регистров расчета "Начисления" и "Удержания", включая подробности.
Для получения используются те же методы типовой конфигурации, которые применяются при расчете зарплаты.
Регистры сведений
-
ИсполняемоеПредставление.РегистрСведений.ИмяРегистра.Записи
Обеспечивает доступ к методу ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистра
.
Позволяет получить записи регистра с учетом специфики ЗУП (например, если регистр с поддержкой возвратных событий, то будет добавлена запись с датой начала и запись с датой, следующей за датой окончания).
-
ИсполняемоеПредставление.РегистрСведений.ИмяРегистра.Периоды
Обеспечивает доступ к методу ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраПериоды
.
Позволяет получить записи регистра так, что поле НачалоПериода
равно периоду текущей записи, а ОкончаниеПериода
— периоду следующей записи минус один день (или секунда, в зависимости от параметров).
Учитываются особенности ЗУП, такие как возвратные события. Для повышения производительности используются регистры с постфиксом "Интервальный" (при наличии).
-
ИсполняемоеПредставление.РегистрСведений.ИмяРегистра.СрезПоследних
Обеспечивает доступ к методу ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраСрезПоследних
.
Позволяет получить срез последних записей регистра. Учитываются особенности ЗУП, такие как возвратные события, несколько событий на дату и т.п.
При наличии используются регистры с постфиксом "Интервальный".
Учёт времени
-
ИсполняемоеПредставление.ДанныеУчетаВремениСотрудников
Обеспечивает доступ к методу УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников
.
Получает данные о фактическом рабочем времени сотрудников, включая отклонения.
Учитываются графики, табели, документы отклонений (внутрисменные и целосменные).
Можно получить данные в разрезе территорий выполнения работ и условий труда.
Используется, в частности, для формирования отчета Т-13 и заполнения табеля.
-
ИсполняемоеПредставление.ПлановоеВремяСотрудников
Обеспечивает доступ к методу УчетРабочегоВремениРасширенный.СоздатьВТПлановоеВремя
.
Позволяет получить данные о запланированном рабочем времени сотрудников.
Учитываются общие и индивидуальные графики, а также графики полного времени.
Учёт начисленной зарплаты
-
ИсполняемоеПредставление.НачисленияУдержанияВыплаты
Обеспечивает доступ к результату запроса, используемого в типовом отчёте "Анализ начислений и удержаний".
Предоставляет информацию о начислениях, удержаниях, выплатах и сальдо взаиморасчетов.
-
ИсполняемоеПредставление.НачисленияУдержанияВыплатыАвансом
Обеспечивает доступ к результату запроса, используемого в типовом отчёте "Анализ начислений и удержаний в аванс".
Предоставляет информацию о начислениях, удержаниях, выплатах в аванс и сальдо взаиморасчётов.
-
ИсполняемоеПредставление.ОплаченноеВремя
Позволяет получить информацию о рабочем и нерабочем времени сотрудников, учтённом при расчёте начислений.
Штатное расписание
- ИсполняемоеПредставление.ДанныеПозицийШтатногоРасписания
Обеспечивает доступ к методу УправлениеШтатнымРасписанием.СоздатьВТШтатноеРасписание
.
Позволяет получить сведения о позициях штатного расписания, включая информацию о занятости позиций.
Получение кадровых данных сотрудников:
ВЫБРАТЬ
ДанныеСотрудников.Сотрудник КАК Сотрудник,
ДанныеСотрудников.ВидСобытия КАК ВидСобытия,
ДанныеСотрудников.ВидЗанятости КАК ВидЗанятости,
ДанныеСотрудников.ТарифнаяСтавка КАК ТарифнаяСтавка,
ДанныеСотрудников.Надбавка КАК Надбавка,
ДанныеСотрудников.ОсновноеНачисление КАК ОсновноеНачисление,
ДанныеСотрудников.ТабельныйНомер КАК ТабельныйНомер,
ДанныеСотрудников.Наименование КАК Наименование,
ДанныеСотрудников.ДатаПриема КАК ДатаПриема,
ДанныеСотрудников.ПриказОПриеме КАК ПриказОПриеме,
ДанныеСотрудников.Организация КАК Организация,
ДанныеСотрудников.Подразделение КАК Подразделение,
ДанныеСотрудников.Должность КАК Должность,
ДанныеСотрудников.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
ДанныеСотрудников.ВидДоговора КАК ВидДоговора
ИЗ
ИсполняемоеПредставление.ДанныеСотрудников(
(Сотрудник, Период) В
(ВЫБРАТЬ
Сотрудники.Ссылка КАК Сотрудник,
&Период КАК Период
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
Сотрудники.Ссылка В (&СписокСотрудников))
) КАК ДанныеСотрудников
Получение данных учета времени с группировкой по позиции ШР:
ВЫБРАТЬ
Сотрудники.Ссылка КАК Сотрудник,
&ДатаНачала КАК ДатаНачала,
&ДатаОкончания КАК ДатаОкончания
ПОМЕСТИТЬ ВТСотрудники
ИЗ
Справочник.Сотрудники КАК Сотрудники
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДанныеСотрудников.Сотрудник КАК Сотрудник,
ДанныеСотрудников.ТабельныйНомер КАК ТабельныйНомер,
ДанныеСотрудников.ТарифнаяСтавка КАК ТарифнаяСтавка,
ДанныеСотрудников.ФОТ КАК ФОТ,
ДанныеСотрудников.Надбавка КАК Надбавка,
ДанныеУчетаВремениСотрудников.ВидУчетаВремени КАК ВидУчетаВремени,
СУММА(ДанныеУчетаВремениСотрудников.Дни) КАК Дни,
СУММА(ДанныеУчетаВремениСотрудников.Часы) КАК Часы,
СУММА(ДанныеУчетаВремениСотрудников.НормаЧасов) КАК НормаЧасов,
КадроваяИсторияСотрудниковИнтервалы.Подразделение КАК Подразделение,
КадроваяИсторияСотрудниковИнтервалы.Должность КАК Должность,
КадроваяИсторияСотрудниковИнтервалы.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию
ИЗ
ИсполняемоеПредставление.ДанныеСотрудников(
(Сотрудник, Период) В
(ВЫБРАТЬ
ВТСотрудники.Сотрудник КАК Сотрудник,
ВТСотрудники.ДатаНачала КАК ДатаНачала
ИЗ
ВТСотрудники КАК ВТСотрудники)
) КАК ДанныеСотрудников
ЛЕВОЕ СОЕДИНЕНИЕ ИсполняемоеПредставление.ДанныеУчетаВремениСотрудников(
(Сотрудник, ДатаНачала, ДатаОкончания) В
(ВЫБРАТЬ
ВТСотрудники.Сотрудник КАК Сотрудник,
ВТСотрудники.ДатаНачала КАК ДатаНачала,
ВТСотрудники.ДатаОкончания КАК ДатаОкончания
ИЗ
ВТСотрудники КАК ВТСотрудники),
ДатаНачала = &ДатаНачала,
ДатаОкончания = &ДатаОкончания,
ДатаАктуальности = &ДатаНачала) КАК ДанныеУчетаВремениСотрудников
ЛЕВОЕ СОЕДИНЕНИЕ ИсполняемоеПредставление.РегистрСведений.КадроваяИсторияСотрудников.Периоды(
(Сотрудник, ДатаНачала, ДатаОкончания) В
(ВЫБРАТЬ
ВТСотрудники.Сотрудник КАК Сотрудник,
ВТСотрудники.ДатаНачала КАК ДатаНачала,
ВТСотрудники.ДатаОкончания КАК ДатаОкончания
ИЗ
ВТСотрудники КАК ВТСотрудники),
ВключатьЗаписиНаНачалоПериода = ИСТИНА) КАК КадроваяИсторияСотрудниковИнтервалы
ПО ДанныеУчетаВремениСотрудников.Сотрудник = КадроваяИсторияСотрудниковИнтервалы.Сотрудник
И ДанныеУчетаВремениСотрудников.Дата МЕЖДУ КадроваяИсторияСотрудниковИнтервалы.НачалоПериода И КадроваяИсторияСотрудниковИнтервалы.КонецПериода
ПО ДанныеСотрудников.Сотрудник = ДанныеУчетаВремениСотрудников.Сотрудник
СГРУППИРОВАТЬ ПО
ДанныеСотрудников.Сотрудник,
ДанныеСотрудников.ТабельныйНомер,
ДанныеСотрудников.ТарифнаяСтавка,
ДанныеСотрудников.ФОТ,
ДанныеСотрудников.Надбавка,
ДанныеУчетаВремениСотрудников.ВидУчетаВремени,
КадроваяИсторияСотрудниковИнтервалы.Подразделение,
КадроваяИсторияСотрудниковИнтервалы.Должность,
КадроваяИсторияСотрудниковИнтервалы.ДолжностьПоШтатномуРасписанию
Получение расшифровки базы начислений:
ВЫБРАТЬ
НачисленияБаза.Сотрудник КАК Сотрудник,
НачисленияБаза.ВидРасчета КАК ВидРасчета,
НачисленияБаза.ПериодДействия КАК ПериодДействия,
НачисленияБаза.Результат КАК Результат,
НачисленияБаза.ВидРасчетаРазрез КАК ВидРасчетаРазрез,
НачисленияБаза.РегистраторРазрез КАК РегистраторРазрез,
НачисленияБаза.НомерСтрокиРазрез КАК НомерСтрокиРазрез,
НачисленияБаза.РезультатБаза КАК РезультатБаза
ИЗ
ИсполняемоеПредставление.РегистрРасчета.Начисления.База(
(ПериодДействия, Сотрудник) В
(ВЫБРАТЬ
&ПериодДействия КАК ПериодДействия,
Сотрудники.Ссылка КАК Сотрудник
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
Сотрудники.Ссылка В (&СписокСотрудников))
) КАК НачисленияБаза
Больше примеров здесь.
Есть возможность добавлять собственные исполняемые представления. Ниже приведён пример добавления представления, возвращающего подразделение сотрудника на каждый день в заданном интервале.
Для добавления исполняемого представления нужно выполнить следующие действия.
-
Для каждого нового исполняемого представления необходимо добавить внешнюю обработку с именем Представление[ИмяИсполняемогоПредставления].
-
Для корректного отображения исполняемого представления в конструкторе запросов, необходимо включить его в одну из дочерних подсистем ИсполняемыеПредставления. Можно создать новые подсистемы для организации структуры.
-
В модуле менеджера обработки необходимо обязательно реализовать следующие 5 методов:
Реализация всех этих методов обязательна для корректной работы пользовательского исполняемого представления.
Описание
— возвращает структуру (см. ЭлементыМоделиОписанияПредставлений.НовыйОписаниеПредставления
).
Справка
— возвращает структуру (см. ЭлементыМоделиОписанияПредставлений.НовыйСправка
).
ИмяПредставления
— возвращает имя исполняемого представления в формате ИсполняемоеПредставление.[Имя]
.
Исполнить
— создает временную таблицу с данными исполняемого представления и помещает её в менеджер временных таблиц, переданный в качестве параметра запроса.
ИсполняемыйКод
— возвращает код на встроенном языке 1С, формирующий временную таблицу с данными.
Пример добавления исполняемого представления можно посмотреть здесь.
https://github.com/pulh1/QueryConsole1C
На текущий момент проект находится в стадии беты, и ряд возможностей еще не реализован. Существуют следующие ограничения:
-
Поддерживается только русскоязычный синтаксис языка запросов.
-
Не поддерживается группировка по наборам.
-
Не поддерживается создание нескольких индексов для одной временной таблицы.
-
Не поддерживается создание уникальных индексов для временных таблиц.
-
Расширения языка запросов, используемые в СКД, поддерживаются только для чтения. При редактировании запроса в конструкторе эти инструкции будут потеряны.