ЗУП 3.1: Квартальная премия

1. user1029657 06.11.18 14:24 Сейчас в теме
Народ подскажите хочу сделать квартальную премию в зуп 3.1 вопрос????как сделать оклад:90*отработанных календарных дней в квартале???????? есть обработка с зуп 2.5
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. solodovnikov.84 11 07.11.18 16:15 Сейчас в теме
(1)ВремяВДнях / НормаДней
6. solodovnikov.84 11 07.11.18 17:53 Сейчас в теме
(1)(Оклад / Процент) * ВремяВДнях / НормаДней

В принципе все показателями настраивается.

Формула у вас конечно странная.Оклад делить на процент.И результат брать пропорционально отработанному времени?
2. user633533_encantado 11 06.11.18 14:38 Сейчас в теме
Ну так в чем проблема: заводим новое начисление, задаем формулу типа "(Оклад /90) * ВремяВДнях", указываем , что ее будем платить только в конце квартала и все.
user705522_constantin_h; +1 Ответить
3. user1029657 07.11.18 14:21 Сейчас в теме
проблема в том как указать чтоб не учитывались отпуска больничные дата приема дата увольнения и тд
solodovnikov.84; +1 Ответить
5. user1029657 07.11.18 17:03 Сейчас в теме
Так же есть обработка с зуп 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,(дней-КоличествоНеявок));
		
	конецЦикла;
	
конецПроцедуры
Показать
7. user1029657 08.11.18 09:06 Сейчас в теме
теперь нужно чтоб учитывались ( минусовались) отпуска больничные дата приема дата увольнения и тд и
8. solodovnikov.84 11 08.11.18 09:09 Сейчас в теме
(7)Если я не ошибаюсь.Документ премия не учитывает прием и увольнение.Так придется дописывать расчет.А вытеснения больничным,отпуском и прочие настраиваются в самом виде расчета.
9. user1029657 08.11.18 09:14 Сейчас в теме
без увольнения и приема,просто настройка,можете подсказать как сделать настройку?
10. solodovnikov.84 11 08.11.18 10:27 Сейчас в теме
(9) https://its.1c.ru/db/staff1c#content:33653:zup30 вот тут про премии написано.Учесть в принципе думаю можно приемы и увольнение.
Вопрос оклад который берем,это оклад который посчитали?Или который полагается?Если первый варинта тут проще.Приемы и увольнения не нужны.Если второй вариант,как быть если он менялся в этом промежутке времени.
11. user1029657 08.11.18 10:43 Сейчас в теме
12. user1029657 08.11.18 10:51 Сейчас в теме
суть в том что у нас не стандартный расчет премии из за чего и проблемы,полная премия начисляется в размере оклада если сотрудник отработал квартал без отпусков больничных и тд.
13. Nadushka74 5 08.11.18 11:06 Сейчас в теме
(12) ?(норма времени = отработанному, оклад, 0)
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день