set_header(i,"@125gPag @#");// la prima linea contiene, sicuramente, il numero di pagina
constlongfirm=get_firm();// legge l'id della ditta corrente
TLocalisamfileditte(LF_NDITTE);// apre il file ditte
ditte.zero();// vuota il record
ditte.put("CODDITTA",firm);// riempie la chiave
if(ditte.read()==NOERR){// se il record della ditta viene trovato viene settato l'header
constTString&s=ditte.get("RAGSOC");// legge la ragione sociale della ditta
set_header(i,"Ditta %ld %s",firm,(constchar*)s);// setta il nome e l'id della ditta della prima linea dell'header
}
set_header(++i,"Codice articolo@22gT@24gDescrizione@75gGrMer@81gDescrizione gruppo merceologico");// setta la linea successiva dell'header
if(_st_umart||_st_codcorr)set_header(++i,"");// crea una linea vuota se almeno una stampa condizionale <20> abilitata
if(_st_codcorr)set_header(i,"Cod. art. altern.");// se <20> abilitata la stampa dei codici corrispondenti l'header lo indica
if(_st_umart)set_header(i,"@50gUM@53gFatt. conv.");// se <20> abilitata la stampa delle unit<69> di misura l'header lo indica
set_header(++i,"Forn.@7gRagione sociale@58gCosto standard@83gPeso@105gTara");// la linea successiva contiene il fornitore e altri dati
if(_st_umart)set_header(i,"@80gUP");// su questa linea viene indicata anche l'unit<69> di misura del peso (se abilitata)
set_header(++i,"Pezzi x conf.@23gPezzi x collo@45gAR@48gRD");// l'ultima linea d'header contiene i pezzi per confezione e altri dati
if(_st_fisc)set_header(i,"@51gAF@54gRagFs@60gC@62gCCA@66gGrA@70gCnA@74gSottCA@81gCCV@85gGrV@89gCnV@93gSottCV@100gClasseDog@111gIva@116gIvaR");// aggiunge i dati fiscali sull'ultima linea
if(file==LF_ANAGR){// se il file in stampa non <20> il file principale non c'<27> nulla da fare
TLocalisamfile&anagr=_rel->lfile();// prende il riferimento al file principale
set_row(1,"$[g]@20s$[n]@22g@1s@24g@50s@75g@5s@81g@50s",FLD(LF_ANAGR,"CODART"),FLD(LF_ANAGR,"TIPO"),FLD(LF_ANAGR,"DESCR"),FLD(LF_ANAGR,"GRMERC1"),FLD(-GMC1,"S0"));// imposta la prima linea di dati
intn_codcorr=0,n_umart=0,n_gmc=(anagr.get("GRMERC2").not_empty())?(1):(0)+(anagr.get("GRMERC3").not_empty())?(1):(0);// legge il numero di gruppi merc.
if(_st_codcorr){// se <20> abilitata la stampa dei codici corrispondenti viene letto il numero di codici presenti, altrimenti viene lasciato a 0
_codcorr->zero();// il record corrente del file dei codici corrispondenti viene vuotato
_codcorr->put("CODART",anagr.get("CODART"));// viene composta la chiave
_arr_codcorr->read(_codcorr->curr());// il record array dei codici viene caricato
n_codcorr=_arr_codcorr->rows();// viene settato il numero di codici trovato
}
if(_st_umart){// se <20> abilitata la stampa delle unit<69> di misura viene letto il numero di unit<69> di mis. da stampare, altrimenti viene lasciato a 0
_umart->zero();// il record corrente del file delle unit<69> di misura viene vuotato
_umart->put("CODART",anagr.get("CODART"));// viene composta la chiave
_arr_umart->read(_umart->curr());// il record array delle unit<69> di misura viene caricato
n_umart=_arr_umart->rows();// viene settato il numero di unit<69> di misura trovate
}
intn_max=max3(n_gmc,n_codcorr,n_umart);// viene trovato il maggiore dei tre contatori (gruppi merc., unit<69> di mis. e codici corrisp.)
for(inti=1;i<=n_max;i++){// ciclo sul maggiore dei contatori
set_row(i+1,"");// vuota la linea di stampa corrente
if(i<=n_codcorr){// se ci sono ancora codici corrispondenti gli spazi relativi della riga vengono riempiti
TStringcodartalt(_arr_codcorr->row(i,FALSE).get("CODARTALT"));// legge il codice corrispondente dell'articolo
TStringtipo(_arr_codcorr->row(i,FALSE).get("TIPO"));// legge il tipo
set_row(i+1,"@1g%-20s@22g%1s@24gCodice alternativo",(constchar*)codartalt,(constchar*)tipo);// setta gli spazi della riga con i valori letti
}
if(i<=n_umart){// se ci sono ancora unit<69> di misura gli spazi relativi della riga vengono riempiti
TStringum(_arr_umart->row(i,FALSE).get("UM"));// legge l'id dell'unit<69> di misura
realfc(_arr_umart->row(i,FALSE).get_real("FC"));// legge il suo fattore di conversione
set_row(i+1,"@50g%-2s@53g%-s",(constchar*)um,fc.string(10,5));// setta gli spazi della riga con i valori letti
}
if(i<=n_gmc){// se ci sono ancora gruppi merceologici gli spazi relativi della riga vengono riempiti
TStringgrmerc,descr;// istanzia le due variabili per codice del gruppo e descrizione
if(i==1){// se <20> il primo deve essere letto dal secondo campo GRMERC del file dell'anagrafica
grmerc=anagr.get("GRMERC2");// legge il codice del gruppo
descr=_rel->lfile(-GMC2).get("S0");// legge la sua descrizione dalla tabella
}else{// se <20> il secondo deve essere letto dal terzo campo GRMERC del file dell'anagrafica
grmerc=anagr.get("GRMERC3");// legge il codice del gruppo
descr=_rel->lfile(-GMC3).get("S0");// legge la sua descriziona dalla tabella
set_row(n_max+2,"@5s@7g@50s@58g@15.5n@83g@15.5n@105g@15.5n",FLD(LF_ANAGR,"CODFORN"),FLD(LF_CLIFO,"RAGSOC"),FLD(LF_ANAGR,"COSTSTD"),FLD(LF_ANAGR,"PESO"),FLD(LF_ANAGR,"TARA"));// imposta la penultima linea
if(_st_umart)set_row(n_max+2,"@80g@2s",FLD(LF_ANAGR,"UMP"));// se <20> abilitata la stampa delle unit<69> di misura aggiunge l'u.m. del peso
set_row(n_max+3,"@15.5n@23g@15.5n@45g@f@48g@f",FLD(LF_ANAGR,"PPCONF"),FLD(LF_ANAGR,"PPCOLLO"),FLD(LF_ANAGR,"ARTPROD"),FLD(LF_ANAGR,"RIORDINO"));// imposta l'ultima linea
if(_st_fisc)set_row(n_max+3,"@51g@f@54g@5s@60g@1s@62g@3s@66g@3n@70g@3n@74g@6n@81g@3s@85g@3n@89g@3n@93g@6n@100g@10s@111g@4s@116g@4s",// imposta i dati fiscali sull'ultima linea