В статье Пример создания кадрового отчета для ЗУП 3.1 была попытка донести до коллег, начинающих доработку ЗУП, что данные в этой конфигурации необходимо получать с помощью программного интерфейса и так называемого механизма замены представлений.
Для дальнейшего изучения этих механизмов попробуем решить такую задачу. Допустим, мы разрабатываем внешнюю печатную форму к справочнику Сотрудники и нам требуются следующие данные: Подразделение, должность по штатном расписанию, фот позиции. Решим задачу тремя разными способами.
Способ 1. Использование программного интерфейса.
В общих модулях ЗУП есть функции для получения данных например, КадровыйУчет.КадровыеДанныеСотрудников(). Воспользуемся ими для решения задачи. Нам требуются кадровые данные сотрудников и данные по позиции штатного расписания сотрудника. Логично предположить, что функцией КадровыйУчет.КадровыеДанныеСотрудников мы вряд-ли такие данные получим. Нужно искать другие функции::
МассивПараметр = Новый Массив;
Для каждого элемент Из Сотрудники Цикл
МассивПараметр.Добавить(Элемент.Значение);
КонецЦикла;
//Получаем кадровые данные
НужныеДанные = "ДолжностьПоШтатномуРасписанию";
//Таблица значений с кадровыми данными сотрудников
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(истина,МассивПараметр,НужныеДанные,ДатаПолученияДанных);
//Соответствие, ключ - Позиция ШР. Значение - Данные позиции
ДанныеПозиций = УправлениеШтатнымРасписанием.ДанныеПозицийШтатногоРасписания(истина, КадровыеДанные.ВыгрузитьКолонку("ДолжностьПоШтатномуРасписанию"),ДатаПолученияДанных);
//Собираем нужные данные из двух коллекций
Как видно, код очень простой и компактный. Мне это решение не нравится по нескольким причинам.
- Не все функции для получения данных находятся в программном интерфейсе соответствующего общего модуля. Вендор не обещал обратную совместимость для служебных процедур и функций, которой как раз и является функция УправлениеШтатнымРасписанием.ДанныеПозицийШтатногоРасписания(..).
- К функции выше нет описания. Приходится тратить время на то, чтобы понять что она делает и что надо для ее вызова.
- Таким образом получается несколько коллекций с нужными значениями. Нам требуется их обработать и создать одну коллекцию.
Способ 2. Использование менеджера временных таблиц.
Посмотрим внутрь функции КадровыеДанныеСотрудников(). На вид она очень простая. Создается запрос с менеджером временных таблиц, отрабатывает процедура по созданию временной таблицы с кадровыми данными СоздатьНаДатуВТКадровыеДанныеСотрудников(). Если мы заглянем внутрь функции ДанныеПозицийШтатногоРасписания(), то обнаружим там тоже процедуру по созданию временной таблицы.
Воспользуемся процедурами по созданию временной таблицы в менеджере.
МассивПараметр = Новый Массив;
Для каждого элемент Из Сотрудники Цикл
МассивПараметр.Добавить(Элемент.Значение);
КонецЦикла;
//Получаем кадровые данные
НужныеДанные = "ДолжностьПоШтатномуРасписанию";
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
// Сформируем временную таблицу ВТКадровыеДанныеФизическихЛиц.
КадровыйУчет.СоздатьНаДатуВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, Истина, МассивПараметр, НужныеДанные, ТекущаяДатаСеанса());
// Получаем данные позиции ШР
ПараметрыПостроения = УправлениеШтатнымРасписанием.ПараметрыПостроенияВТШтатноеРасписаниеПоТаблицеФильтра("ВТКадровыеДанныеСотрудников");
ПараметрыПостроения.ИмяПоляПозицияШтатногоРасписания = "ДолжностьПоШтатномурасписанию";
ПараметрыПостроения.ИмяПоляПериод = "Период";
УправлениеШтатнымРасписанием.СоздатьВТПозицииШтатногоРасписанияПоВременнойТаблице(Запрос.МенеджерВременныхТаблиц,истина,ПараметрыПостроения);
Для временных таблиц запроса с представлениями требовалось определить таблицы-фильтры для отбора данных. В нашем примере такой таблицей служит первая временная таблица с полученными кадровыми данными, конкретно 2 поля, позиция штатного расписания и период.
Теперь мы также имеем 2 источника с нужными данными и в запросе из них получить нужный нам набор легче, чем из коллекций.
Данное решение сложнее первого, но, на мой взгляд, более интересное. Ну и можно заметить, что менеджер временных таблиц осень часто встречается в типовом коде ЗУП.
Но и тут есть крайне досадные недостатки.
- Процедуры по созданию временных таблиц во всех модулях находятся в служебном программном интерфейсе.
- Они почти нигде не описаны. Приходится тратить время на отладчик и на поиск примеров в типовом коде, чтобы понять как ими воспользоваться.
Общий недостаток первых двух способов , что данные получаются за несколько обращений к базе. А очень хочется получить все нужные данные одним запросом и уже работать в оперативной памяти с коллекцией. Конечно, в рамках печатной формы вряд ли это серьезный недостаток, но 1С-совесть за это не дает покоя.
3 способ. Использование СКД
Вспомним как строился отчет в статье Пример создания кадрового отчета для ЗУП 3.1.
Мы собрали запрос-пустышку. А что если и тут поступить так же? Соберем пустышку :
ВЫБРАТЬ
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
ЗНАЧЕНИЕ(Справочник.ШтатноеРасписание.ПустаяСсылка) КАК ПозицияШтатногоРасписания,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
ЗНАЧЕНИЕ(Справочник.РазрядыКатегорииДолжностей.ПустаяСсылка) КАК РазрядКатегория,
ЗНАЧЕНИЕ(Справочник.ГрафикиРаботыСотрудников.ПустаяСсылка) КАК ГрафикРаботыСотрудников,
0 КАК КоличествоСтавок,
0 КАК ФОТПозиции,
0 КАК ФОТПозицииМин,
0 КАК ФОТПозицииМакс
ПОМЕСТИТЬ Представления_ШтатноеРасписание
ГДЕ
"ДатаАктуальности" = &ДатаАктуальности
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
&ДатаАктуальности КАК Период,
Сотрудники.Ссылка КАК Сотрудник
ПОМЕСТИТЬ ВТСотрудникиПериоды
ИЗ
Справочник.Сотрудники КАК Сотрудники
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДАТАВРЕМЯ(1, 1, 1) КАК Период,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
ЗНАЧЕНИЕ(Справочник.ШтатноеРасписание.ПустаяСсылка) КАК ДолжностьПоШтатномуРасписанию,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
ИЗ
ВТСотрудникиПериоды КАК СотрудникиПериоды
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КадровыеДанные.Сотрудник КАК Сотрудник,
КадровыеДанные.Подразделение КАК Подразделение,
КадровыеДанные.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
ДанныеПозиций.ФОТПозиции КАК ФОТПозиции,
ДанныеПозиций.КоличествоСтавок КАК КоличествоСтавок,
ДанныеПозиций.ФОТПозицииМин КАК ФОТПозицииМин,
ДанныеПозиций.ФОТПозицииМакс КАК ФОТПозицииМакс,
ДанныеПозиций.РазрядКатегория КАК РазрядКатегория
ПОМЕСТИТЬ Финал
ИЗ
Представления_ШтатноеРасписание КАК ДанныеПозиций
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Представления_КадровыеДанныеСотрудников КАК КадровыеДанные
ПО ДанныеПозиций.ПозицияШтатногоРасписания = КадровыеДанные.ДолжностьПоШтатномуРасписанию
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Финал.Сотрудник КАК Сотрудник,
Финал.Подразделение КАК Подразделение,
Финал.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
Финал.ФОТПозиции КАК ФОТПозиции,
Финал.ФОТПозицииМин КАК ФОТПозицииМин,
Финал.ФОТПозицииМакс КАК ФОТПозицииМакс
ИЗ
Финал КАК Финал
Получим реально исполняемый запрос процедурой ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц()
ВЫБРАТЬ
&ДатаАктуальности КАК Период,
МАКСИМУМ(ИсторияИспользованияШтатногоРасписания.Дата) КАК Дата,
ИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Владелец КАК Организация,
ИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Подразделение КАК Подразделение,
ИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Должность КАК Должность,
ИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания
ПОМЕСТИТЬ ВТОтборПозицийШтатногоРасписания
ИЗ
РегистрСведений.ИсторияИспользованияШтатногоРасписания КАК ИсторияИспользованияШтатногоРасписания
ГДЕ
ИсторияИспользованияШтатногоРасписания.Дата <= &ДатаАктуальности
СГРУППИРОВАТЬ ПО
ИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания,
ИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Владелец,
ИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Подразделение,
ИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Должность
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МАКСИМУМ(РегистрСведений.Период) КАК Период,
ИзмеренияДаты.Период КАК ЗаданныйПериод,
РегистрСведений.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница
ПОМЕСТИТЬ ВТПериодыСрезаТерриториальныеУсловияПФР
{ВЫБРАТЬ
Период,
ЗаданныйПериод,
СтруктурнаяЕдиница}
ИЗ
ВТОтборПозицийШтатногоРасписания КАК ИзмеренияДаты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ТерриториальныеУсловияПФР КАК РегистрСведений
ПО (РегистрСведений.Период <= ВЫБОР
КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
ИНАЧЕ ИзмеренияДаты.Период
КОНЕЦ)
И (РегистрСведений.СтруктурнаяЕдиница = ИзмеренияДаты.Подразделение)
СГРУППИРОВАТЬ ПО
ИзмеренияДаты.Период,
РегистрСведений.СтруктурнаяЕдиница
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МаксимальныеПериоды.ЗаданныйПериод КАК Период,
РегистрСведений.Период КАК ПериодЗаписи,
МаксимальныеПериоды.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
РегистрСведений.ТерриториальныеУсловияПФР КАК ТерриториальныеУсловияПФР
ПОМЕСТИТЬ ВТТерриториальныеУсловияПФРСрезПоследних
{ВЫБРАТЬ
СтруктурнаяЕдиница,
ТерриториальныеУсловияПФР}
ИЗ
ВТПериодыСрезаТерриториальныеУсловияПФР КАК МаксимальныеПериоды
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТерриториальныеУсловияПФР КАК РегистрСведений
ПО (РегистрСведений.Период = МаксимальныеПериоды.Период)
И МаксимальныеПериоды.СтруктурнаяЕдиница = РегистрСведений.СтруктурнаяЕдиница
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТПериодыСрезаТерриториальныеУсловияПФР
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МАКСИМУМ(РегистрСведений.Период) КАК Период,
ИзмеренияДаты.Период КАК ЗаданныйПериод,
РегистрСведений.Должность КАК Должность
ПОМЕСТИТЬ ВТПериодыСрезаКлассыУсловийТрудаПоДолжностям
{ВЫБРАТЬ
Период,
ЗаданныйПериод,
Должность}
ИЗ
ВТОтборПозицийШтатногоРасписания КАК ИзмеренияДаты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлассыУсловийТрудаПоДолжностям КАК РегистрСведений
ПО (РегистрСведений.Период <= ВЫБОР
КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
ИНАЧЕ ИзмеренияДаты.Период
КОНЕЦ)
И (РегистрСведений.Должность = ИзмеренияДаты.ПозицияШтатногоРасписания)
СГРУППИРОВАТЬ ПО
ИзмеренияДаты.Период,
РегистрСведений.Должность
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МаксимальныеПериоды.ЗаданныйПериод КАК Период,
РегистрСведений.Период КАК ПериодЗаписи,
МаксимальныеПериоды.Должность КАК Должность,
РегистрСведений.КлассУсловийТруда КАК КлассУсловийТруда,
РегистрСведений.ДатаРегистрацииИзменений КАК ДатаРегистрацииИзменений,
РегистрСведений.Основание КАК Основание
ПОМЕСТИТЬ ВТКлассыУсловийТрудаПоДолжностямСрезПоследних
{ВЫБРАТЬ
Должность,
КлассУсловийТруда,
ДатаРегистрацииИзменений,
Основание}
ИЗ
ВТПериодыСрезаКлассыУсловийТрудаПоДолжностям КАК МаксимальныеПериоды
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлассыУсловийТрудаПоДолжностям КАК РегистрСведений
ПО (РегистрСведений.Период = МаксимальныеПериоды.Период)
И МаксимальныеПериоды.Должность = РегистрСведений.Должность
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТПериодыСрезаКлассыУсловийТрудаПоДолжностям
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ОтборПозицийШтатногоРасписания.Период КАК Период,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.Сотрудник КАК Сотрудник,
НАЧАЛОПЕРИОДА(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаНачала, ДЕНЬ) КАК ДатаНачала,
КОНЕЦПЕРИОДА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания < КОНЕЦПЕРИОДА(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания, ДЕНЬ)
ТОГДА ДОБАВИТЬКДАТЕ(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания, ДЕНЬ, -1)
ИНАЧЕ РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания
КОНЕЦ, ДЕНЬ) КАК ДатаОкончания,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ФизическоеЛицо КАК ФизическоеЛицо,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДокументОснование КАК ДокументОснование,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПериодЗаписи КАК ПериодЗаписи,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.Год КАК Год,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПериодПредыдущейЗаписи КАК ПериодПредыдущейЗаписи,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции КАК ВидЗанятостиПозиции,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок КАК КоличествоСтавок,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо КАК ДействуетДо,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ЗамещаемыйСотрудник КАК ЗамещаемыйСотрудник,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПланируемаяДатаЗавершения КАК ПланируемаяДатаЗавершения,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.РегистраторЗаписи КАК РегистраторЗаписи,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.РегистраторСобытия КАК РегистраторСобытия,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПустойИнтервал КАК ПустойИнтервал
ПОМЕСТИТЬ ВТРегистрСведенийЗанятостьПозицийШтатногоРасписанияПредварительно
ИЗ
ВТОтборПозицийШтатногоРасписания КАК ОтборПозицийШтатногоРасписания
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписанияИнтервальный КАК РегистрСведенийЗанятостьПозицийШтатногоРасписания
ПО ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания = РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПозицияШтатногоРасписания
И (ОтборПозицийШтатногоРасписания.Период МЕЖДУ НАЧАЛОПЕРИОДА(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаНачала, ДЕНЬ) И КОНЕЦПЕРИОДА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания < КОНЕЦПЕРИОДА(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания, ДЕНЬ)
ТОГДА ДОБАВИТЬКДАТЕ(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания, ДЕНЬ, -1)
ИНАЧЕ РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания
КОНЕЦ, ДЕНЬ))
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ОтборПозицийШтатногоРасписания.Период,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.Сотрудник,
НАЧАЛОПЕРИОДА(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаНачала, ДЕНЬ),
КОНЕЦПЕРИОДА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания < КОНЕЦПЕРИОДА(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания, ДЕНЬ)
ТОГДА ДОБАВИТЬКДАТЕ(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания, ДЕНЬ, -1)
ИНАЧЕ РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания
КОНЕЦ, ДЕНЬ),
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ГоловнаяОрганизация,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ФизическоеЛицо,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДокументОснование,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПериодЗаписи,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.Год,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПериодПредыдущейЗаписи,
РегистрСведенийЗанятостьПозицийШтатногоРасписанияПредыдущие.ПозицияШтатногоРасписания,
ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Свободна),
РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ЗамещаемыйСотрудник,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПланируемаяДатаЗавершения,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.РегистраторЗаписи,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.РегистраторСобытия,
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПустойИнтервал
ИЗ
ВТОтборПозицийШтатногоРасписания КАК ОтборПозицийШтатногоРасписания
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписанияИнтервальный КАК РегистрСведенийЗанятостьПозицийШтатногоРасписания
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписанияИнтервальный КАК РегистрСведенийЗанятостьПозицийШтатногоРасписанияПредыдущие
ПО РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПериодПредыдущейЗаписи = РегистрСведенийЗанятостьПозицийШтатногоРасписанияПредыдущие.ПериодЗаписи
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.Сотрудник = РегистрСведенийЗанятостьПозицийШтатногоРасписанияПредыдущие.Сотрудник
ПО ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания = РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПозицияШтатногоРасписания
И (ОтборПозицийШтатногоРасписания.Период МЕЖДУ НАЧАЛОПЕРИОДА(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаНачала, ДЕНЬ) И КОНЕЦПЕРИОДА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания < КОНЕЦПЕРИОДА(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания, ДЕНЬ)
ТОГДА ДОБАВИТЬКДАТЕ(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания, ДЕНЬ, -1)
ИНАЧЕ РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания
КОНЕЦ, ДЕНЬ))
ГДЕ
РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Занята)
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо > ДАТАВРЕМЯ(1, 1, 1)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ОтборПозицийШтатногоРасписания.Период КАК Период,
ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
СУММА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Свободна)
ТОГДА ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПланируемаяДатаЗавершения = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
КОГДА (РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо < ДАТАВРЕМЯ(2020, 12, 30, 14, 56, 55)
ИЛИ РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо >= ОтборПозицийШтатногоРасписания.Период)
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПланируемаяДатаЗавершения = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
И (РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПланируемаяДатаЗавершения < ДАТАВРЕМЯ(2020, 12, 30, 14, 56, 55)
ИЛИ РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПланируемаяДатаЗавершения >= ОтборПозицийШтатногоРасписания.Период)
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 0
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ) КАК Занято,
СУММА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Занята)
И (РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПланируемаяДатаЗавершения < ДАТАВРЕМЯ(2020, 12, 30, 14, 56, 55))
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 0
КОНЕЦ) КАК ЗанятаПостоянно,
СУММА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Занята)
И (РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо > ДАТАВРЕМЯ(1, 1, 1)
ИЛИ РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПланируемаяДатаЗавершения >= ОтборПозицийШтатногоРасписания.Период
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПланируемаяДатаЗавершения >= ДАТАВРЕМЯ(2020, 12, 30, 14, 56, 55))
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 0
КОНЕЦ) КАК ЗанятаВременно,
СУММА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Подработка)
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 0
КОНЕЦ) КАК ПодработкаПостоянно,
СУММА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Подработка)
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо > ДАТАВРЕМЯ(1, 1, 1)
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 0
КОНЕЦ) КАК ПодработкаВременно,
СУММА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Совмещена)
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 0
КОНЕЦ) КАК СовмещенаПостоянно,
СУММА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Совмещена)
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо > ДАТАВРЕМЯ(1, 1, 1)
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 0
КОНЕЦ) КАК СовмещенаВременно,
СУММА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Забронирована)
И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо > ДАТАВРЕМЯ(1, 1, 1)
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 0
КОНЕЦ) КАК Забронирована,
СУММА(ВЫБОР
КОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВидЗанятостиПозиции = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.Свободна)
И (РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДействуетДо > ДАТАВРЕМЯ(1, 1, 1)
ИЛИ РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПланируемаяДатаЗавершения >= ОтборПозицийШтатногоРасписания.Период)
ТОГДА РегистрСведенийЗанятостьПозицийШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 0
КОНЕЦ) КАК ВременноОсвобождена
ПОМЕСТИТЬ ВТРегистрСведенийЗанятостьПозицийШтатногоРасписания
ИЗ
ВТОтборПозицийШтатногоРасписания КАК ОтборПозицийШтатногоРасписания
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТРегистрСведенийЗанятостьПозицийШтатногоРасписанияПредварительно КАК РегистрСведенийЗанятостьПозицийШтатногоРасписания
ПО ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания = РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПозицияШтатногоРасписания
И (ОтборПозицийШтатногоРасписания.Период МЕЖДУ РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаНачала И РегистрСведенийЗанятостьПозицийШтатногоРасписания.ДатаОкончания)
И ОтборПозицийШтатногоРасписания.Период = РегистрСведенийЗанятостьПозицийШтатногоРасписания.Период
СГРУППИРОВАТЬ ПО
ОтборПозицийШтатногоРасписания.Период,
ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ОтборПозицийШтатногоРасписания.Период, ДЕНЬ) КАК Период,
ОтборПозицийШтатногоРасписания.Дата КАК Дата,
ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Наименование КАК Наименование,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Владелец КАК Организация,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Подразделение КАК Подразделение,
ВЫРАЗИТЬ(РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Подразделение КАК Справочник.ПодразделенияОрганизаций).РайонныйКоэффициент КАК РайонныйКоэффициент,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Должность КАК Должность,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Утверждена КАК Утверждена,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.ДатаУтверждения КАК ДатаУтверждения,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Закрыта КАК Закрыта,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.ДатаЗакрытия КАК ДатаЗакрытия,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания.Описание КАК Описание,
РегистрСведенийИсторияИспользованияШтатногоРасписания.Регистратор КАК Регистратор,
РегистрСведенийИсторияИспользованияШтатногоРасписания.УсловияПриема КАК УсловияПриема,
РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок КАК КоличествоСтавок,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ТарифнаяСетка КАК ТарифнаяСетка,
РегистрСведенийИсторияИспользованияШтатногоРасписания.РазрядКатегория КАК РазрядКатегория,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ТарифнаяСеткаНадбавки КАК ТарифнаяСеткаНадбавки,
РегистрСведенийИсторияИспользованияШтатногоРасписания.РазрядКатегорияНадбавки КАК РазрядКатегорияНадбавки,
РегистрСведенийИсторияИспользованияШтатногоРасписания.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ОтношениеКЕНВД КАК ОтношениеКЕНВД,
РегистрСведенийИсторияИспользованияШтатногоРасписания.СтатьяФинансирования КАК СтатьяФинансирования,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ВзимаютсяВзносыЗаЗанятыхНаРаботахСДосрочнойПенсией КАК ВзимаютсяВзносыЗаЗанятыхНаРаботахСДосрочнойПенсией,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ОснованиеДосрочногоНазначенияПенсии КАК ОснованиеДосрочногоНазначенияПенсии,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ОсобыеУсловияТрудаПФР КАК ОсобыеУсловияТрудаПФР,
РегистрСведенийИсторияИспользованияШтатногоРасписания.КодПозицииСпискаПФР КАК КодПозицииСпискаПФР,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ТрудоваяФункция КАК ТрудоваяФункция,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ХарактерВыполняемыхРаботПФР КАК ХарактерВыполняемыхРаботПФР,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПервичныеДокументыПФР КАК ПервичныеДокументыПФР,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ВыплачиваетсяНадбавкаЗаВредность КАК ВыплачиваетсяНадбавкаЗаВредность,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ПроцентНадбавкиЗаВредность КАК ПроцентНадбавкиЗаВредность,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ОкладТарифМин КАК ОкладТарифМин,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ОкладТарифМакс КАК ОкладТарифМакс,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТМин КАК ФОТМин,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТМакс КАК ФОТМакс,
ВЫБОР
КОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок < 1
ТОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТМин * ВЫБОР
КОГДА ВЫРАЗИТЬ(РегистрСведенийИсторияИспользованияШтатногоРасписания.ГрафикРаботыСотрудников КАК Справочник.ГрафикиРаботыСотрудников).ГрафикПолногоРабочегоВремени.ДлительностьРабочейНедели ЕСТЬ NULL
ТОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок
КОГДА ВЫРАЗИТЬ(РегистрСведенийИсторияИспользованияШтатногоРасписания.ГрафикРаботыСотрудников КАК Справочник.ГрафикиРаботыСотрудников).ДлительностьРабочейНедели / ВЫРАЗИТЬ(РегистрСведенийИсторияИспользованияШтатногоРасписания.ГрафикРаботыСотрудников КАК Справочник.ГрафикиРаботыСотрудников).ГрафикПолногоРабочегоВремени.ДлительностьРабочейНедели = 1
ТОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 1
КОНЕЦ
ИНАЧЕ РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТМин * РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок
КОНЕЦ КАК ФОТПозицииМин,
ВЫБОР
КОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок < 1
ТОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТМакс * ВЫБОР
КОГДА ВЫРАЗИТЬ(РегистрСведенийИсторияИспользованияШтатногоРасписания.ГрафикРаботыСотрудников КАК Справочник.ГрафикиРаботыСотрудников).ГрафикПолногоРабочегоВремени.ДлительностьРабочейНедели ЕСТЬ NULL
ТОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок
КОГДА ВЫРАЗИТЬ(РегистрСведенийИсторияИспользованияШтатногоРасписания.ГрафикРаботыСотрудников КАК Справочник.ГрафикиРаботыСотрудников).ДлительностьРабочейНедели / ВЫРАЗИТЬ(РегистрСведенийИсторияИспользованияШтатногоРасписания.ГрафикРаботыСотрудников КАК Справочник.ГрафикиРаботыСотрудников).ГрафикПолногоРабочегоВремени.ДлительностьРабочейНедели = 1
ТОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 1
КОНЕЦ
ИНАЧЕ РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТМакс * РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок
КОНЕЦ КАК ФОТПозицииМакс,
РегистрСведенийИсторияИспользованияШтатногоРасписания.РайонныйКоэффициентРазмерМин КАК РайонныйКоэффициентРазмерМин,
РегистрСведенийИсторияИспользованияШтатногоРасписания.РайонныйКоэффициентРазмерМакс КАК РайонныйКоэффициентРазмерМакс,
РегистрСведенийИсторияИспользованияШтатногоРасписания.СевернаяНадбавкаРазмерМин КАК СевернаяНадбавкаРазмерМин,
РегистрСведенийИсторияИспользованияШтатногоРасписания.СевернаяНадбавкаРазмерМакс КАК СевернаяНадбавкаРазмерМакс,
РегистрСведенийИсторияИспользованияШтатногоРасписания.НадбавкаЗаВредностьРазмерМин КАК НадбавкаЗаВредностьРазмерМин,
РегистрСведенийИсторияИспользованияШтатногоРасписания.НадбавкаЗаВредностьРазмерМакс КАК НадбавкаЗаВредностьРазмерМакс,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ОкладТариф КАК ОкладТариф,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТ КАК ФОТ,
ВЫБОР
КОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок < 1
ТОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТ * ВЫБОР
КОГДА ВЫРАЗИТЬ(РегистрСведенийИсторияИспользованияШтатногоРасписания.ГрафикРаботыСотрудников КАК Справочник.ГрафикиРаботыСотрудников).ГрафикПолногоРабочегоВремени.ДлительностьРабочейНедели ЕСТЬ NULL
ТОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок
КОГДА ВЫРАЗИТЬ(РегистрСведенийИсторияИспользованияШтатногоРасписания.ГрафикРаботыСотрудников КАК Справочник.ГрафикиРаботыСотрудников).ДлительностьРабочейНедели / ВЫРАЗИТЬ(РегистрСведенийИсторияИспользованияШтатногоРасписания.ГрафикРаботыСотрудников КАК Справочник.ГрафикиРаботыСотрудников).ГрафикПолногоРабочегоВремени.ДлительностьРабочейНедели = 1
ТОГДА РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок
ИНАЧЕ 1
КОНЕЦ
ИНАЧЕ РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТ * РегистрСведенийИсторияИспользованияШтатногоРасписания.КоличествоСтавок
КОНЕЦ КАК ФОТПозиции,
РегистрСведенийИсторияИспользованияШтатногоРасписания.РайонныйКоэффициентРазмер КАК РайонныйКоэффициентРазмер,
РегистрСведенийИсторияИспользованияШтатногоРасписания.СевернаяНадбавкаРазмер КАК СевернаяНадбавкаРазмер,
РегистрСведенийИсторияИспользованияШтатногоРасписания.НадбавкаЗаВредностьРазмер КАК НадбавкаЗаВредностьРазмер,
ВЫБОР
КОГДА РегистрСведенийТерриториальныеУсловияПФР.ТерриториальныеУсловияПФР В (ЗНАЧЕНИЕ(Справочник.ТерриториальныеУсловияПФР.МКС), ЗНАЧЕНИЕ(Справочник.ТерриториальныеУсловияПФР.МКСР), ЗНАЧЕНИЕ(Справочник.ТерриториальныеУсловияПФР.РКС), ЗНАЧЕНИЕ(Справочник.ТерриториальныеУсловияПФР.РКСМ), ЗНАЧЕНИЕ(Справочник.ТерриториальныеУсловияПФР.ПРОЧ))
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ПрименятьСевернуюНадбавку,
ВЫБОР
КОГДА РегистрСведенийТерриториальныеУсловияПФР.ТерриториальныеУсловияПФР В (ЗНАЧЕНИЕ(Справочник.ТерриториальныеУсловияПФР.МКС), ЗНАЧЕНИЕ(Справочник.ТерриториальныеУсловияПФР.МКСР), ЗНАЧЕНИЕ(Справочник.ТерриториальныеУсловияПФР.РКС), ЗНАЧЕНИЕ(Справочник.ТерриториальныеУсловияПФР.РКСМ), ЗНАЧЕНИЕ(Справочник.ТерриториальныеУсловияПФР.ПРОЧ))
ТОГДА ОтборПозицийШтатногоРасписания.Подразделение.ПроцентСевернойНадбавки
ИНАЧЕ 0
КОНЕЦ КАК ПроцентСевернойНадбавки,
РегистрСведенийКлассыУсловийТрудаПоДолжностям.КлассУсловийТруда КАК КлассУсловийТруда,
РегистрСведенийКлассыУсловийТрудаПоДолжностям.Период КАК КлассУсловийТрудаПериод,
РегистрСведенийКлассыУсловийТрудаПоДолжностям.ДатаРегистрацииИзменений КАК КлассУсловийТрудаДатаРегистрацииИзменений,
ЕСТЬNULL(РегистрСведенийЗанятостьПозицийШтатногоРасписания.Занято, 0) КАК Занято,
ЕСТЬNULL(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ЗанятаПостоянно, 0) КАК ЗанятаПостоянно,
ЕСТЬNULL(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ЗанятаВременно, 0) КАК ЗанятаВременно,
ЕСТЬNULL(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПодработкаПостоянно, 0) КАК ПодработкаПостоянно,
ЕСТЬNULL(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПодработкаВременно, 0) КАК ПодработкаВременно,
ЕСТЬNULL(РегистрСведенийЗанятостьПозицийШтатногоРасписания.СовмещенаПостоянно, 0) КАК СовмещенаПостоянно,
ЕСТЬNULL(РегистрСведенийЗанятостьПозицийШтатногоРасписания.СовмещенаВременно, 0) КАК СовмещенаВременно,
ЕСТЬNULL(РегистрСведенийЗанятостьПозицийШтатногоРасписания.Забронирована, 0) КАК Забронирована,
ЕСТЬNULL(РегистрСведенийЗанятостьПозицийШтатногоРасписания.ВременноОсвобождена, 0) КАК ВременноОсвобождена,
NULL КАК КатегорияПерсонала,
РегистрСведенийМестоПозицииШтатногоРасписанияВСтруктуреПредприятия.Подразделение КАК МестоВСтруктуреПредприятия
ПОМЕСТИТЬ ВТПозицииШтатногоРасписания
ИЗ
ВТОтборПозицийШтатногоРасписания КАК ОтборПозицийШтатногоРасписания
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияИспользованияШтатногоРасписания КАК РегистрСведенийИсторияИспользованияШтатногоРасписания
ПО ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания = РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания
И ОтборПозицийШтатногоРасписания.Дата = РегистрСведенийИсторияИспользованияШтатногоРасписания.Дата
И (РегистрСведенийИсторияИспользованияШтатногоРасписания.Используется)
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестоПозицииШтатногоРасписанияВСтруктуреПредприятия КАК РегистрСведенийМестоПозицииШтатногоРасписанияВСтруктуреПредприятия
ПО ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания = РегистрСведенийМестоПозицииШтатногоРасписанияВСтруктуреПредприятия.Позиция}
{ЛЕВОЕ СОЕДИНЕНИЕ ВТТерриториальныеУсловияПФРСрезПоследних КАК РегистрСведенийТерриториальныеУсловияПФР
ПО ОтборПозицийШтатногоРасписания.Подразделение = РегистрСведенийТерриториальныеУсловияПФР.СтруктурнаяЕдиница
И ОтборПозицийШтатногоРасписания.Период = РегистрСведенийТерриториальныеУсловияПФР.Период}
{ЛЕВОЕ СОЕДИНЕНИЕ ВТКлассыУсловийТрудаПоДолжностямСрезПоследних КАК РегистрСведенийКлассыУсловийТрудаПоДолжностям
ПО ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания = РегистрСведенийКлассыУсловийТрудаПоДолжностям.Должность
И ОтборПозицийШтатногоРасписания.Период = РегистрСведенийКлассыУсловийТрудаПоДолжностям.Период}
{ЛЕВОЕ СОЕДИНЕНИЕ ВТРегистрСведенийЗанятостьПозицийШтатногоРасписания КАК РегистрСведенийЗанятостьПозицийШтатногоРасписания
ПО ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания = РегистрСведенийЗанятостьПозицийШтатногоРасписания.ПозицияШтатногоРасписания
И ОтборПозицийШтатногоРасписания.Период = РегистрСведенийЗанятостьПозицийШтатногоРасписания.Период}
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТОтборПозицийШтатногоРасписания
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТТерриториальныеУсловияПФРСрезПоследних
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТКлассыУсловийТрудаПоДолжностямСрезПоследних
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТРегистрСведенийЗанятостьПозицийШтатногоРасписанияПредварительно
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТРегистрСведенийЗанятостьПозицийШтатногоРасписания
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПозицииШтатногоРасписания.Период КАК Период,
ПозицииШтатногоРасписания.Дата КАК Дата,
ПозицииШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
ИСТИНА КАК ПлановыеНачисления,
РегистрСведенийИсторияНачисленийПоШтатномуРасписанию.Начисление КАК Начисление,
РегистрСведенийИсторияНачисленийПоШтатномуРасписанию.ИдентификаторСтрокиВидаРасчета КАК ИдентификаторСтрокиВидаРасчета,
РегистрСведенийИсторияНачисленийПоШтатномуРасписанию.РазмерМин КАК РазмерМин,
РегистрСведенийИсторияНачисленийПоШтатномуРасписанию.РазмерМакс КАК РазмерМакс,
РегистрСведенийИсторияНачисленийПоШтатномуРасписанию.Размер КАК Размер,
ЕСТЬNULL(РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.Показатель, ЗНАЧЕНИЕ(Справочник.ПоказателиРасчетаЗарплаты.ПустаяСсылка)) КАК Показатель,
ЕСТЬNULL(РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.ЗначениеМин, 0) КАК ЗначениеМин,
ЕСТЬNULL(РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.ЗначениеМакс, 0) КАК ЗначениеМакс,
ЕСТЬNULL(РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.Значение, 0) КАК Значение
ПОМЕСТИТЬ ВТНачисленияПозицийШтатногоРасписания
ИЗ
ВТПозицииШтатногоРасписания КАК ПозицииШтатногоРасписания
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияНачисленийПоШтатномуРасписанию КАК РегистрСведенийИсторияНачисленийПоШтатномуРасписанию
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияПоказателейПоШтатномуРасписанию КАК РегистрСведенийИсторияПоказателейПоШтатномуРасписанию
ПО РегистрСведенийИсторияНачисленийПоШтатномуРасписанию.ПозицияШтатногоРасписания = РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.ПозицияШтатногоРасписания
И РегистрСведенийИсторияНачисленийПоШтатномуРасписанию.ИдентификаторСтрокиВидаРасчета = РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.ИдентификаторСтрокиВидаРасчета
И РегистрСведенийИсторияНачисленийПоШтатномуРасписанию.Дата = РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.Дата
ПО ПозицииШтатногоРасписания.ПозицияШтатногоРасписания = РегистрСведенийИсторияНачисленийПоШтатномуРасписанию.ПозицияШтатногоРасписания
И ПозицииШтатногоРасписания.Дата = РегистрСведенийИсторияНачисленийПоШтатномуРасписанию.Дата
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПозицииШтатногоРасписания.Период,
ПозицииШтатногоРасписания.Дата,
ПозицииШтатногоРасписания.ПозицияШтатногоРасписания,
ИСТИНА,
ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка),
0,
0,
0,
0,
РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.Показатель,
РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.ЗначениеМин,
РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.ЗначениеМакс,
РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.Значение
ИЗ
ВТПозицииШтатногоРасписания КАК ПозицииШтатногоРасписания
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияПоказателейПоШтатномуРасписанию КАК РегистрСведенийИсторияПоказателейПоШтатномуРасписанию
ПО ПозицииШтатногоРасписания.ПозицияШтатногоРасписания = РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.ПозицияШтатногоРасписания
И ПозицииШтатногоРасписания.Дата = РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.Дата
И (РегистрСведенийИсторияПоказателейПоШтатномуРасписанию.ИдентификаторСтрокиВидаРасчета = 0)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПозицииШтатногоРасписания.Период,
ПозицииШтатногоРасписания.Дата,
ПозицииШтатногоРасписания.ПозицияШтатногоРасписания,
ИСТИНА,
&НачислениеНадбавкаЗаВредность,
99997,
ПозицииШтатногоРасписания.НадбавкаЗаВредностьРазмерМин,
ПозицииШтатногоРасписания.НадбавкаЗаВредностьРазмерМакс,
ПозицииШтатногоРасписания.НадбавкаЗаВредностьРазмер,
&ПоказательПроцентНадбавкиЗаВредность,
ПозицииШтатногоРасписания.ПроцентНадбавкиЗаВредность,
ПозицииШтатногоРасписания.ПроцентНадбавкиЗаВредность,
ПозицииШтатногоРасписания.ПроцентНадбавкиЗаВредность
ИЗ
ВТПозицииШтатногоРасписания КАК ПозицииШтатногоРасписания
ГДЕ
ПозицииШтатногоРасписания.ВыплачиваетсяНадбавкаЗаВредность
И &НачислениеНадбавкаЗаВредность <> НЕОПРЕДЕЛЕНО
И &ПоказательПроцентНадбавкиЗаВредность <> НЕОПРЕДЕЛЕНО
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
НачисленияПозицийШтатногоРасписания.Период КАК Период,
НачисленияПозицийШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
НачисленияПозицийШтатногоРасписания.Начисление КАК Начисление,
ВЫБОР
КОГДА НачисленияПозицийШтатногоРасписания.Начисление.ВидВремени В (ЗНАЧЕНИЕ(Перечисление.ВидыРабочегоВремениСотрудников.ОтработанноеВПределахНормы), ЗНАЧЕНИЕ(Перечисление.ВидыРабочегоВремениСотрудников.ЧасовоеОтработанноеВПределахНормы))
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ЭтоТарифнаяСтавка
ПОМЕСТИТЬ ВТНачисленияСПризнакомТарифнойСтавки
ИЗ
ВТНачисленияПозицийШтатногоРасписания КАК НачисленияПозицийШтатногоРасписания
ИНДЕКСИРОВАТЬ ПО
Период,
ПозицияШтатногоРасписания,
Начисление
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НачисленияПозицийШтатногоРасписания.Период КАК Период,
НачисленияПозицийШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
НачисленияПозицийШтатногоРасписания.Начисление КАК Начисление,
МАКСИМУМ(ПоказателиЗависящиеОтСтажа.Показатель) КАК Показатель,
МАКСИМУМ(ЕСТЬNULL(ШкалаОценкиСтажа.ЗначениеПоказателя, 0)) КАК Значение
ПОМЕСТИТЬ ВТНачисленияСПоказателямиЗависящимиОтСтажа
ИЗ
ВТНачисленияПозицийШтатногоРасписания КАК НачисленияПозицийШтатногоРасписания
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления.Показатели КАК ПоказателиЗависящиеОтСтажа
ПО НачисленияПозицийШтатногоРасписания.Начисление = ПоказателиЗависящиеОтСтажа.Ссылка
И (ПоказателиЗависящиеОтСтажа.Показатель.ТипПоказателя = ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейРасчетаЗарплаты.ЧисловойЗависящийОтСтажа))
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПоказателиРасчетаЗарплаты.ШкалаОценкиСтажа КАК ШкалаОценкиСтажа
ПО (ПоказателиЗависящиеОтСтажа.Показатель = ШкалаОценкиСтажа.Ссылка)
СГРУППИРОВАТЬ ПО
НачисленияПозицийШтатногоРасписания.Период,
НачисленияПозицийШтатногоРасписания.ПозицияШтатногоРасписания,
НачисленияПозицийШтатногоРасписания.Начисление
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НачисленияПозицийШтатногоРасписания.Период КАК Период,
НачисленияПозицийШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
МИНИМУМ(ВЫРАЗИТЬ(НачисленияПозицийШтатногоРасписания.Начисление КАК ПланВидовРасчета.Начисления).РеквизитДопУпорядочивания) КАК ЗначениеРеквизитаДопУпорядочивания
ПОМЕСТИТЬ ВТПорядокОсновныхНачислений
ИЗ
ВТНачисленияСПризнакомТарифнойСтавки КАК НачисленияПозицийШтатногоРасписания
ГДЕ
НачисленияПозицийШтатногоРасписания.ЭтоТарифнаяСтавка
СГРУППИРОВАТЬ ПО
НачисленияПозицийШтатногоРасписания.Период,
НачисленияПозицийШтатногоРасписания.ПозицияШтатногоРасписания
ИНДЕКСИРОВАТЬ ПО
Период,
ПозицияШтатногоРасписания,
ЗначениеРеквизитаДопУпорядочивания
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НачисленияСПризнакомТарифнойСтавки.Период КАК Период,
НачисленияСПризнакомТарифнойСтавки.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
НачисленияСПризнакомТарифнойСтавки.Начисление КАК Начисление,
ВЫБОР
КОГДА ЕСТЬNULL(НачисленияСПризнакомТарифнойСтавки.ЭтоТарифнаяСтавка, ЛОЖЬ)
И ВЫРАЗИТЬ(НачисленияСПризнакомТарифнойСтавки.Начисление КАК ПланВидовРасчета.Начисления).РеквизитДопУпорядочивания = ПорядокОсновныхНачислений.ЗначениеРеквизитаДопУпорядочивания
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ЭтоТарифнаяСтавка,
ЕСТЬNULL(НачисленияПозицийШтатногоРасписания.Показатель, НачисленияСПризнакомТарифнойСтавки.Начисление) КАК Показатель,
ЕСТЬNULL(ВЫБОР
КОГДА ЕСТЬNULL(НачисленияПоказатели.ОсновнойПоказатель, ИСТИНА)
ТОГДА НачисленияПозицийШтатногоРасписания.Размер
ИНАЧЕ 0
КОНЕЦ, 0) КАК Размер,
ЕСТЬNULL(ВЫБОР
КОГДА ЕСТЬNULL(НачисленияПоказатели.ОсновнойПоказатель, ИСТИНА)
ТОГДА НачисленияПозицийШтатногоРасписания.РазмерМин
ИНАЧЕ 0
КОНЕЦ, 0) КАК РазмерМин,
ЕСТЬNULL(ВЫБОР
КОГДА ЕСТЬNULL(НачисленияПоказатели.ОсновнойПоказатель, ИСТИНА)
ТОГДА НачисленияПозицийШтатногоРасписания.РазмерМакс
ИНАЧЕ 0
КОНЕЦ, 0) КАК РазмерМакс,
ЕСТЬNULL(ВЫБОР
КОГДА ВЫРАЗИТЬ(НачисленияСПризнакомТарифнойСтавки.Начисление КАК ПланВидовРасчета.Начисления).КатегорияНачисленияИлиНеоплаченногоВремени = ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.СевернаяНадбавка)
ТОГДА ПозицииШтатногоРасписания.ПроцентСевернойНадбавки
КОГДА НЕ НачисленияСПоказателямиЗависящимиОтСтажа.Показатель ЕСТЬ NULL
ТОГДА НачисленияСПоказателямиЗависящимиОтСтажа.Значение
ИНАЧЕ НачисленияПозицийШтатногоРасписания.Значение
КОНЕЦ, 0) КАК Значение,
ЕСТЬNULL(ВЫБОР
КОГДА ВЫРАЗИТЬ(НачисленияСПризнакомТарифнойСтавки.Начисление КАК ПланВидовРасчета.Начисления).КатегорияНачисленияИлиНеоплаченногоВремени = ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.СевернаяНадбавка)
ТОГДА ПозицииШтатногоРасписания.ПроцентСевернойНадбавки
КОГДА НЕ НачисленияСПоказателямиЗависящимиОтСтажа.Показатель ЕСТЬ NULL
ТОГДА НачисленияСПоказателямиЗависящимиОтСтажа.Значение
ИНАЧЕ НачисленияПозицийШтатногоРасписания.ЗначениеМин
КОНЕЦ, 0) КАК ЗначениеМин,
ЕСТЬNULL(ВЫБОР
КОГДА ВЫРАЗИТЬ(НачисленияСПризнакомТарифнойСтавки.Начисление КАК ПланВидовРасчета.Начисления).КатегорияНачисленияИлиНеоплаченногоВремени = ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.СевернаяНадбавка)
ТОГДА ПозицииШтатногоРасписания.ПроцентСевернойНадбавки
КОГДА НЕ НачисленияСПоказателямиЗависящимиОтСтажа.Показатель ЕСТЬ NULL
ТОГДА НачисленияСПоказателямиЗависящимиОтСтажа.Значение
ИНАЧЕ НачисленияПозицийШтатногоРасписания.ЗначениеМакс
КОНЕЦ, 0) КАК ЗначениеМакс
ПОМЕСТИТЬ ВТНачисленияСПоказателями
ИЗ
ВТНачисленияСПризнакомТарифнойСтавки КАК НачисленияСПризнакомТарифнойСтавки
{ЛЕВОЕ СОЕДИНЕНИЕ ВТНачисленияПозицийШтатногоРасписания КАК НачисленияПозицийШтатногоРасписания
ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления.Показатели КАК НачисленияПоказатели
ПО НачисленияПозицийШтатногоРасписания.Начисление = НачисленияПоказатели.Ссылка
И (ЕСТЬNULL(НачисленияПозицийШтатногоРасписания.Показатель, ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка)) = ЕСТЬNULL(НачисленияПоказатели.Показатель, ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка)))
ПО НачисленияСПризнакомТарифнойСтавки.Период = НачисленияПозицийШтатногоРасписания.Период
И НачисленияСПризнакомТарифнойСтавки.ПозицияШтатногоРасписания = НачисленияПозицийШтатногоРасписания.ПозицияШтатногоРасписания
И НачисленияСПризнакомТарифнойСтавки.Начисление = НачисленияПозицийШтатногоРасписания.Начисление}
{ЛЕВОЕ СОЕДИНЕНИЕ ВТПорядокОсновныхНачислений КАК ПорядокОсновныхНачислений
ПО НачисленияСПризнакомТарифнойСтавки.Период = ПорядокОсновныхНачислений.Период
И НачисленияСПризнакомТарифнойСтавки.ПозицияШтатногоРасписания = ПорядокОсновныхНачислений.ПозицияШтатногоРасписания
И (ВЫРАЗИТЬ(НачисленияСПризнакомТарифнойСтавки.Начисление КАК ПланВидовРасчета.Начисления).РеквизитДопУпорядочивания = ПорядокОсновныхНачислений.ЗначениеРеквизитаДопУпорядочивания)}
{ЛЕВОЕ СОЕДИНЕНИЕ ВТПозицииШтатногоРасписания КАК ПозицииШтатногоРасписания
ПО НачисленияСПризнакомТарифнойСтавки.ПозицияШтатногоРасписания = ПозицииШтатногоРасписания.ПозицияШтатногоРасписания}
{ЛЕВОЕ СОЕДИНЕНИЕ ВТНачисленияСПоказателямиЗависящимиОтСтажа КАК НачисленияСПоказателямиЗависящимиОтСтажа
ПО НачисленияСПризнакомТарифнойСтавки.Период = НачисленияСПоказателямиЗависящимиОтСтажа.Период
И НачисленияСПризнакомТарифнойСтавки.ПозицияШтатногоРасписания = НачисленияСПоказателямиЗависящимиОтСтажа.ПозицияШтатногоРасписания
И НачисленияСПризнакомТарифнойСтавки.Начисление = НачисленияСПоказателямиЗависящимиОтСтажа.Начисление}
ИНДЕКСИРОВАТЬ ПО
ПозицияШтатногоРасписания
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПозицииШтатногоРасписания.Период КАК Период,
ПозицииШтатногоРасписания.Организация КАК Организация,
ПозицииШтатногоРасписания.Подразделение КАК Подразделение,
ПозицииШтатногоРасписания.Должность КАК Должность,
ПозицииШтатногоРасписания.ТарифнаяСетка КАК ТарифнаяСетка,
ПозицииШтатногоРасписания.РазрядКатегория КАК РазрядКатегория,
ПозицииШтатногоРасписания.ТарифнаяСеткаНадбавки КАК ТарифнаяСеткаНадбавки,
ПозицииШтатногоРасписания.РазрядКатегорияНадбавки КАК РазрядКатегорияНадбавки,
ПозицииШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
ПозицииШтатногоРасписания.ГрафикРаботыСотрудников КАК ГрафикРаботы,
ПозицииШтатногоРасписания.КоличествоСтавок КАК КоличествоСтавок,
ПозицииШтатногоРасписания.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
ПозицииШтатногоРасписания.ОтношениеКЕНВД КАК ОтношениеКЕНВД,
ПозицииШтатногоРасписания.СтатьяФинансирования КАК СтатьяФинансирования,
ЕСТЬNULL(НачисленияСПоказателями.Размер, 0) КАК ФОТ,
ЕСТЬNULL(НачисленияСПоказателями.РазмерМин, 0) КАК ФОТМин,
ЕСТЬNULL(НачисленияСПоказателями.РазмерМакс, 0) КАК ФОТМакс,
ПозицииШтатногоРасписания.ОкладТариф КАК ОкладТариф,
ПозицииШтатногоРасписания.ОкладТарифМин КАК ОкладТарифМин,
ПозицииШтатногоРасписания.ОкладТарифМакс КАК ОкладТарифМакс,
ПозицииШтатногоРасписания.ФОТ КАК ФОТПозиции,
ПозицииШтатногоРасписания.ФОТМин КАК ФОТПозицииМин,
ПозицииШтатногоРасписания.ФОТМакс КАК ФОТПозицииМакс,
ПозицииШтатногоРасписания.ФОТПозиции КАК ФОТПоПозиции,
ПозицииШтатногоРасписания.ФОТПозицииМин КАК ФОТПоПозицииМин,
ПозицииШтатногоРасписания.ФОТПозицииМакс КАК ФОТПоПозицииМакс,
ПозицииШтатногоРасписания.РайонныйКоэффициент КАК РайонныйКоэффициент,
ВЫБОР
КОГДА ПозицииШтатногоРасписания.РайонныйКоэффициент > 1
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ПрименятьРайонныйКоэффициент,
ЕСТЬNULL(НачисленияСПоказателями.Начисление, ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка)) КАК Начисление,
ЕСТЬNULL(НачисленияСПоказателями.Показатель, ЗНАЧЕНИЕ(Справочник.ПоказателиРасчетаЗарплаты.ПустаяСсылка)) КАК Показатель,
ЕСТЬNULL(НачисленияСПоказателями.ЭтоТарифнаяСтавка, ЛОЖЬ) КАК ЭтоТарифнаяСтавка,
ЕСТЬNULL(НачисленияСПоказателями.Значение, 0) КАК Значение,
ЕСТЬNULL(НачисленияСПоказателями.ЗначениеМин, 0) КАК ЗначениеМин,
ЕСТЬNULL(НачисленияСПоказателями.ЗначениеМакс, 0) КАК ЗначениеМакс,
ПозицииШтатногоРасписания.ГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
ПОМЕСТИТЬ ПредставленияШтатноеРасписание
ИЗ
ВТПозицииШтатногоРасписания КАК ПозицииШтатногоРасписания
{ЛЕВОЕ СОЕДИНЕНИЕ ВТНачисленияСПоказателями КАК НачисленияСПоказателями
ПО ПозицииШтатногоРасписания.ПозицияШтатногоРасписания = НачисленияСПоказателями.ПозицияШтатногоРасписания}
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТНачисленияСПризнакомТарифнойСтавки
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТНачисленияСПоказателямиЗависящимиОтСтажа
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТПорядокОсновныхНачислений
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТНачисленияСПоказателями;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
&ДатаАктуальности КАК Период,
Сотрудники.Ссылка КАК Сотрудник
ПОМЕСТИТЬ ВТСотрудникиПериоды
ИЗ
Справочник.Сотрудники КАК Сотрудники
;ВЫБРАТЬ РАЗЛИЧНЫЕ
ТаблицаОтборов.Период КАК Период,
ТаблицаОтборов.Сотрудник КАК Сотрудник,
СправочникСотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
ВЫРАЗИТЬ(ТаблицаОтборов.Сотрудник КАК Справочник.Сотрудники).ГоловнойСотрудник КАК ГоловнойСотрудникТаблицыРазличных
ПОМЕСТИТЬ ВТОтборовРазличныхСотрудников
ИЗ
ВТСотрудникиПериоды КАК ТаблицаОтборов
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК СправочникСотрудники
ПО ТаблицаОтборов.Сотрудник = СправочникСотрудники.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЫБОР
КОГДА РегистрСведений.ПериодЗаписи = РегистрСведений.ДатаНачала
ТОГДА ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ КАК ЭтоВозвратноеСобытие,
РегистрСведений.ДатаОкончания КАК ДатаОкончания,
РегистрСведений.ДатаНачала КАК ДатаНачала,
РегистрСведений.Год КАК Год,
РегистрСведений.ПериодПредыдущейЗаписи КАК ПериодПредыдущейЗаписи,
ИзмеренияДаты.Сотрудник КАК Сотрудник,
РегистрСведений.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
ИзмеренияДаты.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо,
ИзмеренияДаты.Период КАК Период,
РегистрСведений.ДействуетДо КАК ПериодВозвратногоСобытия,
РегистрСведений.РегистраторСобытия КАК Регистратор,
РегистрСведений.РегистраторСобытия КАК РегистраторСобытия,
РегистрСведений.РегистраторЗаписи КАК РегистраторЗаписи,
РегистрСведений.ПериодЗаписи КАК ПериодЗаписи,
РегистрСведений.ПустойИнтервал КАК ПустойИнтервал,
РегистрСведений.Организация КАК Организация,
РегистрСведений.Подразделение КАК Подразделение,
РегистрСведений.Должность КАК Должность,
РегистрСведений.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
РегистрСведений.КоличествоСтавок КАК КоличествоСтавок,
РегистрСведений.ВидСобытия КАК ВидСобытия,
РегистрСведений.ВидДоговора КАК ВидДоговора,
РегистрСведений.ГоловнойСотрудник КАК ГоловнойСотрудник,
РегистрСведений.ЭтоГоловнойСотрудник КАК ЭтоГоловнойСотрудник
{ВЫБРАТЬ
Сотрудник,
ГоловнаяОрганизация,
ФизическоеЛицо,
Период,
ПериодВозвратногоСобытия,
Регистратор,
РегистраторСобытия,
РегистраторЗаписи,
ПериодЗаписи,
ПустойИнтервал,
Организация,
Подразделение,
Должность,
ДолжностьПоШтатномуРасписанию,
КоличествоСтавок,
ВидСобытия,
ВидДоговора,
ГоловнойСотрудник,
ЭтоГоловнойСотрудник}
ПОМЕСТИТЬ ПредставленияКадровыеДанныеСотрудников
ИЗ
ВТОтборовРазличныхСотрудников КАК ИзмеренияДаты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК РегистрСведений
ПО ((РегистрСведений.ДатаНачала <=
ВЫБОР
КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
ИНАЧЕ КОНЕЦПЕРИОДА(ИзмеренияДаты.Период,ДЕНЬ)
КОНЕЦ)
И (РегистрСведений.ДатаОкончания >=
ВЫБОР
КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
ИНАЧЕ КОНЕЦПЕРИОДА(ИзмеренияДаты.Период,ДЕНЬ)
КОНЕЦ))
И (РегистрСведений.Сотрудник = ИзмеренияДаты.Сотрудник)
И (РегистрСведений.ФизическоеЛицо = ИзмеренияДаты.Сотрудник.ФизическоеЛицо)
ИНДЕКСИРОВАТЬ ПО
Сотрудник
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТОтборовРазличныхСотрудников;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КадровыеДанные.Сотрудник КАК Сотрудник,
КадровыеДанные.Подразделение КАК Подразделение,
КадровыеДанные.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
ДанныеПозиций.ФОТПозиции КАК ФОТПозиции,
ДанныеПозиций.КоличествоСтавок КАК КоличествоСтавок,
ДанныеПозиций.ФОТПозицииМин КАК ФОТПозицииМин,
ДанныеПозиций.ФОТПозицииМакс КАК ФОТПозицииМакс,
ДанныеПозиций.РазрядКатегория КАК РазрядКатегория
ПОМЕСТИТЬ Финал
ИЗ
ПредставленияШтатноеРасписание КАК ДанныеПозиций
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПредставленияКадровыеДанныеСотрудников КАК КадровыеДанные
ПО ДанныеПозиций.ПозицияШтатногоРасписания = КадровыеДанные.ДолжностьПоШтатномуРасписанию
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Финал.Сотрудник КАК Сотрудник,
Финал.Подразделение КАК Подразделение,
Финал.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
Финал.ФОТПозиции КАК ФОТПозиции
ИЗ
Финал КАК Финал
Как видно выходных данных у нас немного, но запрос наш просто монстр. Да, он выполнится за одно обращение к базе но получит кучу ненужных данных. 1С-совесть спать не даст.. Полагаю, механизм замены представлений написан для отчетов, поэтому разработчики не заботились об оптимизации запроса, да и зачем? Если СКД сама это сделает. Так и поступит.
Создаем СКД программно, связываем с компоновщиком, компонуем макет.
СхемаКомпоновки = Новый СхемаКомпоновкиДанных;
ИсточникДанных = СхемаКомпоновки.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "local";
ИсточникДанных.ТипИсточникаДанных = "local";
НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.Имя = "НаборДанных1";
НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
НаборДанных.Запрос = Запрос.Текст;
КН = Новый КомпоновщикНастроекКомпоновкиДанных;
КН.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки));
ЗарплатаКадрыОбщиеНаборыДанных.ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц(СхемаКомпоновки.НаборыДанных.НаборДанных1.Запрос, СхемаКомпоновки);
ГруппировкаСотрудник = КН.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаСотрудник.Использование = Истина;
ПолеГруппировки = ГруппировкаСотрудник.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Использование = Истина;
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Сотрудник");
ВыбранноеПолеГруппировки = ГруппировкаСотрудник.Выбор.Элементы.Добавить(ТИП("ВыбранноеПолеКомпоновкиДанных"));
ПолеСотрудник = КН.Настройки.ДоступныеПоляВыбора.НайтиПоле(Новый ПолеКомпоновкиДанных("Сотрудник"));
ЗаполнитьЗначенияСвойств(ВыбранноеПолеГруппировки,ПолеСотрудник);
МассивИсключений = Новый Массив();
МассивИсключений.Добавить("Параметры");
МассивИсключений.Добавить("Системные поля");
Для каждого ДоступноеПоле Из КН.Настройки.ДоступныеПоляВыбора.Элементы Цикл
Если МассивИсключений.Найти(ДоступноеПоле.Заголовок) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ВыбранноеПолеОтчета = КН.Настройки.Выбор.Элементы.Добавить(ТИП("ВыбранноеПолеКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ВыбранноеПолеОтчета,ДоступноеПоле);
КонецЦикла;
ОтборПоСотруднику = КН.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборПоСотруднику.ВидСравнения=ВидСравненияКомпоновкиДанных.ВСписке;
ОтборПоСотруднику.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сотрудник");
ОтборПоСотруднику.ПравоеЗначение = Сотрудники;
ДетальныеЗаписи = ГруппировкаСотрудник.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ДетальныеЗаписи.Использование = Истина;
Автополе = ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Автополе.Использование = Истина;
КН.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаАктуальности", ТекущаяДатаСеанса());
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, КН.Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Запрос в макете компоновки заметно похудел.
ВЫБРАТЬ
МАКСИМУМ(ИсторияИспользованияШтатногоРасписания.Дата) КАК Дата,
ИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания
ПОМЕСТИТЬ ВТОтборПозицийШтатногоРасписания
ИЗ
РегистрСведений.ИсторияИспользованияШтатногоРасписания КАК ИсторияИспользованияШтатногоРасписания
ГДЕ
ИсторияИспользованияШтатногоРасписания.Дата <= &ДатаАктуальности
СГРУППИРОВАТЬ ПО
ИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТМин КАК ФОТМин,
РегистрСведенийИсторияИспользованияШтатногоРасписания.ФОТМакс КАК ФОТМакс
ПОМЕСТИТЬ ВТПозицииШтатногоРасписания
ИЗ
ВТОтборПозицийШтатногоРасписания КАК ОтборПозицийШтатногоРасписания
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияИспользованияШтатногоРасписания КАК РегистрСведенийИсторияИспользованияШтатногоРасписания
ПО ОтборПозицийШтатногоРасписания.ПозицияШтатногоРасписания = РегистрСведенийИсторияИспользованияШтатногоРасписания.ПозицияШтатногоРасписания
И ОтборПозицийШтатногоРасписания.Дата = РегистрСведенийИсторияИспользованияШтатногоРасписания.Дата
И (РегистрСведенийИсторияИспользованияШтатногоРасписания.Используется)
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТОтборПозицийШтатногоРасписания
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПозицииШтатногоРасписания.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
ПозицииШтатногоРасписания.ФОТМин КАК ФОТПозицииМин,
ПозицииШтатногоРасписания.ФОТМакс КАК ФОТПозицииМакс
ПОМЕСТИТЬ ПредставленияШтатноеРасписание
ИЗ
ВТПозицииШтатногоРасписания КАК ПозицииШтатногоРасписания
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
&ДатаАктуальности КАК Период,
Сотрудники.Ссылка КАК Сотрудник
ПОМЕСТИТЬ ВТСотрудникиПериоды
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
Сотрудники.Ссылка В (&П)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ТаблицаОтборов.Период КАК Период,
ТаблицаОтборов.Сотрудник КАК Сотрудник
ПОМЕСТИТЬ ВТОтборовРазличныхСотрудников
ИЗ
ВТСотрудникиПериоды КАК ТаблицаОтборов
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК СправочникСотрудники
ПО ТаблицаОтборов.Сотрудник = СправочникСотрудники.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ИзмеренияДаты.Сотрудник КАК Сотрудник,
РегистрСведений.Подразделение КАК Подразделение,
РегистрСведений.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию
ПОМЕСТИТЬ ПредставленияКадровыеДанныеСотрудников
ИЗ
ВТОтборовРазличныхСотрудников КАК ИзмеренияДаты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК РегистрСведений
ПО (РегистрСведений.ДатаНачала <= ВЫБОР
КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
ИНАЧЕ КОНЕЦПЕРИОДА(ИзмеренияДаты.Период, ДЕНЬ)
КОНЕЦ)
И (РегистрСведений.ДатаОкончания >= ВЫБОР
КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
ИНАЧЕ КОНЕЦПЕРИОДА(ИзмеренияДаты.Период, ДЕНЬ)
КОНЕЦ)
И (РегистрСведений.Сотрудник = ИзмеренияДаты.Сотрудник)
И (РегистрСведений.ФизическоеЛицо = ИзмеренияДаты.Сотрудник.ФизическоеЛицо)
ИНДЕКСИРОВАТЬ ПО
Сотрудник
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТОтборовРазличныхСотрудников
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КадровыеДанные.Сотрудник КАК Сотрудник,
КадровыеДанные.Подразделение КАК Подразделение,
КадровыеДанные.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
ДанныеПозиций.ФОТПозицииМин КАК ФОТПозицииМин,
ДанныеПозиций.ФОТПозицииМакс КАК ФОТПозицииМакс
ПОМЕСТИТЬ Финал
ИЗ
ПредставленияШтатноеРасписание КАК ДанныеПозиций
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПредставленияКадровыеДанныеСотрудников КАК КадровыеДанные
ПО ДанныеПозиций.ПозицияШтатногоРасписания = КадровыеДанные.ДолжностьПоШтатномуРасписанию
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Финал.Сотрудник КАК Сотрудник,
Финал.Подразделение КАК Подразделение,
Финал.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
Финал.ФОТПозицииМин КАК ФОТПозицииМин,
Финал.ФОТПозицииМакс КАК ФОТПозицииМакс
ИЗ
Финал КАК Финал
Отлично. Дальше дело вкуса. Можно вывести результат в коллекцию, можно получить выборку.
Конечно, и этот метод не идеален.
- Требуются дополнительные усилия по созданию СКД, тем более полностью программно.
- Получение макета компоновки, как правило, занимает много времени.
Однако , мне такой способ видится наиболее полезным.
Макет компоновки можно закешировать, как, тема не этой статьи, но способы оптимизации есть. Работа со схемой компоновки данных мне видится гораздо более полезной для опыта разработчика , нежели изучение дебрей ЗУП на предмет поиска способов вытащить данные. Здесь мы знаем лишь об одной функции ЗарплатаКадрыОбщиеНаборыДанных.ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц() И из нее, если нам надо, можем распутать клубок с процедурами по созданию временных таблиц. Да, эта функция тоже находится в служебном программном интерфейсе, но если разработчик ее переименует или изменит, будет проще разобраться в работе одной функции, чем искать, куда переехала СоздатьВТ из УправленияШтатнымРасписанием...
К статье прилагается обработка с примерами. Тестировалось на релизе Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.14.369).