Факт нахождения в отпуске по уходу за ребенком до 3 лет.

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Irina_
Местный житель
Сообщения: 546
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Факт нахождения в отпуске по уходу за ребенком до 3 лет.

Сообщение Irina_ »

Здравствуйте. Подскажите пожалуйста, на что надо ориентироваться для определения факта нахождения сотрудника в отпуске по уходу за ребенком до 3 лет на заданную дату?
В своем отчете для нахождения фактической штатной численности надо убрать находящихся в отпуске по уходу. Может быть 2 варианта состояния ставки при нахождении сотрудника в отпуске по уходу:
1. Ставка занимается на период отпуска по уходу полностью либо частично другим сотрудником (принятым на период Д/О или переведенным на этот период)
2. Ставка остается полностью вакантной.
Тогда для 1 варианта фактическая численность будет равная количеству ставок, которые заняты на период отпуска, а во 2 варианте будет равна 0.
С какой таблицей правильно работать при определении факта нахождения в Д/О или возможно есть готовый метод для использования?
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Факт нахождения в отпуске по уходу за ребенком до 3 лет.

Сообщение RAJAH »

Можно попробовать функции табеля использовать (wt*):

Код: Выделить всё

if LoadWorkingTable(ls, mm, yy) = 0 then
{
  if WT_LoadMonthlyAbsences = 0 then
  {
    for(i:=0; i<WT_GetMonthlyAbsenceCount; i:=i+1)
    {
      if (WT_AbsenceMappedOn(atMonthly, i, Date(dd, mm, yy)))
      {
        WT_GetMonthlyAbsenceAttribute(i, aaCode, oboz);
        ...
Потом смотреть, что сидит в oboz.
Последний раз редактировалось RAJAH 24 ноя 2017, 16:42, всего редактировалось 1 раз.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Факт нахождения в отпуске по уходу за ребенком до 3 лет.

Сообщение edward_K »

Ну если так, то можно и вообще по Lstab идти.
Вообще быстрее будет по otpusk пройти - при отзыве он вроде как подрезается в отличии от Vacations.
Можно и табельными функциями - но это будет дольше. Лучше наверное по другому набору - там где отклонения - смотрите wt.chm.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Факт нахождения в отпуске по уходу за ребенком до 3 лет.

Сообщение RAJAH »

edward_K писал(а):смотрите wt.chm
C_ExtFun.chm.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Факт нахождения в отпуске по уходу за ребенком до 3 лет.

Сообщение edward_K »

wt2.chm - он поинтересней будет. Должен быть в стандартной документации галактики на московском фтп. Не могу сейчас точно путь посмотреть.
Irina_
Местный житель
Сообщения: 546
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Факт нахождения в отпуске по уходу за ребенком до 3 лет.

Сообщение Irina_ »

Здравствуйте. Большое спасибо за рекомендации. Вчера тоже раздумывала или связываться с табельными ф-циями (смотреть неявки) или просматривать отпуска. Решила пройти по Vacations, правда не оказалось нужного индекса (((, но нашла всех декретников, том более, что мне они нужны были на дату, а не в периоде. А сегодня после Ваших рекомендаций засомневалась: ту ли таблицу использовала и будет ли все правильно при наличии отзыва. На тестовой базе ввела РПД=14 «Досрочное завершение отпуска по уходу за ребенком» (не РПД=40 «Отзыв из отпуска»). После утверждения приказа дата окончания отпуска изменилась в Vacations, Factotpusk, Otpusk. И все-таки решила переделать на работу с Otpusk, тем более, что оказался нужный индекс))). Вроде все получилось нормально.

P.S. Ранее уже сталкивалась с декретниками в своих отчетах. Но на момент написания отчетов уход в такой отпуск в Галактике отражался по-другому: при утверждении приказа с освобождением ставки в 6 разделе картотеки заполнялась дата ухода с должности, т. е. получалось, что в 1 разделе дата увольнения пустая, а в 6 разделе нет назначения с пустой датой ухода. Но в какой-то момент (где-то после 2015 г.) разработчики изменили функционал, и дата ухода в 6 разделе перестала заполняться. И в моих отчетах уже неправильно стал определяться факт нахождения в Д/О.
И еще. Когда не так давно появилось РПД=14«Досрочное завершение отпуска по уходу за ребенком» и позже РПД=92 «Отражение работы во время отпуска по уходу за ребенком», у меня отложилось, что появилась возможность находиться в Д/О и работать. Фактически такие случаи бывали, но мы всегда делали отзыв, чтобы была возможность показать в табеле, что сотрудник работает. Не знаю нюансов использования РПД=92, возможно не многие им пользуются, но подозреваю, что если использовать его и не будет отзыва из отпуска по уходу, то возможно будет правильно работать именно с табельными ф-циями. Но решила не заморачиваться и надеюсь, что у нас и далее будут работать с РПД=14, а не с РПД=92.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Факт нахождения в отпуске по уходу за ребенком до 3 лет.

Сообщение edward_K »

Мне еще тут подсказали, что в объекте StaffStuct есть функция GetLongVacationByDate - если человек в долгосрочном отпуске то наверное эта функция вернет вам то, что нужно.
Еще там есть возможность сразу получить количество занятых ставок, вызывав GetRateOnDate.
ищите Z_StaffSHR->StaffStruct.vih в Frm
Irina_
Местный житель
Сообщения: 546
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Факт нахождения в отпуске по уходу за ребенком до 3 лет.

Сообщение Irina_ »

Я вчера смотрела StaffStruct.vih. Но решила, что мне не подходит.
#doc
Количество занятых ставок на дату
#end
function GetRateOnDate(NrecStaff: comp; d: date): double;
Эта ф-ция не подходит, т. к. мне надо занятых ставок по л/сч (или по назначению), а не по рабочему месту в ШР.

#doc
Функция возвращает ссылку на первый найденный долгосрочный отпуск (<code>Vacations.NRec</code>) отпуск для
назначения <code>_cApp</code> (ссылка на <code>Appointments.NRec</code>) на дату <code>_dCheck</code>.
#end
public function GetLongVacationByDate(_cApp: comp; _dCheck: date): comp;
end;
По этой ф-ции не совсем уверена. Кстати из-за описания к ней вчера начала работать с Vacations, а не с Otpusk. В ее описании смутила фраза, что «ссылка на первый найденный долгосрочный отпуск». Т.е. он может быть не один? Непонятно как отработает в случае, когда сотрудник уходит из декрета в декрет или есть отзыв, а потом опять отпуск по уходу. Хотя возможно то, что ф-ция вернет > comp(0) и скажет, что сотрудник находится в отпуске по уходу.
Еще раз спасибо за помощь.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Факт нахождения в отпуске по уходу за ребенком до 3 лет.

Сообщение edward_K »

Код: Выделить всё

private function fnGetLongVac4CurrApp(_dCheck: date): comp;
{
  result := 0;

  _loop LongVacations where ((AppointCheck.Person == LongVacations.Person
                              and 2 == LongVacations.Status
                              and _dCheck >>= LongVacations.FactYearBeg
                              and _dCheck <<= LongVacations.FactYearEnd(noindex) ))
  {
    if AppointCheck.NRec = LongVacations.Appoint
      result := fnCheckOtz4CurLongVac(_dCheck);
    else
    { //иначе нужно анализировать, что назначение и что за отпуск
      if getfirst LongVacAppoint where ((LongVacations.Appoint == LongVacAppoint.NRec)) = tsOk
      {
        if (AppointCheck.cAddNRec2 <> 0) and ((AppointCheck.lPrizn = 3) or (AppointCheck.lPrizn = 31))
        { //совмеСТИТЕЛЬСВО (с ЛС)
          if LongVacAppoint.cAddNrec2 = AppointCheck.cAddNRec2
          { //отпуск по тому же ЛС
              result := fnCheckOtz4CurLongVac(_dCheck);
          }
        }
        else
        {
          if (LongVacAppoint.lPrizn = 0) or (LongVacAppoint.lPrizn = 100)
          { //отпуск по основному назначению
            result := fnCheckOtz4CurLongVac(_dCheck);
          }
        }
      }
    }

    if result <> 0
      break; //есть отпуск без отзыва
  }
}
Ответить