0
Отвечен

поиск вида оплаты в лицевом счете

Роман Шивалов 6 лет назад в Прочее обновлен 6 лет назад 6

Здравствуйте. Есть необходимость проверить существование некоторых видов оплат в конкретном лицевом счете, включая данные по датах начала и окончания действия.

Есть ли функция, выполняющая такой поиск? Или хотя бы как можно перечислить все виды оплат, получить данные по датах начала и окончания?

Спасибо.

Script

Ответ

+2
Ответ
Отвечен

Пример функции:

TryFindCodeValidOnDate(comb,extCode,kDate)
{
  var Prob = CreateObject("APropBE");
  Prob.Init(CLL_TOTAL_SRC,CLL_TOTAL_SUBJECT,CLL_TOTAL_PODR,comb); //инициализируем APropBE вн.кодом совместительства
  int rowkod[ROWMAX];//массив с номерами строк
  int cntrow=poiskosnkodProp(Extern_To_Intern(extCode),rowkod,0,Prob);//получаем список строк с кодом==kod
  for (int row=0; row<cntrow; row++)  
  {
    double ikod=GetCode(rowkod[row]);
    var dbRow=KDateFromD(GetBegDate(rowkod[row]));
    var deRow=KDateFromD(GetEndDate(rowkod[row]));
    if (dbRow.IsValid() && dbRow.GT(kDate)) //вид еще не открыт
      continue;
    
    if (deRow.IsValid() && deRow.LT(kDate)) //вид закрыт
      continue;
      
    return row;  
  }
  return -1;  
}

Использовать так:

var d=KDateFromInt_WithDay(1,mrasch);
if (TryFindCodeValidOnDate(comb,extCode,d)==-1) //вид на 1 первое число расчетного месяца не найден..
{
  //код для открытия вида
}

Если в конкретном ЛС, то можно настроить видимость по набору видов и, при необходимости, отправить в Excel.

На рассмотрении

Существование за какой период нужно проверить ( за расчетный месяц?) ? Как это планируется использовать?

За расчетный месяц. Это связано с автоматическим открытием видов оплаты. Раньше я почему то думал, что закрытие это удаление. А, фактически, закрытие - это проставление даты окончания отличной от 01.01.2050. Поскольку открытие предполагается после записи ЛС (раньше не отловить, насколько я понял), то нужно сделать анализ на предмет того, что открыто и закрыто. У меня 2 вида оплаты - аванс. Алгоритм один, а назначение разное: одно - выплата через банк, другое - через кассу.   Разумеется, два одновременно не должны быть открыты. Или одно, или другое. Предполагается, что закрываем одно, открывается другое.

+2
Ответ
Отвечен

Пример функции:

TryFindCodeValidOnDate(comb,extCode,kDate)
{
  var Prob = CreateObject("APropBE");
  Prob.Init(CLL_TOTAL_SRC,CLL_TOTAL_SUBJECT,CLL_TOTAL_PODR,comb); //инициализируем APropBE вн.кодом совместительства
  int rowkod[ROWMAX];//массив с номерами строк
  int cntrow=poiskosnkodProp(Extern_To_Intern(extCode),rowkod,0,Prob);//получаем список строк с кодом==kod
  for (int row=0; row<cntrow; row++)  
  {
    double ikod=GetCode(rowkod[row]);
    var dbRow=KDateFromD(GetBegDate(rowkod[row]));
    var deRow=KDateFromD(GetEndDate(rowkod[row]));
    if (dbRow.IsValid() && dbRow.GT(kDate)) //вид еще не открыт
      continue;
    
    if (deRow.IsValid() && deRow.LT(kDate)) //вид закрыт
      continue;
      
    return row;  
  }
  return -1;  
}

Использовать так:

var d=KDateFromInt_WithDay(1,mrasch);
if (TryFindCodeValidOnDate(comb,extCode,d)==-1) //вид на 1 первое число расчетного месяца не найден..
{
  //код для открытия вида
}

Еще вопросик. Если параметр comb имеет значение, то как получить список совместительств для лицевого счета?

+1
  var CL=CreateObject("CombineList");
  var it = CL.CreateIterator();
  for (it.SetBegin();!it.IsEnd();it.Next()) //цикл по должностям (it.CurKey() - внутр.код совместительства )
  {  
    int combine=it.CurKey();   }

Сервис поддержки клиентов работает на платформе UserEcho