public object СформироватьПечатнуюФормуСправкиПоУправленческимОтпускамСотрудника(/*Физлицо, ФИОСотрудника, Сотрудник = Неопределено*/)
{
//ФорматДаты = "ДФ='d MMM yyyy ""г.""'";
//КомпонентаСклоненияФИО = глЗначениеПеременной("глКомпонентаСклоненияФИО");
//Макет = ПолучитьОбщийМакет("СправкаПоОтпускамКомпанииСотрудника");
//ТабДокумент = Новый ТабличныйДокумент;
//ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СправкаПоУправленческимОтпускамСотрудника";
//Запрос = Новый Запрос;
//Запрос.УстановитьПараметр("Физлицо", Физлицо);
/*Запрос.Текст =
"ВЫБРАТЬ
| ПриемНаРаботу.Сотрудник,
| ПриемНаРаботу.ДатаПриема,
| ВЫБОР
| КОГДА Увольнение.ДатаУвольнения ЕСТЬ NULL
| ИЛИ Увольнение.ДатаУвольнения < ПриемНаРаботу.ДатаПриема
| ТОГДА ДАТАВРЕМЯ(1, 1, 1)
| ИНАЧЕ Увольнение.ДатаУвольнения
| КОНЕЦ КАК ДатаУвольнения,
| ПриемНаРаботу.Подразделение,
| ПриемНаРаботу.Должность,
| ПриемНаРаботу.Пол,
| ЕСТЬNULL(УчетнаяПолитикаПоПерсоналу.КоличествоДнейОтпускаВГод, 20) КАК КоличествоДнейОтпускаВГод
|ИЗ
| (ВЫБРАТЬ
| Работники.ФизЛицо.Наименование КАК Сотрудник,
| Работники.Период КАК ДатаПриема,
| Работники.Подразделение.Наименование КАК Подразделение,
| Работники.Должность.Наименование КАК Должность,
| Работники.ФизЛицо.Пол КАК Пол,
| Работники.ФизЛицо КАК ФизЛицо
| ИЗ
| РегистрСведений.Работники КАК Работники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МАКСИМУМ(Работники.Период) КАК Период,
| Работники.ФизЛицо КАК ФизЛицо
| ИЗ
| РегистрСведений.Работники КАК Работники
| ГДЕ
| Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу)
| И Работники.ФизЛицо = &ФизЛицо
|
| СГРУППИРОВАТЬ ПО
| Работники.ФизЛицо) КАК РаботникиПериоды
| ПО Работники.Период = РаботникиПериоды.Период
| И Работники.ФизЛицо = РаботникиПериоды.ФизЛицо
| ГДЕ
| Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу)
| И Работники.ФизЛицо = &ФизЛицо) КАК ПриемНаРаботу
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетнаяПолитикаПоПерсоналу КАК УчетнаяПолитикаПоПерсоналу
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ДОБАВИТЬКДАТЕ(Работники.Период, ДЕНЬ, -1) КАК ДатаУвольнения,
| Работники.ФизЛицо КАК ФизЛицо
| ИЗ
| РегистрСведений.Работники КАК Работники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МАКСИМУМ(Работники.Период) КАК Период,
| Работники.ФизЛицо КАК ФизЛицо
| ИЗ
| РегистрСведений.Работники КАК Работники
| ГДЕ
| Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И Работники.ФизЛицо = &ФизЛицо
|
| СГРУППИРОВАТЬ ПО
| Работники.ФизЛицо) КАК РаботникиПериоды
| ПО Работники.Период = РаботникиПериоды.Период
| И Работники.ФизЛицо = РаботникиПериоды.ФизЛицо
| ГДЕ
| Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И Работники.ФизЛицо = &ФизЛицо) КАК Увольнение
| ПО ПриемНаРаботу.ФизЛицо = Увольнение.ФизЛицо
|
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(УчетнаяПолитикаПоПерсоналу.КоличествоДнейОтпускаВГод, 20),
| ПриемНаРаботу.Сотрудник,
| ПриемНаРаботу.ДатаПриема,
| ПриемНаРаботу.Подразделение,
| ПриемНаРаботу.Должность,
| ПриемНаРаботу.Пол,
| ВЫБОР
| КОГДА Увольнение.ДатаУвольнения ЕСТЬ NULL
| ИЛИ Увольнение.ДатаУвольнения < ПриемНаРаботу.ДатаПриема
| ТОГДА ДАТАВРЕМЯ(1, 1, 1)
| ИНАЧЕ Увольнение.ДатаУвольнения
| КОНЕЦ";*/
//Выборка = Запрос.Выполнить().Выбрать();
//ДатаПриема = Дата(1,1,1);
if(true/*Выборка.Следующий()*/)
{
//ДатаПриема = Выборка.ДатаПриема;
//ОбластьМакета = Макет.ПолучитьОбласть("ОбщиеДанные");
//ОбластьМакета.Параметры.Заполнить(Выборка);
//ТабДокумент.Вывести(ОбластьМакета);
//ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
//ОбластьМакета.Параметры.Период = Формат(ДатаПриема, ФорматДаты);
if(true/*Выборка.Пол = Перечисления.ПолФизическихЛиц.Женский*/)
{
//ОбластьМакета.Параметры.Комментарий = "Принята на работу";
}
//ТабДокумент.Вывести(ОбластьМакета);
//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
//ОбластьМакета.Параметры.Текст = "" + Выборка.КоличествоДнейОтпускаВГод + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",Выборка.КоличествоДнейОтпускаВГод) + " отпуска в год";
//ТабДокумент.Вывести(ОбластьМакета);
//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
//ТабДокумент.Вывести(ОбластьМакета);
}
if(true/*Выборка.Количество() = 0*/)
{
/*Запрос.Текст =
"ВЫБРАТЬ
| ПриемНаРаботу.Сотрудник КАК Сотрудник,
| ПриемНаРаботу.ДатаПриема КАК ДатаПриема,
| ВЫБОР
| КОГДА Увольнение.ДатаУвольнения ЕСТЬ NULL
| ИЛИ Увольнение.ДатаУвольнения < ПриемНаРаботу.ДатаПриема
| ТОГДА ДАТАВРЕМЯ(1, 1, 1)
| ИНАЧЕ Увольнение.ДатаУвольнения
| КОНЕЦ КАК ДатаУвольнения,
| ЕСТЬNULL(СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение.Наименование, ""Подразделение не указано"") КАК Подразделение,
| ПриемНаРаботу.Должность КАК Должность,
| ПриемНаРаботу.Пол КАК Пол,
| ЕСТЬNULL(УчетнаяПолитикаПоПерсоналу.КоличествоДнейОтпускаВГод, 20) КАК КоличествоДнейОтпускаВГод,
| ПриемНаРаботу.ОбособленноеПодразделение КАК ОбособленноеПодразделение
|ИЗ
| (ВЫБРАТЬ
| Работники.Сотрудник.Физлицо.Наименование КАК Сотрудник,
| МАКСИМУМ(Работники.Период) КАК ДатаПриема,
| Работники.Должность.Наименование КАК Должность,
| Работники.Сотрудник.Физлицо.Пол КАК Пол,
| Работники.ОбособленноеПодразделение.Наименование КАК ОбособленноеПодразделение,
| Работники.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| Работники.Сотрудник.Физлицо КАК Физлицо
| ИЗ
| РегистрСведений.РаботникиОрганизаций КАК Работники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МАКСИМУМ(Работники.Период) КАК Период,
| Работники.Сотрудник.Физлицо КАК Физлицо
| ИЗ
| РегистрСведений.РаботникиОрганизаций КАК Работники
| ГДЕ
| Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу)
| И Работники.Сотрудник.Физлицо = &ФизЛицо
|
| СГРУППИРОВАТЬ ПО
| Работники.Сотрудник.Физлицо) КАК РаботникиПериоды
| ПО Работники.Период = РаботникиПериоды.Период
| И Работники.Сотрудник.Физлицо = РаботникиПериоды.Физлицо
| ГДЕ
| Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу)
| И Работники.Сотрудник.Физлицо = &ФизЛицо
|
| СГРУППИРОВАТЬ ПО
| Работники.Сотрудник.Физлицо.Наименование,
| Работники.Должность.Наименование,
| Работники.Сотрудник.Физлицо.Пол,
| Работники.ОбособленноеПодразделение.Наименование,
| Работники.ПодразделениеОрганизации,
| Работники.Сотрудник.Физлицо) КАК ПриемНаРаботу
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетнаяПолитикаПоПерсоналу КАК УчетнаяПолитикаПоПерсоналу
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| Работники.Сотрудник.Физлицо КАК Физлицо,
| МАКСИМУМ(Работники.Период) КАК ДатаУвольнения
| ИЗ
| РегистрСведений.РаботникиОрганизаций КАК Работники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МАКСИМУМ(Работники.Период) КАК Период,
| Работники.Сотрудник.Физлицо КАК Физлицо
| ИЗ
| РегистрСведений.РаботникиОрганизаций КАК Работники
| ГДЕ
| Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И Работники.Сотрудник.Физлицо = &ФизЛицо
|
| СГРУППИРОВАТЬ ПО
| Работники.Сотрудник.Физлицо) КАК РаботникиПериоды
| ПО Работники.Период = РаботникиПериоды.Период
| И Работники.Сотрудник.Физлицо = РаботникиПериоды.Физлицо
| ГДЕ
| Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И Работники.Сотрудник.Физлицо = &ФизЛицо
|
| СГРУППИРОВАТЬ ПО
| Работники.Сотрудник.Физлицо) КАК Увольнение
| ПО ПриемНаРаботу.Физлицо = Увольнение.Физлицо
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответствиеПодразделенийИПодразделенийОрганизаций
| ПО ПриемНаРаботу.ПодразделениеОрганизации = СоответствиеПодразделенийИПодразделенийОрганизаций.ПодразделениеОрганизации";*/
//Выборка = Запрос.Выполнить().Выбрать();
if(true/*Выборка.Следующий()*/)
{
//ДатаПриема = Выборка.ДатаПриема;
//ОбластьМакета = Макет.ПолучитьОбласть("ОбщиеДанные");
//ОбластьМакета.Параметры.Заполнить(Выборка);
//ТабДокумент.Вывести(ОбластьМакета);
//ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
//ОбластьМакета.Параметры.Период = Формат(ДатаПриема, ФорматДаты);
if(true/*Выборка.Пол = Перечисления.ПолФизическихЛиц.Женский*/)
{
//ОбластьМакета.Параметры.Комментарий = "Принята на работу в организацию " + Выборка.ОбособленноеПодразделение;
}
//ТабДокумент.Вывести(ОбластьМакета);
//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
//ОбластьМакета.Параметры.Текст = "" + Выборка.КоличествоДнейОтпускаВГод + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",Выборка.КоличествоДнейОтпускаВГод) + " отпуска в год";
//ТабДокумент.Вывести(ОбластьМакета);
//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
//ТабДокумент.Вывести(ОбластьМакета);
}
}
/*Запрос.Текст =
"ВЫБРАТЬ
| ПравоНаДополнительныеДниОтпускаРаботники.Ссылка.Дата КАК Период,
| ПравоНаДополнительныеДниОтпускаРаботники.Количество КАК ДнейОтпуска,
| ПравоНаДополнительныеДниОтпускаРаботники.Примечание
|ИЗ
| Документ.ПравоНаДополнительныеДниОтпуска.Работники КАК ПравоНаДополнительныеДниОтпускаРаботники
|ГДЕ
| ПравоНаДополнительныеДниОтпускаРаботники.Сотрудник.Физлицо = &Физлицо
| И ПравоНаДополнительныеДниОтпускаРаботники.Ссылка.Проведен
|
|УПОРЯДОЧИТЬ ПО
| Период";*/
//ТаблицаДопОтпусков = Запрос.Выполнить().Выгрузить();
/*Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиСрез.ДатаОкончанияРабочегоГода КАК Период,
| СУММА(ОстаткиОтпусковОстатки.Количество) КАК Количество
|ИЗ
| Справочник.ОстаткиОтпусков.Остатки КАК ОстаткиОтпусковОстатки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ВложенныйЗапрос.ДатаАктуальности КАК ДатаАктуальности,
| МАКСИМУМ(ВложенныйЗапрос.ДатаОкончанияРабочегоГода) КАК ДатаОкончанияРабочегоГода
| ИЗ
| (ВЫБРАТЬ
| МАКСИМУМ(ОстаткиОтпусковОстатки.Ссылка.ДатаАктуальности) КАК ДатаАктуальности,
| ОстаткиОтпусковОстатки.ДатаОкончанияРабочегоГода КАК ДатаОкончанияРабочегоГода
| ИЗ
| Справочник.ОстаткиОтпусков.Остатки КАК ОстаткиОтпусковОстатки
| ГДЕ
| ОстаткиОтпусковОстатки.Ссылка.Физлицо = &Физлицо
|
| СГРУППИРОВАТЬ ПО
| ОстаткиОтпусковОстатки.ДатаОкончанияРабочегоГода) КАК ВложенныйЗапрос
|
| СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.ДатаАктуальности) КАК ОстаткиСрез
| ПО ОстаткиОтпусковОстатки.Ссылка.ДатаАктуальности = ОстаткиСрез.ДатаАктуальности
| И (ОстаткиОтпусковОстатки.Ссылка.Физлицо = &Физлицо)
|
|СГРУППИРОВАТЬ ПО
| ОстаткиСрез.ДатаОкончанияРабочегоГода
|
|УПОРЯДОЧИТЬ ПО
| Период";*/
//ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
/*Запрос.Текст =
"ВЫБРАТЬ
| 0 КАК НомерСтроки,
| ФактическиеОтпуска.Физлицо КАК Сотрудник,
| ФактическиеОтпуска.Период КАК ДатаНачала,
| ФактическиеОтпуска.ДатаОкончания КАК ДатаОкончания
|ИЗ
| РегистрНакопления.ФактическиеОтпуска КАК ФактическиеОтпуска
|ГДЕ
| ФактическиеОтпуска.Физлицо = &ФизЛицо
|
|УПОРЯДОЧИТЬ ПО
| ДатаНачала,
| ДатаОкончания";*/
//ТаблицаПериодов = Запрос.Выполнить().Выгрузить();
//НомерСтроки = 1;
//СотрудникУволен = ЗначениеЗаполнено(Выборка.ДатаУвольнения);
//ДатаАктуальности = ?(СотрудникУволен, Выборка.ДатаУвольнения, ОбщегоНазначения.ПолучитьРабочуюДату());
//ДлинаСуток = 86400;
/*// Получим остатки отпуска на следующий день после текущего или после даты увольнения,
*/
/*// Что бы отпуска текущего дня тоже попали в отчет
*/
//Строка = ТаблицаПериодов.Добавить();
//Строка.НомерСтроки = 0;
//Строка.Сотрудник = Физлицо;
//Строка.ДатаНачала = ДатаАктуальности + ДлинаСуток;
//Строка.ДатаОкончания = ДатаАктуальности + ДлинаСуток;
/*// Получим остатки на конец каждого рабочего года
*/
if(true/*ЗначениеЗаполнено(ДатаПриема)*/)
{
//ТекущийРабочийГод = НачалоДня(КонецГода(ДатаПриема));
//НомерСтроки = -1;
while(true/*ТекущийРабочийГод < ДатаАктуальности*/)
{
//Строка = ТаблицаПериодов.Добавить();
//Строка.НомерСтроки = НомерСтроки;
//Строка.Сотрудник = Физлицо;
//Строка.ДатаНачала = ТекущийРабочийГод;
//Строка.ДатаОкончания = ТекущийРабочийГод;
//ТекущийРабочийГод = НачалоДня(КонецГода(КонецГода(ТекущийРабочийГод)+1));
//НомерСтроки = НомерСтроки - 1;
}
//;;
}
//ТаблицаПериодов.Сортировать("НомерСтроки");
//Выборка = ПроцедурыУправленияПерсоналомДополнительный.ПодготовитьДанныеПоУправленческимОтпускам(ТаблицаПериодов, Истина);
/*// Список макетов с информацией на сегодня
*/
//МакетыНаСегодня = Новый Массив;
/*// таблица с макетами
*/
//ТаблицаМакетовЗаПериод = Новый ТаблицаЗначений;
//ТаблицаМакетовЗаПериод.Колонки.Добавить("Период");
//ТаблицаМакетовЗаПериод.Колонки.Добавить("ДопРеквизитУпорядочивания");
//ТаблицаМакетовЗаПериод.Колонки.Добавить("МассивМакетов");
while(true/*Выборка.Следующий()*/)
{
if(true/*Выборка.НомерСтроки = 0*/)
{
/*// Остаток отпуска на рабочую дату/дату увольнения
*/
//ОбщееКоличествоДней = Выборка.Количество + Выборка.ОстатокДополнительногоОтпуска;
//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
//МакетыНаСегодня.Добавить(ОбластьМакета);
//ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
if(true/*СотрудникУволен*/)
{
//ОбластьМакета.Параметры.Период = "На дату увольнения, " + Формат(ДатаАктуальности, ФорматДаты);
}
//МакетыНаСегодня.Добавить(ОбластьМакета);
if(true/*ОбщееКоличествоДней >= 0*/)
{
//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
//ОбластьМакета.Параметры.Текст = "Неиспользованный отпуск";
//ОбластьМакета.Параметры.КоличествоДней = "" + ОбщееКоличествоДней + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",ОбщееКоличествоДней);
}
//МакетыНаСегодня.Добавить(ОбластьМакета);
if(true/*(ОбщееКоличествоДней >= 0 И Выборка.КоличествоДнейОтпускаБезТекущегоГода > 0 И Выборка.ОстатокДополнительногоОтпуска > 0)
ИЛИ (ОбщееКоличествоДней < 0 И Выборка.КоличествоДнейОтпускаБезТекущегоГода < 0 И Выборка.ОстатокДополнительногоОтпуска < 0)*/)
{
//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
//ОбластьМакета.Параметры.Текст = "Из них";
//ТабДокумент.Вывести(ОбластьМакета);
//ОбщийТекст = " ";
}
if(true/*ОбщееКоличествоДней >= 0*/)
{
if(true/*Выборка.КоличествоДнейОтпускаБезТекущегоГода > 0*/)
{
//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
//ОбластьМакета.Параметры.Текст = ОбщийТекст + "остаток прошлых лет";
//ОбластьМакета.Параметры.КоличествоДней = "" + Выборка.КоличествоДнейОтпускаБезТекущегоГода + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",Выборка.КоличествоДнейОтпускаБезТекущегоГода);
//МакетыНаСегодня.Добавить(ОбластьМакета);
}
if(true/*Выборка.ОстатокДополнительногоОтпуска > 0*/)
{
//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
//ОбластьМакета.Параметры.Текст = ОбщийТекст + "дополнительный отпуск";
//ОбластьМакета.Параметры.КоличествоДней = "" + Выборка.ОстатокДополнительногоОтпуска + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",Выборка.ОстатокДополнительногоОтпуска);
//МакетыНаСегодня.Добавить(ОбластьМакета);
}
}
}
}
//ТаблицаМакетовЗаПериод.Сортировать("Период, ДопРеквизитУпорядочивания");
//ФИОСотрудника = СокрЛП(Физлицо);
//УниверсальныеМеханизмы.Просклонять(КомпонентаСклоненияФИО, ФИОСотрудника, 2, , ФИОСотрудника);
return null;
}