From cbfb9ffe347a456773d7130d366fa945ab43ccdd Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 15 Nov 1994 11:22:16 +0000 Subject: [PATCH] Corretta gestione ricerca registri nelle causali git-svn-id: svn://10.65.10.50/trunk@624 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cg0500.cpp | 64 ++----- cg/cg0500a.uml | 2 +- cg/cg2100.cpp | 3 +- cg/cg2100i.uml | 28 ++- cg/cg2100o.uml | 10 ++ cg/cg2102.cpp | 7 +- cg/cg21iva.uml | 1 + cg/cg2200a.uml | 2 + cg/cg4200.cpp | 480 ++++++++++++++++++++++++------------------------- cg/cg4200a.uml | 241 +++++++++++++------------ cg/cg5300a.uml | 370 +++++++++++++++++++------------------- 11 files changed, 608 insertions(+), 600 deletions(-) diff --git a/cg/cg0500.cpp b/cg/cg0500.cpp index 7d4cc4eab..d800876c0 100755 --- a/cg/cg0500.cpp +++ b/cg/cg0500.cpp @@ -91,7 +91,6 @@ protected: // int cancella(long items); public: - bool _forcedCopy; tipo_descr _tipo_des; // Il tipo di causale corrente void compila_array (const TString&, int, int, int); @@ -184,7 +183,6 @@ void TCaus_app::causale_vendite() if (_tipo_des == vendita) return; - clear_descr(); _tipo_des = vendita; int i=0; @@ -197,7 +195,6 @@ void TCaus_app::causale_vendite() set_descr(i++, "C Imp. non soggetti"); set_descr(i++, "C Ritenute fiscali"); set_descr(i++, "C Ritenute soc."); - carica_righe_libere(); } @@ -206,7 +203,6 @@ void TCaus_app::causale_acquisti() if (_tipo_des == acquisto) return; - clear_descr(); _tipo_des = acquisto; int i=0; @@ -219,7 +215,6 @@ void TCaus_app::causale_acquisti() set_descr(i++, "C Imp. non soggetti"); set_descr(i++, "C Ritenute fiscali"); set_descr(i++, "C Ritenute soc."); - carica_righe_libere(); } void TCaus_app::causale_ritenute() @@ -227,14 +222,12 @@ void TCaus_app::causale_ritenute() if (_tipo_des == ritenuta_occas) return; - clear_descr(); _tipo_des = ritenuta_occas; int i=0; set_descr (i++, "Costo"); set_descr (i++, "Cassa/banca"); set_descr (i++, "Erario"); - carica_righe_libere(); } void TCaus_app::causale_inc_pag() @@ -244,7 +237,6 @@ void TCaus_app::causale_inc_pag() if (_tipo_des == tipo_des) return; - clear_descr(); _tipo_des = tipo_des; int i=0; @@ -261,7 +253,6 @@ void TCaus_app::causale_inc_pag() set_descr ( i++, "C Ritenute fiscali"); if (_tipo_des == incasso_pagamento_gesval) set_descr (i++, "C Differenza cambio"); - carica_righe_libere(); } //////////////////////////////////////////////////////////////////////////// @@ -613,41 +604,23 @@ bool TCaus_app::sottoconto_hndl(TMask_field& f, KEY k) void TCaus_app::compila_array(const TString& tpd, int tpm, int tpr, int m770) { - _forcedCopy = FALSE; + clear_descr(); + if (tpd.empty() || tpd == "IN" || tpd == "AN" || tpd == "PG") { - if (saldaconto()) + switch (tpm) { - switch (tpm) { - case 3: - case 5: - case 6: + case 3: + case 5: + case 6: + if (saldaconto()) causale_inc_pag(); - break; - case 0: - if (m770 == 6) - { - causale_ritenute(); - } - else - { - _forcedCopy = TRUE; - clear_descr(); - carica_righe_libere(); - } - break; - default: - _forcedCopy = TRUE; - clear_descr(); - carica_righe_libere(); - break; - } - } - else - { // NO saldaconto - _forcedCopy = TRUE; - clear_descr(); - carica_righe_libere(); + break; + case 0: + if (m770 == 6) + causale_ritenute(); + default: + break; } } else // C'e' il tipodoc. @@ -657,13 +630,8 @@ void TCaus_app::compila_array(const TString& tpd, int tpm, int tpr, int m770) else if (tpr == 2) causale_acquisti(); - else - { - _forcedCopy = TRUE; - clear_descr(); - carica_righe_libere(); - } } + carica_righe_libere(); } @@ -895,7 +863,7 @@ void TCaus_app::read_firm_params() _saldaconto = conf.get_bool("GesSal"); _valuta = conf.get_bool("GesVal"); _anno_iva = (int)conf.get_long("AnLiIv", "cg"); - if (_anno_iva < 1900) + if (_anno_iva < 1800) { _anno_iva = TDate(TODAY).year(); error_box("Nei parametri ditta manca l'anno liquidazione IVA: assumo %d", _anno_iva); @@ -938,8 +906,6 @@ bool TCaus_app::user_create() cs.sheet_mask().set_handler(SS_SOTTOCONTO+100, sottoconto_hndl); cs.sheet_mask().set_handler(SS_SOTTOCONTO+200, sottoconto_hndl); - _forcedCopy = FALSE; - return TRUE; } diff --git a/cg/cg0500a.uml b/cg/cg0500a.uml index 644f4098b..6682ea12b 100755 --- a/cg/cg0500a.uml +++ b/cg/cg0500a.uml @@ -143,7 +143,7 @@ END NUMBER F_ANNOES 4 BEGIN PROMPT 2 5 "" - FLAGS "H" + FLAGS "AH" END NUMBER F_TIPO_REG 1 diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index 91520c5eb..a3ea0e620 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -290,7 +290,6 @@ void TPrimanota_application::init_mask(TMask& m) read_caus(NULL, 0); // Setta campi obbligatori fill_sheet(m); - const bool intra = _causale.intra(); const bool valintra = _causale.valintra(); const bool corrisp = _causale.corrispettivi(); @@ -311,7 +310,7 @@ void TPrimanota_application::init_mask(TMask& m) m.send_key(K_SHIFT+K_CTRL+forg, -2); // GROUP 2 (fornitori) if (corrisp) m.hide(F_STATOPAIV); - m.show(F_CORRLIRE, intra); + m.show(F_CORRLIRE, valintra); m.show(F_CORRVALUTA, valintra); m.show(F_CODIVA, m.mode() == MODE_INS); } diff --git a/cg/cg2100i.uml b/cg/cg2100i.uml index be609460b..28caeebb3 100755 --- a/cg/cg2100i.uml +++ b/cg/cg2100i.uml @@ -35,8 +35,6 @@ BEGIN CHECKTYPE REQUIRED END -// ANDREA E' ARRIVATO FINO A QUESTO PUNTO - NUMBER F_ANNOES 4 BEGIN PROMPT 52 2 "Esercizio " @@ -47,6 +45,7 @@ END DATE F_DATADOC BEGIN PROMPT 1 3 "Data del documento " + HELP "Data del documento che ha generato il movimento" FIELD LF_MOV->DATADOC WARNING "Specificare la data del documento" END @@ -54,6 +53,7 @@ END STRING F_NUMDOC 7 BEGIN PROMPT 52 3 "Documento n. " + HELP "Numero del documento che ha generato il movimento" FIELD LF_MOV->NUMDOC WARNING "Specificare il numero documento" END @@ -61,6 +61,7 @@ END STRING F_DESCR 50 BEGIN PROMPT 1 4 "Descrizione documento " + HELP "Descrizione del documento che ha generato il movimento" FIELD LF_MOV->DESCR END @@ -88,6 +89,7 @@ END LIST I_SEZIONE1 1 8 BEGIN PROMPT 1 7 "Riga 1 " + HELP "Sezione del conto della prima riga" ITEM "D|Dare" ITEM "A|Avere" END @@ -95,6 +97,7 @@ END NUMBER F_TOTALE 15 BEGIN PROMPT 18 7 "" + HELP "Importo del conto di prima riga" FIELD LF_MOV->TOTDOC FLAGS "R" PICTURE "." @@ -114,6 +117,7 @@ END NUMBER F_GRUPPOCLIFO 3 BEGIN PROMPT 51 7 "" + HELP "Codice del conto di prima riga" CHECKTYPE REQUIRED WARNING "Gruppo assente" END @@ -121,6 +125,7 @@ END NUMBER F_CONTOCLIFO 3 BEGIN PROMPT 57 7 "" + HELP "Codice del conto di prima riga" USE LF_PCON SELECT SOTTOCONTO=="" INPUT GRUPPO F_GRUPPOCLIFO INPUT CONTO F_CONTOCLIFO @@ -136,6 +141,7 @@ END NUMBER F_CLIENTE 6 BEGIN PROMPT 65 7 "" + HELP "Codice del conto di prima riga" FIELD LF_MOV->CODCF USE LF_CLIFO INPUT TIPOCF "C" @@ -151,6 +157,7 @@ END NUMBER F_FORNITORE 6 BEGIN PROMPT 65 7 "" + HELP "Codice del conto di prima riga" FIELD LF_MOV->CODCF USE LF_CLIFO INPUT TIPOCF "F" @@ -166,6 +173,7 @@ END NUMBER I_SOTTOCONTO 6 BEGIN PROMPT 65 7 "" + HELP "Codice del conto di prima riga" USE LF_PCON SELECT SOTTOCONTO != "" INPUT SOTTOCONTO I_SOTTOCONTO INPUT GRUPPO F_GRUPPOCLIFO @@ -185,6 +193,7 @@ END LIST I_SEZIONE2 1 8 BEGIN PROMPT 1 8 "Riga 2 " + HELP "Sezione del conto della prima riga" ITEM "D|Dare" ITEM "A|Avere" END @@ -192,6 +201,7 @@ END NUMBER I_IMPORTO2 15 BEGIN PROMPT 18 8 "" + HELP "Importo del conto di seconda riga" PICTURE "." FLAGS "R" END @@ -206,16 +216,19 @@ END NUMBER I_GRUPPO2 3 BEGIN PROMPT 51 8 "" + HELP "Codice del conto di seconda riga" END NUMBER I_CONTO2 3 BEGIN PROMPT 57 8 "" + HELP "Codice del conto di seconda riga" END NUMBER I_SOTTOCONTO2 6 BEGIN PROMPT 65 8 "" + HELP "Codice del conto di seconda riga" COPY USE I_SOTTOCONTO INPUT GRUPPO I_GRUPPO2 INPUT CONTO I_CONTO2 @@ -234,6 +247,7 @@ END LIST I_SEZIONE3 1 8 BEGIN PROMPT 1 9 "Riga 3 " + HELP "Sezione del conto di terza riga" ITEM "D|Dare" ITEM "A|Avere" END @@ -241,6 +255,7 @@ END NUMBER I_IMPORTO3 15 BEGIN PROMPT 18 9 "" + HELP "Importo del conto di terza riga" PICTURE "." FLAGS "R" END @@ -255,16 +270,19 @@ END NUMBER I_GRUPPO3 3 BEGIN PROMPT 51 9 "" + HELP "Codice del conto di terza riga" END NUMBER I_CONTO3 3 BEGIN PROMPT 57 9 "" + HELP "Codice del conto di terza riga" END NUMBER I_SOTTOCONTO3 6 BEGIN PROMPT 65 9 "" + HELP "Codice del conto di terza riga" COPY USE I_SOTTOCONTO INPUT GRUPPO I_GRUPPO3 INPUT CONTO I_CONTO3 @@ -281,6 +299,7 @@ END LIST I_SEZIONE4 1 8 BEGIN PROMPT 1 10 "Riga 4 " + HELP "Sezione del conto di quarta riga" ITEM "D|Dare" ITEM "A|Avere" END @@ -288,6 +307,7 @@ END NUMBER I_IMPORTO4 15 BEGIN PROMPT 18 10 "" + HELP "Importo del conto di quarta riga" PICTURE "." FLAGS "R" END @@ -302,16 +322,19 @@ END NUMBER I_GRUPPO4 3 BEGIN PROMPT 51 10 "" + HELP "Codice del conto di quarta riga" END NUMBER I_CONTO4 3 BEGIN PROMPT 57 10 "" + HELP "Codice del conto di quarta riga" END NUMBER I_SOTTOCONTO4 6 BEGIN PROMPT 65 10 "" + HELP "Codice del conto di quarta riga" COPY USE I_SOTTOCONTO INPUT GRUPPO I_GRUPPO4 INPUT CONTO I_CONTO4 @@ -341,4 +364,3 @@ ENDPAGE ENDMASK - diff --git a/cg/cg2100o.uml b/cg/cg2100o.uml index 64b615391..7b48a8067 100755 --- a/cg/cg2100o.uml +++ b/cg/cg2100o.uml @@ -40,18 +40,21 @@ END STRING O_INDIRIZZO 40 BEGIN PROMPT 2 4 "Indirizzo " + HELP "Indirizzo di residenza della persona" FIELD INDIR END STRING O_NUMERO 6 BEGIN PROMPT 55 4 "Numero " + HELP "Numero civico della residenza della persona" FIELD CIV END STRING O_STATO 3 BEGIN PROMPT 2 5 "Stato " + HELP "Stato di residenza della persona" FIELD STATO FLAGS "U" USE %STA @@ -65,6 +68,7 @@ END STRING O_COMUNE 4 BEGIN PROMPT 27 5 "Comune " + HELP "Codice del comune di residenza della persona" FIELD COM FLAGS "U" USE LF_COMUNI @@ -81,12 +85,14 @@ END NUMBER O_CAP 5 BEGIN PROMPT 56 5 "C.A.P. " + HELP "CAP della residenza della persona" FIELD CAP END STRING O_DENCOM 50 BEGIN PROMPT 2 6 "Denominazione " + HELP "Nome del comune di residenza della persona" USE LF_COMUNI KEY 2 INPUT DENCOM O_DENCOM DISPLAY "Denominazione@50" DENCOM @@ -111,12 +117,14 @@ END DATE O_DATANAS BEGIN PROMPT 23 9 "Data " + HELP "Data di nascita della persona" FIELD DNASC END STRING O_STATONAS 3 BEGIN PROMPT 41 9 "Stato " + HELP "Codice dello stato di nascita della persona" FIELD STATONASC FLAGS "U" COPY USE O_STATO @@ -129,6 +137,7 @@ END STRING O_COMUNENAS 4 BEGIN PROMPT 55 9 "Comune " + HELP "Codice del comune di nascita della persona" FIELD COMNASC FLAGS "U" COPY USE O_COMUNE @@ -143,6 +152,7 @@ END STRING O_DENCOMNAS 50 BEGIN PROMPT 2 10 "Denominazione " + HELP "Nome del comune di nascita della persona" COPY USE O_DENCOM INPUT DENCOM O_DENCOMNAS COPY DISPLAY O_DENCOM diff --git a/cg/cg2102.cpp b/cg/cg2102.cpp index d5eb69807..529444d86 100755 --- a/cg/cg2102.cpp +++ b/cg/cg2102.cpp @@ -1004,18 +1004,21 @@ bool TPrimanota_application::iva_sottoconto_handler(TMask_field& f, KEY key) if (!suspended_handler(f, key)) return FALSE; - if (key == K_TAB && f.dirty() && !app().causale().corrispettivi()) + if (key == K_TAB && f.dirty()) { const TLocalisamfile& piano = ((TEdit_field&)f).browse()->cursor()->file(); int spric = piano.get_int("TIPOSPRIC"); - if (spric == 2 || spric == 3) + if ((spric == 2 || spric == 3) && !app().causale().corrispettivi()) { const TFixed_string td(app().causale().tipo_doc()); if (td == "FV" || td == "NC") spric = 4; } +/* TMask_field& s = f.mask().field(105); if (app().iva() == iva_vendite || s.get().empty()) s.set(spric > 0 ? format("%d", spric) : ""); +*/ + f.mask().set(105, spric > 0 ? format("%d", spric) : ""); } return TRUE; } diff --git a/cg/cg21iva.uml b/cg/cg21iva.uml index e3a1147e5..3b5d25397 100755 --- a/cg/cg21iva.uml +++ b/cg/cg21iva.uml @@ -127,6 +127,7 @@ BEGIN DISPLAY "Conto" CONTO DISPLAY "Sottoconto" SOTTOCONTO DISPLAY "Descrizione@50" DESCR + DISPLAY "C/R" TIPOCR OUTPUT 109 SOTTOCONTO OUTPUT 107 GRUPPO OUTPUT 108 CONTO diff --git a/cg/cg2200a.uml b/cg/cg2200a.uml index 71bd7d600..a325f7766 100755 --- a/cg/cg2200a.uml +++ b/cg/cg2200a.uml @@ -10,6 +10,7 @@ END DATE F_FROMDATE BEGIN PROMPT 2 2 "Data " + HELP "Data del primo movimento provvisorio da eliminare" USE LF_MOV KEY 2 SELECT PROVVIS="P" INPUT DATAREG F_FROMDATE INPUT NUMREG F_FROMREG @@ -32,6 +33,7 @@ END GROUPBOX DLG_NULL 40 3 BEGIN PROMPT 1 4 "Al movimento" + HELP "Data dell'ultimo movimento provvisorio da eliminare" END DATE F_TODATE diff --git a/cg/cg4200.cpp b/cg/cg4200.cpp index 81c59691c..49d17a6d7 100755 --- a/cg/cg4200.cpp +++ b/cg/cg4200.cpp @@ -1,240 +1,240 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cg4.h" -#include "cg4200.h" - -class TCopia_archivi : public TApplication -{ - TMask* _msk; - long _default_firm; - - virtual bool create() ; - virtual bool destroy() ; - bool menu(MENU_TAG); - bool copyfile(int logicnum, long from, long to); - void clearivd(long to); - void copyivd(long from, long to); - -public: - TCopia_archivi() : _msk(NULL) {} -}; - -bool TCopia_archivi::copyfile(int logicnum, long from, long to) -{ - if (from > 0) set_firm(from); - else prefhndl->set("com"); - TSystemisamfile file(logicnum); - TFilename t; t.tempdir(); t << "/tr" << logicnum; - - if (file.dump(t) != NOERR) - return error_box("Impossibile leggere i dati da copiare errore n. %d", file.status()); - set_firm(to); - TFilename s; s.tempdir(); s << "/sv" << logicnum; - - if (file.dump(s) != NOERR) - return error_box("Impossibile salvare i dati originali errore n. %d", file.status()); - - TDir dir; - - dir.get(logicnum, _lock, _nordir, _sysdirop); - dir.eod() = 0L; - dir.put(logicnum, _nordir, _sysdirop); - file.packindex(); - if (file.load(t) != NOERR) - { - error_box("Impossibile scrivere i dati errore n. %d. Cerco di ripristinare i dati originali.", file.status()); - dir.get(logicnum, _lock, _nordir, _sysdirop); - dir.eod() = 0L; - dir.put(logicnum, _nordir, _sysdirop); - file.packindex(); - if (file.load(s)) - error_box("Impossibile scrivere i dati originali errore n. %d", file.status()); - return FALSE; - } - return TRUE; -} - -void TCopia_archivi::clearivd(long to) -{ - TLocalisamfile pcon(LF_PCON); - - for (pcon.first(); pcon.good(); pcon.next()) - { - pcon.put(PCN_SEZIVD, "0"); - pcon.zero(PCN_LETTIVD); - pcon.zero(PCN_NUMRIVD); - pcon.zero(PCN_NUMIVD); - pcon.put(PCN_SEZIVDOPP, "0"); - pcon.zero(PCN_LETTIVDOPP); - pcon.zero(PCN_NUMRIVDOPP); - pcon.zero(PCN_NUMIVDOPP); - pcon.rewrite(); - } -} - -void TCopia_archivi::copyivd(long from, long to) -{ - if (from > 0) set_firm(from); - else prefhndl->set("com"); - TLocalisamfile pcon(LF_PCON); - TAssoc_array riclass; - - for (pcon.first(); pcon.good(); pcon.next()) - { - TString16 key; - TToken_string data; - - key.format("%03d%03d%06ld", pcon.get_int(PCN_GRUPPO), - pcon.get_int(PCN_CONTO), pcon.get_long(PCN_SOTTOCONTO)); - data.add(pcon.get(PCN_SEZIVD)); - data.add(pcon.get(PCN_LETTIVD)); - data.add(pcon.get(PCN_NUMRIVD)); - data.add(pcon.get(PCN_NUMIVD)); - data.add(pcon.get(PCN_SEZIVDOPP)); - data.add(pcon.get(PCN_LETTIVDOPP)); - data.add(pcon.get(PCN_NUMRIVDOPP)); - data.add(pcon.get(PCN_NUMIVDOPP)); - riclass.add(key, data); - } - set_firm(to); - for (pcon.first(); pcon.good(); pcon.next()) - { - TString16 key; - - key.format("%03d%03d%06ld", pcon.get_int(PCN_GRUPPO), - pcon.get_int(PCN_CONTO), pcon.get_long(PCN_SOTTOCONTO)); - - TToken_string * data = (TToken_string *) riclass.objptr(key); - - if (data == NULL) - { - pcon.put(PCN_SEZIVD, "0"); - pcon.zero(PCN_LETTIVD); - pcon.zero(PCN_NUMRIVD); - pcon.zero(PCN_NUMIVD); - pcon.put(PCN_SEZIVDOPP, "0"); - pcon.zero(PCN_LETTIVDOPP); - pcon.zero(PCN_NUMRIVDOPP); - pcon.zero(PCN_NUMIVDOPP); - } - else - { - pcon.put(PCN_SEZIVD, data->get(0)); - pcon.put(PCN_LETTIVD, data->get()); - pcon.put(PCN_NUMRIVD, data->get()); - pcon.put(PCN_NUMIVD, data->get()); - pcon.put(PCN_SEZIVDOPP, data->get()); - pcon.put(PCN_LETTIVDOPP, data->get()); - pcon.put(PCN_NUMRIVDOPP, data->get()); - pcon.put(PCN_NUMIVDOPP, data->get()); - } - pcon.rewrite(); - } -} - -bool TCopia_archivi::create() -{ - _msk = new TMask("cg4200a") ; - _default_firm = get_firm(); - dispatch_e_menu(BAR_ITEM(1)); - return TRUE; -} - -bool TCopia_archivi::destroy() -{ - if (_msk != NULL) delete _msk; - return TRUE; -} - -bool TCopia_archivi::menu(MENU_TAG) -{ - while (_msk->run() == K_ENTER) - { - const long from_firm = _msk->get_long(F_FROMFIRM); - const long to_firm = _msk->get_long(F_TOFIRM); - const bool copy_pcon = _msk->get_bool(F_PCON); - const bool copy_causali = _msk->get_bool(F_CAUS); - const bool copy_clifo = _msk->get_bool(F_CLIFO); - const bool copy_ivd = _msk->get_bool(F_IVD); - if (copy_pcon || copy_causali || copy_clifo || copy_ivd) - { - if (prefhndl->exist(to_firm)) - { - set_firm(to_firm); - TLocalisamfile mov(LF_MOV); - - if ((mov.eod() == 0) || (!copy_pcon && !copy_causali && !copy_clifo)) - { - TString mess("Attenzione "); - int count = 0; - - if (copy_pcon) - { - mess << "il piano dei conti"; - count++; - } - if (copy_causali) - { - if (count > 0) mess << ","; - mess << " le causali"; - count++; - } - if (copy_clifo) - { - if (count > 0) mess << ","; - mess << " i clienti e fornitori"; - count++; - } - if (copy_ivd) - { - if (count > 0) mess << ","; - mess << " la riclassificazione IV direttiva"; - count++; - } - mess << " della ditta " << to_firm; - if (count > 1) - mess << " saranno sovrascritti"; - else - mess << " sara' sovrascritto"; - mess << ". Devo continuare"; - if (yesno_box((const char *) mess)) - { - if (copy_pcon) - { - if (copyfile(LF_PCON, from_firm, to_firm) && !copy_ivd) - clearivd(to_firm); - } - if (copy_causali) - { - if (copyfile(LF_CAUSALI, from_firm, to_firm)) - copyfile(LF_RCAUSALI, from_firm, to_firm); - } - if (copy_clifo) - copyfile(LF_CLIFO, from_firm, to_firm); - if (!copy_pcon && copy_ivd) - copyivd(from_firm, to_firm); - } - } - else error_box("La copia si puo' effettuare solo se non sono stati registrati movimenti"); - set_firm(_default_firm); - } - else error_box("Gli archivi della ditta %d non sono stati ancora generati",to_firm); - _msk->reset(); - } - } - return FALSE; -} - -int cg4200(int argc, char** argv) -{ - TCopia_archivi a ; - a.run(argc, argv, "Copia archivi"); - return 0; -} +#include +#include +#include + +#include +#include +#include +#include + +#include "cg4.h" +#include "cg4200.h" + +class TCopia_archivi : public TApplication +{ + TMask* _msk; + long _default_firm; + + virtual bool create() ; + virtual bool destroy() ; + bool menu(MENU_TAG); + bool copyfile(int logicnum, long from, long to); + void clearivd(long to); + void copyivd(long from, long to); + +public: + TCopia_archivi() : _msk(NULL) {} +}; + +bool TCopia_archivi::copyfile(int logicnum, long from, long to) +{ + if (from > 0) set_firm(from); + else prefhndl->set("com"); + TSystemisamfile file(logicnum); + TFilename t; t.tempdir(); t << "/tr" << logicnum; + + if (file.dump(t) != NOERR) + return error_box("Impossibile leggere i dati da copiare errore n. %d", file.status()); + set_firm(to); + TFilename s; s.tempdir(); s << "/sv" << logicnum; + + if (file.dump(s) != NOERR) + return error_box("Impossibile salvare i dati originali errore n. %d", file.status()); + + TDir dir; + + dir.get(logicnum, _lock, _nordir, _sysdirop); + dir.eod() = 0L; + dir.put(logicnum, _nordir, _sysdirop); + file.packindex(); + if (file.load(t) != NOERR) + { + error_box("Impossibile scrivere i dati errore n. %d. Cerco di ripristinare i dati originali.", file.status()); + dir.get(logicnum, _lock, _nordir, _sysdirop); + dir.eod() = 0L; + dir.put(logicnum, _nordir, _sysdirop); + file.packindex(); + if (file.load(s)) + error_box("Impossibile scrivere i dati originali errore n. %d", file.status()); + return FALSE; + } + return TRUE; +} + +void TCopia_archivi::clearivd(long to) +{ + TLocalisamfile pcon(LF_PCON); + + for (pcon.first(); pcon.good(); pcon.next()) + { + pcon.put(PCN_SEZIVD, "0"); + pcon.zero(PCN_LETTIVD); + pcon.zero(PCN_NUMRIVD); + pcon.zero(PCN_NUMIVD); + pcon.put(PCN_SEZIVDOPP, "0"); + pcon.zero(PCN_LETTIVDOPP); + pcon.zero(PCN_NUMRIVDOPP); + pcon.zero(PCN_NUMIVDOPP); + pcon.rewrite(); + } +} + +void TCopia_archivi::copyivd(long from, long to) +{ + if (from > 0) set_firm(from); + else prefhndl->set("com"); + TLocalisamfile pcon(LF_PCON); + TAssoc_array riclass; + + for (pcon.first(); pcon.good(); pcon.next()) + { + TString16 key; + TToken_string data; + + key.format("%03d%03d%06ld", pcon.get_int(PCN_GRUPPO), + pcon.get_int(PCN_CONTO), pcon.get_long(PCN_SOTTOCONTO)); + data.add(pcon.get(PCN_SEZIVD)); + data.add(pcon.get(PCN_LETTIVD)); + data.add(pcon.get(PCN_NUMRIVD)); + data.add(pcon.get(PCN_NUMIVD)); + data.add(pcon.get(PCN_SEZIVDOPP)); + data.add(pcon.get(PCN_LETTIVDOPP)); + data.add(pcon.get(PCN_NUMRIVDOPP)); + data.add(pcon.get(PCN_NUMIVDOPP)); + riclass.add(key, data); + } + set_firm(to); + for (pcon.first(); pcon.good(); pcon.next()) + { + TString16 key; + + key.format("%03d%03d%06ld", pcon.get_int(PCN_GRUPPO), + pcon.get_int(PCN_CONTO), pcon.get_long(PCN_SOTTOCONTO)); + + TToken_string * data = (TToken_string *) riclass.objptr(key); + + if (data == NULL) + { + pcon.put(PCN_SEZIVD, "0"); + pcon.zero(PCN_LETTIVD); + pcon.zero(PCN_NUMRIVD); + pcon.zero(PCN_NUMIVD); + pcon.put(PCN_SEZIVDOPP, "0"); + pcon.zero(PCN_LETTIVDOPP); + pcon.zero(PCN_NUMRIVDOPP); + pcon.zero(PCN_NUMIVDOPP); + } + else + { + pcon.put(PCN_SEZIVD, data->get(0)); + pcon.put(PCN_LETTIVD, data->get()); + pcon.put(PCN_NUMRIVD, data->get()); + pcon.put(PCN_NUMIVD, data->get()); + pcon.put(PCN_SEZIVDOPP, data->get()); + pcon.put(PCN_LETTIVDOPP, data->get()); + pcon.put(PCN_NUMRIVDOPP, data->get()); + pcon.put(PCN_NUMIVDOPP, data->get()); + } + pcon.rewrite(); + } +} + +bool TCopia_archivi::create() +{ + _msk = new TMask("cg4200a") ; + _default_firm = get_firm(); + dispatch_e_menu(BAR_ITEM(1)); + return TRUE; +} + +bool TCopia_archivi::destroy() +{ + if (_msk != NULL) delete _msk; + return TRUE; +} + +bool TCopia_archivi::menu(MENU_TAG) +{ + while (_msk->run() == K_ENTER) + { + const long from_firm = _msk->get_long(F_FROMFIRM); + const long to_firm = _msk->get_long(F_TOFIRM); + const bool copy_pcon = _msk->get_bool(F_PCON); + const bool copy_causali = _msk->get_bool(F_CAUS); + const bool copy_clifo = _msk->get_bool(F_CLIFO); + const bool copy_ivd = _msk->get_bool(F_IVD); + if (copy_pcon || copy_causali || copy_clifo || copy_ivd) + { + if (prefhndl->exist(to_firm)) + { + set_firm(to_firm); + TLocalisamfile mov(LF_MOV); + + if ((mov.eod() == 0) || (!copy_pcon && !copy_causali && !copy_clifo)) + { + TString mess("Attenzione "); + int count = 0; + + if (copy_pcon) + { + mess << "il piano dei conti"; + count++; + } + if (copy_causali) + { + if (count > 0) mess << ","; + mess << " le causali"; + count++; + } + if (copy_clifo) + { + if (count > 0) mess << ","; + mess << " i clienti e fornitori"; + count++; + } + if (copy_ivd) + { + if (count > 0) mess << ","; + mess << " la riclassificazione IV direttiva"; + count++; + } + mess << " della ditta " << to_firm; + if (count > 1) + mess << " saranno sovrascritti"; + else + mess << " sara' sovrascritto"; + mess << ". Devo continuare"; + if (yesno_box((const char *) mess)) + { + if (copy_pcon) + { + if (copyfile(LF_PCON, from_firm, to_firm) && !copy_ivd) + clearivd(to_firm); + } + if (copy_causali) + { + if (copyfile(LF_CAUSALI, from_firm, to_firm)) + copyfile(LF_RCAUSALI, from_firm, to_firm); + } + if (copy_clifo) + copyfile(LF_CLIFO, from_firm, to_firm); + if (!copy_pcon && copy_ivd) + copyivd(from_firm, to_firm); + } + } + else error_box("La copia si puo' effettuare solo se non sono stati registrati movimenti"); + set_firm(_default_firm); + } + else error_box("Gli archivi della ditta %d non sono stati ancora generati",to_firm); + _msk->reset(); + } + } + return FALSE; +} + +int cg4200(int argc, char* argv[]) +{ + TCopia_archivi a ; + a.run(argc, argv, "Copia archivi"); + return 0; +} diff --git a/cg/cg4200a.uml b/cg/cg4200a.uml index 70adf54eb..3b04ba163 100755 --- a/cg/cg4200a.uml +++ b/cg/cg4200a.uml @@ -1,118 +1,123 @@ -#include "cg4200.h" - -PAGE "Copia da ditta a ditta" -1 -1 78 16 - -GROUPBOX DLG_NULL 76 6 -BEGIN - PROMPT 1 1 "Copia da" -END - -RADIOBUTTON F_FROMTYPE 60 -BEGIN - PROMPT 13 2 "" - ITEMS "C|Archivi Comuni" - MESSAGE CLEAR,F_FROMFIRM|CLEAR,F_DFROMFIRM - ITEMS "D|Archivi Ditta" - MESSAGE ENABLE,F_FROMFIRM|ENABLE,F_DFROMFIRM - FLAGS "Z" -END - -NUMBER F_FROMFIRM 5 -BEGIN - PROMPT 4 5 "Ditta " - FLAGS "R" - USE LF_NDITTE KEY 1 - CHECKTYPE NORMAL - INPUT CODDITTA F_FROMFIRM - DISPLAY "Codice" CODDITTA - DISPLAY "Ragione sociale @50" RAGSOC - OUTPUT F_FROMFIRM CODDITTA - OUTPUT F_DFROMFIRM RAGSOC - HELP "Codice della ditta da cui prelevare i dati" - WARNING "Ditta assente" -END - -STRING F_DFROMFIRM 50 -BEGIN - PROMPT 20 5 "" - USE LF_NDITTE KEY 2 - CHECKTYPE NORMAL - INPUT RAGSOC F_DFROMFIRM - DISPLAY "Ragione sociale @50" RAGSOC - DISPLAY "Codice" CODDITTA - COPY OUTPUT F_FROMFIRM - HELP "Ragione sociale della ditta da cui prelevare i dati" - WARNING "Ditta assente" -END - -GROUPBOX DLG_NULL 76 3 -BEGIN - PROMPT 1 7 "Copia su" -END - -NUMBER F_TOFIRM 5 -BEGIN - PROMPT 4 8 "Ditta " - FLAGS "FR" - COPY USE F_FROMFIRM - CHECKTYPE REQUIRED - INPUT CODDITTA F_TOFIRM - DISPLAY "Codice" CODDITTA - DISPLAY "Ragione sociale @50" RAGSOC - OUTPUT F_TOFIRM CODDITTA - OUTPUT F_DTOFIRM RAGSOC - HELP "Codice della ditta su cui duplicare i dati" - WARNING "Ditta assente" -END - -STRING F_DTOFIRM 50 -BEGIN - PROMPT 20 8 "" - COPY USE F_DFROMFIRM - CHECKTYPE NORMAL - INPUT RAGSOC F_DTOFIRM - COPY DISPLAY F_DFROMFIRM - COPY OUTPUT F_TOFIRM - HELP "Descrizione della ditta su cui duplicare i dati" - WARNING "Ditta assente" -END - -GROUPBOX DLG_NULL 76 4 -BEGIN - PROMPT 1 10 "Archivi da duplicare" -END - -BOOLEAN F_PCON -BEGIN - PROMPT 4 11 "Piano dei conti" -END - -BOOLEAN F_CAUS -BEGIN - PROMPT 34 11 "Causali" -END - -BOOLEAN F_CLIFO -BEGIN - PROMPT 54 11 "Clienti/Fornitori" -END - -BOOLEAN F_IVD -BEGIN - PROMPT 4 12 "IV Direttiva C.E.E." -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_QUIT 9 2 -BEGIN - PROMPT -22 -1 "" - MESSAGE EXIT,K_QUIT -END - -ENDPAGE - -ENDMASK +#include "cg4200.h" + +PAGE "Copia da ditta a ditta" -1 -1 78 16 + +GROUPBOX DLG_NULL 76 6 +BEGIN + PROMPT 1 1 "Copia da" +END + +RADIOBUTTON F_FROMTYPE 60 +BEGIN + PROMPT 13 2 "" + HELP "Indicare il tipo di archivi da copiare" + ITEMS "C|Archivi Comuni" + MESSAGE CLEAR,F_FROMFIRM|CLEAR,F_DFROMFIRM + ITEMS "D|Archivi Ditta" + MESSAGE ENABLE,F_FROMFIRM|ENABLE,F_DFROMFIRM + FLAGS "Z" +END + +NUMBER F_FROMFIRM 5 +BEGIN + PROMPT 4 5 "Ditta " + FLAGS "R" + USE LF_NDITTE KEY 1 + CHECKTYPE NORMAL + INPUT CODDITTA F_FROMFIRM + DISPLAY "Codice" CODDITTA + DISPLAY "Ragione sociale @50" RAGSOC + OUTPUT F_FROMFIRM CODDITTA + OUTPUT F_DFROMFIRM RAGSOC + HELP "Codice della ditta da cui prelevare i dati" + WARNING "Ditta assente" +END + +STRING F_DFROMFIRM 50 +BEGIN + PROMPT 20 5 "" + USE LF_NDITTE KEY 2 + CHECKTYPE NORMAL + INPUT RAGSOC F_DFROMFIRM + DISPLAY "Ragione sociale @50" RAGSOC + DISPLAY "Codice" CODDITTA + COPY OUTPUT F_FROMFIRM + HELP "Ragione sociale della ditta da cui prelevare i dati" + WARNING "Ditta assente" +END + +GROUPBOX DLG_NULL 76 3 +BEGIN + PROMPT 1 7 "Copia su" +END + +NUMBER F_TOFIRM 5 +BEGIN + PROMPT 4 8 "Ditta " + FLAGS "FR" + COPY USE F_FROMFIRM + CHECKTYPE REQUIRED + INPUT CODDITTA F_TOFIRM + DISPLAY "Codice" CODDITTA + DISPLAY "Ragione sociale @50" RAGSOC + OUTPUT F_TOFIRM CODDITTA + OUTPUT F_DTOFIRM RAGSOC + HELP "Codice della ditta su cui duplicare i dati" + WARNING "Ditta assente" +END + +STRING F_DTOFIRM 50 +BEGIN + PROMPT 20 8 "" + COPY USE F_DFROMFIRM + CHECKTYPE NORMAL + INPUT RAGSOC F_DTOFIRM + COPY DISPLAY F_DFROMFIRM + COPY OUTPUT F_TOFIRM + HELP "Ragione sociale della ditta su cui duplicare i dati" + WARNING "Ditta assente" +END + +GROUPBOX DLG_NULL 76 4 +BEGIN + PROMPT 1 10 "Archivi da duplicare" +END + +BOOLEAN F_PCON +BEGIN + PROMPT 4 11 "Piano dei conti" + HELP "Indicare se duplicare l'archivio piano dei conti" +END + +BOOLEAN F_CAUS +BEGIN + PROMPT 34 11 "Causali" + HELP "Indicare se duplicare l'archivio causali" +END + +BOOLEAN F_CLIFO +BEGIN + PROMPT 54 11 "Clienti/Fornitori" + HELP "Indicare se duplicare l'archivio clienti/fornitori" +END + +BOOLEAN F_IVD +BEGIN + PROMPT 4 12 "IV Direttiva C.E.E." + HELP "Indicare se duplicare l'archivio IV Direttiva C.E.E." +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" + MESSAGE EXIT,K_QUIT +END + +ENDPAGE + +ENDMASK diff --git a/cg/cg5300a.uml b/cg/cg5300a.uml index 3d2cb3c49..1c23bc78d 100755 --- a/cg/cg5300a.uml +++ b/cg/cg5300a.uml @@ -1,185 +1,185 @@ -#include "cg5300a.h" -TOOLBAR "" 0 20 0 2 - -#include - -ENDPAGE - -PAGE "Parametri liquidazione" -1 -1 78 15 - -GROUPBOX DLG_NULL 71 3 -BEGIN - PROMPT 4 0 "Ditta" - FLAGS "R" -END - -NUMBER F_CODDITTA 5 -BEGIN - PROMPT 6 1 "Codice " - FLAGS "DFGR" - USE LF_NDITTE - INPUT CODDITTA F_CODDITTA - DISPLAY "Codice" CODDITTA - DISPLAY "Ragione Sociale@50" RAGSOC - OUTPUT F_CODDITTA CODDITTA - OUTPUT F_RAGSOC RAGSOC - CHECKTYPE REQUIRED -END - -STRING F_RAGSOC 50 -BEGIN - PROMPT 20 1 "" - FLAGS "D" -END - -NUMBER F_YEAR 4 -BEGIN - PROMPT 6 3 "Anno " - HELP "Anno d'esercizio ??????" - FIELD LIA->CODTAB - USE LIA - INPUT CODTAB F_YEAR - DISPLAY "Anno@40" CODTAB - DISPLAY "@2" S0 - OUTPUT F_YEAR CODTAB - KEY 1 - FLAGS "RZ" - CHECKTYPE REQUIRED - ADD NONE -END - -GROUPBOX DLG_NULL 71 5 -BEGIN - PROMPT 4 4 "Parametri ditta" -END - -LIST F_FREQ_VERS 14 -BEGIN - PROMPT 6 5 "Frequenza versamenti " - HELP "Indicare la frequenza dei versamenti delle liquidazioni IVA" - ITEM "M|Mensile" - ITEM "T|Trimestrale" - FIELD LIA->S7 -END - -NUMBER F_CRED_PREC 15 0 -BEGIN - PROMPT 6 6 "Credito precedente " - HELP "Eventuale credito di imposta dell'anno precedente" - FIELD LIA->R0 - PICTURE "." - FLAGS "R" -END - -NUMBER F_CRED_COST 15 0 -BEGIN - PROMPT 6 7 "Credito di costo " - HELP "Eventuale crediti—o di costo dell'anno precedente" - FIELD LIA->R5 - PICTURE "." - FLAGS "R" -END - -SPREADSHEET F_SHEET_PLA 78 6 -BEGIN -PROMPT 1 10 "Parametri attivita'" - ITEM "Attivita'@5" - ITEM "Tipo@1" - ITEM "% Pro-rata@6" - ITEM "Plafond art.8@15" - ITEM "Plafond art.8b@15" - ITEM "Plafond art.9@15" -END - -ENDPAGE -ENDMASK - -PAGE "" -1 -1 65 16 - -NUMBER F_CODATT 5 -BEGIN - PROMPT 4 1 "Codice Attivita' " - FLAGS "DZG" - USE %AIS - INPUT CODTAB F_CODATT - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CODATT CODTAB - OUTPUT F_DESATT S0 - CHECKTYPE NORMAL -END - -STRING F_DESATT 50 30 -BEGIN - PROMPT 31 1 "" - FLAGS "D" -END - -LIST F_TIPOATT 26 -BEGIN - PROMPT 4 3 "Tipo " - HELP "Tipo di attivita' a della ditta" - FLAGS "U" - ITEM " |Altre" - ITEM "M|Mista" - ITEM "E|Mista evidenziata" - ITEM "S|Servizio o mista generica" -END - -NUMBER F_PRORATA 6 2 -BEGIN - PROMPT 4 5 "% Pro-Rata " - HELP "Percentuale di pro-rata ???????" - PICTURE ".2" - NUM_EXPR {(#F_PRORATA>=0.0)&&(#F_PRORATA<=100.0)} - WARNING "La percentuale deve essere compresa tra 0 e 100" - FLAGS "R" - GROUP 1 -END - -NUMBER F_P8 15 -BEGIN - PROMPT 4 7 "Plafond art. 8 " - HELP "?????????????" - PICTURE "." - FLAGS "R" - GROUP 1 -END - -NUMBER F_P8B 15 -BEGIN - PROMPT 4 9 "Plafond art. 8b " - HELP "????????????" - PICTURE "." - FLAGS "R" - GROUP 1 -END - -NUMBER F_P9 15 -BEGIN - PROMPT 4 11 "Plafond art. 9 " - HELP "?????????????" - PICTURE "." - FLAGS "R" - GROUP 1 -END - - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -13 -1 "" -END - -BUTTON DLG_NULL 9 2 -BEGIN - PROMPT -23 -1 "Azzera" - MESSAGE RESET,1@ -END - -BUTTON DLG_CANCEL 9 2 -BEGIN - PROMPT -33 -1 "" -END - -ENDPAGE -ENDMASK +#include "cg5300a.h" +TOOLBAR "" 0 20 0 2 + +#include + +ENDPAGE + +PAGE "Parametri liquidazione" -1 -1 78 15 + +GROUPBOX DLG_NULL 71 3 +BEGIN + PROMPT 4 0 "Ditta" + FLAGS "R" +END + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 6 1 "Codice " + FLAGS "DFGR" + USE LF_NDITTE + INPUT CODDITTA F_CODDITTA + DISPLAY "Codice" CODDITTA + DISPLAY "Ragione Sociale@50" RAGSOC + OUTPUT F_CODDITTA CODDITTA + OUTPUT F_RAGSOC RAGSOC + CHECKTYPE REQUIRED +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 20 1 "" + FLAGS "D" +END + +NUMBER F_YEAR 4 +BEGIN + PROMPT 6 3 "Anno " + HELP "Anno d'esercizio ??????" + FIELD LIA->CODTAB + USE LIA + INPUT CODTAB F_YEAR + DISPLAY "Anno@40" CODTAB + DISPLAY "@2" S0 + OUTPUT F_YEAR CODTAB + KEY 1 + FLAGS "RZ" + CHECKTYPE REQUIRED + ADD NONE +END + +GROUPBOX DLG_NULL 71 5 +BEGIN + PROMPT 4 4 "Parametri ditta" +END + +LIST F_FREQ_VERS 14 +BEGIN + PROMPT 6 5 "Frequenza versamenti " + HELP "Indicare la frequenza dei versamenti delle liquidazioni IVA" + ITEM "M|Mensile" + ITEM "T|Trimestrale" + FIELD LIA->S7 +END + +NUMBER F_CRED_PREC 15 0 +BEGIN + PROMPT 6 6 "Credito precedente " + HELP "Eventuale credito di imposta dell'anno precedente" + FIELD LIA->R0 + PICTURE "." + FLAGS "R" +END + +NUMBER F_CRED_COST 15 0 +BEGIN + PROMPT 6 7 "Credito di costo " + HELP "Eventuale crediti—o di costo dell'anno precedente" + FIELD LIA->R5 + PICTURE "." + FLAGS "R" +END + +SPREADSHEET F_SHEET_PLA 78 6 +BEGIN +PROMPT 1 10 "Parametri attivita'" + ITEM "Attivita'@5" + ITEM "Tipo@1" + ITEM "% Pro-rata@6" + ITEM "Plafond art.8@15" + ITEM "Plafond art.8b@15" + ITEM "Plafond art.9@15" +END + +ENDPAGE +ENDMASK + +PAGE "" -1 -1 65 16 + +NUMBER F_CODATT 5 +BEGIN + PROMPT 4 1 "Codice Attivita' " + FLAGS "DZG" + USE %AIS + INPUT CODTAB F_CODATT + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODATT CODTAB + OUTPUT F_DESATT S0 + CHECKTYPE NORMAL +END + +STRING F_DESATT 50 30 +BEGIN + PROMPT 31 1 "" + FLAGS "D" +END + +LIST F_TIPOATT 26 +BEGIN + PROMPT 4 3 "Tipo " + HELP "Tipo di attivita' a della ditta" + FLAGS "U" + ITEM " |Altre" + ITEM "M|Mista" + ITEM "E|Mista evidenziata" + ITEM "S|Servizio o mista generica" +END + +NUMBER F_PRORATA 6 2 +BEGIN + PROMPT 4 5 "% Pro-Rata " + HELP "Percentuale di pro-rata ???????" + PICTURE ".2" + NUM_EXPR {(#F_PRORATA>=0.0)&&(#F_PRORATA<=100.0)} + WARNING "La percentuale deve essere compresa tra 0 e 100" + FLAGS "R" + GROUP 1 +END + +NUMBER F_P8 15 +BEGIN + PROMPT 4 7 "Plafond art. 8 " + HELP "?????????????" + PICTURE "." + FLAGS "R" + GROUP 1 +END + +NUMBER F_P8B 15 +BEGIN + PROMPT 4 9 "Plafond art. 8b " + HELP "????????????" + PICTURE "." + FLAGS "R" + GROUP 1 +END + +NUMBER F_P9 15 +BEGIN + PROMPT 4 11 "Plafond art. 9 " + HELP "?????????????" + PICTURE "." + FLAGS "R" + GROUP 1 +END + + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_NULL 9 2 +BEGIN + PROMPT -23 -1 "Azzera" + MESSAGE RESET,1@ +END + +BUTTON DLG_CANCEL 9 2 +BEGIN + PROMPT -33 -1 "" +END + +ENDPAGE +ENDMASK