Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento :riporto gestione ripartizioni interattive per conversione git-svn-id: svn://10.65.10.50/trunk@17147 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									5a12bb43ba
								
							
						
					
					
						commit
						d12d45d52e
					
				| @ -80,24 +80,6 @@ bool TRiparti_msk::on_field_event(TOperable_field& o, TField_event e, long jolly | ||||
|         return error_box(TR("Il totale delle percentuali di riparto deve essere 100")); | ||||
|     } | ||||
|     break; | ||||
|   case F_SHEET: | ||||
|     if (e == fe_init) | ||||
|     { | ||||
|       TSheet_field& sf = sfield(F_SHEET); | ||||
|       TMask& sm = sf.sheet_mask(); | ||||
|       const bool on = get(F_TIPO)[0] != 'C'; | ||||
|       for (short id = 202; id < 214; id++) | ||||
|       { | ||||
|         if (sm.id2pos(id) > 0) | ||||
|         { | ||||
|           sf.enable_column(id, on); | ||||
|           sm.enable(id, on); | ||||
|         } | ||||
|         if (sm.id2pos(id+50) > 0) | ||||
|           sm.enable(id+50, on); | ||||
|       } | ||||
|     } | ||||
|     break; | ||||
|   case F_GENFASI: | ||||
|     if (e == fe_init) | ||||
|     { | ||||
|  | ||||
							
								
								
									
										29
									
								
								ca/ca0800a.h
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								ca/ca0800a.h
									
									
									
									
									
								
							| @ -1,19 +1,24 @@ | ||||
| #define F_TIPO       101 | ||||
| #define F_CODICE_I   102 | ||||
| #define F_CODICE_B   103 | ||||
| #define F_DESCRIZ_I  104 | ||||
| #define F_DESCRIZ_B  105 | ||||
| #define F_TIPORIP    106 | ||||
| #define F_LEVEL_1    107 | ||||
| #define F_LEVEL_2    108 | ||||
| //le define commentate per ora non servono ma in futuro forse si (segnaposto)
 | ||||
| //#define F_CODICE_P   104
 | ||||
| //#define F_CODICE_C   105
 | ||||
| #define F_DESCRIZ_I  106 | ||||
| #define F_DESCRIZ_B  107 | ||||
| //#define F_DESCRIZ_P  108
 | ||||
| //#define F_DESCRIZ_C  109
 | ||||
| #define F_TIPORIP    110 | ||||
| #define F_LEVEL_1    111 | ||||
| #define F_LEVEL_2    112 | ||||
| 
 | ||||
| #define F_GRUPPO     111 | ||||
| #define F_CONTO      112  | ||||
| #define F_SOTTOCONTO 113 | ||||
| #define F_DESCR      114 | ||||
| #define F_ANNOES     115 | ||||
| #define F_INDBIL     116 | ||||
| #define F_CLASSEMOV  117 | ||||
| #define F_GRUPPO     113 | ||||
| #define F_CONTO      114  | ||||
| #define F_SOTTOCONTO 115 | ||||
| #define F_DESCR      116 | ||||
| #define F_ANNOES     117 | ||||
| #define F_INDBIL     118 | ||||
| #define F_CLASSEMOV  119 | ||||
| 
 | ||||
| #define F_CODCDC_1   121 | ||||
| #define F_CODCDC_2   122 | ||||
|  | ||||
| @ -18,10 +18,10 @@ BEGIN | ||||
|   FLAGS "ZP" | ||||
|   ITEM "I|Interattiva" | ||||
|     MESSAGE SHOW,1@|HIDE,2@ | ||||
|   ITEM "C|Conversione" | ||||
|     MESSAGE SHOW,1@|HIDE,2@ | ||||
|   ITEM "B|Batch" | ||||
|     MESSAGE SHOW,2@|HIDE,1@ | ||||
|   ITEM "P|Pareggio" | ||||
|     MESSAGE SHOW,1@|HIDE,2@ | ||||
|   FIELD TIPO | ||||
|   KEY 1 | ||||
| END | ||||
| @ -56,8 +56,8 @@ BEGIN | ||||
|   DISPLAY "Codice@8 " CODICE | ||||
|   DISPLAY "Costo@20" CODCOSTO | ||||
|   DISPLAY "Commessa@20" CODCMS | ||||
|   DISPLAY "Fase@10" CODFASE | ||||
|   DISPLAY "Descrizione@50" DESCRIZ | ||||
|   DISPLAY "Fase@10" CODFASE | ||||
|   OUTPUT F_CODICE_B CODICE | ||||
|   OUTPUT F_DESCRIZ_B DESCRIZ | ||||
|   CHECKTYPE REQUIRED | ||||
|  | ||||
							
								
								
									
										246
									
								
								ca/ca2200.cpp
									
									
									
									
									
								
							
							
						
						
									
										246
									
								
								ca/ca2200.cpp
									
									
									
									
									
								
							| @ -24,63 +24,10 @@ class TRib_movanal_msk : public TAnal_report_mask | ||||
| protected: | ||||
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); | ||||
| 
 | ||||
|   void save_to_ini(); | ||||
|   void load_from_ini(); | ||||
| 
 | ||||
| public: | ||||
|   TRib_movanal_msk(); | ||||
| }; | ||||
| 
 | ||||
| void TRib_movanal_msk::save_to_ini() | ||||
| { | ||||
|   TConfig ini(CONFIG_DITTA, "ca"); | ||||
| 
 | ||||
|   // Cancella tutte le variabili di pareggio
 | ||||
|   int j; | ||||
|   for (j = 1; ini.remove("Pareggio", j); j++); | ||||
| 
 | ||||
|   TSheet_field& sf = sfield(F_RIGHE); | ||||
|   const int idx = sf.cid2index(F_CODCAUS); | ||||
| 
 | ||||
|   // Salva tutte le righe dello sheet nel formato
 | ||||
|   // Pareggio(1) = Causale|Costo|Commessa|Fase
 | ||||
|   j = 0; | ||||
|   FOR_EACH_SHEET_ROW(sf, i, row)  | ||||
|   { | ||||
|     TToken_string par = row->get(idx);  // Codice causale
 | ||||
|     if (!par.blank()) | ||||
|     { | ||||
|       TAnal_bill bill; | ||||
|       const int flags = get_row_bill(sf, i, bill); | ||||
|       if (flags != 0) | ||||
|       { | ||||
|         if (flags & 1) par.add(bill.costo(),    1); | ||||
|         if (flags & 2) par.add(bill.commessa(), 2); | ||||
|         if (flags & 4) par.add(bill.fase(),     3); | ||||
|         ini.set("Pareggio", par, NULL, true, ++j); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void TRib_movanal_msk::load_from_ini() | ||||
| { | ||||
|   // Svuota lo sheet
 | ||||
|   TSheet_field& sf = sfield(F_RIGHE); | ||||
|   sf.destroy(); | ||||
| 
 | ||||
|   // Carica tutte le variabili di pareggio nello sheet
 | ||||
|   TConfig ini(CONFIG_DITTA, "ca"); | ||||
|   TToken_string par; | ||||
|   for (int j = 1; ; j++) | ||||
|   { | ||||
|     par = ini.get("Pareggio", NULL, j); | ||||
|     if (par.empty_items()) | ||||
|       break; | ||||
|     const TAnal_bill bill("", par.get(1), par.get(2), par.get(3)); | ||||
|     set_row_bill(sf, -1, bill); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| bool TRib_movanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) | ||||
| { | ||||
| @ -98,11 +45,7 @@ bool TRib_movanal_msk::on_field_event(TOperable_field& o, TField_event e, long j | ||||
| 				return error_box(TR("La data deve appartenere all'anno selezionato")); | ||||
| 		} | ||||
| 		break; | ||||
|   case DLG_OK:  | ||||
|   case DLG_SAVEREC:  | ||||
|     if (e == fe_button) | ||||
|       save_to_ini();  | ||||
|     break; | ||||
| 
 | ||||
|   default:  | ||||
|     break; | ||||
|   } | ||||
| @ -111,8 +54,6 @@ bool TRib_movanal_msk::on_field_event(TOperable_field& o, TField_event e, long j | ||||
| 
 | ||||
| TRib_movanal_msk::TRib_movanal_msk() : TAnal_report_mask("ca2200a") | ||||
| { | ||||
|   create_sheet(F_RIGHE); | ||||
|   load_from_ini(); | ||||
| } | ||||
| 
 | ||||
| //--------------------------------------------------------------------
 | ||||
| @ -122,45 +63,66 @@ class TRib_movanal_app : public TSkeleton_application | ||||
| { | ||||
|   TCache_ripartizioni _cache_rip; | ||||
|   bool _definitivo; | ||||
|   TAssoc_array _caus_cms; | ||||
| 
 | ||||
|   virtual const char* extra_modules() const { return "cm"; } //deve funzionare anche per le commesse
 | ||||
| 
 | ||||
| protected: | ||||
|   virtual void main_loop(); | ||||
| 
 | ||||
|   bool explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows, const int annoes,  | ||||
|                     const char tipomov); | ||||
|   bool pareggia_commessa(TAnal_mov& anal_mov); | ||||
|   bool elabora_righe(TAnal_mov& anal_mov, const TRecord_array& input_rows, TRecord_array& output_rows); | ||||
|   bool ripartizione(const TAnal_ripartizioni_batch& rrip, const TRectype& rec, TRecord_array& output_rows); | ||||
|   bool pareggio(TAnal_mov& anal_mov, const TAnal_ripartizioni_batch& rrip, const TRectype& rec, TRecord_array& output_rows); | ||||
| 
 | ||||
| public: | ||||
|   bool elabora_movimento(TAnal_mov& anal_mov, const bool esplodi); | ||||
| 	TRib_movanal_app(){} | ||||
| }; | ||||
| 
 | ||||
| bool TRib_movanal_app::explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows,  | ||||
|                                     const int annoes, const char tipomov) | ||||
| { | ||||
|   bool ho_cambiato_qualchecosa = false; | ||||
|   for (int r = 1; r <= input_rows.rows(); r++) | ||||
|   { | ||||
|     const TRectype& rec = input_rows.row(r); | ||||
|     TAnal_bill zio(rec); | ||||
|     const int rmovana_indbil = zio.indicatore_bilancio(); | ||||
|     const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(rec.get(RMOVANA_CODCCOSTO), rec.get(RMOVANA_CODCMS), | ||||
|                                                             rec.get(RMOVANA_CODFASE), annoes, rmovana_indbil, tipomov); | ||||
|     //ci sono righe di ripartizione
 | ||||
|     const int righe_ripartizione = rrip.rows(); | ||||
|     bool ripartisci = righe_ripartizione > 0; | ||||
| 
 | ||||
|     if (ripartisci)   | ||||
| bool TRib_movanal_app::pareggio(TAnal_mov& anal_mov, const TAnal_ripartizioni_batch& rrip, const TRectype& rec,  | ||||
|                                 TRecord_array& output_rows) | ||||
| { | ||||
|   bool ho_pareggiato = false; | ||||
| 
 | ||||
|   TImporto totdoc(anal_mov.get_char(MOVANA_SEZIONE), anal_mov.get_real(MOVANA_TOTDOC)); | ||||
| 
 | ||||
|   const TImporto imp_riga(rec.get_char(RMOVANA_SEZIONE), rec.get_real(RMOVANA_IMPORTO)); | ||||
| 
 | ||||
|   totdoc -= imp_riga; | ||||
|   totdoc.normalize(); | ||||
|   anal_mov.put(MOVANA_TOTDOC, totdoc.valore()); | ||||
|   anal_mov.put(MOVANA_SEZIONE, totdoc.sezione()); | ||||
| 
 | ||||
|   //aggiunge la riga originale alle righe di output (e' un pareggio)
 | ||||
|   const int original_nriga = output_rows.rows() + 1; | ||||
|   TRectype* newrec = new TRectype(rec); | ||||
|   newrec->put(RMOVANA_NUMRIG, original_nriga); | ||||
|   output_rows.add_row(newrec); | ||||
| 
 | ||||
|   //swappa la sezione e la manda al ripartitore in modo da generare righe con la sezione rovesciata rispetto a quella..
 | ||||
|   //..originale ed ottenere cosi' il pareggio
 | ||||
|   TRectype swaprec(rec); | ||||
|   swaprec.put(RMOVANA_SEZIONE, imp_riga.sezione() == 'D' ? 'A' : 'D'); | ||||
|   ho_pareggiato = ripartizione(rrip, swaprec, output_rows); | ||||
| 
 | ||||
|   //elimina il codcontoori da tutte le righe aggiunte per il pareggio
 | ||||
|   for (int i = output_rows.rows(); i > original_nriga; i--) | ||||
|     output_rows.row(i, false).zero(RMOVANA_CODCONTORI); | ||||
| 
 | ||||
|   return ho_pareggiato; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool TRib_movanal_app::ripartizione(const TAnal_ripartizioni_batch& rrip, const TRectype& rec, TRecord_array& output_rows) | ||||
| { | ||||
|   bool ho_ripartito = false; | ||||
|   // Importo totale da distribuire arrotondato ai decimali della valuta di conto
 | ||||
|   TGeneric_distrib distrib(rec.get_real(RMOVANA_IMPORTO), TCurrency::get_firm_dec()); | ||||
| 
 | ||||
|   // Calcolo tutte le percentuali da ripartire
 | ||||
|   int i; | ||||
|       for (i = 1; i <= righe_ripartizione; i++) | ||||
|   const int righe_ripartizione = rrip.rows(); | ||||
|   for (i = 1; i <= rrip.rows(); i++) | ||||
|     distrib.add(rrip[i].get_real(RRIP_RIPARTO)); | ||||
| 
 | ||||
|   for (i = 1; i <= righe_ripartizione; i++) | ||||
| @ -184,69 +146,62 @@ bool TRib_movanal_app::explode_rows(const TRecord_array& input_rows, TRecord_arr | ||||
| 		  ca_copia_campo(rrip[i], RRIP_CODCONTO, *newrec, RMOVANA_CODCONTO); | ||||
| 
 | ||||
| 		  output_rows.add_row(newrec); | ||||
| 	        ho_cambiato_qualchecosa = true; | ||||
|       ho_ripartito = true; | ||||
| 	  } //if(imp!=ZERO)...
 | ||||
|   } //for(i=1;i<=righe_ripartizione...
 | ||||
| 
 | ||||
|   return ho_ripartito; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool TRib_movanal_app::elabora_righe(TAnal_mov& anal_mov, const TRecord_array& input_rows, TRecord_array& output_rows) | ||||
| { | ||||
|   bool ho_cambiato_qualchecosa = false; | ||||
| 
 | ||||
|   const int annoes = anal_mov.get_int(MOVANA_ANNOES); | ||||
|   const char tipomov = anal_mov.get_char(MOVANA_TIPOMOV); | ||||
| 
 | ||||
|   for (int r = 1; r <= input_rows.rows(); r++) | ||||
|   { | ||||
|     const TRectype& rec = input_rows.row(r); | ||||
|     TAnal_bill zio(rec); | ||||
|     const int rmovana_indbil = zio.indicatore_bilancio(); | ||||
| 
 | ||||
|     //ripartizione batch: passa il conto perche' per prima cosa provera' una ripartizione di tipo 'P' con chiave 3; se non..
 | ||||
|     //..ci riuscira', provera' da solo (metodi della TCache_ripartizioni) le ripartizioni di tipo 'B' con chiave 4.
 | ||||
|     const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(zio, annoes, rmovana_indbil, tipomov); | ||||
|     const char tiporip = rrip.tiporip(); | ||||
| 
 | ||||
|     //ci sono righe di ripartizione
 | ||||
|     const int righe_ripartizione = rrip.rows(); | ||||
|     bool ripartisci = righe_ripartizione > 0; | ||||
| 
 | ||||
|     //se ci sono righe di ripartizione/pareggio si va a ripartire!
 | ||||
|     if (ripartisci)   | ||||
|     { | ||||
|       switch (tiporip) | ||||
|       { | ||||
|       //procedura di ripartizione batch 'B' originale; se tiporip=='P' invece ci vuole il pareggio del movana
 | ||||
|       case 'B': | ||||
|         ho_cambiato_qualchecosa = ripartizione(rrip, rec, output_rows); | ||||
|         break; | ||||
|       case 'P': | ||||
|         ho_cambiato_qualchecosa = pareggio(anal_mov, rrip, rec, output_rows); | ||||
|         break; | ||||
|       default: | ||||
|         break; | ||||
|       } | ||||
|     } | ||||
|     } | ||||
|     else  //nessuna riga di ripartizione->aggiungo la riga input all'output
 | ||||
|     else  //if(ripartisci...   nessuna riga di ripartizione->aggiungo la riga input all'output
 | ||||
|     { | ||||
|       TRectype* newrec = new TRectype(rec); | ||||
|       newrec->put(RMOVANA_NUMRIG, output_rows.rows() + 1); | ||||
|       output_rows.add_row(newrec); | ||||
|     } | ||||
|   } | ||||
|   } //for(int r=1; r<=input_rows.rows()...
 | ||||
|   return ho_cambiato_qualchecosa; | ||||
| } | ||||
| 
 | ||||
| bool TRib_movanal_app::pareggia_commessa(TAnal_mov& anal_mov) | ||||
| { | ||||
|   bool ho_cambiato_qualchecosa = false; | ||||
| 
 | ||||
|   const TString& codcaus = anal_mov.get(MOVANA_CODCAUS); | ||||
|   const TAnal_bill* cms = (const TAnal_bill*)_caus_cms.objptr(codcaus); | ||||
|   if (cms != NULL) // La causale del movimento e' tra quelle da pareggiare
 | ||||
|   { | ||||
|     const TImporto totdoc(anal_mov.get_char(MOVANA_SEZIONE), anal_mov.get_real(MOVANA_TOTDOC)); | ||||
|     if (!totdoc.is_zero()) // Movimento da pareggiare
 | ||||
|     { | ||||
|       TRecord_array& body = anal_mov.body(); | ||||
|       // Cerco la commessa/fase/costo tra le righe esistenti
 | ||||
|       int i; | ||||
|       for (i = body.last_row(); i > 0; i--) | ||||
|       { | ||||
|         const TRectype& row = body[i]; | ||||
|         if ((cms->costo().blank() || row.get(RMOVANA_CODCCOSTO) == cms->costo()) && | ||||
|             (cms->commessa().blank() || row.get(RMOVANA_CODCMS) == cms->commessa()) &&            | ||||
|             (cms->fase().blank() || row.get(RMOVANA_CODFASE) == cms->fase())) | ||||
|           break; | ||||
|       } | ||||
|       // Se non trovo nessuna riga compatibile, me la creo
 | ||||
|       if (i <= 0) | ||||
|       { | ||||
|         TRectype& rmovana = anal_mov.new_row(); | ||||
|         rmovana.put(RMOVANA_DESCR, TR("Pareggio commessa")); | ||||
|         rmovana.put(RMOVANA_CODCCOSTO, cms->costo()); | ||||
|         rmovana.put(RMOVANA_CODCMS,    cms->commessa()); | ||||
|         rmovana.put(RMOVANA_CODFASE,   cms->fase()); | ||||
|         i = rmovana.get_int(RMOVANA_NUMRIG); | ||||
|       } | ||||
| 
 | ||||
|       // Sottraggo all'importo della riga il totale documento, 
 | ||||
|       // il quale verra' quindi azzerato
 | ||||
|       TRectype& rmovana = body[i]; | ||||
|       TImporto importo(rmovana.get_char(RMOVANA_SEZIONE), rmovana.get_real(RMOVANA_IMPORTO)); | ||||
|       importo -= totdoc; | ||||
|       importo.normalize(); | ||||
|       rmovana.put(RMOVANA_SEZIONE, importo.sezione()); | ||||
|       rmovana.put(RMOVANA_IMPORTO, importo.valore()); | ||||
|       anal_mov.put(MOVANA_TOTDOC, ZERO); | ||||
| 
 | ||||
|       ho_cambiato_qualchecosa = true; | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   return ho_cambiato_qualchecosa; | ||||
| } | ||||
| 
 | ||||
| bool TRib_movanal_app::elabora_movimento(TAnal_mov& anal_mov, const bool esplodi) | ||||
| { | ||||
| @ -266,13 +221,11 @@ bool TRib_movanal_app::elabora_movimento(TAnal_mov& anal_mov, const bool esplodi | ||||
|     output_rows.destroy_rows();             //..e poi lo pulisce
 | ||||
| 
 | ||||
|     //Esploditore
 | ||||
|     if (explode_rows(compact_rows, output_rows, anal_mov.get_int(MOVANA_ANNOES), anal_mov.get_char(MOVANA_TIPOMOV))) | ||||
|     if (elabora_righe(anal_mov, compact_rows, output_rows)) | ||||
|     { | ||||
|       input_rows = output_rows; //rimette i record elaborati negli originali
 | ||||
|       do_rewrite = true; | ||||
|     } | ||||
|     if (pareggia_commessa(anal_mov)) | ||||
|       do_rewrite = true; | ||||
|      | ||||
|     if (_definitivo)  //se l'elaborazione e' definitiva...
 | ||||
|     { | ||||
| @ -285,8 +238,12 @@ bool TRib_movanal_app::elabora_movimento(TAnal_mov& anal_mov, const bool esplodi | ||||
|     //Imploditore
 | ||||
|     do_rewrite = ca_implode_rows(input_rows, compact_rows); | ||||
|     if (do_rewrite) | ||||
|     { | ||||
|       input_rows = compact_rows; // rimette i record compattati negli originali
 | ||||
|       anal_mov.update_totdoc();   //aggiorna il totale movana (necessarip per ripartizioni a pareggio, di sicurezza per le altre)
 | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   return do_rewrite; //se ha elaborato delle righe e/o e' una elaborazione definitiva, riscrive la..
 | ||||
| } | ||||
| 
 | ||||
| @ -348,23 +305,6 @@ void TRib_movanal_app::main_loop() | ||||
|       //Presa la decisione si parte! Tenetevi forte...
 | ||||
|       if (run) | ||||
|       { | ||||
|         // Riempie la lista della causali dei movimenti da pareggiare
 | ||||
|         _caus_cms.destroy(); | ||||
|         TSheet_field& sf = mask.sfield(F_RIGHE); | ||||
|         const int pos_codcaus = sf.cid2index(F_CODCAUS); | ||||
|         FOR_EACH_SHEET_ROW(sf, i, row)  | ||||
|         { | ||||
|           const TString4 codcaus = row->get(pos_codcaus); | ||||
|           if (codcaus.full()) | ||||
|           { | ||||
|             TAnal_bill* bill = new TAnal_bill; | ||||
|             if (mask.get_row_bill(sf, i, *bill) != 0) | ||||
|               _caus_cms.add(codcaus, bill); | ||||
|             else | ||||
|               delete bill; | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         if (compattazione) | ||||
|           cur_movana.scan(compatta_callback, this, TR("Compattamento movimenti...")); | ||||
|         else | ||||
|  | ||||
| @ -5,7 +5,6 @@ | ||||
| #define F_DEFINITIVO  203 | ||||
| #define F_ANNO        204 | ||||
| #define F_COMPATTA    205 | ||||
| #define F_RIGHE       300 | ||||
| //Devono valere un numero piu' alto di S_CDC12 (che attualmente e' 112) senno' non nascono in fila nello..
 | ||||
| //..sheet
 | ||||
| #define F_CODCAUS     113 | ||||
|  | ||||
							
								
								
									
										156
									
								
								ca/ca2200a.uml
									
									
									
									
									
								
							
							
						
						
									
										156
									
								
								ca/ca2200a.uml
									
									
									
									
									
								
							| @ -83,162 +83,6 @@ BEGIN | ||||
|   PROMPT 2 7 "Blocca movimenti elaborati (DEFINITIVO e vale solo per ripartizione)" | ||||
| END | ||||
| 
 | ||||
| TEXT -1 | ||||
| BEGIN | ||||
|   PROMPT 1 9 "@bCommesse/CdC da pareggiare" | ||||
| END | ||||
| 
 | ||||
| SPREADSHEET F_RIGHE -1 -1 | ||||
| BEGIN | ||||
|   PROMPT 1 10 "" | ||||
|   ITEM "Cms 1" | ||||
|   ITEM "Cms 2" | ||||
|   ITEM "Cms 3" | ||||
|   ITEM "Cms 4" | ||||
|   ITEM "Cms 5" | ||||
|   ITEM "Cms 6" | ||||
|   ITEM "Cms 7" | ||||
|   ITEM "Cms 8" | ||||
|   ITEM "Cms 9" | ||||
|   ITEM "Cms 10" | ||||
|   ITEM "Cms 11" | ||||
|   ITEM "Cms 12" | ||||
|   ITEM "Causale" | ||||
|   ITEM "Descrizione@50" | ||||
| END | ||||
|    | ||||
| ENDPAGE | ||||
| 
 | ||||
| ENDMASK | ||||
| 
 | ||||
| PAGE "Riga Commesse/CdC da pareggiare" -1 -1 78 15 | ||||
| 
 | ||||
| STRING F_CODCAUS 3 | ||||
| BEGIN | ||||
|   PROMPT 1 0 "Causale  " | ||||
|   USE LF_CAUSALI SELECT MOVIND!="" | ||||
|   INPUT CODCAUS F_CODCAUS | ||||
|   DISPLAY "Codice" CODCAUS | ||||
|   DISPLAY "Descrizione@50" DESCR | ||||
|   OUTPUT F_CODCAUS CODCAUS | ||||
|   OUTPUT F_DESCAUS DESCR | ||||
|   CHECKTYPE NORMAL | ||||
|   ADD RUN cg0 -4 | ||||
|   FLAGS "U" | ||||
| END | ||||
| 
 | ||||
| STRING F_DESCAUS 50 | ||||
| BEGIN | ||||
|   PROMPT 23 0 "" | ||||
|   USE LF_CAUSALI KEY 2 SELECT MOVIND!="" | ||||
|   INPUT DESCR F_DESCAUS | ||||
|   DISPLAY "Descrizione@50" DESCR | ||||
|   DISPLAY "Codice" CODCAUS | ||||
|   COPY OUTPUT F_CODCAUS | ||||
|   ADD RUN cg0 -4 | ||||
| END | ||||
| 
 | ||||
| //Non cancellare GROUP 1 dai 12 campi successivi, pena la comparsa di campi inutili e perniciosi nella | ||||
| //maschera di riga | ||||
| STRING S_CDC1 20 | ||||
| BEGIN | ||||
|   PROMPT 1 2 "Cms1 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC2 20 | ||||
| BEGIN | ||||
|   PROMPT 1 3 "Cms2 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC3 20 | ||||
| BEGIN | ||||
|   PROMPT 1 4 "Cms3 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC4 20 | ||||
| BEGIN | ||||
|   PROMPT 1 5 "Cms4 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC5 20 | ||||
| BEGIN | ||||
|   PROMPT 1 6 "Cms5 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC6 20 | ||||
| BEGIN | ||||
|   PROMPT 1 7 "Cms6 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC7 20 | ||||
| BEGIN | ||||
|   PROMPT 1 8 "Cms7 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC8 20 | ||||
| BEGIN | ||||
|   PROMPT 1 9 "Cms8 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC9 20 | ||||
| BEGIN | ||||
|   PROMPT 1 10 "Cms9 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC10 20 | ||||
| BEGIN | ||||
|   PROMPT 1 11 "Cms10 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC11 20 | ||||
| BEGIN | ||||
|   PROMPT 1 12 "Cms11 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| STRING S_CDC12 20 | ||||
| BEGIN | ||||
|   PROMPT 1 13 "Cms12 " | ||||
|   FLAGS "B" | ||||
|   GROUP 1 | ||||
| END | ||||
| 
 | ||||
| BUTTON DLG_OK 10 2 | ||||
| BEGIN | ||||
|   PROMPT -13 -1 "" | ||||
| END | ||||
| 
 | ||||
| BUTTON DLG_DELREC 10 2 | ||||
| BEGIN | ||||
|   PROMPT -23 -1 "" | ||||
| END | ||||
| 
 | ||||
| BUTTON DLG_CANCEL 10 2 | ||||
| BEGIN | ||||
|   PROMPT -33 -1 "" | ||||
| END | ||||
| 
 | ||||
| ENDPAGE | ||||
| 
 | ||||
| ENDMASK | ||||
|  | ||||
							
								
								
									
										55
									
								
								ca/cacnv.cpp
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								ca/cacnv.cpp
									
									
									
									
									
								
							| @ -471,31 +471,7 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss | ||||
|     //Per prima cosa crea l'array delle righe di ripartizione con questo gr/co/stc/annoes
 | ||||
| 		const int annoes = mov_head.get_int(MOV_ANNOES); | ||||
|      | ||||
|     if (ca_config().get_bool("UsePdcc"))  //solo se in CA si usa il piano dei conti contabile..
 | ||||
|     {                                       //..e' possibile costruire la riga movimento
 | ||||
|       //Compila la riga del movimentodi analitica
 | ||||
|       TRectype& analriga = analmov.new_row(); | ||||
| 
 | ||||
|       analriga.put(RMOVANA_SEZIONE, importo.sezione()); | ||||
|       analriga.put(RMOVANA_IMPORTO, importo.valore()); | ||||
|       analriga.put(RMOVANA_DESCR, importo.descrizione()); | ||||
| 
 | ||||
|       analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES)); | ||||
|       analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG)); | ||||
| 
 | ||||
|       analriga.put(RMOVANA_CODCMS, chiave.get(0)); | ||||
|       analriga.put(RMOVANA_CODFASE, chiave.get(1)); | ||||
| 
 | ||||
|       TString16 codconto; | ||||
|       codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto); | ||||
|       analriga.put(RMOVANA_CODCONTO, codconto); | ||||
| 
 | ||||
|       //controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi
 | ||||
|       check_phase(analriga); | ||||
|     } | ||||
| 		else | ||||
| 		{ | ||||
| 			const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(zio, annoes, ' ', 'I'); | ||||
|     const TAnal_ripartizioni_batch& rrip = _cache_rip.righe_interattive(zio, annoes); | ||||
| 
 | ||||
|     const int righe_ripartizione = rrip.rows(); | ||||
|     const bool ripartisci = righe_ripartizione > 0; | ||||
| @ -534,8 +510,33 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss | ||||
|         check_phase(analriga); | ||||
|       } | ||||
|     } | ||||
| 			else | ||||
| 				error_box(TR("Manca la ripartizione di conversione del conto : %d %d %ld"), zio.gruppo(), zio.conto(), zio.sottoconto()); | ||||
|     else  //nessuna riga ripartizione -> da 1 riga movimento CG ad 1 riga movimento CA
 | ||||
|     { | ||||
|       if (ca_config().get_bool("UsePdcc"))  //solo se in CA si usa il piano dei conti contabile..
 | ||||
|       {                                       //..e' possibile costruire la riga movimento
 | ||||
|         //Compila la riga del movimentodi analitica
 | ||||
|         TRectype& analriga = analmov.new_row(); | ||||
| 
 | ||||
|         analriga.put(RMOVANA_SEZIONE, importo.sezione()); | ||||
|         analriga.put(RMOVANA_IMPORTO, importo.valore()); | ||||
|         analriga.put(RMOVANA_DESCR, importo.descrizione()); | ||||
| 
 | ||||
|         analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES)); | ||||
|         analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG)); | ||||
| 
 | ||||
|         analriga.put(RMOVANA_CODCMS, chiave.get(0)); | ||||
|         analriga.put(RMOVANA_CODFASE, chiave.get(1)); | ||||
| 
 | ||||
|         TString16 codconto; | ||||
|         codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto); | ||||
|         analriga.put(RMOVANA_CODCONTO, codconto); | ||||
| 
 | ||||
|         //controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi
 | ||||
|         check_phase(analriga); | ||||
|       } | ||||
|       else  //qui va aggiunta la lista dei conti che non hanno ripartizione quando NON si usa il..
 | ||||
|             //..piano dei conti contabile in analitica
 | ||||
|         error_box(TR("Manca la ripartizione di un conto")); | ||||
|     } | ||||
|   } //end FOR_EACH..
 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										128
									
								
								ca/calib01.cpp
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								ca/calib01.cpp
									
									
									
									
									
								
							| @ -1521,6 +1521,21 @@ void TAnal_mov::zero(char c) | ||||
| 	kill_saldi(); | ||||
| } | ||||
| 
 | ||||
| void TAnal_mov::update_totdoc() | ||||
| { | ||||
|   TImporto totdoc; | ||||
|   for (int i = rows(); i > 0; i--) | ||||
|   { | ||||
|     const TRectype& riga = body().row(i);  | ||||
|     TImporto imp_riga(riga.get_char(RMOVANA_SEZIONE), riga.get_real(RMOVANA_IMPORTO)); | ||||
|     totdoc += imp_riga; | ||||
|   } | ||||
|   totdoc.normalize(); | ||||
| 
 | ||||
|   put(MOVANA_TOTDOC, totdoc.valore()); | ||||
|   put(MOVANA_SEZIONE, totdoc.sezione()); | ||||
| } | ||||
| 
 | ||||
| TAnal_mov::TAnal_mov(long numreg) : TMultiple_rectype(LF_MOVANA) | ||||
| { | ||||
|   add_file(LF_RMOVANA, RMOVANA_NUMRIG); | ||||
| @ -1564,7 +1579,12 @@ int TAnal_ripartizioni_batch::indbil() const | ||||
|   return head().get_int(RIP_INDBIL);  | ||||
| } | ||||
| 
 | ||||
| int TAnal_ripartizioni_batch::read (const char* codice, char tiporip) | ||||
| char TAnal_ripartizioni_batch::tiporip() const | ||||
| { | ||||
|   return head().get_char(RIP_TIPO); | ||||
| } | ||||
| 
 | ||||
| int TAnal_ripartizioni_batch::read (const char tiporip, const char* codice) | ||||
| { | ||||
|   TLocalisamfile rip(LF_RIP); | ||||
|   _rip.put(RIP_TIPO, tiporip); //solo tipi batch!
 | ||||
| @ -1573,7 +1593,7 @@ int TAnal_ripartizioni_batch::read (const char* codice, char tiporip) | ||||
|   if (err == NOERR) | ||||
|   { | ||||
|     TRectype rrip(LF_RRIP); | ||||
|     rrip.put(RRIP_TIPO, 'B'); | ||||
|     rrip.put(RRIP_TIPO, tiporip); | ||||
|     rrip.put(RRIP_CODICE, codice); | ||||
|     TRecord_array::read(rrip); | ||||
|   } | ||||
| @ -1583,7 +1603,7 @@ int TAnal_ripartizioni_batch::read (const char* codice, char tiporip) | ||||
| int TAnal_ripartizioni_batch::read_rip_4(TLocalisamfile& rip, const char* codcosto, const char* commessa,  | ||||
|                                          const char* fase, const int annoes, const int indbil, const int classe_mov) const | ||||
| { | ||||
|   rip.put(RIP_TIPO, "B"); //solo tipi batch!
 | ||||
|   rip.put(RIP_TIPO, "B"); //solo tipi batch, unici per chiave cdc/cms/fase
 | ||||
|   rip.put(RIP_CODCOSTO, codcosto); | ||||
|   rip.put(RIP_CODCMS, commessa); | ||||
|   rip.put(RIP_CODFASE, fase); | ||||
| @ -1628,14 +1648,14 @@ int TAnal_ripartizioni_batch::read (const char* codcosto, const char* commessa, | ||||
|   } | ||||
| 
 | ||||
|   if (err == NOERR) | ||||
|     err = read(rip.get(RIP_CODICE), 'B'); | ||||
|     err = read('B', rip.get(RIP_CODICE)); //per chiave 4 solo tipo B (batch)
 | ||||
|   return err; | ||||
| } | ||||
| 
 | ||||
| int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const int gr, const int co, const long sot,  | ||||
|                                     const int annoes, const int indbil, const int classe_mov, char tiporip) const | ||||
| int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const char tiporip, const int gr, const int co, const long sot,  | ||||
|                                     const int annoes, const int indbil, const int classe_mov) const | ||||
| { | ||||
|   rip.put(RIP_TIPO, tiporip); //solo tipi batch!
 | ||||
|   rip.put(RIP_TIPO, tiporip); //tipo 'P' oppure tipo 'I', che sono quelli che vanno per conto
 | ||||
|   rip.put(RIP_GRUPPO, gr); | ||||
|   rip.put(RIP_CONTO, co); | ||||
|   rip.put(RIP_SOTTOCONTO, sot); | ||||
| @ -1645,43 +1665,43 @@ int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const int gr, cons | ||||
| 	return rip.read(); | ||||
| } | ||||
| 
 | ||||
| int TAnal_ripartizioni_batch::read (const int gr, const int co, const long sot,  | ||||
|                                     const int annoes, const int indbil, const int classe_mov, char tiporip) | ||||
| int TAnal_ripartizioni_batch::read (const char tiporip, const int gr, const int co, const long sot,  | ||||
|                                     const int annoes, const int indbil, const int classe_mov) | ||||
| { | ||||
|   CHECKD(classe_mov > 0, "Classe movimento non valida ", classe_mov); | ||||
|   TLocalisamfile rip(LF_RIP); | ||||
|   rip.setkey(3); | ||||
| 
 | ||||
|   int err = read_rip_3(rip, gr, co, sot, annoes, indbil, classe_mov, tiporip); | ||||
|   int err = read_rip_3(rip, tiporip, gr, co, sot, annoes, indbil, classe_mov); | ||||
|   if (err != NOERR) | ||||
|      err = read_rip_3(rip, gr, co, sot, annoes, indbil, 0, tiporip); | ||||
|      err = read_rip_3(rip, tiporip, gr, co, sot, annoes, indbil, 0); | ||||
| 
 | ||||
|   //la put va rifatta perche' potrebbe essersi spostato al record successivo!!!
 | ||||
|   //se fallisce il primo tentativo prova con lo stesso anno e indbil=0
 | ||||
|   if (err != NOERR && indbil != 0) | ||||
|   { | ||||
|     err = read_rip_3(rip, gr, co, sot, annoes, 0, classe_mov, tiporip); | ||||
|     err = read_rip_3(rip, tiporip, gr, co, sot, annoes, 0, classe_mov); | ||||
|     if (err != NOERR) | ||||
|       err = read_rip_3(rip, gr, co, sot, annoes, 0, 0, tiporip); | ||||
|       err = read_rip_3(rip, tiporip, gr, co, sot, annoes, 0, 0); | ||||
|   } | ||||
|   //se fallisce ancora riprova con anno=0 e lo stesso indbil
 | ||||
|   if (err != NOERR && annoes != 0) | ||||
|   { | ||||
|     err = read_rip_3(rip, gr, co, sot, 0, indbil, classe_mov, tiporip); | ||||
|     err = read_rip_3(rip, tiporip, gr, co, sot, 0, indbil, classe_mov); | ||||
|     if (err != NOERR) | ||||
|       err = read_rip_3(rip, gr, co, sot, 0, indbil, 0, tiporip); | ||||
|       err = read_rip_3(rip, tiporip, gr, co, sot, 0, indbil, 0); | ||||
|   | ||||
|     //estremo tentativo con annoes e indbil = 0
 | ||||
|     if (err != NOERR && indbil != 0) | ||||
|     { | ||||
|       err = read_rip_3(rip, gr, co, sot, 0, 0, classe_mov, tiporip); | ||||
|       err = read_rip_3(rip, tiporip, gr, co, sot, 0, 0, classe_mov); | ||||
|       if (err != NOERR) | ||||
|         err = read_rip_3(rip, gr, co, sot, 0, 0, 0, tiporip); | ||||
|         err = read_rip_3(rip, tiporip, gr, co, sot, 0, 0, 0); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   if (err == NOERR) | ||||
|     err = read(rip.get(RIP_CODICE), tiporip); | ||||
|     err = read(tiporip, rip.get(RIP_CODICE)); //per chiave 3 sia tiporip=P che tiporip=B
 | ||||
|   return err; | ||||
| } | ||||
| 
 | ||||
| @ -1700,7 +1720,9 @@ TObject* TCache_ripartizioni::key2obj(const char* key) | ||||
| 
 | ||||
|   TAnal_ripartizioni_batch* rip = new TAnal_ripartizioni_batch; | ||||
|   | ||||
|   if (nkey == 3) | ||||
|   switch (nkey) | ||||
|   { | ||||
|   case 3: | ||||
|     { | ||||
|       const int gruppo = parametro.get_int(1); | ||||
|       const int conto = parametro.get_int(2); | ||||
| @ -1708,11 +1730,25 @@ TObject* TCache_ripartizioni::key2obj(const char* key) | ||||
|       const int anno = parametro.get_int(4); | ||||
|       const int indbil = parametro.get_int(5); | ||||
|       const int classe_mov = parametro.get_int(6); | ||||
| 		const char tiporip = parametro.get_char(7); | ||||
| 
 | ||||
|     rip->read(gruppo, conto, sottoconto, anno, indbil, classe_mov, tiporip); | ||||
|       //solo i movimenti a pareggio hanno chiave 3
 | ||||
|       rip->read('P', gruppo, conto, sottoconto, anno, indbil, classe_mov); | ||||
|     } | ||||
|   else  //chiave 4
 | ||||
|     break; | ||||
|   case 5: | ||||
|     { | ||||
|       const int gruppo = parametro.get_int(1); | ||||
|       const int conto = parametro.get_int(2); | ||||
|       const long sottoconto = parametro.get_long(3); | ||||
|       const int anno = parametro.get_int(4); | ||||
|       const int indbil = parametro.get_int(5); | ||||
|       const int classe_mov = parametro.get_int(6); | ||||
| 
 | ||||
|       //solo i movimenti interattivi e di conversione hanno chiave 5
 | ||||
|       rip->read('I', gruppo, conto, sottoconto, anno, indbil, 1); | ||||
|     } | ||||
|     break; | ||||
|   default:  //chiave 4: normali ripartizioni batch
 | ||||
|     { | ||||
|       const TString80 codcosto = parametro.get(1); | ||||
|       const TString80 commessa = parametro.get(2); | ||||
| @ -1723,7 +1759,8 @@ TObject* TCache_ripartizioni::key2obj(const char* key) | ||||
| 
 | ||||
|       rip->read(codcosto, commessa, fase, anno, indbil, classe_mov); | ||||
|     } | ||||
| 
 | ||||
|     break; | ||||
|   } | ||||
| 	if (rip->head().get_int(RIP_TIPORIP) == 1) | ||||
| 	{ | ||||
| 		bool some_value = false; | ||||
| @ -1787,7 +1824,7 @@ const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const char* costo, co | ||||
|   return *(const TAnal_ripartizioni_batch*)objptr(parametro); | ||||
| } | ||||
| 
 | ||||
| const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes, const char tipomov, char tiporip) | ||||
| const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes, const char tipomov) | ||||
| { | ||||
|   //classi di movimento: se preventivi 2, se normali 1
 | ||||
|   int classe_movimento; | ||||
| @ -1798,7 +1835,44 @@ const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, co | ||||
| 
 | ||||
|   TToken_string parametro; | ||||
|   parametro << "3|" << bill.gruppo() << '|' << bill.conto() << '|' << bill.sottoconto() << '|'  | ||||
|             << annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento << '|' << tiporip;  //per chiave 3
 | ||||
|             << annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento;  //per chiave 3
 | ||||
|   return *(const TAnal_ripartizioni_batch*)objptr(parametro); | ||||
| } | ||||
| 
 | ||||
| const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TAnal_bill& bill, const int annoes, const int indbil,  | ||||
|                                                            const char tipomov) | ||||
| { | ||||
|   TConfig& config = ca_config(); | ||||
|   const bool use_pdcc = config.get_bool("UsePdcc");    //usa il piano dei conti contabile
 | ||||
|   if (use_pdcc) | ||||
|   { | ||||
|     const TString& contone = bill.conto(); | ||||
|     const int gr = atoi(contone.mid(0,3)); | ||||
|     const int co = atoi(contone.mid(3,3)); | ||||
|     const long so = atol(contone.mid(6,6)); | ||||
|     const TBill zio(gr, co, so); | ||||
|     const TAnal_ripartizioni_batch& rb = righe(zio, annoes, tipomov); | ||||
|     //ha trovato una ripartizione?
 | ||||
|     if (rb.rows() > 0) | ||||
|       return rb; | ||||
| 
 | ||||
|   } | ||||
|   //se non riesce a trovare una ripartizione per conto (chiave 3, tipo 'P') prova con la chiave 4 (cdc/cms/fase, tipo 'B')
 | ||||
|   return righe(bill.costo(), bill.commessa(), bill.fase(), annoes, indbil, tipomov); | ||||
| } | ||||
| 
 | ||||
| const TAnal_ripartizioni_batch& TCache_ripartizioni::righe_interattive(const TBill& bill, const int annoes, const char tipomov) | ||||
| { | ||||
|     //classi di movimento: se preventivi 2, se normali 1
 | ||||
|   int classe_movimento; | ||||
|   if (tipomov == 'P' || tipomov == 'V') | ||||
|     classe_movimento = 2; | ||||
|   else | ||||
|     classe_movimento = 1; //sempre questo per cacnv
 | ||||
| 
 | ||||
|   TToken_string parametro; | ||||
|   parametro << "5|" << bill.gruppo() << '|' << bill.conto() << '|' << bill.sottoconto() << '|'  | ||||
|             << annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento;  //per chiave 5
 | ||||
|   return *(const TAnal_ripartizioni_batch*)objptr(parametro); | ||||
| } | ||||
| 
 | ||||
| @ -1847,6 +1921,10 @@ bool ca_implode_rows(const TRecord_array& input_rows, TRecord_array& compact_row | ||||
|     //se esiste almeno un campo origine compilato puo' implodere, senno' lascia perdere
 | ||||
|     if (ca_ori_present(rec)) | ||||
|     { | ||||
|       //controlla se e' un pareggio e non una ripartizione
 | ||||
|       if (rec.get(RMOVANA_CODCONTORI).blank()) | ||||
|         continue; | ||||
| 
 | ||||
|       int i = 0; | ||||
|       for (i = compact_rows.rows(); i > 0; i--) //giro sulle righe gia' compattate per scoprire se
 | ||||
|       {                                         //il nostro record esiste gia' o e' da aggiungere
 | ||||
|  | ||||
							
								
								
									
										20
									
								
								ca/calib01.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								ca/calib01.h
									
									
									
									
									
								
							| @ -157,6 +157,7 @@ public: | ||||
| 
 | ||||
| public: | ||||
|   int read(long numreg, word lockop = _nolock); // Funzione read di comodo
 | ||||
|   void update_totdoc(); | ||||
|   TAnal_mov(long numreg = 0); | ||||
| 	TAnal_mov(const TRectype& rec);	//accetta LF_MOVANA,LF_RMOVANA,LF_MOV
 | ||||
| }; | ||||
| @ -164,21 +165,24 @@ public: | ||||
| ///////////////////////////////////////////////////////////
 | ||||
| //  TAnal_ripartizioni_batch (ahi!)
 | ||||
| ///////////////////////////////////////////////////////////
 | ||||
| class TAnal_bill; | ||||
| 
 | ||||
| class TAnal_ripartizioni_batch : public TRecord_array | ||||
| { | ||||
|   TRectype _rip; | ||||
| private: | ||||
|   int read_rip_3(TLocalisamfile& rip, const int gr, const int co, const long sot,  | ||||
|                  const int annoes, const int indbil, const int classe_mov, char tiporip) const; | ||||
|   int read_rip_3(TLocalisamfile& rip, const char tiporip, const int gr, const int co, const long sot,  | ||||
|                  const int annoes, const int indbil, const int classe_mov) const; | ||||
|   int read_rip_4(TLocalisamfile& rip, const char* codcosto, const char* commessa, const char* fase, | ||||
|                  const int annoes, const int indbil, const int classe_mov) const; | ||||
| public: | ||||
|   const TRectype& head() const { return _rip; } | ||||
|   int indbil() const; | ||||
|   int read (const char* codice, char tiporip); | ||||
|   char tiporip() const; | ||||
|   int read (const char tiporip, const char* codice); | ||||
|   int read (const char* codcosto, const char* commessa, const char* fase, const int annoes, const int indbil, const int classe_mov); | ||||
|   int read (const int gr, const int co, const long sot, const int annoes, const int indbil, const int classe_mov, char tiporip); | ||||
|   int read (const char tiporip, const int gr, const int co, const long sot, const int annoes, const int indbil, const int classe_mov); | ||||
|    | ||||
|   TAnal_ripartizioni_batch(); | ||||
| }; | ||||
| 
 | ||||
| @ -196,9 +200,15 @@ protected: | ||||
| 
 | ||||
| public: | ||||
| 	void set_esercizio(const int codes); | ||||
|   //batch
 | ||||
|   const TAnal_ripartizioni_batch& righe(const char* costo, const char* commessa, const char* fase, | ||||
|                                         const int annoes, const int indbil, const char tipomov); | ||||
|   const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes, const char tipomov, char tiporip = 'B'); | ||||
|   //pareggio
 | ||||
|   const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes, const char tipomov); | ||||
|   //batch
 | ||||
|   const TAnal_ripartizioni_batch& righe(const TAnal_bill& bill, const int annoes, const int indbil, const char tipomov); | ||||
|   //interattive per conversione e contabilizzazione (usate da cacnv e da contabilizzazione analitica docs)
 | ||||
|   const TAnal_ripartizioni_batch& righe_interattive(const TBill& bill, const int annoes, const char tipomov = ' '); | ||||
|    | ||||
|     TCache_ripartizioni(); | ||||
| }; | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| 149 | ||||
| 13 | ||||
| TIPO|1|1|0|Tipo Ripartizione (<I>nterattiva, <B>atch) | ||||
| TIPO|1|1|0|Tipo Ripartizione (<I>nterattiva, <B>atch, <P>areggio) | ||||
| CODICE|1|8|0|Codice ripartizione | ||||
| GRUPPO|2|3|0|Gruppo | ||||
| CONTO|2|3|0|Conto | ||||
|  | ||||
| @ -351,7 +351,7 @@ bool TContabilizzazione_analitica::find_conti_iva_indetraibile(const TRiga_docum | ||||
|   else | ||||
| 	{ | ||||
|     // Cerca la ripartizione del conto
 | ||||
| 		const TAnal_ripartizioni_batch& rip = _rip.righe(bill, annoes, tipomov); | ||||
| 		const TAnal_ripartizioni_batch& rip = _rip.righe_interattive(bill, annoes, tipomov); | ||||
| 		for (int i = 1; i <= rip.rows(); i++) | ||||
| 		{ | ||||
| 			const TRectype& rigarip = rip.row(i); | ||||
| @ -438,7 +438,7 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri | ||||
|   if (contanal.blank())  // Non ho trovato il conto in anagrafica ...
 | ||||
|   {  | ||||
|     // Cerca la ripartizione del conto
 | ||||
|     const TAnal_ripartizioni_batch& rip = _rip.righe(bill, annoes, tipomov, 'I'); | ||||
|     const TAnal_ripartizioni_batch& rip = _rip.righe_interattive(bill, annoes, tipomov); | ||||
|     TToken_string conto; | ||||
|     for (int i = 1; i <= rip.rows(); i++) | ||||
|     { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user