HelpF.pro

Полезные функции: Принятые и Уволенные, работающие сотрудники, Неполное рабочее время, Отпуск без ЗП

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

Код 1C v 8.х
 Функция ПолучитьКоличествоСотрудниковСНеполнымРабочимДнём(Запрос)
 
                Запрос.Текст =
                "ВЫБРАТЬ
                |             МАКСИМУМ(Работники.НеполноеРабочееВремя) КАК НеполноеРабочееВремя,
                |             Работники.Сотрудник КАК Сотрудник
                |ПОМЕСТИТЬ ВТ_СписокРаботниковНаНеполномРабочемГрафике
                |ИЗ
                |             (ВЫБРАТЬ
                |                             РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
                |                             РаботникиОрганизацийСрезПоследних.ГрафикРаботы.СокращенноеРабочееВремя КАК НеполноеРабочееВремя
                |             ИЗ
                |                             РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоПериода, Организация =Организация) КАК РаботникиОрганизацийСрезПоследних
                |             ГДЕ
                |                             РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
                |                             И РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
                |            
                |             ОБЪЕДИНИТЬ ВСЕ
                |            
                |             ВЫБРАТЬ
                |                             РаботникиОрганизаций.Сотрудник,
                |                             РаботникиОрганизаций.ГрафикРаботы.СокращенноеРабочееВремя
                |             ИЗ
                |                             РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
                |             ГДЕ
                |                             РаботникиОрганизаций.Период МЕЖДУНачалоПериода ИКонецПериода
                |                             И РаботникиОрганизаций.Организация =Организация
                |                             И РаботникиОрганизаций.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)) КАК Работники
                |ГДЕ
                |             Работники.НеполноеРабочееВремя
                |
                |СГРУППИРОВАТЬ ПО
                |             Работники.Сотрудник
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ
                |             КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СписокРаботниковНаНеполномРабочемГрафике.Сотрудник) КАК КоличествоСотрудниковНаСокрРабВремени
                |ИЗ
                |             ВТ_СписокРаботниковНаНеполномРабочемГрафике КАК ВТ_СписокРаботниковНаНеполномРабочемГрафике";
               
                Выборка = Запрос.Выполнить().Выбрать();
               
                Если Выборка.Следующий() Тогда
                               Возврат Выборка.КоличествоСотрудниковНаСокрРабВремени
                Иначе
                               Возврат 0
                КонецЕсли;
               
КонецФункции //ПолучитьКоличествоСотрудниковСНеполнымРабочимДнём()
 
Функция ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП(Запрос)
               
                Запрос.Текст =
                "ВЫБРАТЬ
                |             СостояниеРаботниковСрезПоследних.Сотрудник КАК Сотрудник
                |ПОМЕСТИТЬ ВТ_СотрудникиВОтпускахБезСохрЗП
                |ИЗ
                |             РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&НачалоПериода, Организация =Организация) КАК СостояниеРаботниковСрезПоследних
                |ГДЕ
                |             СостояниеРаботниковСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты)
                |             И ВЫБОР
                |                                             КОГДА СостояниеРаботниковСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
                |                                                            ТОГДА СостояниеРаботниковСрезПоследних.ПериодЗавершения >=НачалоПериода
                |                                             ИНАЧЕ ИСТИНА
                |                             КОНЕЦ
                |             И СостояниеРаботниковСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
                |
                |ОБЪЕДИНИТЬ ВСЕ
                |
                |ВЫБРАТЬ
                |             СостояниеРаботниковОрганизаций.Сотрудник
                |ИЗ
                |             РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций
                |ГДЕ
                |             СостояниеРаботниковОрганизаций.Период МЕЖДУНачалоПериода ИКонецПериода
                |             И СостояниеРаботниковОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты)
                |             И СостояниеРаботниковОрганизаций.Организация =Организация
                |             И СостояниеРаботниковОрганизаций.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ
                |             КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиВОтпускахБезСохрЗП.Сотрудник) КАК КоличествоСотрудниковВОтпускеБезСохраненияЗП
                |ИЗ
                |             ВТ_СотрудникиВОтпускахБезСохрЗП КАК ВТ_СотрудникиВОтпускахБезСохрЗП";
               
                Выборка = Запрос.Выполнить().Выбрать();
                Если Выборка.Следующий() Тогда
                               Возврат Выборка.КоличествоСотрудниковВОтпускеБезСохраненияЗП
                Иначе
                               Возврат 0
                КонецЕсли;
               
КонецФункции //ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП()
 
Функция ПолучитьКоличествоПринятыхСотрудников(Запрос)
               
                Запрос.Текст =
                "ВЫБРАТЬ
                |             ПриемНаРаботуВОрганизациюРаботникиОрганизации.Сотрудник
                |ПОМЕСТИТЬ ВТ_СотрудникиПринятыеПоПриемуНаРаботу
                |ИЗ
                |             Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ПриемНаРаботуВОрганизациюРаботникиОрганизации
                |ГДЕ
                |             ПриемНаРаботуВОрганизациюРаботникиОрганизации.ДатаПриема МЕЖДУНачалоПериода ИКонецПериода
                |             И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Проведен
                |             И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Организация =Организация
                |             И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ
                |             КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиПринятыеПоПриемуНаРаботу.Сотрудник) КАК КоличествоСотрудниковПринятыхНаРаботу
                |ИЗ
                |             ВТ_СотрудникиПринятыеПоПриемуНаРаботу КАК ВТ_СотрудникиПринятыеПоПриемуНаРаботу";
               
                Выборка = Запрос.Выполнить().Выбрать();
                Если Выборка.Следующий() Тогда
                               Возврат Выборка.КоличествоСотрудниковПринятыхНаРаботу
                Иначе
                               Возврат 0
                КонецЕсли;
 
КонецФункции //ПолучитьКоличествоПринятыхСотрудников()
 
Функция ПолучитьКоличествоУволенныхСотрудников(Запрос)
               
                Запрос.Текст =
                "ВЫБРАТЬ
                |             УвольнениеИзОрганизацийРаботникиОрганизации.Сотрудник
                |ПОМЕСТИТЬ ВТ_СотрудникиУволенные
                |ИЗ
                |             Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацийРаботникиОрганизации
                |ГДЕ
                |             УвольнениеИзОрганизацийРаботникиОрганизации.ДатаУвольнения МЕЖДУНачалоПериода ИКонецПериода
                |             И УвольнениеИзОрганизацийРаботникиОрганизации.Ссылка.Проведен
                |             И УвольнениеИзОрганизацийРаботникиОрганизации.Ссылка.Организация =Организация
                |             И УвольнениеИзОрганизацийРаботникиОрганизации.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ
                |             КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиУволенные.Сотрудник) КАК КоличествоУволенныхСотрудников
                |ИЗ
                |             ВТ_СотрудникиУволенные КАК ВТ_СотрудникиУволенные";
               
                Выборка = Запрос.Выполнить().Выбрать();
                Если Выборка.Следующий() Тогда
                               Возврат Выборка.КоличествоУволенныхСотрудников;         
                Иначе
                               Возврат 0
                КонецЕсли;
               
КонецФункции
 
Функция ПолучитьКоличествоСотрудниковСписочногоСостава(Запрос)
               
                Запрос.Текст =
                "ВЫБРАТЬ
                |             РаботникиОрганизацийСрезПоследних.Сотрудник
                |ПОМЕСТИТЬ ВТ_СотрудникиСписочногоСостава
                |ИЗ
                |             РегистрСведений.РаботникиОрганизаций.СрезПоследних(ДОБАВИТЬКДАТЕ(&КонецПериода, СЕКУНДА, 1), Организация =Организация) КАК РаботникиОрганизацийСрезПоследних
                |ГДЕ
                |             РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
                |             И (РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
                |             ИЛИ РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство))
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ
                |             КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиСписочногоСостава.Сотрудник) КАК КоличествоСотрудниковСписочногоСостава
                |ИЗ
                |             ВТ_СотрудникиСписочногоСостава КАК ВТ_СотрудникиСписочногоСостава";
               
                Выборка = Запрос.Выполнить().Выбрать();
                Если Выборка.Следующий() Тогда
                               Возврат Выборка.КоличествоСотрудниковСписочногоСостава;        
                Иначе
                               Возврат 0
                КонецЕсли;
               
КонецФункции
 
---------- Использование -------------------
 
Запрос = Новый Запрос;
                Запрос.УстановитьПараметр("Организация", Организация);
                Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(мДатаНачалаПериодаОтчета));
                Запрос.УстановитьПараметр("КонецПериода", КонецДня(мДатаКонцаПериодаОтчета));
               
                // Сотрудники с неполным рабочим днём
                СтруктураПолей.П0001000201 = ПолучитьКоличествоСотрудниковСНеполнымРабочимДнём(Запрос);
                              
                // Отпуска без сохранения зп
                СтруктураПолей.П0001000501 = ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП(Запрос);
               
                // Принятые сотрудники
                СтруктураПолей.П0001000601 = ПолучитьКоличествоПринятыхСотрудников(Запрос);
               
                // Выбывшие сотрудники
                СтруктураПолей.П0001000801 = ПолучитьКоличествоУволенныхСотрудников(Запрос);
                // По собственному желанию
                СтруктураПолей.П0001001201 = СтруктураПолей.П0001000801;
               
                // Количество сотрудников списочного состава на конец месяца
                СтруктураПолей.П0001001301 = ПолучитьКоличествоСотрудниковСписочногоСостава(Запрос);

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/1768.html