From a90d9a41769dbca581c37a6a27cf954c2bedb871 Mon Sep 17 00:00:00 2001 From: bonazzi Date: Sun, 2 Jul 2017 21:58:50 +0000 Subject: [PATCH] Patch level : 12.0 412 Files correlati : ve2.exe md1.exe ve0.exe ve1.exe ve5.exe ve6.exe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modificato il modo di aggiornare le giacenze di magazzino: 1) Viene bloccato il record di giacenza singolo. 2) l'aggiornamento dell'anagrafica non scrive più le giacenze, l'aggiornamento si può attivare premendo Shift-F12 3) l'aggiornamento dall'anagrafica di magazzino aggiorna solo i record cambiati di giacenza e di giacenza per cliente. git-svn-id: svn://10.65.10.50/branches/R_10_00@23902 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/ve/ve2400.cpp | 4428 ++++++++++++++++++++++++--------------------- src/ve/ve2400.h | 554 +++--- src/ve/ve2400.uml | 3339 +++++++++++++++++----------------- 3 files changed, 4295 insertions(+), 4026 deletions(-) diff --git a/src/ve/ve2400.cpp b/src/ve/ve2400.cpp index 3aa448d35..4945730a8 100755 --- a/src/ve/ve2400.cpp +++ b/src/ve/ve2400.cpp @@ -1,2091 +1,2337 @@ -#include "velib.h" -#include "ve2400.h" -#include "ve2401.h" - -#include "../ca/calib01.h" - -#include -#include -#include - -//--------------------------------------------------- -// MASCHERA ANAGRAFICA MAGAZZINO -//--------------------------------------------------- -class TMask_anamag: public TMask -{ - TRelation* _rel; // relazione principale - - TCodgiac_livelli* livelli_giac;// oggetto handler per i livelli di giacenza - TCodart_livelli* livelli_art;// oggetto handler per i livelli di anagraficca - int last_annogiac, last_annosto; - int _disabled_user_page; - - int _type_cod, _altype_cod; - TString4 _ean8_pref; - TString8 _ean13_pref; - bool _ean8_cin; - TString16 _generated_code; - - TMagazzini *_magazzini; - - static bool handle_codice(TMask_field &, KEY); // handler del campo codice articolo - 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_stoanno_row(TMask_field &, KEY); // handler del campo anno delle giacenze sulle righe - 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); // notify 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 notify_sheet_cod(TSheet_field & s, int r, KEY k); // notify dello sheet delle unità di misura - static bool handle_codcorr(TMask_field &, KEY); // handler dello sheet dei codici alternativi - static bool notify_sheet_giac(TSheet_field & s, int r, KEY k); // notify delle giacenze - static bool handle_sheetgiac(TMask_field &, KEY); // handler dello sheet giacenze - static bool notify_sheet_sto(TSheet_field & s, int r, KEY k); // notify dello storico - 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 - static bool handle_sheet_giac_codmag(TMask_field &, KEY); // handler - static bool handle_sheet_giac_valgiac(TMask_field &, KEY); // handler - static bool handle_sheet_stomag_stoval(TMask_field &, KEY); // handler - static bool handle_autoinsert_livgiac(TMask_field &, KEY); // handler del campo - - static void sheetgiac_get(TSheet_field &fld_righe, int item); - static void sheetgiac_put(TSheet_field &fld_righe, int item); - static void sheetsto_get(TSheet_field &fld_righe, int item); - static void sheetsto_put(TSheet_field &fld_righe, int item); - - void clear_info_sto(); - bool info_sto_dirty(); - int add_totali_storico(TString &codmag); - bool remove_totali_storico(TString & codmag); - void update_totali_storico(TString & codmag); - bool check_totali_storico(); - void create_user_fields(); - -public: - bool generate_code(int _type = 0, const char * codart = NULL); - void update_ordc_ordf(); - void set_parametered_fields(); - void ricalcola_giacenze(); - void disable_user_page() { disable_page(_disabled_user_page);} - TCodart_livelli * get_livelli_art() const { return livelli_art; } - - const TString& generated_code() const { return _generated_code; } - const TString& um_principale() const; - void set_um_principale(const char* ump); - TMagazzini& magazzini() { return *_magazzini; } - - TMask_anamag(TRelation * rel); - virtual ~TMask_anamag(); -}; - -//-------------------------------------------- -// APPLICAZIONE -//-------------------------------------------- -class TAnagrafica_magazzino : public TRelation_application -{ - TMask_anamag *_msk; // maschera principale - TRelation *_rel; // relazione principale di un solo file (anagrafiche di magazzino) - -protected: - virtual bool user_create(); - virtual bool user_destroy(); - virtual TMask *get_mask(int) { return _msk; } - virtual bool changing_mask(int) { return false; } - virtual void init_query_mode(TMask&); - virtual void init_insert_mode(TMask&); - virtual void init_modify_mode(TMask&); - - virtual void on_firm_change(); - bool search_on_file(const char * key, int file, int nkey, const char * field); - virtual bool protected_record(TRectype&); - - virtual int read(TMask& m); - void load_um(TMask& m); - virtual bool remove(); - virtual int write(const TMask& m); - virtual int rewrite(const TMask& m); - - virtual void ini2sheet(TConfig& ini, TSheet_field &sheet); - virtual void sheet2ini(TSheet_field &sheet,TConfig& ini); - - static bool handle_copia(TMask_field &, KEY); // handler della copia articolo - -public: - virtual TRelation *get_relation() const { return _rel; } - // @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata - virtual bool check_autorization() const { return false; } - TAnagrafica_magazzino() { _rel = NULL; _msk = NULL;} - virtual ~TAnagrafica_magazzino() {} -}; - -inline TAnagrafica_magazzino& app() { return (TAnagrafica_magazzino&) main_app(); } - -//------------------------------------------------------------------------------------------------- -// METODI DELLA MASCHERA -//------------------------------------------------------------------------------------------------- -//------------------------------------------ -//gestione codice articolo multilivello -//------------------------------------------ -static bool handle_subcodice(TMask_field &fld, KEY k) -{ - TMask &mask=fld.mask(); - if (k == K_TAB && (fld.focusdirty()||!mask.is_running())) //c'e' qualcosa nel campo - { - //quale e' l'ultimo campo valido per codart in multilevel? - short id_last = fld.dlg(); - while (id_last <= F_LIVART9 && mask.id2pos(id_last+1) > 0) - id_last++; - - if (fld.empty()) - { - //gira su tutti i campi di livart esistenti e successivi al livello corrente - for(short id = fld.dlg()+1; id <= id_last; id++) - { - mask.set(id, ""); - mask.disable(id); - } - } - else - { - const int pos = mask.id2pos(fld.dlg()+1); - if (pos > 0) - { - TMask_field& next_fld = mask.fld(pos); - next_fld.enable(); - } - } -//riempie in automatico il campo codice complessivo - TString80 stringone; - bool completo = true; - for(short id = F_LIVART1; id <= id_last; id++) - { - const TString& val = mask.get(id); - if (val.blank()) - { - completo = false; - break; - } - stringone << val; - } - - mask.set(F_CODART, stringone, fld.dlg()==id_last ? 0x3 : 0x0); - } - return true; -} - -void create_browse1(TEdit_field& kfld, int level, short key_id, short des_id, const TCodart_livelli &cal, const bool chktyp) -{ - TFilename tmp; tmp.temp(); - ofstream out(tmp); - - out << "USE GCA" << endl; //usa la tabella dei livelli articolo - - const short id = key_id + level - 1; - const TString& prompt = cal.name(level); - const TString& picture = cal.picture(level); - out << "IN CODTAB[1,1] \"" << level << "\"" << endl; - out << "IN CODTAB[2,0] " << id << endl; - out << "DI \"" << prompt; - const int length = cal.code_length(level); - if (length > prompt.len()) - out << '@' << length; - out << "\" CODTAB[2,0]" << endl; - out << "DI \"" << TR("Descrizione") << "@50\" S0" << endl; - out << "OU " << id << " CODTAB[2,0]" << endl; - out << "OU " << (des_id + level -1) << " S0" << endl; - - if (chktyp) - { - if (level == 1) - out << "CH RE" << endl; - else - out << "CH NO" << endl; - } - out << "EN" << endl; - out.close(); - - TScanner scan(tmp); - while (scan.pop() != "EN") - kfld.parse_item(scan); - - xvt_fsys_remove_file(tmp); -} - -void create_browse2(TEdit_field& kfld, int level, short key_id, short des_id, const TCodart_livelli &cal, const bool chktyp) -{ - TFilename tmp; tmp.temp(); - ofstream out(tmp); - - out << "USE GCA KE 2 SELECT CODTAB[1,1]=='" << level << "'" << endl; //cerca per descrizione - - const short id = des_id + level - 1; - out << "IN S0 " << id << endl; - out << "DI \"" << TR("Descrizione") << "@50\" S0" << endl; - - const TString& prompt = cal.name(level); - out << "DI \"" << prompt; - const int length = cal.code_length(level); - if (length > prompt.len()) - out << '@' << length; - out << "\" CODTAB[2,0]" << endl; - - out << "CO OU " << (key_id + level -1) << endl; - if (chktyp) - out << "CH NO" << endl; - out << "EN" << endl; - out.close(); - - TScanner scan(tmp); - while (scan.pop() != "EN") - kfld.parse_item(scan); - - xvt_fsys_remove_file(tmp); -} - -int create_fields(TMask& msk, int x, int y, short key_id, short des_id, const TCodart_livelli &cal, const bool chktyp) -{ - const int last_level = cal.last_level(); - - int tab0 = x; - int i; - for (i = 1; i <= last_level; i++) //cicla su tutti i livelli del codart abilitati - { - // codice livello articolo - const short kid = key_id+i-1; - const TString& picture = cal.picture(i); - - TString4 flags = "BU"; - if (picture[0] == '0') - flags << 'Z'; - - TEdit_field& kfld = msk.add_string(kid, 0, "", tab0, y, picture.len(), flags); - kfld.set_key(1); - create_browse1(kfld, i, key_id, des_id, cal, chktyp); - - kfld.set_handler(handle_subcodice); - tab0 += picture.len()+3; - } - for (i = 1; i <= last_level; i++) - { - // descrizione livello articolo - const short did = des_id+i-1; - TEdit_field& dfld = msk.add_string(did, 0, "", 200, y, 50, "", 50); - dfld.set_key(1); - create_browse2(dfld, i, key_id, des_id, cal, chktyp); - } - - return cal.last_level(); -} - -void TMask_anamag::set_parametered_fields() -{ - // abilitazioni parametriche - - if (livelli_giac) - delete livelli_giac; - if (livelli_art) - delete livelli_art; - if (_magazzini) - delete _magazzini; - - _magazzini = new TMagazzini; - - // imposta il puntatore al gestore livelli giacenze - livelli_giac= new TCodgiac_livelli(); - livelli_art= new TCodart_livelli(); - // imposta il valore dell'anno per le giacenze - last_annogiac=-1; - last_annosto=-1; - - // Abilita la pagina delle giacenze - const bool gestmag = app().has_module(MGAUT) && magazzini().gestmag(); - - if (gestmag) - { -// sheet giacenze - set_handler(F_ANNO, handle_anno ); - set_handler(F_SHEETGIAC, handle_sheetgiac); - - TSheet_field& sgiac = sfield(F_SHEETGIAC); - sgiac.set_userget(sheetgiac_get); - sgiac.set_userput(sheetgiac_put); - sgiac.sheet_mask().set_handler(F_CODMAG, handle_sheet_giac_codmag); - sgiac.sheet_mask().set_handler(F_VALGIAC, handle_sheet_giac_valgiac); -// sheet storico - set_handler(F_SHEETSTOMAG, handle_sheetstomag); - sfield(F_SHEETSTOMAG).set_notify(notify_sheet_sto); - sfield(F_SHEETSTOMAG).set_userget(sheetsto_get); - sfield(F_SHEETSTOMAG).set_userput(sheetsto_put); - TMask& stomask = sfield(F_SHEETSTOMAG).sheet_mask(); - - stomask.set_handler(F_STOVAL, handle_sheet_stomag_stoval); - stomask.set_handler(F_STOANNOES, handle_stoanno_row); - - set_handler(F_STOANNO, handle_stoanno); - } - - // setta i campi della maschera per la pagina giacenze - TSheet_field &fld_stomag = sfield(F_SHEETSTOMAG); - TSheet_field &fld_giac = sfield(F_SHEETGIAC); - fld_giac.set_notify(notify_sheet_giac); - TSheet_field &fld_cod = sfield(F_SHEETCOD); - - // disabilita le colonne quando non sono utilizzati i livelli di giacenza - for (int i=0; i < 4; i++) - { - livelli_giac->set_sheetcolumn(fld_giac,F_LIV1+i,i+1); - livelli_giac->set_sheetcolumn(fld_cod,FS_LIV1+i,i+1); - if (livelli_giac->autoinsert(i+1)) - { - // codice autoinseribile - TMask_field & campo_liv = fld_giac.sheet_mask().field(F_LIV1+i); - - campo_liv.check_type(CHECK_SEARCH); - campo_liv.set_handler(gestmag ? handle_autoinsert_livgiac : NULL); - - TMask_field & campo_liv_cod = fld_cod.sheet_mask().field(FS_LIV1+i); - - campo_liv_cod.check_type(CHECK_SEARCH); - } - } - - /* - // disabilita la colonna numero distinte - if (FALSE) - { - 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) - const bool ubi = gestmag && magazzini().gestubi_man(); - fld_giac.sheet_mask().field(F_UBICAZ).show(!ubi); - fld_giac.sheet_mask().field(F_UBICAZD).show(!ubi); - fld_giac.sheet_mask().field(F_UBICAZ2).show(ubi); - - // abilita la gestione del monomagazzino - const bool mm = gestmag && magazzini().gestmultimag(); - fld_giac.sheet_mask().field(F_DESMAG).enable(mm); - fld_giac.enable_column(fld_giac.cid2index(F_CODMAG),mm); - fld_giac.enable_column(fld_giac.cid2index(F_CODDEP),gestmag && magazzini().gestdep()); - fld_stomag.enable_column(fld_stomag.cid2index(F_STOCODMAG),mm); - - enable_page(PAGE_GIACENZE,gestmag); - enable_page(PAGE_STORICO,gestmag); - - /* Obsoleto - // abilita la visualizzazione dei campi per la vendita al dettaglio - const bool dettaglio = app().has_module(VDAUT); - show(-G_VD, dettaglio); - */ - - // abilita la visualizzazione dei campi distinti per i livelli articolo - set_handler(F_CODART, handle_codice); -} - -void TMask_anamag::create_user_fields() -{ - TConfig c(CONFIG_DITTA, "ve"); - - _type_cod = c.get_int("GEN_EAN"); - _altype_cod = c.get_int("ALT_EAN"); - _ean8_pref = c.get("EAN8"); - _ean13_pref = c.get("EAN13"); - _ean8_cin = c.get_bool("EAN8CIN"); - _ean13_pref = c.get("EAN13"); - - TString80 prompt; - int page = PAGE_USER; - int row = 4; - int col = 0; - int user_fields = 0; - - //si suppone 20 campi user; sarebbe meglio definire una costante - for (int i = 1; i <= 20; i++) - { - if (c.get_bool("CHK_USER", "ve", i)) - { - TEditable_field * f = NULL; - prompt = c.get("PROMPT_USER", "ve", i); - //se il prompt fosse più lungo di 18 caratteri... - prompt.rpad(18); - prompt.cut(18); - - const char type = c.get_char("TYPE_USER", "ve", i); - - //visto che lo switch funziona con i char... - switch (type) - { - case 'S': - f = &add_string(F_USER1 + i - 1, page, prompt, col, row, c.get_int("LEN_USER", "ve", i)); - break; - case 'N': - f = &add_number(F_USER1 + i - 1, page, prompt, col, row, c.get_int("LEN_USER", "ve", i)); - ((TReal_field *) f)->set_decimals(c.get_int("DEC_USER", "ve", i)); - break; - case 'D': - f = &add_date(F_USER1 + i - 1, page, prompt, col, row); - break; - case 'I': - f = &add_currency(F_USER1 + i - 1, page, prompt, col, row, c.get_int("LEN_USER", "ve", i)); - break; - case 'X': - f = &add_boolean(F_USER1 + i - 1, page, prompt, col, row); - break; - default: - break; - } - //se esiste il campo utente... - if (f != NULL) - { - TString8 u; u.format("USER%d", i); - f->set_field(u); - user_fields++; - row ++; - if (row > 19) - { - col = 40; - row = 4; - } - } - } //if(c.get_bool... - } //for(int i... - - if (user_fields == 0 && !ini_get_bool(CONFIG_DITTA, "ve", "Magic")) - _disabled_user_page = PAGE_USER; -} - -const TString& TMask_anamag::um_principale() const -{ return edit_mode() ? get(F_UMPRINCIPALE) : EMPTY_STRING; } - -void TMask_anamag::set_um_principale(const char* ump) -{ - set(F_UMPRINCIPALE, ump); - set(F_UMPRINCIPALE2, ump); -} - - -// costruttore della maschera anagrafica di magazzino -TMask_anamag::TMask_anamag(TRelation * rel) : TMask("ve2400") -{ - _rel=rel; - - // sheet unità di misura - set_handler(F_SHEETUM, handle_sheet_um); - TSheet_field &f= sfield(F_SHEETUM); - f.set_notify(notify_sheet_um); - 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); - - TRecord_array* um = new TRecord_array(LF_UMART, "NRIGA"); - f.set_lines_record(*um); - - // sheet descrizioni in lingua - set_handler(F_SHEETDESLIN, handle_sheet_deslin); - // sheet codici corrispondenti - set_handler(F_SHEETCOD, handle_sheet_cod); - TSheet_field &fc= sfield(F_SHEETCOD); - TMask &fmc = fc.sheet_mask(); - fmc.set_handler(FS_CODARTALT, handle_codcorr); - - livelli_giac = NULL; - livelli_art = NULL; - _magazzini = NULL; - - set_parametered_fields(); - - if (!ca_config().get_bool("UsePdcc")) // Creo campi analitici solo se uso vero piano conti analitico - { - ca_create_fields(*this, 6, LF_PCONANA, 1, 9, F_CONTOPCIA, F_DESCRCONTOPCIA, 0, ANAMAG_CONTOINDA); - ca_create_fields(*this, 6, LF_PCONANA, 1,15, F_CONTOPCIV, F_DESCRCONTOPCIV, 0, ANAMAG_CONTOINDV); - } - - create_user_fields(); - - if (livelli_art->enabled()) - { - create_fields(*this, 1, 1, F_LIVART1, F_DESLIVART1, *livelli_art, true); - first_focus(F_LIVART1); - } - else - { - if (advanced_codart_enabled()) - { - TButton_field& bu = add_button(F_ADVANCED, 0, PR("Codice guidato"), 1, 1, 20); - bu.set_handler(advanced_codart_handler); - } - if (!app().has_module(LVAUT, CHK_DONGLE)) - hide(-G_LV); - TConfig c(CONFIG_DITTA, "ve"); - - field(F_CODIVA).check_type(c.get_bool("IVA_OBBL", "ve") && app().has_module(VEAUT, CHK_DONGLE) ? CHECK_REQUIRED : CHECK_NORMAL); - - if (c.get_bool("Magic", "ve")) - { - show(F_ECMAGIC1); - show(F_ECMAGIC2); - show(F_ECMAGIC3); - show(F_ECMAGIC4); - show(F_ECMAGIC_DESCR); - enable(F_ECMAGIC1); - enable(F_ECMAGIC2); - enable(F_ECMAGIC3); - enable(F_ECMAGIC4); - enable(F_ECMAGIC_DESCR); - } - - first_focus(F_CODART); - } -} - -void TMask_anamag::sheetsto_put(TSheet_field &sheet_sto, int item) -{ - if (item>1) return; - TMask_anamag & m=(TMask_anamag & )sheet_sto.mask(); - TRectype & first_rec=sheet_sto.record()->row(1,TRUE); - first_rec.put(STOMAG_ULTCOS1,m.get_real(F_STOULTCOS1 )); - first_rec.put(STOMAG_ULTCOS2,m.get_real(F_STOULTCOS2 )); - first_rec.put(STOMAG_COSTSTD,m.get_real(F_STOCOSTOSTD )); - first_rec.put(STOMAG_COSTOMEDIO,m.get_real(F_STOCOSTOMEDIO )); - first_rec.put(STOMAG_CATVEN,m.get(F_STOCATVEN )); - first_rec.put(STOMAG_CODLISTINO,m.get(F_STOCODLIST)); - first_rec.put(STOMAG_PRZLIST,m.get(F_STOPREZZOLIST )); -} - -void TMask_anamag::sheetsto_get(TSheet_field &sheet_sto, int item) -{ - TMask_anamag & m=(TMask_anamag &) sheet_sto.mask(); - - if (item>1) return; - TRectype & first_rec=sheet_sto.record()->row(1,TRUE); - m.set(F_STOULTCOS1, first_rec.get_real(STOMAG_ULTCOS1)); - m.set(F_STOULTCOS2, first_rec.get_real(STOMAG_ULTCOS2 )); - m.set(F_STOCOSTOSTD, first_rec.get_real( STOMAG_COSTSTD )); - m.set(F_STOCOSTOMEDIO, first_rec.get_real(STOMAG_COSTOMEDIO)); - m.set(F_STOCATVEN , first_rec.get(STOMAG_CATVEN)); - m.set(F_STOCODLIST , first_rec.get(STOMAG_CODLISTINO)); - m.set(F_STOPREZZOLIST ,first_rec.get(STOMAG_PRZLIST)); -} - -bool TMask_anamag::info_sto_dirty() -{ - return - field(F_STOULTCOS1).focusdirty() || - field(F_STOULTCOS2).focusdirty() || - field(F_STOCOSTOSTD).focusdirty() || - field(F_STOCOSTOMEDIO).focusdirty()|| - field(F_STOCATVEN ).focusdirty()|| - field(F_STOCODLIST).focusdirty()|| - field(F_STOPREZZOLIST).focusdirty(); -} - - -void TMask_anamag::clear_info_sto() -{ - reset(F_STOULTCOS1); - reset(F_STOULTCOS2); - reset(F_STOCOSTOSTD); - reset(F_STOCOSTOMEDIO); - reset(F_STOCATVEN ); - reset(F_STOCODLIST); - reset(F_STOPREZZOLIST); -} - - -TMask_anamag::~TMask_anamag() -{ - if (livelli_art) - delete livelli_art; - if (livelli_giac) - delete livelli_giac; - if (_magazzini) - delete _magazzini; -} - - -bool TMask_anamag::handle_autoinsert_livgiac(TMask_field &fld, KEY k) -{ - if (k == K_TAB && fld.focusdirty() && !fld.empty()) - { - TMask_anamag & mask=(TMask_anamag &) fld.mask().get_sheet()->mask(); - const int levnum=fld.dlg()-F_LIV1+1; - return mask.livelli_giac->autoinsert(levnum, fld); - } - return TRUE; -} - - -// HANDLER DEL CODICE: controlla la corrispondenza al formato previsto -bool TMask_anamag::generate_code(int type, const char * codart) -{ - _generated_code.cut(0); - if (type <= 0) - type = _type_cod; - //if (type <= 0) - // return false; - - TString cod(20); - long progr = 0; - - if (type == 8) - { - if (_ean8_pref.empty()) - return false; - cod = _ean8_pref; - cod << "999"; - if (_type_cod != 0) - { - TLocalisamfile anamag(LF_ANAMAG); - anamag.put(ANAMAG_CODART, cod); - - if (anamag.read(_isgteq) != _isemptyfile) - { - cod = anamag.get(ANAMAG_CODART); - - if (_ean8_pref < cod.left(4)) - { - anamag.prev(); - cod = anamag.get(ANAMAG_CODART); - } - if (_ean8_pref == cod.left(4)) - progr = atol(cod.right(3)); - } - } - else - { - TLocalisamfile codcorr(LF_CODCORR); - codcorr.setkey(2); - codcorr.put(CODCORR_CODARTALT, cod); - - if (codcorr.read(_isgteq) != _isemptyfile) - { - cod = codcorr.get(CODCORR_CODARTALT); - - if (_ean8_pref < cod.left(4)) - { - codcorr.prev(); - cod = codcorr.get(CODCORR_CODARTALT); - } - if (_ean8_pref == cod.left(4)) - { - if (_ean8_cin) - progr = atol(cod.mid(4, 3)); - else - progr = atol(cod.right(3)); - } - } - } - progr++; - if (progr < 1000) - { - _generated_code.format("%4s%03ld", (const char*)_ean8_pref, progr); - if (_ean8_cin) - { - int icin = (_generated_code[6]+_generated_code[4]+_generated_code[2]+_generated_code[0] - 4*'0')*3; - icin += _generated_code[5]+_generated_code[3]+_generated_code[1] - 3*'0'; - const char cin = '0' + (10-(icin % 10))%10; - _generated_code << cin; - } - } - else - return error_box(FR("Sono gia' stati generati 1000 codici sul prefisso %s"), (const char*)_ean8_pref); - } - else - if (_ean13_pref.full()) - { - cod = _ean13_pref; - cod << "999999"; - if (_type_cod != 0) - { - TLocalisamfile anamag(LF_ANAMAG); - anamag.put(ANAMAG_CODART, cod); - - if (anamag.read(_isgteq) != _isemptyfile) - { - cod = anamag.get(ANAMAG_CODART); - - if (_ean13_pref < cod.left(6)) - { - anamag.prev(); - cod = anamag.get(ANAMAG_CODART); - } - if (_ean13_pref == cod.left(6)) - progr = atol(cod.right(6)); - } - } - else - { - TLocalisamfile codcorr(LF_CODCORR); - codcorr.setkey(2); - codcorr.put(CODCORR_CODARTALT, cod); - - if (codcorr.read(_isgteq) != _isemptyfile) - { - cod = codcorr.get(CODCORR_CODARTALT); - - if (_ean13_pref < cod.left(6)) - { - codcorr.prev(); - cod = codcorr.get(CODCORR_CODARTALT); - } - if (_ean13_pref == cod.left(6)) - progr = atol(cod.right(6)); - } - } - progr++; - _generated_code.format("%s%06ld", (const char *)_ean13_pref, progr); - } - if (_generated_code.blank() && codart != NULL) - { - TString scod(codart); - cod = scod; - const int len = scod.len(); - cod << "999999"; - TLocalisamfile anamag(LF_ANAMAG); - anamag.put(ANAMAG_CODART, cod); - TString code; - - if (anamag.read(_isgteq) != _isemptyfile) - { - code = anamag.get(ANAMAG_CODART); - - if (cod < code.left(len) || (scod == code.left(len) && !isdigit(code[len]))) - { - anamag.prev(); - code = anamag.get(ANAMAG_CODART); - } - if (scod == code.left(len)) - progr = atol(code.mid(len)); - else - return false; - } - progr++; - TString fmt; - fmt.format("%%s%%0%dld", code.len() - len); - _generated_code.format(fmt, (const char *)scod, progr); - } - return true; -} - -bool TMask_anamag::handle_codice(TMask_field &fld, KEY k) -{ - TMask_anamag &mask=(TMask_anamag &)fld.mask(); - - if (k == K_TAB && !fld.get().blank() && mask.livelli_art->enabled()) - { - TString80 codepart; - - int l; - //ciclo di riempimento dei sottocodici articolo nella maschera - for (l=1; l <= mask.livelli_art->last_level(); l++) - { - const TString pezzo_di_codice = mask.livelli_art->unpack_grpcode(fld.get(),l); - mask.set(F_LIVART1+l-1, pezzo_di_codice); //scrive nei campi del codice a livelli i pezzi - //del codart completo - } - //ciclo di controllo dei sottocodici (devono esistere nella tabella GCA, tutti tranne l'ultimo) - for (l=1; llast_level(); l++) - { - const TString pezzo_di_codice = mask.livelli_art->unpack_grpcode(fld.get(),l); - mask.set(F_LIVART1+l-1, pezzo_di_codice); - codepart.cut(0) << l << pezzo_di_codice; - if (cache().get("GCA", codepart).empty()) - { - 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()) - { - /* Controllo casuale che va migliorato per gestire i sottocodici opzionali - fld.error_box("Il codice articolo non può essere vuoto"); - return(FALSE); - */ - return true; - } - - if (!mask.livelli_art->fit_to_format(codepart)) - { - fld.error_box("Il codice articolo non corrisponde al formato previsto \n('%s' ?? '%s')",(const char *)codepart,(const char *)mask.livelli_art->code_format()); - return(FALSE); - } - } - if (k == K_F8) - { - if (mask.generate_code(0, ((TEditable_field&)fld).get_window_data())) - { - fld.set(mask.generated_code()); - mask.stop_run(K_INS); - } - } - return(TRUE); -} - -bool TMask_anamag::handle_anno(TMask_field &fld, KEY k) -{ - if (k == K_TAB) - { - TMask_anamag &mask=(TMask_anamag &)fld.mask(); - TSheet_field& fld_giac = mask.sfield(F_SHEETGIAC); - - if (mask.get(F_ANNO).empty()) - { - mask.set(F_ANNORIF, esercizi().last()) ; - mask.set(F_ANNO, mask.get(F_ANNORIF)); - } - 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("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.update_ordc_ordf(); //chiamata del metodo successivo - } - mask.last_annogiac=mask.get_int(F_ANNO); - } - return(TRUE); -} - - -void TMask_anamag::update_ordc_ordf() -{ - real ordc,ordf; - const TDate oggi(TODAY); - int es_corr = esercizi().date2esc(oggi); // setta l'esercizio corrente (data come intero) - int es_pred = esercizi().pred(es_corr); // " " precedente " - - TRecord_array arr(LF_MAG, MAG_NRIGA); - TRectype rec(LF_MAG); // crea un record vuoto di LF_MAG - - for (int j = 0; j < 2; j++) - { - const int anno = j != 0 ? es_pred : es_corr; - if (anno == get_int(F_ANNORIF)) - { - TSheet_field &fld_giac = sfield(F_SHEETGIAC); - const int pos_ordc = fld_giac.cid2index(F_ORDC); - const int pos_ordf = fld_giac.cid2index(F_ORDF); - - FOR_EACH_SHEET_ROW(fld_giac,i,row) - { - ordc += real (row->get(pos_ordc)); - ordf += real (row->get(pos_ordf)); - } - } - else - { - rec.put(MAG_ANNOES, anno); // riempio il record campione - rec.put(MAG_CODART, get(F_CODART)); - arr.read(rec); - for (int i = arr.last_row(); i > 0; i = arr.pred_row(i)) - { - ordc += arr[i].get_real(MAG_ORDC); - ordf += arr[i].get_real(MAG_ORDF); - } - } - } - - set(F_TOT_ORD_CLI, ordc); - set(F_TOT_ORD_FOR, ordf); -} - -bool TMask_anamag::handle_stoanno(TMask_field &fld, KEY k) -{ - static bool in_handler = FALSE; - if (k == K_TAB && fld.focusdirty() && !in_handler) - { - in_handler = TRUE; - TMask_anamag &mask=(TMask_anamag &)fld.mask(); - TSheet_field &fld_stomag= mask.sfield(F_SHEETSTOMAG); - - if (mask.last_annosto>0 && mask.last_annosto!=fld.mask().get_int(F_STOANNO)) - { - if ((fld_stomag.dirty() || mask.info_sto_dirty()) && - fld_stomag.items()>0 ) - { - if (fld.yesno_box("Salvare lo storico per l'anno %d",mask.last_annosto) && - handle_sheetstomag(fld_stomag,K_ENTER)) - { - fld_stomag.autosave(*mask._rel); - fld_stomag.record()->write(TRUE); - } - } - } - // rilegge lo storico relativo a quell'anno ed aggiorna il layout - mask.field(F_STOANNORIF).set(fld.get()); - mask.clear_info_sto(); - fld_stomag.record()->read(*fld_stomag.putkey(*mask._rel)); - fld_stomag.autoload(*mask._rel); - handle_sheetstomag(fld_stomag,K_SPACE); - fld_stomag.force_update(); - mask.last_annosto=mask.get_int(F_STOANNORIF); - if (fld.focusdirty()) - esercizi().update(); - in_handler = FALSE; - } - - return TRUE; -} - -bool TMask_anamag::handle_stoanno_row(TMask_field &fld, KEY k) -{ - if (k == K_TAB && fld.focusdirty()) - esercizi().update(); - - return TRUE; -} - -bool TMask_anamag::handle_sheet_um(TMask_field &fld, KEY k) -{ - TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente - TMask_anamag & m= (TMask_anamag &)(fld.mask()); - if (k == K_ENTER && !m.query_mode()) - { - const int items = f.items(); - if (items > 0) - { - const char *codum=f.cell(0,f.cid2index(FS_CODUM)); - if (*codum<=' ') - return error_box("La prima unità di misura deve essere specificata"); - TAssoc_array v; // istanzia l'hash table per il controllo di univocità - for (int i= 0; i=items) - return error_box(FR("L'unità di misura '%s' deve essere presente in tabella"),(const char*)m.um_principale()); - } - } - } - - return true; -} - -bool TMask_anamag::notify_sheet_um(TSheet_field &fld_um, int r, KEY k) -{ - if (k == K_TAB) - { - fld_um.sheet_mask().enable(DLG_DELREC, r > 0); - if (r == 0) - { - if (fld_um.items() == 0) - fld_um.row(0) = " |1"; // aggiunge una riga allo sheet - else - fld_um.row(0).add("1",fld_um.cid2index(FS_FCUM)); // forza la prima unita' di misura a 1 - fld_um.disable_cell(0, fld_um.cid2index(FS_FCUM)); // 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); - } - } - 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.blank()) - 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à - - TString80 codart; - for (int i= 0; i< items; i++) - { - codart = f.cell(i,0); - if (codart.blank()) - return error_box("I codici alternativi non possono essere vuoti"); - if (codart == m.get(F_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à - if (v.add(codart) && !yesno_box("I codici alternativi devono essere diversi tra loro, si desidera continuare ?")) - return false; // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già - } - } - } - return TRUE; -} - -bool TMask_anamag::handle_codcorr(TMask_field &fld, KEY k) -{ - if (k == K_F8) - { - TMask &m = fld.mask(); // prende la maschere d'origine del campo - TMask_anamag & mask = (TMask_anamag &) m.get_sheet()->mask(); - char val = fld.mask().get(FS_TIPO)[0]; - int type = val == '8' ? 8 : (val == '1' ? 13 : 0); - - if (type > 0 && mask.generate_code(type)) - fld.set(mask.generated_code()); - } - return TRUE; -} - -bool TMask_anamag::notify_sheet_cod(TSheet_field & s, int r, KEY k) -{ - switch (k) - { - case K_CTRL + K_INS: - { - TMask_anamag& mask = (TMask_anamag&)s.mask(); - - if (s.items() == 1) // Genero la prima riga in base ai parametri dei codici alternativi - { - if (mask._altype_cod > 0 && mask.generate_code(mask._altype_cod)) - { - TToken_string& row = s.row(0); - row = mask.generated_code(); - row.add(mask._altype_cod); - } - } - TToken_string & rw = s.row(r); - TSheet_field & um = mask.sfield(F_SHEETUM); - if (um.items() > 0) - rw.add(um.row(0).get(s.cid2index(FS_CODUM)), s.cid2index(FS_CODUMCORR)); - } - break; - case K_ENTER: - { - const TString & codice = s.row(s.selected()).get(s.cid2index(FS_CODARTALT)); - const TRectype &anamag = cache().get(LF_ANAMAG, codice); - const TMask_anamag& mask = (TMask_anamag&)s.mask(); - const TString80 codart(mask.get(F_CODART)); - - if (!anamag.empty()) - return s.error_box("Il codice %s è già un articolo di magazzino", (const char *) codice); - else - { - TLocalisamfile codcorr(LF_CODCORR); - - codcorr.setkey(2); - codcorr.put(CODCORR_CODARTALT, codice); - - if (codcorr.read(_isgteq) == NOERR && codcorr.get(CODCORR_CODARTALT) == codice) - { - if (codcorr.get(CODCORR_CODART) != codart) - return s.yesno_box("Il codice %s è già un codice corrispondente", (const char *) codice); - } - } - - TSheet_field & f = mask.sfield(F_SHEETUM); - - const int items = f.items(); - const TString4 um(s.row(s.selected()).get(s.cid2index(FS_CODUMCORR))); - bool um_ok = false; - - if (items > 0) - { - for (int i= 0; !um_ok && i < items; i++) - { - const TString4 umrow(f.cell(i, f.cid2index(FS_CODUM))); - - um_ok = (um == umrow); - } - } - if (!um_ok) - return s.error_box("L'unità di misura '%s' non e' prevista per l'articolo %s",(const char *) um, (const char *) codart); - } - break; - default: - break; - } - return true; -} - -bool TMask_anamag::handle_sheetgiac(TMask_field &fld, KEY k) -{ - if (k == K_ENTER) - { - TSheet_field &f=(TSheet_field &)fld; - TMask_anamag &m= (TMask_anamag&)f.mask(); // prende la maschere d'origine del campo - const int items = f.items(); - - if (items > 0 && m.magazzini().gestmultimag()) - { - TAssoc_array v; // istanzia l'hash table per il controllo di univocità - - for (int i= 0; i< items; i++) - { - TString codgiac; - m.livelli_giac->pack_grpcode(codgiac, f.cell(i,F_LIV1-FIRST_FIELD),1); - m.livelli_giac->pack_grpcode(codgiac, f.cell(i,F_LIV2-FIRST_FIELD),2); - m.livelli_giac->pack_grpcode(codgiac, f.cell(i,F_LIV3-FIRST_FIELD),3); - m.livelli_giac->pack_grpcode(codgiac, f.cell(i,F_LIV4-FIRST_FIELD),4); - - codgiac << f.cell(i,F_CODMAG-FIRST_FIELD); - codgiac << f.cell(i,F_CODDEP-FIRST_FIELD); - if (codgiac.blank()) - 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"); - if (!notify_sheet_giac(f, i, K_ENTER)) - return FALSE; - } - // ordina le righe per livello+codmag - // f.rows_array().sort(); - } - } - return TRUE; -} - -int TMask_anamag::add_totali_storico(TString & codmag) -{ - TSheet_field &s =(TSheet_field &)field(F_SHEETSTOMAG); - bool need_rigatotali(TRUE); - int r; - - for (r=0 ; r < s.items() && codmag>=s.cell(r,s.cid2index(F_STOCODMAG)); r++) - { - if (*s.cell(r,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI - && codmag==s.cell(r,s.cid2index(F_STOCODMAG))) - need_rigatotali=FALSE; - } - if (need_rigatotali ) - { - real totq,totval; - TLocalisamfile mag(LF_MAG); - mag.setkey(2); - mag.put(MAG_ANNOES,get(F_STOANNORIF)); - //mag.put(MAG_CODART,get(F_CODART)); - mag.put(MAG_CODMAG,codmag); - mag.read(); - while (!mag.eof() - && get_int(F_STOANNORIF)==mag.get_int(MAG_ANNOES) - && strncmp((const char *)codmag,mag.get(MAG_CODMAG),3)==0) - { - if (get(F_CODART)==mag.get(MAG_CODART)) - { - totq+=mag.get_real(MAG_RIM); - totval+=mag.get_real(MAG_VALRIM); - } - mag.next(); - } - s.insert(r,FALSE); - s.row(r ).add(SIMBOLO_TOTALI,s.cid2index(F_STOTIPORIGA)); - s.row(r ).add(codmag,s.cid2index(F_STOCODMAG)); - s.row(r ).add("Totale",s.cid2index(F_STOANNOES)); - s.disable_cell(r,-1); - - s.insert(r+1,FALSE); - s.row(r+1).add(SIMBOLO_TOTALI,s.cid2index(F_STOTIPORIGA)); - s.row(r+1).add(codmag,s.cid2index(F_STOCODMAG)); - s.row(r+1).add("Rim.in",s.cid2index(F_STOANNOES)); - s.row(r+1).add(totq.string(),s.cid2index(F_STOQUANT)); - s.row(r+1).add(totval.string(),s.cid2index(F_STOVAL)); - s.disable_cell(r+1,-1); - } - update_totali_storico(codmag); - return r; -} - -void TMask_anamag::update_totali_storico(TString & codmag) -{ - TSheet_field &s =sfield(F_SHEETSTOMAG); - real tot1,tot2; - // find first occourrence.. - int i=0 ; - while (i< s.items() && codmag>s.cell(i,s.cid2index(F_STOCODMAG))) - i++; - // ...sum... - for (; i< s.items() && *s.cell(i,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI ; i++) - { - tot1+=real(s.cell(i,s.cid2index(F_STOQUANT))); - tot2+=real(s.cell(i,s.cid2index(F_STOVAL))); - } - //... display - if (i< s.items()) - { - s.row(i).add(tot1.string(),s.cid2index(F_STOQUANT)); - s.row(i).add(tot2.string(),s.cid2index(F_STOVAL)); - s.force_update(i); - } -} - - - -bool TMask_anamag::remove_totali_storico(TString & codmag) -{ - if (codmag.blank()) - return FALSE; - - TSheet_field &s =(TSheet_field &)field(F_SHEETSTOMAG); - bool found_some(FALSE); - int r; - - for (r=0 ; !found_some && r< s.items()-1 && !(*s.cell(r,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI - && codmag==s.cell(r,s.cid2index(F_STOCODMAG))); r++) - { - if (*s.cell(r,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI - && codmag==s.cell(r,s.cid2index(F_STOCODMAG))) - found_some=TRUE; - } - if (!found_some) - { - // ultima riga - s.destroy(r,FALSE); - s.destroy(r,FALSE); - } - return !found_some; -} - - -bool TMask_anamag::check_totali_storico() -{ - TSheet_field& s = sfield(F_SHEETSTOMAG); - const int annogiac = get_int(F_ANNO); - if (annogiac != last_annosto) - return true; - - for (int r=0 ; r< s.items() ; r++) - { - // rintraccia il totale - for (; r< s.items() && *s.cell(r,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI; r++) ; - real totq1(s.cell(r,s.cid2index(F_STOQUANT))),totq2(s.cell(r+1,s.cid2index(F_STOQUANT))); - if (totq1!=totq2) - if (!yesno_box("La somma delle composizioni dello storico \nper il magazzino %s non corrisponde \nalla rimanenza iniziale.\n Proseguo ugualmente ?", - (const char *)s.cell(r,s.cid2index(F_STOCODMAG)))) - return FALSE; - TCurrency totval1(real(s.cell(r,s.cid2index(F_STOVAL)))), - totval2(real(s.cell(r+1,s.cid2index(F_STOVAL)))); - if (totval1!=totval2) - return yesno_box("La somma del valore delle composizioni dello storico \n per il magazzino %s non corrisponde \nal valore della rimanenza iniziale.\n Proseguo ugualmente ?", - s.cell(r,s.cid2index(F_STOCODMAG))); - r++; - } - return TRUE; -} - - -bool TMask_anamag::notify_sheet_giac(TSheet_field &f, int i, KEY k) -{ - TMask_anamag& m = (TMask_anamag&)f.mask(); - - const bool gestmag = app().has_module(MGAUT) && m.magazzini().gestmag(); - if (gestmag) - { - switch (k) - { - case (K_ENTER): // fine modifica - { - real ck(f.cell(i,f.cid2index(F_RIM))); - ck+=real(f.cell(i,f.cid2index(F_ACQ))); - ck+=real(f.cell(i,f.cid2index(F_ENTR))); - ck-=real(f.cell(i,f.cid2index(F_VEN))); - ck-=real(f.cell(i,f.cid2index(F_USC))); - ck-=real(f.cell(i,f.cid2index(F_ACL))); - ck+=real(f.cell(i,f.cid2index(F_INCL))); - ck-=real(f.cell(i,f.cid2index(F_INPRODF))); - ck+=real(f.cell(i,f.cid2index(F_INPRODC))); - ck-=real(f.cell(i,f.cid2index(F_SCARTI))); - ck-=real(f.cell(i,f.cid2index(F_GIAC))); - - if (!ck.is_zero()) - return f.error_box("La giacenza deve essere pari a RIM+(ACQ+ENTR)-(VEN+USC)-(ACL-INCL)-(PRODF-PRODC) - SCARTI)"); - - m.update_ordc_ordf(); //chiama la funzione che calcola i totali degli ordinati - } - break; - default: - break; - } - } //if(gestmag... - - //campi presi da altri campi della maschera per.. - //..essere visualizzati nella pag. giacenze - if (k == K_TAB) - { - TMask& sm = f.sheet_mask(); //maschera delle giacenze - - if (sm.field(F_LIV1).hidden()) //l'articolo appare solo se mancano i livelli di giacenza senno'.. - { //..si sovrappongono - sm.show(F_CODARTR); - sm.show(F_DESCRR); - sm.set(F_CODARTR, m.get(F_CODART)); - sm.set(F_DESCRR, m.get(F_DESCR)); - } - else - { - sm.hide(F_CODARTR); - sm.hide(F_DESCRR); - } - sm.set(F_ULC1R, m.get_real(F_ULC1)); - sm.set(F_DATAULC1R, m.get_date(F_DATAULC1)); - sm.set(F_ULC2R, m.get_real(F_ULC1)); - sm.set(F_DATAULC2R, m.get_date(F_DATAULC2)); - } - return true; -} - -bool TMask_anamag::handle_sheet_giac_codmag(TMask_field &f, KEY k) -{ - if (k==K_TAB && f.dirty()) - { - TMask& m = f.mask(); - const TRectype& mag = ((TEdit_field&)f).browse()->cursor()->curr(); - const bool gesdep = mag.get_bool("B0"); - - m.enable(F_CODDEP, gesdep); - m.show(F_DESDEP, gesdep); - if (gesdep) - m.field(F_CODDEP).check(); - else - { - m.set(F_CODDEP, ""); - m.set(F_DESDEP, ""); - } - } - return TRUE; -} - - -bool TMask_anamag::handle_sheet_giac_valgiac(TMask_field &f, KEY k) -{ - if (k==K_TAB && f.dirty()) - { - TMask& m = f.mask(); - real q=m.get_real(F_RIM)+m.get_real(F_ACQ); - if (q.is_zero()) - f.set(q.string()); - else - { - q=(m.get_real(F_VRIM)+m.get_real(F_VACQ))/q; - TPrice r(q); - f.set(r.get_num().string()); - } - } - return TRUE; -} - -bool TMask_anamag::handle_sheet_stomag_stoval(TMask_field &f, KEY k) -{ - if (k == K_TAB && f.dirty()) - { - TMask& m = f.mask(); - const real val = m.get_real(F_STOQUANT) * m.get_real(F_STOVALUN); - const TCurrency c(val); - m.set(F_STOVAL, c); - } - return TRUE; -} - -bool TMask_anamag::notify_sheet_sto(TSheet_field &s, int r, KEY k) -{ - static TString16 oldcodmag,newcodmag,oldanno,newanno; - TMask_anamag & m=(TMask_anamag &)s.mask(); - - switch (k) - { - case K_DEL: - if (*s.cell(r,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI) - return FALSE; - break; - - case (K_CTRL+K_DEL): - if (m.remove_totali_storico(oldcodmag)) - s.force_update(); - break; - - case K_TAB: // posizionamento sulla riga - oldcodmag=s.cell(r,s.cid2index(F_STOCODMAG)); - oldanno=s.cell(r,s.cid2index(F_STOANNOES)); - break; - - case (K_ENTER): // fine modifica - - newanno=(s.cell(r,s.cid2index(F_STOANNOES))); - newcodmag=(s.cell(r,s.cid2index(F_STOCODMAG))); - - if (esercizi()[atoi(newanno)].inizio() >= esercizi()[m.get_int(F_STOANNO)].inizio()) - { - s.row(r).add(oldanno,s.cid2index(F_STOANNOES)); - s.error_box("La rimanenza iniziale di un esercizio deve essere composta da parti provenienti da esercizi precedenti"); - return FALSE; - } - // modifica - m.update_totali_storico(newcodmag); - if (oldcodmag==s.cell(r,s.cid2index(F_STOCODMAG))) - { - if (oldanno==s.cell(r,s.cid2index(F_STOANNOES)) ) - break; - } else { - m.remove_totali_storico(oldcodmag); - } - case (K_CTRL + K_INS ): // fine inserimento - if (*s.cell(r,s.cid2index(F_STOCODMAG))==' ' && m.magazzini().standardmag().not_empty()) - { - // new line - s.row(r).add(m.magazzini().standardmag(),s.cid2index(F_STOCODMAG)); - } - - newcodmag=(s.cell(r,s.cid2index(F_STOCODMAG))); - newanno=(s.cell(r,s.cid2index(F_STOANNOES))); - if (newcodmag != " ") - { - // ordina - while (r< s.items()-1 && (newcodmag > s.cell(r+1,s.cid2index(F_STOCODMAG)) || - (newcodmag == s.cell(r+1,s.cid2index(F_STOCODMAG)) && - (newanno > s.cell(r+1,s.cid2index(F_STOANNOES)) && *s.cell(r+1,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI)) )) - { - s.swap_rows(r,r+1); - r++; - } - while (r>0 && (newcodmag < s.cell(r-1,s.cid2index(F_STOCODMAG)) || - (newcodmag == s.cell(r-1,s.cid2index(F_STOCODMAG)) && - (newanno < s.cell(r-1,s.cid2index(F_STOANNOES)) || *s.cell(r-1,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI )) )) - { - s.swap_rows(r,r-1); - r--; - } - m.add_totali_storico(newcodmag); -// TSheet_field & s_um=(TSheet_field & )s.mask().field(F_SHEETUM); // qui verificare - s.force_update(); - } - break; - - case (K_INS): // richiesta di inserimento - break; - - } - return TRUE; -} - - - -bool TMask_anamag::handle_sheetstomag(TMask_field &fld, KEY k) -{ - TSheet_field & f=(TSheet_field &)fld; - TMask_anamag &m=(TMask_anamag &) f.mask(); // prende la maschere d'origine del campo - if (k==K_ENTER) - { - const int items = f.items(); - real totrim,totvalrim; - - if (items > 0) - { - if (!m.check_totali_storico()) - return FALSE; - TAssoc_array v; // istanzia l'hash table per il controllo di univocitˆ - int i; - - for (i= 0; i< items; i++) - { - if (*f.cell(i,f.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI) - { - TString codmg(f.cell(i,f.cid2index(F_STOCODMAG))); - TString codeser(f.cell(i,f.cid2index(F_STOANNOES))); - if (codmg.blank()) - return error_box("Il codice del magazzino non può essere vuoto"); - if (codeser.blank()) - 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à - codmg.overwrite(codeser,3); - if (v.add(codmg)) - return error_box("La composizione delle rimanenze deve far riferimento a esercizi tutti diversi tra loro"); - TLocalisamfile stor_aux(LF_STOMAG); - - stor_aux.put(STOMAG_CODART,fld.mask().get(F_CODART)); - stor_aux.put(STOMAG_ANNOESRIF,fld.mask().get(F_STOANNO)); - stor_aux.put(STOMAG_ANNOES,codeser); - - totrim=totrim+(real)f.cell(i,f.cid2index(F_STOQUANT)); - totvalrim=totvalrim+(real)f.cell(i,f.cid2index(F_STOVAL)); - } - } - for (i= 0; i< items;) - { - if (*f.cell(i,f.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI) - f.rows_array().remove(i,TRUE); - else - i++; - } - // ordina le righe per ANNO - //f.rows_array().sort(); - if ( m.get(F_STOANNO)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 rif_first_um(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura di rapporto - real rif_fc_first_um(t.get_real("R10")); // prende il suo fattore di conversione - rif_fc_first_um = rif_fc_first_um.is_zero() ? 1 : rif_fc_first_um; - - if (rif_first_um == rif_um) - { - x /= rif_fc_first_um; // calcola il rapporto tra i fattori di conversione - x.round(5); // arrotonda il risultato a 5 decimali - } else { - if (rif_first_um == curr_um) { - x= 1/rif_fc_first_um; - } - } - } - } - } - if (x == ZERO) - x = 1.00; - m.set(FS_FCUM, x); // il risultato viene scritto nel campo del fattore di conversione - } - else - { - TMask_anamag& m = (TMask_anamag&)f->mask(); - if (m.um_principale().blank()) - m.set_um_principale(curr_um); - } - } - } - 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; - TCodiceIVA iva(codiva); - - if (f.dlg() == FS_PREZZO) - { - netto = real(m.get(FS_PREZZO)); - lordo = iva.lordo(netto, AUTO_PRICES_DECIMALS, TCurrency::get_firm_val()); - m.set(FS_PREZZO_LORDO,lordo.string()); - } - else - { - lordo = real(m.get(FS_PREZZO_LORDO)); - real prec_lordo = lordo; - const real imposta = iva.scorpora(lordo, AUTO_PRICES_DECIMALS, TCurrency::get_firm_val()); - netto = lordo; - lordo += imposta; - 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); - } -} - -// Aggiorna il valore delle giacenze in base al cambiamento dell'unità di misura principale -void TMask_anamag::ricalcola_giacenze() -{ - real fc(UNO); - TSheet_field& f= sfield(F_SHEETUM); - if (um_principale().full() && um_principale()!=f.cell(0,f.cid2index(FS_CODUM))) - { - int i; - - for (i= 0; i 0); // qui verificare - } - return; -} - -//--------------------------------------- -//fine gestione articolo multilivello -//--------------------------------------- - -//------------------------------------------------------------------------------------------------- -// METODI DELL'APPLICAZIONE -//------------------------------------------------------------------------------------------------- -void TAnagrafica_magazzino::on_firm_change() -{ - if (_msk) - _msk->set_parametered_fields(); -} - -bool TAnagrafica_magazzino::search_on_file(const char * key, int file, int nkey, const char * field) -{ - TLocalisamfile f(file); - - if (f.empty()) - return FALSE; - else - { - f.setkey(nkey); - f.put(field, key); - f.read(); - return f.get(field) == key; - } -} - -bool TAnagrafica_magazzino::protected_record(TRectype& rec) -{ - const TString art(rec.get(ANAMAG_CODART)); - const TRectype & dist = cache().get(LF_DIST, art); - - if (!dist.empty()) - return TRUE; - else - if (search_on_file(art, LF_RDIST, 2, "CODCOMP")) - return TRUE; - else - return search_on_file(art, LF_RMOVMAG, 2, "CODART"); -} - -bool TAnagrafica_magazzino::user_create() -{ - open_files(LF_TAB, LF_TABCOM, LF_ANAMAG, LF_MAG, LF_STOMAG, - LF_UMART, LF_CODCORR, LF_DESLIN, LF_DIST, LF_RDIST, LF_RMOVMAG, - LF_CLIFO, LF_PCON, 0); - - // crea l'oggetto per i parametri di livello giacenza - // apre la maschera e dispone gli sheet - _rel= new TRelation(LF_ANAMAG); - if (ini_get_bool(CONFIG_DITTA, "ve", "Magic")) - _rel->add("&ATM","CODTAB==" ANAMAG_CODART, 1, LF_ANAMAG, ECAUT); - - //gestisce i campi salvati sulla tabella di modulo lv047 (lvanamag) - _rel->add("&LV047" ,"CODTAB==" ANAMAG_CODART, 1, LF_ANAMAG, LVAUT); - _rel->write_enable(-LVAUT); //abilita la lettura / scrittura sul record collegato - - _msk= new TMask_anamag(_rel); - - set_search_field(F_CODART); //serve per avere come campo di ricerca il codice articolo intero - //invece che l'ultimo campo del codice multilivello (se c'e') - return TRUE; -} - -bool TAnagrafica_magazzino::user_destroy() -{ - 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= m.sfield(F_SHEETSTOMAG); - fld_stomag.sheet_mask().field(F_STOCODART).set(m.field(F_CODART).get()); // necessario se lo sheet è vuoto - - // ***************************** - // LETTURA SHEET UNITA' DI MISURA - load_um(m); - ((TMask_anamag&) m).update_ordc_ordf(); //chiama la funzione che calcola i totali degli ordinati - } - return err; -} - -void TAnagrafica_magazzino::load_um(TMask& m) -{ - // ***************************** - // LETTURA SHEET UNITA' DI MISURA - TSheet_field &fld_um= m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura - get_relation()->curr().put(ANAMAG_CODART,m.get(F_CODART)); - fld_um.record()->read(*fld_um.putkey(*get_relation())); - fld_um.autoload(*get_relation()); -// else -// ((TToken_string &)fld_um.row(0)).add("1",fld_um.cid2index(FS_FCUM)); // forza la prima unita' di misura a 1 -// fld_um.disable_cell(0, fld_um.cid2index(FS_FCUM)); // 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 - - TString4 um_principale; - if (m.edit_mode()) - um_principale = fld_um.cell(0, fld_um.cid2index(FS_CODUM)); - ((TMask_anamag&)m).set_um_principale(um_principale); -} - -bool TAnagrafica_magazzino::remove() -{ - bool ok = TRelation_application::remove(); - if (ok) - { - TMask& m = curr_mask(); - TSheet_field& f = m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura - TLocalisamfile distinte(LF_DIST); - distinte.put("CODDIST", m.get(F_CODART)); - int err = distinte.read();// esiste la distinta ? - switch(err) - { - case _iskeynotfound : - case _isemptyfile : - case _iseof: - ok &= (f.record()->remove() == NOERR); - break; - default: - break; - } - } - return ok; -} - -int TAnagrafica_magazzino::write(const TMask& m) -{ - int err = TRelation_application::write(m); - if (err == NOERR) - { - TSheet_field& f = m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura - err = f.record()->write(FALSE); - } - return err; -} - -int TAnagrafica_magazzino::rewrite(const TMask& m) -{ - int err =TRelation_application::rewrite(m); - if (err==NOERR) - { - TSheet_field& f= m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura - err|=f.record()->write(TRUE); - } - ((TMask_anamag &)m).ricalcola_giacenze(); - return err; -} - -static bool non_esiste_handler(TMask_field& f, KEY k) -{ - switch (k) - { - case K_TAB: - if (!f.mask().is_running()) - f.reset(); - break; - case K_ENTER: - if (!cache().get(LF_ANAMAG, f.mask().get(F_CODART)).empty()) - return f.error_box(TR("Il codice articolo selezionato esiste già")); - default: - break; - } - return true; -} - -bool TAnagrafica_magazzino::handle_copia(TMask_field &fld, KEY k) -{ - if (k == K_SPACE) - { - TMask_anamag & m = (TMask_anamag &) fld.mask(); - const TString oldart = m.get(F_CODART); - - TString codart, descart, descagg; - if (advanced_codart_enabled()) - { - codart = oldart; - if (!advanced_codart_ask(codart, descart)) - codart.cut(0); - else - { - descagg = descart.mid(50); - descart = descart.left(50); - } - } - else - { - const TCodart_livelli* liv_art = m.get_livelli_art(); - - TMask ask("ve2400k"); - ask.set_handler(F_CODART, non_esiste_handler); - if(liv_art && liv_art->enabled()) - { - create_fields(ask, 1, 1, F_LIVART1, F_DESLIVART1, *liv_art, false); - for (int i = liv_art->last_level(); i > 0; i--) - { - const short id = F_LIVART1+i-1; - ask.set(id, m.get(id)); - } - ask.reset(F_CODART); - } - if (ask.run() == K_ENTER) - codart = ask.get(F_CODART); - } - - if (codart.full() && codart != oldart) - { - if (descart.full()) - m.set(F_DESCR, descart); - if (descagg.full()) - m.set(F_DESCRAGG, descagg); - - - m.set(F_CODART, codart, TRUE); - - m.sfield(F_SHEETGIAC).destroy(); - m.sfield(F_SHEETSTOMAG).destroy(); - - m.load_profile(0, FALSE); - - m.set_mode(MODE_INS); - xvtil_statbar_set(TR("Inserimento"), TRUE); - } - } - return TRUE; -} - -void TAnagrafica_magazzino::init_query_mode(TMask &m) -{ - m.hide(F_COPY); - - if (advanced_codart_enabled()) - m.show(F_ADVANCED); - - ((TMask_anamag&)m).set_um_principale(""); -} - -void TAnagrafica_magazzino::init_insert_mode(TMask &m) -{ - load_um(m); - TSheet_field& f = m.sfield(F_SHEETUM); - if (f.items() == 0) - f.row(0) = " |1"; // aggiunge una riga allo sheet - - if (advanced_codart_enabled()) - m.hide(F_ADVANCED); - ((TMask_anamag&)m).disable_user_page(); -} - -void TAnagrafica_magazzino::init_modify_mode(TMask &m) -{ - m.set_handler(F_COPY, handle_copia); - m.show(F_COPY); - - if (advanced_codart_enabled()) - m.hide(F_ADVANCED); - ((TMask_anamag&)m).disable_user_page(); -} - -void TAnagrafica_magazzino::ini2sheet(TConfig& ini, TSheet_field &sheet) -{ - switch(sheet.dlg()) - { - case F_SHEETGIAC: - case F_SHEETSTOMAG: - break; // do nothing - default: - TRelation_application::ini2sheet(ini, sheet); - } -} - -void TAnagrafica_magazzino::sheet2ini(TSheet_field &sheet,TConfig& ini) -{ - switch(sheet.dlg()) - { - case F_SHEETGIAC: - case F_SHEETSTOMAG: - break; // do nothing - default: - TRelation_application::sheet2ini(sheet, ini); - } -} - -// ************************ -// -int ve2400(int argc, char* argv[]) -{ - TAnagrafica_magazzino a; - - a.run(argc, argv, TR("Anagrafica di magazzino")); - return 0; -} - - - +#include "velib.h" +#include "ve2400.h" +#include "ve2401.h" + +#include "../ca/calib01.h" +#include "../lv/lvrcondv.h" + +#include +#include +#include +#include + + const char * get_token(TSheet_field & s, int r, int dlg) + { + TString & tmp = get_tmp_string(50); + TToken_string & row = s.row(r); + + tmp = row.get(s.cid2index(dlg)); + tmp.rpad(s.sheet_mask().field(dlg).size()); + + return tmp; + } + +int cmp_rows(TSheet_field & s, int r1, int r2) + { + TString key1(get_token(s, r1, F_LIV1)); + TString key2(get_token(s, r2, F_LIV1)); + + key1 << get_token(s, r1, F_LIV2); + key1 << get_token(s, r1, F_LIV3); + key1 << get_token(s, r1, F_LIV4); + key1 << get_token(s, r1, F_CODMAG); + key1 << get_token(s, r1, F_CODDEP); + key2 << get_token(s, r2, F_LIV2); + key2 << get_token(s, r2, F_LIV3); + key2 << get_token(s, r2, F_LIV4); + key2 << get_token(s, r2, F_CODMAG); + key2 << get_token(s, r2, F_CODDEP); + + return key1.compare(key2); + } + +//--------------------------------------------------- +// MASCHERA ANAGRAFICA MAGAZZINO +//--------------------------------------------------- +class TMask_anamag: public TMask +{ + TRelation* _rel; // relazione principale + + TCodgiac_livelli* livelli_giac;// oggetto handler per i livelli di giacenza + TCodart_livelli* livelli_art;// oggetto handler per i livelli di anagraficca + int last_annogiac, last_annosto; + int _disabled_user_page; + + int _type_cod, _altype_cod; + TString4 _ean8_pref; + TString8 _ean13_pref; + bool _ean8_cin; + TString16 _generated_code; + TString_array _giacs; + + TMagazzini *_magazzini; + + static bool handle_codice(TMask_field &, KEY); // handler del campo codice articolo + 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_stoanno_row(TMask_field &, KEY); // handler del campo anno delle giacenze sulle righe + 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); // notify 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 notify_sheet_cod(TSheet_field & s, int r, KEY k); // notify dello sheet delle unità di misura + static bool handle_codcorr(TMask_field &, KEY); // handler dello sheet dei codici alternativi + static bool notify_sheet_giac(TSheet_field & s, int r, KEY k); // notify delle giacenze + static bool handle_sheetgiac(TMask_field &, KEY); // handler dello sheet giacenze + static bool notify_sheet_sto(TSheet_field & s, int r, KEY k); // notify dello storico + 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 + static bool handle_sheet_giac_codmag(TMask_field &, KEY); // handler + static bool handle_sheet_giac_valgiac(TMask_field &, KEY); // handler + static bool handle_sheet_stomag_stoval(TMask_field &, KEY); // handler + static bool handle_autoinsert_livgiac(TMask_field &, KEY); // handler del campo + static bool handle_valconv(TMask_field&, KEY); // handler del valore convenzionale + + static void sheetgiac_get(TSheet_field &fld_righe, int item); + static void sheetgiac_put(TSheet_field &fld_righe, int item); + static void sheetsto_get(TSheet_field &fld_righe, int item); + static void sheetsto_put(TSheet_field &fld_righe, int item); + + void clear_info_sto(); + bool info_sto_dirty(); + int add_totali_storico(TString &codmag); + bool remove_totali_storico(TString & codmag); + void update_totali_storico(TString & codmag); + bool check_totali_storico(); + void create_user_fields(); + void write_enable(bool on); + virtual bool on_key(KEY key); + +public: + bool generate_code(int _type = 0, const char * codart = NULL); + void update_ordc_ordf(); + void set_parametered_fields(); + void ricalcola_giacenze(); + TString_array & giacs() { return _giacs;} + void disable_user_page() { disable_page(_disabled_user_page);} + TCodart_livelli * get_livelli_art() const { return livelli_art; } + + const TString& generated_code() const { return _generated_code; } + const TString& um_principale() const; + void set_um_principale(const char* ump); + TMagazzini& magazzini() { return *_magazzini; } + + TMask_anamag(TRelation * rel); + virtual ~TMask_anamag(); +}; + +//-------------------------------------------- +// APPLICAZIONE +//-------------------------------------------- +class TAnagrafica_magazzino : public TRelation_application +{ + TMask_anamag *_msk; // maschera principale + TRelation *_rel; // relazione principale di un solo file (anagrafiche di magazzino) + real _uc1; + TDate _duc1; + real _uc2; + TDate _duc2; + bool _write_giacenze; + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual TMask *get_mask(int) { return _msk; } + virtual bool changing_mask(int) { return false; } + virtual void init_query_mode(TMask&); + virtual void init_insert_mode(TMask&); + virtual void init_modify_mode(TMask&); + + virtual void on_firm_change(); + bool search_on_file(const char * key, int file, int nkey, const char * field); + virtual bool protected_record(TRectype&); + + virtual int read(TMask& m); + void load_um(TMask& m); + virtual bool remove(); + virtual int write(const TMask& m); + virtual int rewrite(const TMask& m); + + virtual void ini2sheet(TConfig& ini, TSheet_field &sheet); + virtual void sheet2ini(TSheet_field &sheet,TConfig& ini); + + static bool handle_copia(TMask_field &, KEY); // handler della copia articolo + +public: + bool write_giacenze() const {return _write_giacenze;} + void set_write_giacenze(bool on) {_write_giacenze = on;} + + virtual TRelation *get_relation() const { return _rel; } + // @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata + virtual bool check_autorization() const { return false; } + TAnagrafica_magazzino() { _rel = NULL; _msk = NULL;} + virtual ~TAnagrafica_magazzino() {} +}; + +inline TAnagrafica_magazzino& app() { return (TAnagrafica_magazzino&) main_app(); } + +//------------------------------------------------------------------------------------------------- +// METODI DELLA MASCHERA +//------------------------------------------------------------------------------------------------- +//------------------------------------------ +//gestione codice articolo multilivello +//------------------------------------------ +static bool handle_subcodice(TMask_field &fld, KEY k) +{ + TMask &mask=fld.mask(); + if (k == K_TAB && (fld.focusdirty()||!mask.is_running())) //c'e' qualcosa nel campo + { + //quale e' l'ultimo campo valido per codart in multilevel? + short id_last = fld.dlg(); + while (id_last <= F_LIVART9 && mask.id2pos(id_last+1) > 0) + id_last++; + + if (fld.empty()) + { + //gira su tutti i campi di livart esistenti e successivi al livello corrente + for(short id = fld.dlg()+1; id <= id_last; id++) + { + mask.set(id, ""); + mask.disable(id); + } + } + else + { + const int pos = mask.id2pos(fld.dlg()+1); + if (pos > 0) + { + TMask_field& next_fld = mask.fld(pos); + next_fld.enable(); + } + } +//riempie in automatico il campo codice complessivo + TString80 stringone; + bool completo = true; + for(short id = F_LIVART1; id <= id_last; id++) + { + const TString& val = mask.get(id); + if (val.blank()) + { + completo = false; + break; + } + stringone << val; + } + + mask.set(F_CODART, stringone, fld.dlg()==id_last ? 0x3 : 0x0); + } + return true; +} + +void create_browse1(TEdit_field& kfld, int level, short key_id, short des_id, const TCodart_livelli &cal, const bool chktyp) +{ + TFilename tmp; tmp.temp(); + ofstream out(tmp); + + out << "USE GCA" << endl; //usa la tabella dei livelli articolo + + const short id = key_id + level - 1; + const TString& prompt = cal.name(level); + const TString& picture = cal.picture(level); + out << "IN CODTAB[1,1] \"" << level << "\"" << endl; + out << "IN CODTAB[2,0] " << id << endl; + out << "DI \"" << prompt; + const int length = cal.code_length(level); + if (length > prompt.len()) + out << '@' << length; + out << "\" CODTAB[2,0]" << endl; + out << "DI \"" << TR("Descrizione") << "@50\" S0" << endl; + out << "OU " << id << " CODTAB[2,0]" << endl; + out << "OU " << (des_id + level -1) << " S0" << endl; + + if (chktyp) + { + if (level == 1) + out << "CH RE" << endl; + else + out << "CH NO" << endl; + } + out << "EN" << endl; + out.close(); + + TScanner scan(tmp); + while (scan.pop() != "EN") + kfld.parse_item(scan); + + xvt_fsys_remove_file(tmp); +} + +void create_browse2(TEdit_field& kfld, int level, short key_id, short des_id, const TCodart_livelli &cal, const bool chktyp) +{ + TFilename tmp; tmp.temp(); + ofstream out(tmp); + + out << "USE GCA KE 2 SELECT CODTAB[1,1]=='" << level << "'" << endl; //cerca per descrizione + + const short id = des_id + level - 1; + out << "IN S0 " << id << endl; + out << "DI \"" << TR("Descrizione") << "@50\" S0" << endl; + + const TString& prompt = cal.name(level); + out << "DI \"" << prompt; + const int length = cal.code_length(level); + if (length > prompt.len()) + out << '@' << length; + out << "\" CODTAB[2,0]" << endl; + + out << "CO OU " << (key_id + level -1) << endl; + if (chktyp) + out << "CH NO" << endl; + out << "EN" << endl; + out.close(); + + TScanner scan(tmp); + while (scan.pop() != "EN") + kfld.parse_item(scan); + + xvt_fsys_remove_file(tmp); +} + +int create_fields(TMask& msk, int x, int y, short key_id, short des_id, const TCodart_livelli &cal, const bool chktyp) +{ + const int last_level = cal.last_level(); + + int tab0 = x; + int i; + for (i = 1; i <= last_level; i++) //cicla su tutti i livelli del codart abilitati + { + // codice livello articolo + const short kid = key_id+i-1; + const TString& picture = cal.picture(i); + + TString4 flags = "BU"; + if (picture[0] == '0') + flags << 'Z'; + + TEdit_field& kfld = msk.add_string(kid, 0, "", tab0, y, picture.len(), flags); + kfld.set_key(1); + create_browse1(kfld, i, key_id, des_id, cal, chktyp); + + kfld.set_handler(handle_subcodice); + tab0 += picture.len()+3; + } + for (i = 1; i <= last_level; i++) + { + // descrizione livello articolo + const short did = des_id+i-1; + TEdit_field& dfld = msk.add_string(did, 0, "", 200, y, 50, "", 50); + dfld.set_key(1); + create_browse2(dfld, i, key_id, des_id, cal, chktyp); + } + + return cal.last_level(); +} + +void TMask_anamag::set_parametered_fields() +{ + // abilitazioni parametriche + + if (livelli_giac) + delete livelli_giac; + if (livelli_art) + delete livelli_art; + if (_magazzini) + delete _magazzini; + + _magazzini = new TMagazzini; + + // imposta il puntatore al gestore livelli giacenze + livelli_giac= new TCodgiac_livelli(); + livelli_art= new TCodart_livelli(); + // imposta il valore dell'anno per le giacenze + last_annogiac=-1; + last_annosto=-1; + + // Abilita la pagina delle giacenze + const bool gestmag = app().has_module(MGAUT) && magazzini().gestmag(); + + if (gestmag) + { +// sheet giacenze + set_handler(F_ANNO, handle_anno ); + set_handler(F_SHEETGIAC, handle_sheetgiac); + + TSheet_field& sgiac = sfield(F_SHEETGIAC); + sgiac.set_userget(sheetgiac_get); + sgiac.set_userput(sheetgiac_put); + sgiac.sheet_mask().set_handler(F_CODMAG, handle_sheet_giac_codmag); + sgiac.sheet_mask().set_handler(F_VALGIAC, handle_sheet_giac_valgiac); +// sheet storico + set_handler(F_SHEETSTOMAG, handle_sheetstomag); + sfield(F_SHEETSTOMAG).set_notify(notify_sheet_sto); + sfield(F_SHEETSTOMAG).set_userget(sheetsto_get); + sfield(F_SHEETSTOMAG).set_userput(sheetsto_put); + TMask& stomask = sfield(F_SHEETSTOMAG).sheet_mask(); + + stomask.set_handler(F_STOVAL, handle_sheet_stomag_stoval); + stomask.set_handler(F_STOANNOES, handle_stoanno_row); + + set_handler(F_STOANNO, handle_stoanno); + } + + // setta i campi della maschera per la pagina giacenze + TSheet_field &fld_stomag = sfield(F_SHEETSTOMAG); + TSheet_field &fld_giac = sfield(F_SHEETGIAC); + fld_giac.set_notify(notify_sheet_giac); + TSheet_field &fld_cod = sfield(F_SHEETCOD); + + // disabilita le colonne quando non sono utilizzati i livelli di giacenza + for (int i=0; i < 4; i++) + { + livelli_giac->set_sheetcolumn(fld_giac,F_LIV1+i,i+1); + livelli_giac->set_sheetcolumn(fld_cod,FS_LIV1+i,i+1); + if (livelli_giac->autoinsert(i+1)) + { + // codice autoinseribile + TMask_field & campo_liv = fld_giac.sheet_mask().field(F_LIV1+i); + + campo_liv.check_type(CHECK_SEARCH); + campo_liv.set_handler(gestmag ? handle_autoinsert_livgiac : NULL); + + TMask_field & campo_liv_cod = fld_cod.sheet_mask().field(FS_LIV1+i); + + campo_liv_cod.check_type(CHECK_SEARCH); + } + } + + /* + // disabilita la colonna numero distinte + if (FALSE) + { + 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) + const bool ubi = gestmag && magazzini().gestubi_man(); + fld_giac.sheet_mask().field(F_UBICAZ).show(!ubi); + fld_giac.sheet_mask().field(F_UBICAZD).show(!ubi); + fld_giac.sheet_mask().field(F_UBICAZ2).show(ubi); + + // abilita la gestione del monomagazzino + const bool mm = gestmag && magazzini().gestmultimag(); + fld_giac.sheet_mask().field(F_DESMAG).enable(mm); + fld_giac.enable_column(fld_giac.cid2index(F_CODMAG),mm); + fld_giac.enable_column(fld_giac.cid2index(F_CODDEP),gestmag && magazzini().gestdep()); + fld_stomag.enable_column(fld_stomag.cid2index(F_STOCODMAG),mm); + + enable_page(PAGE_GIACENZE,gestmag); + enable_page(PAGE_STORICO,gestmag); + + +// if (app().has_module(LVAUT)) +// set_handler(F_VALCONV, handle_valconv); + + /* abilita la visualizzazione dei campi per la vendita al dettaglio + const bool dettaglio = app().has_module(VDAUT); + show(-G_VD, dettaglio); + */ + + // abilita la visualizzazione dei campi distinti per i livelli articolo + set_handler(F_CODART, handle_codice); +} + +void TMask_anamag::create_user_fields() +{ + TConfig c(CONFIG_DITTA, "ve"); + + _type_cod = c.get_int("GEN_EAN"); + _altype_cod = c.get_int("ALT_EAN"); + _ean8_pref = c.get("EAN8"); + _ean13_pref = c.get("EAN13"); + _ean8_cin = c.get_bool("EAN8CIN"); + _ean13_pref = c.get("EAN13"); + + TString80 prompt; + int page = PAGE_USER; + int row = 4; + int col = 0; + int user_fields = 0; + + //si suppone 20 campi user; sarebbe meglio definire una costante + for (int i = 1; i <= 20; i++) + { + if (c.get_bool("CHK_USER", "ve", i)) + { + TEditable_field * f = NULL; + prompt = c.get("PROMPT_USER", "ve", i); + //se il prompt fosse più lungo di 18 caratteri... + prompt.rpad(18); + prompt.cut(18); + + const char type = c.get_char("TYPE_USER", "ve", i); + + //visto che lo switch funziona con i char... + switch (type) + { + case 'S': + f = &add_string(F_USER1 + i - 1, page, prompt, col, row, c.get_int("LEN_USER", "ve", i)); + break; + case 'N': + f = &add_number(F_USER1 + i - 1, page, prompt, col, row, c.get_int("LEN_USER", "ve", i)); + ((TReal_field *) f)->set_decimals(c.get_int("DEC_USER", "ve", i)); + break; + case 'D': + f = &add_date(F_USER1 + i - 1, page, prompt, col, row); + break; + case 'I': + f = &add_currency(F_USER1 + i - 1, page, prompt, col, row, c.get_int("LEN_USER", "ve", i)); + break; + case 'X': + f = &add_boolean(F_USER1 + i - 1, page, prompt, col, row); + break; + default: + break; + } + //se esiste il campo utente... + if (f != NULL) + { + TString8 u; u.format("USER%d", i); + f->set_field(u); + user_fields++; + row ++; + if (row > 19) + { + col = 40; + row = 4; + } + } + } //if(c.get_bool... + } //for(int i... + + if (user_fields == 0 && !ini_get_bool(CONFIG_DITTA, "ve", "Magic")) + _disabled_user_page = PAGE_USER; +} + +const TString& TMask_anamag::um_principale() const +{ return edit_mode() ? get(F_UMPRINCIPALE) : EMPTY_STRING; } + +void TMask_anamag::set_um_principale(const char* ump) +{ + set(F_UMPRINCIPALE, ump); + set(F_UMPRINCIPALE2, ump); +} + + +// costruttore della maschera anagrafica di magazzino +TMask_anamag::TMask_anamag(TRelation * rel) : TMask("ve2400") +{ + _rel=rel; + + + // sheet unità di misura + set_handler(F_SHEETUM, handle_sheet_um); + TSheet_field &f= sfield(F_SHEETUM); + f.set_notify(notify_sheet_um); + 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); + + TRecord_array* um = new TRecord_array(LF_UMART, "NRIGA"); + f.set_lines_record(*um); + + // sheet descrizioni in lingua + set_handler(F_SHEETDESLIN, handle_sheet_deslin); + // sheet codici corrispondenti + set_handler(F_SHEETCOD, handle_sheet_cod); + TSheet_field &fc= sfield(F_SHEETCOD); + TMask &fmc = fc.sheet_mask(); + fmc.set_handler(FS_CODARTALT, handle_codcorr); + + livelli_giac = NULL; + livelli_art = NULL; + _magazzini = NULL; + + set_parametered_fields(); + + if (!ca_config().get_bool("UsePdcc")) // Creo campi analitici solo se uso vero piano conti analitico + { + ca_create_fields(*this, 6, LF_PCONANA, 1, 9, F_CONTOPCIA, F_DESCRCONTOPCIA, 0, ANAMAG_CONTOINDA); + ca_create_fields(*this, 6, LF_PCONANA, 1,15, F_CONTOPCIV, F_DESCRCONTOPCIV, 0, ANAMAG_CONTOINDV); + } + + create_user_fields(); + + if (livelli_art->enabled()) + { + create_fields(*this, 1, 1, F_LIVART1, F_DESLIVART1, *livelli_art, true); + first_focus(F_LIVART1); + } + else + { + if (advanced_codart_enabled()) + { + TButton_field& bu = add_button(F_ADVANCED, 0, PR("Codice guidato"), 1, 1, 20); + bu.set_handler(advanced_codart_handler); + } + if (!app().has_module(LVAUT, CHK_DONGLE)) + hide(-G_LV); + TConfig c(CONFIG_DITTA, "ve"); + + field(F_CODIVA).check_type(c.get_bool("IVA_OBBL", "ve") && app().has_module(VEAUT, CHK_DONGLE) ? CHECK_REQUIRED : CHECK_NORMAL); + + if (c.get_bool("Magic", "ve")) + { + show(F_ECMAGIC1); + show(F_ECMAGIC2); + show(F_ECMAGIC3); + show(F_ECMAGIC4); + show(F_ECMAGIC_DESCR); + enable(F_ECMAGIC1); + enable(F_ECMAGIC2); + enable(F_ECMAGIC3); + enable(F_ECMAGIC4); + enable(F_ECMAGIC_DESCR); + } + + first_focus(F_CODART); + } +} + +void TMask_anamag::sheetsto_put(TSheet_field &sheet_sto, int item) +{ + if (item>1) return; + TMask_anamag & m=(TMask_anamag & )sheet_sto.mask(); + TRectype & first_rec=sheet_sto.record()->row(1,TRUE); + first_rec.put(STOMAG_ULTCOS1,m.get_real(F_STOULTCOS1 )); + first_rec.put(STOMAG_ULTCOS2,m.get_real(F_STOULTCOS2 )); + first_rec.put(STOMAG_COSTSTD,m.get_real(F_STOCOSTOSTD )); + first_rec.put(STOMAG_COSTOMEDIO,m.get_real(F_STOCOSTOMEDIO )); + first_rec.put(STOMAG_CATVEN,m.get(F_STOCATVEN )); + first_rec.put(STOMAG_CODLISTINO,m.get(F_STOCODLIST)); + first_rec.put(STOMAG_PRZLIST,m.get(F_STOPREZZOLIST )); +} + +void TMask_anamag::sheetsto_get(TSheet_field &sheet_sto, int item) +{ + TMask_anamag & m=(TMask_anamag &) sheet_sto.mask(); + + if (item>1) return; + TRectype & first_rec=sheet_sto.record()->row(1,TRUE); + m.set(F_STOULTCOS1, first_rec.get_real(STOMAG_ULTCOS1)); + m.set(F_STOULTCOS2, first_rec.get_real(STOMAG_ULTCOS2 )); + m.set(F_STOCOSTOSTD, first_rec.get_real( STOMAG_COSTSTD )); + m.set(F_STOCOSTOMEDIO, first_rec.get_real(STOMAG_COSTOMEDIO)); + m.set(F_STOCATVEN , first_rec.get(STOMAG_CATVEN)); + m.set(F_STOCODLIST , first_rec.get(STOMAG_CODLISTINO)); + m.set(F_STOPREZZOLIST ,first_rec.get(STOMAG_PRZLIST)); +} + +bool TMask_anamag::info_sto_dirty() +{ + return field(F_STOULTCOS1).focusdirty() || field(F_STOULTCOS2).focusdirty() || + field(F_STOCOSTOSTD).focusdirty() || field(F_STOCOSTOMEDIO).focusdirty()|| + field(F_STOCATVEN ).focusdirty()|| field(F_STOCODLIST).focusdirty()|| + field(F_STOPREZZOLIST).focusdirty(); +} + +void TMask_anamag::clear_info_sto() +{ + reset(F_STOULTCOS1); + reset(F_STOULTCOS2); + reset(F_STOCOSTOSTD); + reset(F_STOCOSTOMEDIO); + reset(F_STOCATVEN ); + reset(F_STOCODLIST); + reset(F_STOPREZZOLIST); +} + +void TMask_anamag::write_enable(bool on) +{ + TSheet_field& sgiac = sfield(F_SHEETGIAC); + int annoes = get_int(F_ANNORIF); + + app().set_write_giacenze(on); + show(F_WRITEON, on); +} + +bool TMask_anamag::on_key(KEY key) +{ + if (key == K_SHIFT + K_F12) + { + TMask_field& w = field(F_WRITEON); + const bool write = !w.shown(); + + write_enable(write); + } + return TMask::on_key(key); +} + +TMask_anamag::~TMask_anamag() +{ + if (livelli_art) + delete livelli_art; + if (livelli_giac) + delete livelli_giac; + if (_magazzini) + delete _magazzini; +} + + +bool TMask_anamag::handle_autoinsert_livgiac(TMask_field &fld, KEY k) +{ + if (k == K_TAB && fld.focusdirty() && !fld.empty()) + { + TMask_anamag & mask=(TMask_anamag &) fld.mask().get_sheet()->mask(); + const int levnum=fld.dlg()-F_LIV1+1; + return mask.livelli_giac->autoinsert(levnum, fld); + } + return TRUE; +} + + +// HANDLER DEL CODICE: controlla la corrispondenza al formato previsto +bool TMask_anamag::generate_code(int type, const char * codart) +{ + _generated_code.cut(0); + if (type <= 0) + type = _type_cod; + //if (type <= 0) + // return false; + + TString cod(20); + long progr = 0; + + if (type == 8) + { + if (_ean8_pref.empty()) + return false; + cod = _ean8_pref; + cod << "999"; + if (_type_cod != 0) + { + TLocalisamfile anamag(LF_ANAMAG); + anamag.put(ANAMAG_CODART, cod); + + if (anamag.read(_isgteq) != _isemptyfile) + { + cod = anamag.get(ANAMAG_CODART); + + if (_ean8_pref < cod.left(4)) + { + anamag.prev(); + cod = anamag.get(ANAMAG_CODART); + } + if (_ean8_pref == cod.left(4)) + progr = atol(cod.right(3)); + } + } + else + { + TLocalisamfile codcorr(LF_CODCORR); + codcorr.setkey(2); + codcorr.put(CODCORR_CODARTALT, cod); + + if (codcorr.read(_isgteq) != _isemptyfile) + { + cod = codcorr.get(CODCORR_CODARTALT); + + if (_ean8_pref < cod.left(4)) + { + codcorr.prev(); + cod = codcorr.get(CODCORR_CODARTALT); + } + if (_ean8_pref == cod.left(4)) + { + if (_ean8_cin) + progr = atol(cod.mid(4, 3)); + else + progr = atol(cod.right(3)); + } + } + } + progr++; + if (progr < 1000) + { + _generated_code.format("%4s%03ld", (const char*)_ean8_pref, progr); + if (_ean8_cin) + { + int icin = (_generated_code[6]+_generated_code[4]+_generated_code[2]+_generated_code[0] - 4*'0')*3; + icin += _generated_code[5]+_generated_code[3]+_generated_code[1] - 3*'0'; + const char cin = '0' + (10-(icin % 10))%10; + _generated_code << cin; + } + } + else + return error_box(FR("Sono gia' stati generati 1000 codici sul prefisso %s"), (const char*)_ean8_pref); + } + else + if (_ean13_pref.full()) + { + cod = _ean13_pref; + cod << "999999"; + if (_type_cod != 0) + { + TLocalisamfile anamag(LF_ANAMAG); + anamag.put(ANAMAG_CODART, cod); + + if (anamag.read(_isgteq) != _isemptyfile) + { + cod = anamag.get(ANAMAG_CODART); + + if (_ean13_pref < cod.left(6)) + { + anamag.prev(); + cod = anamag.get(ANAMAG_CODART); + } + if (_ean13_pref == cod.left(6)) + progr = atol(cod.right(6)); + } + } + else + { + TLocalisamfile codcorr(LF_CODCORR); + codcorr.setkey(2); + codcorr.put(CODCORR_CODARTALT, cod); + + if (codcorr.read(_isgteq) != _isemptyfile) + { + cod = codcorr.get(CODCORR_CODARTALT); + + if (_ean13_pref < cod.left(6)) + { + codcorr.prev(); + cod = codcorr.get(CODCORR_CODARTALT); + } + if (_ean13_pref == cod.left(6)) + progr = atol(cod.right(6)); + } + } + progr++; + _generated_code.format("%s%06ld", (const char *)_ean13_pref, progr); + } + if (_generated_code.blank() && codart != NULL) + { + TString scod(codart); + cod = scod; + const int len = scod.len(); + cod << "999999"; + TLocalisamfile anamag(LF_ANAMAG); + anamag.put(ANAMAG_CODART, cod); + TString code; + + if (anamag.read(_isgteq) != _isemptyfile) + { + code = anamag.get(ANAMAG_CODART); + + if (cod < code.left(len) || (scod == code.left(len) && !isdigit(code[len]))) + { + anamag.prev(); + code = anamag.get(ANAMAG_CODART); + } + if (scod == code.left(len)) + progr = atol(code.mid(len)); + else + return false; + } + progr++; + TString fmt; + fmt.format("%%s%%0%dld", code.len() - len); + _generated_code.format(fmt, (const char *)scod, progr); + } + return true; +} + +bool TMask_anamag::handle_codice(TMask_field &fld, KEY k) +{ + TMask_anamag &mask=(TMask_anamag &)fld.mask(); + + if (k == K_TAB && !fld.get().blank() && mask.livelli_art->enabled()) + { + TString80 codepart; + + int l; + //ciclo di riempimento dei sottocodici articolo nella maschera + for (l=1; l <= mask.livelli_art->last_level(); l++) + { + const TString pezzo_di_codice = mask.livelli_art->unpack_grpcode(fld.get(),l); + mask.set(F_LIVART1+l-1, pezzo_di_codice); //scrive nei campi del codice a livelli i pezzi + //del codart completo + } + //ciclo di controllo dei sottocodici (devono esistere nella tabella GCA, tutti tranne l'ultimo) + for (l=1; llast_level(); l++) + { + const TString pezzo_di_codice = mask.livelli_art->unpack_grpcode(fld.get(),l); + mask.set(F_LIVART1+l-1, pezzo_di_codice); + codepart.cut(0) << l << pezzo_di_codice; + if (cache().get("GCA", codepart).empty()) + { + 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()) + { + /* Controllo casuale che va migliorato per gestire i sottocodici opzionali + fld.error_box("Il codice articolo non può essere vuoto"); + return(FALSE); + */ + return true; + } + + if (!mask.livelli_art->fit_to_format(codepart)) + { + fld.error_box("Il codice articolo non corrisponde al formato previsto \n('%s' ?? '%s')",(const char *)codepart,(const char *)mask.livelli_art->code_format()); + return(FALSE); + } + } + if (k == K_F8) + { + if (mask.generate_code(0, ((TEditable_field&)fld).get_window_data())) + { + fld.set(mask.generated_code()); + mask.stop_run(K_INS); + } + } + return(TRUE); +} + +bool TMask_anamag::handle_anno(TMask_field &fld, KEY k) +{ + if (k == K_TAB) + { + TMask_anamag &mask=(TMask_anamag &)fld.mask(); + TSheet_field& fld_giac = mask.sfield(F_SHEETGIAC); + + if (mask.get(F_ANNO).empty()) + { + mask.set(F_ANNORIF, esercizi().last()) ; + mask.set(F_ANNO, mask.get(F_ANNORIF)); + } + if (mask.last_annogiac>0 && mask.last_annogiac!=fld.mask().get_int(F_ANNO)) + { + if (app().write_giacenze() && fld_giac.dirty() && handle_sheetgiac(fld_giac,K_ENTER)) + { + if (fld.yesno_box("Salvare le righe di giacenza per l'anno %d",mask.last_annogiac )) + { + int annoes = mask.last_annogiac; + const int original_rows = mask.giacs().items(); + int rows = fld_giac.items(); + TLocalisamfile mag(LF_MAG); + + mag.setkey(2); + rows = min(original_rows, rows); + for (int i = 0; i < rows; i++) + { + TToken_string & original_row = mask.giacs().row(i); + TToken_string & row = fld_giac.row(i); + + if (original_row == row) + { + mag.zero(); + TString16 codmag = original_row.get(fld_giac.cid2index(F_CODMAG)); + + codmag.rpad(3); + codmag << original_row.get(fld_giac.cid2index(F_CODDEP)); + mag.put(MAG_CODMAG, codmag); + mag.put(MAG_CODART, mask.get(F_CODART)); + + TString livello = original_row.get(fld_giac.cid2index(F_LIV1)); + + livello << original_row.get(fld_giac.cid2index(F_LIV2)); + livello << original_row.get(fld_giac.cid2index(F_LIV3)); + livello << original_row.get(fld_giac.cid2index(F_LIV4)); + mag.put(MAG_LIVELLO, livello); + mag.put(MAG_ANNOES, annoes); + + + if (mag.read(_isequal) == NOERR) + fld_giac.autoload_line(i + 1, mag.curr()); + } + } + mask._giacs = fld_giac.rows_array(); + fld_giac.autosave(*mask._rel); + fld_giac.record()->rewrite(); + } + } + mask.write_enable(false); + 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.sort(cmp_rows); + fld_giac.force_update(); + + mask.update_ordc_ordf(); //chiamata del metodo successivo + } + mask.last_annogiac=mask.get_int(F_ANNO); + } + return(TRUE); +} + + +void TMask_anamag::update_ordc_ordf() +{ + real ordc,ordf; + const TDate oggi(TODAY); + int es_corr = esercizi().date2esc(oggi); // setta l'esercizio corrente (data come intero) + int es_pred = esercizi().pred(es_corr); // " " precedente " + + TRecord_array arr(LF_MAG, MAG_NRIGA); + TRectype rec(LF_MAG); // crea un record vuoto di LF_MAG + + for (int j = 0; j < 2; j++) + { + const int anno = j != 0 ? es_pred : es_corr; + if (anno == get_int(F_ANNORIF)) + { + TSheet_field &fld_giac = sfield(F_SHEETGIAC); + const int pos_ordc = fld_giac.cid2index(F_ORDC); + const int pos_ordf = fld_giac.cid2index(F_ORDF); + + FOR_EACH_SHEET_ROW(fld_giac,i,row) + { + ordc += real (row->get(pos_ordc)); + ordf += real (row->get(pos_ordf)); + } + } + else + { + rec.put(MAG_ANNOES, anno); // riempio il record campione + rec.put(MAG_CODART, get(F_CODART)); + arr.read(rec); + for (int i = arr.last_row(); i > 0; i = arr.pred_row(i)) + { + ordc += arr[i].get_real(MAG_ORDC); + ordf += arr[i].get_real(MAG_ORDF); + } + } + } + + set(F_TOT_ORD_CLI, ordc); + set(F_TOT_ORD_FOR, ordf); +} + +bool TMask_anamag::handle_stoanno(TMask_field &fld, KEY k) +{ + static bool in_handler = FALSE; + if (k == K_TAB && fld.focusdirty() && !in_handler) + { + in_handler = TRUE; + TMask_anamag &mask=(TMask_anamag &)fld.mask(); + TSheet_field &fld_stomag= mask.sfield(F_SHEETSTOMAG); + + if (mask.last_annosto>0 && mask.last_annosto!=fld.mask().get_int(F_STOANNO)) + { + if ((fld_stomag.dirty() || mask.info_sto_dirty()) && + fld_stomag.items()>0 ) + { + if (fld.yesno_box("Salvare lo storico per l'anno %d",mask.last_annosto) && + handle_sheetstomag(fld_stomag,K_ENTER)) + { + fld_stomag.autosave(*mask._rel); + fld_stomag.record()->write(TRUE); + } + } + } + // rilegge lo storico relativo a quell'anno ed aggiorna il layout + mask.field(F_STOANNORIF).set(fld.get()); + mask.clear_info_sto(); + fld_stomag.record()->read(*fld_stomag.putkey(*mask._rel)); + fld_stomag.autoload(*mask._rel); + handle_sheetstomag(fld_stomag,K_SPACE); + fld_stomag.force_update(); + mask.last_annosto=mask.get_int(F_STOANNORIF); + if (fld.focusdirty()) + esercizi().update(); + in_handler = FALSE; + } + + return TRUE; +} + +bool TMask_anamag::handle_stoanno_row(TMask_field &fld, KEY k) +{ + if (k == K_TAB && fld.focusdirty()) + esercizi().update(); + + return TRUE; +} + +bool TMask_anamag::handle_sheet_um(TMask_field &fld, KEY k) +{ + TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente + TMask_anamag & m= (TMask_anamag &)(fld.mask()); + if (k == K_ENTER && !m.query_mode()) + { + const int items = f.items(); + if (items > 0) + { + const char *codum=f.cell(0,f.cid2index(FS_CODUM)); + if (*codum<=' ') + return error_box("La prima unità di misura deve essere specificata"); + TAssoc_array v; // istanzia l'hash table per il controllo di univocità + for (int i= 0; i=items) + return error_box(FR("L'unità di misura '%s' deve essere presente in tabella"),(const char*)m.um_principale()); + } + } + } + + return true; +} + +bool TMask_anamag::notify_sheet_um(TSheet_field &fld_um, int r, KEY k) +{ + if (k == K_TAB) + { + fld_um.sheet_mask().enable(DLG_DELREC, r > 0); + if (r == 0) + { + if (fld_um.items() == 0) + fld_um.row(0) = " |1"; // aggiunge una riga allo sheet + else + fld_um.row(0).add("1",fld_um.cid2index(FS_FCUM)); // forza la prima unita' di misura a 1 + fld_um.disable_cell(0, fld_um.cid2index(FS_FCUM)); // 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); + } + } + 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.blank()) + 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à + + TString80 codart; + for (int i= 0; i< items; i++) + { + codart = f.cell(i,0); + if (codart.blank()) + return error_box("I codici alternativi non possono essere vuoti"); + if (codart == m.get(F_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à + if (v.add(codart) && !yesno_box("I codici alternativi devono essere diversi tra loro, si desidera continuare ?")) + return false; // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già + } + } + } + return TRUE; +} + +bool TMask_anamag::handle_codcorr(TMask_field &fld, KEY k) +{ + if (k == K_F8) + { + TMask &m = fld.mask(); // prende la maschere d'origine del campo + TMask_anamag & mask = (TMask_anamag &) m.get_sheet()->mask(); + char val = fld.mask().get(FS_TIPO)[0]; + int type = val == '8' ? 8 : (val == '1' ? 13 : 0); + + if (type > 0 && mask.generate_code(type)) + fld.set(mask.generated_code()); + } + return TRUE; +} + +bool TMask_anamag::notify_sheet_cod(TSheet_field & s, int r, KEY k) +{ + switch (k) + { + case K_CTRL + K_INS: + { + TMask_anamag& mask = (TMask_anamag&)s.mask(); + + if (s.items() == 1) // Genero la prima riga in base ai parametri dei codici alternativi + { + if (mask._altype_cod > 0 && mask.generate_code(mask._altype_cod)) + { + TToken_string& row = s.row(0); + row = mask.generated_code(); + row.add(mask._altype_cod); + } + } + TToken_string & rw = s.row(r); + TSheet_field & um = mask.sfield(F_SHEETUM); + if (um.items() > 0) + rw.add(um.row(0).get(s.cid2index(FS_CODUM)), s.cid2index(FS_CODUMCORR)); + } + break; + case K_ENTER: + { + const TString & codice = s.row(s.selected()).get(s.cid2index(FS_CODARTALT)); + const TRectype &anamag = cache().get(LF_ANAMAG, codice); + const TMask_anamag& mask = (TMask_anamag&)s.mask(); + const TString80 codart(mask.get(F_CODART)); + + if (!anamag.empty()) + return s.error_box("Il codice %s è già un articolo di magazzino", (const char *) codice); + else + { + TLocalisamfile codcorr(LF_CODCORR); + + codcorr.setkey(2); + codcorr.put(CODCORR_CODARTALT, codice); + + if (codcorr.read(_isgteq) == NOERR && codcorr.get(CODCORR_CODARTALT) == codice) + { + if (codcorr.get(CODCORR_CODART) != codart) + return s.yesno_box("Il codice %s è già un codice corrispondente", (const char *) codice); + } + } + + TSheet_field & f = mask.sfield(F_SHEETUM); + + const int items = f.items(); + const TString4 um(s.row(s.selected()).get(s.cid2index(FS_CODUMCORR))); + bool um_ok = false; + + if (items > 0) + { + for (int i= 0; !um_ok && i < items; i++) + { + const TString4 umrow(f.cell(i, f.cid2index(FS_CODUM))); + + um_ok = (um == umrow); + } + } + if (!um_ok) + return s.error_box("L'unità di misura '%s' non e' prevista per l'articolo %s",(const char *) um, (const char *) codart); + } + break; + default: + break; + } + return true; +} + +bool TMask_anamag::handle_sheetgiac(TMask_field &fld, KEY k) +{ + if (k == K_ENTER) + { + TSheet_field &f=(TSheet_field &)fld; + TMask_anamag &m= (TMask_anamag&)f.mask(); // prende la maschere d'origine del campo + const int items = f.items(); + + if (items > 0 && m.magazzini().gestmultimag()) + { + TAssoc_array v; // istanzia l'hash table per il controllo di univocità + + for (int i= 0; i< items; i++) + { + TString codgiac; + m.livelli_giac->pack_grpcode(codgiac, f.cell(i,F_LIV1-FIRST_FIELD),1); + m.livelli_giac->pack_grpcode(codgiac, f.cell(i,F_LIV2-FIRST_FIELD),2); + m.livelli_giac->pack_grpcode(codgiac, f.cell(i,F_LIV3-FIRST_FIELD),3); + m.livelli_giac->pack_grpcode(codgiac, f.cell(i,F_LIV4-FIRST_FIELD),4); + + codgiac << f.cell(i,F_CODMAG-FIRST_FIELD); + codgiac << f.cell(i,F_CODDEP-FIRST_FIELD); + if (codgiac.blank()) + 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"); + if (!notify_sheet_giac(f, i, K_ENTER)) + return FALSE; + } + // ordina le righe per livello+codmag + // f.rows_array().sort(); + } + } + return TRUE; +} + +bool TMask_anamag::handle_valconv(TMask_field& f, KEY k) +{ + if (k == K_ENTER && f.dirty()) + { + if (f.noyes_box(TR("Devo aggiornare il valore convenzionale sui contratti"))) + { + TString filter("(CODART=='"); filter << f.mask().get(F_CODART) << "')"; + TCursor c(new TRelation(LF_LVRCONDV), filter, 1); + const int items = c.items(); + const real val(f.get()); + TProgind * p = NULL; + + if (items > 100) + p = new TProgind(items, TR("Aggiornamento valore convenzionale")); + for (c = 0L; c.pos() < items; ++c) + { + if (p!= NULL) + { + p->addstatus(1L); + if (p->iscancelled()) + break; + } + c.curr().put(LVRCONDV_VALCONV, val); + c.relation()->rewrite(); + } + if (p != NULL) + delete p; + } + if (f.noyes_box(TR("Devo aggiornare il prezzo dei danneggiati sui contratti"))) + { + TString filter("(CODART=='"); filter << f.mask().get(F_CODART) << "')"; + TCursor c(new TRelation(LF_LVRCONDV), filter, 1); + const int items = c.items(); + const real val(f.get()); + TProgind * p = NULL; + + if (items > 100) + p = new TProgind(items, TR("Aggiornamento articoli")); + for (c = 0L; c.pos() < items; ++c) + { + if (p!= NULL) + { + p->addstatus(1L); + if (p->iscancelled()) + break; + } + c.curr().put(LVRCONDV_PREZDAN, val); + c.relation()->rewrite(); + } + if (p != NULL) + delete p; + } + } + return true; +} + + +int TMask_anamag::add_totali_storico(TString & codmag) +{ + TSheet_field &s =(TSheet_field &)field(F_SHEETSTOMAG); + bool need_rigatotali(TRUE); + int r; + + for (r=0 ; r < s.items() && codmag>=s.cell(r,s.cid2index(F_STOCODMAG)); r++) + { + if (*s.cell(r,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI + && codmag==s.cell(r,s.cid2index(F_STOCODMAG))) + need_rigatotali=FALSE; + } + if (need_rigatotali ) + { + real totq,totval; + TLocalisamfile mag(LF_MAG); + mag.setkey(2); + mag.put(MAG_ANNOES,get(F_STOANNORIF)); + //mag.put(MAG_CODART,get(F_CODART)); + mag.put(MAG_CODMAG,codmag); + mag.read(); + while (!mag.eof() + && get_int(F_STOANNORIF)==mag.get_int(MAG_ANNOES) + && strncmp((const char *)codmag,mag.get(MAG_CODMAG),3)==0) + { + if (get(F_CODART)==mag.get(MAG_CODART)) + { + totq+=mag.get_real(MAG_RIM); + totval+=mag.get_real(MAG_VALRIM); + } + mag.next(); + } + s.insert(r,FALSE); + s.row(r ).add(SIMBOLO_TOTALI,s.cid2index(F_STOTIPORIGA)); + s.row(r ).add(codmag,s.cid2index(F_STOCODMAG)); + s.row(r ).add("Totale",s.cid2index(F_STOANNOES)); + s.disable_cell(r,-1); + + s.insert(r+1,FALSE); + s.row(r+1).add(SIMBOLO_TOTALI,s.cid2index(F_STOTIPORIGA)); + s.row(r+1).add(codmag,s.cid2index(F_STOCODMAG)); + s.row(r+1).add("Rim.in",s.cid2index(F_STOANNOES)); + s.row(r+1).add(totq.string(),s.cid2index(F_STOQUANT)); + s.row(r+1).add(totval.string(),s.cid2index(F_STOVAL)); + s.disable_cell(r+1,-1); + } + update_totali_storico(codmag); + return r; +} + +void TMask_anamag::update_totali_storico(TString & codmag) +{ + TSheet_field &s =sfield(F_SHEETSTOMAG); + real tot1,tot2; + // find first occourrence.. + int i=0 ; + while (i< s.items() && codmag>s.cell(i,s.cid2index(F_STOCODMAG))) + i++; + // ...sum... + for (; i< s.items() && *s.cell(i,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI ; i++) + { + tot1+=real(s.cell(i,s.cid2index(F_STOQUANT))); + tot2+=real(s.cell(i,s.cid2index(F_STOVAL))); + } + //... display + if (i< s.items()) + { + s.row(i).add(tot1.string(),s.cid2index(F_STOQUANT)); + s.row(i).add(tot2.string(),s.cid2index(F_STOVAL)); + s.force_update(i); + } +} + + + +bool TMask_anamag::remove_totali_storico(TString & codmag) +{ + if (codmag.blank()) + return FALSE; + + TSheet_field &s =(TSheet_field &)field(F_SHEETSTOMAG); + bool found_some(FALSE); + int r; + + for (r=0 ; !found_some && r< s.items()-1 && !(*s.cell(r,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI + && codmag==s.cell(r,s.cid2index(F_STOCODMAG))); r++) + { + if (*s.cell(r,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI + && codmag==s.cell(r,s.cid2index(F_STOCODMAG))) + found_some=TRUE; + } + if (!found_some) + { + // ultima riga + s.destroy(r,FALSE); + s.destroy(r,FALSE); + } + return !found_some; +} + + +bool TMask_anamag::check_totali_storico() +{ + TSheet_field& s = sfield(F_SHEETSTOMAG); + const int annogiac = get_int(F_ANNO); + if (annogiac != last_annosto) + return true; + + for (int r=0 ; r< s.items() ; r++) + { + // rintraccia il totale + for (; r< s.items() && *s.cell(r,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI; r++) ; + real totq1(s.cell(r,s.cid2index(F_STOQUANT))),totq2(s.cell(r+1,s.cid2index(F_STOQUANT))); + if (totq1!=totq2) + if (!yesno_box("La somma delle composizioni dello storico \nper il magazzino %s non corrisponde \nalla rimanenza iniziale.\n Proseguo ugualmente ?", + (const char *)s.cell(r,s.cid2index(F_STOCODMAG)))) + return FALSE; + TCurrency totval1(real(s.cell(r,s.cid2index(F_STOVAL)))), + totval2(real(s.cell(r+1,s.cid2index(F_STOVAL)))); + if (totval1!=totval2) + return yesno_box("La somma del valore delle composizioni dello storico \n per il magazzino %s non corrisponde \nal valore della rimanenza iniziale.\n Proseguo ugualmente ?", + s.cell(r,s.cid2index(F_STOCODMAG))); + r++; + } + return TRUE; +} + + +bool TMask_anamag::notify_sheet_giac(TSheet_field &f, int i, KEY k) +{ + TMask_anamag& m = (TMask_anamag&)f.mask(); + + const bool gestmag = app().has_module(MGAUT) && m.magazzini().gestmag(); + if (gestmag) + { + switch (k) + { + case (K_ENTER): // fine modifica + { + real ck(f.cell(i,f.cid2index(F_RIM))); + ck+=real(f.cell(i,f.cid2index(F_ACQ))); + ck+=real(f.cell(i,f.cid2index(F_ENTR))); + ck-=real(f.cell(i,f.cid2index(F_VEN))); + ck-=real(f.cell(i,f.cid2index(F_USC))); + ck-=real(f.cell(i,f.cid2index(F_ACL))); + ck+=real(f.cell(i,f.cid2index(F_INCL))); + ck-=real(f.cell(i,f.cid2index(F_INPRODF))); + ck+=real(f.cell(i,f.cid2index(F_INPRODC))); + ck-=real(f.cell(i,f.cid2index(F_SCARTI))); + ck-=real(f.cell(i,f.cid2index(F_GIAC))); + + if (!ck.is_zero()) + return f.error_box("La giacenza deve essere pari a RIM+(ACQ+ENTR)-(VEN+USC)-(ACL-INCL)-(PRODF-PRODC) - SCARTI)"); + + m.update_ordc_ordf(); //chiama la funzione che calcola i totali degli ordinati + } + break; + default: + break; + } + } //if(gestmag... + + //campi presi da altri campi della maschera per.. + //..essere visualizzati nella pag. giacenze + if (k == K_TAB) + { + TMask& sm = f.sheet_mask(); //maschera delle giacenze + + if (sm.field(F_LIV1).hidden()) //l'articolo appare solo se mancano i livelli di giacenza senno'.. + { //..si sovrappongono + sm.show(F_CODARTR); + sm.show(F_DESCRR); + sm.set(F_CODARTR, m.get(F_CODART)); + sm.set(F_DESCRR, m.get(F_DESCR)); + } + else + { + sm.hide(F_CODARTR); + sm.hide(F_DESCRR); + } + sm.set(F_ULC1R, m.get_real(F_ULC1)); + sm.set(F_DATAULC1R, m.get_date(F_DATAULC1)); + sm.set(F_ULC2R, m.get_real(F_ULC1)); + sm.set(F_DATAULC2R, m.get_date(F_DATAULC2)); + } + return true; +} + +bool TMask_anamag::handle_sheet_giac_codmag(TMask_field &f, KEY k) +{ + if (k==K_TAB && f.dirty()) + { + TMask& m = f.mask(); + const TRectype& mag = ((TEdit_field&)f).browse()->cursor()->curr(); + const bool gesdep = mag.get_bool("B0"); + + m.enable(F_CODDEP, gesdep); + m.show(F_DESDEP, gesdep); + if (gesdep) + m.field(F_CODDEP).check(); + else + { + m.set(F_CODDEP, ""); + m.set(F_DESDEP, ""); + } + } + return TRUE; +} + + +bool TMask_anamag::handle_sheet_giac_valgiac(TMask_field &f, KEY k) +{ + if (k==K_TAB && f.dirty()) + { + TMask& m = f.mask(); + real q=m.get_real(F_RIM)+m.get_real(F_ACQ); + if (q.is_zero()) + f.set(q.string()); + else + { + q=(m.get_real(F_VRIM)+m.get_real(F_VACQ))/q; + TPrice r(q); + f.set(r.get_num().string()); + } + } + return TRUE; +} + +bool TMask_anamag::handle_sheet_stomag_stoval(TMask_field &f, KEY k) +{ + if (k == K_TAB && f.dirty()) + { + TMask& m = f.mask(); + const real val = m.get_real(F_STOQUANT) * m.get_real(F_STOVALUN); + const TCurrency c(val); + m.set(F_STOVAL, c); + } + return TRUE; +} + +bool TMask_anamag::notify_sheet_sto(TSheet_field &s, int r, KEY k) +{ + static TString16 oldcodmag,newcodmag,oldanno,newanno; + TMask_anamag & m=(TMask_anamag &)s.mask(); + + switch (k) + { + case K_DEL: + if (*s.cell(r,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI) + return FALSE; + break; + + case (K_CTRL+K_DEL): + if (m.remove_totali_storico(oldcodmag)) + s.force_update(); + break; + + case K_TAB: // posizionamento sulla riga + oldcodmag=s.cell(r,s.cid2index(F_STOCODMAG)); + oldanno=s.cell(r,s.cid2index(F_STOANNOES)); + break; + + case (K_ENTER): // fine modifica + + newanno=(s.cell(r,s.cid2index(F_STOANNOES))); + newcodmag=(s.cell(r,s.cid2index(F_STOCODMAG))); + + if (esercizi()[atoi(newanno)].inizio() >= esercizi()[m.get_int(F_STOANNO)].inizio()) + { + s.row(r).add(oldanno,s.cid2index(F_STOANNOES)); + s.error_box("La rimanenza iniziale di un esercizio deve essere composta da parti provenienti da esercizi precedenti"); + return FALSE; + } + // modifica + m.update_totali_storico(newcodmag); + if (oldcodmag==s.cell(r,s.cid2index(F_STOCODMAG))) + { + if (oldanno==s.cell(r,s.cid2index(F_STOANNOES)) ) + break; + } else { + m.remove_totali_storico(oldcodmag); + } + case (K_CTRL + K_INS ): // fine inserimento + if (*s.cell(r,s.cid2index(F_STOCODMAG))==' ' && m.magazzini().standardmag().not_empty()) + { + // new line + s.row(r).add(m.magazzini().standardmag(),s.cid2index(F_STOCODMAG)); + } + + newcodmag=(s.cell(r,s.cid2index(F_STOCODMAG))); + newanno=(s.cell(r,s.cid2index(F_STOANNOES))); + if (newcodmag != " ") + { + // ordina + while (r< s.items()-1 && (newcodmag > s.cell(r+1,s.cid2index(F_STOCODMAG)) || + (newcodmag == s.cell(r+1,s.cid2index(F_STOCODMAG)) && + (newanno > s.cell(r+1,s.cid2index(F_STOANNOES)) && *s.cell(r+1,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI)) )) + { + s.swap_rows(r,r+1); + r++; + } + while (r>0 && (newcodmag < s.cell(r-1,s.cid2index(F_STOCODMAG)) || + (newcodmag == s.cell(r-1,s.cid2index(F_STOCODMAG)) && + (newanno < s.cell(r-1,s.cid2index(F_STOANNOES)) || *s.cell(r-1,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI )) )) + { + s.swap_rows(r,r-1); + r--; + } + m.add_totali_storico(newcodmag); +// TSheet_field & s_um=(TSheet_field & )s.mask().field(F_SHEETUM); // qui verificare + s.force_update(); + } + break; + + case (K_INS): // richiesta di inserimento + break; + + } + return TRUE; +} + + + +bool TMask_anamag::handle_sheetstomag(TMask_field &fld, KEY k) +{ + TSheet_field & f=(TSheet_field &)fld; + TMask_anamag &m=(TMask_anamag &) f.mask(); // prende la maschere d'origine del campo + if (k==K_ENTER) + { + const int items = f.items(); + real totrim,totvalrim; + + if (items > 0) + { + if (!m.check_totali_storico()) + return FALSE; + TAssoc_array v; // istanzia l'hash table per il controllo di univocitˆ + int i; + + for (i= 0; i< items; i++) + { + if (*f.cell(i,f.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI) + { + TString codmg(f.cell(i,f.cid2index(F_STOCODMAG))); + TString codeser(f.cell(i,f.cid2index(F_STOANNOES))); + if (codmg.blank()) + return error_box("Il codice del magazzino non può essere vuoto"); + if (codeser.blank()) + 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à + codmg.overwrite(codeser,3); + if (v.add(codmg)) + return error_box("La composizione delle rimanenze deve far riferimento a esercizi tutti diversi tra loro"); + TLocalisamfile stor_aux(LF_STOMAG); + + stor_aux.put(STOMAG_CODART,fld.mask().get(F_CODART)); + stor_aux.put(STOMAG_ANNOESRIF,fld.mask().get(F_STOANNO)); + stor_aux.put(STOMAG_ANNOES,codeser); + + totrim=totrim+(real)f.cell(i,f.cid2index(F_STOQUANT)); + totvalrim=totvalrim+(real)f.cell(i,f.cid2index(F_STOVAL)); + } + } + for (i= 0; i< items;) + { + if (*f.cell(i,f.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI) + f.rows_array().remove(i,TRUE); + else + i++; + } + // ordina le righe per ANNO + //f.rows_array().sort(); + if ( m.get(F_STOANNO)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 rif_first_um(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura di rapporto + real rif_fc_first_um(t.get_real("R10")); // prende il suo fattore di conversione + rif_fc_first_um = rif_fc_first_um.is_zero() ? 1 : rif_fc_first_um; + + if (rif_first_um == rif_um) + { + x /= rif_fc_first_um; // calcola il rapporto tra i fattori di conversione + x.round(5); // arrotonda il risultato a 5 decimali + } else { + if (rif_first_um == curr_um) { + x= 1/rif_fc_first_um; + } + } + } + } + } + if (x == ZERO) + x = 1.00; + m.set(FS_FCUM, x); // il risultato viene scritto nel campo del fattore di conversione + } + else + { + TMask_anamag& m = (TMask_anamag&)f->mask(); + if (m.um_principale().blank()) + m.set_um_principale(curr_um); + } + } + } + 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; + TCodiceIVA iva(codiva); + + if (f.dlg() == FS_PREZZO) + { + netto = real(m.get(FS_PREZZO)); + lordo = iva.lordo(netto, AUTO_PRICES_DECIMALS, TCurrency::get_firm_val()); + m.set(FS_PREZZO_LORDO,lordo.string()); + } + else + { + lordo = real(m.get(FS_PREZZO_LORDO)); + real prec_lordo = lordo; + const real imposta = iva.scorpora(lordo, AUTO_PRICES_DECIMALS, TCurrency::get_firm_val()); + netto = lordo; + lordo += imposta; + 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); + } +} + +// Aggiorna il valore delle giacenze in base al cambiamento dell'unità di misura principale +void TMask_anamag::ricalcola_giacenze() +{ + real fc(UNO); + TSheet_field& f= sfield(F_SHEETUM); + if (um_principale().full() && um_principale()!=f.cell(0,f.cid2index(FS_CODUM))) + { + int i; + + for (i= 0; i 0); // qui verificare + } + write_enable(false); +} + +//--------------------------------------- +//fine gestione articolo multilivello +//--------------------------------------- + +//------------------------------------------------------------------------------------------------- +// METODI DELL'APPLICAZIONE +//------------------------------------------------------------------------------------------------- +void TAnagrafica_magazzino::on_firm_change() +{ + if (_msk) + _msk->set_parametered_fields(); +} + +bool TAnagrafica_magazzino::search_on_file(const char * key, int file, int nkey, const char * field) +{ + TLocalisamfile f(file); + + if (f.empty()) + return FALSE; + else + { + f.setkey(nkey); + f.put(field, key); + f.read(); + return f.get(field) == key; + } +} + +bool TAnagrafica_magazzino::protected_record(TRectype& rec) +{ + const TString art(rec.get(ANAMAG_CODART)); + const TRectype & dist = cache().get(LF_DIST, art); + + if (!dist.empty()) + return TRUE; + else + if (search_on_file(art, LF_RDIST, 2, "CODCOMP")) + return TRUE; + else + return search_on_file(art, LF_RMOVMAG, 2, "CODART"); +} + +bool TAnagrafica_magazzino::user_create() +{ + open_files(LF_TAB, LF_TABCOM, LF_ANAMAG, LF_MAG, LF_STOMAG, + LF_UMART, LF_CODCORR, LF_DESLIN, LF_DIST, LF_RDIST, LF_RMOVMAG, + LF_CLIFO, LF_PCON, 0); + + // crea l'oggetto per i parametri di livello giacenza + // apre la maschera e dispone gli sheet + _rel= new TRelation(LF_ANAMAG); + if (ini_get_bool(CONFIG_DITTA, "ve", "Magic")) + _rel->add("&ATM","CODTAB==" ANAMAG_CODART, 1, LF_ANAMAG, ECAUT); + + //gestisce i campi salvati sulla tabella di modulo lv047 (lvanamag) + _rel->add("&LV047" ,"CODTAB==" ANAMAG_CODART, 1, LF_ANAMAG, LVAUT); + _rel->write_enable(-LVAUT); //abilita la lettura / scrittura sul record collegato + + _msk= new TMask_anamag(_rel); + + set_search_field(F_CODART); //serve per avere come campo di ricerca il codice articolo intero + //invece che l'ultimo campo del codice multilivello (se c'e') + return TRUE; +} + +bool TAnagrafica_magazzino::user_destroy() +{ + delete _rel; + delete _msk; + return true; +} + +int TAnagrafica_magazzino::read(TMask& m) +{ + int err= TRelation_application::read(m); + if (err == NOERR) + { + _write_giacenze = false; + _uc1 = get_relation()->file().get_real(ANAMAG_ULTCOS1); + _duc1 = get_relation()->file().get_date(ANAMAG_DULTCOS1); + _uc2 = get_relation()->file().get_real(ANAMAG_ULTCOS2); + _duc2 = get_relation()->file().get_date(ANAMAG_DULTCOS2); + // LETTURA SHEET STORICO MAGAZZINO IN AUTOMATICO + TSheet_field &fld_stomag= m.sfield(F_SHEETSTOMAG); + fld_stomag.sheet_mask().field(F_STOCODART).set(m.field(F_CODART).get()); // necessario se lo sheet è vuoto + + // ***************************** + // LETTURA SHEET UNITA' DI MISURA + load_um(m); + ((TMask_anamag&) m).update_ordc_ordf(); //chiama la funzione che calcola i totali degli ordinati + } + TSheet_field &fld_giac= m.sfield(F_SHEETGIAC); + + fld_giac.sort(cmp_rows); + ((TMask_anamag&) m).giacs() = fld_giac.rows_array(); + return err; +} + +void TAnagrafica_magazzino::load_um(TMask& m) +{ + // ***************************** + // LETTURA SHEET UNITA' DI MISURA + TSheet_field &fld_um= m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura + get_relation()->curr().put(ANAMAG_CODART,m.get(F_CODART)); + fld_um.record()->read(*fld_um.putkey(*get_relation())); + fld_um.autoload(*get_relation()); +// else +// ((TToken_string &)fld_um.row(0)).add("1",fld_um.cid2index(FS_FCUM)); // forza la prima unita' di misura a 1 +// fld_um.disable_cell(0, fld_um.cid2index(FS_FCUM)); // 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 + + TString4 um_principale; + if (m.edit_mode()) + um_principale = fld_um.cell(0, fld_um.cid2index(FS_CODUM)); + ((TMask_anamag&)m).set_um_principale(um_principale); +} + +bool TAnagrafica_magazzino::remove() +{ + bool ok = TRelation_application::remove(); + if (ok) + { + TMask& m = curr_mask(); + TSheet_field& f = m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura + TLocalisamfile distinte(LF_DIST); + distinte.put("CODDIST", m.get(F_CODART)); + int err = distinte.read();// esiste la distinta ? + switch(err) + { + case _iskeynotfound : + case _isemptyfile : + case _iseof: + ok &= (f.record()->remove() == NOERR); + break; + default: + break; + } + } + return ok; +} + +int TAnagrafica_magazzino::write(const TMask& m) +{ + + int err = TRelation_application::write(m); + if (err == NOERR) + { + TSheet_field& f = m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura + err = f.record()->write(FALSE); + } + return err; +} + +int TAnagrafica_magazzino::rewrite(const TMask& m) +{ + TSheet_field & fld_giac= m.sfield(F_SHEETGIAC); + + + if (_uc1 == get_relation()->file().get_real(ANAMAG_ULTCOS1) && + _duc1 == get_relation()->file().get_date(ANAMAG_DULTCOS1) && + _uc2 == get_relation()->file().get_real(ANAMAG_ULTCOS2) && + _duc2 == get_relation()->file().get_date(ANAMAG_DULTCOS2)) + { + TLocalisamfile anag(LF_ANAMAG); + const TString40 codice(get_relation()->file().get(ANAMAG_CODART)); + + anag.put(ANAMAG_CODART, codice); + const int err = anag.read(_isequal); + + if (err == NOERR) + { + get_relation()->file().put(ANAMAG_ULTCOS1, anag.get(ANAMAG_ULTCOS1)); + get_relation()->file().put(ANAMAG_DULTCOS1, anag.get(ANAMAG_DULTCOS1)); + get_relation()->file().put(ANAMAG_ULTCOS2, anag.get(ANAMAG_ULTCOS2)); + get_relation()->file().put(ANAMAG_DULTCOS2, anag.get(ANAMAG_DULTCOS2)); + } + else + { + error_box(FR("non riesco a leggere il codice %s : Errore %d"), (const char *) codice, err); + fld_giac.record()->read(*fld_giac.putkey(*get_relation())); + fld_giac.autoload(*get_relation()); + fld_giac.sort(cmp_rows); + + return err; + } + } + if (_write_giacenze) + { + int annoes = m.get_int(F_ANNORIF); + const int original_rows = ((TMask_anamag&)m).giacs().items(); + int rows = fld_giac.items(); + TLocalisamfile mag(LF_MAG); + + mag.setkey(2); + rows = min(original_rows, rows); + for (int i = 0; i < rows; i++) + { + TToken_string & original_row = ((TMask_anamag&)m).giacs().row(i); + TToken_string & row = fld_giac.row(i); + + if (original_row == row) + { + mag.zero(); + mag.put(MAG_ANNOES, annoes); + TString16 codmag = original_row.get(fld_giac.cid2index(F_CODMAG)); + + codmag.rpad(3); + codmag << original_row.get(fld_giac.cid2index(F_CODDEP)); + mag.put(MAG_CODMAG, codmag); + mag.put(MAG_CODART, m.get(F_CODART)); + + TString livello = original_row.get(fld_giac.cid2index(F_LIV1)); + + livello << original_row.get(fld_giac.cid2index(F_LIV2)); + livello << original_row.get(fld_giac.cid2index(F_LIV3)); + livello << original_row.get(fld_giac.cid2index(F_LIV4)); + mag.put(MAG_LIVELLO, livello); + + if (mag.read(_isequal) == NOERR) + fld_giac.autoload_line(i + 1, mag.curr()); + } + } + } + else + { + fld_giac.record()->read(*fld_giac.putkey(*get_relation())); + fld_giac.autoload(*get_relation()); + fld_giac.sort(cmp_rows); + } + int err =TRelation_application::rewrite(m); + + if (err == NOERR) + { + TSheet_field& f= m.sfield(F_SHEETUM); // prende lo sheet delle unità di misura + err|=f.record()->write(TRUE); + } + ((TMask_anamag &)m).ricalcola_giacenze(); + return err; +} + +static bool non_esiste_handler(TMask_field& f, KEY k) +{ + switch (k) + { + case K_TAB: + if (!f.mask().is_running()) + f.reset(); + break; + case K_ENTER: + if (!cache().get(LF_ANAMAG, f.mask().get(F_CODART)).empty()) + return f.error_box(TR("Il codice articolo selezionato esiste già")); + default: + break; + } + return true; +} + +bool TAnagrafica_magazzino::handle_copia(TMask_field &fld, KEY k) +{ + if (k == K_SPACE) + { + TMask_anamag & m = (TMask_anamag &) fld.mask(); + const TString oldart = m.get(F_CODART); + + TString codart, descart, descagg; + if (advanced_codart_enabled()) + { + codart = oldart; + if (!advanced_codart_ask(codart, descart)) + codart.cut(0); + else + { + descagg = descart.mid(50); + descart = descart.left(50); + } + } + else + { + const TCodart_livelli* liv_art = m.get_livelli_art(); + + TMask ask("ve2400k"); + ask.set_handler(F_CODART, non_esiste_handler); + if(liv_art && liv_art->enabled()) + { + create_fields(ask, 1, 1, F_LIVART1, F_DESLIVART1, *liv_art, false); + for (int i = liv_art->last_level(); i > 0; i--) + { + const short id = F_LIVART1+i-1; + ask.set(id, m.get(id)); + } + ask.reset(F_CODART); + } + if (ask.run() == K_ENTER) + codart = ask.get(F_CODART); + } + + if (codart.full() && codart != oldart) + { + if (descart.full()) + m.set(F_DESCR, descart); + if (descagg.full()) + m.set(F_DESCRAGG, descagg); + + + m.set(F_CODART, codart, TRUE); + + m.sfield(F_SHEETGIAC).destroy(); + m.sfield(F_SHEETSTOMAG).destroy(); + + m.load_profile(0, FALSE); + + m.set_mode(MODE_INS); + xvtil_statbar_set(TR("Inserimento"), TRUE); + } + } + return TRUE; +} + +void TAnagrafica_magazzino::init_query_mode(TMask &m) +{ + m.hide(F_COPY); + + if (advanced_codart_enabled()) + m.show(F_ADVANCED); + write_enable(false); + ((TMask_anamag&)m).set_um_principale(""); +} + +void TAnagrafica_magazzino::init_insert_mode(TMask &m) +{ + load_um(m); + TSheet_field& f = m.sfield(F_SHEETUM); + if (f.items() == 0) + f.row(0) = " |1"; // aggiunge una riga allo sheet + + if (advanced_codart_enabled()) + m.hide(F_ADVANCED); + write_enable(false); + ((TMask_anamag&)m).disable_user_page(); +} + +void TAnagrafica_magazzino::init_modify_mode(TMask &m) +{ + m.set_handler(F_COPY, handle_copia); + m.show(F_COPY); + + if (advanced_codart_enabled()) + m.hide(F_ADVANCED); + write_enable(false); + ((TMask_anamag&)m).disable_user_page(); +} + +void TAnagrafica_magazzino::ini2sheet(TConfig& ini, TSheet_field &sheet) +{ + switch(sheet.dlg()) + { + case F_SHEETGIAC: + case F_SHEETSTOMAG: + break; // do nothing + default: + TRelation_application::ini2sheet(ini, sheet); + } +} + +void TAnagrafica_magazzino::sheet2ini(TSheet_field &sheet,TConfig& ini) +{ + switch(sheet.dlg()) + { + case F_SHEETGIAC: + case F_SHEETSTOMAG: + break; // do nothing + default: + TRelation_application::sheet2ini(sheet, ini); + } +} + +// ************************ +// +int ve2400(int argc, char* argv[]) +{ + TAnagrafica_magazzino a; + + a.run(argc, argv, TR("Anagrafica di magazzino")); + return 0; +} + + + diff --git a/src/ve/ve2400.h b/src/ve/ve2400.h index 9117963a4..0284fdbee 100755 --- a/src/ve/ve2400.h +++ b/src/ve/ve2400.h @@ -1,275 +1,279 @@ -#define F_CODART 111 -#define F_DESCR 112 -#define F_COPY 119 -#define F_ADVANCED 118 - -#define F_GRMERC 113 -#define F_GRMERCD1 116 -#define H_GRMERCD1 115 -#define F_GRMERCB 114 -#define F_GRMERCD2 117 - -#define F_UMA 121 -#define F_FCA 122 -#define F_UMV 123 -#define F_UM2 124 -#define F_FC2 125 -#define F_UM3 126 -#define F_CATCONA 127 -#define F_CATCONA1 128 -#define F_GRUPPOA 129 -#define F_CONTOA 130 -#define F_SOTTOCA 131 -#define F_DESCRA 132 -#define F_CATCONV 133 -#define F_CATCONV1 134 -#define F_GRUPPOV 135 -#define F_CONTOV 136 -#define F_SOTTOCV 137 -#define F_DESCRV 138 -#define F_UMP 139 -#define F_PESO 140 -#define F_CLASSDOG 141 -#define F_CLASSDOGD 142 -#define F_UBICAZIONE 143 -#define F_UBICAZIONE1 144 -#define F_COSTSTD 145 -#define F_CODIVA 146 -#define F_CODFORN 148 -#define F_CODFORN1 149 -#define F_ARTFIS 150 -#define F_RAGGFIS 152 -#define F_RAGGFIS1 153 -#define F_CLASSEFIS 154 -#define H_CLASSEFIS 155 -#define F_CLASSEFISD 156 -#define F_ARTPROD 157 -#define F_TIPOCF 158 -#define F_PRESIDIO 159 - -#define F_CODIVAR 160 -#define F_SCONTO 161 -#define F_PROVV 162 -#define F_TARA 163 -#define F_PPCONF 164 -#define F_PPCOLLO 165 -#define F_ULC1 166 -#define F_DATAULC1 167 -#define F_ULC2 168 -#define F_DATAULC2 169 -#define F_MASSANUN 170 -#define F_UNSUPPUN 171 -#define F_PROVOR 172 -#define F_PROVOR2 173 -#define F_RICARICO 174 -#define F_RIORDINO 175 -#define F_A_LOTTORIOR 176 -#define F_A_LOTTOIRIOR 177 -#define F_A_GIORNIRIOR 178 - - - - -#define F_INDBILA 179 -#define F_INDBILV 180 - -#define F_GOLEM 181 - -#define H_ANNO 182 -#define F_ANNO 183 -#define F_ANNORIF 184 - -#define F_STOANNO 185 -#define F_STOANNORIF 186 -#define F_UMPRINCIPALE 187 -#define F_UMPRINCIPALE2 188 - -#define F_GCA 189 -#define F_LIVART1 190 -#define F_LIVART2 191 -#define F_LIVART3 192 -#define F_LIVART4 193 -#define F_LIVART5 194 -#define F_LIVART6 195 -#define F_LIVART7 196 -#define F_LIVART8 197 -#define F_LIVART9 198 -#define F_DESLIVART1 390 -#define F_DESLIVART2 391 -#define F_DESLIVART3 392 -#define F_DESLIVART4 393 -#define F_DESLIVART5 394 -#define F_DESLIVART6 395 -#define F_DESLIVART7 396 -#define F_DESLIVART8 397 -#define F_DESLIVART9 398 -#define F_LUNGH 399 -#define F_LARGH 400 - -#define F_ARTALT 199 -#define F_DESCRALT 200 - -#define F_SHEETUM 201 -#define F_SHEETDESLIN 202 -#define F_SHEETCOD 203 -#define F_SHEETGIAC 204 -#define F_SHEETSTOMAG 205 - -#define F_STOULTCOS1 210 -#define F_STOULTCOS2 211 -#define F_STOCOSTOSTD 212 -#define F_STOCOSTOMEDIO 213 -#define F_STOCATVEN 214 -#define F_STOCODLIST 215 -#define F_STOPREZZOLIST 216 - -#define F_STOTOTALE_RIM 217 -#define F_STOTOTALE_VAL 218 - -#define F_SEARCHLAV 260 -#define F_CODICELAV 261 -#define F_DESCRAGG 262 -#define F_COLLTYPE 263 -#define F_CODMAGAN 264 -#define F_VALDIST 265 -#define F_DATAVDIST 266 - - -#define F_CONACC 281 -#define F_CONALL 282 -#define F_CONCAR 283 -#define F_CONPLA 284 -#define F_CONLEG 285 -#define F_CONVET 286 -#define F_VALSTATUN 287 -#define F_PAESEOR 288 - -#define F_NUMREGULC1 300 -#define F_NUMRIGULC1 301 -#define F_NUMREGULC2 302 -#define F_NUMRIGULC2 303 -#define F_SOSPESO 304 -#define F_REPARTO 305 -#define F_DESREPARTO 306 -#define F_STAGIONE 307 -#define F_DESSTAGIONE 308 -#define F_LIVPERART 309 - -#define F_TIPOLOGIA 310 -#define F_COLORE 311 -#define F_LIVELLO 312 -#define F_PPPALLET 313 -#define F_TIPOPARTE 314 -#define F_CODLAV1 315 -#define F_CODLAV2 316 -#define F_LINDEST1 317 -#define F_LINDEST2 318 -#define F_LAVATRICE 319 -#define F_ARTLAVCONT 320 -#define F_MANGDEST 321 -#define F_RIEMPI_C_XS 322 -#define F_RIEMPI_C_M 323 -#define F_RIEMPI_C_XL 324 -#define F_NORMALE_XS 325 -#define F_NORMALE_M 326 -#define F_NORMALE_XL 327 -#define F_RIEMPI_S_XS 328 -#define F_RIEMPI_S_M 329 -#define F_RIEMPI_S_XL 330 -#define F_PRECEDENZA 331 -#define F_TPARTICOLO 332 -#define F_DESCR_ETI 333 - -#define F_SCAACC 334 -#define F_SCAALL 335 -#define F_SCACAR 336 -#define F_SCAPLA 337 -#define F_SCALEG 338 -#define F_SCAVET 339 -#define F_ECMAGIC1 340 -#define F_ECMAGIC2 341 -#define F_ECMAGIC3 342 -#define F_ECMAGIC4 343 -#define F_ECMAGIC_DESCR 344 - -#define F_USER1 371 -#define F_USER2 372 -#define F_USER3 373 -#define F_USER4 374 -#define F_USER5 375 -#define F_USER6 376 -#define F_USER7 377 -#define F_USER8 378 -#define F_USER9 379 -#define F_USER10 380 -#define F_USER11 381 -#define F_USER12 382 -#define F_USER13 383 -#define F_USER14 384 -#define F_USER15 385 -#define F_USER16 386 -#define F_USER17 387 -#define F_USER18 388 -#define F_USER19 389 -#define F_USER20 390 - -#define F_CONTOPCIA 401 -#define F_DESCRCONTOPCIA 411 - -#define F_CONTOPCIV 451 -#define F_DESCRCONTOPCIV 461 - -#define G_CODART 1 -#define G_DESART 2 -#define G_GRMERC 3 -#define G_CATACQ 4 -#define G_CONACQ 5 -#define G_CATVEN 6 -#define G_CONVEN 7 -#define G_RAGGFISC 8 -// #define G_VD 9 Vendite al dettaglio Obsolete -#define G_LV 10 - -// definizioni per l'archivio di misura articoli -#define FS_CODUM 101 -#define FS_FCUM 102 -#define FS_PREZZO 103 -#define FS_PREZZO_LORDO 104 - -// definizioni per l'archivio descrizioni in lingua estera -#define FS_CODLIN 101 -#define FS_DESCR 102 - -// definizioni per l'archivio codici corrispondenti -#define FS_CODARTALT 101 -#define FS_TIPO 102 -#define FS_CODUMCORR 103 -#define FS_LIV1 104 -#define FS_LIV2 105 -#define FS_LIV3 106 -#define FS_LIV4 107 -#define FS_TIPOCF 108 -#define FS_CODCF 109 -#define FS_RAGCF 110 -#define FS_DESCRC 111 - -// definizioni per l'archivio giacenze -#include "ve2400d.h" - -// definizioni per l'archivio storico giacenze -#define F_STOTIPORIGA 101 -#define F_STOCODMAG 102 -#define F_STOANNOES 103 -#define F_NOMETOT 203 -#define F_STOQUANT 104 -#define F_STOVALUN 105 -#define F_STOVAL 106 -#define F_STOCODART 120 - -#define PAGE_GIACENZE 4 -#define PAGE_STORICO 5 -#define PAGE_USER 8 -#define SIMBOLO_TOTALI '>' - -#define F_TOT_ORD_FOR 350 -#define F_TOT_ORD_CLI 351 +#define F_CODART 111 +#define F_DESCR 112 +#define F_COPY 119 +#define F_ADVANCED 118 + +#define F_GRMERC 113 +#define F_GRMERCD1 116 +#define H_GRMERCD1 115 +#define F_GRMERCB 114 +#define F_GRMERCD2 117 + +#define F_UMA 121 +#define F_FCA 122 +#define F_UMV 123 +#define F_UM2 124 +#define F_FC2 125 +#define F_UM3 126 +#define F_CATCONA 127 +#define F_CATCONA1 128 +#define F_GRUPPOA 129 +#define F_CONTOA 130 +#define F_SOTTOCA 131 +#define F_DESCRA 132 +#define F_CATCONV 133 +#define F_CATCONV1 134 +#define F_GRUPPOV 135 +#define F_CONTOV 136 +#define F_SOTTOCV 137 +#define F_DESCRV 138 +#define F_UMP 139 +#define F_PESO 140 +#define F_CLASSDOG 141 +#define F_CLASSDOGD 142 +#define F_UBICAZIONE 143 +#define F_UBICAZIONE1 144 +#define F_COSTSTD 145 +#define F_CODIVA 146 +#define F_CODFORN 148 +#define F_CODFORN1 149 +#define F_ARTFIS 150 +#define F_RAGGFIS 152 +#define F_RAGGFIS1 153 +#define F_CLASSEFIS 154 +#define H_CLASSEFIS 155 +#define F_CLASSEFISD 156 +#define F_ARTPROD 157 +#define F_TIPOCF 158 +#define F_PRESIDIO 159 + +#define F_CODIVAR 160 +#define F_SCONTO 161 +#define F_PROVV 162 +#define F_TARA 163 +#define F_PPCONF 164 +#define F_PPCOLLO 165 +#define F_ULC1 166 +#define F_DATAULC1 167 +#define F_ULC2 168 +#define F_DATAULC2 169 +#define F_MASSANUN 170 +#define F_UNSUPPUN 171 +#define F_PROVOR 172 +#define F_PROVOR2 173 +#define F_RICARICO 174 +#define F_RIORDINO 175 +#define F_A_LOTTORIOR 176 +#define F_A_LOTTOIRIOR 177 +#define F_A_GIORNIRIOR 178 + + + + +#define F_INDBILA 179 +#define F_INDBILV 180 + +#define F_GOLEM 181 + +#define H_ANNO 182 +#define F_ANNO 183 +#define F_ANNORIF 184 + +#define F_STOANNO 185 +#define F_STOANNORIF 186 +#define F_UMPRINCIPALE 187 +#define F_UMPRINCIPALE2 188 + +#define F_GCA 189 +#define F_LIVART1 190 +#define F_LIVART2 191 +#define F_LIVART3 192 +#define F_LIVART4 193 +#define F_LIVART5 194 +#define F_LIVART6 195 +#define F_LIVART7 196 +#define F_LIVART8 197 +#define F_LIVART9 198 + + +#define F_DESLIVART1 390 +#define F_DESLIVART2 391 +#define F_DESLIVART3 392 +#define F_DESLIVART4 393 +#define F_DESLIVART5 394 +#define F_DESLIVART6 395 +#define F_DESLIVART7 396 +#define F_DESLIVART8 397 +#define F_DESLIVART9 398 +#define F_LUNGH 399 +#define F_LARGH 400 + +#define F_ARTALT 199 +#define F_DESCRALT 200 + +#define F_SHEETUM 201 +#define F_SHEETDESLIN 202 +#define F_SHEETCOD 203 +#define F_SHEETGIAC 204 +#define F_SHEETSTOMAG 205 +#define F_STOULTCOS1 210 +#define F_STOULTCOS2 211 +#define F_STOCOSTOSTD 212 +#define F_STOCOSTOMEDIO 213 +#define F_STOCATVEN 214 +#define F_STOCODLIST 215 +#define F_STOPREZZOLIST 216 + +#define F_STOTOTALE_RIM 217 +#define F_STOTOTALE_VAL 218 +#define F_WRITEON 219 + + +#define F_SEARCHLAV 260 +#define F_CODICELAV 261 +#define F_DESCRAGG 262 +#define F_COLLTYPE 263 +#define F_CODMAGAN 264 +#define F_VALDIST 265 +#define F_DATAVDIST 266 + + +#define F_CONACC 281 +#define F_CONALL 282 +#define F_CONCAR 283 +#define F_CONPLA 284 +#define F_CONLEG 285 +#define F_CONVET 286 +#define F_VALSTATUN 287 +#define F_PAESEOR 288 + +#define F_NUMREGULC1 300 +#define F_NUMRIGULC1 301 +#define F_NUMREGULC2 302 +#define F_NUMRIGULC2 303 +#define F_SOSPESO 304 +#define F_REPARTO 305 +#define F_DESREPARTO 306 +#define F_STAGIONE 307 +#define F_DESSTAGIONE 308 +#define F_LIVPERART 309 + +#define F_TIPOLOGIA 310 +#define F_COLORE 311 +#define F_LIVELLO 312 +#define F_PPPALLET 313 +#define F_TIPOPARTE 314 +#define F_CODLAV1 315 +#define F_CODLAV2 316 +#define F_LINDEST1 317 +#define F_LINDEST2 318 +#define F_LAVATRICE 319 +#define F_ARTLAVCONT 320 +#define F_MANGDEST 321 +#define F_RIEMPI_C_XS 322 +#define F_RIEMPI_C_M 323 +#define F_RIEMPI_C_XL 324 +#define F_NORMALE_XS 325 +#define F_NORMALE_M 326 +#define F_NORMALE_XL 327 +#define F_RIEMPI_S_XS 328 +#define F_RIEMPI_S_M 329 +#define F_RIEMPI_S_XL 330 +#define F_PRECEDENZA 331 +#define F_TPARTICOLO 332 +#define F_DESCR_ETI 333 + +#define F_SCAACC 334 +#define F_SCAALL 335 +#define F_SCACAR 336 +#define F_SCAPLA 337 +#define F_SCALEG 338 +#define F_SCAVET 339 +#define F_ECMAGIC1 340 +#define F_ECMAGIC2 341 +#define F_ECMAGIC3 342 +#define F_ECMAGIC4 343 +#define F_ECMAGIC_DESCR 344 +#define F_VALCONV 345 + +#define F_USER1 371 +#define F_USER2 372 +#define F_USER3 373 +#define F_USER4 374 +#define F_USER5 375 +#define F_USER6 376 +#define F_USER7 377 +#define F_USER8 378 +#define F_USER9 379 +#define F_USER10 380 +#define F_USER11 381 +#define F_USER12 382 +#define F_USER13 383 +#define F_USER14 384 +#define F_USER15 385 +#define F_USER16 386 +#define F_USER17 387 +#define F_USER18 388 +#define F_USER19 389 +#define F_USER20 390 + +#define F_CONTOPCIA 401 +#define F_DESCRCONTOPCIA 411 + +#define F_CONTOPCIV 451 +#define F_DESCRCONTOPCIV 461 + +#define G_CODART 1 +#define G_DESART 2 +#define G_GRMERC 3 +#define G_CATACQ 4 +#define G_CONACQ 5 +#define G_CATVEN 6 +#define G_CONVEN 7 +#define G_RAGGFISC 8 +// #define G_VD 9 Vendite al dettaglio Obsolete +#define G_LV 10 + +// definizioni per l'archivio di misura articoli +#define FS_CODUM 101 +#define FS_FCUM 102 +#define FS_PREZZO 103 +#define FS_PREZZO_LORDO 104 + +// definizioni per l'archivio descrizioni in lingua estera +#define FS_CODLIN 101 +#define FS_DESCR 102 + +// definizioni per l'archivio codici corrispondenti +#define FS_CODARTALT 101 +#define FS_TIPO 102 +#define FS_CODUMCORR 103 +#define FS_LIV1 104 +#define FS_LIV2 105 +#define FS_LIV3 106 +#define FS_LIV4 107 +#define FS_TIPOCF 108 +#define FS_CODCF 109 +#define FS_RAGCF 110 +#define FS_DESCRC 111 + +// definizioni per l'archivio giacenze +#include "ve2400d.h" + +// definizioni per l'archivio storico giacenze +#define F_STOTIPORIGA 101 +#define F_STOCODMAG 102 +#define F_STOANNOES 103 +#define F_NOMETOT 203 +#define F_STOQUANT 104 +#define F_STOVALUN 105 +#define F_STOVAL 106 +#define F_STOCODART 120 + +#define PAGE_GIACENZE 4 +#define PAGE_STORICO 5 +#define PAGE_USER 8 +#define SIMBOLO_TOTALI '>' + +#define F_TOT_ORD_FOR 350 +#define F_TOT_ORD_CLI 351 diff --git a/src/ve/ve2400.uml b/src/ve/ve2400.uml index 423053387..657bd9196 100755 --- a/src/ve/ve2400.uml +++ b/src/ve/ve2400.uml @@ -1,1660 +1,1679 @@ -#include "ve2400.h" - -TOOLBAR "Toolbar" 0 0 0 2 -#include -ENDPAGE - -PAGE "Codici" 0 2 0 0 - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 0 0 "@bArticolo" -END - -STRING F_CODART 20 -BEGIN - PROMPT 1 2 "" - FIELD LF_ANAMAG->CODART - KEY 1 - FLAG "UG" - USE LF_ANAMAG - INPUT CODART F_CODART - DISPLAY "Codice@20" CODART - DISPLAY "Descrizione@50" DESCR - OUTPUT F_CODART CODART - OUTPUT F_DESCR DESCR - CHECKTYPE REQUIRED - MESSAGE COPY,G_CODART@ - MESSAGE COPY,F_SEARCHLAV|CHECK,F_SEARCHLAV -END - -STRING F_SEARCHLAV 20 -BEGIN - FLAGS "HG" - PROMPT 40 1 "" - USE LAV - INPUT CODTAB F_SEARCHLAV - DISPLAY "CODICE@20" CODTAB - OUTPUT F_CODICELAV CODTAB - MESSAGE CHECK,F_CODICELAV - MESSAGE EMPTY RESET,F_CODICELAV - CHECKTYPE SEARCH -END - -STRING F_CODICELAV 20 -BEGIN - FLAGS "HG" - PROMPT 62 1 "" - STR_EXPR #F_CODICELAV=="" - MESSAGE RESET,F_CODICELAV - WARNING "Il codice è già utilizzato per le lavorazioni" -END - -STRING F_DESCR 50 -BEGIN - PROMPT 24 2 "" - FIELD LF_ANAMAG->DESCR - KEY 2 - USE LF_ANAMAG KEY 2 - INPUT DESCR F_DESCR - DISPLAY "Codice@20" CODART - DISPLAY "Descrizione@50" DESCR - OUTPUT F_CODART CODART - OUTPUT F_DESCR DESCR - CHECKTYPE REQUIRED - MESSAGE COPY,G_DESART@ -END - -BUTTON F_COPY 7 1 -BEGIN - PROMPT 68 1 "~Copia" - FLAGS "H" -END - -ZOOM F_DESCRAGG 50 -BEGIN - PROMPT 1 4 "Descrizione aggiuntiva " - FIELD LF_ANAMAG->DESCRAGG -END - -STRING F_ARTALT 20 -BEGIN - PROMPT 1 5 "Articolo alternativo " - FIELD LF_ANAMAG->CODARTALT - FLAG "U" - USE LF_ANAMAG - INPUT CODART F_ARTALT - DISPLAY "Codice@20" CODART - DISPLAY "Descrizione@50" DESCR - OUTPUT F_ARTALT CODART - OUTPUT F_DESCRALT DESCR - CHECKTYPE NORMAL -END - -STRING F_DESCRALT 50 -BEGIN - PROMPT 1 6 "Descrizione art.alt. " - FLAG "U" - USE LF_ANAMAG KEY 2 - INPUT DESCR F_DESCRALT - DISPLAY "Descrizione@50" DESCR - DISPLAY "Codice@20" CODART - COPY OUTPUT F_ARTALT - CHECKTYPE NORMAL -END - -STRING F_PRESIDIO 20 -BEGIN - PROMPT 1 7 "Codice presidio m.s. " - FIELD LF_ANAMAG->COD_PMS - FLAG "U" -END - -BOOLEAN F_SOSPESO -BEGIN - PROMPT 50 7 "Sospeso" - FIELD SOSPESO -END - -TEXT DLG_NULL -BEGIN - PROMPT 50 8 "Collegamenti esterni " -END - -GOLEM F_GOLEM 4 2 -BEGIN - PROMPT 70 7 "" - FLAGS "M" - FIELD LF_ANAMAG->GOLEM -END -TEXT DLG_NULL -BEGIN - PROMPT 1 8 "@bCodici corrispondenti" -END - -SPREADSHEET F_SHEETCOD 71 4 -BEGIN - PROMPT 1 9 "Codici corrispondenti" - FLAGS "A" - USE LF_CODCORR KEY NRIGA - INPUT CODART F_CODART - ITEM "Articolo@20" - ITEM "Tipo@10" - ITEM "U.M." - ITEM "Liv1@10" - ITEM "Liv2@6" - ITEM "Liv3@6" - ITEM "Liv4@6" - ITEM "Tipo C/F" - ITEM "Codice C/F" - ITEM "Ragiore Sociale@50" - ITEM "Descrizione@50" -END - -TEXT DLG_NULL -BEGIN - PROMPT 1 14 "@bDescrizioni in lingua" -END - -SPREADSHEET F_SHEETDESLIN 71 -BEGIN - PROMPT 1 15 "Descrizioni in lingua" - FLAGS "A" - USE LF_DESLIN KEY NRIGA - INPUT CODART F_CODART - ITEM "Cod. lingua" - ITEM "Descrizione@50" -END - -ENDPAGE - -PAGE "Classi" 0 2 0 0 - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 0 0 "@bArticolo" -END - -STRING DLG_NULL 20 -BEGIN - FLAGS "D" - PROMPT 2 1 "" - GROUP G_CODART -END - -STRING DLG_NULL 50 -BEGIN - FLAGS "D" - PROMPT 25 1 "" - GROUP G_DESART -END - -STRING F_GRMERC 3 -BEGIN - PROMPT 1 4 "Gr. merc. " - FIELD LF_ANAMAG->GRMERC[1,3] - GROUP G_GRMERC - FLAG "U" - USE GMC KEY 1 SELECT CODTAB[4,5]=="" - INPUT CODTAB F_GRMERC - DISPLAY "Codice" CODTAB[1,3] - DISPLAY "Descrizione@50" S0 - DISPLAY "IVA@5" S7 - OUTPUT F_GRMERC CODTAB[1,3] - OUTPUT F_GRMERCD1 S0 - OUTPUT H_GRMERCD1 S0 - OUTPUT F_GRMERCB CODTAB[4,5] - CHECKTYPE NORMAL -END - -STRING F_GRMERCD1 50 -BEGIN - PROMPT 23 4 "" - GROUP G_GRMERC - USE GMC KEY 2 SELECT CODTAB[4,5]=="" - INPUT S0 F_GRMERCD1 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - DISPLAY "IVA@5" S7 - OUTPUT F_GRMERC CODTAB[1,3] - OUTPUT F_GRMERCD1 S0 - CHECKTYPE NORMAL -END - -STRING H_GRMERCD1 50 -BEGIN - PROMPT 23 4 "" - GROUP G_GRMERC - FLAGS "D" -END - -STRING F_GRMERCB 2 -BEGIN - PROMPT 1 5 "Sott. merc. " - FIELD LF_ANAMAG->GRMERC[4,5] - GROUP G_GRMERC - FLAG "U" - USE GMC //SELECT CODTAB[4,5] != "" - INPUT CODTAB[1,3] F_GRMERC - INPUT CODTAB[4,5] F_GRMERCB - COPY DISPLAY F_GRMERC - OUTPUT F_GRMERC CODTAB[1,3] - OUTPUT F_GRMERCB CODTAB[4,5] - OUTPUT F_GRMERCD2 S0 - MESSAGE SHOW,F_GRMERCD2|SHOW,H_GRMERCD1|HIDE,F_GRMERCD1 - MESSAGE EMPTY HIDE,F_GRMERCD2|HIDE,H_GRMERCD1|SHOW,F_GRMERCD1 - CHECKTYPE NORMAL -END - -STRING F_GRMERCD2 50 -BEGIN - PROMPT 23 5 "" - GROUP G_GRMERC - USE GMC KEY 2 SELECT CODTAB[4,5] != "" - INPUT S0 F_GRMERCD2 - COPY DISPLAY F_GRMERCD1 - COPY OUTPUT F_GRMERCB - CHECKTYPE NORMAL -END - -STRING F_REPARTO 3 -BEGIN - PROMPT 1 6 "Reparto " - HELP "Codice reparto" - FIELD LF_ANAMAG->REPARTO - FLAGS "UZ" - USE RPD - INPUT CODTAB F_REPARTO - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione @70" S0 - OUTPUT F_REPARTO CODTAB - OUTPUT F_DESREPARTO S0 - CHECKTYPE NORMAL -END - -STRING F_DESREPARTO 70 50 -BEGIN - PROMPT 23 6 "" - USE RPD KEY 2 - INPUT S0 F_DESREPARTO - DISPLAY "Descrizione@70" S0 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_REPARTO - CHECKTYPE NORMAL -END - -STRING F_STAGIONE 4 -BEGIN - PROMPT 1 7 "Stagione " - HELP "Codice stagione" - FIELD LF_ANAMAG->STAGIONE - FLAGS "UZ" - USE STG - INPUT CODTAB F_STAGIONE - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione @70" S0 - OUTPUT F_STAGIONE CODTAB - OUTPUT F_DESSTAGIONE S0 - CHECKTYPE NORMAL -END - -STRING F_DESSTAGIONE 70 50 -BEGIN - PROMPT 23 7 "" - HELP "Descrizione stagione" - USE STG KEY 2 - INPUT S0 F_DESSTAGIONE - DISPLAY "Descrizione@70" S0 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_STAGIONE - CHECKTYPE NORMAL -END - -STRING F_CATCONV 3 -BEGIN - PROMPT 1 11 "Categoria conto vendite " - FIELD LF_ANAMAG->CATCONV - GROUP G_CATVEN - FLAG "UZ" - USE CRA - INPUT CODTAB F_CATCONV - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - DISPLAY "Gruppo" I0 - DISPLAY "Conto" I1 - DISPLAY "Sottoconto" I2 - OUTPUT F_CATCONV CODTAB - OUTPUT F_CATCONV1 S0 - CHECKTYPE NORMAL -END - -STRING F_CATCONV1 50 38 -BEGIN - PROMPT 35 11 "" - GROUP G_CATVEN - USE CRA KEY 2 - INPUT S0 F_CATCONV1 - DISPLAY "Descrizione@50" S0 - DISPLAY "Codice" CODTAB - DISPLAY "Gruppo" I0 - DISPLAY "Conto" I1 - DISPLAY "Sottoconto" I2 - COPY OUTPUT F_CATCONV -END - -NUMBER F_GRUPPOV 3 -BEGIN - PROMPT 1 12 "Conto di vendita " - FIELD LF_ANAMAG->GRUPPOV - GROUP G_CONVEN -END - -NUMBER F_CONTOV 3 -BEGIN - PROMPT 22 12 "" - FIELD LF_ANAMAG->CONTOV - GROUP G_CONVEN -END - -NUMBER F_SOTTOCV 6 -BEGIN - PROMPT 26 12 "" - FIELD LF_ANAMAG->SOTTOCV - GROUP G_CONVEN - USE LF_PCON - INPUT GRUPPO F_GRUPPOV - INPUT CONTO F_CONTOV - INPUT SOTTOCONTO F_SOTTOCV - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GRUPPOV GRUPPO - OUTPUT F_CONTOV CONTO - OUTPUT F_SOTTOCV SOTTOCONTO - OUTPUT F_DESCRV DESCR - CHECKTYPE NORMAL - WARNING "Conto assente" - ADD RUN cg0 -0 -END - -STRING F_DESCRV 50 37 -BEGIN - PROMPT 36 12 "" - GROUP G_CONVEN - USE LF_PCON KEY 2 - INPUT DESCR F_DESCRV - DISPLAY "Descrizione@50" DESCR - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - COPY OUTPUT F_SOTTOCV - WARNING "Conto assente" - ADD RUN cg0 -0 -END - - -BOOLEAN F_ARTFIS -BEGIN - PROMPT 1 17 "Articolo fiscale" - FIELD LF_ANAMAG->ARTFIS - MESSAGE TRUE ENABLE,G_RAGGFISC@ - MESSAGE FALSE DISABLE,G_RAGGFISC@ -END - -STRING F_RAGGFIS 5 -BEGIN - PROMPT 1 18 "Raggrupp. fiscale " - FIELD LF_ANAMAG->RAGGFIS - FLAGS "UD" - USE RFA - JOIN %ASF ALIAS 200 INTO CODTAB=S8 - INPUT CODTAB F_RAGGFIS - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_RAGGFIS CODTAB - OUTPUT F_RAGGFIS1 S0 - OUTPUT H_CLASSEFIS S8 - CHECKTYPE NORMAL - GROUP G_RAGGFISC -END - -STRING F_RAGGFIS1 40 -BEGIN - PROMPT 31 18 "" - FLAG "D" -END - -STRING H_CLASSEFIS 2 -BEGIN - PROMPT 1 19 "" - FLAG "HG" - MESSAGE DISABLE,F_CLASSEFIS|COPY,F_CLASSEFIS - MESSAGE EMPTY ENABLE,F_CLASSEFIS -END - -STRING F_CLASSEFIS 2 -BEGIN - PROMPT 1 19 "Classe fiscale " - FIELD LF_ANAMAG->CLASSEFIS - FLAGS "UD" - USE %ASF - INPUT CODTAB F_CLASSEFIS - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CLASSEFIS CODTAB - OUTPUT F_CLASSEFISD S0 - MESSAGE EMPTY "",F_CLASSEFISD - CHECKTYPE NORMAL - GROUP G_RAGGFISC -END - -STRING F_CLASSEFISD 40 -BEGIN - PROMPT 31 19 "" - FLAG "D" -END - -STRING F_CODIVA 4 -BEGIN - PROMPT 1 20 "Codice IVA " - FIELD LF_ANAMAG->CODIVA - USE %IVA - INPUT CODTAB F_CODIVA - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CODIVA CODTAB - CHECKTYPE NORMAL -END - - -STRING F_CODIVAR 4 -BEGIN - PROMPT 20 20 "IVA ridotta " - FIELD LF_ANAMAG->CODIVAR - USE %IVA - INPUT CODTAB F_CODIVAR - COPY DISPLAY F_CODIVA - OUTPUT F_CODIVAR CODTAB - CHECKTYPE NORMAL -END - -STRING F_SCONTO 25 -BEGIN - FIELD LF_ANAMAG->SCONTO - PROMPT 43 20 "Sconto " -END - -ENDPAGE - -PAGE "Unità" 0 2 0 0 - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 0 0 "@bArticolo" -END -STRING DLG_NULL 20 -BEGIN - FLAGS "D" - PROMPT 2 1 "" - GROUP G_CODART -END - -STRING DLG_NULL 50 -BEGIN - FLAGS "D" - PROMPT 25 1 "" - GROUP G_DESART -END - -TEXT DLG_NULL -BEGIN - PROMPT 1 3 "@bUnità di misura" -END - -SPREADSHEET F_SHEETUM 76 4 -BEGIN - PROMPT 1 4 "Unità di misura " - FLAGS "A" - USE LF_UMART KEY NRIGA - INPUT CODART F_CODART - ITEM "U.M." - ITEM "F. conversione" - ITEM "Prezzo netto@18" - ITEM "Prezzo lordo@18" -END - -STRING F_UMP 3 -BEGIN - PROMPT 1 9 "U.M. pesi " - FIELD LF_ANAMAG->UMP - FLAG "U" - USE %UMS - INPUT CODTAB F_UMP - DISPLAY "U.M." CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_UMP CODTAB - VALIDATE REQIF_FUNC 1 F_PESO - WARNING "Necessaria una unità di misura valida per il peso " - CHECKTYPE NORMAL -END - -NUMBER F_PESO 15 5 -BEGIN - PROMPT 18 9 "Peso " - FIELD LF_ANAMAG->PESO - VALIDATE REQIF_FUNC 1 F_TARA - WARNING "Necessario introdurre il peso se si è introdotta la tara" -END - -NUMBER F_TARA 15 5 -BEGIN - PROMPT 42 9 "Tara " - FIELD LF_ANAMAG->TARA -END - -NUMBER F_MASSANUN 10 3 -BEGIN - PROMPT 1 10 "Massa netta unitaria " - FIELD LF_ANAMAG->MASSANUN -END - -NUMBER F_UNSUPPUN 10 3 -BEGIN - PROMPT 42 10 "Unità suppl.unitaria " - FIELD LF_ANAMAG->UNSUPPUN -END - -NUMBER F_PPCONF 15 5 -BEGIN - PROMPT 1 11 "Pz. per pacco " - FIELD PPCONF - FLAGS "U" -END - -NUMBER F_PPCOLLO 15 5 -BEGIN - PROMPT 42 11 "Pz. per collo " - FIELD PPCOLLO - FLAGS "U" -END - -NUMBER F_PPPALLET 9 -BEGIN - PROMPT 1 12 "Pz. per pallet " - FIELD PPPALLET - FLAGS "U" -END - -CURRENCY F_VALSTATUN 15 -BEGIN - PROMPT 42 12 "Valore statistico " - FIELD VALSTATUN - FLAGS "U" -END - -GROUPBOX DLG_NULL 78 8 -BEGIN - PROMPT 0 13 "@bCONAI" - FLAGS "R" -END - -TEXT DLG_NULL -BEGIN - PROMPT 1 14 "Sottocategorie" -END - -STRING F_SCAACC 4 -BEGIN - PROMPT 1 15 "Acciaio " - FIELD CONAISC[1,4] - USE &SCC SELECT CODTAB[1,2]=="AC" - INPUT CODTAB F_SCAACC - DISPLAY "Categoria" CODTAB[1,2] - DISPLAY "Sottocategoria" CODTAB[3,4] - DISPLAY "Descrizione@50" S0 - MESSAGE EMPTY CLEAR,F_CONACC - MESSAGE ENABLE,F_CONACC - OUTPUT F_SCAACC CODTAB -END - -STRING F_SCAALL 4 -BEGIN - PROMPT 27 15 "Alluminio " - FIELD CONAISC[5,8] - USE &SCC SELECT CODTAB[1,2]=="AL" - INPUT CODTAB F_SCAALL - COPY DISPLAY F_SCAACC - OUTPUT F_SCAALL CODTAB - MESSAGE EMPTY CLEAR,F_CONALL - MESSAGE ENABLE,F_CONALL -END - -STRING F_SCACAR 4 -BEGIN - PROMPT 54 15 "Carta " - FIELD CONAISC[9,12] - USE &SCC SELECT CODTAB[1,2]=="CA" - INPUT CODTAB F_SCACAR - COPY DISPLAY F_SCAACC - OUTPUT F_SCACAR CODTAB - MESSAGE EMPTY CLEAR,F_CONCAR - MESSAGE ENABLE,F_CONCAR -END - -STRING F_SCAPLA 4 -BEGIN - PROMPT 1 16 "Plastica " - FIELD CONAISC[13,16] - USE &SCC SELECT CODTAB[1,2]=="PL" - INPUT CODTAB F_SCAPLA - COPY DISPLAY F_SCAACC - OUTPUT F_SCAPLA CODTAB - MESSAGE EMPTY CLEAR,F_CONPLA - MESSAGE ENABLE,F_CONPLA -END - -STRING F_SCALEG 4 -BEGIN - PROMPT 27 16 "Legno " - FIELD CONAISC[17,20] - USE &SCC SELECT CODTAB[1,2]=="LE" - INPUT CODTAB F_SCALEG - COPY DISPLAY F_SCAACC - OUTPUT F_SCALEG CODTAB - MESSAGE EMPTY CLEAR,F_CONLEG - MESSAGE ENABLE,F_CONLEG -END - -STRING F_SCAVET 4 -BEGIN - PROMPT 54 16 "Vetro " - FIELD CONAISC[21,24] - USE &SCC SELECT CODTAB[1,2]=="VE" - INPUT CODTAB F_SCAVET - COPY DISPLAY F_SCAACC - OUTPUT F_SCAVET CODTAB - MESSAGE EMPTY CLEAR,F_CONVET - MESSAGE ENABLE,F_CONVET -END - -TEXT DLG_NULL -BEGIN - PROMPT 1 17 "Pesi (Kg)" -END - -NUMBER F_CONACC 15 5 -BEGIN - PROMPT 1 18 "Acciaio " - FIELD CONACC -END - -NUMBER F_CONALL 15 5 -BEGIN - PROMPT 27 18 "Alluminio " - FIELD CONALL -END - -NUMBER F_CONCAR 15 5 -BEGIN - PROMPT 54 18 "Carta " - FIELD CONCAR -END - -NUMBER F_CONPLA 15 5 -BEGIN - PROMPT 1 19 "Plastica " - FIELD CONPLA -END - -NUMBER F_CONLEG 15 5 -BEGIN - PROMPT 27 19 "Legno " - FIELD CONLEG -END - -NUMBER F_CONVET 15 5 -BEGIN - PROMPT 54 19 "Vetro " - FIELD CONVET -END - -ENDPAGE - - -PAGE "Produzione" 0 2 0 0 - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 0 0 "@bArticolo" -END - -STRING DLG_NULL 20 -BEGIN - FLAGS "D" - PROMPT 2 1 "" - GROUP G_CODART -END - -STRING DLG_NULL 50 -BEGIN - FLAGS "D" - PROMPT 25 1 "" - GROUP G_DESART -END - -BOOLEAN F_ARTPROD -BEGIN - PROMPT 2 4 "Articolo di produzione " - FIELD LF_ANAMAG->ARTPROD - MESSAGE TRUE DISABLE,F_CODFORN|DISABLE,F_CODFORN1|DISABLE,F_RIORDINO - MESSAGE FALSE ENABLE,F_CODFORN|ENABLE,F_CODFORN1|ENABLE,F_RIORDINO -END - -NUMBER F_CODFORN 6 -BEGIN - PROMPT 1 5 "Codice fornitore " - FIELD LF_ANAMAG->CODFORN - USE LF_CLIFO - INPUT TIPOCF F_TIPOCF SELECT - INPUT CODCF F_CODFORN - DISPLAY "Codice " CODCF - DISPLAY "Ragione sociale@50" RAGSOC - DISPLAY "Partita IVA" PAIV - OUTPUT F_CODFORN CODCF - OUTPUT F_CODFORN1 RAGSOC - CHECKTYPE NORMAL -END - -STRING F_CODFORN1 50 -BEGIN - PROMPT 1 6 "Ragione sociale " - USE LF_CLIFO KEY 2 - INPUT TIPOCF F_TIPOCF SELECT - INPUT RAGSOC F_CODFORN1 - COPY DISPLAY F_CODFORN - OUTPUT F_CODFORN CODCF - OUTPUT F_CODFORN1 RAGSOC -END - -LISTBOX F_RIORDINO 20 -BEGIN - PROMPT 42 4 "Riordino per " - FIELD LF_ANAMAG->RIORDINO - ITEM "F|fabbisogno" - ITEM "P|punto di riordino" - ITEM "T|tempo" -END - -LIST F_VALDIST 2 20 -BEGIN - PROMPT 28 5 "Val.distinta " - ITEM " |Normale" - ITEM "1|Ultimo costo" - ITEM "4|Media ultimi costi" - ITEM "10|Prezzo di listino" - ITEM "5|Costo standard" - ITEM "2|Costo medio" - ITEM "3|Costo medio ponder." - ITEM "6|FIFO annuale" - ITEM "8|LIFO annuale" - ITEM "9|FIFO" - ITEM "7|LIFO" - FIELD VALDIST -END - -DATE F_DATAVDIST -BEGIN - PROMPT 65 5 "Dal " - FIELD DATAVDIST -END - -LISTBOX F_TIPOCF 20 -BEGIN - PROMPT 0 0 "" - FLAG "H" - ITEM "F|Fornitore" -END - -LISTBOX F_COLLTYPE 25 -BEGIN - PROMPT 1 7 "Mag.per movim.con distinta " - FIELD LF_ANAMAG->COLLTYPE - ITEM " |da movimento" MESSAGE CLEAR,F_CODMAGAN - ITEM "M|da riga prod.fin/semilav." MESSAGE CLEAR,F_CODMAGAN - ITEM "F|da fornitore" MESSAGE CLEAR,F_CODMAGAN - ITEM "A|da articolo" MESSAGE ENABLE,F_CODMAGAN -END - -STRING F_CODMAGAN 5 -BEGIN - PROMPT 59 7 "Codice mag. " - FIELD LF_ANAMAG->CODMAG - FLAG "U" - USE MAG - INPUT CODTAB F_CODMAGAN - DISPLAY "Codice@10" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CODMAGAN CODTAB - CHECKTYPE NORMAL -END - -NUMBER F_CLASSDOG 8 -BEGIN - PROMPT 1 8 "Nomenclatura combinata " - FIELD CLASSDOG - USE %NOC - INPUT CODTAB F_CLASSDOG - DISPLAY "Codice@4" CODTAB[1,4] - DISPLAY " @2" CODTAB[5,6] - DISPLAY " @2" CODTAB[7,8] - DISPLAY "Descrizione@50" S0 - OUTPUT F_CLASSDOG CODTAB - OUTPUT F_CLASSDOGD S0 - CHECKTYPE NORMAL - VALIDATE FIXLEN_FUNC 8 - WARNING "Nomenclatura combinata assente" -END - -STRING F_CLASSDOGD 50 41 -BEGIN - PROMPT 35 8 "" - FLAG "D" -END - -STRING F_PROVOR 2 -BEGIN - PROMPT 1 9 "Provincia di origine (INTRA) " - FIELD LF_ANAMAG->PROV -END - -STRING F_PAESEOR 2 -BEGIN - PROMPT 49 9 "Paese di origine (INTRA) " - FIELD LF_ANAMAG->PAESE -END - -NUMBER F_PROVV 5 2 -BEGIN - FIELD LF_ANAMAG->PERCPROVV - PROMPT 1 10 "Provvigione " - NUM_EXPR (#F_PROVV>=0)&&(#F_PROVV<=100) - WARNING "La percentuale di provvigione deve essere compresa tra 0 e 100" -END - -NUMBER F_RICARICO 5 2 -BEGIN - FIELD LF_ANAMAG->PERCRIC - PROMPT 50 10 "Ricarico/margine " - FLAGS "U" -// NUM_EXPR #F_RICARICO<= -// WARNING "La percentuale di ricarico deve essere compresa ..." -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 0 12 "@bRiordino" -END - -NUMBER F_A_LOTTORIOR 10 3 -BEGIN - PROMPT 1 13 "Lotto minimo " - FIELD LOTTORIOR -END -NUMBER F_A_LOTTOIRIOR 10 3 -BEGIN - PROMPT 30 13 "Lotto increm. " - FIELD LOTTOIRIOR -END -NUMBER F_A_GIORNIRIOR 5 1 -BEGIN - PROMPT 64 13 "Giorni " - FIELD LEADTIME -END - -CURRENCY F_COSTSTD 15 -BEGIN - PROMPT 1 16 "Costo standard " - FIELD LF_ANAMAG->COSTSTD - FLAGS "U" -END - -CURRENCY F_ULC1 15 -BEGIN - PROMPT 1 17 "Ultimo costo " - FIELD LF_ANAMAG->ULTCOS1 - FLAGS "U" -END - -DATE F_DATAULC1 -BEGIN - PROMPT 35 17 "data " - FIELD LF_ANAMAG->DULTCOS1 -END - -NUMBER F_NUMREGULC1 7 -BEGIN - FLAGS "D" - PROMPT 52 17 "movim. " - FIELD LF_ANAMAG->NUMREG1 -END - -NUMBER F_NUMRIGULC1 4 -BEGIN - FLAGS "D" - PROMPT 68 17 "riga " - FIELD LF_ANAMAG->NUMRIG1 -END - -CURRENCY F_ULC2 15 -BEGIN - PROMPT 1 18 "Penultimo costo " - FIELD LF_ANAMAG->ULTCOS2 - FLAGS "U" -END - -DATE F_DATAULC2 -BEGIN - PROMPT 35 18 "data " - FIELD LF_ANAMAG->DULTCOS2 -END - -NUMBER F_NUMREGULC2 7 -BEGIN - FLAGS "D" - PROMPT 52 18 "movim. " - FIELD LF_ANAMAG->NUMREG2 -END - -NUMBER F_NUMRIGULC2 4 -BEGIN - FLAGS "D" - PROMPT 68 18 "riga " - FIELD LF_ANAMAG->NUMRIG2 -END - -ENDPAGE - -PAGE "Giacenze" 0 2 0 0 - -// Anno relativo alle giacenze -NUMBER H_ANNO 4 -BEGIN - PROMPT 2 2 "" - FLAGS "AHG" -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 0 0 "@bArticolo" -END - -STRING DLG_NULL 20 -BEGIN - FLAGS "D" - PROMPT 2 1 "" - GROUP G_CODART -END - -STRING DLG_NULL 50 -BEGIN - FLAGS "D" - PROMPT 25 1 "" - GROUP G_DESART -END - -STRING F_ANNO 4 -BEGIN - PROMPT 2 4 "Selezione esercizio " - FLAGS "UPZ" - USE ESC - INPUT CODTAB F_ANNO - DISPLAY "Codice@10" CODTAB - DISPLAY "Dal@16" D0 - DISPLAY "Al@16" D1 - OUTPUT F_ANNO CODTAB - CHECKTYPE NORMAL - ADD RUN cg0 -5 ESC -END - -STRING F_ANNORIF 4 // anno usato per il write dell'annata precedente -BEGIN - PROMPT 36 4 "Giacenze dell'esercizio " - FLAGS "DPZ" -END - -STRING F_UMPRINCIPALE 2 -BEGIN - PROMPT 70 4 "U.M. " - FLAGS "D" -END - -BOOLEAN F_LIVPERART -BEGIN - PROMPT 2 5 "Livelli di giacenza definiti per articolo" - FIELD LIVPERART -END - -SPREADSHEET F_SHEETGIAC 0 -2 -BEGIN - PROMPT 0 6 "Giacenze" - FLAGS "A" - USE LF_MAG KEY NRIGA - INPUT ANNOES F_ANNO - INPUT CODART F_CODART - // la sequenza delle colonne livelliX, mag e dep è usata per ottenere - // un ordinamento delle righe dello sheet: NON cambiarla - ITEM "Liv1@15" - ITEM "Liv2@15" - ITEM "Liv3@15" - ITEM "Liv4@15" - ITEM "Mag." - ITEM "Dep." - ITEM "Ubicazione" - ITEM "Livello rior.@10" - ITEM "Scorta min.@10" - ITEM "Lotto rior.@10" - ITEM "Lotto incr.@10" - ITEM "Giorni rior.@10" - ITEM "Giacenza @10" - ITEM "Val.Giac @12" - ITEM "Rim.Iniz.@10" - ITEM "V.Rim.Iniz.@12" - ITEM "Acq.@10" - ITEM "V.Acq.@12" - ITEM "Entr.@10" - ITEM "V.Entr.@12" - ITEM "Ven.@10" - ITEM "V.Ven.@12" - ITEM "Uscito@10" - ITEM "V.Uscito@12" - ITEM "Ord.For.@10" - ITEM "V.Ord.For.@12" - ITEM "Ord.Cli.@10" - ITEM "V.Ord.Cli.@12" - ITEM "Scarti@10" - ITEM "V.Scarti@12" - ITEM "In Prod.Comp.@10" - ITEM "In Prod.Fin.@10" - ITEM "A conto L.@10" - ITEM "In conto L.@10" - ITEM "Etichette@10" - ITEM "N.dist." -END - -NUMBER F_TOT_ORD_FOR 15 5 -BEGIN - PROMPT 2 -1 "Ordinato fornitori " - FLAGS "D" -END - -NUMBER F_TOT_ORD_CLI 15 5 -BEGIN - PROMPT 38 -1 "Ordinato clienti " - FLAGS "D" -END - -ENDPAGE - -PAGE "Storico" 0 2 0 0 - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 0 0 "@bArticolo" -END -STRING DLG_NULL 20 -BEGIN - FLAGS "D" - PROMPT 2 1 "" - GROUP G_CODART -END - -STRING DLG_NULL 50 -BEGIN - FLAGS "D" - PROMPT 25 1 "" - GROUP G_DESART -END - -STRING F_STOANNO 4 -BEGIN - PROMPT 2 4 "Selezione esercizio " - FLAGS "UZ" - - USE ESC - INPUT CODTAB F_STOANNO - DISPLAY "Codice@10" CODTAB - DISPLAY "Dal@16" D0 - DISPLAY "Al@16" D1 - OUTPUT F_STOANNO CODTAB - CHECKTYPE NORMAL - ADD RUN cg0 -5 ESC -END - -STRING F_STOANNORIF 4 // anno usato per il write dell'annata precedente -BEGIN - PROMPT 2 6 "Composizione rimanenze iniziali del " - FLAGS "DPZ" -END - -STRING F_UMPRINCIPALE2 2 -BEGIN - PROMPT 52 6 "U.M. :" - FLAGS "D" -END - -SPREADSHEET F_SHEETSTOMAG 78 8 -BEGIN - PROMPT 1 7 "Composizione" - FLAGS "A" - USE LF_STOMAG KEY NRIGA - INPUT ANNOESRIF F_STOANNO - INPUT CODART F_CODART - ITEM " @1F" - ITEM "Magazzino" - ITEM "Esercizio@10" - ITEM "Quantità@15" - ITEM "Valore unitario@15" - ITEM "Valore@15" -END - - -CURRENCY F_STOULTCOS1 15 -BEGIN - FLAGS "U" - PROMPT 2 17 "Ultimo costo " -END - -CURRENCY F_STOULTCOS2 15 -BEGIN - FLAGS "U" - PROMPT 42 17 "Penultimo costo " -END - -CURRENCY F_STOCOSTOSTD 15 -BEGIN - FLAGS "U" - PROMPT 2 18 "Costo standard " -END - -CURRENCY F_STOCOSTOMEDIO 15 -BEGIN - FLAGS "U" - PROMPT 42 18 "Costo medio " -END - -STRING F_STOCATVEN 3 -BEGIN - PROMPT 2 19 "Cat.vendita " -END - -STRING F_STOCODLIST 3 -BEGIN - PROMPT 26 19 "Cod.listino " -END - -CURRENCY F_STOPREZZOLIST 15 -BEGIN - FLAGS "U" - PROMPT 51 19 "Prezzo " -END - - -ENDPAGE - -PAGE "Analitica" 0 2 0 0 - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 0 0 "@bArticolo" -END - -STRING DLG_NULL 20 -BEGIN - FLAGS "D" - PROMPT 2 1 "" - GROUP G_CODART -END - -STRING DLG_NULL 50 -BEGIN - FLAGS "D" - PROMPT 25 1 "" - GROUP G_DESART -END - -STRING F_CATCONA 3 -BEGIN - PROMPT 1 4 "Categoria conto acquisti " - FIELD LF_ANAMAG->CATCONA - GROUP G_CATACQ - FLAG "UZ" - USE CAA - INPUT CODTAB F_CATCONA - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - DISPLAY "Gruppo" S1 - DISPLAY "Conto" S2 - DISPLAY "Sottoconto" S3 - OUTPUT F_CATCONA CODTAB - OUTPUT F_CATCONA1 S0 - CHEKTYPE NORMAL -END - -STRING F_CATCONA1 50 38 -BEGIN - PROMPT 35 4 "" - GROUP G_CATACQ - USE CAA KEY 2 - INPUT S0 F_CATCONA1 - DISPLAY "Descrizione@50" S0 - DISPLAY "Codice" CODTAB - DISPLAY "Gruppo" S1 - DISPLAY "Conto" S2 - DISPLAY "Sottoconto" S3 - COPY OUTPUT F_CATCONA -END - -NUMBER F_GRUPPOA 3 -BEGIN - PROMPT 1 6 "Conto d'acquisto " - FIELD LF_ANAMAG->GRUPPOA - GROUP G_CONACQ -END - -NUMBER F_CONTOA 3 -BEGIN - PROMPT 22 6 "" - FIELD LF_ANAMAG->CONTOA - GROUP G_CONACQ -END - -NUMBER F_SOTTOCA 6 -BEGIN - PROMPT 26 6 "" - FIELD LF_ANAMAG->SOTTOCA - GROUP G_CONACQ - USE LF_PCON - INPUT GRUPPO F_GRUPPOA - INPUT CONTO F_CONTOA - INPUT SOTTOCONTO F_SOTTOCA - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GRUPPOA GRUPPO - OUTPUT F_CONTOA CONTO - OUTPUT F_SOTTOCA SOTTOCONTO - OUTPUT F_DESCRA DESCR - CHECKTYPE NORMAL - WARNING "Conto assente" - ADD RUN cg0 -0 -END - -STRING F_DESCRA 50 37 -BEGIN - PROMPT 36 6 "" - GROUP G_CONACQ - USE LF_PCON KEY 2 - INPUT DESCR F_DESCRA - DISPLAY "Descrizione@50" DESCR - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - COPY OUTPUT F_SOTTOCA - WARNING "Conto assente" - ADD RUN cg0 -0 -END - -GROUPBOX DLG_NULL 78 6 -BEGIN - PROMPT 0 8 "@bConto acquisti" -END - -GROUPBOX DLG_NULL 78 6 -BEGIN - PROMPT 0 14 "@bConto vendite" -END - -ENDPAGE - -PAGE "Lavanderie" 0 0 80 15 - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 0 0 "@bArticolo" -END - -STRING DLG_NULL 20 -BEGIN - FLAGS "D" - PROMPT 2 1 "" - GROUP G_CODART - FIELD 41@->CODTAB //LVAUT = 41 -END - -STRING DLG_NULL 50 -BEGIN - FLAGS "D" - PROMPT 25 1 "" - GROUP G_DESART -END - -GROUPBOX DLG_NULL 78 14 -BEGIN - PROMPT 0 4 "@bLavanderie" - GROUP G_LV -END - -STRING F_COLORE 20 -BEGIN - PROMPT 1 5 "Colore " - FIELD COLORE - GROUP G_LV -END - -STRING F_LIVELLO 1 -BEGIN - PROMPT 49 5 "Livello " - FIELD LIVELLO - GROUP G_LV -END - -STRING F_TIPOPARTE 1 -BEGIN - PROMPT 1 6 "Tipo Parte " - FIELD TIPOPARTE - GROUP G_LV -END - -STRING F_LAVATRICE 4 -BEGIN - PROMPT 49 6 "Lavatrice " - USE &LVLVT - INPUT CODTAB F_LAVATRICE - DISPLAY "Codice" CODTAB - DISPLAY "Descrizioni@50" S0 - OUTPUT F_LAVATRICE CODTAB - FIELD LAVATRICE - CHECKTYPE NORMAL - GROUP G_LV -END - -STRING F_CODLAV1 3 -BEGIN - PROMPT 1 7 "Cod. Lavaggio 1 " - USE &LVLAV - INPUT CODTAB F_CODLAV1 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizioni@50" S0 - OUTPUT F_CODLAV1 CODTAB - FIELD CODLAV1 - CHECKTYPE NORMAL - GROUP G_LV -END - -STRING F_CODLAV2 3 -BEGIN - PROMPT 49 7 "Cod. Lavaggio 2 " - USE &LVLAV - INPUT CODTAB F_CODLAV2 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizioni@50" S0 - OUTPUT F_CODLAV2 CODTAB - FIELD CODLAV2 - CHECKTYPE NORMAL - GROUP G_LV -END - -STRING F_LINDEST1 3 -BEGIN - PROMPT 1 8 "Linea destinazione 1 " - USE &LVLND - INPUT CODTAB F_LINDEST1 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizioni@50" S0 - OUTPUT F_LINDEST1 CODTAB - FIELD LINDEST1 - CHECKTYPE NORMAL - GROUP G_LV -END - -STRING F_LINDEST2 3 -BEGIN - PROMPT 49 8 "Linea destinazione 2 " - USE &LVLND - INPUT CODTAB F_LINDEST2 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizioni@50" S0 - OUTPUT F_LINDEST2 CODTAB - FIELD LINDEST2 - CHECKTYPE NORMAL - GROUP G_LV -END - -STRING F_ARTLAVCONT 4 -BEGIN - PROMPT 1 9 "Lavacontinua " - USE &LVLVT - INPUT CODTAB F_ARTLAVCONT - DISPLAY "Codice" CODTAB - DISPLAY "Descrizioni@50" S0 - OUTPUT F_ARTLAVCONT CODTAB - FIELD ARTLAVCONT - CHECKTYPE NORMAL - GROUP G_LV -END - -STRING F_MANGDEST 3 -BEGIN - PROMPT 49 9 "Mangano Destinazione " - USE &LVMAN - INPUT CODTAB F_MANGDEST - DISPLAY "Codice" CODTAB - DISPLAY "Descrizioni@50" S0 - OUTPUT F_MANGDEST CODTAB - FIELD MANGDEST - CHECKTYPE NORMAL - GROUP G_LV -END - -STRING F_LUNGH 5 -BEGIN - PROMPT 1 10 "Lunghezza " - FIELD USER9 - FLAGS "R" - GROUP G_LV -END - -STRING F_LARGH 5 -BEGIN - PROMPT 49 10 "Larghezza " - FIELD USER10 - FLAGS "R" - GROUP G_LV -END - -NUMBER F_RIEMPI_C_XS 6 -BEGIN - PROMPT 1 11 "Riempie CAR XS " - FIELD 41@->I0 //LVAUT = 41 - GROUP G_LV -END - -NUMBER F_RIEMPI_C_M 6 -BEGIN - PROMPT 28 11 "Riempie CAR M " - FIELD 41@->I1 //LVAUT = 41 - GROUP G_LV -END - -NUMBER F_RIEMPI_C_XL 6 -BEGIN - PROMPT 54 11 "Riempie CAR XL " - FIELD 41@->I2 //LVAUT = 41 - GROUP G_LV -END - -NUMBER F_NORMALE_XS 6 -BEGIN - PROMPT 1 12 "NORMALE XS " - FIELD 41@->I3 //LVAUT = 41 - GROUP G_LV -END - -NUMBER F_NORMALE_M 6 -BEGIN - PROMPT 28 12 "NORMALE M " - FIELD 41@->I4 //LVAUT = 41 - GROUP G_LV -END - -NUMBER F_NORMALE_XL 6 -BEGIN - PROMPT 54 12 "NORMALE XL " - FIELD 41@->I5 //LVAUT = 41 - GROUP G_LV -END - -NUMBER F_RIEMPI_S_XS 6 -BEGIN - PROMPT 1 13 "Riempie SAC XS " - FIELD 41@->I6 //LVAUT = 41 - GROUP G_LV -END - -NUMBER F_RIEMPI_S_M 6 -BEGIN - PROMPT 28 13 "Riempie SAC M " - FIELD 41@->I7 //LVAUT = 41 - GROUP G_LV -END - -NUMBER F_RIEMPI_S_XL 6 -BEGIN - PROMPT 54 13 "Riempie SAC XL " - FIELD 41@->I8 //LVAUT = 41 - GROUP G_LV -END - -NUMBER F_PRECEDENZA 2 -BEGIN - PROMPT 1 14 "Precedenza " - FIELD 41@->I9 //LVAUT = 41 - GROUP G_LV -END - -LISTBOX F_TPARTICOLO 12 -BEGIN - PROMPT 28 14 "Tipo articolo " - ITEM "0|" - ITEM "1|Ristorazione" - ITEM "3|Alberghiero" - FIELD 41@->I10 //LVAUT = 41 - GROUP G_LV -END - -STRING F_DESCR_ETI 14 -BEGIN - PROMPT 1 15 "Descrizione Etichetta" - FIELD 41@->S0 //LVAUT = 41 - GROUP G_LV -END - -ENDPAGE - -PAGE "Personalizzazioni" 0 0 80 20 - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 0 0 "" -END - -STRING DLG_NULL 20 -BEGIN - FLAGS "D" - PROMPT 2 1 "Codice art. " - GROUP G_CODART -END - -STRING DLG_NULL 50 -BEGIN - FLAGS "D" - PROMPT 2 2 "Descrizione " - GROUP G_DESART -END - -STRING F_ECMAGIC1 5 -BEGIN - PROMPT 2 4 "Categoria Magic 1 " - USE &CTM - INPUT CODTAB[1,5] F_ECMAGIC1 - INPUT CODTAB[6,10] F_ECMAGIC2 - INPUT CODTAB[11,15] F_ECMAGIC3 - INPUT CODTAB[16,20] F_ECMAGIC4 - DISPLAY "Categoria 1" CODTAB[1,5] - DISPLAY "Categoria 2" CODTAB[6,10] - DISPLAY "Categoria 3" CODTAB[11,15] - DISPLAY "Categoria 4" CODTAB[16,20] - DISPLAY "Descrizione@50" S0 - OUTPUT F_ECMAGIC1 CODTAB[1,5] - OUTPUT F_ECMAGIC2 CODTAB[6,10] - OUTPUT F_ECMAGIC3 CODTAB[11,15] - OUTPUT F_ECMAGIC4 CODTAB[16,20] - OUTPUT F_ECMAGIC_DESCR S0 - CHECKTYPE NORMAL - FIELD USER1 - FLAGS "UHDZ" -END - -STRING F_ECMAGIC2 5 -BEGIN - PROMPT 29 4 "2 " - COPY ALL F_ECMAGIC1 - CHECKTYPE NORMAL - FIELD USER2 - FLAGS "UHDZ" - END - -STRING F_ECMAGIC3 5 -BEGIN - PROMPT 40 4 "3 " - COPY ALL F_ECMAGIC1 - CHECKTYPE NORMAL - FIELD USER3 - FLAGS "UHDZ" -END - -STRING F_ECMAGIC4 5 -BEGIN - PROMPT 51 4 "4 " - COPY ALL F_ECMAGIC1 - CHECKTYPE NORMAL - FIELD USER4 - FLAGS "UHDZ" -END - -STRING F_ECMAGIC_DESCR 50 -BEGIN - PROMPT 2 6 "Descrizione " - USE &CTM KEY 2 - INPUT S0 F_ECMAGIC_DESCR - DISPLAY "Descrizione@50" S0 - DISPLAY "Categoria 1" CODTAB[1,5] - DISPLAY "Categoria 2" CODTAB[6,10] - DISPLAY "Categoria 3" CODTAB[11,15] - DISPLAY "Categoria 4" CODTAB[16,20] - COPY OUTPUT F_ECMAGIC1 - CHECKTYPE NORMAL - FLAGS "UHDZ" -END - -ENDPAGE - -ENDMASK - -#include "ve2400c.uml" -#include "ve2400b.uml" -#include "ve2400a.uml" -#include "ve2400d.uml" -#include "ve2400e.uml" +#include "ve2400.h" + +TOOLBAR "Toolbar" 0 0 0 2 +#include +ENDPAGE + +PAGE "Codici" 0 2 0 0 + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 0 0 "@bArticolo" +END + +STRING F_CODART 20 +BEGIN + PROMPT 1 2 "" + FIELD LF_ANAMAG->CODART + KEY 1 + FLAG "UG" + USE LF_ANAMAG + INPUT CODART F_CODART + DISPLAY "Codice@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT F_CODART CODART + OUTPUT F_DESCR DESCR + CHECKTYPE REQUIRED + MESSAGE COPY,G_CODART@ + MESSAGE COPY,F_SEARCHLAV|CHECK,F_SEARCHLAV +END + +STRING F_SEARCHLAV 20 +BEGIN + FLAGS "HG" + PROMPT 40 1 "" + USE LAV + INPUT CODTAB F_SEARCHLAV + DISPLAY "CODICE@20" CODTAB + OUTPUT F_CODICELAV CODTAB + MESSAGE CHECK,F_CODICELAV + MESSAGE EMPTY RESET,F_CODICELAV + CHECKTYPE SEARCH +END + +STRING F_CODICELAV 20 +BEGIN + FLAGS "HG" + PROMPT 62 1 "" + STR_EXPR #F_CODICELAV=="" + MESSAGE RESET,F_CODICELAV + WARNING "Il codice è già utilizzato per le lavorazioni" +END + +STRING F_DESCR 50 +BEGIN + PROMPT 24 2 "" + FIELD LF_ANAMAG->DESCR + KEY 2 + USE LF_ANAMAG KEY 2 + INPUT DESCR F_DESCR + DISPLAY "Codice@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT F_CODART CODART + OUTPUT F_DESCR DESCR + CHECKTYPE REQUIRED + MESSAGE COPY,G_DESART@ +END + +BUTTON F_COPY 7 1 +BEGIN + PROMPT 68 1 "~Copia" + FLAGS "H" +END + +ZOOM F_DESCRAGG 50 +BEGIN + PROMPT 1 4 "Descrizione aggiuntiva " + FIELD LF_ANAMAG->DESCRAGG +END + +STRING F_ARTALT 20 +BEGIN + PROMPT 1 5 "Articolo alternativo " + FIELD LF_ANAMAG->CODARTALT + FLAG "U" + USE LF_ANAMAG + INPUT CODART F_ARTALT + DISPLAY "Codice@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT F_ARTALT CODART + OUTPUT F_DESCRALT DESCR + CHECKTYPE NORMAL +END + +STRING F_DESCRALT 50 +BEGIN + PROMPT 1 6 "Descrizione art.alt. " + FLAG "U" + USE LF_ANAMAG KEY 2 + INPUT DESCR F_DESCRALT + DISPLAY "Descrizione@50" DESCR + DISPLAY "Codice@20" CODART + COPY OUTPUT F_ARTALT + CHECKTYPE NORMAL +END + +STRING F_PRESIDIO 20 +BEGIN + PROMPT 1 7 "Codice presidio m.s. " + FIELD LF_ANAMAG->COD_PMS + FLAG "U" +END + +BOOLEAN F_SOSPESO +BEGIN + PROMPT 50 7 "Sospeso" + FIELD SOSPESO +END + +TEXT DLG_NULL +BEGIN + PROMPT 50 8 "Collegamenti esterni " +END + +GOLEM F_GOLEM 4 2 +BEGIN + PROMPT 70 7 "" + FLAGS "M" + FIELD LF_ANAMAG->GOLEM +END +TEXT DLG_NULL +BEGIN + PROMPT 1 8 "@bCodici corrispondenti" +END + +SPREADSHEET F_SHEETCOD 71 4 +BEGIN + PROMPT 1 9 "Codici corrispondenti" + FLAGS "A" + USE LF_CODCORR KEY NRIGA + INPUT CODART F_CODART + ITEM "Articolo@20" + ITEM "Tipo@10" + ITEM "U.M." + ITEM "Liv1@10" + ITEM "Liv2@6" + ITEM "Liv3@6" + ITEM "Liv4@6" + ITEM "Tipo C/F" + ITEM "Codice C/F" + ITEM "Ragiore Sociale@50" + ITEM "Descrizione@50" +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 14 "@bDescrizioni in lingua" +END + +SPREADSHEET F_SHEETDESLIN 71 +BEGIN + PROMPT 1 15 "Descrizioni in lingua" + FLAGS "A" + USE LF_DESLIN KEY NRIGA + INPUT CODART F_CODART + ITEM "Cod. lingua" + ITEM "Descrizione@50" +END + +ENDPAGE + +PAGE "Classi" 0 2 0 0 + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 0 0 "@bArticolo" +END + +STRING DLG_NULL 20 +BEGIN + FLAGS "D" + PROMPT 2 1 "" + GROUP G_CODART +END + +STRING DLG_NULL 50 +BEGIN + FLAGS "D" + PROMPT 25 1 "" + GROUP G_DESART +END + +STRING F_GRMERC 3 +BEGIN + PROMPT 1 4 "Gr. merc. " + FIELD LF_ANAMAG->GRMERC[1,3] + GROUP G_GRMERC + FLAG "U" + USE GMC KEY 1 SELECT CODTAB[4,5]=="" + INPUT CODTAB F_GRMERC + DISPLAY "Codice" CODTAB[1,3] + DISPLAY "Descrizione@50" S0 + DISPLAY "IVA@5" S7 + OUTPUT F_GRMERC CODTAB[1,3] + OUTPUT F_GRMERCD1 S0 + OUTPUT H_GRMERCD1 S0 + OUTPUT F_GRMERCB CODTAB[4,5] + CHECKTYPE NORMAL +END + +STRING F_GRMERCD1 50 +BEGIN + PROMPT 23 4 "" + GROUP G_GRMERC + USE GMC KEY 2 SELECT CODTAB[4,5]=="" + INPUT S0 F_GRMERCD1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "IVA@5" S7 + OUTPUT F_GRMERC CODTAB[1,3] + OUTPUT F_GRMERCD1 S0 + CHECKTYPE NORMAL +END + +STRING H_GRMERCD1 50 +BEGIN + PROMPT 23 4 "" + GROUP G_GRMERC + FLAGS "D" +END + +STRING F_GRMERCB 2 +BEGIN + PROMPT 1 5 "Sott. merc. " + FIELD LF_ANAMAG->GRMERC[4,5] + GROUP G_GRMERC + FLAG "U" + USE GMC //SELECT CODTAB[4,5] != "" + INPUT CODTAB[1,3] F_GRMERC + INPUT CODTAB[4,5] F_GRMERCB + COPY DISPLAY F_GRMERC + OUTPUT F_GRMERC CODTAB[1,3] + OUTPUT F_GRMERCB CODTAB[4,5] + OUTPUT F_GRMERCD2 S0 + MESSAGE SHOW,F_GRMERCD2|SHOW,H_GRMERCD1|HIDE,F_GRMERCD1 + MESSAGE EMPTY HIDE,F_GRMERCD2|HIDE,H_GRMERCD1|SHOW,F_GRMERCD1 + CHECKTYPE NORMAL +END + +STRING F_GRMERCD2 50 +BEGIN + PROMPT 23 5 "" + GROUP G_GRMERC + USE GMC KEY 2 SELECT CODTAB[4,5] != "" + INPUT S0 F_GRMERCD2 + COPY DISPLAY F_GRMERCD1 + COPY OUTPUT F_GRMERCB + CHECKTYPE NORMAL +END + +STRING F_REPARTO 3 +BEGIN + PROMPT 1 6 "Reparto " + HELP "Codice reparto" + FIELD LF_ANAMAG->REPARTO + FLAGS "UZH" + USE RPD + INPUT CODTAB F_REPARTO + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione @70" S0 + OUTPUT F_REPARTO CODTAB + OUTPUT F_DESREPARTO S0 + CHECKTYPE NORMAL + GROUP G_VD +END + +STRING F_DESREPARTO 70 50 +BEGIN + PROMPT 23 6 "" + FLAGS "H" + USE RPD KEY 2 + INPUT S0 F_DESREPARTO + DISPLAY "Descrizione@70" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_REPARTO + CHECKTYPE NORMAL + GROUP G_VD +END + +STRING F_STAGIONE 4 +BEGIN + PROMPT 1 7 "Stagione " + HELP "Codice stagione" + FIELD LF_ANAMAG->STAGIONE + FLAGS "UZH" + USE %STG + INPUT CODTAB F_STAGIONE + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione @70" S0 + OUTPUT F_STAGIONE CODTAB + OUTPUT F_DESSTAGIONE S0 + CHECKTYPE NORMAL + GROUP G_VD +END + +STRING F_DESSTAGIONE 70 50 +BEGIN + PROMPT 23 7 "" + HELP "Descrizione stagione" + FLAGS "H" + USE %STG KEY 2 + INPUT S0 F_DESSTAGIONE + DISPLAY "Descrizione@70" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_STAGIONE + CHECKTYPE NORMAL + GROUP G_VD +END + +STRING F_CATCONV 3 +BEGIN + PROMPT 1 11 "Categoria conto vendite " + FIELD LF_ANAMAG->CATCONV + GROUP G_CATVEN + FLAG "UZ" + USE CRA + INPUT CODTAB F_CATCONV + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Gruppo" I0 + DISPLAY "Conto" I1 + DISPLAY "Sottoconto" I2 + OUTPUT F_CATCONV CODTAB + OUTPUT F_CATCONV1 S0 + CHECKTYPE NORMAL +END + +STRING F_CATCONV1 50 38 +BEGIN + PROMPT 35 11 "" + GROUP G_CATVEN + USE CRA KEY 2 + INPUT S0 F_CATCONV1 + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + DISPLAY "Gruppo" I0 + DISPLAY "Conto" I1 + DISPLAY "Sottoconto" I2 + COPY OUTPUT F_CATCONV +END + +NUMBER F_GRUPPOV 3 +BEGIN + PROMPT 1 12 "Conto di vendita " + FIELD LF_ANAMAG->GRUPPOV + GROUP G_CONVEN +END + +NUMBER F_CONTOV 3 +BEGIN + PROMPT 22 12 "" + FIELD LF_ANAMAG->CONTOV + GROUP G_CONVEN +END + +NUMBER F_SOTTOCV 6 +BEGIN + PROMPT 26 12 "" + FIELD LF_ANAMAG->SOTTOCV + GROUP G_CONVEN + USE LF_PCON + INPUT GRUPPO F_GRUPPOV + INPUT CONTO F_CONTOV + INPUT SOTTOCONTO F_SOTTOCV + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_GRUPPOV GRUPPO + OUTPUT F_CONTOV CONTO + OUTPUT F_SOTTOCV SOTTOCONTO + OUTPUT F_DESCRV DESCR + CHECKTYPE NORMAL + WARNING "Conto assente" + ADD RUN cg0 -0 +END + +STRING F_DESCRV 50 37 +BEGIN + PROMPT 36 12 "" + GROUP G_CONVEN + USE LF_PCON KEY 2 + INPUT DESCR F_DESCRV + DISPLAY "Descrizione@50" DESCR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT F_SOTTOCV + WARNING "Conto assente" + ADD RUN cg0 -0 +END + + +BOOLEAN F_ARTFIS +BEGIN + PROMPT 1 17 "Articolo fiscale" + FIELD LF_ANAMAG->ARTFIS + MESSAGE TRUE ENABLE,G_RAGGFISC@ + MESSAGE FALSE DISABLE,G_RAGGFISC@ +END + +STRING F_RAGGFIS 5 +BEGIN + PROMPT 1 18 "Raggrupp. fiscale " + FIELD LF_ANAMAG->RAGGFIS + FLAGS "UD" + USE RFA + JOIN %ASF ALIAS 200 INTO CODTAB=S8 + INPUT CODTAB F_RAGGFIS + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_RAGGFIS CODTAB + OUTPUT F_RAGGFIS1 S0 + OUTPUT H_CLASSEFIS S8 + CHECKTYPE NORMAL + GROUP G_RAGGFISC +END + +STRING F_RAGGFIS1 40 +BEGIN + PROMPT 31 18 "" + FLAG "D" +END + +STRING H_CLASSEFIS 2 +BEGIN + PROMPT 1 19 "" + FLAG "HG" + MESSAGE DISABLE,F_CLASSEFIS|COPY,F_CLASSEFIS + MESSAGE EMPTY ENABLE,F_CLASSEFIS +END + +STRING F_CLASSEFIS 2 +BEGIN + PROMPT 1 19 "Classe fiscale " + FIELD LF_ANAMAG->CLASSEFIS + FLAGS "UD" + USE %ASF + INPUT CODTAB F_CLASSEFIS + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CLASSEFIS CODTAB + OUTPUT F_CLASSEFISD S0 + MESSAGE EMPTY "",F_CLASSEFISD + CHECKTYPE NORMAL + GROUP G_RAGGFISC +END + +STRING F_CLASSEFISD 40 +BEGIN + PROMPT 31 19 "" + FLAG "D" +END + +STRING F_CODIVA 4 +BEGIN + PROMPT 1 20 "Codice IVA " + FIELD LF_ANAMAG->CODIVA + USE %IVA + INPUT CODTAB F_CODIVA + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODIVA CODTAB + CHECKTYPE NORMAL +END + + +STRING F_CODIVAR 4 +BEGIN + PROMPT 20 20 "IVA ridotta " + FIELD LF_ANAMAG->CODIVAR + USE %IVA + INPUT CODTAB F_CODIVAR + COPY DISPLAY F_CODIVA + OUTPUT F_CODIVAR CODTAB + CHECKTYPE NORMAL +END + +STRING F_SCONTO 25 +BEGIN + FIELD LF_ANAMAG->SCONTO + PROMPT 43 20 "Sconto " +END + +ENDPAGE + +PAGE "Unità" 0 2 0 0 + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 0 0 "@bArticolo" +END +STRING DLG_NULL 20 +BEGIN + FLAGS "D" + PROMPT 2 1 "" + GROUP G_CODART +END + +STRING DLG_NULL 50 +BEGIN + FLAGS "D" + PROMPT 25 1 "" + GROUP G_DESART +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 3 "@bUnità di misura" +END + +SPREADSHEET F_SHEETUM 76 4 +BEGIN + PROMPT 1 4 "Unità di misura " + FLAGS "A" + USE LF_UMART KEY NRIGA + INPUT CODART F_CODART + ITEM "U.M." + ITEM "F. conversione" + ITEM "Prezzo netto@18" + ITEM "Prezzo lordo@18" +END + +STRING F_UMP 3 +BEGIN + PROMPT 1 9 "U.M. pesi " + FIELD LF_ANAMAG->UMP + FLAG "U" + USE %UMS + INPUT CODTAB F_UMP + DISPLAY "U.M." CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_UMP CODTAB + VALIDATE REQIF_FUNC 1 F_PESO + WARNING "Necessaria una unità di misura valida per il peso " + CHECKTYPE NORMAL +END + +NUMBER F_PESO 15 5 +BEGIN + PROMPT 18 9 "Peso " + FIELD LF_ANAMAG->PESO + VALIDATE REQIF_FUNC 1 F_TARA + WARNING "Necessario introdurre il peso se si è introdotta la tara" +END + +NUMBER F_TARA 15 5 +BEGIN + PROMPT 42 9 "Tara " + FIELD LF_ANAMAG->TARA +END + +NUMBER F_MASSANUN 10 3 +BEGIN + PROMPT 1 10 "Massa netta unitaria " + FIELD LF_ANAMAG->MASSANUN +END + +NUMBER F_UNSUPPUN 10 3 +BEGIN + PROMPT 42 10 "Unità suppl.unitaria " + FIELD LF_ANAMAG->UNSUPPUN +END + +NUMBER F_PPCONF 15 5 +BEGIN + PROMPT 1 11 "Pz. per pacco " + FIELD PPCONF + FLAGS "U" +END + +NUMBER F_PPCOLLO 15 5 +BEGIN + PROMPT 42 11 "Pz. per collo " + FIELD PPCOLLO + FLAGS "U" +END + +NUMBER F_PPPALLET 9 +BEGIN + PROMPT 1 12 "Pz. per pallet " + FIELD PPPALLET + FLAGS "U" +END + +CURRENCY F_VALSTATUN 15 +BEGIN + PROMPT 42 12 "Valore statistico " + FIELD VALSTATUN + FLAGS "U" +END + +GROUPBOX DLG_NULL 78 8 +BEGIN + PROMPT 0 13 "@bCONAI" + FLAGS "R" +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 14 "Sottocategorie" +END + +STRING F_SCAACC 4 +BEGIN + PROMPT 1 15 "Acciaio " + FIELD CONAISC[1,4] + USE &SCC SELECT CODTAB[1,2]=="AC" + INPUT CODTAB F_SCAACC + DISPLAY "Categoria" CODTAB[1,2] + DISPLAY "Sottocategoria" CODTAB[3,4] + DISPLAY "Descrizione@50" S0 + MESSAGE EMPTY CLEAR,F_CONACC + MESSAGE ENABLE,F_CONACC + OUTPUT F_SCAACC CODTAB +END + +STRING F_SCAALL 4 +BEGIN + PROMPT 27 15 "Alluminio " + FIELD CONAISC[5,8] + USE &SCC SELECT CODTAB[1,2]=="AL" + INPUT CODTAB F_SCAALL + COPY DISPLAY F_SCAACC + OUTPUT F_SCAALL CODTAB + MESSAGE EMPTY CLEAR,F_CONALL + MESSAGE ENABLE,F_CONALL +END + +STRING F_SCACAR 4 +BEGIN + PROMPT 54 15 "Carta " + FIELD CONAISC[9,12] + USE &SCC SELECT CODTAB[1,2]=="CA" + INPUT CODTAB F_SCACAR + COPY DISPLAY F_SCAACC + OUTPUT F_SCACAR CODTAB + MESSAGE EMPTY CLEAR,F_CONCAR + MESSAGE ENABLE,F_CONCAR +END + +STRING F_SCAPLA 4 +BEGIN + PROMPT 1 16 "Plastica " + FIELD CONAISC[13,16] + USE &SCC SELECT CODTAB[1,2]=="PL" + INPUT CODTAB F_SCAPLA + COPY DISPLAY F_SCAACC + OUTPUT F_SCAPLA CODTAB + MESSAGE EMPTY CLEAR,F_CONPLA + MESSAGE ENABLE,F_CONPLA +END + +STRING F_SCALEG 4 +BEGIN + PROMPT 27 16 "Legno " + FIELD CONAISC[17,20] + USE &SCC SELECT CODTAB[1,2]=="LE" + INPUT CODTAB F_SCALEG + COPY DISPLAY F_SCAACC + OUTPUT F_SCALEG CODTAB + MESSAGE EMPTY CLEAR,F_CONLEG + MESSAGE ENABLE,F_CONLEG +END + +STRING F_SCAVET 4 +BEGIN + PROMPT 54 16 "Vetro " + FIELD CONAISC[21,24] + USE &SCC SELECT CODTAB[1,2]=="VE" + INPUT CODTAB F_SCAVET + COPY DISPLAY F_SCAACC + OUTPUT F_SCAVET CODTAB + MESSAGE EMPTY CLEAR,F_CONVET + MESSAGE ENABLE,F_CONVET +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 17 "Pesi (Kg)" +END + +NUMBER F_CONACC 15 5 +BEGIN + PROMPT 1 18 "Acciaio " + FIELD CONACC +END + +NUMBER F_CONALL 15 5 +BEGIN + PROMPT 27 18 "Alluminio " + FIELD CONALL +END + +NUMBER F_CONCAR 15 5 +BEGIN + PROMPT 54 18 "Carta " + FIELD CONCAR +END + +NUMBER F_CONPLA 15 5 +BEGIN + PROMPT 1 19 "Plastica " + FIELD CONPLA +END + +NUMBER F_CONLEG 15 5 +BEGIN + PROMPT 27 19 "Legno " + FIELD CONLEG +END + +NUMBER F_CONVET 15 5 +BEGIN + PROMPT 54 19 "Vetro " + FIELD CONVET +END + +ENDPAGE + + +PAGE "Produzione" 0 2 0 0 + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 0 0 "@bArticolo" +END + +STRING DLG_NULL 20 +BEGIN + FLAGS "D" + PROMPT 2 1 "" + GROUP G_CODART +END + +STRING DLG_NULL 50 +BEGIN + FLAGS "D" + PROMPT 25 1 "" + GROUP G_DESART +END + +BOOLEAN F_ARTPROD +BEGIN + PROMPT 2 4 "Articolo di produzione " + FIELD LF_ANAMAG->ARTPROD + MESSAGE TRUE DISABLE,F_CODFORN|DISABLE,F_CODFORN1|DISABLE,F_RIORDINO + MESSAGE FALSE ENABLE,F_CODFORN|ENABLE,F_CODFORN1|ENABLE,F_RIORDINO +END + +NUMBER F_CODFORN 6 +BEGIN + PROMPT 1 5 "Codice fornitore " + FIELD LF_ANAMAG->CODFORN + USE LF_CLIFO + INPUT TIPOCF F_TIPOCF SELECT + INPUT CODCF F_CODFORN + DISPLAY "Codice " CODCF + DISPLAY "Ragione sociale@50" RAGSOC + DISPLAY "Partita IVA" PAIV + OUTPUT F_CODFORN CODCF + OUTPUT F_CODFORN1 RAGSOC + CHECKTYPE NORMAL +END + +STRING F_CODFORN1 50 +BEGIN + PROMPT 1 6 "Ragione sociale " + USE LF_CLIFO KEY 2 + INPUT TIPOCF F_TIPOCF SELECT + INPUT RAGSOC F_CODFORN1 + COPY DISPLAY F_CODFORN + OUTPUT F_CODFORN CODCF + OUTPUT F_CODFORN1 RAGSOC +END + +LISTBOX F_RIORDINO 20 +BEGIN + PROMPT 42 4 "Riordino per " + FIELD LF_ANAMAG->RIORDINO + ITEM "F|fabbisogno" + ITEM "P|punto di riordino" + ITEM "T|tempo" +END + +LIST F_VALDIST 2 20 +BEGIN + PROMPT 28 5 "Val.distinta " + ITEM " |Normale" + ITEM "1|Ultimo costo" + ITEM "4|Media ultimi costi" + ITEM "10|Prezzo di listino" + ITEM "5|Costo standard" + ITEM "2|Costo medio" + ITEM "3|Costo medio ponder." + ITEM "6|FIFO annuale" + ITEM "8|LIFO annuale" + ITEM "9|FIFO" + ITEM "7|LIFO" + FIELD VALDIST +END + +DATE F_DATAVDIST +BEGIN + PROMPT 65 5 "Dal " + FIELD DATAVDIST +END + +LISTBOX F_TIPOCF 20 +BEGIN + PROMPT 0 0 "" + FLAG "H" + ITEM "F|Fornitore" +END + +LISTBOX F_COLLTYPE 25 +BEGIN + PROMPT 1 7 "Mag.per movim.con distinta " + FIELD LF_ANAMAG->COLLTYPE + ITEM " |da movimento" MESSAGE CLEAR,F_CODMAGAN + ITEM "M|da riga prod.fin/semilav." MESSAGE CLEAR,F_CODMAGAN + ITEM "F|da fornitore" MESSAGE CLEAR,F_CODMAGAN + ITEM "A|da articolo" MESSAGE ENABLE,F_CODMAGAN +END + +STRING F_CODMAGAN 5 +BEGIN + PROMPT 59 7 "Codice mag. " + FIELD LF_ANAMAG->CODMAG + FLAG "U" + USE MAG + INPUT CODTAB F_CODMAGAN + DISPLAY "Codice@10" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODMAGAN CODTAB + CHECKTYPE NORMAL +END + +NUMBER F_CLASSDOG 8 +BEGIN + PROMPT 1 8 "Nomenclatura combinata " + FIELD CLASSDOG + USE %NOC + INPUT CODTAB F_CLASSDOG + DISPLAY "Codice@4" CODTAB[1,4] + DISPLAY " @2" CODTAB[5,6] + DISPLAY " @2" CODTAB[7,8] + DISPLAY "Descrizione@50" S0 + OUTPUT F_CLASSDOG CODTAB + OUTPUT F_CLASSDOGD S0 + CHECKTYPE NORMAL + VALIDATE FIXLEN_FUNC 8 + WARNING "Nomenclatura combinata assente" +END + +STRING F_CLASSDOGD 50 41 +BEGIN + PROMPT 35 8 "" + FLAG "D" +END + +STRING F_PROVOR 2 +BEGIN + PROMPT 1 9 "Provincia di origine (INTRA) " + FIELD LF_ANAMAG->PROV +END + +STRING F_PAESEOR 2 +BEGIN + PROMPT 49 9 "Paese di origine (INTRA) " + FIELD LF_ANAMAG->PAESE +END + +NUMBER F_PROVV 5 2 +BEGIN + FIELD LF_ANAMAG->PERCPROVV + PROMPT 1 10 "Provvigione " + NUM_EXPR (#F_PROVV>=0)&&(#F_PROVV<=100) + WARNING "La percentuale di provvigione deve essere compresa tra 0 e 100" +END + +NUMBER F_RICARICO 5 2 +BEGIN + FIELD LF_ANAMAG->PERCRIC + PROMPT 50 10 "Ricarico/margine " + FLAGS "U" +// NUM_EXPR #F_RICARICO<= +// WARNING "La percentuale di ricarico deve essere compresa ..." +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 0 12 "@bRiordino" +END + +NUMBER F_A_LOTTORIOR 10 3 +BEGIN + PROMPT 1 13 "Lotto minimo " + FIELD LOTTORIOR +END +NUMBER F_A_LOTTOIRIOR 10 3 +BEGIN + PROMPT 30 13 "Lotto increm. " + FIELD LOTTOIRIOR +END +NUMBER F_A_GIORNIRIOR 5 1 +BEGIN + PROMPT 64 13 "Giorni " + FIELD LEADTIME +END + +CURRENCY F_COSTSTD 15 +BEGIN + PROMPT 1 16 "Costo standard " + FIELD LF_ANAMAG->COSTSTD + FLAGS "U" +END + +CURRENCY F_ULC1 15 +BEGIN + PROMPT 1 17 "Ultimo costo " + FIELD LF_ANAMAG->ULTCOS1 + FLAGS "U" +END + +DATE F_DATAULC1 +BEGIN + PROMPT 35 17 "data " + FIELD LF_ANAMAG->DULTCOS1 +END + +NUMBER F_NUMREGULC1 7 +BEGIN + FLAGS "D" + PROMPT 52 17 "movim. " + FIELD LF_ANAMAG->NUMREG1 +END + +NUMBER F_NUMRIGULC1 4 +BEGIN + FLAGS "D" + PROMPT 68 17 "riga " + FIELD LF_ANAMAG->NUMRIG1 +END + +CURRENCY F_ULC2 15 +BEGIN + PROMPT 1 18 "Penultimo costo " + FIELD LF_ANAMAG->ULTCOS2 + FLAGS "U" +END + +DATE F_DATAULC2 +BEGIN + PROMPT 35 18 "data " + FIELD LF_ANAMAG->DULTCOS2 +END + +NUMBER F_NUMREGULC2 7 +BEGIN + FLAGS "D" + PROMPT 52 18 "movim. " + FIELD LF_ANAMAG->NUMREG2 +END + +NUMBER F_NUMRIGULC2 4 +BEGIN + FLAGS "D" + PROMPT 68 18 "riga " + FIELD LF_ANAMAG->NUMRIG2 +END + +ENDPAGE + +PAGE "Giacenze" 0 2 0 0 + +// Anno relativo alle giacenze +NUMBER H_ANNO 4 +BEGIN + PROMPT 2 2 "" + FLAGS "AHG" +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 0 0 "@bArticolo" +END + +STRING DLG_NULL 20 +BEGIN + FLAGS "D" + PROMPT 2 1 "" + GROUP G_CODART +END + +STRING DLG_NULL 50 +BEGIN + FLAGS "D" + PROMPT 25 1 "" + GROUP G_DESART +END + +STRING F_ANNO 4 +BEGIN + PROMPT 2 4 "Selezione esercizio " + FLAGS "UPZ" + USE ESC + INPUT CODTAB F_ANNO + DISPLAY "Codice@10" CODTAB + DISPLAY "Dal@16" D0 + DISPLAY "Al@16" D1 + OUTPUT F_ANNO CODTAB + CHECKTYPE NORMAL + ADD RUN cg0 -5 ESC +END + +STRING F_ANNORIF 4 // anno usato per il write dell'annata precedente +BEGIN + PROMPT 36 4 "Giacenze dell'esercizio " + FLAGS "DPZ" +END + +STRING F_UMPRINCIPALE 2 +BEGIN + PROMPT 70 4 "U.M. " + FLAGS "D" +END + +BOOLEAN F_LIVPERART +BEGIN + PROMPT 2 5 "Livelli di giacenza definiti per articolo" + FIELD LIVPERART +END + +TEXT F_WRITEON +BEGIN + PROMPT 60 5 "@bSCRITTURA ATTIVA" + FLAGS "H" +END + +SPREADSHEET F_SHEETGIAC 0 -2 +BEGIN + PROMPT 0 6 "Giacenze" + FLAGS "A" + USE LF_MAG KEY NRIGA + INPUT ANNOES F_ANNO + INPUT CODART F_CODART + // la sequenza delle colonne livelliX, mag e dep è usata per ottenere + // un ordinamento delle righe dello sheet: NON cambiarla + ITEM "Liv1@15" + ITEM "Liv2@15" + ITEM "Liv3@15" + ITEM "Liv4@15" + ITEM "Mag." + ITEM "Dep." + ITEM "Ubicazione" + ITEM "Livello rior.@10" + ITEM "Scorta min.@10" + ITEM "Lotto rior.@10" + ITEM "Lotto incr.@10" + ITEM "Giorni rior.@10" + ITEM "Giacenza @10" + ITEM "Val.Giac @12" + ITEM "Rim.Iniz.@10" + ITEM "V.Rim.Iniz.@12" + ITEM "Acq.@10" + ITEM "V.Acq.@12" + ITEM "Entr.@10" + ITEM "V.Entr.@12" + ITEM "Ven.@10" + ITEM "V.Ven.@12" + ITEM "Uscito@10" + ITEM "V.Uscito@12" + ITEM "Ord.For.@10" + ITEM "V.Ord.For.@12" + ITEM "Ord.Cli.@10" + ITEM "V.Ord.Cli.@12" + ITEM "Scarti@10" + ITEM "V.Scarti@12" + ITEM "In Prod.Comp.@10" + ITEM "In Prod.Fin.@10" + ITEM "A conto L.@10" + ITEM "In conto L.@10" + ITEM "Etichette@10" + ITEM "N.dist." +END + +NUMBER F_TOT_ORD_FOR 15 5 +BEGIN + PROMPT 2 -1 "Ordinato fornitori " + FLAGS "D" +END + +NUMBER F_TOT_ORD_CLI 15 5 +BEGIN + PROMPT 38 -1 "Ordinato clienti " + FLAGS "D" +END + +ENDPAGE + +PAGE "Storico" 0 2 0 0 + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 0 0 "@bArticolo" +END +STRING DLG_NULL 20 +BEGIN + FLAGS "D" + PROMPT 2 1 "" + GROUP G_CODART +END + +STRING DLG_NULL 50 +BEGIN + FLAGS "D" + PROMPT 25 1 "" + GROUP G_DESART +END + +STRING F_STOANNO 4 +BEGIN + PROMPT 2 4 "Selezione esercizio " + FLAGS "UZ" + + USE ESC + INPUT CODTAB F_STOANNO + DISPLAY "Codice@10" CODTAB + DISPLAY "Dal@16" D0 + DISPLAY "Al@16" D1 + OUTPUT F_STOANNO CODTAB + CHECKTYPE NORMAL + ADD RUN cg0 -5 ESC +END + +STRING F_STOANNORIF 4 // anno usato per il write dell'annata precedente +BEGIN + PROMPT 2 6 "Composizione rimanenze iniziali del " + FLAGS "DPZ" +END + +STRING F_UMPRINCIPALE2 2 +BEGIN + PROMPT 52 6 "U.M. :" + FLAGS "D" +END + +SPREADSHEET F_SHEETSTOMAG 78 8 +BEGIN + PROMPT 1 7 "Composizione" + FLAGS "A" + USE LF_STOMAG KEY NRIGA + INPUT ANNOESRIF F_STOANNO + INPUT CODART F_CODART + ITEM " @1F" + ITEM "Magazzino" + ITEM "Esercizio@10" + ITEM "Quantità@15" + ITEM "Valore unitario@15" + ITEM "Valore@15" +END + + +CURRENCY F_STOULTCOS1 15 +BEGIN + FLAGS "U" + PROMPT 2 17 "Ultimo costo " +END + +CURRENCY F_STOULTCOS2 15 +BEGIN + FLAGS "U" + PROMPT 42 17 "Penultimo costo " +END + +CURRENCY F_STOCOSTOSTD 15 +BEGIN + FLAGS "U" + PROMPT 2 18 "Costo standard " +END + +CURRENCY F_STOCOSTOMEDIO 15 +BEGIN + FLAGS "U" + PROMPT 42 18 "Costo medio " +END + +STRING F_STOCATVEN 3 +BEGIN + PROMPT 2 19 "Cat.vendita " +END + +STRING F_STOCODLIST 3 +BEGIN + PROMPT 26 19 "Cod.listino " +END + +CURRENCY F_STOPREZZOLIST 15 +BEGIN + FLAGS "U" + PROMPT 51 19 "Prezzo " +END + + +ENDPAGE + +PAGE "Analitica" 0 2 0 0 + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 0 0 "@bArticolo" +END + +STRING DLG_NULL 20 +BEGIN + FLAGS "D" + PROMPT 2 1 "" + GROUP G_CODART +END + +STRING DLG_NULL 50 +BEGIN + FLAGS "D" + PROMPT 25 1 "" + GROUP G_DESART +END + +STRING F_CATCONA 3 +BEGIN + PROMPT 1 4 "Categoria conto acquisti " + FIELD LF_ANAMAG->CATCONA + GROUP G_CATACQ + FLAG "UZ" + USE CAA + INPUT CODTAB F_CATCONA + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Gruppo" S1 + DISPLAY "Conto" S2 + DISPLAY "Sottoconto" S3 + OUTPUT F_CATCONA CODTAB + OUTPUT F_CATCONA1 S0 + CHEKTYPE NORMAL +END + +STRING F_CATCONA1 50 38 +BEGIN + PROMPT 35 4 "" + GROUP G_CATACQ + USE CAA KEY 2 + INPUT S0 F_CATCONA1 + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + DISPLAY "Gruppo" S1 + DISPLAY "Conto" S2 + DISPLAY "Sottoconto" S3 + COPY OUTPUT F_CATCONA +END + +NUMBER F_GRUPPOA 3 +BEGIN + PROMPT 1 6 "Conto d'acquisto " + FIELD LF_ANAMAG->GRUPPOA + GROUP G_CONACQ +END + +NUMBER F_CONTOA 3 +BEGIN + PROMPT 22 6 "" + FIELD LF_ANAMAG->CONTOA + GROUP G_CONACQ +END + +NUMBER F_SOTTOCA 6 +BEGIN + PROMPT 26 6 "" + FIELD LF_ANAMAG->SOTTOCA + GROUP G_CONACQ + USE LF_PCON + INPUT GRUPPO F_GRUPPOA + INPUT CONTO F_CONTOA + INPUT SOTTOCONTO F_SOTTOCA + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_GRUPPOA GRUPPO + OUTPUT F_CONTOA CONTO + OUTPUT F_SOTTOCA SOTTOCONTO + OUTPUT F_DESCRA DESCR + CHECKTYPE NORMAL + WARNING "Conto assente" + ADD RUN cg0 -0 +END + +STRING F_DESCRA 50 37 +BEGIN + PROMPT 36 6 "" + GROUP G_CONACQ + USE LF_PCON KEY 2 + INPUT DESCR F_DESCRA + DISPLAY "Descrizione@50" DESCR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT F_SOTTOCA + WARNING "Conto assente" + ADD RUN cg0 -0 +END + +GROUPBOX DLG_NULL 78 6 +BEGIN + PROMPT 0 8 "@bConto acquisti" +END + +GROUPBOX DLG_NULL 78 6 +BEGIN + PROMPT 0 14 "@bConto vendite" +END + +ENDPAGE + +PAGE "Lavanderie" 0 0 80 15 + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 0 0 "@bArticolo" +END + +STRING DLG_NULL 20 +BEGIN + FLAGS "D" + PROMPT 2 1 "" + GROUP G_CODART + FIELD 41@->CODTAB //LVAUT = 41 +END + +STRING DLG_NULL 50 +BEGIN + FLAGS "D" + PROMPT 25 1 "" + GROUP G_DESART +END + +GROUPBOX DLG_NULL 78 14 +BEGIN + PROMPT 0 4 "@bLavanderie" + GROUP G_LV +END + +STRING F_COLORE 20 +BEGIN + PROMPT 1 5 "Colore " + FIELD COLORE + GROUP G_LV +END + +STRING F_LIVELLO 1 +BEGIN + PROMPT 49 5 "Livello " + FIELD LIVELLO + GROUP G_LV +END + +STRING F_TIPOPARTE 1 +BEGIN + PROMPT 1 6 "Tipo Parte " + FIELD TIPOPARTE + GROUP G_LV +END + +STRING F_LAVATRICE 4 +BEGIN + PROMPT 49 6 "Lavatrice " + USE &LVLVT + INPUT CODTAB F_LAVATRICE + DISPLAY "Codice" CODTAB + DISPLAY "Descrizioni@50" S0 + OUTPUT F_LAVATRICE CODTAB + FIELD LAVATRICE + CHECKTYPE NORMAL + GROUP G_LV +END + +STRING F_CODLAV1 3 +BEGIN + PROMPT 1 7 "Cod. Lavaggio 1 " + USE &LVLAV + INPUT CODTAB F_CODLAV1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizioni@50" S0 + OUTPUT F_CODLAV1 CODTAB + FIELD CODLAV1 + CHECKTYPE NORMAL + GROUP G_LV +END + +STRING F_CODLAV2 3 +BEGIN + PROMPT 49 7 "Cod. Lavaggio 2 " + USE &LVLAV + INPUT CODTAB F_CODLAV2 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizioni@50" S0 + OUTPUT F_CODLAV2 CODTAB + FIELD CODLAV2 + CHECKTYPE NORMAL + GROUP G_LV +END + +STRING F_LINDEST1 3 +BEGIN + PROMPT 1 8 "Linea destinazione 1 " + USE &LVLND + INPUT CODTAB F_LINDEST1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizioni@50" S0 + OUTPUT F_LINDEST1 CODTAB + FIELD LINDEST1 + CHECKTYPE NORMAL + GROUP G_LV +END + +STRING F_LINDEST2 3 +BEGIN + PROMPT 49 8 "Linea destinazione 2 " + USE &LVLND + INPUT CODTAB F_LINDEST2 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizioni@50" S0 + OUTPUT F_LINDEST2 CODTAB + FIELD LINDEST2 + CHECKTYPE NORMAL + GROUP G_LV +END + +STRING F_ARTLAVCONT 4 +BEGIN + PROMPT 1 9 "Lavacontinua " + USE &LVLVT + INPUT CODTAB F_ARTLAVCONT + DISPLAY "Codice" CODTAB + DISPLAY "Descrizioni@50" S0 + OUTPUT F_ARTLAVCONT CODTAB + FIELD ARTLAVCONT + CHECKTYPE NORMAL + GROUP G_LV +END + +STRING F_MANGDEST 3 +BEGIN + PROMPT 49 9 "Mangano Destinazione " + USE &LVMAN + INPUT CODTAB F_MANGDEST + DISPLAY "Codice" CODTAB + DISPLAY "Descrizioni@50" S0 + OUTPUT F_MANGDEST CODTAB + FIELD MANGDEST + CHECKTYPE NORMAL + GROUP G_LV +END + +STRING F_LUNGH 5 +BEGIN + PROMPT 1 10 "Lunghezza " + FIELD USER9 + FLAGS "R" + GROUP G_LV +END + +STRING F_LARGH 5 +BEGIN + PROMPT 49 10 "Larghezza " + FIELD USER10 + FLAGS "R" + GROUP G_LV +END + +NUMBER F_RIEMPI_C_XS 6 +BEGIN + PROMPT 1 11 "Riempie CAR XS " + FIELD 41@->I0 //LVAUT = 41 + GROUP G_LV +END + +NUMBER F_RIEMPI_C_M 6 +BEGIN + PROMPT 28 11 "Riempie CAR M " + FIELD 41@->I1 //LVAUT = 41 + GROUP G_LV +END + +NUMBER F_RIEMPI_C_XL 6 +BEGIN + PROMPT 54 11 "Riempie CAR XL " + FIELD 41@->I2 //LVAUT = 41 + GROUP G_LV +END + +NUMBER F_NORMALE_XS 6 +BEGIN + PROMPT 1 12 "NORMALE XS " + FIELD 41@->I3 //LVAUT = 41 + GROUP G_LV +END + +NUMBER F_NORMALE_M 6 +BEGIN + PROMPT 28 12 "NORMALE M " + FIELD 41@->I4 //LVAUT = 41 + GROUP G_LV +END + +NUMBER F_NORMALE_XL 6 +BEGIN + PROMPT 54 12 "NORMALE XL " + FIELD 41@->I5 //LVAUT = 41 + GROUP G_LV +END + +NUMBER F_RIEMPI_S_XS 6 +BEGIN + PROMPT 1 13 "Riempie SAC XS " + FIELD 41@->I6 //LVAUT = 41 + GROUP G_LV +END + +NUMBER F_RIEMPI_S_M 6 +BEGIN + PROMPT 28 13 "Riempie SAC M " + FIELD 41@->I7 //LVAUT = 41 + GROUP G_LV +END + +NUMBER F_RIEMPI_S_XL 6 +BEGIN + PROMPT 54 13 "Riempie SAC XL " + FIELD 41@->I8 //LVAUT = 41 + GROUP G_LV +END + +NUMBER F_PRECEDENZA 2 +BEGIN + PROMPT 1 14 "Precedenza " + FIELD 41@->I9 //LVAUT = 41 + GROUP G_LV +END + +LISTBOX F_TPARTICOLO 12 +BEGIN + PROMPT 28 14 "Tipo articolo " + ITEM "0|" + ITEM "1|Ristorazione" + ITEM "3|Alberghiero" + FIELD 41@->I10 //LVAUT = 41 + GROUP G_LV +END + +STRING F_DESCR_ETI 14 +BEGIN + PROMPT 1 15 "Descrizione Etichetta" + FIELD 41@->S0 //LVAUT = 41 + GROUP G_LV +END + +CURRENCY F_VALCONV +BEGIN + PROMPT 1 16 "Valore convenzionale " + FIELD 41@->R0 //LVAUT = 41 + GROUP G_LV +END + +ENDPAGE + +PAGE "Personalizzazioni" 0 0 80 20 + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 0 0 "" +END + +STRING DLG_NULL 20 +BEGIN + FLAGS "D" + PROMPT 2 1 "Codice art. " + GROUP G_CODART +END + +STRING DLG_NULL 50 +BEGIN + FLAGS "D" + PROMPT 2 2 "Descrizione " + GROUP G_DESART +END + +STRING F_ECMAGIC1 5 +BEGIN + PROMPT 2 4 "Categoria Magic 1 " + USE &CTM + INPUT CODTAB[1,5] F_ECMAGIC1 + INPUT CODTAB[6,10] F_ECMAGIC2 + INPUT CODTAB[11,15] F_ECMAGIC3 + INPUT CODTAB[16,20] F_ECMAGIC4 + DISPLAY "Categoria 1" CODTAB[1,5] + DISPLAY "Categoria 2" CODTAB[6,10] + DISPLAY "Categoria 3" CODTAB[11,15] + DISPLAY "Categoria 4" CODTAB[16,20] + DISPLAY "Descrizione@50" S0 + OUTPUT F_ECMAGIC1 CODTAB[1,5] + OUTPUT F_ECMAGIC2 CODTAB[6,10] + OUTPUT F_ECMAGIC3 CODTAB[11,15] + OUTPUT F_ECMAGIC4 CODTAB[16,20] + OUTPUT F_ECMAGIC_DESCR S0 + CHECKTYPE NORMAL + FIELD USER1 + FLAGS "UHDZ" +END + +STRING F_ECMAGIC2 5 +BEGIN + PROMPT 29 4 "2 " + COPY ALL F_ECMAGIC1 + CHECKTYPE NORMAL + FIELD USER2 + FLAGS "UHDZ" + END + +STRING F_ECMAGIC3 5 +BEGIN + PROMPT 40 4 "3 " + COPY ALL F_ECMAGIC1 + CHECKTYPE NORMAL + FIELD USER3 + FLAGS "UHDZ" +END + +STRING F_ECMAGIC4 5 +BEGIN + PROMPT 51 4 "4 " + COPY ALL F_ECMAGIC1 + CHECKTYPE NORMAL + FIELD USER4 + FLAGS "UHDZ" +END + +STRING F_ECMAGIC_DESCR 50 +BEGIN + PROMPT 2 6 "Descrizione " + USE &CTM KEY 2 + INPUT S0 F_ECMAGIC_DESCR + DISPLAY "Descrizione@50" S0 + DISPLAY "Categoria 1" CODTAB[1,5] + DISPLAY "Categoria 2" CODTAB[6,10] + DISPLAY "Categoria 3" CODTAB[11,15] + DISPLAY "Categoria 4" CODTAB[16,20] + COPY OUTPUT F_ECMAGIC1 + CHECKTYPE NORMAL + FLAGS "UHDZ" +END + +ENDPAGE + +ENDMASK + +#include "ve2400c.uml" +#include "ve2400b.uml" +#include "ve2400a.uml" +#include "ve2400d.uml" +#include "ve2400e.uml"