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

Вопрос опять по формированию проводок в цикле
На страницу Пред.  1, 2
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеВт Май 15, 2018 08:36    Ответить с цитатой
Полезность: Нет оценки
Ну и в тему - как разобрался с тем, что из предыдущей проводки подтягиваются данные в следующую.

Перед init структуры ее в null отправил (переменную).

Правильно наверное?
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 16, 2018 13:26    Ответить с цитатой
Полезность: Нет оценки
Как всегда вопрос. )

ORA-00001: APP-UNIQUE: Дублируется значение реквизита [История состояний] в типе [DOCUMENT]

Вроде не было такого, когда один кассовый документ был.

--Первая
doc_struct :=null;
doc_struct%init(true,true);
doc_struct.[DOCUMENT_NUM] := to_char(i);
doc_struct.[DATE_DOC] := sysdate;
doc_struct.[DOCUMENT_DATE] := sysdate;
doc_struct.[DOCUMENT_USER] := stdlib.UserId;
doc_struct.[SUM] := to_number(P_SUMMA*P_COL);
doc_struct.[SUM_PO] := to_number(P_SUMMA*P_COL);
doc_struct.[SUM_NT] := to_number(P_SUMMA*P_COL);
doc_struct.[VID_DOC] := ::[NAME_PAYDOC]([CODE] = 'КАСС_ПРИХОД_ОРД');
doc_struct.[VID_OBOROTA] := ::[VID_OBOROT]([SHORT_NAME] = 'ОСНОВНЫЕ');
doc_struct.[NAZN] := 'За гос. регистрацию прав на недвижимое имущество и сделок с ним';
doc_struct.[ACC_DT] := P_KASS.[3];

if to_char(stdlib.userid.[DEPART])='00' then
acc40911 := '40911810800000000001';
elsif to_char(stdlib.userid.[DEPART])='00-00' then
acc40911 := '40911810700030000001';
elsif to_char(stdlib.userid.[DEPART])='00-01' then
acc40911 := '40911810700030000003';
elsif to_char(stdlib.userid.[DEPART])='00-02' then
acc40911 := '40911810200040000001';
elsif to_char(stdlib.userid.[DEPART])='00-03' then
acc40911 := '40911810300050000001';
elsif to_char(stdlib.userid.[DEPART])='00-06' then
acc40911 := '40911810400060000001';
elsif to_char(stdlib.userid.[DEPART])='00-07' then
acc40911 := '40911810500070000001';
else
acc40911 := '40911810800000000001';
end if;

for (select x( x : REC)
in ::[AC_FIN] all
where x.[MAIN_V_ID] = acc40911)
loop
acc_fin_dt := x.[rec];
exit;
end loop;

doc_struct.[PRIORITET] :='05';
doc_struct.[ACC_KT] := acc_fin_dt;
doc_struct.[FILIAL] := this.[FILIAL];

doc_struct.[KL_DT].[2].[PART] := V_CL_PART_CODE;
doc_struct.[KL_DT].[1].[2] := P_KASS.[3];
doc_struct.[KL_DT].[1].[1] := P_KASS.[3].[CLIENT_V];
doc_struct.[KL_DT].[0] := 1;
doc_struct.[NUM_KS] := P_KASS;

doc_struct.[REQ_MAN].[CLIENTREF] := P_CLIENT;
doc_struct.[REQ_MAN].[NAME] := P_CLIENT.[NAME];
doc_struct.[REQ_MAN].[PASSPORT] := P_CLIENT.[DOC].[TYPE].[name];
doc_struct.[REQ_MAN].[DATE_V] := P_CLIENT.[DOC].[DATE];
doc_struct.[REQ_MAN].[SERIA] := P_CLIENT.[DOC].[SER];
doc_struct.[REQ_MAN].[NUMBER] := P_CLIENT.[DOC].[NUM];
doc_struct.[REQ_MAN].[WHO_V] := P_CLIENT.[DOC].[WHO];
doc_struct.[REQ_MAN].[DEPART_CODE] := P_CLIENT.[DOC].[DEPART_CODE];
doc_struct.[REQ_MAN].[BIRTHDAY] := P_CLIENT.[DATE_PERS];
doc_struct.[REQ_MAN].[BIRTH_PLACE] := P_CLIENT.[BORN].[NAME];
doc_struct.[REQ_MAN].[REZIDENT] := true;
doc_struct.[REQ_MAN].[NO_CITIZENSHIP] := false;
doc_struct.[REQ_MAN].[BIRTH_PLACE] := P_CLIENT.[DOC].[BIRTH_PLACE];
doc_struct.[FILIAL] := ::[SYSTEM].[VARIABLES].[OurBank].[filial];

doc_struct.[KL_KT].[2].[PART] := V_CL_PART_CODE;
doc_struct.[KL_KT].[1].[1] := acc_fin_dt.[CLIENT_V];
doc_struct.[KL_KT].[1].[2] := acc_fin_dt;
doc_struct.[KL_KT].[0] := 1;

doc_struct.[VALUTA] := ::[SYSTEM].[VARIABLES].NatCur;
doc_struct.[VALUTA_PO] := ::[SYSTEM].[VARIABLES].NatCur;
doc_struct.[DEPART] := stdlib.userid.[DEPART];

doc_struct.[REQ_MAN].[ADDR] := [VIEWFUN].GetAddress(P_CLIENT, 'ALL');

doc_struct.[SUM_KSPL].[NEW#AUTO](
P_SYMBOL_KAS/*P#1*/ --Символ кассы
,to_number(P_SUMMA*P_COL*2)/*P#2*/ --Сумма
,true/*P#IT_PRIX*/ --Признак прихода
,''/*P#TEXT*/ --Расшифровка
,null/*P#SUB_SYM*/ --Подсимвол кассы
,null/*P_OFF_SYMB*/ --Забалансовый символ
);

V_MAIN_DOC := ::[MAIN_DOCUM]%insert(doc_struct);

--Вторая

for (select x( x : REC)
in ::[AC_FIN] all
where x.[MAIN_V_ID] ='60312810000000000671')
loop
acc_fin_kt := x.[rec];
exit;
end loop;

doc_struct%init(true,true);
doc_struct.[DOCUMENT_NUM] := to_char(i);
doc_struct.[DATE_DOC] := sysdate;
doc_struct.[DOCUMENT_DATE] := sysdate;
doc_struct.[DOCUMENT_USER] := stdlib.UserId;
doc_struct.[SUM] := to_number(P_SUMMA*P_COL);
doc_struct.[SUM_PO] := to_number(P_SUMMA*P_COL);
doc_struct.[SUM_NT] := to_number(P_SUMMA*P_COL);
doc_struct.[VID_DOC] := ::[NAME_PAYDOC]([CODE] = 'КАСС_ПРИХОД_ОРД');
doc_struct.[VID_OBOROTA] := ::[VID_OBOROT]([SHORT_NAME] = 'ОСНОВНЫЕ');
doc_struct.[NAZN] := 'За гос. регистрацию прав на недвижимое имущество и сделок с ним';
doc_struct.[ACC_DT] := P_KASS.[3];

doc_struct.[PRIORITET] :='05';
doc_struct.[ACC_KT] := acc_fin_dt;
doc_struct.[FILIAL] := this.[FILIAL];

doc_struct.[KL_DT].[2].[PART] := V_CL_PART_CODE;
doc_struct.[KL_DT].[1].[2] := P_KASS.[3];
doc_struct.[KL_DT].[1].[1] := P_KASS.[3].[CLIENT_V];
doc_struct.[KL_DT].[0] := 1;
doc_struct.[NUM_KS] := P_KASS;

doc_struct.[REQ_MAN].[CLIENTREF] := P_CLIENT;
doc_struct.[REQ_MAN].[NAME] := P_CLIENT.[NAME];
doc_struct.[REQ_MAN].[PASSPORT] := P_CLIENT.[DOC].[TYPE].[name];
doc_struct.[REQ_MAN].[DATE_V] := P_CLIENT.[DOC].[DATE];
doc_struct.[REQ_MAN].[SERIA] := P_CLIENT.[DOC].[SER];
doc_struct.[REQ_MAN].[NUMBER] := P_CLIENT.[DOC].[NUM];
doc_struct.[REQ_MAN].[WHO_V] := P_CLIENT.[DOC].[WHO];
doc_struct.[REQ_MAN].[DEPART_CODE] := P_CLIENT.[DOC].[DEPART_CODE];
doc_struct.[REQ_MAN].[BIRTHDAY] := P_CLIENT.[DATE_PERS];
doc_struct.[REQ_MAN].[BIRTH_PLACE] := P_CLIENT.[BORN].[NAME];
doc_struct.[REQ_MAN].[REZIDENT] := true;
doc_struct.[REQ_MAN].[NO_CITIZENSHIP] := false;
doc_struct.[REQ_MAN].[BIRTH_PLACE] := P_CLIENT.[DOC].[BIRTH_PLACE];
doc_struct.[FILIAL] := ::[SYSTEM].[VARIABLES].[OurBank].[filial];

doc_struct.[KL_KT].[2].[PART] := V_CL_PART_CODE;
doc_struct.[KL_KT].[1].[1] := acc_fin_dt.[CLIENT_V];
doc_struct.[KL_KT].[1].[2] := acc_fin_dt;
doc_struct.[KL_KT].[0] := 1;

doc_struct.[VALUTA] := ::[SYSTEM].[VARIABLES].NatCur;
doc_struct.[VALUTA_PO] := ::[SYSTEM].[VARIABLES].NatCur;
doc_struct.[DEPART] := stdlib.userid.[DEPART];

doc_struct.[REQ_MAN].[ADDR] := [VIEWFUN].GetAddress(P_CLIENT, 'ALL');

doc_struct.[SUM_KSPL].[NEW#AUTO](
P_SYMBOL_KAS/*P#1*/ --Символ кассы
,to_number(P_SUMMA*P_COL)/*P#2*/ --Сумма
,true/*P#IT_PRIX*/ --Признак прихода
,''/*P#TEXT*/ --Расшифровка
,null/*P#SUB_SYM*/ --Подсимвол кассы
,null/*P_OFF_SYMB*/ --Забалансовый символ
);

V_MAIN_DOC := ::[MAIN_DOCUM]%insert(doc_struct);
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 16, 2018 13:39    Ответить с цитатой
Полезность: Нет оценки
Где-то здесь беда
doc_struct.[SUM_KSPL].[NEW#AUTO]
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Май 16, 2018 13:58    Ответить с цитатой
Полезность: 1
vtar пишет:
vtar пишет:
doc_struct%init;

все init вынести перед циклом

в цикле

doc_struct := rtl.next_value('SEQ_ID');

бла бла бла


не похоже тут вот в чом проблема

так не надо делать

doc_struct.[SUM_KSPL].[NEW#AUTO](


надо так

после вставки записи

V_MAIN_DOC := ::[MAIN_DOCUM]%insert(doc_struct);

V_MAIN_DOC.[SUM_KSPL].[NEW#AUTO](

sum_kspl или как его - сам посмотришь мне щас некогда
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 16, 2018 14:08    Ответить с цитатой
Полезность: Нет оценки
Не помогает

ORA-00001: APP-UNIQUE: Дублируется значение реквизита [История состояний] в типе [DOCUMENT]
ORA-00001: нарушено ограничение уникальности (IBS.Z#IX_Z#DOCUMENT_COL9)
ORA-06512: на "IBS.Z#DOCUMENT#INTERFACE", line 1477
ORA-06512: на "IBS.Z#MAIN_DOCUM#INTERFACE", line 1807
ORA-06512: на "IBS.Z#MAIN_DOCUM#INTERFACE", line 1789
ORA-06512: на "IBS.Z$MAIN_DOCUM_KAR_GOSPOSHLINA", line 319
ORA-06512: на "IBS.Z$U$1428305013", line 109
ORA-06512: на line 1
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Май 16, 2018 14:20    Ответить с цитатой
Полезность: Нет оценки
Alkov пишет:
mmm_kazan пишет:
Спасибо, помогло кстати.


тогда этот блок можно выкинуть Smile

Код:
doc_struct.[HISTORY_STATE] := rtl.next_value('SEQ_ID');
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 16, 2018 14:33    Ответить с цитатой
Полезность: Нет оценки
Я уже возвращал этот блок. Полностью кстати. )
Не знаю что придумать.
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 16, 2018 14:35    Ответить с цитатой
Полезность: Нет оценки
Почему-то именно с кассовыми документами. А так, не кассовые в цикле хоть сколько добавляю.
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Май 16, 2018 15:02    Ответить с цитатой
Полезность: Нет оценки
mmm_kazan пишет:
Почему-то именно с кассовыми документами. А так, не кассовые в цикле хоть сколько добавляю.


может тебе попробовать использовать вызов

-- создание документа
md := [MAIN_DOCUM].[NEW#AUTO].new( бла бла)

-- кассовые символа
md.[SUM_KSPL].[NEW#AUTO](sym, summa, prih,Null,Null,Null);


-- Упрощенный конструктор Платежного документа
-- работает на INSERT
function new(P_DOCUMENT_NUM string, -- Номер
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 16, 2018 15:02    Ответить с цитатой
Полезность: Нет оценки
Снимаю вопрос - разобрался.
Спасибо. )
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Май 16, 2018 15:06    Ответить с цитатой
Полезность: Нет оценки
mmm_kazan пишет:
Снимаю вопрос - разобрался.
Спасибо. )


в чом был затык ?
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 16, 2018 15:23    Ответить с цитатой
Полезность: Нет оценки
Сам тормознул - не весь код удалил. Лишнее осталось.
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 16, 2018 15:25    Ответить с цитатой
Полезность: Нет оценки
Скопировал операцию, но от другой хвост остался.
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 16, 2018 16:31    Ответить с цитатой
Полезность: Нет оценки
Перед каждым
doc_struct%init(true,true);
нужно делать
doc_struct :=null;
Лишним не будет.
Все равно остаются какие-то хвосты.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу Пред.  1, 2
Страница 2 из 2

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