#include #include #include #include #include #include #include #include #include "velib01.h" #include "..\mg\mglib01.h" #include "ve2400.h" // maschera dell'anagrafica di magazzino class TMask_anamag: public TMask { // TLocalisamfile *_codcorr; // file di accesso ai codici corrispondenti // TLocalisamfile *_deslin; // file di accesso alle descrizioni in lingua // TLocalisamfile *_umart; // file di accesso alle unità di misura // TLocalisamfile *_giacenze; // file di accesso alle giacenze TRelation * _rel; // relazione principale TRecord_array *_linee_rec_giac; // record array di accoppiamento delle giacenze con lo sheet TMag_livelli * livelli_giac;// oggetto handler per i livelli di giacenza TMag_livelli * livelli_art;// oggetto handler per i livelli di anagraficca TMetachar * metac; int last_annogiac; int last_annosto; static bool handle_codice(TMask_field &, KEY); // handler del campo codice articolo static bool handle_livart(TMask_field &, KEY); // handler dei campi codice articolo (livelli) static bool handle_anno(TMask_field &, KEY); // handler del campo anno delle giacenze static bool handle_stoanno(TMask_field &, KEY); // handler del campo anno delle giacenze static bool handle_sheet_um(TMask_field &, KEY); // handler dello sheet delle unità di misura static bool notify_sheet_um(TSheet_field & s, int r, KEY k); // handler dello sheet delle unità di misura static bool handle_sheet_deslin(TMask_field &, KEY); // handler dello sheet delle descrizioni in lingua static bool handle_sheet_cod(TMask_field &, KEY); // handler dello sheet dei codici alternativi static bool handle_sheetgiac(TMask_field &, KEY); // handler dello sheet giacenze static bool handle_sheetstomag(TMask_field &, KEY); // handler dello sheet storico giacenze static bool handle_sheet_um_um(TMask_field &, KEY); // handler del campo UM dello sheet delle unità di misura static bool handle_sheet_um_price(TMask_field &, KEY); // handler del campo PREZZO e PREZZO_LORDO dello sheet delle unità di misura public: TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv); virtual ~TMask_anamag(); static void sheetgiac_get(TSheet_field &fld_righe, int item); static void sheetgiac_put(TSheet_field &fld_righe, int item); }; // costruttore della maschera anagrafica di magazzino TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv) : TMask("ve2400") { _rel=rel; /* _umart= new TLocalisamfile(LF_UMART); // apre i file per disporre dei tracciati record _deslin= new TLocalisamfile(LF_DESLIN); _codcorr= new TLocalisamfile(LF_CODCORR); _giacenze= new TLocalisamfile(LF_MAG); _linee_rec_giac= new TRecord_array(LF_MAG, "NRIGA");// alloca i record */ // imposta il riconoscimento dei caratteri del formato dell'ultima parte dell'articolo TString80 format(""); TTable _tabfca("FCA"); if (_tabfca.last()==NOERR) { format = _tabfca.get("S1"); } metac = new TMetachar(format); // imposta il puntatore al gestore livelli giacenze livelli_giac= new TMag_livelli("FCG"); livelli_art= new TMag_livelli("FCA"); // imposta il valore dell'anno per le giacenze last_annogiac=-1; last_annosto=-1; set_handler(F_ANNO, handle_anno); set_handler(F_STOANNO, handle_stoanno); set_handler(F_SHEETUM, handle_sheet_um); ((TSheet_field &)field(F_SHEETUM)).set_notify(notify_sheet_um); set_handler(F_SHEETDESLIN, handle_sheet_deslin); set_handler(F_SHEETCOD, handle_sheet_cod); set_handler(F_SHEETGIAC, handle_sheetgiac); ((TSheet_field &)field(F_SHEETGIAC)).set_userget(sheetgiac_get); ((TSheet_field &)field(F_SHEETGIAC)).set_userput(sheetgiac_put); set_handler(F_SHEETSTOMAG, handle_sheetstomag); TSheet_field &f= (TSheet_field &)field(F_SHEETUM); TMask &fm= f.sheet_mask(); fm.set_handler(FS_CODUM, handle_sheet_um_um); fm.set_handler(FS_PREZZO, handle_sheet_um_price); fm.set_handler(FS_PREZZO_LORDO, handle_sheet_um_price); // Abilita la pagina delle giacenze if (enable_mag) { enable_page(4,TRUE); // setta i campi della maschera // per la pagina giacenze TSheet_field &fld_giac= (TSheet_field &)field(F_SHEETGIAC); // disabilita le colonne quando non sono utilizzati i livelli di giacenza for (int i=0; i<4; i++) { if (livelli_giac->enabled(1+i)) { fld_giac.sheet_mask().field(F_LIV1+i).show(); fld_giac.set_column_header(fld_giac.cid2index(F_LIV1+i),livelli_giac->name(1+i)); fld_giac.sheet_mask().field(F_LIV1+i).set_prompt(livelli_giac->name(1+i)); } else { fld_giac.sheet_mask().field(F_LIV1+i).hide(); fld_giac.delete_column(fld_giac.cid2index(F_LIV1+i)); } } // disabilita la colonna numero distinte if (0) { fld_giac.delete_column(fld_giac.cid2index(F_NDIST)); fld_giac.sheet_mask().field(F_NDIST).enable(FALSE); } // abilita la gestione delle ubicazioni (manuale/su tabella) if (1) { fld_giac.sheet_mask().field(F_UBICAZ).show(FALSE); fld_giac.sheet_mask().field(F_UBICAZD).show(FALSE); fld_giac.sheet_mask().field(F_UBICAZ2).show(TRUE); } else { fld_giac.sheet_mask().field(F_UBICAZ).show(TRUE); fld_giac.sheet_mask().field(F_UBICAZD).show(TRUE); fld_giac.sheet_mask().field(F_UBICAZ2).show(FALSE); } } else { enable_page(4,FALSE); } // abilita la visualizzazione dei campi distinti per i livelli articolo if (enable_artliv) { field(F_CODART).hide(); field(F_GCA).hide(); for (int i=0; i<3; i++) { // versione con campi predefiniti sulla maschera if (livelli_art->enabled(1+i)) { field(F_LIVART1+i).show(); field(F_LIVART1+livelli_giac->last_level()-1).check_type(1+i==livelli_art->last_level() ? CHECK_NONE : CHECK_REQUIRED); ((TEdit_field&)field(F_LIVART1+livelli_giac->last_level()-1)).set_width(livelli_art->code_lenght(1+i)); set_handler(F_LIVART1+i, handle_livart); } else { field(F_LIVART1+i).hide(); field(F_LIVART1+livelli_giac->last_level()-1).check_type(CHECK_NONE); } } } else { if (livelli_art->enabled()) { set_handler(F_CODART, handle_codice); for (int i=0; i<9; i++) field(F_LIVART1+i).hide(); } else if (!livelli_art->enabled(2)) // .. nasconde il pulsante dei livelli field(F_GCA).hide(); } } TMask_anamag::~TMask_anamag() { /* delete _linee_rec_giac; delete _giacenze; delete _codcorr; delete _deslin; delete _umart; */ delete livelli_art; delete livelli_giac; } // HANDLER DEL CODICE: controlla la corrispondenza al formato previsto bool TMask_anamag::handle_codice(TMask_field &fld, KEY k) { TMask_anamag &mask=(TMask_anamag &)fld.mask(); TString codepart; if (k == K_TAB && !fld.get().blank()) { int l; TTable _tabgrp("GCA"); for (l=1; llast_level(); l++) { codepart=""; codepart << l << mask.livelli_art->unpack_grpcode(fld.get(),l); _tabgrp.zero(); _tabgrp.put("CODTAB", codepart); if (_tabgrp.read()!=NOERR) { fld.error_box("'%s' non appartiene a '%s'",(const char *)codepart.mid(1),(const char *)mask.livelli_art->name(l)); return(FALSE); } } codepart=mask.livelli_art->unpack_grpcode(fld.get(),mask.livelli_art->last_level()); if (codepart.blank()) { fld.error_box("Il codice articolo non può essere vuoto"); return(FALSE); } if (!mask.metac->recognized(codepart)) { fld.error_box("Il codice articolo non corrisponde al formato previsto \n('%s' ?? '%s')",(const char *)codepart,(const char *)mask.metac->language()); return(FALSE); } } return(TRUE); } // HANDLER DEL CODICE: controlla la corrispondenza al formato previsto bool TMask_anamag::handle_livart(TMask_field &fld, KEY k) { if (k == K_TAB && fld.focusdirty()) { TMask_anamag & m=(TMask_anamag & )fld.mask(); TString s(m.field(F_CODART).get()); m.livelli_art->pack_grpcode(s,fld.get(),fld.dlg()-F_LIVART1+1); m.field(F_CODART).set(s); if (fld.dlg()-F_LIVART1+1==m.livelli_art->last_level() && fld.get().blank()) { fld.error_box("Il codice articolo non può essere lasciato in bianco"); return FALSE; } } return TRUE; } bool TMask_anamag::handle_anno(TMask_field &fld, KEY k) { TMask_anamag &mask=(TMask_anamag &)fld.mask(); if (k == K_TAB) { TSheet_field &fld_giac= (TSheet_field &)mask.field(F_SHEETGIAC); if (mask.last_annogiac>0 && mask.last_annogiac!=fld.mask().get_int(F_ANNO)) { if (fld_giac.dirty() && handle_sheetgiac(fld_giac,K_ENTER)) { if (fld.yesno_box("Vuoi salvare le righe di giacenza per l'anno %d",mask.last_annogiac )) { fld_giac.autosave(*mask._rel); fld_giac.record()->rewrite(); } } mask.field(F_ANNORIF).set(fld.get()); // rilegge le giacenze relative a quell'anno ed aggiorna il layout fld_giac.record()->read(*fld_giac.putkey(*mask._rel)); fld_giac.autoload(*mask._rel); fld_giac.force_update(); } mask.last_annogiac=mask.get_int(F_ANNO); } return(TRUE); } bool TMask_anamag::handle_stoanno(TMask_field &fld, KEY k) { TMask_anamag &mask=(TMask_anamag &)fld.mask(); if (k == K_TAB) { TSheet_field &fld_stomag= (TSheet_field &)fld.mask().field(F_SHEETSTOMAG); if (mask.last_annosto>0 && mask.last_annosto!=fld.mask().get_int(F_STOANNO)) { if (fld.mask().field(F_SHEETSTOMAG).dirty() && handle_sheetstomag(fld_stomag,K_ENTER)) { if (fld.yesno_box("Vuoi salvare le righe di storico per l'anno %d",mask.last_annosto)) { fld_stomag.autosave(*mask._rel); fld_stomag.record()->write(TRUE); } } mask.field(F_STOANNORIF).set(fld.get()); // rilegge le giacenze relative a quell'anno ed aggiorna il layout fld_stomag.record()->read(*fld_stomag.putkey(*mask._rel)); fld_stomag.autoload(*mask._rel); fld_stomag.force_update(); } mask.last_annosto=mask.get_int(F_STOANNO); } return(TRUE); } bool TMask_anamag::handle_sheet_um(TMask_field &fld, KEY k) { if (k == K_ENTER) { TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente const int items = f.items(); if (items > 0) { TAssoc_array v; // istanzia l'hash table per il controllo di univocità for (int i= 0; i 0); TMask_field &mf=s.sheet_mask().field(DLG_DELREC); return TRUE; } bool TMask_anamag::handle_sheet_deslin(TMask_field &fld, KEY k) { if (k == K_ENTER) { TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente const int items = f.items(); if (items > 0) { TAssoc_array v; // istanzia l'hash table per il controllo di univocità for (int i= 0; i < items; i++) { const TString16 codlin(f.cell(i,0)); if (codlin.empty()) return error_box("I codici lingua non possono essere vuoti"); if (v.add(codlin)) return error_box("I codici lingua devono essere diversi tra loro"); // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già } } } return TRUE; } bool TMask_anamag::handle_sheet_cod(TMask_field &fld, KEY k) { if (k==K_ENTER) { TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente const int items = f.items(); if (items > 0) { TMask &m= fld.mask(); // prende la maschere d'origine del campo TAssoc_array v; // istanzia l'hash table per il controllo di univocità v.add(m.get(F_CODART)); // aggiunge all'hash table il codice articolo originale for (int i= 0; i< items; i++) { const TString80 codart(f.cell(i,0)); if (codart.empty()) return error_box("I codici alternativi non possono essere vuoti"); if (v.add(codart)) return error_box("I codici alternativi devono essere diversi tra loro e dal codice dell'articolo"); // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già } } } return TRUE; } bool TMask_anamag::handle_sheetgiac(TMask_field &fld, KEY k) { if (k==K_ENTER) { TSheet_field &f=(TSheet_field &)fld; const int items = f.items(); if (items > 0) { TMask &m= f.mask(); // prende la maschere d'origine del campo TAssoc_array v; // istanzia l'hash table per il controllo di univocità for (int i= 0; i< items; i++) { TString codgiac(f.cell(i,F_CODMAG-FIRST_FIELD)); codgiac << f.cell(i,F_CODDEP-FIRST_FIELD); codgiac << f.cell(i,F_LIV1-FIRST_FIELD); codgiac << f.cell(i,F_LIV2-FIRST_FIELD); codgiac << f.cell(i,F_LIV3-FIRST_FIELD); codgiac << f.cell(i,F_LIV4-FIRST_FIELD); if (codgiac.empty()) return error_box("I codici delle giacenze non possono essere vuoti"); // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già if (v.add(codgiac)) return error_box("Esistono due righe con lo stesso codice di giacenza"); // ordina le righe per livello+codmag } // ordina le righe per livello+codmag // f.rows_array().sort(); } } return TRUE; } bool TMask_anamag::handle_sheetstomag(TMask_field &fld, KEY k) { if (k==K_ENTER) { TSheet_field & f=(TSheet_field &)fld; const int items = f.items(); if (items > 0) { TMask &m= f.mask(); // prende la maschere d'origine del campo TAssoc_array v; // istanzia l'hash table per il controllo di univocità for (int i= 0; i< items; i++) { TString codeser(f.cell(i,F_STOANNOES-FIRST_FIELD)); if (codeser.empty()) return error_box("I codici degli esercizi non possono essere vuoti"); // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già if (v.add(codeser)) return error_box("La composizione delle rimananenze deve far riferimento a esercizi tutti diversi tra loro"); } } } return TRUE; } bool TMask_anamag::handle_sheet_um_um(TMask_field &fld, KEY k) { if (fld.focusdirty() && k == K_TAB) { TMask &m = fld.mask(); // prende la maschera d'origine del campo (maschera dello sheet) const TString16 curr_um(fld.get()); // prende il contenuto del campo corrente (unità di misura corrente) if (curr_um.not_empty()) // se il codice dell'unità di misura è vuoto non viene fatto alcun calcolo { TSheet_field *f= m.get_sheet(); // prende lo sheet d'origine della maschera del campo CHECK(f != NULL, "Il puntatore allo sheet è nullo"); if (f->selected() > 0) { // ALGORITMO DI PRECALCOLO DEL RAPPORTO DELLE UNITA' DI MISURA NELLO SHEET // // SHEET: // ----- // riga u.m. f.c. // 1) KM 1 -> kilometri (you), riferiti al metro (your) con f.c. 1000 (your_fc) // ... ... ... // ...) MM X -> millimetri (me), riferiti al metro (my) con f.c. 0,001 (my_fc) // // se (your==my) allora X=(my_fc/your_fc) ...chiaro, no!? :-) TTable t("%UMS"); real x; // fattore di conversione dell'unità di misura corrente const TString16 first_um(f->row(0).get(0)); // prende l'unità di misura di rapporto (dalla prima linea dello sheet) t.zero(); t.put("CODTAB", curr_um); if (t.read() == NOERR) { const TString16 rif_um(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura corrente x = t.get_real("R10"); // prende il suo fattore di conversione if (rif_um != first_um) { t.zero(); t.put("CODTAB", first_um); if (t.read() == NOERR) { TString16 first_um_rif(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura di rapporto const real first_um_rif_fc(t.get_real("R10")); // prende il suo fattore di conversione if (first_um_rif == rif_um) { x /= first_um_rif_fc; // calcola il rapporto tra i fattori di conversione x.round(5); // arrotonda il risultato a 5 decimali } } } } if (x == ZERO) x = 1.00; m.set(FS_FCUM, x); // il risultato viene scritto nel campo del fattore di conversione } } } return TRUE; } bool TMask_anamag::handle_sheet_um_price(TMask_field &f, KEY k) { if (f.to_check(k,TRUE)) { TMask& m = f.mask(); TString codiva= m.get_sheet()->mask().get(F_CODIVA);// recuper il codice IVA dalla maschera principale real netto = 0.0; real lordo = 0.0; if (f.dlg() == FS_PREZZO) { netto = real(m.get(FS_PREZZO)); lordo = netto2lordo(netto,codiva); m.set(FS_PREZZO_LORDO,lordo.string()); } else { lordo = real(m.get(FS_PREZZO_LORDO)); real prec_lordo = lordo; netto = lordo2netto(lordo,codiva); if (lordo != prec_lordo) { warning_box("Scorporando l'iva dal prezzo lordo si e' dovuto\n" "correggere quest'ultimo a causa di arrotondamenti."); m.set(FS_PREZZO_LORDO,lordo.string()); } m.set(FS_PREZZO,netto.string()); } } return TRUE; } void TMask_anamag::sheetgiac_get(TSheet_field &fld_righe, int item) { TMask_anamag &m=(TMask_anamag &)fld_righe.mask(); // prende il record della riga corrente dal record array TRectype &rec= fld_righe.record()->row(item, TRUE); TToken_string &row= fld_righe.row(item-1); // codici di livello row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,1),fld_righe.cid2index(F_LIV1) ); row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,2),fld_righe.cid2index(F_LIV2) ); row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,3),fld_righe.cid2index(F_LIV3) ); row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,4),fld_righe.cid2index(F_LIV4) ); } // item varies from 1 to items() void TMask_anamag::sheetgiac_put(TSheet_field &fld_righe, int item) { TMask_anamag &m=(TMask_anamag &)fld_righe.mask(); TToken_string &row= fld_righe.row(item-1); TRectype &recrighe= fld_righe.record()->row(item, TRUE); // codici livello if (m.livelli_giac->enabled()) { TString16 packedcode; m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV1)),1); m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV2)),2); m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV3)),3); m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV4)),4); recrighe.put("LIVELLO", packedcode); } } // ****************************** // applicazione class TAnagrafica_magazzino : public TRelation_application { TMask_anamag *_msk; // maschera principale TRelation *_rel; // relazione principale di un solo file (anagrafiche di magazzino) TRecord_array *_linee_rec_um; // record array di accoppiamento delle unità di misura TRecord_array *_linee_rec_deslin; // record array di accoppiamento delle descrizioni in lingua con il primo sheet TRecord_array *_linee_rec_cod; // record array di accoppiamento delle codici corrispondenti con il secondo sheet virtual bool user_create(); virtual bool user_destroy(); virtual TMask *get_mask(int) { return _msk; } virtual bool changing_mask(int) { return FALSE; } virtual TRelation *get_relation() const { return _rel; } virtual void init_insert_mode(TMask &); virtual int read(TMask& m); virtual bool remove(); virtual int write(const TMask& m); virtual int rewrite(const TMask& m); public: TAnagrafica_magazzino() {} virtual ~TAnagrafica_magazzino() {} }; inline TAnagrafica_magazzino& app() { return (TAnagrafica_magazzino&) main_app(); } bool TAnagrafica_magazzino::user_create() { // crea l'oggetto per i parametri di livello giacenza // apre la maschera e dispone gli sheet _rel= new TRelation(LF_ANAMAG); _linee_rec_um= new TRecord_array(LF_UMART, "NRIGA"); _linee_rec_deslin= new TRecord_array(LF_DESLIN, "NRIGA"); _linee_rec_cod= new TRecord_array(LF_CODCORR, "NRIGA"); _msk= new TMask_anamag(_rel,has_module(MGAUT),FALSE); return TRUE; } bool TAnagrafica_magazzino::user_destroy() { delete _linee_rec_cod; delete _linee_rec_deslin; delete _linee_rec_um; delete _rel; delete _msk; return TRUE; } int TAnagrafica_magazzino::read(TMask& m) { int err= TRelation_application::read(m); if (err == NOERR) { // LETTURA SHEET STORICO MAGAZZINO IN AUTOMATICO TSheet_field &fld_stomag= (TSheet_field &)m.field(F_SHEETSTOMAG); // prende il sheet delle unità di misura fld_stomag.sheet_mask().field(F_STOCODART).set(m.field(F_CODART).get()); //int i; // ***************************** // LETTURA SHEET UNITA' DI MISURA TSheet_field &fld_um= (TSheet_field &)m.field(F_SHEETUM); // prende il sheet delle unità di misura /* TRectype rum(LF_UMART); // crea il record dal file delle unità di misura TString codiva(m.get(F_CODIVA)); real netto = 0.0, lordo = 0.0; fld_um.destroy(); // cancella lo sheet rum.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera) _linee_rec_um->read(rum); // legge il record array const int lastum = _linee_rec_um->last_row(); for (int i= 1; i <= lastum; i++) { TRectype &rec= _linee_rec_um->row(i, TRUE); // prende il record della riga corrente dal record array TToken_string &row= fld_um.row(i-1); row = ""; row.add(rec.get("UM")); // imposta la riga dello sheet con i campi del record della riga corrente row.add(rec.get("FC")); row.add(rec.get("PREZZO")); netto = real(rec.get("PREZZO")); lordo = netto2lordo(netto,codiva); row.add(lordo.string()); } */ if (fld_um.items() == 0) ((TToken_string &)fld_um.row(0)) = "|1"; // aggiunge una riga allo sheet else ((TToken_string &)fld_um.row(0)).add("1",1); // forza la prima unita' di misura a 1 fld_um.disable_cell(0, 1); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. è fisso a 1) fld_um.force_update(0); // aggiorna lo stato della riga 0 // ***************************** // LETTURA SHEET DESCRIZIONI IN LINGUA /* TRectype r(LF_DESLIN); // prende il record corrente dal file delle descrizioni in lingua TSheet_field &fld_deslin= (TSheet_field &)m.field(F_SHEETDESLIN); // prende il sheet delle descrizioni in lingua r.zero(); r.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera) _linee_rec_deslin->read(r); // legge il record array fld_deslin.destroy(); // cancella lo sheet const int lastdes= _linee_rec_deslin->last_row(); for (i = 1; i <= lastdes; i++) { TRectype &rec= _linee_rec_deslin->row(i, TRUE); // prende il record della riga corrente dal record array TToken_string &row= fld_deslin.row(i-1); row = ""; row.add(rec.get("CODLIN")); // imposta la riga dello sheet con i campi del record della riga corrente row.add(rec.get("DESCR")); } */ // *************************** // LETTURA SHEET CODICI CORRISPONDENTI /* TRectype rcor(LF_CODCORR); // prende il record corrente dal file dei codici corrispondenti TSheet_field &fld_cod= (TSheet_field &)m.field(F_SHEETCOD); // prende lo sheet dei codici corrispondenti rcor.zero(); rcor.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera) _linee_rec_cod->read(rcor); // legge il record array fld_cod.destroy(); // cancella lo sheet const int lastcod = _linee_rec_cod->last_row(); for (i= 1; i <= lastcod; i++) { TRectype &rec= _linee_rec_cod->row(i, TRUE); // prende il record della riga corrente dal record array TToken_string &row= fld_cod.row(i-1); row = ""; row.add(rec.get("CODARTALT")); // imposta la riga dello sheet con i campi del record della riga corrente row.add(rec.get("TIPO")); } */ // ***************************** // LETTURA SHEET GIACENZE //((TMask_anamag &)m).sheetgiac_read(); } // no errors in TRelation_application::read(m); return err; } bool TAnagrafica_magazzino::remove() { return //_linee_rec_um->remove() == NOERR && // _linee_rec_deslin->remove() == NOERR && // _linee_rec_cod->remove() == NOERR && // _msk->sheetgiac_remove() == NOERR && TRelation_application::remove(); } int TAnagrafica_magazzino::write(const TMask& m) { int err= TRelation_application::write(m); //if (err != NOERR) // return err; //int i; // *********************** // write dello sheet unita' di misura /* TSheet_field &fld_um= (TSheet_field &)m.field(F_SHEETUM); _linee_rec_um->destroy_rows(); if (m.insert_mode()) _linee_rec_um->renum_key("CODART", m.get(F_CODART)); for (int i= 0; i < fld_um.items(); i++) { TToken_string &row= fld_um.row(i); TString16 um(row.get(0)); um.rtrim(); if (um.not_empty()) { TRectype &rec= _linee_rec_um->row(i+1, TRUE); rec.put("UM", um); rec.put("FC", row.get()); rec.put("PREZZO", row.get()); } } err = _linee_rec_um->write(); if (err != NOERR) return err; */ // *********************** // write dello sheet descrizioni in lingua /*TSheet_field &fld_deslin= (TSheet_field &)m.field(F_SHEETDESLIN); _linee_rec_deslin->destroy_rows(); if (m.insert_mode()) _linee_rec_deslin->renum_key("CODART", m.get(F_CODART)); for (i = 0; i < fld_deslin.items(); i++) { TToken_string &row= fld_deslin.row(i); TString16 codlin(row.get(0)); codlin.rtrim(); if (codlin.not_empty()) { TRectype &rec= _linee_rec_deslin->row(i+1, TRUE); rec.put("CODLIN", codlin); rec.put("DESCR", row.get()); } } err= _linee_rec_deslin->write(); if (err != NOERR) return err; */ // *********************** // write dello sheet codici alternativi /* TSheet_field &fld_cod= (TSheet_field &)m.field(F_SHEETCOD); _linee_rec_cod->destroy_rows(); if (m.insert_mode()) _linee_rec_cod->renum_key("CODART", m.get(F_CODART)); for (i= 0; i < fld_cod.items(); i++) { TToken_string &row= fld_cod.row(i); TString80 codartalt(row.get(0)); codartalt.rtrim(); if (codartalt.not_empty()) { TRectype &reccor= _linee_rec_cod->row(i+1, TRUE); reccor.put("CODARTALT", codartalt); reccor.put("TIPO", row.get()); } } err= _linee_rec_cod->write(); if (err != NOERR) return err; */ // *********************** // write dello sheet giacenze //err = ((TMask_anamag &)m).sheetgiac_write(FALSE); return err; } int TAnagrafica_magazzino::rewrite(const TMask& m) { int err; // rewrite dello sheet Unita' di misura /* TSheet_field &fld_um= (TSheet_field &)m.field(F_SHEETUM); _linee_rec_um->destroy_rows(); if (m.insert_mode()) _linee_rec_um->renum_key("CODART", m.get(F_CODART)); for (int i= 0; i < fld_um.items(); i++) { TToken_string & row = fld_um.row(i); TString16 um(row.get(0)); um.rtrim(); if (um.not_empty()) { TRectype &rec= _linee_rec_um->row(i+1, TRUE); rec.put("UM", um); rec.put("FC", row.get()); rec.put("PREZZO", row.get()); } } int err = _linee_rec_um->rewrite(); if (err != NOERR) return err; */ // rewrite dello sheet descrizioni in lingua /* TSheet_field &fld_deslin= (TSheet_field &)m.field(F_SHEETDESLIN); _linee_rec_deslin->destroy_rows(); if (m.insert_mode()) _linee_rec_deslin->renum_key("CODART", m.get(F_CODART)); for (i= 0; i < fld_deslin.items(); i++) { TToken_string & row = fld_deslin.row(i); TString16 codlin(row.get(0)); codlin.rtrim(); if (codlin.not_empty()) { TRectype &rec= _linee_rec_deslin->row(i+1, TRUE); rec.put("CODLIN", codlin); rec.put("DESCR", row.get()); } } err = _linee_rec_deslin->rewrite(); if (err != NOERR) return err; */ // rewrite dello sheet codici alt. /* TSheet_field &fld_cod= (TSheet_field &)m.field(F_SHEETCOD); _linee_rec_cod->destroy_rows(); if (m.insert_mode()) _linee_rec_cod->renum_key("CODART", m.get(F_CODART)); for (i = 0; i < fld_cod.items(); i++) { TToken_string &row= fld_cod.row(i); TString80 codartalt(row.get(0)); codartalt.rtrim(); if (codartalt.not_empty()) { TRectype &reccor = _linee_rec_cod->row(i+1, TRUE); reccor.put("CODARTALT", codartalt); reccor.put("TIPO", row.get()); } } err = _linee_rec_cod->rewrite(); if (err != NOERR) return err; */ // rewrite dello sheet giacenze // //err = ((TMask_anamag &)m).sheetgiac_write(TRUE); //if (err == NOERR) err= TRelation_application::rewrite(m); return err; } void TAnagrafica_magazzino::init_insert_mode(TMask &m) { TSheet_field &f= (TSheet_field &)m.field(F_SHEETUM); if (f.items()==0) { ((TToken_string &)f.row(0)) = "|1"; // aggiunge una riga allo sheet f.disable_cell(0, 1); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. è fisso a 1) f.force_update(0); // aggiorna lo stato della riga 0 } } // ************************ // int ve2400(int argc, char* argv[]) { TAnagrafica_magazzino a; a.run(argc, argv, "Anagrafica di magazzino"); return 0; }