Получить данные среднего заработка, остатка отпусков, резерва отпусков в ЗУП 3
&НаСервере
Процедура ПолучитьДанныеСреднегоЗаработкаНаСервере()
ДатаОтпуска = Дата(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");
КонецПроцедуры
Сравнение плановых и фактических дней отпуска
Вопрос. Стоит ли мне учить 1С для дальнейшего потом заработка
Остатки по регистру накопления при отборе по реквизиту регистратора
Определение плановых остатков товара с учетом предшествующих фактических и будущих плановых продаж