| 
 
	
		| Предыдущая тема :: Следующая тема |  
		| Автор | Сообщение |  
		| брат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);
 
 
 | 
 
 локальные описания :
 
 
 клиент-скрипт :
 
  	  | Код: |  	  | ' 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
 
 | 
 |  |  
		|  |  
		|  |  
  
	| 
 
 | Вы не можете начинать темы Вы не можете отвечать на сообщения
 Вы не можете редактировать свои сообщения
 Вы не можете удалять свои сообщения
 Вы не можете голосовать в опросах
 
 |  |