Страница 1 из 1

Как определить % северной надбавки на дату

Добавлено: 15 апр 2015, 09:16
s2176
Добрый день!
Может, кто подскажет, есть ли готовая функция, которая возвращает % северной надбавки для конкретного сотрудника на определенную дату (не текущую).

Re: Как определить % северной надбавки на дату

Добавлено: 15 апр 2015, 10:26
Irina_
Здравствуйте. См. RunStaj.vih. Возможно, подойдет
// возвращает % для северного стажа
function GetPercServN(PsnNRec : comp; LSchetKateg : comp; RunDate : date) : double;
// возвращает % для северного стажа на указанную дату и ссылку на запись North
function GetPercServOnDate(PsnNRec : comp; RunDate : date; var NorthNrec : comp) : double;

Re: Как определить % северной надбавки на дату

Добавлено: 15 апр 2015, 10:39
RAJAH
PA_NorthernCategory (PA_NorthernCategoryOnDay) из C_ExtFun.chm. Зная категорию, можно выудить процент.

Re: Как определить % северной надбавки на дату

Добавлено: 15 апр 2015, 13:05
s2176
Спасибо, буду пробовать!

Re: Как определить % северной надбавки на дату

Добавлено: 06 июл 2015, 15:53
s2176
function GetPercServN(PsnNRec : comp; LSchetKateg : comp; RunDate : date) : double;
// возвращает % для северного стажа на указанную дату и ссылку на запись North
function GetPercServOnDate(PsnNRec : comp; RunDate : date; var NorthNrec : comp) : double;
В первой функции (GetPercServN) не совсем понятно что за LSchetKateg типа comp?
В таблице Lschet есть поле KategS, но его тип - word...
а вторая функция (GetPercServOnDate) есть в описании, но я не нашла ни одного vih-файла, где она определена.
Поэтому не знаю, как ей правильно воспользоваться, компилятор ее не знает.

Re: Как определить % северной надбавки на дату

Добавлено: 06 июл 2015, 17:10
m0p3e
По идее word параметр должен быть.

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

LSchetKateg    ==  North.kateg

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

public function GetPercServN(PsnNRec : comp; LSchetKateg : comp; RunDate : date) : double;
  {  // Возвращает процент для северного стажа
  var ServLenYears  : integer;
  var ServLenMonths : integer;
  var ServLenDays   : integer;

  GetPercServN := 0.0;

  if (GetFirst Persons where ((PsnNRec == Persons.NRec)) = tsOk)
      if (GetFirst Catalogs where ((64   == Catalogs.SysCode)) = tsOk)
        if (GetFirst ServLen where (( PsnNRec == ServLen.Person    and // сведения о стаже
                            slStaffServLenCur == ServLen.CurRec    and
                                Catalogs.Nrec  == ServLen.Position )) = tsOk)
          {

          if (ServLen.ToDate <> Date(0,0,0))
             {
             ServLenYears  := ServLen.YearsE;
             ServLenMonths := ServLen.MonthsE;
             ServLenDays   := ServLen.DaysB;
             if (ServLenDays > 0)
               ServLenMonths := ServLenMonths + 1;
             }
          else
             {
             ServLenYears  := StajYears(ServLen.FromDate, RunDate, ServLen.Rate,
                                       ServLen.DaysB, ServLen.MonthsB, ServLen.YearsB);
             ServLenMonths := StajMonths(ServLen.FromDate, RunDate, ServLen.Rate,
                                         ServLen.DaysB, ServLen.MonthsB, ServLen.YearsB);
             ServLenDays   := StajDays  (ServLen.FromDate, RunDate, ServLen.Rate,
                                         ServLen.DaysB, ServLen.MonthsB, ServLen.YearsB);
             if (ServLenDays > 0)
               ServLenMonths := ServLenMonths + 1;
             }
          if (GetFirst North
                 where ((LSchetKateg    ==  North.kateg    and
                         ((ServLenYears  = North.EndInt    and
                           ServLenMonths <= North.MonthInt) or
                           ServLenYears  < North.EndInt)
                           )) = tsOk)
             GetPercServN := North.Proc;
          }
  }

Re: Как определить % северной надбавки на дату

Добавлено: 07 июл 2015, 09:33
s2176
С северными получилось, спасибо!
А вот теперь нужно достать районный коэффициент на дату (т.е., просто из лицевого счета не подойдет, нужно с учетом возможных перемещений).

Re: Как определить % северной надбавки на дату

Добавлено: 07 июл 2015, 10:25
RAJAH
s2176 писал(а):А вот теперь нужно достать районный коэффициент на дату (т.е., просто из лицевого счета не подойдет, нужно с учетом возможных перемещений).
Простите, я опять за своё: C_ExtFun.chm, функции PA_RegionalFactorOnDay и PA_RegionalFactor.

Re: Как определить % северной надбавки на дату

Добавлено: 07 июл 2015, 10:37
s2176
нашла не в C_ExtFun.chm (у меня такого нет), а в ExtFun.chm.
НО!
например,
Function PA_RegionalFactor (
OnDate : Date
) : Double;
external 'WT.DLL'

никакого описания, кроме этого, а как функция определит, для кого конкретно мне нужен этот процент?
У разных сотрудников могут быть разные проценты.
Не понятно, как этим пользоваться.

Re: Как определить % северной надбавки на дату

Добавлено: 07 июл 2015, 11:00
RAJAH
Так у вас до сих пор 8.1?! У меня ещё далее в C_ExtFun.chm есть
Описание
Возвращает величину районного коэффициента на дату OnDate . Текущий лицевой счет задается предварительным вызовом функции PA_Assign
К тому же ещё присутствует раздел "Инициализация функций получения параметров ЛС на дату при помощи прикладных контекстов"

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

  // 1. Подключить заголовочный файл: 
  #include Contexts.vih // прикладные контексты 
 
  interface Example; 
 
  // 2. Добавить глобальную переменную в интерфейс: 
  var 
    CS: IContextSession; 
 
  ... 
 
  handleEvent // интерфейса 
  cmInit: 
  { 
    // 3. Добавить следующие строки в обработчик инициализации интерфейса: 
 
    var CL: ContextList; 
    // захват прикладных контекстов 
    if (not CL.Add(CS, 'PADetailsUtils')) 
    { 
      abort; 
      exit; 
    } 
 
    ... 
  } 
 
  ... 
 
  end; 
  end. 
Если не ошибаюсь, ранее использовались функции табеля LoadWorkingTable и, соответственно, WT_GetRegionalFactor.

Re: Как определить % северной надбавки на дату

Добавлено: 07 июл 2015, 12:56
s2176
Да, увы, у нас 8.1, и иного пока не предвидится.

Вставила:

PA_Assign(nrec_lschet);
_summavp:=PA_RegionalFactor(_date);

В переменной _summavp на выходе всегда 0 :sad:

Re: Как определить % северной надбавки на дату

Добавлено: 07 июл 2015, 13:31
RAJAH
А CL.Add(CS, 'PADetailsUtils')? Правда, не знаю, функционирует ли это в 8.1...
WT_*, по-любому, должны работать!

Re: Как определить % северной надбавки на дату

Добавлено: 07 июл 2015, 13:36
s2176
Проще из таблиц достать...
так, видимо, и придется сделать