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