Расчет дней компенсации по всем видам ежегодных отпусков в документе «Увольнение из организаций» 1С:УПП

13.06.12

Задачи пользователя - Адаптация типовых решений

Как известно, в типовых решениях 1С «Зарплата и управление персоналом» и «Управление производственным предприятием» в документе «Увольнение из организаций» не предусмотрен расчет дней компенсации отпуска по всем видам ежегодных отпусков. Этот документ позволяет рассчитать остаток дней отпуска только по основному ежегодному отпуску. Поскольку некоторые сотрудники помимо ежегодного отпуска могут иметь дополнительные виды отпусков такие как «Дополнительный ежегодный отпуск», «Отпуск за ненормированный рабочий день» и т.д. то возникает необходимость при увольнении сотрудника компенсировать ему остатки всех видов отпусков.

Ниже приведен код процедуры которая позволяет рассчитывать общий остаток отпуска по всем видам ежегодных отпусков, которые имеет сотрудник.

Код процедуры приведен полностью со всеми изменениями, которые необходимо внести в типовой код. Комментарии вида: // *** ИТР … показывают изменения типового кода

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

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Разработка Адаптация типовых решений Учетные задачи Производство готовой продукции (работ, услуг) Розничная торговля 1С:Управление торговлей 10 Россия Платные (руб)

Доработка для 1С:Управление торговлей 10.3 (релиз 10.3.88.3) добавляет поддержку маркировки новых категорий товаров согласно постановлениям Правительства РФ 2025–2026 гг. Конфигурация УТ 10.3 снята с поддержки — новые маркируемые категории в типовую поставку больше не попадают. Доработка закрывает этот пробел: новые виды номенклатуры, обмен с ГИС МТ «Честный Знак». Поставляется в виде файла .cf

14640 руб.

23.04.2026    877    6    9    

10

Адаптация типовых решений 1С:Предприятие 8 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

32330 руб.

29.06.2023    12356    35    15    

42

Адаптация типовых решений БСП (Библиотека стандартных подсистем) Кадровый учет ЭДО и ОФД 1C:Бухгалтерия 1С:Зарплата и кадры 7.7 1C:ERP 1С:ЗУП 1С:УТ 1С:ДО Платные (руб)

Наше расширение 1С Госключ обеспечивает интеграцию любой конфигурации 1С на базе БСП с мобильным приложением «Госключ», позволяя сотрудникам подписывать кадровые документы (КЭДО) и документы материальной ответственности (МОЛ, ПБ) усиленной электронной подписью прямо со смартфона. Решение автоматизирует формирование и отправку документов на подпись, отслеживает статусы подписания и хранит подписанные файлы непосредственно в базе 1С

25000 руб.

06.03.2026    921    1    0    

3

Печатные формы Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

6000 руб.

07.02.2023    13246    118    23    

74

Банковские операции Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Решение позволяет автоматически заполнять отдельные реквизиты загружаемых банковских документов, основываясь на известных значениях реквизитов и тексте назначения платежа. Простая настройка, широкие возможности анализа назначения платежа без написания кода и сложных шаблонов.

9760 руб.

17.06.2025    3700    9    0    

8

Адаптация типовых решений 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Расширение для вывода информации об остатках и ценах номенклатуры в форме списка и выбора номенклатуры. (УТ 11, КА 2, ERP). Позволяет получать информацию о ценах, остатках и доступности в разрезе складов и характеристик номенклатуры, информацию по документам резерва.

7930 руб.

16.10.2025    1398    2    0    

2

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Расширение для УНФ, чтобы автоматически отменять старые резервы и не мешалть эффективно продавать.

9150 руб.

02.08.2023    8274    26    5    

41
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Zero_nv 128 14.06.12 04:41 Сейчас в теме
Самое обидное, что данный функционал должен быть типовым
2. Zero_nv 128 21.06.12 08:28 Сейчас в теме
Теперь, начиная с 2.5.52.2 этот фукционал стал типовым
3. dimetra2008 67 21.06.12 09:42 Сейчас в теме
Интересно как этот функционал станет типовым в УПП...
4. IamNataly 25.06.12 06:41 Сейчас в теме
Спасибо, большое !!!
5. snik-2 18.07.12 04:31 Сейчас в теме
В действительности в релизе 2.5.52.3 процедура была полность изменена, но доп. отпуск по прежнему при увольнении не учитывается.
6. snik-2 18.07.12 07:57 Сейчас в теме
Хорошо есть еще добрые люди, подсказали как устранить проблему.
Прилагаю текст процедуры, может кому пригодится.


Процедура РассчитатьКоличествоДнейОтпуска(СтрокаТЧ, СведенияОСотрудниках = Неопределено) Экспорт

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

СтрокаТЧ.РабочийГодС = Результат.РабочийГодС;
СтрокаТЧ.РабочийГодПо = Результат.РабочийГодПо;
СтрокаТЧ.ДнейЧасовКомпенсацииУдержанияОтпуска = Результат.ОстатокНаДату * ?(Результат.ОстатокНаДату >= 0, 1, -1);
СтрокаТЧ.ПризнакКомпенсацииОтпуска = Результат.ОстатокНаДату >= 0;

УвольнениеИзОрганизацийПереопределяемый.ДополнительноУточнитьДниКомпенсации(СтрокаТЧ, ПолучитьСведенияОСотрудниках(СведенияОСотрудниках, СтрокаТЧ.Сотрудник));

КонецПроцедуры
spas163; b-dm; +2 Ответить
7. Эсти 8 16.03.15 08:00 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация