Patch level : 10.0

Files correlati     : ve0200e.msk ve0.exe ve6.exe vetbcvm.msk
Ricompilazione Demo : [ ]
Commento            :
Aggiunto nuovo criterio di contabilizzazione per Categoria di Vendita/Gruppo Merceologico.
Aggiunta tabella di modulo &CVM per l'immissione dei relativi conti.


git-svn-id: svn://10.65.10.50/trunk@18411 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2009-03-04 09:50:26 +00:00
parent 1ae303cb77
commit 143df3149d
5 changed files with 385 additions and 151 deletions

View File

@ -1,37 +1,17 @@
#include "veconf.h" #include "veconf.h"
TOOLBAR "" 0 0 0 2 TOOLBAR "" 0 0 0 2
#include <stdbar.h>
BUTTON DLG_OK 10 2
BEGIN
PROMPT -14 -1 ""
END
BUTTON DLG_INFO 10 2
BEGIN
PROMPT -24 -11 ""
END
BUTTON DLG_HELP 10 2
BEGIN
PROMPT -34 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -44 -1 ""
END
ENDPAGE ENDPAGE
PAGE "Contabilizzazione" 0 0 0 0 PAGE "Contabilizzazione" 0 0 0 0
GROUPBOX DLG_NULL 78 7 GROUPBOX DLG_NULL 78 7
BEGIN BEGIN
PROMPT 1 1 "Ricerca primaria del conto di costo ricavo" PROMPT 1 1 "@bRicerca primaria del conto di costo ricavo"
END END
LIST F_RICERCACR1 36 LIST F_RICERCACR1 2 44
BEGIN BEGIN
PROMPT 2 2 "Primo gruppo " PROMPT 2 2 "Primo gruppo "
ITEM "CF|Clienti/Fornitori" ITEM "CF|Clienti/Fornitori"
@ -39,11 +19,12 @@ ITEM "CA|Causale contabile"
ITEM "AN|Anagrafica magazzino" ITEM "AN|Anagrafica magazzino"
ITEM "CV|Categoria di vendita" ITEM "CV|Categoria di vendita"
ITEM "CC|Categoria contabile" ITEM "CC|Categoria contabile"
ITEM "VM|Categoria di vendita e gruppo merceologico"
//STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_RICERCACR1)&&(#THIS_FIELD!=#F_RICERCACR2)&&(#THIS_FIELD!=#F_RICERCACR3)&&(#THIS_FIELD!=#F_RICERCACR4)) //STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_RICERCACR1)&&(#THIS_FIELD!=#F_RICERCACR2)&&(#THIS_FIELD!=#F_RICERCACR3)&&(#THIS_FIELD!=#F_RICERCACR4))
//WARNING "La sequenza di ricerca primaria deve indicare cinque tipi diversi" //WARNING "La sequenza di ricerca primaria deve indicare cinque tipi diversi"
END END
LIST F_RICERCACR2 36 LIST F_RICERCACR2 2 44
BEGIN BEGIN
PROMPT 2 3 "Secondo gruppo " PROMPT 2 3 "Secondo gruppo "
ITEM "-|Nessuno" MESSAGE CLEAR,1@ ITEM "-|Nessuno" MESSAGE CLEAR,1@
@ -52,11 +33,12 @@ ITEM "CA|Causale contabile" MESSAGE ENABLE,F_RICERCACR3
ITEM "AN|Anagrafica magazzino" MESSAGE ENABLE,F_RICERCACR3 ITEM "AN|Anagrafica magazzino" MESSAGE ENABLE,F_RICERCACR3
ITEM "CV|Categoria di vendita" MESSAGE ENABLE,F_RICERCACR3 ITEM "CV|Categoria di vendita" MESSAGE ENABLE,F_RICERCACR3
ITEM "CC|Categoria contabile" MESSAGE ENABLE,F_RICERCACR3 ITEM "CC|Categoria contabile" MESSAGE ENABLE,F_RICERCACR3
ITEM "VM|Categoria di vendita e gruppo merceologico" MESSAGE ENABLE,F_RICERCACR3
//STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_RICERCACR1)&&(#THIS_FIELD!=#F_RICERCACR2)&&(#THIS_FIELD!=#F_RICERCACR3)&&(#THIS_FIELD!=#F_RICERCACR4)) //STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_RICERCACR1)&&(#THIS_FIELD!=#F_RICERCACR2)&&(#THIS_FIELD!=#F_RICERCACR3)&&(#THIS_FIELD!=#F_RICERCACR4))
//WARNING "La sequenza di ricerca primaria deve indicare cinque tipi diversi" //WARNING "La sequenza di ricerca primaria deve indicare cinque tipi diversi"
END END
LIST F_RICERCACR3 36 LIST F_RICERCACR3 2 44
BEGIN BEGIN
PROMPT 2 4 "Terzo gruppo " PROMPT 2 4 "Terzo gruppo "
ITEM "-|Nessuno" MESSAGE CLEAR,2@ ITEM "-|Nessuno" MESSAGE CLEAR,2@
@ -65,12 +47,13 @@ ITEM "CA|Causale contabile" MESSAGE ENABLE,F_RICERCACR4
ITEM "AN|Anagrafica magazzino" MESSAGE ENABLE,F_RICERCACR4 ITEM "AN|Anagrafica magazzino" MESSAGE ENABLE,F_RICERCACR4
ITEM "CV|Categoria di vendita" MESSAGE ENABLE,F_RICERCACR4 ITEM "CV|Categoria di vendita" MESSAGE ENABLE,F_RICERCACR4
ITEM "CC|Categoria contabile" MESSAGE ENABLE,F_RICERCACR4 ITEM "CC|Categoria contabile" MESSAGE ENABLE,F_RICERCACR4
ITEM "VM|Categoria di vendita e gruppo merceologico" MESSAGE ENABLE,F_RICERCACR4
GROUP 1 GROUP 1
//STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_RICERCACR1)&&(#THIS_FIELD!=#F_RICERCACR2)&&(#THIS_FIELD!=#F_RICERCACR3)&&(#THIS_FIELD!=#F_RICERCACR4)) //STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_RICERCACR1)&&(#THIS_FIELD!=#F_RICERCACR2)&&(#THIS_FIELD!=#F_RICERCACR3)&&(#THIS_FIELD!=#F_RICERCACR4))
//WARNING "La sequenza di ricerca primaria deve indicare cinque tipi diversi" //WARNING "La sequenza di ricerca primaria deve indicare cinque tipi diversi"
END END
LIST F_RICERCACR4 36 LIST F_RICERCACR4 2 44
BEGIN BEGIN
PROMPT 2 5 "Quarto gruppo " PROMPT 2 5 "Quarto gruppo "
ITEM "-|Nessuno" MESSAGE CLEAR,F_RICERCACR5 ITEM "-|Nessuno" MESSAGE CLEAR,F_RICERCACR5
@ -79,12 +62,13 @@ ITEM "CA|Causale contabile" MESSAGE ENABLE,F_RICERCACR5
ITEM "AN|Anagrafica magazzino" MESSAGE ENABLE,F_RICERCACR5 ITEM "AN|Anagrafica magazzino" MESSAGE ENABLE,F_RICERCACR5
ITEM "CV|Categoria di vendita" MESSAGE ENABLE,F_RICERCACR5 ITEM "CV|Categoria di vendita" MESSAGE ENABLE,F_RICERCACR5
ITEM "CC|Categoria contabile" MESSAGE ENABLE,F_RICERCACR5 ITEM "CC|Categoria contabile" MESSAGE ENABLE,F_RICERCACR5
ITEM "VM|Categoria di vendita e gruppo merceologico" MESSAGE ENABLE,F_RICERCACR5
GROUP 1 2 GROUP 1 2
//STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_RICERCACR1)&&(#THIS_FIELD!=#F_RICERCACR2)&&(#THIS_FIELD!=#F_RICERCACR3)&&(#THIS_FIELD!=#F_RICERCACR4)) //STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_RICERCACR1)&&(#THIS_FIELD!=#F_RICERCACR2)&&(#THIS_FIELD!=#F_RICERCACR3)&&(#THIS_FIELD!=#F_RICERCACR4))
//WARNING "La sequenza di ricerca primaria deve indicare cinque tipi diversi" //WARNING "La sequenza di ricerca primaria deve indicare cinque tipi diversi"
END END
LIST F_RICERCACR5 36 LIST F_RICERCACR5 2 44
BEGIN BEGIN
PROMPT 2 6 "Quinto gruppo " PROMPT 2 6 "Quinto gruppo "
ITEM "-|Nessuno" ITEM "-|Nessuno"
@ -93,6 +77,7 @@ ITEM "CA|Causale contabile"
ITEM "AN|Anagrafica magazzino" ITEM "AN|Anagrafica magazzino"
ITEM "CV|Categoria di vendita" ITEM "CV|Categoria di vendita"
ITEM "CC|Categoria contabile" ITEM "CC|Categoria contabile"
ITEM "VM|Categoria di vendita e gruppo merceologico"
GROUP 1 2 GROUP 1 2
//STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_RICERCACR1)&&(#THIS_FIELD!=#F_RICERCACR2)&&(#THIS_FIELD!=#F_RICERCACR3)&&(#THIS_FIELD!=#F_RICERCACR4)) //STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_RICERCACR1)&&(#THIS_FIELD!=#F_RICERCACR2)&&(#THIS_FIELD!=#F_RICERCACR3)&&(#THIS_FIELD!=#F_RICERCACR4))
//WARNING "La sequenza di ricerca primaria deve indicare cinque tipi diversi" //WARNING "La sequenza di ricerca primaria deve indicare cinque tipi diversi"
@ -100,10 +85,10 @@ END
GROUPBOX DLG_NULL 78 6 GROUPBOX DLG_NULL 78 6
BEGIN BEGIN
PROMPT 1 8 "Ricerca per anagrafica del conto di costo ricavo" PROMPT 1 8 "@bRicerca per anagrafica del conto di costo ricavo"
END END
LIST F_RICERCAAN1 36 LIST F_RICERCAAN1 2 30
BEGIN BEGIN
PROMPT 2 9 "Primo gruppo " PROMPT 2 9 "Primo gruppo "
ITEM "AR|Articolo" ITEM "AR|Articolo"
@ -114,7 +99,7 @@ ITEM "RF|Raggruppamento fiscale"
//WARNING "La sequenza di ricerca per anagrafica deve indicare quattro tipi diversi" //WARNING "La sequenza di ricerca per anagrafica deve indicare quattro tipi diversi"
END END
LIST F_RICERCAAN2 36 LIST F_RICERCAAN2 2 30
BEGIN BEGIN
PROMPT 2 10 "Secondo gruppo " PROMPT 2 10 "Secondo gruppo "
ITEM "-|Nessuno" MESSAGE CLEAR,3@ ITEM "-|Nessuno" MESSAGE CLEAR,3@
@ -126,7 +111,7 @@ ITEM "RF|Raggruppamento fiscale" MESSAGE ENABLE,F_RICERCAAN3
//WARNING "La sequenza di ricerca per anagrafica deve indicare quattro tipi diversi" //WARNING "La sequenza di ricerca per anagrafica deve indicare quattro tipi diversi"
END END
LIST F_RICERCAAN3 36 LIST F_RICERCAAN3 2 30
BEGIN BEGIN
PROMPT 2 11 "Terzo gruppo " PROMPT 2 11 "Terzo gruppo "
ITEM "-|Nessuno" MESSAGE CLEAR,F_RICERCAAN4 ITEM "-|Nessuno" MESSAGE CLEAR,F_RICERCAAN4
@ -139,7 +124,7 @@ GROUP 3
//WARNING "La sequenza di ricerca per anagrafica deve indicare quattro tipi diversi" //WARNING "La sequenza di ricerca per anagrafica deve indicare quattro tipi diversi"
END END
LIST F_RICERCAAN4 36 LIST F_RICERCAAN4 2 30
BEGIN BEGIN
PROMPT 2 12 "Quarto gruppo " PROMPT 2 12 "Quarto gruppo "
ITEM "-|Nessuno" ITEM "-|Nessuno"

View File

@ -1,27 +1,12 @@
#include "ve0.h" #include "ve0.h"
#include <automask.h> #include <automask.h>
#include <colors.h>
#include <modtbapp.h> #include <modtbapp.h>
#include <recset.h>
#include <tabmod.h>
/////////////////////////////////////////////////////////// #include "../cg/cglib01.h"
// Maschera di gestione tabella CVM:
// Condizioni di vendita per categoria e gruppo merceologico
///////////////////////////////////////////////////////////
class TCVM_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
int load(const TRectype& head) { return 0; }
TCVM_mask() : TAutomask("vetbcvm") {}
};
bool TCVM_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return true;
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// Applicazione per gestione maschere di modulo // Applicazione per gestione maschere di modulo
@ -29,38 +14,240 @@ bool TCVM_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
class TVE_tab_mod_app : public TTable_module_application class TVE_tab_mod_app : public TTable_module_application
{ {
protected:
virtual TMask* user_create_mask();
virtual int read(TMask& m);
public:
const TString& table_name() const;
}; };
const TString& TVE_tab_mod_app::table_name() const ///////////////////////////////////////////////////////////
// Maschera di gestione tabella CVM:
// Condizioni di vendita per categoria e gruppo merceologico
///////////////////////////////////////////////////////////
#include "vetbcvm.h"
class TCVM_mask : public TAutomask
{ {
TRelation* rel = get_relation(); protected:
return rel->curr().get("COD"); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TCVM_mask();
};
TCVM_mask::TCVM_mask() : TAutomask("vetbcvm")
{
TSheet_field& s = sfield(F_CVM_SHT);
s.set_nav_column(F_CVM_SOTTOCONTO, F_CVM_DESCONTO);
} }
TMask* TVE_tab_mod_app::user_create_mask() bool TCVM_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
if (table_name() == "CVM") switch(o.dlg())
return new TCVM_mask; {
return TTable_module_application::user_create_mask(); case F_CVM_SHT:
switch (e)
{
case se_query_add:
case se_query_del:
return false; // Non sono ammesse aggiunte o cancellazioni
case se_notify_modify:
{
TSheet_field& s = (TSheet_field&)o;
TToken_string& row = s.row(jolly);
const long sc = row.get_long(s.cid2index(F_CVM_SOTTOCONTO));
if (sc > 0) // Colora le righe valide
s.set_back_and_fore_color(REQUIRED_BACK_COLOR, NORMAL_COLOR, jolly);
else
s.set_back_and_fore_color(COLOR_INVALID, COLOR_INVALID, jolly);
}
break;
default: break;
}
default: break;
}
return true;
} }
int TVE_tab_mod_app::read(TMask& m) class TCVM_tab_app : public TRelation_application
{ {
if (table_name() == "CVM") TCVM_mask* _msk;
return ((TCVM_mask&)m).load(get_relation()->curr()); TRelation* _rel;
return TTable_module_application::read(m);
protected:
int find_gm(TSheet_field& s, const TString& gm) const;
public:
virtual TMask* get_mask(int) { return _msk; }
virtual TRelation* get_relation() const { return _rel; }
virtual bool user_create();
virtual bool user_destroy();
virtual void init_query_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m);
virtual int read(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
virtual bool remove();
};
void TCVM_tab_app::init_query_mode(TMask& m)
{
m.enable(-2);
m.hide(-3);
} }
void TCVM_tab_app::init_insert_mode(TMask& m)
{
m.disable(-2);
m.show(-3);
read(m);
}
void TCVM_tab_app::init_modify_mode(TMask& m)
{
m.disable(-2);
m.show(-3);
}
bool TCVM_tab_app::user_create()
{
_rel = new TRelation("CVE");
_msk = new TCVM_mask;
return true;
}
int TCVM_tab_app::find_gm(TSheet_field& s, const TString& gm) const
{
int mini = 0, maxi = s.items()-1, midi = 0;
TString8 code;
while (mini <= maxi)
{
midi = (mini+maxi) / 2;
s.row(midi).get(0, code);
const int cmp = code.compare(gm);
if (cmp == 0)
break;
if (cmp > 0)
maxi = midi-1;
else
mini = midi+1;
}
return code == gm ? midi : -1;
}
int TCVM_tab_app::read(TMask& m)
{
TSheet_field& s = m.sfield(F_CVM_SHT);
s.destroy();
const TString& code = m.get(F_CVM_COD);
if (code.full())
{
TISAM_recordset gm("USE GMC");
for (bool ok = gm.move_first(); ok; ok = gm.move_next())
{
TToken_string& row = s.row(-1);
row = gm.get("CODTAB").as_string();
row.add(gm.get("S0").as_string());
}
}
if (!s.empty())
{
TISAM_recordset cvm("USE &CVM\nFROM CODTAB=#COD\nTO CODTAB=#COD");
cvm.set_var("#COD", code);
TString8 gm;
for (bool ok = cvm.move_first(); ok; ok = cvm.move_next())
{
gm = cvm.get("CODTAB[3,7]").as_string();
const int i = find_gm(s, gm);
if (i >= 0)
{
const int gr = cvm.get("I0").as_int();
const int co = cvm.get("I1").as_int();
const long so = cvm.get("I2").as_int();
if (so > 0)
{
TBill zio(gr, co, so);
TToken_string& row = s.row(i);
zio.add_to(row, 2, 0x2);
s.set_back_and_fore_color(REQUIRED_BACK_COLOR, NORMAL_COLOR, i);
}
}
}
}
return s.empty() ? _iskeynotfound : NOERR;
}
int TCVM_tab_app::write(const TMask& m)
{
TSheet_field& s = m.sfield(F_CVM_SHT);
TModule_table cvm("&CVM");
FOR_EACH_SHEET_ROW(s, i, row)
{
const TBill zio(*row, 2);
TString16 code = m.get(F_CVM_COD);
code << row->get(0);
cvm.put("CODTAB", code);
if (zio.ok())
{
cvm.put("I0", zio.gruppo());
cvm.put("I1", zio.conto());
cvm.put("I2", zio.sottoconto());
cvm.rewrite_write();
}
else
{
cvm.remove();
}
}
return NOERR;
}
int TCVM_tab_app::rewrite(const TMask& m)
{
return write(m);
}
bool TCVM_tab_app::remove()
{
const TString4 code = get_relation()->curr().get("CODTAB");
TISAM_recordset cvm("USE &CVM\nFROM CODTAB=#COD\nTO CODTAB=#COD");
cvm.set_var("#COD", code);
TLocalisamfile& f = cvm.cursor()->file();
for (bool ok = cvm.move_first(); ok; ok = cvm.move_next())
f.remove();
return true;
}
bool TCVM_tab_app::user_destroy()
{
delete _msk;
delete _rel;
return true;
}
///////////////////////////////////////////////////////////
// Selettore applicazione per gestione maschere di modulo
///////////////////////////////////////////////////////////
int ve0600(int argc, char* argv[]) int ve0600(int argc, char* argv[])
{ {
TVE_tab_mod_app a; TString4 tab = argv[2];
a.run(argc, argv, TR("Tabelle module vendite")); tab.upper(); tab.strip("&");
if (tab == "CVM")
{
TCVM_tab_app a;
a.run(argc, argv, TR("Conti per categoria e gruppo"));
}
else
{
TVE_tab_mod_app a;
a.run(argc, argv, TR("Tabelle module vendite"));
}
return 0; return 0;
} }

View File

@ -8,23 +8,14 @@ int main( int argc, char** argv )
switch (r) switch (r)
{ {
case 2: case 2: ve6200(argc, argv); break; // creazione fatture partendo da bolle
ve6200(argc, argv); break; // creazione fatture partendo da bolle case 3: ve6300(argc, argv); break; // generazione effetti
case 3: case 4: ve6400(argc, argv); break; // generazione scontrini
ve6300(argc, argv); break; // generazione effetti case 5: ve6500(argc, argv); break; // generazione righe da penna ottica
case 4: case 6: ve6600(argc, argv); break; // collegamento contabilita' industriosa
ve6400(argc, argv); break; // generazione scontrini case 7: ve6700(argc, argv); break; // copia documenti interattiva da ditta a ditta
case 5: case 8: ve6800(argc, argv); break; // contabilizzazione analitica documenti
ve6500(argc, argv); break; // generazione righe da penna ottica default: ve6100(argc, argv); break; // contabilizzazione documenti
case 6:
ve6600(argc, argv); break; // collegamento contabilita' industriosa
case 7:
ve6700(argc, argv); break; // copia documenti interattiva da ditta a ditta
case 8:
ve6800(argc, argv); break; // contabilizzazione analitica documenti
default:
ve6100(argc, argv); break; // contabilizzazione documenti
} }
exit(0);
return 0; return 0;
} }

View File

@ -1604,14 +1604,12 @@ error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_doc
long so = cli_file.get_long(CLI_SOTTOCRIC); long so = cli_file.get_long(CLI_SOTTOCRIC);
conto.set(gr,co,so); conto.set(gr,co,so);
if (conto.ok()) break; // se lo trova esce (tutti != 0) if (conto.ok()) break; // se lo trova esce (tutti != 0)
} } else
else
if (tok == "CA") if (tok == "CA")
{ {
CHECK(_caus,"Causale documento non valida"); CHECK(_caus,"Causale documento non valida");
if (_caus->IVA2bill(codiva,conto)) break; // se lo trova esce if (_caus->IVA2bill(codiva,conto)) break; // se lo trova esce
} } else
else
if (tok == "AR") if (tok == "AR")
{ {
if (skip_art_related) continue; if (skip_art_related) continue;
@ -1621,60 +1619,82 @@ error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_doc
conto.set(gr,co,so); conto.set(gr,co,so);
if (!conto.ok()) // se il conto non c'e' guarda la categoria acquisti/vendite if (!conto.ok()) // se il conto non c'e' guarda la categoria acquisti/vendite
{ {
TTable *t = is_cli ? _cra : _caa; TTable& t = is_cli ? *_cra : *_caa;
t.put("CODTAB", _anamag->get(is_cli ? ANAMAG_CATCONV : ANAMAG_CATCONA));
t->put("CODTAB",_anamag->get(is_cli ? ANAMAG_CATCONV : ANAMAG_CATCONA)); if (t.read() == NOERR)
if (t->read() == NOERR)
{ {
gr = atoi(t->get("I0")); gr = t.get_int("I0");
co = atoi(t->get("I1")); co = t.get_int("I1");
so = atol(t->get("I2")); so = t.get_long("I2");
conto.set(gr,co,so); conto.set(gr, co, so);
} }
} }
if (conto.ok()) break; if (conto.ok())
} break;
else } else
if (tok == "GM" || tok == "SM" || tok == "RF") if (tok == "GM" || tok == "SM" || tok == "RF")
{ {
if (skip_art_related) continue; if (skip_art_related) continue;
const bool is_fis = tok == "RF"; const bool is_fis = tok == "RF";
TTable * tab = is_fis ? _rfa : _gmc; TTable& tab = is_fis ? *_rfa : *_gmc;
TString16 codtab(_anamag->get(is_fis ? ANAMAG_RAGGFIS : ANAMAG_GRMERC)); TString16 codtab =_anamag->get(is_fis ? ANAMAG_RAGGFIS : ANAMAG_GRMERC);
if (tok == "GM" && codtab.len() > 3) if (tok == "GM" && codtab.len() > 3)
codtab.cut(3); // gli ultimi 2 si riferiscono al sottogruppo. codtab.cut(3); // gli ultimi 2 si riferiscono al sottogruppo.
tab->put("CODTAB",codtab); tab.put("CODTAB",codtab);
if (tab->read() == NOERR) if (tab.read() == NOERR)
{ {
int gr = tab->get_int(is_cli ? "I3" : "I0"); int gr = tab.get_int(is_cli ? "I3" : "I0");
int co = tab->get_int(is_cli ? "I4" : "I1"); int co = tab.get_int(is_cli ? "I4" : "I1");
long so = tab->get_long(is_cli ? "I5" : "I2"); long so = tab.get_long(is_cli ? "I5" : "I2");
conto.set(gr,co,so); conto.set(gr, co, so);
} }
if (conto.ok()) break; if (conto.ok())
} break;
else } else
if (tok == "CV" || tok == "CC") if (tok == "CV" || tok == "CC")
{ {
const bool is_cve = tok == "CV"; const bool is_cve = tok == "CV";
if (is_cve && !is_cli) continue; // se e' un fornitore salta questa condizione if (is_cve && !is_cli) continue; // se e' un fornitore salta questa condizione
TTable* t = is_cve ? _cve : _cco; TTable& t = is_cve ? *_cve : *_cco;
TString16 cod(is_cve ? r.doc().get(DOC_CATVEN) : EMPTY_STRING); TString16 cod = is_cve ? r.doc().get(DOC_CATVEN) : EMPTY_STRING;
if (cod.empty()) if (cod.empty())
{ {
if (skip_clifo) continue; // se non aveva trovato il cliente salta al prossimo if (skip_clifo) continue; // se non aveva trovato il cliente salta al prossimo
cod = _clifo->lfile(LF_CFVEN).get(is_cve ? CFV_CATVEN : CFV_CODCATC); cod = _clifo->curr(LF_CFVEN).get(is_cve ? CFV_CATVEN : CFV_CODCATC);
} }
t->put("CODTAB",cod); t.put("CODTAB",cod);
if (t->read() == NOERR) if (t.read() == NOERR)
{ {
const bool x =(is_cve || is_cli); const bool x = (is_cve || is_cli);
int gr = t->get_int(x ? "I3" : "I0"); const int gr = t.get_int(x ? "I3" : "I0");
int co = t->get_int(x ? "I4" : "I1"); const int co = t.get_int(x ? "I4" : "I1");
long so = t->get_long(x ? "I5": "I2"); const long so = t.get_long(x ? "I5": "I2");
conto.set(gr,co,so); conto.set(gr,co,so);
} }
if (conto.ok()) break; if (conto.ok())
break;
} else
if (tok == "VM")
{
if (!is_cli) continue; // se non e' un cliente salta questa condizione
// Costruisco il codice Categoria(2)+Gruppo(3)+Sottogruppo(2)
TString8 cod = _clifo->curr(LF_CFVEN).get(CFV_CATVEN);
cod << _anamag->get(ANAMAG_GRMERC);
const TRectype* t = &cache().get("&CVM", cod);
if (t->empty() && cod.len() > 5)
{
cod.cut(5); // Tiene solo categoria+gruppo e scarta il sottogruppo
t = &cache().get("&CVM", cod);
}
if (!t->empty())
{
const int gr = t->get_int("I0");
const int co = t->get_int("I1");
const long so = t->get_long("I2");
conto.set(gr,co,so);
if (conto.ok())
break;
}
} }
} }
} }
@ -1690,9 +1710,9 @@ error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_doc
conto.set(gr,co,so); conto.set(gr,co,so);
if (!conto.ok()) if (!conto.ok())
{ {
gr = r.get_int("QTAGG1"); gr = r.get_int(RDOC_QTAGG1);
co = r.get_int("QTAGG2"); co = r.get_int(RDOC_QTAGG2);
so = r.get_long("QTAGG3"); so = r.get_long(RDOC_QTAGG3);
conto.set(gr,co,so); conto.set(gr,co,so);
if (!conto.ok()) // Cerca il conto nella stringa di ricerca (solo per prestazioni) if (!conto.ok()) // Cerca il conto nella stringa di ricerca (solo per prestazioni)
@ -2321,14 +2341,14 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
} }
else else
{ {
if (contomat.ok() && contomat != conto && pricemat != 0) if (contomat.ok() && contomat != conto && pricemat != 0)
{ {
TRiga_documento rlav(r); TRiga_documento rlav(r);
TRiga_documento rmat(r); TRiga_documento rmat(r);
const real prezzo = r.get_real(RDOC_PREZZO); const real prezzo = r.get_real(RDOC_PREZZO);
rmat.put(RDOC_PREZZO, pricemat); rmat.put(RDOC_PREZZO, pricemat);
const real valmat = rmat.imponibile(); const real valmat = rmat.imponibile();
const real diff = r.imponibile() - valmat; const real diff = r.imponibile() - valmat;
rlav.put(RDOC_PREZZO, diff); rlav.put(RDOC_PREZZO, diff);
rlav.put(RDOC_QTA, 1); rlav.put(RDOC_QTA, 1);
@ -2343,8 +2363,6 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
_righe_iva->add(r, conto); _righe_iva->add(r, conto);
} }
const TString4 cod(r.get(RDOC_CODIVA));
if (r.doc().tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale() sono esclusivi. if (r.doc().tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale() sono esclusivi.
{ {
// Totalizza per ogni codice iva il lordo // Totalizza per ogni codice iva il lordo
@ -4276,7 +4294,7 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc
if (_error == movement_error || !_movimento->movement_ok()) if (_error == movement_error || !_movimento->movement_ok())
{ {
TToken_string str(32, ' '); TToken_string str(32, ' ');
msg.format("%24s %24s Conto", "Dare", "Avere"); msg.format(FR("%24s %24s Conto"), TR("Dare"), TR("Avere"));
_viswin->add_line(msg); _viswin->add_line(msg);
const int imax = _movimento->cg_items(); const int imax = _movimento->cg_items();
@ -4325,9 +4343,9 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc
if (!interattivo) if (!interattivo)
{ {
if (_viswin->frozen()) if (_viswin->frozen())
message_box("Contabilizzazione interrotta dall'utente"); warning_box(TR("Contabilizzazione interrotta dall'utente"));
else else
message_box("Contabilizzazione terminata"); message_box(TR("Contabilizzazione terminata"));
} }
if (!exporting()) if (!exporting())
{ {

View File

@ -4,7 +4,7 @@ TOOLBAR "Toolbar" 0 0 0 2
#include <relapbar.h> #include <relapbar.h>
ENDPAGE ENDPAGE
PAGE "Conti di vendita per categoria e gruppo" 0 2 0 0 PAGE "Conti per categoria di vendita e gruppo merceologico" 0 2 0 0
GROUPBOX DLG_NULL 78 3 GROUPBOX DLG_NULL 78 3
BEGIN BEGIN
@ -20,7 +20,8 @@ BEGIN
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_CVM_COD CODTAB OUTPUT F_CVM_COD CODTAB
OUTPUT F_CVM_DES S0 OUTPUT F_CVM_DES S0
CHECKTYPE REQUIRED CHECKTYPE FORCED
FLAGS "U"
KEY 1 KEY 1
END END
@ -33,47 +34,52 @@ BEGIN
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
COPY OUTPUT F_CVM_COD COPY OUTPUT F_CVM_COD
CHECKTYPE NORMAL CHECKTYPE NORMAL
KEY 1 GROUP 2
KEY 2
END END
TEXT DLG_NULL TEXT DLG_NULL
BEGIN BEGIN
PROMPT 1 3 "@bGruppi merceologici" PROMPT 1 3 "@bGruppi merceologici"
GROUP 3
END END
SPREADSHEET F_CVM_SHT SPREADSHEET F_CVM_SHT
BEGIN BEGIN
PROMPT 0 4 "" PROMPT 0 4 ""
ITEM "Gruppo\nMerc." ITEM "Gruppo\nMerc.@6F"
ITEM "Descrizione\nGruppo merceologico@50" ITEM "Descrizione\nGruppo merceologico@50"
ITEM "Gruppo\nCont." ITEM "Gruppo\nCont.@5"
ITEM "Conto\nCont." ITEM "Conto\nCont.@5"
ITEM "Sottoconto\nCont." ITEM "Sottoconto\nCont.@9"
ITEM "Descrizione\nConto contabile@50" ITEM "Descrizione\nConto contabile@50"
GROUP 3
END END
ENDPAGE ENDPAGE
ENDMASK ENDMASK
PAGE "Conto" -1 -1 60 6 PAGE "Conto" -1 -1 56 8
GROUPBOX DLG_NULL 58 3 GROUPBOX DLG_NULL 54 4
BEGIN BEGIN
PROMPT 1 1 "Gruppo Merceologico" PROMPT 1 0 "Gruppo Merceologico"
END END
STRING F_CVM_CODGM 5 STRING F_CVM_CODGM 5
BEGIN BEGIN
PROMPT 2 2 "Codice " PROMPT 2 1 "Codice "
FLAGS "DU"
END END
STRING F_CVM_DESGM 50 STRING F_CVM_DESGM 52
BEGIN BEGIN
PROMPT 12 2 "" PROMPT 2 2 ""
FLAGS "D"
END END
GROUPBOX DLG_NULL 58 4 GROUPBOX DLG_NULL 54 4
BEGIN BEGIN
PROMPT 1 4 "Conto contabile" PROMPT 1 4 "Conto contabile"
END END
@ -81,25 +87,72 @@ END
NUMBER F_CVM_GRUPPO 3 NUMBER F_CVM_GRUPPO 3
BEGIN BEGIN
PROMPT 2 5 "Gruppo " PROMPT 2 5 "Gruppo "
FLAGS "U"
GROUP 4
END END
NUMBER F_CVM_CONTO 3 NUMBER F_CVM_CONTO 3
BEGIN BEGIN
PROMPT 16 5 "Conto " PROMPT 18 5 "Conto "
FLAGS "U"
VALIDATE REQIF_FUNC 1 F_CVM_GRUPPO
GROUP 4
WARNING "Conto errato o mancante"
END END
NUMBER F_CVM_SOTTOCONTO 6 NUMBER F_CVM_SOTTOCONTO 6
BEGIN BEGIN
PROMPT 30 5 "Sottoconto " PROMPT 35 5 "Sottoconto "
USE LF_PCON USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_CVM_GRUPPO INPUT GRUPPO F_CVM_GRUPPO
INPUT CONTO F_CVM_CONTO INPUT CONTO F_CVM_CONTO
INPUT SOTTOCONTO F_CVM_SOTTOCONTO INPUT SOTTOCONTO F_CVM_SOTTOCONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CVM_GRUPPO GRUPPO
OUTPUT F_CVM_CONTO CONTO
OUTPUT F_CVM_SOTTOCONTO SOTTOCONTO
OUTPUT F_CVM_DESCONTO DESCR
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 2 F_CVM_GRUPPO F_CVM_CONTO
WARNING "Sottoconto errato o mancante"
GROUP 4
END END
STRING F_CVM_DESCONTO 50 STRING F_CVM_DESCONTO 50
BEGIN BEGIN
PROMPT 1 6 "Descrizione" PROMPT 2 6 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F_CVM_DESCONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_CVM_SOTTOCONTO
GROUP 4
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -13 -11 ""
END
BUTTON DLG_USER 10 2
BEGIN
PROMPT -23 -11 "Azzera"
PICTURE TOOL_DELREC
MESSAGE RESET,4@
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -33 -11 ""
END END
ENDPAGE ENDPAGE