По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Так же есть обработка с зуп 2.5 / функция получитьКоэф(график,конКв)
запрос = новый запрос;
запрос.Текст =
"ВЫБРАТЬ
| СУММА(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение) КАК ДополнительноеЗначение,
| СУММА(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначениеНорма) КАК ДополнительноеЗначениеНорма
|ИЗ
| РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
|ГДЕ
| ГрафикиРаботыПоВидамВремени.ГрафикРаботы = &ГрафикРаботы
| И ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ &НачПериода И &КонПериода
| И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ВидУчетаВремени"
;
запрос.УстановитьПараметр("ГрафикРаботы", график);
запрос.УстановитьПараметр("НачПериода", началоКвартала(конКв));
запрос.УстановитьПараметр("КонПериода",конКв);
запрос.УстановитьПараметр("ВидУчетаВремени", перечисления.ВидыУчетаВремени.ПоДням);
рез = запрос.Выполнить().Выбрать();
если рез.Следующий() тогда
возврат ?(рез.ДополнительноеЗначениеНорма = 0,1, Окр(рез.ДополнительноеЗначение/рез.ДополнительноеЗначениеНорма,1) );
конецЕсли;
конецФункции
функция получитьОклад(сотрудник, конКв)
Запрос = Новый Запрос;
Запрос.Текст =
//"ВЫБРАТЬ
//| ПлановыеНачисленияРаботниковОрганизаций.Показатель1
//|ИЗ
//| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисленияРаботниковОрганизаций
//| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
//| МАКСИМУМ(ПлановыеНачисленияРаботниковОрганизаций.Период) КАК Период,
//| ПлановыеНачисленияРаботниковОрганизаций.Сотрудник КАК Сотрудник,
//| ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета КАК ВидРасчета
//| ИЗ
//| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисленияРаботниковОрганизаций
//| ГДЕ
//| ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета В(&ВидыРасчета)
//| И ПлановыеНачисленияРаботниковОрганизаций.Период <= &ДатаСреза
//| И ПлановыеНачисленияРаботниковОрганизаций.Сотрудник = &ссылка
//|
//| СГРУППИРОВАТЬ ПО
//| ПлановыеНачисленияРаботниковОрганизаций.Сотрудник,
//| ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета) КАК ВложенныйЗапрос
//| ПО ПлановыеНачисленияРаботниковОрганизаций.Период = ВложенныйЗапрос.Период
//| И ПлановыеНачисленияРаботниковОрганизаций.Сотрудник = ВложенныйЗапрос.Сотрудник
//| И ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета = ВложенныйЗапрос.ВидРасчета
//|ГДЕ
//| ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета В(&ВидыРасчета)
//| И ПлановыеНачисленияРаботниковОрганизаций.Сотрудник = &ссылка";
"ВЫБРАТЬ
| ПлановыеНачисленияСрезПоследних.Показатель1
|ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(
| &ДатаСреза,
| Сотрудник = &Ссылка) КАК ПлановыеНачисленияСрезПоследних
|ГДЕ
| ВЫБОР
| КОГДА ПлановыеНачисленияСрезПоследних.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| И ПлановыеНачисленияСрезПоследних.ДействиеЗавершения = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.ПустаяСсылка)
| ТОГДА ЛОЖЬ
| КОГДА ПлановыеНачисленияСрезПоследних.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| И ПлановыеНачисленияСрезПоследних.ДействиеЗавершения <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.ПустаяСсылка)
| И &ДатаСреза < ПлановыеНачисленияСрезПоследних.ПериодЗавершения
| ТОГДА ЛОЖЬ
| КОГДА ПлановыеНачисленияСрезПоследних.ДействиеЗавершения = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| И &ДатаСреза >= ПлановыеНачисленияСрезПоследних.ПериодЗавершения
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ПлановыеНачисленияСрезПоследних.ВидРасчета В(&ВидыРасчета)";
Запрос.УстановитьПараметр("ДатаСреза", ?( значениеЗаполнено(сотрудник.датаУвольнения),сотрудник.датаУвольнения - 1,конКв));
Запрос.УстановитьПараметр("Ссылка", сотрудник);
список = новый списокЗначений;
список.Добавить(планыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням);
список.Добавить(планыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоЧасам);
запрос.УстановитьПараметр("ВидыРасчета", список);
рез = Запрос.Выполнить().Выбрать();
стрРег = регистрыСведений.РаботникиОрганизаций.ПолучитьПоследнее(?( значениеЗаполнено(сотрудник.датаУвольнения),сотрудник.датаУвольнения - 1,конКв), новый структура("Сотрудник",сотрудник));
коэфГрафика = 1;
если не стрРег.Количество() = 0 тогда
график = стрРег.ГрафикРаботы;
ставка = 1;
если график.наименование = "Суммированный учет" или стрРег.ЗанимаемыхСтавок<>1 и график.наименование = "Основной график" тогда /// у них оклад стоит полный, оплата регулируется отработанными часами по табелю
ставка = стрРег.ЗанимаемыхСтавок;
конецЕсли;
коэфГрафика = получитьКоэф(график, конКв) * ставка;
конецЕсли;
если рез.Следующий() тогда
//сообщить(""+сотрудник+" "+рез.показатель1+ " "+ коэфГрафика );
возврат рез.показатель1*коэфГрафика;
иначе
конецЕсли;
КонецФункции
процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) экспорт
для каждого стр из объект.ДополнительныеНачисления цикл
если не стр.Авторасчет тогда
продолжить;
конецЕсли;
начКв = началоКвартала(стр.ДатаНачала) ;
конКв = конецКвартала(стр.ДатаОкончания) ;
днейКв = Цел((конКв-начКв) /(60*60*24))+1;
стр.показатель1 = получитьОклад(стр.сотрудник, конКв);
если стр.датаНачала <> начКв или конецДня(стр.ДатаОкончания) <> конКв или стр.результат = 0 тогда
дней =Цел((конецДня(стр.ДатаОкончания) - стр.ДатаНачала) /(60*60*24))+1;
Иначе
дней=днейКв;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА СостояниеРаботниковОрганизаций.Период < &НачалоКвартала
| ТОГДА &НачалоКвартала
| ИНАЧЕ СостояниеРаботниковОрганизаций.Период
| КОНЕЦ КАК НачалоНеявки,
| СостояниеРаботниковОрганизаций.Сотрудник КАК Сотрудник,
| ВЫБОР
| КОГДА СостояниеРаботниковОрганизаций.ПериодЗавершения > &КонецКвартала
| ТОГДА &КонецКвартала
| ИНАЧЕ ДОБАВИТЬКДАТЕ(СостояниеРаботниковОрганизаций.ПериодЗавершения, ДЕНЬ, -1)
| КОНЕЦ КАК КонецНеявки,
| СостояниеРаботниковОрганизаций.Состояние
|ПОМЕСТИТЬ Неявки
|ИЗ
| РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций
|ГДЕ
| (СостояниеРаботниковОрганизаций.ПериодЗавершения >= &НачалоКвартала
| И СостояниеРаботниковОрганизаций.ПериодЗавершения <= &КонецКвартала
| ИЛИ СостояниеРаботниковОрганизаций.Период >= &НачалоКвартала
| И СостояниеРаботниковОрганизаций.Период <= &КонецКвартала
| ИЛИ СостояниеРаботниковОрганизаций.Период <= &НачалоКвартала
| И СостояниеРаботниковОрганизаций.ПериодЗавершения >= &КонецКвартала)
| И СостояниеРаботниковОрганизаций.Сотрудник = &Сотрудник
| И СостояниеРаботниковОрганизаций.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Заболевание)
| И СостояниеРаботниковОрганизаций.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Работает)
| И СостояниеРаботниковОрганизаций.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Командировка)
| И СостояниеРаботниковОрганизаций.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтсутствуетПоНевыясненнойПричине)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА СостояниеРаботниковОрганизацийБолеет.Период < &НачалоКвартала
| ТОГДА &НачалоКвартала
| ИНАЧЕ СостояниеРаботниковОрганизацийБолеет.Период
| КОНЕЦ,
| СостояниеРаботниковОрганизацийБолеет.Сотрудник,
| МИНИМУМ(ВЫБОР
| КОГДА ДОБАВИТЬКДАТЕ(СостояниеРаботниковОрганизаций.Период, ДЕНЬ, -1) > &КонецКвартала
| ИЛИ ЕСТЬNULL(СостояниеРаботниковОрганизаций.Период, 0) = 0
| ТОГДА &КонецКвартала
| ИНАЧЕ ДОБАВИТЬКДАТЕ(СостояниеРаботниковОрганизаций.Период, ДЕНЬ, -1)
| КОНЕЦ),
| СостояниеРаботниковОрганизацийБолеет.Состояние
|ИЗ
| РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизацийБолеет
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций
| ПО СостояниеРаботниковОрганизацийБолеет.Сотрудник = СостояниеРаботниковОрганизаций.Сотрудник
| И (ВЫБОР
| КОГДА СостояниеРаботниковОрганизацийБолеет.Период < &НачалоКвартала
| ТОГДА &НачалоКвартала
| ИНАЧЕ СостояниеРаботниковОрганизацийБолеет.Период
| КОНЕЦ < ВЫБОР
| КОГДА ДОБАВИТЬКДАТЕ(СостояниеРаботниковОрганизаций.Период, ДЕНЬ, -1) > &КонецКвартала
| ТОГДА &КонецКвартала
| ИНАЧЕ ДОБАВИТЬКДАТЕ(СостояниеРаботниковОрганизаций.Период, ДЕНЬ, -1)
| КОНЕЦ)
| И (СостояниеРаботниковОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Работает))
| И (СостояниеРаботниковОрганизаций.Период >= &НачалоКвартала
| И СостояниеРаботниковОрганизаций.Период <= &КонецКвартала
| ИЛИ СостояниеРаботниковОрганизацийБолеет.Период >= &НачалоКвартала
| И СостояниеРаботниковОрганизацийБолеет.Период <= &КонецКвартала
| ИЛИ СостояниеРаботниковОрганизацийБолеет.Период <= &НачалоКвартала
| И СостояниеРаботниковОрганизаций.Период >= &КонецКвартала)
|ГДЕ
| СостояниеРаботниковОрганизацийБолеет.Сотрудник = &Сотрудник
| И СостояниеРаботниковОрганизацийБолеет.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Заболевание)
| И СостояниеРаботниковОрганизацийБолеет.Период <= &КонецКвартала
| И СостояниеРаботниковОрганизацийБолеет.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| И НЕ(ЕСТЬNULL(СостояниеРаботниковОрганизаций.Период, 0) = 0
| И СостояниеРаботниковОрганизацийБолеет.Период < &НачалоКвартала)
|
|СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА СостояниеРаботниковОрганизацийБолеет.Период < &НачалоКвартала
| ТОГДА &НачалоКвартала
| ИНАЧЕ СостояниеРаботниковОрганизацийБолеет.Период
| КОНЕЦ,
| СостояниеРаботниковОрганизацийБолеет.Сотрудник,
| СостояниеРаботниковОрганизацийБолеет.Состояние
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА СостояниеРаботниковОрганизаций.Период < &НачалоКвартала
| ТОГДА &НачалоКвартала
| ИНАЧЕ СостояниеРаботниковОрганизаций.Период
| КОНЕЦ,
| СостояниеРаботниковОрганизаций.Сотрудник,
| &КонецКвартала,
| СостояниеРаботниковОрганизаций.Состояние
|ИЗ
| РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций
|ГДЕ
| СостояниеРаботниковОрганизаций.Период <= &КонецКвартала
| И СостояниеРаботниковОрганизаций.Сотрудник = &Сотрудник
| И СостояниеРаботниковОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтсутствуетПоНевыясненнойПричине)
| И СостояниеРаботниковОрганизаций.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Неявки.Сотрудник,
| Неявки.НачалоНеявки,
| Неявки.КонецНеявки,
| Неявки.Состояние,
| РАЗНОСТЬДАТ(Неявки.НачалоНеявки, Неявки.КонецНеявки, ДЕНЬ) + 1 КАК КоличествоДнейНеявок
|ПОМЕСТИТЬ ТаблКолНеявок
|ИЗ
| Неявки КАК Неявки
|ГДЕ
| ЕСТЬNULL(Неявки.Сотрудник, 0) <> 0
| И Неявки.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускЕжегодный)
| И Неявки.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускУчебный)
| И Неявки.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускУчебныйНеоплачиваемый)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Неявки.Сотрудник,
| Неявки.НачалоНеявки,
| Неявки.КонецНеявки,
| Неявки.Состояние,
| СУММА(ВЫБОР
| КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня <> ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ)
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Неявки КАК Неявки
| ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= Неявки.НачалоНеявки
| И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= Неявки.КонецНеявки
|ГДЕ
| ЕСТЬNULL(Неявки.Сотрудник, 0) <> 0
| И (Неявки.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускЕжегодный)
| ИЛИ Неявки.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускУчебный)
| ИЛИ Неявки.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускУчебныйНеоплачиваемый))
|
|СГРУППИРОВАТЬ ПО
| Неявки.Сотрудник,
| Неявки.НачалоНеявки,
| Неявки.КонецНеявки,
| Неявки.Состояние
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ТаблКолНеявок.Сотрудник,
| СУММА(ТаблКолНеявок.КоличествоДнейНеявок) КАК КоличествоНеявок
|ИЗ
| ТаблКолНеявок КАК ТаблКолНеявок
|
|СГРУППИРОВАТЬ ПО
| ТаблКолНеявок.Сотрудник";
Запрос.УстановитьПараметр("НачалоКвартала", стр.ДатаНачала);
Запрос.УстановитьПараметр("КонецКвартала", стр.ДатаОкончания);
Запрос.УстановитьПараметр("Сотрудник", стр.Сотрудник);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
КоличествоНеявок=ВыборкаДетальныеЗаписи.КоличествоНеявок;
Если НЕ ЗначениеЗаполнено(КоличествоНеявок) Тогда
КоличествоНеявок=0;
КонецЕсли;
стр.результат = стр.показатель1 / днейКв * ?( дней<КоличествоНеявок,0,(дней-КоличествоНеявок));
конецЦикла;
конецПроцедуры
Показать
(9) https://its.1c.ru/db/staff1c#content:33653:zup30 вот тут про премии написано.Учесть в принципе думаю можно приемы и увольнение.
Вопрос оклад который берем,это оклад который посчитали?Или который полагается?Если первый варинта тут проще.Приемы и увольнения не нужны.Если второй вариант,как быть если он менялся в этом промежутке времени.
Вопрос оклад который берем,это оклад который посчитали?Или который полагается?Если первый варинта тут проще.Приемы и увольнения не нужны.Если второй вариант,как быть если он менялся в этом промежутке времени.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот