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