helpf.pro
Регистрация
 0 
Распечатать

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

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

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