8.х ЗУП При расчете остатка отпуска не учитывается отпуск за свой счет

Тема в разделе ""1С:Зарплата и управление персоналом ЗУП"", создана пользователем Вурглак, 25 дек 2013.

  1. TopicStarter Overlay
    Вурглак
    Offline

    Вурглак Опытный в 1С

    Регистрация:
    2 янв 2012
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте.

    База ЗУП (базовая) 2.5.68.1.
    Сотрудник принят 18.08.2013, уволен 20.12.2013. С 01.11.2013 по 30.11.2013 был в отпуске за свой счет. Отпуск отражен в документе "Отпуска организаций".
    Увольнение отражается документом "Увольнение из организаций". При этом остаток отпуска рассчитался как 9,33 дня, хотя должно быть 7 дней.
    Добавил документ "Невыходы в организацию", в котором отразил отпуск энтот, записал, нажал кнопку "рассчитать", провел. Однако все равно остаток отпуска рассчитывается неправильно.
    Собственно почему и как сделать, чтобы рассчитывался правильно?
  2. svet
    Offline

    svet Профессионал в 1С Команда форума

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    У них там в модуле "Остатки отпусков" при увольнении не отрабатываются отклонения и не усекается рабочий год.
    Я модуль правила.
  3. TopicStarter Overlay
    Вурглак
    Offline

    Вурглак Опытный в 1С

    Регистрация:
    2 янв 2012
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    26
    В базовой к сожалению не получится изменить модуль.
    И все же... Это я чего-то неправильно делаю или это именно глюк программмы, который не устраняют?
  4. svet
    Offline

    svet Профессионал в 1С Команда форума

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    У них политика такая: если есть невыходы, на которые должны быть увеличены отработанные периоды, то они отодвигают конец рабочего периода. Например, если период был: с 01.06.12 по 31.05.13 и в это время был месяц административного отпуска, то программа берет рабочий период с 01.06.12 по 30.06.13 - удлинняет сзади.
    В случае же расчета увольнения они берут и тупо обрезают этот период оператором:

    МаксимальнаяДатаОкончания = Мин(СтрокаДанных.ДатаОстатков, КонецДня(СтрокаДанных.ДатаУвольнения));

    Здесь у них СтрокаДанных.ДатаОстатков = 30.06.13 (из приведенного выше), а СтрокаДанных.ДатаУвольнения, например, = 15.03.13
    И рабочий период у них получается с 01.06.12 по 15.03.13.

    Т.е. фиолетово, что рабочий период больше года, ограничивают его датой увольнения. Соответственно дней компенсации получается больше.
  5. TopicStarter Overlay
    Вурглак
    Offline

    Вурглак Опытный в 1С

    Регистрация:
    2 янв 2012
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    26
    Может я не там смотрю, но в процедуре ЗаработанныеОтпуска() общего модуля ОстаткиОтпусков стоит код
    Код:
    Если ЗначениеЗаполнено(СотрудникБезПрава.ДатаУвольнения) И Не СотрудникБезПрава.ЭтоРасчетПриУвольнении Тогда
    МаксимальнаяДатаОкончания = Мин(ДатаОкончанияРабочегоГода, КонецДня(СотрудникБезПрава.ДатаУвольнения));
    Иначе
    МаксимальнаяДатаОкончания = ДатаОкончанияРабочегоГода;
    КонецЕсли;
    Так что при увольнении должно правильно определять по идее... А без идеи определяется не верно...
  6. svet
    Offline

    svet Профессионал в 1С Команда форума

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    Да, именно здесь. Но Вы внимательно перечитайте то, что я написала выше.
    Стандартная программа сдвигает КОНЕЦ рабочего периода на количество дней административного отпуска.
    Например:
    есть рабочий период для отпуска с 01.06.12 по 31.05.13
    есть административный отпуск с 01.09.12 по 30.09.12.
    Рабочий период с учетом административного становится = с 01.06.12 по 30.06.13 - сдвигается КОНЕЦ рабочего периода.
    Теперь, если сотрудник увольняется например 15.03.13 года, то по приведенному выше Вами куску программы:
    МаксимальнаяДатаОкончания = Мин(ДатаОкончанияРабочегоГода, КонецДня(СотрудникБезПрава.ДатаУвольнения));
    МаксимальнаяДатаОкончания = Мин(30.06.13, 15.03.13);
    Т.е.

    МаксимальнаяДатаОкончания = 15.03.13
    и окончательный период получаем с 01.06.12 по 15.03.13.
    ВСЁ. Больше из этого периода программа уже ничего не вычитает, считает весь этот период рабочим. Хотя по сути внутри периода был административный отпуск и он должен бы вычитаться.
  7. TopicStarter Overlay
    Вурглак
    Offline

    Вурглак Опытный в 1С

    Регистрация:
    2 янв 2012
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    26
    То бишь если это не увольнение. то количество дней отпуска еще больше завышается за счет того, что нет этой обрезки?
  8. TopicStarter Overlay
    Вурглак
    Offline

    Вурглак Опытный в 1С

    Регистрация:
    2 янв 2012
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    26
    Если не секрет: как дорабатывали модуль, чтобы правильно рассчитывал?
  9. svet
    Offline

    svet Профессионал в 1С Команда форума

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    Нет, если не увольнение, то считается нормально, просто период сдвигается и становится больше года.
    Не секрет.
    Только у меня УПП и переменные у вас несколько по-другому называться могут.

    В вышеприведенном операторе вставила строки:
    Код:
     Если ЗначениеЗаполнено(СтрокаДанных.ДатаУвольнения) И Не СтрокаДанных.ЭтоРасчетПриУвольнении Тогда
    МаксимальнаяДатаОкончания = Мин(СтрокаДанных.ДатаОстатков, КонецДня(СтрокаДанных.ДатаУвольнения));
    // если рабочий период больше года, значит был сдвиг и при увольнении надо уменьшить дату остатков
    ДнейСдвига = (НачалоДня(СтрокаЗаработанныхДней.ДатаОкончания) - НачалоДня(СтрокаЗаработанныхДней.ДатаНачала)) / 86400 -
    ?(Год(СтрокаЗаработанныхДней.ДатаОкончания)/4 - Цел(Год(СтрокаЗаработанныхДней.ДатаОкончания)/4) = 0, 366,365) + 1;
    МаксимальнаяДатаОкончания = НачалоДня(МаксимальнаяДатаОкончания) - ДнейСдвига * 86400;  
    //
    Иначе
    МаксимальнаяДатаОкончания = СтрокаДанных.ДатаОстатков;
    // если рабочий период больше года, значит был сдвиг и при увольнении надо уменьшить дату остатков
    Если СтрокаДанных.ЭтоРасчетПриУвольнении тогда
    ДнейСдвига = (НачалоДня(СтрокаЗаработанныхДней.ДатаОкончания) - НачалоДня(СтрокаЗаработанныхДней.ДатаНачала)) / 86400 -
    ?(Год(СтрокаЗаработанныхДней.ДатаОкончания)/4 - Цел(Год(СтрокаЗаработанныхДней.ДатаОкончания)/4) = 0, 366,365) + 1;
    МаксимальнаяДатаОкончания = НачалоДня(МаксимальнаяДатаОкончания) - ДнейСдвига * 86400;  
    КонецЕсли;
    //
    КонецЕсли;
    
    И еще перед концом процедуры , в конце цикла по таблице оп видам отпусков после
    Код:
    Если РабочийГод.ДоступноДляСписанияВЭтомГоду > 0 Тогда
    РассчитанныйОстаток.РабочийГодПо  = ?(СтрокаДанных.ЭтоРасчетПриУвольнении, Мин(СтрокаДанных.ДатаОстатков, РабочийГод.ДатаОкончания), РабочийГод.ДатаОкончания);
    КонецЕсли; 
    вставила

    Код:
    // при увольнении не отрабатывались отклонения и не усекался рабочий год
    Если РассчитанныйОстаток.РабочийГодПо <> Неопределено тогда
    КоличествоДнейПродления = 0;
    ТО = РабочийГод.Отклонения;
    Для сч=1 по ТО.Количество() цикл
    КоличествоДнейПродления = КоличествоДнейПродления + ТО[сч-1].КоличествоДнейПродления;
    КонецЦикла; 
    РассчитанныйОстаток.РабочийГодПо = РассчитанныйОстаток.РабочийГодПо - КоличествоДнейПродления * 86400;
    РассчитанныйОстаток.РабочийГодПо = Макс(РассчитанныйОстаток.РабочийГодС, РассчитанныйОстаток.РабочийГодПо);
    КонецЕсли;
    
    Как-то примерно так.
  10. TopicStarter Overlay
    Вурглак
    Offline

    Вурглак Опытный в 1С

    Регистрация:
    2 янв 2012
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    26
    И все-таки я дурак, и в базе все же правильно считалось количество дней компенсации... Ведь отпуск за свой счет то не полностью исключается, а только та часть его, которая превышает 14 дней...
  11. svet
    Offline

    svet Профессионал в 1С Команда форума

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    Дык. А у вас меньше 14-ти что ли? :)
    А на больше 14-ти дней программа у вас правильно работает? Может быть это только у меня в УПП глюки...
  12. TopicStarter Overlay
    Вурглак
    Offline

    Вурглак Опытный в 1С

    Регистрация:
    2 янв 2012
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    26
    Ну посчитаем по данным из первого сообщения.
    Работал с 18.08.2013 по 20.12.2013, то бишь 125 дней.
    С 01.11.2013 по 30.11.2013 в отпуске за свой счет, то бишь 30 дней.
    Из стажа вычитаем те дни отпуска, которые превысили 14 дней, то бишь 30-14 = 16 дней.
    Итого получаем 125 - 16 = 109 дней, или 3 месяца 18 дней. Поскольку 18 дней - больше половины месяца, считаем компенсацию за 4 месяца. То бишь 28 дней / 12 * 4 = 9,33 дня.
    Так что в программе считалось правильно.
  13. svet
    Offline

    svet Профессионал в 1С Команда форума

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    Ну значит я старые изменения не проверила. Они этот блок по расчетам остатков отпусков за последние полтора - два года раза 3 почти полностью перепахивали.
  14. svet
    Offline

    svet Профессионал в 1С Команда форума

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    Да. Так оно и есть. Они исправили эту ситуацию в одном из последних релизов, когда ввели разбивку по рабочим месяцам и начали из них вычитать отклонения.

Поделиться этой страницей