Как лучше вывести в таблицу отчёт по всем сотрудникам за год?
//*******************************************
Перем СпрСотрудники, Расч;
Перем ЖрнЗарплата, СрЗарплата;
Перем ОчереднаяДата, ДнейН, ИдКод, Таб, СуммаБЛ;
Перем НазвМесяца[12],МесяцРасчета;
Функция НомерМесяцаПериода(Номер,Год)
НазвМесяца[1] ="Січень " + Год;
НазвМесяца[2] ="Лютий " + Год;
НазвМесяца[3] ="Березень " + Год;
НазвМесяца[4] ="Квітень " + Год;
НазвМесяца[5] ="Травень " + Год;
НазвМесяца[6] ="Червень " + Год;
НазвМесяца[7] ="Липень " + Год;
НазвМесяца[8] ="Серпень " + Год;
НазвМесяца[9] ="Вересень " + Год;
НазвМесяца[10]="Жовтень " + Год;
НазвМесяца[11]="Листопад " + Год;
НазвМесяца[12]="Грудень " + Год;
Возврат НазвМесяца[Номер];
КонецФункции
Процедура ВыбратьРасч() nf,kb
Если РаботаетРасчетчик = 1 Тогда
Предупреждение("Операция запрещена!");
ИмяРасч = Расч.Наименование;
Иначе
Если Расчетчики.ВыбратьЗначение(Расч,"Выбор расчетчика") = 1 Тогда
ИмяРасч = Расч.Наименование;
Иначе
// если отказались от выбора расчетчика - все расчетчики
ИмяРасч = "";
Расч=Расчетчик;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОтрабДни(ОчереднаяДата)
// Определение текущего месяца работы
СпрСотрудники.ИспользоватьДату(ОчереднаяДата);
СпрСотрудники.ВыбратьЭлементы();
КалендарныеДни = 0;
Пока СпрСотрудники.ПолучитьЭлемент()=1 Цикл
Если СпрСотрудники.ЭтоГруппа() = 1 Тогда
Иначе
Если СпрСотрудники.ТекущийЭлемент() = Работник Тогда
КалендарныеДни = КонМесяца(ОчереднаяДата);
КалДни = ДатаЧисло(КалендарныеДни);
НП = ЖрнЗарплата.НачалоПериодаПоДате(ОчереднаяДата);
КП = ЖрнЗарплата.КонецПериодаПоДате(ОчереднаяДата);
КалендСотр = Работник.Категория.Получить(КП).Календарь;
ДнейГрафик = КалендСотр.Дней(НП,КП);
Повр = СпрСотрудники.Повременно;
ПрПовр = 0;
Если Повр <=0 Тогда // (1)
ПрПовр = 1;
Прервать;
Иначе
Если СпрСотрудники.НеПолнРабДень <> 0 Тогда
Кд = Повр/СпрСотрудники.НеПолнРабДень; // отработано дней
Иначе
Кд = Повр/8; // отработано дней
КонецЕсли;
Если Кд - Цел(Кд) > 0 Тогда // округление до большего количества дней
Кд = Цел(Кд) + 1; // отработано дней
КонецЕсли;
НеОтработанныеДни = ДнейГрафик - Кд;
Если НеОтработанныеДни > 0 Тогда
Если СуммаБЛ > 0 Тогда
ДнейН = КалДни - НеОтработанныеДни;
Иначе
ДнейН = КалДни;
КонецЕсли;
Иначе
ДнейН = КалДни;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура Сформировать()
Таб = СоздатьОбъект("Таблица");
Пропись("Ukr.spl");
ЖрнЗарплата = СоздатьОбъект("ЖурналРасчетов.Зарплата");
ОчереднаяДата = ЖрнЗарплата.НачалоПериодаПоДате(ДН);
ОчереднаяДатаК = ЖрнЗарплата.КонецПериодаПоДате(ДО)+1;
///////////////////////////////////////////////////////////////////////
ВсегоСумма = 0;
ВсегоСуммаСВ = 0;
ВсегоСуммаПФ = 0;
ВсегоСуммаСС = 0;
ВсегоСуммаЦЗ = 0;
ВсегоСуммаНЛ = 0;
ВсегоДней = 0;
//////////////////////////////////////////////////////////////////////
СпрСотрудники.ИспользоватьДату(ДО);
СпрСотрудники.ВыбратьЭлементы();
Пока СпрСотрудники.ПолучитьЭлемент()=1 Цикл
Если СпрСотрудники.ЭтоГруппа() = 1 Тогда
Иначе
Если СпрСотрудники.ТекущийЭлемент() = Работник Тогда
ИдКод = Работник.ИдентифКод;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таб.ВывестиСекцию("Шапка");
////////////////////////////////////////////////////////////////////////
СЧД = 0;
Пока ОчереднаяДата < ОчереднаяДатаК Цикл
Год = ДатаГод(ОчереднаяДата);
Сч = ДатаМесяц(ОчереднаяДата);
МесяцРасчета = НомерМесяцаПериода(Сч,Год);
Сумма = 0;
СуммаСВ = 0;
СуммаПФ = 0;
СуммаСС = 0;
СуммаЦЗ = 0;
СуммаНЛ = 0;
СуммаБЛ = 0;
ЖрнЗарплата.ВыбратьЗаписиПоОбъекту(Работник,ЖрнЗарплата.НачалоПериодаПоДате(ОчереднаяДата),ЖрнЗарплата.КонецПериодаПоДате(ОчереднаяДата));
Пока ЖрнЗарплата.ПолучитьЗапись()>0 Цикл
Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1 Тогда
Сумма = Сумма + ЖрнЗарплата.Результат;
КонецЕсли;
// Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ОблагаетсяСС)=1 Тогда
Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ОблагаетсяПФ)=1 Тогда
СуммаСВ = СуммаСВ + ЖрнЗарплата.Результат;
КонецЕсли;
Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.Пенсионный)=1 Тогда
СуммаПФ = СуммаПФ + ЖрнЗарплата.Результат;
КонецЕсли;
Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ФондБезработицы)=1 Тогда
СуммаЦЗ = СуммаЦЗ + ЖрнЗарплата.Результат;
КонецЕсли;
Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ФондСоцстраха)=1 Тогда
СуммаСС = СуммаСС + ЖрнЗарплата.Результат;
КонецЕсли;
Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.Налоги)=1 Тогда
СуммаНЛ = СуммаНЛ + ЖрнЗарплата.Результат;
КонецЕсли;
Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.Больничные)=1 Тогда
СуммаБЛ = СуммаСС + ЖрнЗарплата.Результат;
КонецЕсли;
КонецЦикла;
ВсегоСумма = ВсегоСумма + Сумма;
ВсегоСуммаСВ = ВсегоСуммаСВ + СуммаСВ;
ВсегоСуммаПФ = ВсегоСуммаПФ + СуммаПФ;
ВсегоСуммаЦЗ = ВсегоСуммаЦЗ + СуммаЦЗ;
ВсегоСуммаСС = ВсегоСуммаСС + СуммаСС;
ВсегоСуммаНЛ = ВсегоСуммаНЛ + СуммаНЛ;
ОтрабДни(ОчереднаяДата);
ВсегоДней = ВсегоДней + ДнейН;
СЧД = СЧД + 1;
Таб.ВывестиСекцию("Месяц");
Сч=Сч+1;
ОчереднаяДата = ЖрнЗарплата.КонецПериодаПоДате(ОчереднаяДата)+1;
КонецЦикла;
СрЗарплата = ВсегоСуммаСВ/ВсегоДней;
СрЗарплатаМ = ВсегоСумма/СЧД;
Таб.ВывестиСекцию("Итог");
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(0);
Таб.Показать("Результат",);
КонецПроцедуры
// первоначально
Расч = Расчетчик;
Если Расч.Выбран()=1 Тогда
ИмяРасч = Расчетчик.Наименование;
КонецЕсли;
ЖрнЗарплата = СоздатьОбъект("ЖурналРасчетов.Зарплата");
СпрСотрудники = СоздатьОбъект("Справочник.Сотрудники");
! | Правила, п. 5, 7, 8, |
Предприятие 7.7 (7.70.027)