Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
10 kB
0
Indexable
Never
Процедура РассчитатьНачисления(Регистратор, Движения) Экспорт
	
	НаборЗаписей = Движения.ОсновныеНачисления;
	РассчитатьОсновныеНачисления(Регистратор, НаборЗаписей);		
	НаборЗаписей.Записать(, Истина);
	
	ДопНаборЗаписей = Движения.ДополнительныеНачисления;
	РассчитатьДопНачисления(Регистратор, ДопНаборЗаписей);		
	ДопНаборЗаписей.Записать();
	
КонецПроцедуры

Процедура РассчитатьОсновныеНачисления(Регистратор, НаборЗаписей) 
	
	// РАСЧЕТ ОКЛАДА
	// Формула расчета: [Начальное значение оклада] / [Количество рабочих часов] * [Количество отработанных часов]
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ОсновныеНачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки,
	|	ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовФактическийПериодДействия, 0) КАК ЧасовФакт,
	|	ЕСТЬNULL(ЗначенияОклада.Оклад, 0) КАК Оклад,
	|	ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовПериодДействия, 0) КАК ЧасовПлан
	|ИЗ
	|	РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
	|			Регистратор = &Регистратор
	|				И ВидРасчета = &ВидРасчетаОклад) КАК ОсновныеНачисленияДанныеГрафика
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияОклада КАК ЗначенияОклада
	|		ПО ОсновныеНачисленияДанныеГрафика.Подразделение = ЗначенияОклада.Подразделение
	|			И ОсновныеНачисленияДанныеГрафика.КоличествоЧасовФактическийПериодДействия >= ЗначенияОклада.ЧасовОт
	|			И ОсновныеНачисленияДанныеГрафика.КоличествоЧасовФактическийПериодДействия < ЗначенияОклада.ЧасовДо";
	
	Запрос.УстановитьПараметр("Регистратор", Регистратор);
	Запрос.УстановитьПараметр("ВидРасчетаОклад", ПланыВидовРасчета.ОсновныеНачисления.Оклад);
	
	СтруктураПоиска = Новый Структура;
	СтруктураПоиска.Вставить("НомерСтроки", 0);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Для Каждого Запись Из НаборЗаписей Цикл
		СтруктураПоиска.НомерСтроки = Запись.НомерСтроки;
		Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда
			Запись.Результат = ?(Выборка.ЧасовПлан = 0, 0, Выборка.Оклад / Выборка.ЧасовПлан * Выборка.ЧасовФакт);
			Запись.ОтработаноЧасов = Выборка.ЧасовФакт;
		КонецЕсли;
		Выборка.Сбросить();
	КонецЦикла;
	
	
	// РАСЧЕТ ШТРАФА ЗА ОПОЗДАНИЕ
	// Формула расчета: [Количество пропущенных пятнадцитиминуток] * 100
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ОсновныеНачисленияДанныеГрафика.НомерСтроки,
	|	ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоПятнадцатиминутокФактическийПериодДействия, 0) КАК КоличествоПятнадцитиминуток
	|ИЗ
	|	РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
	|			Регистратор = &Регистратор
	|				И ВидРасчета = &ВидРасчетаШТрафЗаОпоздание) КАК ОсновныеНачисленияДанныеГрафика";
	
	Запрос.УстановитьПараметр("Регистратор", Регистратор);
	Запрос.УстановитьПараметр("ВидРасчетаШтрафЗаОпоздание", ПланыВидовРасчета.ОсновныеНачисления.ШтрафЗаОпоздание);
	
	СтруктураПоиска = Новый Структура;
	СтруктураПоиска.Вставить("НомерСтроки", 0);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Для Каждого Запись Из НаборЗаписей Цикл
		СтруктураПоиска.НомерСтроки = Запись.НомерСтроки;
		Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда
			Запись.Результат = Выборка.КоличествоПятнадцитиминуток * 100;
		КонецЕсли;
		Выборка.Сбросить();
	КонецЦикла;
	
КонецПроцедуры

Процедура РассчитатьДопНачисления(Регистратор, НаборЗаписей)
	
	// РАСЧЕТ НАДБАВКИ
	// Формула расчета: [Сумма продаж по подразделению] * [Процент надбавки]	
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ДополнительныеНачисления.Подразделение КАК Подразделение,
	|	ДополнительныеНачисления.ПроцентНадбавки КАК ПроцентНадбавки,
	|	ДополнительныеНачисления.НомерСтроки КАК НомерСтроки
	|ПОМЕСТИТЬ ВТ_ДополнительныеНачисления
	|ИЗ
	|	РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления
	|ГДЕ
	|	ДополнительныеНачисления.Регистратор = &Регистратор
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Подразделение
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ЕСТЬNULL(УправленческийОборотыДтКт.СуммаОборот, 0) КАК СуммаПродаж,
	|	ВТ_ДополнительныеНачисления.ПроцентНадбавки,
	|	ВТ_ДополнительныеНачисления.НомерСтроки
	|ИЗ
	|	ВТ_ДополнительныеНачисления КАК ВТ_ДополнительныеНачисления
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.ОборотыДтКт(
	|				&НачалоПериода,
	|				&КонецПериода,
	|				,
	|				СчетДт = &СчетПокупатели,
	|				,
	|				СчетКт = &СчетПрибыли,
	|				&Субконто,
	|				СубконтоКт1 В
	|					(ВЫБРАТЬ
	|						Т.Подразделение
	|					ИЗ
	|						ВТ_ДополнительныеНачисления КАК Т)) КАК УправленческийОборотыДтКт
	|		ПО ВТ_ДополнительныеНачисления.Подразделение = УправленческийОборотыДтКт.СубконтоКт1";
	
	Субконто = Новый Массив(1);
	Субконто[0] = ПланыВидовХарактеристик.ВидыСубконто.Подразделения;
	НачалоПериода = НачалоМесяца(ДобавитьМесяц(Регистратор.Дата, -1));	
	
	Запрос.УстановитьПараметр("Регистратор", Регистратор);
	Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
	Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(НачалоПериода));
	Запрос.УстановитьПараметр("СчетПокупатели", ПланыСчетов.Управленческий.Покупатели);
	Запрос.УстановитьПараметр("СчетПрибыли", ПланыСчетов.Управленческий.ПрибылиУбытки);
	Запрос.УстановитьПараметр("Субконто", Субконто);

	СтруктураПоиска = Новый Структура;
	СтруктураПоиска.Вставить("НомерСтроки", 0);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Для Каждого Запись Из НаборЗаписей Цикл
		СтруктураПоиска.НомерСтроки = Запись.НомерСтроки;
		Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда
			Запись.Результат = Выборка.СуммаПродаж * Выборка.ПроцентНадбавки / 100;
		КонецЕсли;
		Выборка.Сбросить();
	КонецЦикла;
	
КонецПроцедуры