Данные добавляется повторно
На страницу 1, 2 След.
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
брат666 Участник со стажем
Вступление в Клуб: 20.02.2014
|
Чт Авг 27, 2015 15:39  Данные добавляется повторно |
|
Полезность: Нет оценки
|
Добрый день . Написал процедуру такую.
Код: | PROCEDURE GET_ZLG_HOME_PROP_DATA(P_ZALOG REF [ZALOG]) IS
ZAYAVKA REF [DECL_ON_GET_CRED];
ANKET REF [VTA_CARDLOAN_APP];
rec rec_tab;
C_ZALOG VARCHAR;
BEGIN
BEGIN SELECT C(C.PART_TO_LOAN.PRODUCT : PRD) IN ::[ZALOG] WHERE C%ID = P_ZALOG%ID INTO C_ZALOG;
EXCEPTION WHEN OTHERS THEN NULL;
END;
BEGIN
LOCATE ZAYAVKA IN ::[DECL_ON_GET_CRED] WHERE ZAYAVKA.[DECL_PRD] = C_ZALOG;
LOCATE ANKET IN ::[VTA_CARDLOAN_APP] WHERE ANKET.[APP_REF] = ZAYAVKA%ID;--'300110049';
EXCEPTION WHEN OTHERS THEN
NULL;
END;
C := 0;
FOR (SELECT Z(Z.[NAME_PROP] : NAME_PR,
Z.[AMT_PROP] : CNT_PROP,
Z.[PRICE_PROP] : PRC_PROP,
Z.[SUM_PROP] : SUM_PROP) IN ANKET.[HOME_PROP] ALL
)
LOOP
C := C + 1;
rec(C).name := Z.NAME_PR;
rec(C).cnt := Z.CNT_PROP;
rec(C).price := Z.PRC_PROP;
rec(C).summ := Z.SUM_PROP;
FOR C IN REC.first..REC.last
LOOP
V_HOME_PR_NAME := rec(C).name;
V_HOME_PR_CNT := rec(C).cnt;
V_HOME_PR_PRC := rec(C).price;
V_HOME_PR_SUM := rec(C).summ;
END LOOP;
--word.add_tabrow(2);
--word.Set_CellValue (2, 1, C);
--word.Set_CellValue (2, 2, V_HOME_PR_NAME);
--word.Set_CellValue (2, 3, V_HOME_PR_CNT);
--word.Set_CellValue (2, 4, V_HOME_PR_PRC);
--word.Set_CellValue (2, 5, V_HOME_PR_SUM);
END LOOP;
END; |
Так как не заработал добавление строк , закомментировал и в клиент-скрипте кое-что добавил.
Код: | '#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"
else
MsgBox "Net informacii o poruchitelyax!", vbOKOnly & vbInformation, "Danniye otsutstvuyut"
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
if CRED_CODE = "RC6007" then
for row = 1 to GetData("CNT")
WrdDoc.Tables(2).Rows.Add
WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 1).Range.InsertAfter(GetData("CNT"))
WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 2).Range.InsertAfter(GetData("HOME_PR_NAME"))
WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 3).Range.InsertAfter(GetData("HOME_PR_CNT"))
WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 4).Range.InsertAfter(GetData("HOME_PR_PRC"))
WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 5).Range.InsertAfter(GetData("HOME_PR_SUM"))
next
end if
'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
if CRED_CODE = "SM1001" then
WrdDoc.ExportAsFixedFormat "C:\Temp\main_doc.pdf", 17, true, 0, 0,1, 1, 0, True,True, 0, True, True, False
else
call SetWordVisible(WrdApp, WrdDoc)' pokazat` dokument
end If
PrintWordDoc = True
End function |
и в проверке вызываю процедуру и
Код: | elsif p_info = 'HOME_PR_NAME' then
P_DATA := V_HOME_PR_NAME;
V_HOME_PR_NAME := '';
elsif p_info = 'HOME_PR_CNT' then
P_DATA := V_HOME_PR_CNT;
V_HOME_PR_CNT := '';
elsif p_info = 'HOME_PR_PRC' then
P_DATA := V_HOME_PR_PRC;
V_HOME_PR_PRC := '';
elsif p_info = 'HOME_PR_SUM' then
P_DATA := V_HOME_PR_SUM;
V_HOME_PR_SUM := '';
elsif p_info = 'CNT' then
P_DATA := C;
C := ''; |
Но у меня данные добавляется повторно в строках.Просьба помочь решить проблему.За ранее благодарен. |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Чт Авг 27, 2015 16:36   |
|
Полезность: 1
|
mdb можешь прислать?
или в текстовом виде то что у тебя выводится?
Есть мнение что у тебя не перевызывается
PROCEDURE GET_ZLG_HOME_PROP_DATA(P_ZALOG REF [ZALOG]) IS,
так как с клиент скрипте нет
Call Runtime.ServerValidate(nothing, "%VAR%.V_REFRESHVARIABLE"),
который у тебя мог бы вызвать GET_ZLG_HOME_PROP_DATA, которая в свою очередь вызывала бы
V_HOME_PR_NAME := rec(C).name;
V_HOME_PR_CNT := rec(C).cnt;
V_HOME_PR_PRC := rec(C).price;
V_HOME_PR_SUM := rec(C).summ;
как новый комплект значений
Как то так... |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Чт Авг 27, 2015 16:39   |
|
Полезность: 1
|
Соответственно в секции проверка разместить GET_ZLG_HOME_PROP_DATA
У меня вот так формировалось... (сейчас уже эту технологию не использую)
elsif P_INFO = '%VAR%.V_REFRESHVARIABLE' then
F1 := curcred.[CLIENT].[NAME]||' - '||ProperNumDog(curcred.[NUM_DOG])||' - '||curcred%id;--V_REFRESHVARIABLE;--V_REFRESHVARIABLE;
F2 := curcred.[CLIENT].[NAME];-- ФИО клиента
F3 := GetAddrClientByCred(curcred);--curcred.[CLIENT].[NAME];-- Адрес регистрации;
F4 := StdLib.Fio(curcred.[CLIENT].[NAME], 'И О');--curcred.[CLIENT].[NAME];--||V_REFRESHVARIABLE;
F5 := curcred.[NUM_DOG];--||V_REFRESHVARIABLE;
F6 := to_char(curcred.[DATE_BEGIN],'dd');--curcred.[CLIENT].[NAME];--||V_REFRESHVARIABLE;
F7 := ::[RUNTIME].[TMC_REPORTS].get_month_str(curcred.[DATE_BEGIN]);--curcred.[CLIENT].[NAME];--||V_REFRESHVARIABLE;
F8 := to_char(curcred.[DATE_BEGIN],'yyyy');--curcred.[CLIENT].[NAME];--||V_REFRESHVARIABLE; |
|
 |
брат666 Участник со стажем
Вступление в Клуб: 20.02.2014
|
Пт Авг 28, 2015 07:25   |
|
Полезность: Нет оценки
|
mdb файл . |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пт Авг 28, 2015 09:30   |
|
Полезность: Нет оценки
|
Бро,
возможно стоит сделать так
Код: |
PROCEDURE GET_ZLG_HOME_PROP_DATA(P_ZALOG REF [ZALOG]) IS
ZAYAVKA REF [DECL_ON_GET_CRED];
ANKET REF [VTA_CARDLOAN_APP];
rec rec_tab;
C_ZALOG VARCHAR;
BEGIN
|
rec.Delete; |
|
 |
брат666 Участник со стажем
Вступление в Клуб: 20.02.2014
|
Пт Авг 28, 2015 09:43   |
|
Полезность: Нет оценки
|
Я не врубился, можно по точнее ? А то я уже сегодня тоже несколько вариантов пробовал, не получился. |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пт Авг 28, 2015 09:56   |
|
Полезность: 1
|
брат666 пишет: | Я не врубился, можно по точнее ? А то я уже сегодня тоже несколько вариантов пробовал, не получился. |
завязывай с травой, Бро
Временную табличку rec очистить в начале процедуры. |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пт Авг 28, 2015 12:28   |
|
Полезность: Нет оценки
|
брат666 пишет: | mdb файл . |
Можешь так же выслать
Цитата: |
PRAGMA INCLUDE([VTA_AZ_SYMBOLS].[CH]); |
? |
|
 |
брат666 Участник со стажем
Вступление в Клуб: 20.02.2014
|
Пт Авг 28, 2015 12:39   |
|
Полезность: Нет оценки
|
Это для использование латинских символов,точнее наших букв. Думаю что, это не нужен тебе. А так все понятно там? |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пт Авг 28, 2015 13:03   |
|
Полезность: 1
|
Забодался твои макроподстановки комментировать
Процесс продолжается в текущий момент
Шаблон документа еще нужен...с полями
...
Или у тебя здесь повторы?
Код: |
if CRED_CODE = "RC6007" then
for row = 1 to GetData("CNT")
WrdDoc.Tables(2).Rows.Add
WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 1).Range.InsertAfter(GetData("CNT"))
WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 2).Range.InsertAfter(GetData("HOME_PR_NAME"))
WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 3).Range.InsertAfter(GetData("HOME_PR_CNT"))
WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 4).Range.InsertAfter(GetData("HOME_PR_PRC"))
WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 5).Range.InsertAfter(GetData("HOME_PR_SUM"))
next
end if
|
|
|
 |
брат666 Участник со стажем
Вступление в Клуб: 20.02.2014
|
Пт Авг 28, 2015 13:25   |
|
Полезность: Нет оценки
|
Ты реально меня выручаешь , благодарен очень заранее . |
|
 |
брат666 Участник со стажем
Вступление в Клуб: 20.02.2014
|
Пт Авг 28, 2015 15:50   |
|
Полезность: Нет оценки
|
[code]begin
if P_MESSAGE = 'DEFAULT' then
V_ADR_MASK := '$POST_CODE $CITY $STREET $HOUSE $KORPUS $FLAT';
V_GRAPH_XLS := (nvl(::[SYSTEM_PARAMS].[GET]('CRED_GRAPH_XLS'), '0') = '1');
V_DEFAULT := nvl(V_DEFAULT, true);
V_DATE_ON := Oper_Day;
P_ZAL := this;
--GET_ZLG_HOME_PROP_DATA(THIS); -- !VTB Orkhan Huseynov 26/08/2015 11:33:27 !! |
elsif P_MESSAGE = 'VALIDATE' then
GET_ZLG_HOME_PROP_DATA(THIS);
P_DATA := ' ';
-- dlya obrabotki neskol`kix odinakovyx polei
if substr(p_info, -1) in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
and instr(p_info, 'PRC_DEBT_CR_112') = 0 then-- Isklyuchaem kodiki okanchivayushhiesya na cifru
p_info := substr(p_info, 1, length(p_info) - 1);
end if;
if p_info in ('P_FILE_NAME', 'P_FILE_NAME.NAME') then
V_DEFAULT := false;
IniFileManager(P_ZAL, P_FILE_NAME, V_DEFAULT, V_FILE_MANAGER);
elsif p_info = '%VAR%.V_DEFAULT'
and V_DEFAULT then
IniFileManager(P_ZAL, P_FILE_NAME, V_DEFAULT, V_FILE_MANAGER);
elsif p_info in
('%VAR%.V_FILE_MANAGER.SRC_MASK'
,'%VAR%.V_FILE_MANAGER.SRC_PATH'
,'%VAR%.V_FILE_MANAGER.SRC_NAME'
)then
if V_FILE_MANAGER.[SRC_NAME] != P_FILE_NAME.[NAME] then
P_FILE_NAME := null;
end if;
V_DEFAULT := false;
end if;
if p_info = 'REPORTFILE' then
P_DATA := V_FILE_MANAGER.[SRC_NAME];--&ReportFile;--V_FILE_MANAGER.[SRC_PATH]||;
elsif p_info = 'REPORTPATH' then
P_DATA := 'Z:\Doc\Credit_Card_Action_girov_mug.doc';--V_FILE_MANAGER.[SRC_PATH];--[MSLIB].GetReportPath;--'D:\DVZ\docum.dot'
elsif p_info = 'OSN' then
p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_osn([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
elsif p_info = 'FIO_DIR' then
p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_fio_dir([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
elsif p_info = 'BANK_NAME' then
p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_bname([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
elsif p_info = 'BANK_ADDRES' then
p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_baddr([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
elsif p_info = 'BANK_VOEN' then
p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_bvoen([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
elsif p_info = 'BANK_FADMH' then
p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_bbik([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
elsif p_info = 'BANK_SWIFT' then
p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_bsw([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
elsif p_info = 'DOLJ' then
p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_dolj([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([code]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
elsif p_info = 'HOME_PR_NAME' then
P_DATA := V_HOME_PR_NAME;
--V_HOME_PR_NAME := '';
elsif p_info = 'HOME_PR_CNT' then
P_DATA := V_HOME_PR_CNT;
--V_HOME_PR_CNT := '';
elsif p_info = 'HOME_PR_PRC' then
P_DATA := V_HOME_PR_PRC;
--V_HOME_PR_PRC := '';
elsif p_info = 'HOME_PR_SUM' then
P_DATA := V_HOME_PR_SUM;
--V_HOME_PR_SUM := '';
elsif p_info = 'CNT' then
P_DATA := C;
-- C := '';
--END IF;
end if;
end if;
end;[/code]
вот сокращенный код, не надо с лишними разобраться.пока что у меня не хляет  |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пт Авг 28, 2015 15:53   |
|
Полезность: 1
|
Я правильно понимаю в таблице у тебя повтор всегда по последнему элементу массива
V_HOME_PR_NAME := rec(rec.last).name;
V_HOME_PR_CNT := rec(rec.last).cnt;
V_HOME_PR_PRC := rec(rec.last).price;
V_HOME_PR_SUM := rec(rec.last).summ;
???
Код: |
FOR (SELECT Z(Z.[NAME_PROP] : NAME_PR,
Z.[AMT_PROP] : CNT_PROP,
Z.[PRICE_PROP] : PRC_PROP,
Z.[SUM_PROP] : SUM_PROP) IN ANKET.[HOME_PROP] ALL
)
LOOP
C := C + 1;
rec(C).name := Z.NAME_PR;
rec(C).cnt := Z.CNT_PROP;
rec(C).price := Z.PRC_PROP;
rec(C).summ := Z.SUM_PROP;
FOR C IN REC.first..REC.last
LOOP
V_HOME_PR_NAME := rec(C).name;
V_HOME_PR_CNT := rec(C).cnt;
V_HOME_PR_PRC := rec(C).price;
V_HOME_PR_SUM := rec(C).summ;
END LOOP;
--word.add_tabrow(2);
--word.Set_CellValue (2, 1, C);
--word.Set_CellValue (2, 2, V_HOME_PR_NAME);
--word.Set_CellValue (2, 3, V_HOME_PR_CNT);
--word.Set_CellValue (2, 4, V_HOME_PR_PRC);
--word.Set_CellValue (2, 5, V_HOME_PR_SUM);
END LOOP;
END; |
|
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пт Авг 28, 2015 20:03   |
|
Полезность: 1
|
Дабы сильно не менять структуру кода, можно сделать следующее:
1. Индексированный массив rec rec_tab; перемести из функции GET_ZLG_HOME_PROP_DATA просто в глобальные описания... например вот так:
Код: |
type rec_tab is table of TRepLine;
rec rec_tab;
V_HOME_PR_NAME VARCHAR;
V_HOME_PR_CNT VARCHAR;
V_HOME_PR_PRC VARCHAR;
V_HOME_PR_SUM VARCHAR;
C INTEGER;
|
2. В начале функции GET_ZLG_HOME_PROP_DATA чисть массив rec, дабы при повторных вызовах не было путаницы
Код: |
PROCEDURE GET_ZLG_HOME_PROP_DATA(P_ZALOG REF [ZALOG]) IS
ZAYAVKA REF [DECL_ON_GET_CRED];
ANKET REF [VTA_CARDLOAN_APP];
C_ZALOG VARCHAR;
BEGIN
rec.delete;
|
3. Там же (см.п.1) заведи переменную, текущий указатель элемента индексированного массива
Код: |
type rec_tab is table of TRepLine;
rec rec_tab;
cur_rec_num number := 1;
|
4. Конечно не очень хорошо по каждому обращению вызывать GET_ZLG_HOME_PROP_DATA, я бы перенес ... но ладно, можно оставить
Код: |
elsif P_MESSAGE = 'VALIDATE' then
GET_ZLG_HOME_PROP_DATA(THIS);
P_DATA := ' ';
|
5. В секцию проверка добавить
Код: |
if p_info = 'OK' then
cur_rec_num := 1;
end if;
|
6. Код
Код: |
elsif p_info = 'HOME_PR_NAME' then
P_DATA := V_HOME_PR_NAME;
V_HOME_PR_NAME := '';
elsif p_info = 'HOME_PR_CNT' then
P_DATA := V_HOME_PR_CNT;
V_HOME_PR_CNT := '';
elsif p_info = 'HOME_PR_PRC' then
P_DATA := V_HOME_PR_PRC;
V_HOME_PR_PRC := '';
elsif p_info = 'HOME_PR_SUM' then
P_DATA := V_HOME_PR_SUM;
V_HOME_PR_SUM := '';
elsif p_info = 'CNT' then
P_DATA := C;
C := '';
end if;
|
Поменять на такой
Код: |
elsif p_info = 'HOME_PR_NAME' then
if cur_rec_num <= rec.count rhen
P_DATA := rec(cur_rec_num).name;--V_HOME_PR_NAME;
end if;
V_HOME_PR_NAME := '';
elsif p_info = 'HOME_PR_CNT' then
if cur_rec_num <= rec.count rhen
P_DATA := rec(cur_rec_num).cnt;--V_HOME_PR_CNT;
end if;
V_HOME_PR_CNT := '';
elsif p_info = 'HOME_PR_PRC' then
if cur_rec_num <= rec.count rhen
P_DATA := rec(cur_rec_num).price;--V_HOME_PR_PRC;
end if;
V_HOME_PR_PRC := '';
elsif p_info = 'HOME_PR_SUM' then
if cur_rec_num <= rec.count rhen
P_DATA := rec(cur_rec_num).summ;--V_HOME_PR_SUM;
end if;
V_HOME_PR_SUM := '';
cur_rec_num := cur_rec_num + 1;
elsif p_info = 'CNT' then
P_DATA := C;
C := '';
end if;
|
Должно заработать |
|
 |
брат666 Участник со стажем
Вступление в Клуб: 20.02.2014
|
Пн Авг 31, 2015 08:21   |
|
Полезность: Нет оценки
|
Спасибо большое, заработал. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|