Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
mmm_kazan Участник со стажем
Вступление в Клуб: 28.03.2018
|
Пт Май 04, 2018 16:31  Вопрос опять по формированию проводок в цикле |
|
Полезность: Нет оценки
|
doc_struct.[SUM_KSPL].[NEW#AUTO](
P_SYMBOL_KAS/*P#1*/ --Символ кассы
,to_number(P_SUMMA)/*P#2*/ --Сумма
,''/*P#IT_PRIX*/ --Признак прихода
,''/*P#TEXT*/ --Расшифровка
,''/*P#SUB_SYM*/ --Подсимвол кассы
,''/*P_OFF_SYMB*/ --Забалансовый символ
);
V_MAIN_DOC := ::[MAIN_DOCUM]%insert(doc_struct);
Кусок кода.
Ощущение такое, что не все очищаю.
Для одной проводки все нормально.
Для двух - беда. |
|
 |
mmm_kazan Участник со стажем
Вступление в Клуб: 28.03.2018
|
Пт Май 04, 2018 16:44   |
|
Полезность: Нет оценки
|
Ругается так.
Дублируется значение реквизита [Сумма документа по символам касплана] в типе [MAIN_DOCUM] |
|
 |
mmm_kazan Участник со стажем
Вступление в Клуб: 28.03.2018
|
Пт Май 04, 2018 16:47   |
|
Полезность: Нет оценки
|
Ну и весь код, если поможет.
i integer;
doc_struct [MAIN_DOCUM];
acc_fin_dt ref [AC_FIN];
acc_fin ref [AC_FIN];
V_CL_PART_CODE ref [CL_PART];
V_MAIN_DOC ref [MAIN_DOCUM];
Begin
i := 1;
while i<=P_COL loop
--Первая
doc_struct%init;
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);
doc_struct.[SUM_PO] := to_number(P_SUMMA);
doc_struct.[SUM_NT] := to_number(P_SUMMA);
doc_struct.[VID_DOC] := ::[NAME_PAYDOC]([CODE] = 'КАСС_ПРИХОД_ОРД');
doc_struct.[VID_OBOROTA] := ::[VID_OBOROT]([SHORT_NAME] = 'ОСНОВНЫЕ');
doc_struct.[NAZN] := 'Перечисляет '||P_CLIENT.[NAME]||' возмещение гос.пошлины за регистрацию доп.соглашения к договору № '||P_CREDIT;
doc_struct.[ACC_DT] := P_KASS.[3];
doc_struct.[BUD_REQS].[KBK_STR] := P_KBK;
doc_struct.[BUD_REQS].[OKATO_STR] := P_OKTMO;
-- doc_struct.[TYPE_MESS] := 1984043;
for (select x( x : REC)
in ::[AC_FIN] all
where x.[MAIN_V_ID] ='40911810800000000001')
loop
acc_fin := x.[rec];
exit;
end loop;
doc_struct.[PRIORITET] :='05';
doc_struct.[ACC_KT] := acc_fin;
doc_struct.[FILIAL] := this.[FILIAL];
for (
select u(u : c_code)
in ::[CL_PART] all
where u.[CODE]='0030000000'
)
loop
V_CL_PART_CODE := u.[c_code];
exit;
end loop;
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];
doc_struct.[REQ_MAN].[REZIDENT] := true;
doc_struct.[REQ_MAN].[NO_CITIZENSHIP] := false;
doc_struct.[KL_KT].[2].[PART] := V_CL_PART_CODE;
doc_struct.[KL_KT].[1].[1] := acc_fin.[CLIENT_V];
doc_struct.[KL_KT].[1].[2] := acc_fin;
doc_struct.[KL_KT].[0] := 1;
doc_struct.[VALUTA] := ::[SYSTEM].[VARIABLES].NatCur;
doc_struct.[VALUTA_PO] := ::[SYSTEM].[VARIABLES].NatCur;
doc_struct.[HISTORY_STATE] := rtl.next_value('SEQ_ID');
doc_struct.[ARRAY_SUM_DOG] := rtl.next_value('SEQ_ID');
doc_struct.[ARRAY_DOG_ACC] := rtl.next_value('SEQ_ID');
doc_struct.[SUBDOCUMENTS] := rtl.next_value('SEQ_ID');
doc_struct.[SUBDOCUMENTS] := rtl.next_value('SEQ_ID');
doc_struct.[USER_TYPE] := rtl.next_value('SEQ_ID');
doc_struct.[LABELS] := null;
doc_struct.[TO_ZP] := rtl.next_value('SEQ_ID');
doc_struct.[FOR_SVOD] := rtl.next_value('SEQ_ID');
doc_struct.[RC_SIGNED_BY] := rtl.next_value('SEQ_ID');
doc_struct.[SUM_KSPL].[NEW#AUTO](
P_SYMBOL_KAS/*P#1*/ --Символ кассы
,to_number(P_SUMMA)/*P#2*/ --Сумма
,''/*P#IT_PRIX*/ --Признак прихода
,''/*P#TEXT*/ --Расшифровка
,''/*P#SUB_SYM*/ --Подсимвол кассы
,''/*P_OFF_SYMB*/ --Забалансовый символ
);
V_MAIN_DOC := ::[MAIN_DOCUM]%insert(doc_struct);
--Вторая
doc_struct%init;
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);
doc_struct.[SUM_PO] := to_number(P_SUMMA);
doc_struct.[SUM_NT] := to_number(P_SUMMA);
doc_struct.[VID_DOC] := ::[NAME_PAYDOC]([CODE] = 'БЕЗН_БАНК_ОРД');
doc_struct.[VID_OBOROTA] := ::[VID_OBOROT]([SHORT_NAME] = 'ОСНОВНЫЕ');
doc_struct.[NAZN] := 'Перечисляет '||P_CLIENT.[NAME]||' возмещение гос.пошлины за регистрацию доп.соглашения к договору № '||P_CREDIT;
doc_struct.[BUD_REQS].[KBK_STR] := P_KBK;
doc_struct.[BUD_REQS].[OKATO_STR] := P_OKTMO;
-- doc_struct.[TYPE_MESS] := 1984043;
for (select x( x : REC)
in ::[AC_FIN] all
where x.[MAIN_V_ID] ='40911810800000000001')
loop
acc_fin_dt := x.[rec];
exit;
end loop;
doc_struct.[ACC_DT] := acc_fin_dt;
for (select x( x : REC)
in ::[AC_FIN] all
where x.[MAIN_V_ID] ='60312810000000000671')
loop
acc_fin := x.[rec];
exit;
end loop;
doc_struct.[PRIORITET] :='05';
doc_struct.[ACC_KT] := acc_fin;
doc_struct.[FILIAL] := this.[FILIAL];
for (
select u(u : c_code)
in ::[CL_PART] all
where u.[CODE]='0030000000'
)
loop
V_CL_PART_CODE := u.[c_code];
exit;
end loop;
doc_struct.[KL_DT].[2].[PART] := V_CL_PART_CODE;
doc_struct.[KL_DT].[1].[1] := acc_fin_dt.[CLIENT_V];
doc_struct.[KL_DT].[1].[2] := acc_fin_dt;
doc_struct.[KL_DT].[0] := 1;
doc_struct.[KL_KT].[2].[PART] := V_CL_PART_CODE;
doc_struct.[KL_KT].[1].[1] := acc_fin.[CLIENT_V];
doc_struct.[KL_KT].[1].[2] := acc_fin;
doc_struct.[KL_KT].[0] := 1;
doc_struct.[VALUTA] := ::[SYSTEM].[VARIABLES].NatCur;
doc_struct.[VALUTA_PO] := ::[SYSTEM].[VARIABLES].NatCur;
doc_struct.[HISTORY_STATE] := rtl.next_value('SEQ_ID');
doc_struct.[ARRAY_SUM_DOG] := rtl.next_value('SEQ_ID');
doc_struct.[ARRAY_DOG_ACC] := rtl.next_value('SEQ_ID');
doc_struct.[SUBDOCUMENTS] := rtl.next_value('SEQ_ID');
doc_struct.[SUBDOCUMENTS] := rtl.next_value('SEQ_ID');
doc_struct.[USER_TYPE] := rtl.next_value('SEQ_ID');
doc_struct.[LABELS] := null;
doc_struct.[TO_ZP] := rtl.next_value('SEQ_ID');
doc_struct.[FOR_SVOD] := rtl.next_value('SEQ_ID');
doc_struct.[RC_SIGNED_BY] := rtl.next_value('SEQ_ID');
doc_struct.[SUM_KSPL] := rtl.next_value('SEQ_ID');
V_MAIN_DOC := ::[MAIN_DOCUM]%insert(doc_struct);
i := i+1;
end loop;
stdio.put_line_buf('Загрузка завершена');
end; |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пт Май 04, 2018 17:01   |
|
Полезность: Нет оценки
|
doc_struct%init;
все init вынести перед циклом
в цикле
doc_struct := rtl.next_value('SEQ_ID');
бла бла бла |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пт Май 04, 2018 17:07   |
|
Полезность: Нет оценки
|
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 или как его - сам посмотришь мне щас некогда |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Май 04, 2018 17:16  Re: Вопрос опять по формированию проводок в цикле |
|
Полезность: Нет оценки
|
mmm_kazan пишет: | doc_struct.[SUM_KSPL].[NEW#AUTO](
P_SYMBOL_KAS/*P#1*/ --Символ кассы
,to_number(P_SUMMA)/*P#2*/ --Сумма
,''/*P#IT_PRIX*/ --Признак прихода
,''/*P#TEXT*/ --Расшифровка
,''/*P#SUB_SYM*/ --Подсимвол кассы
,''/*P_OFF_SYMB*/ --Забалансовый символ
);
V_MAIN_DOC := ::[MAIN_DOCUM]%insert(doc_struct);
Кусок кода.
Ощущение такое, что не все очищаю.
Для одной проводки все нормально.
Для двух - беда. |
На форуме есть кнопка Code
Код: | doc_struct.[SUM_KSPL].[NEW#AUTO](
P_SYMBOL_KAS/*P#1*/ --Символ кассы
,to_number(P_SUMMA)/*P#2*/ --Сумма
,''/*P#IT_PRIX*/ --Признак прихода
,''/*P#TEXT*/ --Расшифровка
,''/*P#SUB_SYM*/ --Подсимвол кассы
,''/*P_OFF_SYMB*/ --Забалансовый символ
);
V_MAIN_DOC := ::[MAIN_DOCUM]%insert(doc_struct);
|
|
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пт Май 04, 2018 17:21  Re: Вопрос опять по формированию проводок в цикле |
|
Полезность: Нет оценки
|
Volod пишет: | На форуме есть кнопка Code
|
кстати да, годный баттон
жмеш и получаеш правильный, нужный, рабочий промышленный код ! |
|
 |
RustamR Участник
Вступление в Клуб: 26.04.2018
|
Пн Май 07, 2018 01:53   |
|
Полезность: Нет оценки
|
Чтобы наверняка я бы перед каждым doc_struct%init
делал бы doc_struc:=empty_doc_struc;
По СК vtar дело говорит.
Ну и по таким кускам
Код: |
for (select x( x : REC)
in ::[AC_FIN] all
where x.[MAIN_V_ID] ='40911810800000000001') |
можно вытянуть закрытый счет. Я б добавил order by x desc или добавил анализ на дату открытия/закрытия. |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Пн Май 07, 2018 06:01   |
|
Полезность: 2
|
mmm_kazan пишет: | Ну и весь код, если поможет.
doc_struct%init;
end; |
Может doc_struct%init(true,true); ?
т.е. у массива "Сумма документа по символам касплан" id тот же остался что и у предыдущего дока.
можно ещё doc_struct.[SUM_KSPL] := rtl.next_value('SEQ_ID');
Последний раз редактировалось: Alkov (Вт Май 08, 2018 02:11), всего редактировалось 1 раз |
|
 |
mmm_kazan Участник со стажем
Вступление в Клуб: 28.03.2018
|
Пн Май 07, 2018 08:41   |
|
Полезность: Нет оценки
|
Спасибо, помогло кстати. |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Вт Май 08, 2018 02:09   |
|
Полезность: 1
|
mmm_kazan пишет: | Спасибо, помогло кстати. |
тогда этот блок можно выкинуть
Код: | doc_struct.[HISTORY_STATE] := rtl.next_value('SEQ_ID');
doc_struct.[ARRAY_SUM_DOG] := rtl.next_value('SEQ_ID');
doc_struct.[ARRAY_DOG_ACC] := rtl.next_value('SEQ_ID');
doc_struct.[SUBDOCUMENTS] := rtl.next_value('SEQ_ID');
doc_struct.[SUBDOCUMENTS] := rtl.next_value('SEQ_ID');
doc_struct.[USER_TYPE] := rtl.next_value('SEQ_ID');
doc_struct.[TO_ZP] := rtl.next_value('SEQ_ID');
doc_struct.[FOR_SVOD] := rtl.next_value('SEQ_ID');
doc_struct.[RC_SIGNED_BY] := rtl.next_value('SEQ_ID'); |
|
|
 |
mmm_kazan Участник со стажем
Вступление в Клуб: 28.03.2018
|
Пн Май 14, 2018 10:49   |
|
Полезность: Нет оценки
|
Здравствуйте
Вот еще с чем столкнулся
В операции делаю проводки типа
20202 - 40911
40911 - 60312
В первой есть плательщик - заполняю там его реквизиты
Во второй не вычищается
Делаю так:
doc_struct [MAIN_DOCUM];
--Первая
doc_struct%init(true,true);
...
--Вторая
doc_struct%init(true,true); |
|
 |
mmm_kazan Участник со стажем
Вступление в Клуб: 28.03.2018
|
Пн Май 14, 2018 11:14   |
|
Полезность: Нет оценки
|
Все, разобрался. ) |
|
 |
svn Профи
Вступление в Клуб: 04.02.2008
|
Вт Май 15, 2018 00:06   |
|
Полезность: 1
|
не пробовали на БО все перевести а не руками каждую проводку собирать? |
|
 |
mmm_kazan Участник со стажем
Вступление в Клуб: 28.03.2018
|
Вт Май 15, 2018 08:32   |
|
Полезность: Нет оценки
|
Здравствуйте.
Да что-то нашел вариант вручную проводки делать.
Вроде получилось. |
|
 |
|