Расчет дополнительного отпуска при увольнении из организации

30.04.14

Разработка - Универсальные функции

Документ "УвольнениеИзОрганизации" (регламентированный) учет в ЗУП не позволяет без доработки конфигурации рассчитать остаток дополнительного отпуска. Типовой механизм учитывает только основной ежегодный отпуск.

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

Функция ОстатокОтпускаСотрудникаНаДату(Сотрудник, ДатаОстатков = '00010101', ЭтоРасчетПриУвольнении = Ложь, ПорядокРасчетаОсновногоОтпуска = Неопределено) Экспорт
    
    Если Не ЗначениеЗаполнено(Сотрудник) Тогда
        Возврат 0;
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(ДатаОстатков) Тогда
        ДатаОстатков = НачалоДня(ТекущаяДатаСеанса());
    КонецЕсли;
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ТаблицаДанныхДоп = ОписаниеТаблицыДанных();
    
    Строка = ТаблицаДанныхДоп.Добавить();
    Строка.Сотрудник                            = Сотрудник;
    Строка.ДатаОстатков                            = НачалоДня(ДатаОстатков);
    Строка.ЭтоРасчетПриУвольнении                = ЭтоРасчетПриУвольнении;
    Если ЭтоРасчетПриУвольнении Тогда
        Если ПорядокРасчетаОсновногоОтпуска = Перечисления.ПорядокРасчетаОтпуска.ПоШестидневке Тогда
            Строка.ОтборПоВидуЕжегодногоОтпуска    = ОбщегоНазначенияЗК.ПолучитьЗначениеРеквизита(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпШестидневка, "ВидЕжегодногоОтпуска");
        Иначе
            Строка.ОтборПоВидуЕжегодногоОтпуска    = ОбщегоНазначенияЗК.ПолучитьЗначениеРеквизита(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00099"), "ВидЕжегодногоОтпуска");
        КонецЕсли;
    КонецЕсли;
    
    РезультатДоп = ОстаткиОтпусков(ТаблицаДанныхДоп)[0];

    ОстатокДопОтпуска=РезультатДоп.ОстатокНаДату;
    
    //______________________________________________________________________________
    
    
    ТаблицаДанных = ОписаниеТаблицыДанных();
    
    Строка = ТаблицаДанных.Добавить();
    Строка.Сотрудник                            = Сотрудник;
    Строка.ДатаОстатков                            = НачалоДня(ДатаОстатков);
    Строка.ЭтоРасчетПриУвольнении                = ЭтоРасчетПриУвольнении;
    Если ЭтоРасчетПриУвольнении Тогда
        Если ПорядокРасчетаОсновногоОтпуска = Перечисления.ПорядокРасчетаОтпуска.ПоШестидневке Тогда
            Строка.ОтборПоВидуЕжегодногоОтпуска    = ОбщегоНазначенияЗК.ПолучитьЗначениеРеквизита(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпШестидневка, "ВидЕжегодногоОтпуска");
        Иначе
            Строка.ОтборПоВидуЕжегодногоОтпуска    = ОбщегоНазначенияЗК.ПолучитьЗначениеРеквизита(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарныеДни, "ВидЕжегодногоОтпуска");
        КонецЕсли;
    КонецЕсли;
    
    Результат = ОстаткиОтпусков(ТаблицаДанных)[0];
        
    ОстаткиВРазрезеРабочихЛетИВидовОтпусков = Новый Массив;
    Для Каждого РабочийГод Из Результат.ДанныеРасчета Цикл
        Если РабочийГод.ДоступноДляСписанияВЭтомГоду = 0 Тогда
            Продолжить;
        КонецЕсли;
        ОстаткиВРазрезеРабочихЛетИВидовОтпусков.Добавить(Новый Структура("ВидЕжегодногоОтпуска, ОсталосьДней, РабочийГодС, РабочийГодПо, ПоследнийРабочийГод",
            РабочийГод.ВидЕжегодногоОтпуска, РабочийГод.ДоступноДляСписанияВЭтомГоду, РабочийГод.ДатаНачала, РабочийГод.ДатаОкончания, РабочийГод.ПоследнийРабочийГод));
    КонецЦикла;
    
    //++++++++++++++++++++++++++++++++++++++++++Расчитаем Доп отпуск+Основной+++++++++++++++++
    
    Возврат Новый Структура("ОстатокНаДату, РабочийГодС, РабочийГодПо, Примечание, ОстаткиВРазрезеВидовОтпусков, ОстаткиВРазрезеРабочихЛетИВидовОтпусков",
        Результат.ОстатокНаДату+ОстатокДопОтпуска, Результат.РабочийГодС, Результат.РабочийГодПо, Результат.Примечание, Результат.ОстатокНаДатуПоВидамЕжегодныхОтпусков, ОстаткиВРазрезеРабочихЛетИВидовОтпусков);
        
        
    //________________________________________________________________________________________________    
КонецФункции

 

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

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

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

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4706    Abysswalker    11    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    8792    DeerCven    15    

63

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    57109    dimanich70    85    

174

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    8040    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    71679    atdonya    31    

73

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    10042    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Re:аниматор 337 30.04.14 11:41 Сейчас в теме
ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00099")


А как быть, если у кого то нет основного начисления организации с кодом 00099?
2. CITRUM 30.04.14 16:41 Сейчас в теме
А как быть с тем, что расчет при увольнении спишет Основной+Дополнительный только с основного отпуска? В итоге будет минус по основному и плюс по дополнительному. Понятно, что суммарно будет ноль, но выглядит все равно коряво.
3. VladimirKHV 14 07.05.14 06:19 Сейчас в теме
Перемудрено, я просто закомментил

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

Т.е отключил отбор по только по основному отпуску, и он сам прекрасно считает остатки по всем видам отпусков

Можно даже по другому, в модулях форм документов увольнения и расчета при вызове функции 3 параметр поменять на ЛОЖЬ

Ну а потом, тем кто хочет (2) списывать раздельно, в модуле документа расчета, при обработке движений, вызвать функцию с ИСТИНА, получить количество дней основного, отнять от общего, получится дней дополнительного.
Для отправки сообщения требуется регистрация/авторизация