Данные среднего заработка, остатка отпусков, резерва отпусков
Теги: 1С,ЗУП 3

Получить данные среднего заработка, остатка отпусков, резерва отпусков в ЗУП 3

# Код реализации

```1c
&НаСервере
Процедура ПолучитьДанныеСреднегоЗаработкаНаСервере()

	ДатаОтпуска     = Дата(2018,01,01);

	//Расчетный год отпуска
	ДатаНачала         = Дата(2017,01,01);
	ДатаОкончания     = Дата(2017,12,31);

	ИсходнаяТаблица = УчетСреднегоЗаработка.ПустаяТаблицаИсходныхДанныхРасчетаОбщегоСреднегоЗаработка();
	мПараметры = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
	мПараметры.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "0000000000");
	мПараметры.НачалоПериода     		= ДатаОтпуска;
	мПараметры.ОкончаниеПериода    	= ДатаОтпуска;
	//мПараметры.КадровыеДанные       	= "Подразделение";

	ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
				мПараметры.Отборы, "ФизическоеЛицо", "=", Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иванович"));

	// 1. получаем сотрудников организации

	СотрудникиОрганизации = КадровыйУчет.СотрудникиОрганизации(Истина, мПараметры);

	// 2. получаем средний заработок сотрудников

	СотрудникиОрганизации.Колонки.Добавить("СреднийЗаработок", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
	СотрудникиОрганизации.Колонки.Добавить("ОстатокОтпуска", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(4, 0)));
	СотрудникиОрганизации.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));

	ОграничитьКоличество = 10;
	// получем данные для расчета среднего
	СтрокиКУдалению = Новый Массив;
	Индекс = 1;

	Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
		Если Индекс <= ОграничитьКоличество Тогда
			СтрокаТаблицы = ИсходнаяТаблица.Добавить();
			СтрокаТаблицы.Сотрудник                         = СтрокаСотрудник.Сотрудник;
			СтрокаТаблицы.ПорядокРасчета                     = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
			СтрокаТаблицы.ДатаНачалаСобытия                 = ДатаОтпуска;
			СтрокаТаблицы.НачалоПериодаРасчетаСреднего         = ДатаНачала;
			СтрокаТаблицы.ОкончаниеПериодаРасчетаСреднего     = ДатаОкончания;
			Индекс = Индекс + 1;
		Иначе
			СтрокиКУдалению.Добавить(СтрокаСотрудник);
		КонецЕсли;
	КонецЦикла;

	Для каждого пСтрока из СтрокиКУдалению Цикл
		СотрудникиОрганизации.Удалить(пСтрока);
	КонецЦикла;

	ДанныеДляРасчета = УчетСреднегоЗаработка.ДанныеДляРасчетаОбщегоСреднегоЗаработкаСотрудников(ИсходнаяТаблица, Неопределено, Неопределено, Истина);

	Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл

		Отбор = Новый Структура("Сотрудник",СтрокаСотрудник.Сотрудник);

		ДанныеОВремени         = ДанныеДляРасчета.ДанныеОВремени;
		ДанныеОНачислениях     = ДанныеДляРасчета.ДанныеОНачислениях;
		ДанныеОбИндексации     = ДанныеДляРасчета.ДанныеОбИндексации;

		ДанныеДляРасчетаСотрудник = Новый Структура("ДанныеОВремени,ДанныеОНачислениях,ДанныеОбИндексации");

		ДанныеДляРасчетаСотрудник.ДанныеОВремени         = ДанныеОВремени.Скопировать(ДанныеОВремени.НайтиСтроки(Отбор));
		ДанныеДляРасчетаСотрудник.ДанныеОНачислениях     = ДанныеОНачислениях.Скопировать(ДанныеОНачислениях.НайтиСтроки(Отбор));
		ДанныеДляРасчетаСотрудник.ДанныеОбИндексации     = ДанныеОбИндексации.Скопировать(ДанныеОбИндексации.НайтиСтроки(Отбор));

		ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();

		ДополнительныеПараметры.ДатаНачалаСобытия = ДатаОтпуска;

		Если Не ЗначениеЗаполнено(ДополнительныеПараметры.НачалоПериода)
			Или Не ЗначениеЗаполнено(ДополнительныеПараметры.ОкончаниеПериода) Тогда
			ПериодРасчета = УчетСреднегоЗаработка.ПериодРасчетаОбщегоСреднегоЗаработкаСотрудника(ДатаОтпуска, СтрокаСотрудник.Сотрудник, ДополнительныеПараметры.Начисление);
			ДополнительныеПараметры.НачалоПериода = ДатаНачала;
			ДополнительныеПараметры.ОкончаниеПериода = ДатаОкончания;
		КонецЕсли;

		Если ДополнительныеПараметры.ПорядокРасчета = Неопределено Тогда
			ДополнительныеПараметры.ПорядокРасчета = УчетСреднегоЗаработкаКлиентСервер.ПорядокРасчетаОбщегоСреднегоЗаработка(ДатаОтпуска);
		КонецЕсли;
		ДополнительныеПараметры.ПорядокРасчета         = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
		ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням;

		ДополнительныеПараметры.Индексации = ДанныеДляРасчета.ДанныеОбИндексации;

		СтрокаСотрудник.СреднийЗаработок = УчетСреднегоЗаработкаКлиентСервер.СреднийЗаработокОбщий(ДанныеДляРасчетаСотрудник.ДанныеОНачислениях, ДанныеДляРасчетаСотрудник.ДанныеОВремени, ДополнительныеПараметры);

	КонецЦикла;

	// 3. считаем остатки отпусков

	СписокСотрудников = СотрудникиОрганизации.ВыгрузитьКолонку("Сотрудник");
	ВидыОтпусков = Неопределено;
	//ВидыОтпусков = Новый Массив;
	//ВидыОтпусков.Добавить(Справочники.ВидыОтпусков.Основной);

	ТаблицаОстаткиОтпусков = ОстаткиОтпусков.ОстаткиОтпусковСотрудниковНаДату(СписокСотрудников, ДатаОтпуска, ВидыОтпусков);

	Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл

		Отбор = Новый Структура("Сотрудник",СтрокаСотрудник.Сотрудник);
		СтрокиОтпуска = ТаблицаОстаткиОтпусков.НайтиСтроки(Отбор);

		ОстатокОтпуска = 0;

		Для каждого СтрокаОтпуска из СтрокиОтпуска Цикл
			ОстатокОтпуска = ОстатокОтпуска + СтрокаОтпуска.КоличествоДней;
		КонецЦикла;

		СтрокаСотрудник.ОстатокОтпуска = ОстатокОтпуска;
		СтрокаСотрудник.Сумма = ОстатокОтпуска * СтрокаСотрудник.СреднийЗаработок;

	КонецЦикла;

	//СотрудникиОрганизации.Колонки.Добавить("СреднийЗаработок",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2)));
	//Сообщить(УчетСреднегоЗаработка.СреднийЗаработок(СотрудникиОрганизации[0].Сотрудник,Дата(2017,12,31)));

	//ЗаполнитьТаблицуЗначенийНаФорме(СотрудникиОрганизации,"ТЗ2");

КонецПроцедуры
```