CftClub.ru
Клуб специалистов ЦФТ-Банк

распечатка писем

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Банковская отчетность (оперативная, обязательная, Oracle Reports)
Предыдущая тема :: Следующая тема  
Автор Сообщение
брат666
Участник со стажем


Вступление в Клуб: 20.02.2014
СообщениеПт Май 30, 2014 15:41   распечатка писем Ответить с цитатой
Полезность: Нет оценки
добрый вечер.у меня такая проблема.есть список счетов (у клиентов).у одного клиента может быть несколько счетов.у меня операция выводит шаблоны по каждому счету.а мне надо что если у клиента несколько счетов тогда эти счета выходило в один шаблон.
помогите пожалуйста.за ранее спасибо.
вот скрипт :

проверка :
Код:

/*
V dannoy procedure pri najatii knopki OK proisxodyat sleduyushiye deystviya:

1. Iz klient-skripta vizivayetsya funkciya GetData("COUNT") dlya opredelyeniya kolichestva poruchiteley
2. Funkciya GetData v chasti VALIDATE proverki pri obrabotki zaprosa na "COUNT" formiruyetsya stroka IDS, v
   kotoroy cherez zapyatuyu perechislyayutsya ID zalogov
3. V klient-skripte v cikle vizivayetsya procedura pechati dokumenta
4. V chasti VALIDATE proverki pri obrabotki zaprosa na "REPORTFILE" kajdiy raz iz stroki IDS virezayetsya po odnomu
   ID i na ego osnove naxodyatsya danniye o porushitele
*/

cl          varchar2;
i           natural;
--ist_izm     ref [VTA_SCH_CL];
nom_str     number := 0;
n           integer := 0;
v_data      varchar2;
CNT         number;
P_DATA      varchar(100);
P_DATA1      varchar(100);
z          number;

v           number;
v_sch      varchar2;

type sch_l is table of ac_fin.main_v_id%type index by integer;
schet_list  sch_l;

begin
   debug_pipe('!oh P_INFO = ' || P_INFO, 0);
   debug_pipe('!oh V_DEST = ' || V_DEST, 0);
   if p_message = 'DEFAULT' then
      rDate := nvl(trunc(rDate), ::[SYSTEM].[OP_DATE]);
      --word.init_wrd;
      --wordstate := word.wmDraw;
   elsif P_MESSAGE = 'VALIDATE' then
   
      if P_INFO = 'zapolnit' then
         V_SCHET.delete();
         if P#TYPE.[0] = 1 then
            cl := 'CL_PRIV';
         elsif P#TYPE.[0] = 2 then
            cl := 'CL_ORG';
         else
            cl := 'CL_PRIV,CL_ORG';
         end if;
         
               for   (select t( t.[MAIN_V_ID]               : schet,
                            t.[CLIENT_V].[REGISTR_NUM]  : r_num,
                            t.[DATE_LAST]               : date_r,
                            t.[SALDO]                   : saldo,
                            t.[FINTOOL].[CUR_SHORT]     : cur,
                            t.[CLIENT_V].[NAME]       : name,
                            t.[CLIENT_V]             : cl ) IN ::[AC_FIN]
                                                                 where  t.[MAIN_USV].[VID_P] = ::[SYSTEM].[SYS_MAIN_PLAN]
                                                                  and  t.[MAIN_V_ID] like 'AZ%'
                                                                  and  instr(cl,t.[CLIENT_V]%class)>0 order by t.[CLIENT_V].[NAME]
                      )
                loop
                   if (rDate - t.date_r > 365 and t.saldo != 0) or (t.date_r = null and t.saldo != 0) then
                       n := n + 1;
                       schet_list(n) := t.schet;
          
                        for s in schet_list.first..schet_list.last
                        loop
                             v_data := schet_list(s);
                        end loop;
                        nom_str := nom_str+1;
                      V_SCHET(V_SCHET.count + 1).CL_REG := t.r_num;
                      V_SCHET(V_SCHET.count).[NUM_S] := nom_str;
                      V_SCHET(V_SCHET.count).[CL_SCH] := v_data;
                      V_SCHET(V_SCHET.count).[SCH_CUR] := t.cur;
                      V_SCHET(V_SCHET.count).[SCH_SAL] := t.saldo;
                      V_SCHET(V_SCHET.count).[CL] := t.cl;
                      V_SCHET(V_SCHET.count).[CL_NAME] := t.name;
                   end if;
               end loop;

      end if;

      
      IF P_INFO = 'COUNT' THEN
          CNT := 0;
         IDS := '';
         
          i := V_SCHET.first;
         while i is not null loop
            if V_SCHET(i).[SEL_S] then
               CNT := CNT + 1;
               IDS := IDS || V_SCHET(i).[NUM_S]||',';
               --debug_pipe('!oh IDS = ' || IDS, 0);
            end if;
            i := V_SCHET.next(i);
         end loop;
      
         V_DEST := CNT;
      
      ELSif   p_info = 'REPORTFILE' then
           V_DEST := 'TEST.docx';
           
           I := INSTR(IDS, ',', 1, 1);
          
          Z := to_number(SUBSTR(IDS, 1, I - 1));
          IDS := SUBSTR(IDS, I + 1, LENGTH(IDS));
          
          --&debug_pipe('i='||i,0);
          --&debug_pipe('Z='||Z,0);
          --&debug_pipe('IDS='||IDS,0);
         
         i := V_SCHET.first;
         while i is not null loop
            if V_SCHET(i).[SEL_S] and V_SCHET(i).[NUM_S] = z then
                v_acc_num := V_SCHET(i).[CL_SCH];
            end if;
            i := V_SCHET.next(i);
         end loop;
         
         i := V_SCHET.first;
         while i is not null loop
            if V_SCHET(i).[SEL_S] and V_SCHET(i).[NUM_S] = z then
                v_acc_cur := V_SCHET(i).[SCH_CUR];
            end if;
            i := V_SCHET.next(i);
         end loop;
         
         i := V_SCHET.first;
         while i is not null loop
            if V_SCHET(i).[SEL_S] and V_SCHET(i).[NUM_S] = z then
                v_acc_sal := to_char(V_SCHET(i).[SCH_SAL],'999999990.99');
            end if;
            i := V_SCHET.next(i);
         end loop;
         
         i := V_SCHET.first;
         while i is not null loop
            if V_SCHET(i).[SEL_S] and V_SCHET(i).[NUM_S] = z then
                v_client := V_SCHET(i).[CL];
            end if;
            i := V_SCHET.next(i);
         end loop;
         
         i := V_SCHET.first;
         while i is not null loop
            if V_SCHET(i).[SEL_S] and V_SCHET(i).[NUM_S] = z then
                v_cl_name := V_SCHET(i).[CL_NAME];
            end if;
            i := V_SCHET.next(i);
         end loop;
         
          &debug_pipe('v_acc_num='||v_acc_num,0);
           
      ELSif   p_info = 'REPORTPATH' then
            V_DEST := 'D:\';
       
       ELSif   p_info = 'ACCOUNTS' then
            V_DEST := v_acc_num;
            v_acc_num := '';
            
       ELSif   p_info = 'CURRENCY' then         
            V_DEST := v_acc_cur;
         v_acc_cur := '';
         
        ELSif   p_info = 'SALDO' then
            V_DEST := v_acc_sal;
            v_acc_cur := '';
                 
      ELSif   p_info = 'NAME' then
            V_DEST := v_cl_name;
            v_cl_name := '';
      
      ELSif   p_info = 'ADDRESS' then
            V_DEST := ::[RUNTIME].[VIEWFUN].GetAddress(v_client,'POST_CODE,CITY,STREET,KORPUS,HOUSE,FLAT');
      
      ELSif   p_info = 'CHIEF_NAME' then
         P_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_fio_dir_filial(::[RUNTIME].[STDLIB].USER_ID.[DEPART].[FILIAL_V],::[SYSTEM].[OP_DATE]);
         V_DEST := P_DATA;
      
      ELSif   p_info = 'CHIEF_CASTA' then
         P_DATA1 := ::[VTA_REKV_F].[VTA_PRINTLIB].get_dolj_filial(::[RUNTIME].[STDLIB].USER_ID.[DEPART].[FILIAL_V],::[SYSTEM].[OP_DATE]);
         V_DEST := P_DATA1;
      
      end if;   
               
   end if;
end;


глобальные описания :

Код:

v_acc_num varchar(100);
v_acc_cur varchar(100);
v_acc_sal varchar(100);
v_client  varchar(100);
v_cl_name varchar(100);



локальные описания :
Код:

IDS         varchar(1000);


клиент-скрипт :
Код:

' podgrujaem biblioteku "Biblioteka VBA funkcii dlya pechati v Word"
'#include ::[RUNTIME].[MSWORD_SCRIPT]


Public Function Main(LastControl)
On Error Resume Next
   If LastControl is OK then
      CNT = GetData("COUNT")
      if CNT > 0 then
         i = 1
      
         for i = 1 to CNT
            if PrintWordDoc = False then
               Main = False
               Exit Function
            end if
         next
            
         MsgBox "Kolichestvo raspechatannix dogovorov: " + cnt, vbOKOnly & vbInformation, "Pechat uspeshno zakonchena"
      end if
   End If
   
   Main = True ' Rezul`tiruyushhee znachenie validatora (True ili False)
End Function

Public function PrintWordDoc
   if not OpenWordDoc(WrdApp, WrdDoc, GetData("REPORTFILE")) then
      'MsgBox "Can not open file!"
      PrintWordDoc = False
      Exit Function
   end if

   dim FieldsColl
   set FieldsColl = WrdApp.ActiveDocument.FormFields
   if FieldsColl.Count >= 1 then
      for Each aField in FieldsColl
         Text4Setting = GetData(aField.Name)
         if Text4Setting = "" then
            Text4Setting = " "
         end if
         if Len(Text4Setting) > 255 _
         or instr(1, Text4Setting, vbLF, vbBinaryCompare) > 0 _
         then
            WrdDoc.FormFields(aField.Name).Select
            Call WrdApp.Selection.TypeText(Text4Setting)
         else
            aField.Result = Text4Setting
         end if
      next
   end If
   
   
   
     WrdDoc.Tables(1).Rows.Add
   WrdDoc.Tables(1).Cell(WrdDoc.Tables(1).Rows.Last.Index, 1).Range.InsertAfter(GetData("ACCOUNTS"))
    WrdDoc.Tables(1).Cell(WrdDoc.Tables(1).Rows.Last.Index, 2).Range.InsertAfter(GetData("CURRENCY"))
    WrdDoc.Tables(1).Cell(WrdDoc.Tables(1).Rows.Last.Index, 3).Range.InsertAfter(GetData("SALDO"))
   
   call SetWordVisible(WrdApp, WrdDoc)' pokazat` dokument
   'WrdDoc.ExportAsFixedFormat "C:\Temp\main_doc.pdf",  17, true, 0, 0,1, 1, 0, True,True, 0, True, True, False
   PrintWordDoc = True
End function
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Банковская отчетность (оперативная, обязательная, Oracle Reports) Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru