| Предыдущая тема :: Следующая тема | 
	
	
		| Автор | Сообщение | 
	
		| 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    |   |  
				| Полезность: Нет оценки 
 |  
				| Здравствуйте. Да что-то нашел вариант вручную проводки делать.
 Вроде получилось.
 |  | 
	
		|  | 
	
		|  |