валютный и сомовый балансы за архивный день

0 (0)
  • Развернуть валютный и сомовый балансы за архивный день ( Мирбек  14.09.2006 13:36 )
    5(1)
    народ, здравствуй?
    задача передо мной следующая была:
    Рассчитать объязательные резервы (ОРТ) за неделю и внедрить этот макрос в меню пользователя.
    По старой схеме все это делалось с помощью макросов на VBA Excell т.е. в RSBank е каждый день выгружают dbf файлы и с этих файлов в пятницу вечером получают ОРТ.
    короче смотрю как формируется DBF файлы и вижу что они получаются из сомового(национальная валютя Кыргызской Республики) и валютного баланса.
    Шеф хочет чтобы каждый день не выгружать и это все происходило в самой RSBank е.
    Я написал макрос который считает ОРТ. Этот макрос как бы считает но только делает только за текущий день (остальные заполняются эти днем)хотя я постарался делать за 5 рабочих дней.
    в документации написано что за архивный день отвечают пункт структуры bl_info.rec BdRepdate
    все это стоит вроде.
    Что делать помогите???
    также никак не удается запустить РассчитатьБалансПоГлавеВал(bl_info) без процедуры ПанельОтчет(bl_info).Все приходится делать нажмимая клавишу F2
    пока это все вручную делается???

    >> Ответить
    • Развернуть Вот так это делается ( Izmajlov  18.09.2006 12:14 )
      5(1)
      import Баланс;
      file Bal (blrep);
      record rc("bl_info.rec");
      file curd(curdate);
      next(curd);
      CurDate=curd.CurDate;
      PrevDate=curd.PrevDate;
      RepDate=curd.PrevDate;
      /* Рассчитать в рублях за прошлый жень*/
      IA=IP=D=K=OA=OP=0;
      rc.iChapter          = 1;
      rc.iKind             = 7;
      rc.iUnit             = 1;
      rc.iCurrency         = 1;
      rc.bdRepDate         = RepDate;
      
      BalName=РассчитатьБалансПоГлаве(rc);
      open(Bal,BalName);
      while (next (Bal))                    /* перебор балансовых счетов */
              if (rc.iUnit==1)
                      InActive   = Bal.dmInActive;
                      InPassive  = Bal.dmInPassive;
                      Debet      = Bal.dmDebet;
                      Kredit     = Bal.dmCredit;
                      OutActive  = Bal.dmOutActive;
                      OutPassive = Bal.dmOutPassive;
                      IA      =IA+Bal.dmInActive;
                      IP      =IP+Bal.dmInPassive;
                      D       =D +Bal.dmDebet;
                      K       =K +Bal.dmCredit;
                      OA      =OA+Bal.dmOutActive;
                      OP      =OP+Bal.dmOutPassive;
              else
                      InActive   = double(Bal.lmInActiveThR); /*изменено IA   =IA+double(Bal.dmInActiveThR);*/
                      InPassive  = double(Bal.lmInPassiveThR);
                      Debet      = double(Bal.lmDebetThR);
                      Kredit     = double(Bal.lmCreditThR);
                      OutActive  = double(Bal.lmOutActiveThR);
                      OutPassive = double(Bal.lmOutPassiveThR);
                      IA      =IA+double(Bal.lmInActiveThR);   /*изменено IA  =IA+double(Bal.dmInActiveThR);*/
                      IP      =IP+double(Bal.lmInPassiveThR);
                      D       =D +double(Bal.lmDebetThR);
                      K       =K +double(Bal.lmCreditThR);
                      OA      =OA+double(Bal.lmOutActiveThR);
                      OP      =OP+double(Bal.lmOutPassiveThR);
              end;
      end;
      
      Структура bl_info (скопировал из RSL_Proc)
      iChapter – номер главы счетов, по которой необходимо выполнить расчет баланса; по
      умолчанию значение равно 0 и расчет выполняется по всем главам.
      iKind – период выпуска баланса. Данный параметр может принимать следующие значения:
      1 – День,
      2 – Месяц,
      3 – Квартал,
      4 – Год,
      5 – Накопительный,
      6 – Годовой заключительный,
      7 – День в прошлом,
      8 – Период.
      По умолчанию значение параметра равно 0 и баланс выпускается за текущий
      операционный день.
      iUnit – размерность сумм баланса, по умолчанию ее значение равно 2. Данный параметр
      может принимать следующие значения:
      1 – В рублях и копейках,
      2 – В тысячах.
      iCurrency – параметр определяет учет счетов покрытия, по умолчанию его значение равно
      1. Параметр может принимать следующие значения:
      1 – Все счета,
      2 – Только счета рублевого покрытия,
      3 – Без счетов рублевого покрытия.
      iRecalcCurrency – код валюты для пересчета, по умолчанию его значение равно 0. Данный
      параметр может принимать значение любого кода валюты, которая есть в
      справочнике валют.
      iMonth – номер месяца, за который выпускается баланс. Данный параметр используется в
      случае формирования баланса за месяц.
      iQuarter – номер квартала, за который выпускается баланс. Данный параметр используется
      в случае формирования баланса за квартал.
      bdRepDate – дата, за которую выпускается баланс. Данный параметр используется в случае
      формирования баланса за архивный день.
      bdBeginDate – дата начала периода формирования баланса. Данный параметр используется
      в случае формирования баланса за период.
      bdEndDate – дата окончания периода формирования баланса. Данный параметр
      используется в случае формирования баланса за период.
      iFirstMonth – номер первого месяца баланса.
      iLastMonth – номер последнего месяца баланса.
      iRestMonth – номер месяца исходящего остатка.
      iOutYear – номер года исходящего остатка.
      IPlanNumber1 – номер плана балансовых счетов главы 1.
      IPlanNumber2 – номер плана балансовых счетов главы 2.
      IPlanNumber3 – номер плана балансовых счетов главы 3.
      IPlanNumber4 – номер плана балансовых счетов главы 4.
      IPlanNumber5 – номер плана балансовых счетов главы 5.
      NumDprt – номер филиала, по счетам которого выполняется расчет баланса.
      Oper – номер операциониста, по счетам которого рассчитывается баланс.
      Client – код клиента, по счетам которого выпускается баланс.
      Balance – номер балансового счета для лицевых счетов, относящихся к которому,
      выполняется расчет баланса.
      Type_Account – системный тип лицевых счетов, для которых следует рассчитать баланс.
      UserTypeAccount – пользовательский тип лицевых счетов, для которых рассчитывается
      баланс.
      IAlgorithm – номер алгоритма расчета баланса для валютных счетов.
      iReportNumber – номер отчета. Данный параметр может принимать следующие значения:
      1 – Рублевый баланс;
      2 – Валютный баланс;
      3 – Рублевая оборотно-сальдовая ведомость;
      4 – Валютная оборотно-сальдовая ведомость;
      5 – Рублевая оборотно-сальдовая ведомость, полученная с использованием процедур
      макроязыка RSL;
      6 – Рублевая сальдовая ведомость, полученная с использованием процедур макроязыка
      RSL.
      iOutForm – номер формы выпуска баланса (обороты/остатки). Возможные значения
      данного параметра хранятся в файле namealg.dbt.
      iGroup – вид группировки (итоги). Возможные значения данного параметра хранятся в
      файле namealg.dbt.
      Code_Currency – цифровой ISO-код валюты для расчета баланса по валютным счетам.
      CRpnZero – признак печати нулевых сумм:
      • Y – строки с нулевыми суммами будут представлены в отчете,
      • N – строки с нулевыми суммами будут исключены из отчета.
      cSetA – признак печати с апострофами:
      • Y – все суммы в отчете будут разделены по разрядам апострофами,
      • N – суммы в отчете не разделяются по разрядам.
      Независимо от вида выпускаемого баланса в данной структуре обязательно должны быть
      определены значения полей iChapter, iKind, iUnit, iCurrency.
      С уважением,
      Измайлов Ф.В.
      >> Ответить
      • Развернуть еще валютный баланс ( Мирбек  18.09.2006 13:20 )
        5(1)
        Спасибо за ответ!!!
        как я понял это у Вас баланс на нацинальной валюте за текущий день.
        Мне надо еще валютный баланс(в долларах, евро) и еще за все это делать 5 дней в одном макросе
        посоветуйте пожалуйста чтоб одним нажатием кнопки пользователю выводился готовый отчет на Excel е (Объязательные Резервы за неделю) надо еще учитывать праздничные дни
        Заранее спасибо.
        >> Ответить
      • Развернуть и еще один вопрос: этот пример для какой версии RS Bank написан ( Мирбек  18.09.2006 13:34 )
        5(1)
        этот пример для какой версии RS Bank написан
        >> Ответить
        • Развернуть Нда.. тут надо постараться :))) ( Izmajlov  18.09.2006 15:10 )
          5(1)
          Это как в притче - или накормить ухой, или дать удочку, что бы наловил рыбы. Я предпочту второе, обозначу приемы, а Вы потренируйтесь их применить. Так будет надежнее. Отвечаю по порядку.

          1. Макрос для любой версии, 086, 090...
          2. Что бы рассчитать не по национальной валюте а по долларам или евро то, надо, цитирую "iRecalcCurrency – код валюты для пересчета, по умолчанию его значение равно 0. Данный параметр может принимать значение любого кода валюты, которая есть в справочнике валют."
          3. Если нужен за пять дней , то вариантов два. Если за каждый день периода - прокручиваем пять раз .. если за период, то iKind – период выпуска баланса. Данный параметр устанавливаем - 8 период
          4. Как выводить в Excel -
          import Баланс, lgxs;
          File acc (account);
          File blr (blrep);
          Record inf ("bl_info.rec");
          /* 
          Надо заполнить структуру, см. пред.сообщение
           */
          v=РассчитатьБалансПоГлаве(inf);
          ob=TlgActiveX("Excel.Application",True);
          ob.Visible=True;
          ob.WorkBooks.Add();
          Row=2;
          Open(blr,v); 
          While(next(blr))
          	ob.Range("A"+String(Row)).Value=blr.Balance;
          	if ((blr.dmInActive!=0) or (blr.dmOutActive!=0))
          		ob.Range("B"+String(Row)).Value=Double(blr.dmInActive_R )/100;
          		ob.Range("C"+String(Row)).Value=Double(blr.dmInActive_V )/100;
          		ob.Range("D"+String(Row)).Value=Double(blr.dmInActive   )/100;
          		ob.Range("K"+String(Row)).Value=Double(blr.dmOutActive_R)/100;
          		ob.Range("L"+String(Row)).Value=Double(blr.dmOutActive_V)/100;
          		ob.Range("M"+String(Row)).Value=Double(blr.dmOutActive  )/100;
          	else
          		ob.Range("B"+String(Row)).Value=Double(blr.dmInPassive_R )/100;
          		ob.Range("C"+String(Row)).Value=Double(blr.dmInPassive_V )/100;
          		ob.Range("D"+String(Row)).Value=Double(blr.dmInPassive   )/100;
          		ob.Range("K"+String(Row)).Value=Double(blr.dmOutPassive_R)/100;
          		ob.Range("L"+String(Row)).Value=Double(blr.dmOutPassive_V)/100;
          		ob.Range("M"+String(Row)).Value=Double(blr.dmOutPassive  )/100;
          	end;
          	ob.Range("E"+String(Row)).Value=Double(blr.dmDebet_R )/100;
          	ob.Range("F"+String(Row)).Value=Double(blr.dmDebet_V )/100;
          	ob.Range("G"+String(Row)).Value=Double(blr.dmDebet   )/100;
          	ob.Range("H"+String(Row)).Value=Double(blr.dmCredit_R)/100;
          	ob.Range("I"+String(Row)).Value=Double(blr.dmCredit_V)/100;
          	ob.Range("J"+String(Row)).Value=Double(blr.dmCredit  )/100;
          	Row=Row+1;
          end;
          
          5. Как учитывать праздничные дни. В РСбанке, в системном сервисе есть Опция - Календарь, там надо внимательно просмотреть на предмет правильности выходных и праздников.
          import Календарь;
          Date1 = date(1);
          Date2 = date(10);
          While(Date1<=Date2)
               if(isWorkDay(Date1)==1)
               /* Обрабатываем рабочий день */
               end;
               Date1 = Date1 + 1;
          end;
          Описание функции
          IsWorkday (Date:V_Date):V_Integer
          Данная процедура определяет, является ли указанный день рабочим или нет.
          Параметры:
          Date − дата. По умолчанию – текущий день.
          Возвращаемое значение:
          Процедура возвращает значение:
          ♦ 1 − если день рабочий;
          ♦ 0 − если выходной;
          ♦ –1 − при возникновении ошибки.
          

          Успехов, Измайлов Ф.В.

          >> Ответить