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

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

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

Ответить
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

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

Сообщение s2176 »

Добрый день!
Может, кто подскажет, есть ли готовая функция, которая возвращает % северной надбавки для конкретного сотрудника на определенную дату (не текущую).
Кто сказал, что бесполезно биться головой об стену?!
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

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

Сообщение Irina_ »

Здравствуйте. См. RunStaj.vih. Возможно, подойдет
// возвращает % для северного стажа
function GetPercServN(PsnNRec : comp; LSchetKateg : comp; RunDate : date) : double;
// возвращает % для северного стажа на указанную дату и ссылку на запись North
function GetPercServOnDate(PsnNRec : comp; RunDate : date; var NorthNrec : comp) : double;
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

PA_NorthernCategory (PA_NorthernCategoryOnDay) из C_ExtFun.chm. Зная категорию, можно выудить процент.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

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

Сообщение s2176 »

Спасибо, буду пробовать!
Кто сказал, что бесполезно биться головой об стену?!
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

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

Сообщение 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-файла, где она определена.
Поэтому не знаю, как ей правильно воспользоваться, компилятор ее не знает.
Кто сказал, что бесполезно биться головой об стену?!
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

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

Сообщение 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;
          }
  }
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

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

Сообщение s2176 »

С северными получилось, спасибо!
А вот теперь нужно достать районный коэффициент на дату (т.е., просто из лицевого счета не подойдет, нужно с учетом возможных перемещений).
Кто сказал, что бесполезно биться головой об стену?!
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

s2176 писал(а):А вот теперь нужно достать районный коэффициент на дату (т.е., просто из лицевого счета не подойдет, нужно с учетом возможных перемещений).
Простите, я опять за своё: C_ExtFun.chm, функции PA_RegionalFactorOnDay и PA_RegionalFactor.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

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

Сообщение s2176 »

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

никакого описания, кроме этого, а как функция определит, для кого конкретно мне нужен этот процент?
У разных сотрудников могут быть разные проценты.
Не понятно, как этим пользоваться.
Кто сказал, что бесполезно биться головой об стену?!
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение 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.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

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

Сообщение s2176 »

Да, увы, у нас 8.1, и иного пока не предвидится.

Вставила:

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

В переменной _summavp на выходе всегда 0 :sad:
Кто сказал, что бесполезно биться головой об стену?!
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

А CL.Add(CS, 'PADetailsUtils')? Правда, не знаю, функционирует ли это в 8.1...
WT_*, по-любому, должны работать!
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

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

Сообщение s2176 »

Проще из таблиц достать...
так, видимо, и придется сделать
Кто сказал, что бесполезно биться головой об стену?!
Ответить