From d19f6148e12db8a932fe0905ca1b21fc287a6fe2 Mon Sep 17 00:00:00 2001 From: guy <guy@c028cbd2-c16b-5b4b-a496-9718f37d4682> Date: Wed, 14 May 2014 08:31:26 +0000 Subject: [PATCH] Abilitata stampa estratto conto di conti normali (non solo clifo) git-svn-id: svn://10.65.10.50/branches/R_10_00@22944 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- sc/sc1400.cpp | 34 ++++++++--- sc/sc2100.cpp | 150 +++++++++++++++++++++++++++++++++++------------- sc/sc2100a.uml | 25 ++++---- sc/sc3100s.uml | 5 ++ sc/scselect.cpp | 100 ++++++++++++++++++++++++-------- sc/scselect.h | 5 ++ 6 files changed, 236 insertions(+), 83 deletions(-) diff --git a/sc/sc1400.cpp b/sc/sc1400.cpp index 24535a440..a31a31538 100755 --- a/sc/sc1400.cpp +++ b/sc/sc1400.cpp @@ -366,7 +366,8 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con // La validit� di tutti questi campi � gi� garantita dai controlli di msk const char tipo_cf = msk.get(F_TIPOCF)[0]; const TDate datareg = msk.get(F_DATAREG); - const TDate datacomp = msk.get(F_DATACOMP); + TDate datacomp = msk.get(F_DATACOMP); + if (!datacomp.ok()) datacomp = datareg; const TValuta valuta(msk, F_CODVAL, F_DATACAMBIO, F_CAMBIO); TEsercizi_contabili esc; @@ -384,6 +385,7 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con TMovimentoPN mov; TRectype& head = mov.curr(); head.put(MOV_CODCAUS, msk.get(F_CAUSALE)); + head.put(MOV_TIPOMOV, tm_pagamento); head.put(MOV_DATAREG, datareg); head.put(MOV_DATACOMP, datacomp); head.put(MOV_ANNOIVA, datareg.year()); @@ -424,6 +426,13 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con TRectype& new_rmov = mov.cg(-1); bill.put(new_rmov); new_rmov.put(RMV_ROWTYPE, 'K'); + new_rmov.put(RMV_ANNOES, annoes); + new_rmov.put(RMV_DATAREG, datareg); + + msg = TR("Saldo partita "); + msg << game.anno() << '/' << game.numero(); + new_rmov.put(RMV_DESCR, msg); + last_clifo = bill; } if (!genera_abbuono(game, nriga, nrata, mov, log)) @@ -453,6 +462,7 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con rmov.put(RMV_SEZIONE, imp.sezione()); rmov.put(RMV_IMPORTO, imp.valore()); rmov.put(RMV_ANNOES, annoes); + rmov.put(RMV_DATAREG, datareg); } if (!banca.is_zero()) { @@ -463,6 +473,7 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con rmov.put(RMV_SEZIONE, banca.sezione()); rmov.put(RMV_IMPORTO, banca.valore()); rmov.put(RMV_ANNOES, annoes); + rmov.put(RMV_DATAREG, datareg); conto_abbuoni.put(rmov); mov.curr().add(MOV_TOTDOC, -banca.valore()); @@ -476,6 +487,7 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con rmov.put(RMV_SEZIONE, abbuoni.sezione()); rmov.put(RMV_IMPORTO, abbuoni.valore()); rmov.put(RMV_ANNOES, annoes); + rmov.put(RMV_DATAREG, datareg); conto_abbuoni.put(rmov); } if (!diffcam.is_zero()) @@ -487,6 +499,7 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con rmov.put(RMV_SEZIONE, diffcam.sezione()); rmov.put(RMV_IMPORTO, diffcam.valore()); rmov.put(RMV_ANNOES, annoes); + rmov.put(RMV_DATAREG, datareg); conto_diffcam.put(rmov); } @@ -494,11 +507,18 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con { if (mov.rewrite() == NOERR) { - partite.write(true); - log.log(0, msg.cut(0)); - msg << TR("Aggiornato saldaconto legato al movimento n.") << numreg; - log.log(1, msg); + if (partite.write(true)) + { + msg << TR("Aggiornato saldaconto legato al movimento n.") << numreg; + log.log(1, msg); + } + else + { + msg << TR("Errore in aggiornamento saldaconto legato al movimento n.") << numreg; + log.log(2, msg); + can_write = false; + } TSaldo_agg sa; for (int i = 0; i < mov.cg_items(); i++) @@ -506,13 +526,11 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con const TRectype& rmov = mov.cg(i); sa.aggiorna(rmov); } - sa.set_num_ulmov(mov.curr().get_long(MOV_NUMREG)); - sa.set_data_ulmov(mov.curr().get_date(MOV_DATAREG)); sa.registra(); } else { - log.log(2, "Impossibile aggiornare il saldaconto"); + log.log(2, "Impossibile aggiornare il movimento"); can_write = false; } } diff --git a/sc/sc2100.cpp b/sc/sc2100.cpp index d3d4c775c..bbbde0e7e 100755 --- a/sc/sc2100.cpp +++ b/sc/sc2100.cpp @@ -20,17 +20,32 @@ #include <cfven.h> #include <causali.h> #include <mov.h> +#include <pconti.h> class TEC_recordset : public TAS400_recordset { + char _who; + public: - TEC_recordset(); + char get_who() const { return _who; } + TEC_recordset(const char who); }; -TEC_recordset::TEC_recordset() : TAS400_recordset("AS400(255,0,0)") +TEC_recordset::TEC_recordset(char who) : TAS400_recordset("AS400(255,0,0)"), _who(who) { - create_field("Cliente", 0, 6, _longfld); - create_field("RagioneSociale", -1, 50); + if (who >= 'C') + { + if (who == 'F') + create_field("Fornitore", 0, 6, _longfld); + else + create_field("Cliente", 0, 6, _longfld); + create_field("RagioneSociale", -1, 50); + } + else + { + create_field("Conto", 0, 12, _alfafld); + create_field("Denominazione", -1, 50); + } create_field("Telefono", -1, 20); create_field("Valuta", -1, 3); create_field("Causale", -1, 3); @@ -91,7 +106,10 @@ protected: static void ec_footer_handler(TPrinter& p); public: - TTotalizer& totali() { return _totali; } + TTotalizer& totali() { return _totali; } + + virtual TRelation* relation() const { return _cursore->relation(); } + virtual TCursor* cursor() { return _cursore; } const TDate& data_limite_operazione() const { return _dlo; } const TDate& data_limite_scaduto() const { return _dls; } @@ -115,7 +133,7 @@ public: bool exporting() const { return _recordset != NULL; } void export_total(); - TEC_recordset& recordset() const { CHECK(exporting(),"Not exporting"); return *_recordset; } + TEC_recordset& recordset() const { CHECK(exporting(), "Not exporting"); return *_recordset; } TEC_form(const TEC_mask& m, bool gesval, bool excel); virtual ~TEC_form(); @@ -130,6 +148,7 @@ TEC_form* TEC_form::_form = NULL; static char __ltipocf; static long __lcodcf; +static int __lgruppo, __lconto; class TEC_row : public TSortable { @@ -142,6 +161,7 @@ class TEC_row : public TSortable char _tipocf; long _codcf; + int _gruppo, _conto; // Solo per conti ver, altrimenti 0 TDate _data_doc; // Data del documento TString _num_doc; // Numero documento @@ -221,6 +241,16 @@ TEC_row::TEC_row(const TRiga_partite& row, const TDate& data, const TImporto& im _totale = row.get_real(field); __ltipocf = _tipocf = row.get_char(PART_TIPOCF); __lcodcf = _codcf = row.get_long(PART_SOTTOCONTO); + if (_tipocf < 'C') + { + __lgruppo = _gruppo = row.get_int(PART_GRUPPO); + __lconto = _conto = row.get_int(PART_CONTO); + } + else + { + __lgruppo = _gruppo = 0; + __lconto = _conto = 0; + } } TEC_row::TEC_row(const char* desc, const TImporto& imp, const TValuta& val) @@ -232,6 +262,8 @@ TEC_row::TEC_row(const char* desc, const TImporto& imp, const TValuta& val) _valuta = val; _tipocf = __ltipocf; _codcf = __lcodcf; + _gruppo = __lgruppo; + _conto = __lconto; } // Le righe dell'estratto conto sono ordinate per data, riga partita, numero rata o @@ -374,24 +406,33 @@ void TEC_row::print_on(TPrint_section& body) void TEC_row::export_to(TEC_recordset& r) { r.new_rec(); - r.set("Cliente", TVariant(_codcf)); - - TString key; key.format("%c|%ld", _tipocf, _codcf); - const TString & ragsoc = cache().get(LF_CLIFO, key, CLI_RAGSOC); + if (_tipocf >= 'C') + { + r.set(0u, _codcf); + TString8 key; key.format("%c|%ld", _tipocf, _codcf); + const TString& ragsoc = cache().get(LF_CLIFO, key, CLI_RAGSOC); + r.set("RagioneSociale", TVariant(ragsoc)); - r.set("RagioneSociale", TVariant(ragsoc)); + TString80 telefono = cache().get(LF_CLIFO, key, CLI_PTEL); + telefono << " " << cache().get(LF_CLIFO, key, CLI_TEL); + r.set("Telefono", TVariant(telefono)); + } + else + { + TString16 key; key.format("%03d%03d%06ld", _gruppo, _conto, _codcf); + r.set(0u, key); + const TString& descr = cache().get(LF_PCON, key, PCN_DESCR); + r.set(1u, descr); + } - TString80 telefono = cache().get(LF_CLIFO, key, CLI_PTEL); - - telefono << " " << cache().get(LF_CLIFO, key, CLI_TEL); - r.set("Telefono", TVariant(telefono)); r.set("Valuta", TVariant(_valuta.codice())); r.set("Causale", TVariant(_causale)); r.set("Descrizione", TVariant(_descrizione)); r.set("DataDoc", TVariant(_data_doc)); r.set("NumDoc", TVariant(_num_doc)); r.set("ProtIVA", TVariant(_num_prot)); - r.set("DataPag", TVariant(_data)); + r.set("DataScad", TVariant(_data)); + r.set("DataPag", TVariant(_data)); r.set(_importo.sezione() == 'D' ? "Dare" : "Avere", _importo.valore()); r.set("Scaduto", TVariant(_scaduto)); r.set("Esposto", TVariant(_esposto)); @@ -1321,7 +1362,16 @@ TEC_form::TEC_form(const TEC_mask& m, bool gesval, bool excel) _form = this; TCursor_sheet& cs = m.cur_sheet(); - _cursore = cs.cursor(); + _cursore = cs.cursor(); + + if (relation()->log2ind(LF_COMUNI) < 0) + { + if (relation()->file().num() == LF_CLIFO) + relation()->add(LF_COMUNI, "STATO==STATOCF|COM==COMCF"); + else + relation()->add(LF_COMUNI, "COM=\"\""); + } + _lingua = m.get_prof_lang(); // Lingua profilo _dlo = m.get(F_DATALIMOP); @@ -1397,7 +1447,7 @@ TEC_form::TEC_form(const TEC_mask& m, bool gesval, bool excel) _maxtot = max; } else - _recordset = new TEC_recordset; + _recordset = new TEC_recordset(m.get_who()); } TEC_form::~TEC_form() @@ -1511,20 +1561,27 @@ public: bool TStampaEC_application::print_selected() { - TCursor_sheet& s = sheet(); - TCursor& c = *s.cursor(); - const char who = mask().get_who(); + + TCursor_sheet& s = sheet(); + TCursor& c = *s.cursor(); // Il cursore del form coincide con quello dello sheet + + /* const int key = mask().get_key(); // Filtra il cursore del form in modo che diventi uguale al cursor_sheet corrente // Qui sarebbe bello copiarsi l'indice dell'altro cursore TCursor& fc = *form().cursor(); fc.setkey(key); - TRectype filter(LF_CLIFO); - filter.put(CLI_TIPOCF, who); - fc.setregion(filter, filter); + if (who >= 'C') + { + TRectype filter = fc.curr(); filter.zero(); + filter.put(CLI_TIPOCF, who); + fc.setregion(filter, filter); + } + */ + form().set_agente(EMPTY_STRING); // Nascondi agente const long print_all = !s.one_checked(); // Se non ho selezionato nulla allora li stampo tutti @@ -1532,17 +1589,17 @@ bool TStampaEC_application::print_selected() const bool printing = form().printing(); const long items = c.items(); - TProgind* pi = NULL; + TProgress_monitor* pi = NULL; if (printing) printer().open(); else - pi = new TProgind(items, TR("Calcolo estratto conto"), true, true); + pi = new TProgress_monitor(items, TR("Calcolo estratto conto")); for (long i = 0; i < items; i++) { if (print_all || s.checked(i)) { - fc = i; // Muove il cursore alla posizione corrente + c = i; // Muove il cursore alla posizione corrente const int ret = print_ec(); if (ret < 0) analfabeti++; @@ -1638,14 +1695,19 @@ void TStampaEC_application::find_agents_scads(TAssoc_array& agents) void TStampaEC_application::find_agents_unassigned_pags(TAssoc_array& agents) { - const TString& fromage = mask().get(F_FROM_AGENT); - const TString& toage = mask().get(F_TO_AGENT); - const long fromcli = mask().get_long(SC_CFCODFR); - const long tocli = mask().get_long(SC_CFCODTO); + TEC_mask& m = mask(); + const char tipocf = m.get(SC_CLIFO)[0]; + if (tipocf < 'C') + return; + + const TString& fromage = m.get(F_FROM_AGENT); + const TString& toage = m.get(F_TO_AGENT); + const long fromcli = m.get_long(SC_CFCODFR); + const long tocli = m.get_long(SC_CFCODTO); TRelation rel(LF_PAGSCA); TRectype& curr = rel.curr(); - curr.put(PAGSCA_TIPOC, mask().get(SC_CLIFO)); // Imposta C o F + curr.put(PAGSCA_TIPOC, tipocf); // Imposta C o F TRectype recfr(curr), recto(curr); if (fromcli > 0) @@ -1771,8 +1833,8 @@ bool TStampaEC_application::print_agents() if (analfabeti > 0) { const char* anag = who == 'C' ? TR("clienti") : TR("fornitori"); - warning_box(FR("%ld %s non sono stati stampati in quanto " - "il codice lingua non corrispondeva al profilo di stampa"), + warning_box(FR("%ld %s non sono stati stampati, avendo " + "il codice lingua non corrispondente al profilo di stampa"), analfabeti, anag); } } @@ -1834,7 +1896,7 @@ void TStampaEC_application::save_numec() void TStampaEC_application::update_numec(const TRectype& clf, int sign) { - const char tipocf = clf.get_char(CLI_TIPOCF); + const char tipocf = clf.exist(CLI_TIPOCF) ? clf.get_char(CLI_TIPOCF) : ' '; if (_tiponumec > ' ' && tipocf == 'C' && form().printing()) { TForm_item& nec = form().find_field('H', odd_page, PEC_NUMPROG); @@ -1887,7 +1949,7 @@ int TStampaEC_application::print_ec(TEC_Game_list* games) const TRectype& clf = f.cursor()->curr(); - if (printing) + if (printing && clf.num() == LF_CLIFO) { // make controllations per lingua profilo/CF const TString& lincf = clf.get(CLI_CODLIN); @@ -1904,8 +1966,18 @@ int TStampaEC_application::print_ec(TEC_Game_list* games) // Filtra solo le partite del cliente selezionato TRelation rel(LF_PARTITE); TRectype& curr = rel.curr(); - curr.put(PART_TIPOCF, clf.get(CLI_TIPOCF)); - curr.put(PART_SOTTOCONTO, clf.get(CLI_CODCF)); + if (clf.num() == LF_CLIFO) + { + curr.put(PART_TIPOCF, clf.get(CLI_TIPOCF)); + curr.put(PART_SOTTOCONTO, clf.get(CLI_CODCF)); + } + else + { + curr.zero(PART_TIPOCF); + curr.put(PART_GRUPPO, clf.get(PCN_GRUPPO)); + curr.put(PART_CONTO, clf.get(PCN_CONTO)); + curr.put(PART_SOTTOCONTO, clf.get(PCN_SOTTOCONTO)); + } TCursor cur(&rel, "", 1, &curr, &curr); const long items = cur.items(); @@ -1918,7 +1990,7 @@ int TStampaEC_application::print_ec(TEC_Game_list* games) int printed = 0; // Non ho stampato ancora nulla - if (printing) + if (printing && clf.num() == LF_CLIFO) update_numec(clf, +1); // Incrementa contatore TString8 last_game; diff --git a/sc/sc2100a.uml b/sc/sc2100a.uml index 7be311cd9..357e6f343 100755 --- a/sc/sc2100a.uml +++ b/sc/sc2100a.uml @@ -138,15 +138,16 @@ END RADIOBUTTON SC_CLIFO 20 BEGIN PROMPT 1 10 "@bSelezione" - ITEM "C|Clienti" MESSAGE ENABLE,1@ - ITEM "F|Fornitori" MESSAGE CLEAR,1@ + ITEM "C|Clienti" MESSAGE ENABLE,1@|ENABLE,3@ + ITEM "F|Fornitori" MESSAGE CLEAR,1@|ENABLE,3@ + ITEM " |Conti" MESSAGE CLEAR,1@|DISABLE,3@ END RADIOBUTTON SC_SORTCF 25 BEGIN PROMPT 25 10 "@bOrdinamento" ITEM "1|Per codice" MESSAGE HIDE,2@|SHOW,3@ - ITEM "2|Per ragione sociale" MESSAGE HIDE,3@|SHOW,2@ + ITEM "2|Per denominazione" MESSAGE HIDE,3@|SHOW,2@ END BUTTON SC_SELECT 10 1 @@ -168,42 +169,42 @@ END NUMBER SC_CFCODFR 6 BEGIN - PROMPT 2 14 "Da codice " + PROMPT 2 15 "Da codice " GROUP 3 FLAGS "B" END NUMBER SC_CFCODTO 6 BEGIN - PROMPT 37 14 "a codice " + PROMPT 37 15 "a codice " GROUP 3 FLAGS "B" END STRING SC_CFDESFR 50 BEGIN - PROMPT 2 14 "Da ragione sociale " + PROMPT 2 15 "Da denominazione " GROUP 2 FLAGS "HB" END STRING SC_CFDESTO 50 BEGIN - PROMPT 2 15 "A ragione sociale " + PROMPT 2 16 "A denominazione " GROUP 2 FLAGS "HB" END BOOLEAN F_GROUPAGENT BEGIN - PROMPT 2 16 "Raggruppamento per agente" + PROMPT 2 17 "Raggruppamento per agente" MESSAGE FALSE HIDE,5@ MESSAGE TRUE SHOW,5@ END STRING F_FROM_AGENT 5 BEGIN - PROMPT 2 17 "Dall'agente " + PROMPT 2 18 "Dall'agente " FLAGS "HZU" USE LF_AGENTI INPUT CODAGE F_FROM_AGENT @@ -217,7 +218,7 @@ END STRING F_FROM_AGENT_D 50 BEGIN - PROMPT 22 17 "" + PROMPT 22 18 "" FLAGS "H" USE LF_AGENTI KEY 2 INPUT RAGSOC F_FROM_AGENT_D @@ -230,7 +231,7 @@ END STRING F_TO_AGENT 5 BEGIN - PROMPT 2 18 "All'agente " + PROMPT 2 19 "All'agente " FLAGS "HZU" COPY USE F_FROM_AGENT INPUT CODAGE F_TO_AGENT @@ -243,7 +244,7 @@ END STRING F_TO_AGENT_D 50 BEGIN - PROMPT 22 18 "" + PROMPT 22 19 "" FLAGS "H" COPY USE F_FROM_AGENT_D INPUT RAGSOC F_TO_AGENT_D diff --git a/sc/sc3100s.uml b/sc/sc3100s.uml index ae9235241..64d23c05c 100755 --- a/sc/sc3100s.uml +++ b/sc/sc3100s.uml @@ -180,9 +180,14 @@ BEGIN FLAGS "D" END +ENDPAGE + +TOOLBAR "topbar" 0 0 0 2 + BUTTON 100 10 2 BEGIN PROMPT -14 -1 "Dettaglio" + PICTURE TOOL_EDIT END BUTTON DLG_DELREC 10 2 diff --git a/sc/scselect.cpp b/sc/scselect.cpp index 61901733c..425eb270e 100755 --- a/sc/scselect.cpp +++ b/sc/scselect.cpp @@ -1,12 +1,13 @@ #include <defmask.h> #include "../cg/cglib01.h" -#include "scselect.h" - +#include "scselect.h" +#include <pconti.h> TSelection_mask::TSelection_mask(const char* name) - : TMask(name), _who('C'), _key(1), _clifo_rel(NULL), - _cli_cur_k1(NULL), _cli_cur_k2(NULL), _for_cur_k1(NULL), _for_cur_k2(NULL) + : TMask(name), _who('C'), _key(1), _clifo_rel(NULL), _pdc_rel(NULL), + _cli_cur_k1(NULL), _cli_cur_k2(NULL), _for_cur_k1(NULL), _for_cur_k2(NULL), + _pdc_cur_k1(NULL), _pdc_cur_k2(NULL) { // crea relazioni, cursori e cursor_sheets _clifo_rel = new TRelation(LF_CLIFO); @@ -37,7 +38,27 @@ TSelection_mask::TSelection_mask(const char* name) _for_cur_k2 = NULL; _for_sh_k1 = NULL; _for_sh_k2 = NULL; - } + } + + if (id2pos(SC_CLIFO) >= 0 && TToken_string(lfield(SC_CLIFO).get_codes()).items()>2) + { + _pdc_rel = new TRelation(LF_PCON); + TRectype& filter = _pdc_rel->curr(); + _pdc_cur_k1 = new TCursor(_pdc_rel, "", 1, &filter, &filter); + _pdc_cur_k2 = new TCursor(_pdc_rel, "", 2, &filter, &filter); + _pdc_sh_k1 = new TCursor_sheet(_pdc_cur_k1, " |GRUPPO|CONTO|SOTTOCONTO|DESCR", "Selezione conti per codice", + "@1|Gruppo|Conto|Sottoconto|Descrizione@50",0,1); + _pdc_sh_k2 = new TCursor_sheet(_pdc_cur_k2, " |DESCR|GRUPPO|CONTO|SOTTOCONTO", "Selezione conti per descrizione", + "@1|Descrizione@50|Gruppo|Conto|Sottoconto",0,1); + } + else + { + _pdc_rel = NULL; + _pdc_cur_k1 = NULL; + _pdc_cur_k2 = NULL; + _pdc_sh_k1 = NULL; + _pdc_sh_k2 = NULL; + } set_handler(SC_CLIFO, rclifo_handler); set_handler(SC_SORTCF, rsortcf_handler); @@ -51,6 +72,15 @@ TSelection_mask::TSelection_mask(const char* name) TSelection_mask::~TSelection_mask() { + if (_pdc_sh_k1 != NULL) + { + delete _pdc_sh_k2; + delete _pdc_sh_k1; + delete _pdc_cur_k2; + delete _pdc_cur_k1; + delete _pdc_rel; + } + if (_for_sh_k1 != NULL) { delete _for_sh_k2; @@ -83,11 +113,14 @@ void TSelection_mask::set_handler(short fld_id, CONTROL_HANDLER handler) } TCursor_sheet& TSelection_mask::cur_sheet() const -{ - TCursor_sheet* cs; - if (get_key() == 1) cs = get_who() == 'C' ? _cli_sh_k1 : _for_sh_k1; - else cs = get_who() == 'C' ? _cli_sh_k2 : _for_sh_k2; - +{ + TCursor_sheet* cs = NULL; + switch (get_who()) + { + case 'C': cs = get_key() == 1 ? _cli_sh_k1 : _cli_sh_k2; break; + case 'F': cs = get_key() == 1 ? _for_sh_k1 : _for_sh_k2; break; + default : cs = get_key() == 1 ? _pdc_sh_k1 : _pdc_sh_k2; break; + } CHECK(cs, "Can't use a NULL TCursor_sheet"); return *cs; } @@ -101,6 +134,11 @@ void TSelection_mask::reset_sheets() _for_sh_k1->uncheck(-1); _for_sh_k2->uncheck(-1); } + if (_pdc_sh_k1) + { + _pdc_sh_k1->uncheck(-1); + _pdc_sh_k2->uncheck(-1); + } reset(SC_CFCODFR); reset(SC_CFCODTO); reset(SC_CFDESFR); @@ -179,25 +217,38 @@ void TSelection_mask::select_des_clifo_range(const TString& from, const TString s_from = to;// ripristina i valori originali (!upper) set(SC_CFDESFR, to); set(SC_CFDESTO, from); - } else - { - if (to.not_empty()) s_to = to; - s_from = from; // ripristina i valori originali (!upper) - } + } + else + { + if (to.not_empty()) s_to = to; + s_from = from; // ripristina i valori originali (!upper) + } TString last; TString firs; - + + const char who = get_who(); TCursor* crs = c.cursor(); TRectype& rec = crs->file().curr(); rec.zero(); - rec.put(CLI_TIPOCF,get_who()); - rec.put(CLI_RAGSOC,s_from); + if (who >= 'C') + { + rec.put(CLI_TIPOCF, who); + rec.put(CLI_RAGSOC, s_from); + } + else + rec.put(PCN_DESCR, s_from); const TRecnotype start = crs->read(_isgteq); - firs = rec.get(CLI_RAGSOC); + firs = rec.get(who >= 'C' ? CLI_RAGSOC : PCN_DESCR); rec.zero(); - rec.put(CLI_TIPOCF,get_who()); - rec.put(CLI_RAGSOC,s_to); + if (who >= 'C') + { + rec.put(CLI_TIPOCF, who); + rec.put(CLI_RAGSOC, s_to); + } + else + rec.put(PCN_DESCR, s_to); + TRectype recx(rec); TRecnotype end = crs->read(_isgteq); if (rec > recx) @@ -205,7 +256,7 @@ void TSelection_mask::select_des_clifo_range(const TString& from, const TString end--; (*crs)-=1; } - last = rec.get(CLI_RAGSOC); + last = rec.get(who >= 'C' ? CLI_RAGSOC : PCN_DESCR); c.uncheck(-1); for (long i = start; i <= end; i++) c.check(i); @@ -385,7 +436,8 @@ bool TSelection_mask::fdfrom_handler(TMask_field& f, KEY k) { TSelection_mask& m = (TSelection_mask&)f.mask(); TCursor_sheet& c = m.cur_sheet(); - c.cursor()->curr().put(CLI_RAGSOC, f.get()); + const char* fld = m.get_who() >= 'C' ? CLI_RAGSOC : PCN_DESCR; + c.cursor()->curr().put(fld, f.get()); c.cursor()->read(); c.disable_check(); c.disable(DLG_USER); @@ -419,7 +471,7 @@ bool TSelection_mask::fdto_handler(TMask_field& f, KEY k) { TSelection_mask& m = (TSelection_mask&)f.mask(); TCursor_sheet& c = m.cur_sheet(); - c.cursor()->curr().put(CLI_RAGSOC, f.get()); + c.cursor()->curr().put(m.get_who() >= 'C' ? CLI_RAGSOC : PCN_DESCR, f.get()); c.cursor()->read(); c.disable_check(); c.disable(DLG_USER); diff --git a/sc/scselect.h b/sc/scselect.h index d1f565963..87c133d8a 100755 --- a/sc/scselect.h +++ b/sc/scselect.h @@ -35,6 +35,8 @@ class TSelection_mask : public TMask TCursor_sheet* _cli_sh_k2; TCursor_sheet* _for_sh_k1; TCursor_sheet* _for_sh_k2; + TCursor_sheet* _pdc_sh_k1; + TCursor_sheet* _pdc_sh_k2; char _who; // Clienti, fornitori, conti int _key; // 1 = per codice, 2 = per descrizione @@ -43,6 +45,9 @@ class TSelection_mask : public TMask TCursor* _cli_cur_k2; TCursor* _for_cur_k1; TCursor* _for_cur_k2; + TRelation* _pdc_rel; + TCursor* _pdc_cur_k1; + TCursor* _pdc_cur_k2; TAssoc_array _assoc; bool _all_selected;