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