В сервисе 1С по учете ошибок давно задержалась вот эта, за № 20173978 от 27.10.2023.
Отчет в органы статистики по Форме П4 (НЗ).
Суть ошибки в следующем. По законодательству РФ сотрудник уволившийся и вновь трудоустроенный в организацию в пределах отчетного периода (квартала) не попадает в вышеуказанный отчет, как выбывший сотрудник. Но то же самое законодательство установило нормой, что сотрудник, трудоустроенный по совместительству, не считается трудоустроенным. Вряд ли так часто случается событие, что уволенного с основного рабочего места сотрудника через неделю-месяц приняли обратно, да ещё и по совместительству, но когда уж такое произойдет, то отчет сформируется с ошибкой.
Не очень понятно, почему так долго зарегистрированная ошибка продолжает оставаться неразрешенной, но устраняется это одной дополнительной строчкой в запросе. Что я и сделал.
Функция ВнешнийИсточникСтатистикиФормыП4НЗ(ПараметрыОтчета)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("НачалоПериода", ПараметрыОтчета.ДатаНачалаПериодаОтчета);
Запрос.УстановитьПараметр("КонецПериода", ПараметрыОтчета.ДатаКонцаПериодаОтчета);
ИсключитьДанныеОбособленныхПодразделений = Ложь;
Если Не ПараметрыОтчета.Свойство("ИсключитьДанныеОбособленныхПодразделений", ИсключитьДанныеОбособленныхПодразделений) Тогда
ИсключитьДанныеОбособленныхПодразделений = Ложь
КонецЕсли;
Подразделение = Справочники.ПодразделенияОрганизаций.ПустаяСсылка();
Если Не ПараметрыОтчета.Свойство("ОбособленноеПодразделение", Подразделение) Тогда
Подразделение = Справочники.ПодразделенияОрганизаций.ПустаяСсылка()
КонецЕсли;
МассивПодразделений = ПодразделенияИсключения(ПараметрыОтчета.Организация, Подразделение, ИсключитьДанныеОбособленныхПодразделений);
ИспользоватьШтатноеРасписание = ПолучитьФункциональнуюОпцию("ИспользоватьШтатноеРасписание");
// Сотрудники по организации
ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудников.Организация = ПараметрыОтчета.Организация;
ПараметрыПолученияСотрудников.НачалоПериода = ПараметрыОтчета.ДатаНачалаПериодаОтчета;
ПараметрыПолученияСотрудников.ОкончаниеПериода = ПараметрыОтчета.ДатаКонцаПериодаОтчета;
Если МассивПодразделений.Количество() > 0 Тогда
Отборы = Новый Массив;
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "Подразделение", ?(ИсключитьДанныеОбособленныхПодразделений, "НЕ В", "В"), МассивПодразделений);
ПараметрыПолученияСотрудников.Отборы = Отборы;
КонецЕсли;
СотрудникиДляОтбора = Новый Массив;
Если ПараметрыОтчета.Свойство("СотрудникиДляОтбора", СотрудникиДляОтбора) Тогда
ПараметрыПолученияСотрудников.СписокФизическихЛиц = СотрудникиДляОтбора;
КонецЕсли;
ИмяВТСотрудникиОрганизации = "ВТСотрудникиОрганизацииДляСтатистикиФормыП4НЗ";
КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц, Ложь, ПараметрыПолученияСотрудников, ИмяВТСотрудникиОрганизации);
// Рабочие места сотрудников
// Уволенные в последний день периода должны включаться в отчет, поэтому увеличим период на 1 день.
Запрос.Текст =
"ВЫБРАТЬ
| СотрудникиОрганизации.Сотрудник,
| &НачалоПериода КАК НачалоПериода,
| ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, 1) КАК ОкончаниеПериода
|ПОМЕСТИТЬ ВТСотрудникиРабочиеМеста
|ИЗ
| #СотрудникиОрганизации КАК СотрудникиОрганизации";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "#СотрудникиОрганизации", ИмяВТСотрудникиОрганизации);
Запрос.Выполнить();
ПараметрыПолученияРабочихМест = КадровыйУчет.ПараметрыДляЗапросВТРабочиеМестаСотрудниковПоВременнойТаблице("ВТСотрудникиРабочиеМеста", "Сотрудник", "НачалоПериода", "ОкончаниеПериода");
ПараметрыПолученияРабочихМест.Организация = ПараметрыОтчета.Организация;
Если МассивПодразделений.Количество() > 0 Тогда
Отборы = Новый Массив;
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "Подразделение", ?(ИсключитьДанныеОбособленныхПодразделений, "НЕ В", "В"), МассивПодразделений);
ПараметрыПолученияРабочихМест.Отборы = Отборы;
КонецЕсли;
КадровыйУчет.СоздатьВТРабочиеМестаСотрудниковПоВременнойТаблице(Запрос.МенеджерВременныхТаблиц, Ложь, ПараметрыПолученияРабочихМест);
// Из увеличенного периода нужно оставить только уволенных, также нужно убрать уволенных на первый день периода,
// т.к. они должны войти в предыдущий период.
Запрос.Текст =
"ВЫБРАТЬ
| РабочиеМестаСотрудников.Сотрудник,
| РабочиеМестаСотрудников.Период
|ПОМЕСТИТЬ ВТСотрудникиКадровыеДанные
|ИЗ
| ВТРабочиеМестаСотрудников КАК РабочиеМестаСотрудников
|ГДЕ
| (РабочиеМестаСотрудников.Период МЕЖДУ &НачалоПериода И &КонецПериода
| И РабочиеМестаСотрудников.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
| ИЛИ РабочиеМестаСотрудников.Период МЕЖДУ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, 1) И ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, 1)
| И РабочиеМестаСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение))";
Запрос.Выполнить();
// Кадровые данные по рабочим местам сотрудников
ОписательВременныхТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(
Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиКадровыеДанные");
КадровыеДанные = "Организация, ВидСобытия, ВидЗанятости, ПриказОбУвольненииСтатьяТКРФ, ГрафикРаботы, КоличествоСтавок, ДолжностьПоШтатномуРасписанию, Пол, ДатаПриема, ДатаУвольнения";
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, Ложь, КадровыеДанные);
Если ИспользоватьШтатноеРасписание Тогда
// Сведения по позициям штатного расписания
ПараметрыПостроения = УправлениеШтатнымРасписанием.ПараметрыПостроенияВТШтатноеРасписаниеПоТаблицеФильтра("ВТКадровыеДанныеСотрудников");
ПараметрыПостроения.ИмяПоляПозицияШтатногоРасписания = "ДолжностьПоШтатномуРасписанию";
УправлениеШтатнымРасписанием.СоздатьВТПозицииШтатногоРасписанияПоВременнойТаблице(
Запрос.МенеджерВременныхТаблиц, Ложь, ПараметрыПостроения, "КоличествоСтавок", "ВТПозицииШтатногоРасписания");
ПараметрыПостроения = УправлениеШтатнымРасписанием.ПараметрыПостроенияВТШтатноеРасписание(
ПараметрыОтчета.ДатаКонцаПериодаОтчета, ПараметрыОтчета.Организация);
Если МассивПодразделений.Количество() > 0 Тогда
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПостроения.Отборы, "Подразделение", ?(ИсключитьДанныеОбособленныхПодразделений, "НЕ В", "В"), МассивПодразделений);
КонецЕсли;
УправлениеШтатнымРасписанием.СоздатьВТШтатноеРасписание(
Запрос.МенеджерВременныхТаблиц, Ложь, ПараметрыПостроения, "Должность,ТрудоваяФункция,КоличествоСтавок,Занято", "ВТПозицииШтатногоРасписанияНаКонецПериода");
Иначе
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 0
| NULL КАК ПозицияШтатногоРасписания,
| ДАТАВРЕМЯ(1, 1, 1) КАК Дата
|ПОМЕСТИТЬ ВТПозицииШтатногоРасписания
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ ПЕРВЫЕ 0
| NULL КАК ПозицияШтатногоРасписания,
| ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
| ЗНАЧЕНИЕ(Справочник.ТрудовыеФункции.ПустаяСсылка) КАК ТрудоваяФункция,
| 0 КАК КоличествоСтавок,
| 0 КАК Занято
|ПОМЕСТИТЬ ВТПозицииШтатногоРасписанияНаКонецПериода";
Запрос.Выполнить();
КонецЕсли;
// Состояния сотрудников
Запрос.Текст =
"ВЫБРАТЬ
| СотрудникиОрганизации.Сотрудник,
| &НачалоПериода КАК ДатаНачала,
| &КонецПериода КАК ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудникиПериодыСостояний
|ИЗ
| #СотрудникиОрганизации КАК СотрудникиОрганизации";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "#СотрудникиОрганизации", ИмяВТСотрудникиОрганизации);
Запрос.Выполнить();
СостоянияСотрудников.СоздатьВТПериодыСостоянийСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиПериодыСостояний");
// Сотрудники, работавшие не полное рабочее время
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, ПараметрыОтчета.ДатаНачалаПериодаОтчета, ПараметрыОтчета.ДатаКонцаПериодаОтчета, "День");
Запрос.Текст =
"ВЫБРАТЬ
| КадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
| КадровыеДанныеСотрудников.Период КАК ДатаНачала,
| ЕСТЬNULL(МИНИМУМ(КадровыеДанныеСотрудниковВспомогательные.Период), &КонецПериода) КАК ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудникиРаботавшиеНеполноеРабочееВремяВременно
|ИЗ
| ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудниковВспомогательные
| ПО КадровыеДанныеСотрудников.Сотрудник = КадровыеДанныеСотрудниковВспомогательные.Сотрудник
| И КадровыеДанныеСотрудников.Период < КадровыеДанныеСотрудниковВспомогательные.Период
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГрафикиРаботыСотрудников КАК ГрафикиРаботыСотрудников
| ПО КадровыеДанныеСотрудников.ГрафикРаботы = ГрафикиРаботыСотрудников.Ссылка
|ГДЕ
| (КадровыеДанныеСотрудников.КоличествоСтавок < 1
| ИЛИ ГрафикиРаботыСотрудников.НеполноеРабочееВремя)
|
|СГРУППИРОВАТЬ ПО
| КадровыеДанныеСотрудников.Сотрудник,
| КадровыеДанныеСотрудников.Период
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПериодыСостоянийСотрудников.Сотрудник КАК Сотрудник,
| ПериодыСостоянийСотрудников.Начало КАК ДатаНачала,
| ВЫБОР
| КОГДА ПериодыСостоянийСотрудников.Окончание = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА ПериодыСостоянийСотрудников.ОкончаниеПредположительно
| ИНАЧЕ ПериодыСостоянийСотрудников.Окончание
| КОНЕЦ КАК ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудникиВОтпускеПоУходу
|ИЗ
| ВТПериодыСостоянийСотрудников КАК ПериодыСостоянийСотрудников
|ГДЕ
| ПериодыСостоянийСотрудников.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.ОтпускПоУходуЗаРебенком)
| И (ПериодыСостоянийСотрудников.Окончание = ДАТАВРЕМЯ(1, 1, 1)
| ИЛИ ПериодыСостоянийСотрудников.Окончание >= &КонецПериода)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СотрудникиРаботавшиеНеполноеРабочееВремя.Сотрудник КАК Сотрудник,
| Периоды.Период КАК Дата
|ПОМЕСТИТЬ ВТДниНеполногоРабочегоВремени
|ИЗ
| ВТПериоды КАК Периоды
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСотрудникиРаботавшиеНеполноеРабочееВремяВременно КАК СотрудникиРаботавшиеНеполноеРабочееВремя
| ПО (Периоды.Период МЕЖДУ СотрудникиРаботавшиеНеполноеРабочееВремя.ДатаНачала И СотрудникиРаботавшиеНеполноеРабочееВремя.ДатаОкончания)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПериодыСостоянийСотрудников КАК ПериодыСостоянийСотрудников
| ПО (СотрудникиРаботавшиеНеполноеРабочееВремя.Сотрудник = ПериодыСостоянийСотрудников.Сотрудник)
| И (ПериодыСостоянийСотрудников.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Работа)
| ИЛИ ПериодыСостоянийСотрудников.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.РаботаВОтпускеПоУходуЗаРебенком))
| И (Периоды.Период МЕЖДУ ПериодыСостоянийСотрудников.Начало И ВЫБОР
| КОГДА ПериодыСостоянийСотрудников.Окончание = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА &КонецПериода
| ИНАЧЕ ПериодыСостоянийСотрудников.Окончание
| КОНЕЦ)
|ГДЕ
| СотрудникиРаботавшиеНеполноеРабочееВремя.Сотрудник ЕСТЬ НЕ NULL
| И ПериодыСостоянийСотрудников.Сотрудник ЕСТЬ НЕ NULL
|
|СГРУППИРОВАТЬ ПО
| СотрудникиРаботавшиеНеполноеРабочееВремя.Сотрудник,
| Периоды.Период
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДниНеполногоРабочегоВремени.Сотрудник КАК Сотрудник,
| КОЛИЧЕСТВО(ДниНеполногоРабочегоВремени.Дата) КАК КоличествоДней
|ПОМЕСТИТЬ ВТСотрудникиРаботавшиеНеполноеРабочееВремяПредварительно
|ИЗ
| ВТДниНеполногоРабочегоВремени КАК ДниНеполногоРабочегоВремени
|
|СГРУППИРОВАТЬ ПО
| ДниНеполногоРабочегоВремени.Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВТПериоды";
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| &КонецПериода КАК Период,
| КадровыеДанныеСотрудников.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТОтбораСотрудников
|ИЗ
| ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСотрудникиВОтпускеПоУходу КАК СотрудникиВОтпускеПоУходу
| ПО КадровыеДанныеСотрудников.Сотрудник = СотрудникиВОтпускеПоУходу.Сотрудник
| И (КадровыеДанныеСотрудников.Пол = ЗНАЧЕНИЕ(Перечисление.ПолФизическогоЛица.Женский))
|
|СГРУППИРОВАТЬ ПО
| КадровыеДанныеСотрудников.Сотрудник";
Запрос.Выполнить();
// Отпуска по уходу за ребенком
Отборы = Новый Массив;
Запрос.Текст =
"ВЫБРАТЬ
| Начисления.Ссылка КАК Начисление
|ИЗ
| ПланВидовРасчета.Начисления КАК Начисления
|ГДЕ
| Начисления.КатегорияНачисленияИлиНеоплаченногоВремени = ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ПособиеПоУходуЗаРебенкомДоПолутораЛет)";
Отборы.Добавить(Новый Структура("ЛевоеЗначение,ВидСравнения,ПравоеЗначение",
"Начисление", "В", Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Начисление")));
ОтборыНачислений = Новый Структура("ПлановыеНачисления", ОбщегоНазначения.СкопироватьРекурсивно(Отборы));
ЗапросВТПлановыеНачисления = КадровыйУчетРасширенный.ЗапросВТПлановыеНачисленияСотрудников(
Истина, "ВТПлановыеНачисленияСотрудниковДоПолутораЛетПредварительно", "ВТОтбораСотрудников", "Сотрудник,Период", ОтборыНачислений);
ЗапросВТПлановыеНачисления.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
ЗапросВТПлановыеНачисления.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПлановыеНачисленияСотрудниковДоПолутораЛет.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТПлановыеНачисленияСотрудниковДоПолутораЛет
|ИЗ
| ВТПлановыеНачисленияСотрудниковДоПолутораЛетПредварительно КАК ПлановыеНачисленияСотрудниковДоПолутораЛет
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ПО ПлановыеНачисленияСотрудниковДоПолутораЛет.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
|ГДЕ
| КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПлановыеНачисленияСотрудниковДоПолутораЛет.Сотрудник КАК Сотрудник
|ИЗ
| ВТПлановыеНачисленияСотрудниковДоПолутораЛет КАК ПлановыеНачисленияСотрудниковДоПолутораЛет";
ПлановыеНачисленияСотрудниковДоПолутораЛет = Запрос.Выполнить().Выгрузить();
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТСотрудникиВОтпускеПоУходу.Сотрудник КАК Сотрудник
|ИЗ
| ВТСотрудникиВОтпускеПоУходу КАК ВТСотрудникиВОтпускеПоУходу
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПлановыеНачисленияСотрудниковДоПолутораЛет КАК ПлановыеНачисленияСотрудниковДоПолутораЛет
| ПО ВТСотрудникиВОтпускеПоУходу.Сотрудник = ПлановыеНачисленияСотрудниковДоПолутораЛет.Сотрудник
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ПО ВТСотрудникиВОтпускеПоУходу.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
| И (КадровыеДанныеСотрудников.Пол = ЗНАЧЕНИЕ(Перечисление.ПолФизическогоЛица.Женский))
|ГДЕ
| КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
| И ПлановыеНачисленияСотрудниковДоПолутораЛет.Сотрудник ЕСТЬ NULL
| И ВТСотрудникиВОтпускеПоУходу.ДатаОкончания >= &КонецПериода
| И ВТСотрудникиВОтпускеПоУходу.ДатаНачала <= &КонецПериода";
СотрудникиВОтпускеДоТрехЛет = Запрос.Выполнить().Выгрузить();
// Сотрудники, находившиеся в простое
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПериодыСостоянийСотрудников.Сотрудник
|ИЗ
| ВТПериодыСостоянийСотрудников КАК ПериодыСостоянийСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ПО ПериодыСостоянийСотрудников.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
|ГДЕ
| КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
| И (ПериодыСостоянийСотрудников.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.ПростойНеЗависящийОтРаботодателяИРаботника)
| ИЛИ ПериодыСостоянийСотрудников.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.ПростойПоВинеРаботодателя))";
СотрудникиВПростое = Запрос.Выполнить().Выгрузить();
// Сотрудники, находившиеся в отпуске без оплаты
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПериодыСостоянийСотрудников.Сотрудник,
| СУММА(РАЗНОСТЬДАТ(ПериодыСостоянийСотрудников.Начало, ВЫБОР
| КОГДА ПериодыСостоянийСотрудников.Окончание = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА ПериодыСостоянийСотрудников.ОкончаниеПредположительно
| ИНАЧЕ ПериодыСостоянийСотрудников.Окончание
| КОНЕЦ, ДЕНЬ) + 1) КАК КоличествоДней
|ПОМЕСТИТЬ ВТСотрудникиВОтпускеБезОплатыПредварительно
|ИЗ
| ВТПериодыСостоянийСотрудников КАК ПериодыСостоянийСотрудников
|ГДЕ
| (ПериодыСостоянийСотрудников.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.ОтпускНеоплачиваемыйПоРазрешениюРаботодателя)
| ИЛИ ПериодыСостоянийСотрудников.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.ОтпускНеоплачиваемыйПоЗаконодательству))
|
|СГРУППИРОВАТЬ ПО
| ПериодыСостоянийСотрудников.Сотрудник";
Запрос.Выполнить();
// Сотрудник показывается один раз по строке 02 или 05, исходя из причины его работы неполное рабочее время
// или нахождения в отпуске без сохранения заработной платы большую часть времени в квартале.
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СотрудникиРаботавшиеНеполноеРабочееВремя.Сотрудник
|ИЗ
| ВТСотрудникиРаботавшиеНеполноеРабочееВремяПредварительно КАК СотрудникиРаботавшиеНеполноеРабочееВремя
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ПО СотрудникиРаботавшиеНеполноеРабочееВремя.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСотрудникиВОтпускеБезОплатыПредварительно КАК СотрудникиВОтпускеБезОплаты
| ПО СотрудникиРаботавшиеНеполноеРабочееВремя.Сотрудник = СотрудникиВОтпускеБезОплаты.Сотрудник
|ГДЕ
| КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
| И (СотрудникиРаботавшиеНеполноеРабочееВремя.КоличествоДней >= СотрудникиВОтпускеБезОплаты.КоличествоДней
| ИЛИ СотрудникиВОтпускеБезОплаты.Сотрудник ЕСТЬ NULL )";
СотрудникиРаботавшиеНеполноеРабочееВремя = Запрос.Выполнить().Выгрузить();
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СотрудникиВОтпускеБезОплаты.Сотрудник
|ИЗ
| ВТСотрудникиВОтпускеБезОплатыПредварительно КАК СотрудникиВОтпускеБезОплаты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ПО СотрудникиВОтпускеБезОплаты.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСотрудникиРаботавшиеНеполноеРабочееВремяПредварительно КАК СотрудникиРаботавшиеНеполноеРабочееВремя
| ПО СотрудникиВОтпускеБезОплаты.Сотрудник = СотрудникиРаботавшиеНеполноеРабочееВремя.Сотрудник
|ГДЕ
| КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
| И (СотрудникиВОтпускеБезОплаты.КоличествоДней > СотрудникиРаботавшиеНеполноеРабочееВремя.КоличествоДней
| ИЛИ СотрудникиРаботавшиеНеполноеРабочееВремя.Сотрудник ЕСТЬ NULL )";
СотрудникиВОтпускеБезОплаты = Запрос.Выполнить().Выгрузить();
// Сотрудники, работавшие вахтовым методом
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, ПараметрыОтчета.ДатаНачалаПериодаОтчета, ПараметрыОтчета.ДатаКонцаПериодаОтчета, "Месяц");
Запрос.Текст =
"ВЫБРАТЬ
| СотрудникиПериоды.Сотрудник,
| &КонецПериода КАК ДатаАктуальности,
| Периоды.Период КАК Месяц,
| НАЧАЛОПЕРИОДА(Периоды.Период, МЕСЯЦ) КАК ДатаНачала,
| КОНЕЦПЕРИОДА(Периоды.Период, МЕСЯЦ) КАК ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудникиДляРасчетаВремени
|ИЗ
| ВТСотрудникиПериодыСостояний КАК СотрудникиПериоды
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПериоды КАК Периоды
| ПО (Периоды.Период МЕЖДУ СотрудникиПериоды.ДатаНачала И СотрудникиПериоды.ДатаОкончания)";
Запрос.Выполнить();
ПараметрыПолученияДанныхОВремени = УчетРабочегоВремениРасширенный.ПараметрыДляСоздатьВТДанныеУчетаРабочегоВремениСотрудников();
ПараметрыПолученияДанныхОВремени.ИмяВТСотрудники = "ВТСотрудникиДляРасчетаВремени";
ПараметрыПолученияДанныхОВремени.ДатаНачала = ПараметрыОтчета.ДатаНачалаПериодаОтчета;
ПараметрыПолученияДанныхОВремени.ДатаОкончания = ПараметрыОтчета.ДатаКонцаПериодаОтчета;
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников(Запрос.МенеджерВременныхТаблиц, Ложь, ПараметрыПолученияДанныхОВремени);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеУчетаРабочегоВремениСотрудников.Сотрудник
|ИЗ
| ВТДанныеУчетаРабочегоВремениСотрудников КАК ДанныеУчетаРабочегоВремениСотрудников
|ГДЕ
| ДанныеУчетаРабочегоВремениСотрудников.ВидУчетаВремени = ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.Вахта)
|
|СГРУППИРОВАТЬ ПО
| ДанныеУчетаРабочегоВремениСотрудников.Сотрудник";
СотрудникиВахта = Запрос.Выполнить().Выгрузить();
Если ПараметрыОтчета.ДатаНачалаПериодаОтчета >= '20230101' Тогда
// После вступления в силу Приказа Росстата от 29.07.2022 № 532:
// Находим сотрудников, у которых дата приема и дата увольнения в одном квартале,
// Помечаем, что они не для расчета численности приемов и увольнений.
// Находим сотрудников, которые были уволены и приняты в одном квартале
// (одинаковое физ.лицо и дата приема больше или равна дате увольнения).
// Помечаем и такие строки с приемом и увольнением в таблице кадровых данных.
Запрос.Текст =
"ВЫБРАТЬ
| КадровыеДанныеСотрудников.Организация КАК Организация,
| КадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| КадровыеДанныеСотрудников.ВидЗанятости КАК ВидЗанятости,
| КадровыеДанныеСотрудников.ВидСобытия КАК ВидСобытия,
| КадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
| КадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения,
| КадровыеДанныеСотрудников.ПриказОбУвольненииСтатьяТКРФ КАК ПриказОбУвольненииСтатьяТКРФ,
| КадровыеДанныеСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| КадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
| ВЫБОР
| КОГДА КадровыеДанныеСотрудников.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Прием)
| И КадровыеДанныеСотрудников.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
| ИЛИ НЕ(КадровыеДанныеСотрудников.ДатаПриема >= &НачалоПериода
| И КадровыеДанныеСотрудников.ДатаПриема <= &КонецПериода
| И (КадровыеДанныеСотрудников.ДатаУвольнения >= &НачалоПериода
| И КадровыеДанныеСотрудников.ДатаУвольнения <= &КонецПериода))
| ИЛИ КВАРТАЛ(КадровыеДанныеСотрудников.ДатаПриема) <> КВАРТАЛ(КадровыеДанныеСотрудников.ДатаУвольнения)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ИспользоватьДляПодсчета
|ПОМЕСТИТЬ ВТКадровыеДанныеСотрудниковБезПриемаУвольнения
|ИЗ
| ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТКадровыеДанныеСотрудниковПрием.Организация КАК Организация,
| ВТКадровыеДанныеСотрудниковПрием.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| ВТКадровыеДанныеСотрудниковПрием.ВидЗанятости КАК ВидЗанятости,
| ВТКадровыеДанныеСотрудниковПрием.ВидСобытия КАК ВидСобытия,
| ВТКадровыеДанныеСотрудниковПрием.ДатаПриема КАК ДатаПриема,
| ВТКадровыеДанныеСотрудниковПрием.ДатаУвольнения КАК ДатаУвольнения,
| ВТКадровыеДанныеСотрудниковПрием.ПриказОбУвольненииСтатьяТКРФ КАК ПриказОбУвольненииСтатьяТКРФ,
| ВТКадровыеДанныеСотрудниковПрием.ФизическоеЛицо КАК ФизическоеЛицо,
| ВТКадровыеДанныеСотрудниковПрием.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТПриемСУвольнением
|ИЗ
| ВТКадровыеДанныеСотрудниковБезПриемаУвольнения КАК ВТКадровыеДанныеСотрудниковПрием
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудниковБезПриемаУвольнения КАК ВТКадровыеДанныеСотрудниковУвольнение
| ПО (ВТКадровыеДанныеСотрудниковПрием.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Прием))
| И (ВТКадровыеДанныеСотрудниковУвольнение.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение))
| И ВТКадровыеДанныеСотрудниковПрием.Организация = ВТКадровыеДанныеСотрудниковУвольнение.Организация
| И ВТКадровыеДанныеСотрудниковПрием.ФизическоеЛицо = ВТКадровыеДанныеСотрудниковУвольнение.ФизическоеЛицо
| И ВТКадровыеДанныеСотрудниковПрием.ДатаПриема >= ВТКадровыеДанныеСотрудниковУвольнение.ДатаУвольнения
|ГДЕ
| КВАРТАЛ(ВТКадровыеДанныеСотрудниковПрием.ДатаПриема) = КВАРТАЛ(ВТКадровыеДанныеСотрудниковУвольнение.ДатаУвольнения)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТКадровыеДанныеСотрудниковУвольнение.Организация КАК Организация,
| ВТКадровыеДанныеСотрудниковУвольнение.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| ВТКадровыеДанныеСотрудниковУвольнение.ВидЗанятости КАК ВидЗанятости,
| ВТКадровыеДанныеСотрудниковУвольнение.ВидСобытия КАК ВидСобытия,
| ВТКадровыеДанныеСотрудниковУвольнение.ДатаПриема КАК ДатаПриема,
| ВТКадровыеДанныеСотрудниковУвольнение.ДатаУвольнения КАК ДатаУвольнения,
| ВТКадровыеДанныеСотрудниковУвольнение.ПриказОбУвольненииСтатьяТКРФ КАК ПриказОбУвольненииСтатьяТКРФ,
| ВТКадровыеДанныеСотрудниковУвольнение.ФизическоеЛицо КАК ФизическоеЛицо,
| ВТКадровыеДанныеСотрудниковУвольнение.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТУвольнениеСПриемом
|ИЗ
| ВТКадровыеДанныеСотрудниковБезПриемаУвольнения КАК ВТКадровыеДанныеСотрудниковУвольнение
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудниковБезПриемаУвольнения КАК ВТКадровыеДанныеСотрудниковПрием
| ПО (ВТКадровыеДанныеСотрудниковПрием.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Прием))
| И (ВТКадровыеДанныеСотрудниковУвольнение.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение))
// +++ Климушкин Д.Ю. 25.07.2024
// Сотрудники, уволенные и вновь принятые с видом занятости "Совместительство" (внешнее или внутреннее) будут учитываться при
// подсчете сотрудников, уволенных за отчетный период. Совместительство это не трудоустройство.
| И (НЕ ВТКадровыеДанныеСотрудниковПрием.ВидЗанятости В (ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.Совместительство), ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ВнутреннееСовместительство)))
//\\ --- Климушкин Д.Ю. 25.07.2024
| И ВТКадровыеДанныеСотрудниковУвольнение.Организация = ВТКадровыеДанныеСотрудниковПрием.Организация
| И ВТКадровыеДанныеСотрудниковУвольнение.ФизическоеЛицо = ВТКадровыеДанныеСотрудниковПрием.ФизическоеЛицо
| И ВТКадровыеДанныеСотрудниковУвольнение.ДатаУвольнения <= ВТКадровыеДанныеСотрудниковПрием.ДатаПриема
|ГДЕ
| КВАРТАЛ(ВТКадровыеДанныеСотрудниковПрием.ДатаПриема) = КВАРТАЛ(ВТКадровыеДанныеСотрудниковУвольнение.ДатаУвольнения)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТКадровыеДанныеСотрудников.Организация КАК Организация,
| ВТКадровыеДанныеСотрудников.ВидЗанятости КАК ВидЗанятости,
| ВТКадровыеДанныеСотрудников.ВидСобытия КАК ВидСобытия,
| ВТКадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
| ВТКадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения,
| ВТКадровыеДанныеСотрудников.ПриказОбУвольненииСтатьяТКРФ КАК ПриказОбУвольненииСтатьяТКРФ,
| ВТКадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
| &НачалоПериода КАК НачалоПериода,
| &КонецПериода КАК КонецПериода,
| ВТКадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| ВТПриемСУвольнением.ФизическоеЛицо КАК ФизическоеЛицоПриемУвольнение,
| ВТУвольнениеСПриемом.ФизическоеЛицо КАК ФизическоеЛицоУвольнениеПрием,
| ВЫБОР
| КОГДА НЕ ВТПриемСУвольнением.Сотрудник ЕСТЬ NULL
| ИЛИ НЕ ВТУвольнениеСПриемом.Сотрудник ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ВТКадровыеДанныеСотрудников.ИспользоватьДляПодсчета
| КОНЕЦ КАК ИспользоватьДляПодсчета
|ПОМЕСТИТЬ ВТКадровыеДанныеСотрудниковДляОтбора
|ИЗ
| ВТКадровыеДанныеСотрудниковБезПриемаУвольнения КАК ВТКадровыеДанныеСотрудников
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПриемСУвольнением КАК ВТПриемСУвольнением
| ПО ВТКадровыеДанныеСотрудников.Организация = ВТПриемСУвольнением.Организация
| И ВТКадровыеДанныеСотрудников.ВидЗанятости = ВТПриемСУвольнением.ВидЗанятости
| И ВТКадровыеДанныеСотрудников.ВидСобытия = ВТПриемСУвольнением.ВидСобытия
| И ВТКадровыеДанныеСотрудников.ДатаПриема = ВТПриемСУвольнением.ДатаПриема
| И ВТКадровыеДанныеСотрудников.ФизическоеЛицо = ВТПриемСУвольнением.ФизическоеЛицо
| И ВТКадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию = ВТПриемСУвольнением.ДолжностьПоШтатномуРасписанию
| ЛЕВОЕ СОЕДИНЕНИЕ ВТУвольнениеСПриемом КАК ВТУвольнениеСПриемом
| ПО ВТКадровыеДанныеСотрудников.Организация = ВТУвольнениеСПриемом.Организация
| И ВТКадровыеДанныеСотрудников.ВидЗанятости = ВТУвольнениеСПриемом.ВидЗанятости
| И ВТКадровыеДанныеСотрудников.ВидСобытия = ВТУвольнениеСПриемом.ВидСобытия
| И ВТКадровыеДанныеСотрудников.ДатаПриема = ВТУвольнениеСПриемом.ДатаПриема
| И ВТКадровыеДанныеСотрудников.ДатаУвольнения = ВТУвольнениеСПриемом.ДатаУвольнения
| И ВТКадровыеДанныеСотрудников.ПриказОбУвольненииСтатьяТКРФ = ВТУвольнениеСПриемом.ПриказОбУвольненииСтатьяТКРФ
| И ВТКадровыеДанныеСотрудников.ФизическоеЛицо = ВТУвольнениеСПриемом.ФизическоеЛицо
| И ВТКадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию = ВТУвольнениеСПриемом.ДолжностьПоШтатномуРасписанию
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВТКадровыеДанныеСотрудников
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТКадровыеДанныеСотрудниковДляОтбора.Организация КАК Организация,
| ВТКадровыеДанныеСотрудниковДляОтбора.ВидЗанятости КАК ВидЗанятости,
| ВТКадровыеДанныеСотрудниковДляОтбора.ВидСобытия КАК ВидСобытия,
| ВТКадровыеДанныеСотрудниковДляОтбора.ДатаПриема КАК ДатаПриема,
| ВТКадровыеДанныеСотрудниковДляОтбора.ДатаУвольнения КАК ДатаУвольнения,
| ВТКадровыеДанныеСотрудниковДляОтбора.ПриказОбУвольненииСтатьяТКРФ КАК ПриказОбУвольненииСтатьяТКРФ,
| ВТКадровыеДанныеСотрудниковДляОтбора.Сотрудник КАК Сотрудник,
| ВТКадровыеДанныеСотрудниковДляОтбора.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| ВТКадровыеДанныеСотрудниковДляОтбора.ИспользоватьДляПодсчета КАК ИспользоватьДляПодсчета
|ПОМЕСТИТЬ ВТКадровыеДанныеСотрудников
|ИЗ
| ВТКадровыеДанныеСотрудниковДляОтбора КАК ВТКадровыеДанныеСотрудниковДляОтбора
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВТКадровыеДанныеСотрудниковБезПриемаУвольнения
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВТПриемСУвольнением
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВТУвольнениеСПриемом
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВТКадровыеДанныеСотрудниковДляОтбора";
Иначе
Запрос.Текст =
"ВЫБРАТЬ
| КадровыеДанныеСотрудников.Организация КАК Организация,
| КадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| КадровыеДанныеСотрудников.ВидЗанятости КАК ВидЗанятости,
| КадровыеДанныеСотрудников.ВидСобытия КАК ВидСобытия,
| КадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
| КадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения,
| КадровыеДанныеСотрудников.ПриказОбУвольненииСтатьяТКРФ КАК ПриказОбУвольненииСтатьяТКРФ,
| КадровыеДанныеСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| КадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
| ИСТИНА КАК ИспользоватьДляПодсчета
|ПОМЕСТИТЬ ВТКадровыеДанныеСотрудниковДляОтбора
|ИЗ
| ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВТКадровыеДанныеСотрудников
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТКадровыеДанныеСотрудниковДляОтбора.Организация КАК Организация,
| ВТКадровыеДанныеСотрудниковДляОтбора.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| ВТКадровыеДанныеСотрудниковДляОтбора.ВидЗанятости КАК ВидЗанятости,
| ВТКадровыеДанныеСотрудниковДляОтбора.ВидСобытия КАК ВидСобытия,
| ВТКадровыеДанныеСотрудниковДляОтбора.ДатаПриема КАК ДатаПриема,
| ВТКадровыеДанныеСотрудниковДляОтбора.ДатаУвольнения КАК ДатаУвольнения,
| ВТКадровыеДанныеСотрудниковДляОтбора.ПриказОбУвольненииСтатьяТКРФ КАК ПриказОбУвольненииСтатьяТКРФ,
| ВТКадровыеДанныеСотрудниковДляОтбора.ФизическоеЛицо КАК ФизическоеЛицо,
| ВТКадровыеДанныеСотрудниковДляОтбора.Сотрудник КАК Сотрудник,
| ВТКадровыеДанныеСотрудниковДляОтбора.ИспользоватьДляПодсчета КАК ИспользоватьДляПодсчета
|ПОМЕСТИТЬ ВТКадровыеДанныеСотрудников
|ИЗ
| ВТКадровыеДанныеСотрудниковДляОтбора КАК ВТКадровыеДанныеСотрудниковДляОтбора
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВТКадровыеДанныеСотрудниковДляОтбора";
КонецЕсли;
Запрос.Выполнить();
// Данные сотрудников
Запрос.Текст =
"ВЫБРАТЬ
| КадровыеДанныеСотрудников.Организация КАК Организация,
| КадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
| КадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию КАК ПозицияШтатногоРасписания,
| ВЫБОР
| КОГДА КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
| И КадровыеДанныеСотрудников.ИспользоватьДляПодсчета
| И КадровыеДанныеСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Прием)
| И (КадровыеДанныеСотрудников.ДатаПриема МЕЖДУ &НачалоПериода И &КонецПериода)
| ТОГДА КадровыеДанныеСотрудников.Сотрудник
| КОНЕЦ КАК ЧисленностьПринятыхВПериоде,
| ВЫБОР
| КОГДА КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
| И КадровыеДанныеСотрудников.ИспользоватьДляПодсчета
| И КадровыеДанныеСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Прием)
| И (КадровыеДанныеСотрудников.ДатаПриема МЕЖДУ &НачалоПериода И &КонецПериода)
| И (ШтатноеРасписание.ДатаУтверждения МЕЖДУ &НачалоПериода И &КонецПериода)
| ТОГДА КадровыеДанныеСотрудников.Сотрудник
| КОНЕЦ КАК ЧисленностьПринятыхВПериодеНаНовуюПозицию,
| ВЫБОР
| КОГДА КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
| И КадровыеДанныеСотрудников.ИспользоватьДляПодсчета
| И КадровыеДанныеСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
| И (КадровыеДанныеСотрудников.ДатаУвольнения МЕЖДУ &НачалоПериода И &КонецПериода)
| ТОГДА КадровыеДанныеСотрудников.Сотрудник
| КОНЕЦ КАК ЧисленностьУволенныхВПериоде,
| ВЫБОР
| КОГДА КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
| И КадровыеДанныеСотрудников.ИспользоватьДляПодсчета
| И КадровыеДанныеСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
| И КадровыеДанныеСотрудников.ПриказОбУвольненииСтатьяТКРФ = ЗНАЧЕНИЕ(Справочник.ОснованияУвольнения.Статья77п1)
| И (КадровыеДанныеСотрудников.ДатаУвольнения МЕЖДУ &НачалоПериода И &КонецПериода)
| ТОГДА КадровыеДанныеСотрудников.Сотрудник
| КОНЕЦ КАК ЧисленностьУволенныхПоСоглашениюСторон,
| ВЫБОР
| КОГДА КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
| И КадровыеДанныеСотрудников.ИспользоватьДляПодсчета
| И КадровыеДанныеСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
| И КадровыеДанныеСотрудников.ПриказОбУвольненииСтатьяТКРФ = ЗНАЧЕНИЕ(Справочник.ОснованияУвольнения.Статья81п2)
| И (КадровыеДанныеСотрудников.ДатаУвольнения МЕЖДУ &НачалоПериода И &КонецПериода)
| ТОГДА КадровыеДанныеСотрудников.Сотрудник
| КОНЕЦ КАК ЧисленностьУволенныхВСвязиССокращением,
| ВЫБОР
| КОГДА КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
| И КадровыеДанныеСотрудников.ИспользоватьДляПодсчета
| И КадровыеДанныеСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
| И КадровыеДанныеСотрудников.ПриказОбУвольненииСтатьяТКРФ = ЗНАЧЕНИЕ(Справочник.ОснованияУвольнения.Статья77п3)
| И (КадровыеДанныеСотрудников.ДатаУвольнения МЕЖДУ &НачалоПериода И &КонецПериода)
| ТОГДА КадровыеДанныеСотрудников.Сотрудник
| КОНЕЦ КАК ЧисленностьУволенныхПоСобственномуЖеланию,
| КадровыеДанныеСотрудников.ВидЗанятости КАК ВидЗанятости,
| КадровыеДанныеСотрудников.ВидСобытия КАК ВидСобытия,
| КадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
| КадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения,
| КадровыеДанныеСотрудников.ПриказОбУвольненииСтатьяТКРФ КАК ПриказОбУвольненииСтатьяТКРФ,
| &НачалоПериода КАК НачалоПериода,
| &КонецПериода КАК КонецПериода,
| КадровыеДанныеСотрудников.ИспользоватьДляПодсчета КАК ИспользоватьДляПодсчета
|ИЗ
| ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШтатноеРасписание КАК ШтатноеРасписание
| ПО КадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию = ШтатноеРасписание.Ссылка";
ДанныеСотрудников = Запрос.Выполнить().Выгрузить();
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПозицииШтатногоРасписанияНаКонецПериода.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания,
| ВЫБОР
| КОГДА ЕСТЬNULL(ПозицииШтатногоРасписанияНаКонецПериода.КоличествоСтавок, 0) - ЕСТЬNULL(ПозицииШтатногоРасписанияНаКонецПериода.Занято, 0) > 0
| ТОГДА ЕСТЬNULL(ПозицииШтатногоРасписанияНаКонецПериода.КоличествоСтавок, 0) - ЕСТЬNULL(ПозицииШтатногоРасписанияНаКонецПериода.Занято, 0)
| ИНАЧЕ 0
| КОНЕЦ КАК Вакансии,
| ВЫБОР
| КОГДА ПозицииШтатногоРасписанияНаКонецПериода.ТрудоваяФункция = ЗНАЧЕНИЕ(Справочник.ТрудовыеФункции.ПустаяСсылка)
| ТОГДА ПозицииШтатногоРасписанияНаКонецПериода.Должность.ТрудоваяФункция.КодПоОКЗ.Код
| ИНАЧЕ ПозицииШтатногоРасписанияНаКонецПериода.ТрудоваяФункция.КодПоОКЗ.Код
| КОНЕЦ КАК ДолжностьОКЗКод
|ИЗ
| ВТПозицииШтатногоРасписанияНаКонецПериода КАК ПозицииШтатногоРасписанияНаКонецПериода";
ПозицииШтатногоРасписанияНаКонецПериода = Запрос.Выполнить().Выгрузить();
ВнешниеНаборыДанных=Новый Структура;
ВнешниеНаборыДанных.Вставить("ДанныеСотрудников", ДанныеСотрудников);
ВнешниеНаборыДанных.Вставить("ПозицииШтатногоРасписанияНаКонецПериода", ПозицииШтатногоРасписанияНаКонецПериода);
ВнешниеНаборыДанных.Вставить("СотрудникиРаботавшиеНеполноеРабочееВремя", СотрудникиРаботавшиеНеполноеРабочееВремя);
ВнешниеНаборыДанных.Вставить("СотрудникиВОтпускеБезОплаты", СотрудникиВОтпускеБезОплаты);
ВнешниеНаборыДанных.Вставить("СотрудникиВПростое", СотрудникиВПростое);
ВнешниеНаборыДанных.Вставить("СотрудникиВахта", СотрудникиВахта);
ВнешниеНаборыДанных.Вставить("СотрудникиВОтпускеДоПолутораЛет", ПлановыеНачисленияСотрудниковДоПолутораЛет);
ВнешниеНаборыДанных.Вставить("СотрудникиВОтпускеДоТрехЛет", СотрудникиВОтпускеДоТрехЛет);
Возврат ВнешниеНаборыДанных;
КонецФункции
Даже нечего больше написать - просто пользуйтесь)