Patch level :2.2 274
Files correlati :traferimento proforma Ricompilazione Demo : [ ] Commento :trasferimento proforma con analitica funzionante; andra' bene? all'enrichetta l'ardua sentenza! git-svn-id: svn://10.65.10.50/trunk@13632 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									fcc3f1d8f8
								
							
						
					
					
						commit
						8e1a7012be
					
				
							
								
								
									
										214
									
								
								cg/cg7200.cpp
									
									
									
									
									
								
							
							
						
						
									
										214
									
								
								cg/cg7200.cpp
									
									
									
									
									
								
							@ -6,6 +6,7 @@
 | 
				
			|||||||
#include <filetext.h>
 | 
					#include <filetext.h>
 | 
				
			||||||
#include <msksheet.h>
 | 
					#include <msksheet.h>
 | 
				
			||||||
#include <printer.h>
 | 
					#include <printer.h>
 | 
				
			||||||
 | 
					#include <progind.h>
 | 
				
			||||||
#include <recarray.h>
 | 
					#include <recarray.h>
 | 
				
			||||||
#include <relation.h>
 | 
					#include <relation.h>
 | 
				
			||||||
#include <sort.h>
 | 
					#include <sort.h>
 | 
				
			||||||
@ -285,6 +286,7 @@ protected:
 | 
				
			|||||||
	bool cerca_sociali(const TBill& bill) const;
 | 
						bool cerca_sociali(const TBill& bill) const;
 | 
				
			||||||
	bool test_swap(TCausale& caus, bool ritsoc) const;
 | 
						bool test_swap(TCausale& caus, bool ritsoc) const;
 | 
				
			||||||
	real calcola_pagamento(TRectype& curpag_rec);
 | 
						real calcola_pagamento(TRectype& curpag_rec);
 | 
				
			||||||
 | 
						bool sottrai_iva(TMovimentoPN& pn, const TRectype& rigaiva);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	const real get_importo() {return _importo;};
 | 
						const real get_importo() {return _importo;};
 | 
				
			||||||
@ -415,10 +417,16 @@ bool TInvioP::i_proforma_conti()
 | 
				
			|||||||
  const long cur_items = cur.items();
 | 
					  const long cur_items = cur.items();
 | 
				
			||||||
  if (cur_items != 0) 
 | 
					  if (cur_items != 0) 
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
							TProgind pi(cur_items, "Trasferimento conti...", true, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  cur.freeze();
 | 
						  cur.freeze();
 | 
				
			||||||
    TRectype& cur_rec = cur.curr();
 | 
					    TRectype& cur_rec = cur.curr();
 | 
				
			||||||
    for (cur = 0; cur.pos() < cur_items; ++(cur))
 | 
					    for (cur = 0; cur.pos() < cur_items; ++(cur))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
								pi.addstatus(1);
 | 
				
			||||||
 | 
					      if (pi.iscancelled())
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			TRecord_text rec;
 | 
								TRecord_text rec;
 | 
				
			||||||
			rec.set_type("P");
 | 
								rec.set_type("P");
 | 
				
			||||||
			trasfile->autoload(rec, cur); 
 | 
								trasfile->autoload(rec, cur); 
 | 
				
			||||||
@ -436,16 +444,14 @@ bool TInvioP::i_proforma_movimenti()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	//trasferimento testate movimenti (cerca direttamente sui movimenti analitici in chiave 2..
 | 
						//trasferimento testate movimenti (cerca direttamente sui movimenti analitici in chiave 2..
 | 
				
			||||||
	//..,cioè per DATACOMP e con NUMREGCG!=0
 | 
						//..,cioè per DATACOMP e con NUMREGCG!=0
 | 
				
			||||||
	TRectype da(LF_MOVANA);
 | 
						TRectype da(LF_MOV);
 | 
				
			||||||
  TRectype a(LF_MOVANA);
 | 
					  TRectype a(LF_MOV);
 | 
				
			||||||
  da.put(MOVANA_DATACOMP, _dataini);
 | 
					  da.put(MOV_DATAREG, _dataini);
 | 
				
			||||||
  a.put(MOV_DATACOMP, _datafin);
 | 
					  a.put(MOV_DATAREG, _datafin);
 | 
				
			||||||
  TRelation rel(LF_MOVANA);
 | 
					  TRelation rel(LF_MOV);
 | 
				
			||||||
	rel.add(LF_MOV, "NUMREG==NUMREGCG");
 | 
					 | 
				
			||||||
	rel.add(LF_CAUSALI, "CODCAUS==CODCAUS");
 | 
						rel.add(LF_CAUSALI, "CODCAUS==CODCAUS");
 | 
				
			||||||
	rel.add(LF_RMOVANA, "NUMREG==NUMREG");
 | 
					
 | 
				
			||||||
	rel.add(LF_RMOVIVA, "NUMREG==NUMREGCG");
 | 
					  TCursor cur(&rel, "", 2, &da, &a);	//chiave per data
 | 
				
			||||||
  TCursor cur(&rel, "NUMREGCG!=0", 2, &da, &a);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const long cur_items = cur.items();
 | 
					  const long cur_items = cur.items();
 | 
				
			||||||
  if (cur_items != 0) 
 | 
					  if (cur_items != 0) 
 | 
				
			||||||
@ -454,10 +460,16 @@ bool TInvioP::i_proforma_movimenti()
 | 
				
			|||||||
		TRecord_text rec;
 | 
							TRecord_text rec;
 | 
				
			||||||
		rec.set_type("T");
 | 
							rec.set_type("T");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							TProgind pi(cur_items, "Trasferimento movimenti...", true, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  cur.freeze();
 | 
						  cur.freeze();
 | 
				
			||||||
    const TRectype& cur_rec = cur.curr();
 | 
					    const TRectype& cur_rec = cur.curr();
 | 
				
			||||||
    for (cur = 0; cur.pos() < cur_items; ++(cur))
 | 
					    for (cur = 0; cur.pos() < cur_items; ++(cur))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								pi.addstatus(1);
 | 
				
			||||||
 | 
					      if (pi.iscancelled())
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//carica e scrive il record di testata in base alle informazioni contenute nel proforma.ini
 | 
								//carica e scrive il record di testata in base alle informazioni contenute nel proforma.ini
 | 
				
			||||||
			trasfile->autoload(rec, cur); 
 | 
								trasfile->autoload(rec, cur); 
 | 
				
			||||||
			trasfile->write(rec);
 | 
								trasfile->write(rec);
 | 
				
			||||||
@ -472,57 +484,65 @@ bool TInvioP::i_proforma_movimenti()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
 | 
					bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	//---- righe movimenti analitica ----
 | 
						//---- righe movimenti ----
 | 
				
			||||||
	//necessita del numreg del corrente movimento analitico per poterlo istanziare e prenderne le righe
 | 
					 | 
				
			||||||
	const long numreg = cur.curr().get_long(MOVANA_NUMREG);
 | 
					 | 
				
			||||||
	TAnal_mov analmov(numreg);	//..istanzia il movimento analitico cercato..
 | 
					 | 
				
			||||||
	//..prende il numregcg che usera' per risalire ai movimenti analitico ed iva
 | 
					 | 
				
			||||||
	const TString8 numregcg = analmov.get(MOVANA_NUMREGCG);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	TRecord_text recrighe;	//istanzia il tipo record corretto da scrivere sul trasfilerighe
 | 
					 | 
				
			||||||
	recrighe.set_type("R");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	TInvioP_saldi_cg conti_importi;
 | 
						TInvioP_saldi_cg conti_importi;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//Creo un movimento PN (con numreg = a quello del movana)che servira' un po' dovunque
 | 
						//Creo un movimento PN (con numreg = a quello del mov)che servira' un po' dovunque
 | 
				
			||||||
	TMovimentoPN pn;
 | 
						TMovimentoPN pn;
 | 
				
			||||||
	pn.curr().put(MOV_NUMREG, numregcg);
 | 
						pn.curr() = cur.curr();
 | 
				
			||||||
	if (pn.read() == NOERR)
 | 
						if (pn.read() == NOERR)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		for (int j = 0; j < pn.cg_items(); j++)
 | 
							for (int j = 0; j < pn.cg_items(); j++)
 | 
				
			||||||
			conti_importi.somma(pn.cg(j));
 | 
								conti_importi.somma(pn.cg(j));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int i;
 | 
						TRecord_text recrighe;	//istanzia il tipo record corretto da scrivere sul trasfilerighe
 | 
				
			||||||
	for (i = 1; i <= analmov.body().rows(); i++)
 | 
						recrighe.set_type("R");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						TAnal_mov analmov(cur.curr());	//..istanzia il movimento analitico con numregcg=numreg del mov
 | 
				
			||||||
 | 
						const long analrighe_items = analmov.body().rows();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (analrighe_items > 0)	//se il movana ha righe..
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							TRelation rel_rmovana(LF_RMOVANA);	//crea una relazione sulle righe anali cui aggiunge mov e movana
 | 
				
			||||||
 | 
							rel_rmovana.add(LF_MOVANA, "NUMREG==NUMREG");
 | 
				
			||||||
 | 
							rel_rmovana.add(LF_MOV, "NUMREG==NUMREGCG", 1, LF_MOVANA);
 | 
				
			||||||
 | 
							TCursor cur_rmovana(&rel_rmovana);	//crea il cursore sulle righe analitiche che serve per poter usare la autoload
 | 
				
			||||||
 | 
							cur_rmovana.curr(LF_MOVANA) = analmov;
 | 
				
			||||||
 | 
							cur_rmovana.curr(LF_MOV) = cur.curr();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (int i = 1; i <= analrighe_items; i++)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			//..e scandisce le righe
 | 
								//..e scandisce le righe
 | 
				
			||||||
			const TRectype& riga = analmov.body().row(i);	
 | 
								const TRectype& riga = analmov.body().row(i);	
 | 
				
			||||||
			//inganna il cursore passandogli la riga analitica in esame (bastardo!)
 | 
								//inganna il cursore passandogli la riga analitica in esame (bastardo!)
 | 
				
			||||||
		cur.curr(LF_RMOVANA) = riga;
 | 
								cur_rmovana.curr() = riga;
 | 
				
			||||||
			//carica le righe analitiche
 | 
								//carica le righe analitiche
 | 
				
			||||||
		trasfilerighe->autoload(recrighe, cur);
 | 
								trasfilerighe->autoload(recrighe, cur_rmovana);
 | 
				
			||||||
			//tglie le righe contabili corrispondenti che sono appena state aggiunte con la autoload (sarebbero..
 | 
								//tglie le righe contabili corrispondenti che sono appena state aggiunte con la autoload (sarebbero..
 | 
				
			||||||
			//..duplicate se non lo facesse!!!)
 | 
								//..duplicate se non lo facesse!!!)
 | 
				
			||||||
			conti_importi.sottrai(riga);
 | 
								conti_importi.sottrai(riga);
 | 
				
			||||||
			//scrive  sul file di trasferimento (alla faccia della semplicita'!)
 | 
								//scrive  sul file di trasferimento (alla faccia della semplicita'!)
 | 
				
			||||||
			trasfilerighe->write(recrighe);
 | 
								trasfilerighe->write(recrighe);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	//prende le righe contabili che non sono state eliminate dalle analitiche nelle sottrai(riga)..
 | 
						//prende le righe contabili che non sono state eliminate dalle analitiche nelle sottrai(riga)..
 | 
				
			||||||
	//..in modo da passare anche quelle (in caso contrario sarebbero andati perduti gli importi di..
 | 
						//..in modo da passare anche quelle (in caso contrario sarebbero andati perduti gli importi di..
 | 
				
			||||||
	//..tali righe che non avevano commessa!)
 | 
						//..tali righe che non avevano commessa!)
 | 
				
			||||||
 | 
						const long conti_importi_items = conti_importi.items();
 | 
				
			||||||
	TString workstring;		//stringa di lavoro che serve nel ciclo sotto
 | 
						TString workstring;		//stringa di lavoro che serve nel ciclo sotto
 | 
				
			||||||
	for (i = 0; i < conti_importi.items(); i++) 
 | 
					
 | 
				
			||||||
 | 
						for (int i = 0; i < conti_importi_items; i++) 
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    if (!conti_importi.importo(i).is_zero())
 | 
					    if (!conti_importi.importo(i).is_zero())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			//aggiunge i valori ai campi uno ad uno perchè non ha un cursore per fare l'autoload
 | 
								//aggiunge i valori ai campi uno ad uno perchè non ha un cursore per fare l'autoload
 | 
				
			||||||
			recrighe.destroy();
 | 
								recrighe.destroy();
 | 
				
			||||||
			recrighe.add(numregcg, 0);	//numreg
 | 
								recrighe.add(pn.curr().get(MOV_NUMREG), 0);	//numreg
 | 
				
			||||||
			workstring = "N";
 | 
								workstring = "N";
 | 
				
			||||||
			recrighe.add(workstring, 1);	//rigaiva
 | 
								recrighe.add(workstring, 1);	//rigaiva
 | 
				
			||||||
			TImporto& imp = conti_importi.importo(i);
 | 
								TImporto& imp = conti_importi.importo(i);
 | 
				
			||||||
			workstring = imp.sezione();
 | 
								workstring.cut(0) << imp.sezione();
 | 
				
			||||||
			recrighe.add(workstring, 2);	//sezione
 | 
								recrighe.add(workstring, 2);	//sezione
 | 
				
			||||||
			const TString& zio = conti_importi.conto(i);
 | 
								const TString& zio = conti_importi.conto(i);
 | 
				
			||||||
			recrighe.add(zio.left(3), 3);	//gruppo
 | 
								recrighe.add(zio.left(3), 3);	//gruppo
 | 
				
			||||||
@ -541,19 +561,17 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
 | 
				
			|||||||
	//---- righe iva ----
 | 
						//---- righe iva ----
 | 
				
			||||||
	//adesso tocca alle righe iva...e sara' un casino indicibile!
 | 
						//adesso tocca alle righe iva...e sara' un casino indicibile!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//record_array con le righe iva aventi il numreg = numregcg analitico
 | 
					 | 
				
			||||||
  TRecord_array righeiva(numregcg, LF_RMOVIVA);
 | 
					 | 
				
			||||||
	//assoc array contenente tutti i diversi conti che incontrera' nello scanning delle righe iva
 | 
						//assoc array contenente tutti i diversi conti che incontrera' nello scanning delle righe iva
 | 
				
			||||||
	TAssoc_array conti;
 | 
						TAssoc_array conti;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//scanning delle righe iva alla ricerca dei conti che compaiono
 | 
						//scanning delle righe iva alla ricerca dei conti che compaiono
 | 
				
			||||||
	for (int j = 1; j <= righeiva.rows(); j++)
 | 
						for (int j = 0; j < pn.iva_items(); j++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		//prende il conto e lo mette nell'assoc_array dei conti (notare che, essendo un assoc_array,..
 | 
							//prende il conto e lo mette nell'assoc_array dei conti (notare che, essendo un assoc_array,..
 | 
				
			||||||
		//..non vengono inseriti doppioni! mitico!!)
 | 
							//..non vengono inseriti doppioni! mitico!!)
 | 
				
			||||||
		TBill conto;
 | 
							TBill conto;
 | 
				
			||||||
		conto.get(righeiva[j]);
 | 
							conto.get(pn.iva(j));
 | 
				
			||||||
		const char* codconto = conto.string(8);
 | 
							const char* codconto = conto.string(0x8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//ad ogni conto lega un assoc_array (codivae) che conterra' tutti i codici iva legati a quel..
 | 
							//ad ogni conto lega un assoc_array (codivae) che conterra' tutti i codici iva legati a quel..
 | 
				
			||||||
		//..conto nelle righe iva con i relativi importi
 | 
							//..conto nelle righe iva con i relativi importi
 | 
				
			||||||
@ -561,12 +579,12 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
 | 
				
			|||||||
		if (codivae == NULL)	//se non esiste l'assoc_array legato al conto lo crea
 | 
							if (codivae == NULL)	//se non esiste l'assoc_array legato al conto lo crea
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			codivae = new TAssoc_array;
 | 
								codivae = new TAssoc_array;
 | 
				
			||||||
			//aggiunge all'assoc_array conti il suo elemento assoc_array codivae..ho un assoc_array..
 | 
								//aggiunge all'assoc_array conti il suo elemento assoc_array codivae..ha un assoc_array..
 | 
				
			||||||
			//..di assoc_array!
 | 
								//..di assoc_array!
 | 
				
			||||||
			conti.add(codconto, codivae);
 | 
								conti.add(codconto, codivae);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TString16 codiva = righeiva[j].get(RMI_CODIVA);	//prende il codice iva dalla riga iva
 | 
							const TString4 codiva = pn.iva(j).get(RMI_CODIVA);	//prende il codice iva dalla riga iva
 | 
				
			||||||
		//aggiungere qui eventuale codice intero di indetraibilita'
 | 
							//aggiungere qui eventuale codice intero di indetraibilita'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//ad ogni codiva presente in codivae lega un importo che risultera' la somma di tutti gli..
 | 
							//ad ogni codiva presente in codivae lega un importo che risultera' la somma di tutti gli..
 | 
				
			||||||
@ -580,7 +598,7 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		//accresce l'importo tot_imp relativo alla coppia codiva+codconto corrente
 | 
							//accresce l'importo tot_imp relativo alla coppia codiva+codconto corrente
 | 
				
			||||||
		*tot_imp += righeiva[j].get_real(RMI_IMPONIBILE);
 | 
							*tot_imp += pn.iva(j).get_real(RMI_IMPONIBILE);
 | 
				
			||||||
		//aggiungere qui eventuale imposta
 | 
							//aggiungere qui eventuale imposta
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -588,7 +606,14 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
 | 
				
			|||||||
	recrigheiva.set_type("I");
 | 
						recrigheiva.set_type("I");
 | 
				
			||||||
	int nrighe = 0;
 | 
						int nrighe = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 1; i <= analmov.body().rows(); i++)
 | 
						TRelation rel_rmoviva(LF_RMOVIVA);
 | 
				
			||||||
 | 
						rel_rmoviva.add(LF_MOV, "NUMREG==NUMREG");
 | 
				
			||||||
 | 
						TCursor cur_rmoviva(&rel_rmoviva);
 | 
				
			||||||
 | 
						cur_rmoviva.curr(LF_MOV) = cur.curr();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const long analrigheiva_items = analmov.body().rows();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i = 1; i <= analrigheiva_items; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		//scanning delle righe analitiche per estrarne i conti e controllare se compaiono nell'assoc_array..
 | 
							//scanning delle righe analitiche per estrarne i conti e controllare se compaiono nell'assoc_array..
 | 
				
			||||||
		//..dei conti riempito con i conti trovati nelle righe iva
 | 
							//..dei conti riempito con i conti trovati nelle righe iva
 | 
				
			||||||
@ -603,16 +628,16 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
 | 
				
			|||||||
			real importo_riga = riga.get_real(RMOVANA_IMPORTO);
 | 
								real importo_riga = riga.get_real(RMOVANA_IMPORTO);
 | 
				
			||||||
			//..lo ridistribuisce secondo le percentuali iva
 | 
								//..lo ridistribuisce secondo le percentuali iva
 | 
				
			||||||
			TGeneric_distrib distributore(importo_riga, TCurrency::get_firm_dec());
 | 
								TGeneric_distrib distributore(importo_riga, TCurrency::get_firm_dec());
 | 
				
			||||||
			{
 | 
					
 | 
				
			||||||
			FOR_EACH_ASSOC_OBJECT((*codivae), h, k, imp)
 | 
								FOR_EACH_ASSOC_OBJECT((*codivae), h, k, imp)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				const real& imp_iva = *(real*)imp;
 | 
									const real& imp_iva = *(real*)imp;
 | 
				
			||||||
				distributore.add(imp_iva);
 | 
									distributore.add(imp_iva);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
				//crea una riga iva dal cursore, con numreg = numregcg della testata analitica originale
 | 
								//crea una riga iva dal cursore, con numreg = numreg della testata del mov originale
 | 
				
			||||||
				TRectype& rigaiva = cur.curr(LF_RMOVIVA);	
 | 
								TRectype& rigaiva = cur_rmoviva.curr(LF_RMOVIVA);	
 | 
				
			||||||
        rigaiva.put(RMI_NUMREG, numregcg);
 | 
					      rigaiva.put(RMI_NUMREG, pn.curr().get(MOV_NUMREG));
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			//scan dell'assoc_array ridistribuito e inserimento dei valori nella riga iva appena creata
 | 
								//scan dell'assoc_array ridistribuito e inserimento dei valori nella riga iva appena creata
 | 
				
			||||||
			FOR_EACH_ASSOC_OBJECT((*codivae), hi, ki, impi)
 | 
								FOR_EACH_ASSOC_OBJECT((*codivae), hi, ki, impi)
 | 
				
			||||||
@ -621,21 +646,100 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
 | 
				
			|||||||
				rigaiva.put(RMI_GRUPPO, codconto.mid(0,3));
 | 
									rigaiva.put(RMI_GRUPPO, codconto.mid(0,3));
 | 
				
			||||||
				rigaiva.put(RMI_CONTO, codconto.mid(3,3));
 | 
									rigaiva.put(RMI_CONTO, codconto.mid(3,3));
 | 
				
			||||||
				rigaiva.put(RMI_SOTTOCONTO, codconto.mid(6,6));
 | 
									rigaiva.put(RMI_SOTTOCONTO, codconto.mid(6,6));
 | 
				
			||||||
          TBill zio(rigaiva);
 | 
					        const TBill zio(rigaiva);
 | 
				
			||||||
				rigaiva.put(RMI_TIPOC, zio.tipo());
 | 
									rigaiva.put(RMI_TIPOC, zio.tipo());
 | 
				
			||||||
				rigaiva.put(RMI_IMPONIBILE, distributore.get());
 | 
									rigaiva.put(RMI_IMPONIBILE, distributore.get());
 | 
				
			||||||
				rigaiva.put(RMI_CODIVA, ki);
 | 
									rigaiva.put(RMI_CODIVA, ki);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									//deve sottrarre gli importi trovati dalle righe iva originali
 | 
				
			||||||
 | 
									sottrai_iva(pn, rigaiva);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				//scrittura delle righe di tipo I; notare che il cur passato alla autoload altri non e'..
 | 
									//scrittura delle righe di tipo I; notare che il cur passato alla autoload altri non e'..
 | 
				
			||||||
				//..che la rigaiva appena completata
 | 
									//..che la rigaiva appena completata
 | 
				
			||||||
					trasfilerighe->autoload(recrigheiva, cur); 
 | 
									trasfilerighe->autoload(recrigheiva, cur_rmoviva);
 | 
				
			||||||
 | 
									recrigheiva.add(riga.get(RMOVANA_DESCR).left(40), 8);	//descrizione riga iva = riga anale corrente
 | 
				
			||||||
 | 
									recrigheiva.add(riga.get(RMOVANA_CODCMS), 13);		//commessa presa dalla riga analitica corrente
 | 
				
			||||||
 | 
									trasfilerighe->write(recrigheiva);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}	//if(codivae!=..
 | 
				
			||||||
 | 
						}	//for(analmov.rows..
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const long righeiva_items = pn.iva_items();
 | 
				
			||||||
 | 
						if (righeiva_items > 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							//deve trasferire le righe iva rimaste dopo la sottrazione degli importi dovuti alle righe analitiche
 | 
				
			||||||
 | 
							for (int k = 0; k < righeiva_items; k++)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								const TRectype& riga = pn.iva(k);
 | 
				
			||||||
 | 
								if (!riga.get_real(RMI_IMPOSTA).is_zero())
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									const TBill uncle(riga);
 | 
				
			||||||
 | 
									cur_rmoviva.curr() = riga;
 | 
				
			||||||
 | 
									trasfilerighe->autoload(recrigheiva, cur_rmoviva);
 | 
				
			||||||
 | 
									recrigheiva.add(uncle.descrizione().left(40), 8);	//descrizione della riga iva = descrizione conto
 | 
				
			||||||
				trasfilerighe->write(recrigheiva);
 | 
									trasfilerighe->write(recrigheiva);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool TInvioP::sottrai_iva(TMovimentoPN& pn, const TRectype& rigaiva)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const TBill zio(rigaiva);
 | 
				
			||||||
 | 
						const real imposta = rigaiva.get_real(RMI_IMPOSTA);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						int k;
 | 
				
			||||||
 | 
						//caso fortunato
 | 
				
			||||||
 | 
						//scandisce gli elementi dell'array;se ne trova uno (k-esimo) con conto ed importo coincidenti..
 | 
				
			||||||
 | 
						//..con quelli passati al metodo, azzera l'importo di tale elemento dell'array
 | 
				
			||||||
 | 
					  for (k = 0; k < pn.iva_items(); k++)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							TRectype& iva_k = pn.iva(k);
 | 
				
			||||||
 | 
							const TBill conto_k(iva_k);
 | 
				
			||||||
 | 
							const real imposta_k = iva_k.get_real(RMI_IMPOSTA);
 | 
				
			||||||
 | 
							if (conto_k == zio && imposta_k == imposta)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								iva_k.zero(RMI_IMPOSTA);
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//caso sfortunato
 | 
				
			||||||
 | 
						//in questo caso gli importi dell'elemento k-esimo dell'array e passato al metodo NON coincidono
 | 
				
			||||||
 | 
						real residuo = imposta;
 | 
				
			||||||
 | 
						int ultima_riga_buona = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (k = 0; k < pn.iva_items() && !residuo.is_zero(); k++)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							TRectype& iva_k = pn.iva(k);
 | 
				
			||||||
 | 
							const TBill conto_k(iva_k);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (conto_k == zio)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								const real imposta_k = iva_k.get_real(RMI_IMPOSTA);
 | 
				
			||||||
 | 
								if (residuo >= imposta_k)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									residuo -= imposta_k;
 | 
				
			||||||
 | 
									iva_k.zero(RMI_IMPOSTA);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									iva_k.put(RMI_IMPOSTA, imposta_k - residuo);
 | 
				
			||||||
 | 
									residuo = ZERO;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								ultima_riga_buona = k;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						//alla fine del ciclo sull'array resta un residuo non nullo..
 | 
				
			||||||
 | 
						if (!residuo.is_zero())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (ultima_riga_buona >= 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								TRectype& iva_k = pn.iva(k);
 | 
				
			||||||
 | 
					  		iva_k.put(RMI_IMPOSTA, -residuo);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -821,6 +925,7 @@ bool TInvioP::i_proforma_pagamenti()
 | 
				
			|||||||
	rel.add(LF_CAUSALI, "CODCAUS==CODCAUS");
 | 
						rel.add(LF_CAUSALI, "CODCAUS==CODCAUS");
 | 
				
			||||||
  TCursor cur(&rel, "", 2, &da, &a);
 | 
					  TCursor cur(&rel, "", 2, &da, &a);
 | 
				
			||||||
  const long cur_items = cur.items();
 | 
					  const long cur_items = cur.items();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (cur_items != 0) 
 | 
					  if (cur_items != 0) 
 | 
				
			||||||
  { 
 | 
					  { 
 | 
				
			||||||
		//se ha almeno un movimento carica lo sheet dei conti che gli servira' in seguito nel calcolo..
 | 
							//se ha almeno un movimento carica lo sheet dei conti che gli servira' in seguito nel calcolo..
 | 
				
			||||||
@ -828,10 +933,16 @@ bool TInvioP::i_proforma_pagamenti()
 | 
				
			|||||||
		lettura_conti(_fiscali, 'F');
 | 
							lettura_conti(_fiscali, 'F');
 | 
				
			||||||
		lettura_conti(_sociali, 'S');
 | 
							lettura_conti(_sociali, 'S');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							TProgind pi(cur_items, "Trasferimento pagamenti...", true, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  cur.freeze();
 | 
						  cur.freeze();
 | 
				
			||||||
    TRectype& cur_rec = cur.curr();
 | 
					    TRectype& cur_rec = cur.curr();
 | 
				
			||||||
    for (cur = 0; cur.pos() < cur_items; ++(cur))
 | 
					    for (cur = 0; cur.pos() < cur_items; ++(cur))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								pi.addstatus(1);
 | 
				
			||||||
 | 
					      if (pi.iscancelled())
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const char tipomov = cur_rec.get(MOV_TIPOMOV)[0];
 | 
								const char tipomov = cur_rec.get(MOV_TIPOMOV)[0];
 | 
				
			||||||
			if (tipomov == '3' || tipomov == '2' || tipomov == '6')
 | 
								if (tipomov == '3' || tipomov == '2' || tipomov == '6')
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@ -913,10 +1024,19 @@ bool TInvioP::i_proforma_pagamenti()
 | 
				
			|||||||
bool TInvioP::i_proforma_clifor(char tipocf)
 | 
					bool TInvioP::i_proforma_clifor(char tipocf)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	TInvioP_file* trasfile = NULL;
 | 
						TInvioP_file* trasfile = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						TString progind_string = "Trasferimento ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (tipocf == 'C')
 | 
						if (tipocf == 'C')
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
		trasfile = apri_file("clienti");
 | 
							trasfile = apri_file("clienti");
 | 
				
			||||||
 | 
							progind_string << "clienti";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
		trasfile = apri_file("fornit");
 | 
							trasfile = apri_file("fornit");
 | 
				
			||||||
 | 
							progind_string << "fornitori";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
  TString80 filtro = "";
 | 
					  TString80 filtro = "";
 | 
				
			||||||
	filtro.format("TIPOCF == \"%c\"", tipocf);
 | 
						filtro.format("TIPOCF == \"%c\"", tipocf);
 | 
				
			||||||
@ -924,12 +1044,20 @@ bool TInvioP::i_proforma_clifor(char tipocf)
 | 
				
			|||||||
  rel.add(LF_COMUNI, "STATO==STATOCF|COM==COMCF", 1);
 | 
					  rel.add(LF_COMUNI, "STATO==STATOCF|COM==COMCF", 1);
 | 
				
			||||||
  TCursor cur(&rel, filtro);
 | 
					  TCursor cur(&rel, filtro);
 | 
				
			||||||
  const long cur_items = cur.items();
 | 
					  const long cur_items = cur.items();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (cur_items != 0) 
 | 
					  if (cur_items != 0) 
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
							progind_string << "...";
 | 
				
			||||||
 | 
							TProgind pi(cur_items, progind_string, true, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  cur.freeze();
 | 
						  cur.freeze();
 | 
				
			||||||
    TRectype& cur_rec = cur.curr();
 | 
					    TRectype& cur_rec = cur.curr();
 | 
				
			||||||
    for (cur = 0; cur.pos() < cur_items; ++(cur))
 | 
					    for (cur = 0; cur.pos() < cur_items; ++(cur))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
								pi.addstatus(1);
 | 
				
			||||||
 | 
					      if (pi.iscancelled())
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			TRecord_text rec;
 | 
								TRecord_text rec;
 | 
				
			||||||
			rec.set_type("C");
 | 
								rec.set_type("C");
 | 
				
			||||||
			trasfile->autoload(rec, cur); 
 | 
								trasfile->autoload(rec, cur); 
 | 
				
			||||||
 | 
				
			|||||||
@ -45,19 +45,19 @@ NAME(0) = ID REGISTRAZIONE
 | 
				
			|||||||
TYPE(0) = NUMERO
 | 
					TYPE(0) = NUMERO
 | 
				
			||||||
POSITION(0) = 0
 | 
					POSITION(0) = 0
 | 
				
			||||||
LENGTH(0) = 10
 | 
					LENGTH(0) = 10
 | 
				
			||||||
FIELD(0) = 107->NUMREGCG
 | 
					FIELD(0) = NUMREG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(1) = DATA REGISTRAZIONE
 | 
					NAME(1) = DATA REGISTRAZIONE
 | 
				
			||||||
TYPE(1) = DATA
 | 
					TYPE(1) = DATA
 | 
				
			||||||
POSITION(1) = 10
 | 
					POSITION(1) = 10
 | 
				
			||||||
LENGTH(1) = 8
 | 
					LENGTH(1) = 8
 | 
				
			||||||
FIELD(1) = 107->DATAREG
 | 
					FIELD(1) = DATAREG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(2) = CODICE CAUSALE
 | 
					NAME(2) = CODICE CAUSALE
 | 
				
			||||||
TYPE(2) = STRINGA
 | 
					TYPE(2) = STRINGA
 | 
				
			||||||
POSITION(2) = 18
 | 
					POSITION(2) = 18
 | 
				
			||||||
LENGTH(2) = 3
 | 
					LENGTH(2) = 3
 | 
				
			||||||
FIELD(2) = 107->CODCAUS
 | 
					FIELD(2) = CODCAUS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(3) = DESCRIZIONE CAUSALE
 | 
					NAME(3) = DESCRIZIONE CAUSALE
 | 
				
			||||||
TYPE(3) = STRINGA
 | 
					TYPE(3) = STRINGA
 | 
				
			||||||
@ -69,19 +69,19 @@ NAME(4) = DESCRIZIONE TESTATA
 | 
				
			|||||||
TYPE(4) = STRINGA
 | 
					TYPE(4) = STRINGA
 | 
				
			||||||
POSITION(4) = 61
 | 
					POSITION(4) = 61
 | 
				
			||||||
LENGTH(4) = 40
 | 
					LENGTH(4) = 40
 | 
				
			||||||
FIELD(4) = 107->DESCR[1,40]
 | 
					FIELD(4) = DESCR[1,40]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(5) = DATA DOCUMENTO
 | 
					NAME(5) = DATA DOCUMENTO
 | 
				
			||||||
TYPE(5) = DATA
 | 
					TYPE(5) = DATA
 | 
				
			||||||
POSITION(5) = 101
 | 
					POSITION(5) = 101
 | 
				
			||||||
LENGTH(5) = 8
 | 
					LENGTH(5) = 8
 | 
				
			||||||
FIELD(5) = 107->DATADOC 
 | 
					FIELD(5) = DATADOC 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(6) = NUMERO DOCUMENTO
 | 
					NAME(6) = NUMERO DOCUMENTO
 | 
				
			||||||
TYPE(6) = STRINGA
 | 
					TYPE(6) = STRINGA
 | 
				
			||||||
POSITION(6) = 109
 | 
					POSITION(6) = 109
 | 
				
			||||||
LENGTH(6) = 6
 | 
					LENGTH(6) = 6
 | 
				
			||||||
FIELD(6) = 107->NUMDOC
 | 
					FIELD(6) = NUMDOC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(7) = TIPO DOCUMENTO
 | 
					NAME(7) = TIPO DOCUMENTO
 | 
				
			||||||
TYPE(7) = STRINGA
 | 
					TYPE(7) = STRINGA
 | 
				
			||||||
@ -92,7 +92,7 @@ NAME(8) = CODICE CLIFOR
 | 
				
			|||||||
TYPE(8) = STRINGA
 | 
					TYPE(8) = STRINGA
 | 
				
			||||||
POSITION(8) = 145
 | 
					POSITION(8) = 145
 | 
				
			||||||
LENGTH(8) = 10
 | 
					LENGTH(8) = 10
 | 
				
			||||||
FIELD(8) = 23->CODCF
 | 
					FIELD(8) = CODCF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(9) = TOTALE IMPONIBILE
 | 
					NAME(9) = TOTALE IMPONIBILE
 | 
				
			||||||
TYPE(9) = IMPORTO
 | 
					TYPE(9) = IMPORTO
 | 
				
			||||||
@ -105,7 +105,7 @@ POSITION(10) = 169
 | 
				
			|||||||
NAME(11) = TOTALE DOCUMENTO
 | 
					NAME(11) = TOTALE DOCUMENTO
 | 
				
			||||||
TYPE(11) = IMPORTO
 | 
					TYPE(11) = IMPORTO
 | 
				
			||||||
POSITION(11) = 183
 | 
					POSITION(11) = 183
 | 
				
			||||||
FIELD(11) = 107->TOTDOC
 | 
					FIELD(11) = TOTDOC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(12) = DATA PAGAMENTO
 | 
					NAME(12) = DATA PAGAMENTO
 | 
				
			||||||
TYPE(12) = DATA
 | 
					TYPE(12) = DATA
 | 
				
			||||||
@ -116,19 +116,19 @@ NAME(13) = TIPO PAGAMENTO
 | 
				
			|||||||
TYPE(13) = STRINGA
 | 
					TYPE(13) = STRINGA
 | 
				
			||||||
POSITION(13) = 205
 | 
					POSITION(13) = 205
 | 
				
			||||||
LENGTH(13) = 20
 | 
					LENGTH(13) = 20
 | 
				
			||||||
FIELD(13) = 23->CODPAG
 | 
					FIELD(13) = CODPAG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(14) = DATA COMPETENZA
 | 
					NAME(14) = DATA COMPETENZA
 | 
				
			||||||
TYPE(14) = DATA
 | 
					TYPE(14) = DATA
 | 
				
			||||||
POSITION(14) = 225
 | 
					POSITION(14) = 225
 | 
				
			||||||
LENGTH(14) = 8
 | 
					LENGTH(14) = 8
 | 
				
			||||||
FIELD(14) = 107->DATACOMP
 | 
					FIELD(14) = DATACOMP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(15) = NUMERO PROTOCOLLO
 | 
					NAME(15) = NUMERO PROTOCOLLO
 | 
				
			||||||
TYPE(15) = STRINGA
 | 
					TYPE(15) = STRINGA
 | 
				
			||||||
POSITION(15) = 235
 | 
					POSITION(15) = 235
 | 
				
			||||||
LENGTH(15) = 10
 | 
					LENGTH(15) = 10
 | 
				
			||||||
FIELD(15) = 23->PROTIVA
 | 
					FIELD(15) = PROTIVA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(16) = VALUTA
 | 
					NAME(16) = VALUTA
 | 
				
			||||||
TYPE(16) = STRINGA
 | 
					TYPE(16) = STRINGA
 | 
				
			||||||
@ -142,7 +142,7 @@ NAME(0) = ID REGISTRAZIONE
 | 
				
			|||||||
TYPE(0) = NUMERO
 | 
					TYPE(0) = NUMERO
 | 
				
			||||||
POSITION(0) = 0
 | 
					POSITION(0) = 0
 | 
				
			||||||
LENGTH(0) = 10
 | 
					LENGTH(0) = 10
 | 
				
			||||||
FIELD(0) = 107->NUMREGCG
 | 
					FIELD(0) = 23->NUMREG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(1) = FLAG RIGA IVA
 | 
					NAME(1) = FLAG RIGA IVA
 | 
				
			||||||
TYPE(1) = STRINGA
 | 
					TYPE(1) = STRINGA
 | 
				
			||||||
@ -154,25 +154,25 @@ NAME(2) = FLAG DARE/AVERE
 | 
				
			|||||||
TYPE(2) = STRINGA
 | 
					TYPE(2) = STRINGA
 | 
				
			||||||
POSITION(2) = 11
 | 
					POSITION(2) = 11
 | 
				
			||||||
LENGTH(2) = 1
 | 
					LENGTH(2) = 1
 | 
				
			||||||
FIELD(2) = 108->SEZIONE
 | 
					FIELD(2) = SEZIONE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(3) = CODICE MASTRO
 | 
					NAME(3) = CODICE MASTRO
 | 
				
			||||||
TYPE(3) = NUMERO
 | 
					TYPE(3) = NUMERO
 | 
				
			||||||
POSITION(3) = 12
 | 
					POSITION(3) = 12
 | 
				
			||||||
LENGTH(3) = 5
 | 
					LENGTH(3) = 5
 | 
				
			||||||
FIELD(3) = 108->CODCONTO[1,3]
 | 
					FIELD(3) = CODCONTO[1,3]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(4) = CODICE CONTO
 | 
					NAME(4) = CODICE CONTO
 | 
				
			||||||
TYPE(4) = NUMERO
 | 
					TYPE(4) = NUMERO
 | 
				
			||||||
POSITION(4) = 17
 | 
					POSITION(4) = 17
 | 
				
			||||||
LENGTH(4) = 5
 | 
					LENGTH(4) = 5
 | 
				
			||||||
FIELD(4) = 108->CODCONTO[4,6]
 | 
					FIELD(4) = CODCONTO[4,6]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(5) = CODICE SOTTOCONTO
 | 
					NAME(5) = CODICE SOTTOCONTO
 | 
				
			||||||
TYPE(5) = NUMERO
 | 
					TYPE(5) = NUMERO
 | 
				
			||||||
POSITION(5) = 22
 | 
					POSITION(5) = 22
 | 
				
			||||||
LENGTH(5) = 5
 | 
					LENGTH(5) = 5
 | 
				
			||||||
FIELD(5) = 108->CODCONTO[8,12]
 | 
					FIELD(5) = CODCONTO[7,12]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(6) = FLAG CLIFOR
 | 
					NAME(6) = FLAG CLIFOR
 | 
				
			||||||
TYPE(6) = STRINGA
 | 
					TYPE(6) = STRINGA
 | 
				
			||||||
@ -184,18 +184,18 @@ NAME(7) = CODICE CLIFOR
 | 
				
			|||||||
TYPE(7) = NUMERO
 | 
					TYPE(7) = NUMERO
 | 
				
			||||||
POSITION(7) = 28
 | 
					POSITION(7) = 28
 | 
				
			||||||
LENGTH(7) = 10
 | 
					LENGTH(7) = 10
 | 
				
			||||||
FIELD(7) = 108->CODCONTO[7,12]
 | 
					FIELD(7) = CODCONTO[7,12]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(8) = DESCRIZIONE RIGA
 | 
					NAME(8) = DESCRIZIONE RIGA
 | 
				
			||||||
TYPE(8) = STRINGA
 | 
					TYPE(8) = STRINGA
 | 
				
			||||||
POSITION(8) = 38
 | 
					POSITION(8) = 38
 | 
				
			||||||
LENGTH(8) = 40
 | 
					LENGTH(8) = 40
 | 
				
			||||||
FIELD(8) = 108->DESCR[1,40]
 | 
					FIELD(8) = DESCR[1,40]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(9) = IMPORTO SOTTOCONTO
 | 
					NAME(9) = IMPORTO SOTTOCONTO
 | 
				
			||||||
TYPE(9) = IMPORTO
 | 
					TYPE(9) = IMPORTO
 | 
				
			||||||
POSITION(9) = 78
 | 
					POSITION(9) = 78
 | 
				
			||||||
FIELD(9) = 108->IMPORTO
 | 
					FIELD(9) = IMPORTO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(10) = IMPONIBILE
 | 
					NAME(10) = IMPONIBILE
 | 
				
			||||||
TYPE(10) = IMPORTO
 | 
					TYPE(10) = IMPORTO
 | 
				
			||||||
@ -215,7 +215,7 @@ NAME(13) = COMMESSA
 | 
				
			|||||||
TYPE(13) = STRINGA
 | 
					TYPE(13) = STRINGA
 | 
				
			||||||
POSITION(13) = 125
 | 
					POSITION(13) = 125
 | 
				
			||||||
LENGTH(13) = 20
 | 
					LENGTH(13) = 20
 | 
				
			||||||
FIELD(13) = 108->CODCMS
 | 
					FIELD(13) = CODCMS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(14) = VOCE DI SPESA
 | 
					NAME(14) = VOCE DI SPESA
 | 
				
			||||||
TYPE(14) = STRINGA
 | 
					TYPE(14) = STRINGA
 | 
				
			||||||
@ -229,7 +229,7 @@ NAME(0) = ID REGISTRAZIONE
 | 
				
			|||||||
TYPE(0) = NUMERO
 | 
					TYPE(0) = NUMERO
 | 
				
			||||||
POSITION(0) = 0
 | 
					POSITION(0) = 0
 | 
				
			||||||
LENGTH(0) = 10
 | 
					LENGTH(0) = 10
 | 
				
			||||||
FIELD(0) = 25->NUMREG
 | 
					FIELD(0) = NUMREG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(1) = FLAG RIGA IVA
 | 
					NAME(1) = FLAG RIGA IVA
 | 
				
			||||||
TYPE(1) = STRINGA
 | 
					TYPE(1) = STRINGA
 | 
				
			||||||
@ -241,31 +241,31 @@ NAME(3) = CODICE MASTRO
 | 
				
			|||||||
TYPE(3) = NUMERO
 | 
					TYPE(3) = NUMERO
 | 
				
			||||||
POSITION(3) = 12
 | 
					POSITION(3) = 12
 | 
				
			||||||
LENGTH(3) = 5
 | 
					LENGTH(3) = 5
 | 
				
			||||||
FIELD(3) = 25->GRUPPO
 | 
					FIELD(3) = GRUPPO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(4) = CODICE CONTO
 | 
					NAME(4) = CODICE CONTO
 | 
				
			||||||
TYPE(4) = NUMERO
 | 
					TYPE(4) = NUMERO
 | 
				
			||||||
POSITION(4) = 17
 | 
					POSITION(4) = 17
 | 
				
			||||||
LENGTH(4) = 5
 | 
					LENGTH(4) = 5
 | 
				
			||||||
FIELD(4) = 25->CONTO
 | 
					FIELD(4) = CONTO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(5) = CODICE SOTTOCONTO
 | 
					NAME(5) = CODICE SOTTOCONTO
 | 
				
			||||||
TYPE(5) = NUMERO
 | 
					TYPE(5) = NUMERO
 | 
				
			||||||
POSITION(5) = 22
 | 
					POSITION(5) = 22
 | 
				
			||||||
LENGTH(5) = 5
 | 
					LENGTH(5) = 5
 | 
				
			||||||
FIELD(5) = 25->SOTTOCONTO
 | 
					FIELD(5) = SOTTOCONTO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(6) = FLAG CLIFOR
 | 
					NAME(6) = FLAG CLIFOR
 | 
				
			||||||
TYPE(6) = STRINGA
 | 
					TYPE(6) = STRINGA
 | 
				
			||||||
POSITION(6) = 27
 | 
					POSITION(6) = 27
 | 
				
			||||||
LENGTH(6) = 1
 | 
					LENGTH(6) = 1
 | 
				
			||||||
FIELD(6) = 25->TIPOC
 | 
					FIELD(6) = TIPOC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(7) = CODICE CLIFOR
 | 
					NAME(7) = CODICE CLIFOR
 | 
				
			||||||
TYPE(7) = NUMERO
 | 
					TYPE(7) = NUMERO
 | 
				
			||||||
POSITION(7) = 28
 | 
					POSITION(7) = 28
 | 
				
			||||||
LENGTH(7) = 10
 | 
					LENGTH(7) = 10
 | 
				
			||||||
FIELD(7) = 25->SOTTOCONTO
 | 
					FIELD(7) = SOTTOCONTO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(8) = DESCRIZIONE RIGA
 | 
					NAME(8) = DESCRIZIONE RIGA
 | 
				
			||||||
TYPE(8) = STRINGA
 | 
					TYPE(8) = STRINGA
 | 
				
			||||||
@ -279,13 +279,13 @@ POSITION(9) = 78
 | 
				
			|||||||
NAME(10) = IMPONIBILE
 | 
					NAME(10) = IMPONIBILE
 | 
				
			||||||
TYPE(10) = IMPORTO
 | 
					TYPE(10) = IMPORTO
 | 
				
			||||||
POSITION(10) = 92
 | 
					POSITION(10) = 92
 | 
				
			||||||
FIELD(10) = 25->IMPONIBILE
 | 
					FIELD(10) = IMPONIBILE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(11) = CODICE IVA
 | 
					NAME(11) = CODICE IVA
 | 
				
			||||||
TYPE(11) = STRINGA
 | 
					TYPE(11) = STRINGA
 | 
				
			||||||
POSITION(11) = 106
 | 
					POSITION(11) = 106
 | 
				
			||||||
LENGTH(11) = 4
 | 
					LENGTH(11) = 4
 | 
				
			||||||
FIELD(11) = 25->CODIVA
 | 
					FIELD(11) = CODIVA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(12) = CP INDED
 | 
					NAME(12) = CP INDED
 | 
				
			||||||
TYPE(12) = STRINGA
 | 
					TYPE(12) = STRINGA
 | 
				
			||||||
@ -296,7 +296,6 @@ NAME(13) = COMMESSA
 | 
				
			|||||||
TYPE(13) = STRINGA
 | 
					TYPE(13) = STRINGA
 | 
				
			||||||
POSITION(13) = 125
 | 
					POSITION(13) = 125
 | 
				
			||||||
LENGTH(13) = 20
 | 
					LENGTH(13) = 20
 | 
				
			||||||
FIELD(13) = 108->CODCMS
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME(14) = VOCE DI SPESA
 | 
					NAME(14) = VOCE DI SPESA
 | 
				
			||||||
TYPE(14) = STRINGA
 | 
					TYPE(14) = STRINGA
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user