Patch level : 4.0 911

Files correlati     :
Ricompilazione Demo : [ ]
Commento           :

Riportata la versione 3.2 1010


git-svn-id: svn://10.65.10.50/trunk@16373 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2008-03-26 11:24:36 +00:00
parent 3eb5b833d7
commit 9e26e4d527
31 changed files with 664 additions and 179 deletions

View File

@ -1,5 +1,5 @@
1001
101
100
I5CDEP|1|3|0|CODICE DEPOSITO
I5CCLI|3|6|0|CODICE CLIENTE
I5FLCO|1|1|0|FLAG CLIENTE CORRISPETTIVO
@ -100,6 +100,5 @@ I5FELA|1|1|0|ELABORATO
I5CNOS|1|2|0|COD.NUM. DOCUMENTO SPED.
I5NDOS|3|7|0|NUMERO DOCUMENTO SPED.
I5UDOS|3|8|0|DATA DOCUMENTO SPED.
I5AREA|1|100|0|AREA PERSONALIZZABILE
1
I5TDO1+I5CNMV+I5NDOC|

View File

@ -1,5 +1,5 @@
1003
101
100
I5CDEP|1|3|0|CODICE DEPOSITO
I5CCLI|3|6|0|CODICE CLIENTE
I5FLCO|1|1|0|FLAG CLIENTE CORRISPETTIVO
@ -100,6 +100,5 @@ I5FELA|1|1|0|ELABORATO
I5CNOS|1|2|0|COD.NUM. DOCUMENTO SPED.
I5NDOS|3|7|0|NUMERO DOCUMENTO SPED.
I5UDOS|3|8|0|DATA DOCUMENTO SPED.
I5AREA|1|100|0|AREA PERSONALIZZABILE
1
I5TDO1+I5CNMV+I5NDOC|

View File

@ -138,13 +138,21 @@ END
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -12 -1 "~Stampa"
PROMPT -13 -1 "~Stampa"
MESSAGE EXIT,K_ENTER
END
BUTTON DLG_EMAIL 10 2
BEGIN
PROMPT -23 -1 "~Mail"
PICTURE BMP_EMAIL
MESSAGE EXIT,77
FLAGS "H"
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
PROMPT -33 -1 ""
END
ENDPAGE

View File

@ -1,5 +1,6 @@
#include <applicat.h>
#include <reputils.h>
#include <recset.h>
#include <reprint.h>
#include <progind.h>
#include <defmask.h>

View File

@ -1,8 +1,7 @@
#include <applicat.h>
#include <mask.h>
#include <progind.h>
#include "velib04.h"
#include "ve6200.h"
#include "ve6200a.h"
#include <doc.h>
@ -299,20 +298,6 @@ int TLista_clifo::add(long cod)
// TFatturazione_bolle_app
///////////////////////////////////////////////////////////
class TFatturazione_bolle_app : public TSkeleton_application
{
TString4 _default_selection;
protected:
virtual bool create();
virtual void main_loop();
bool process(TIndwin& iw, TFatturazione_bolle& eld, TLista_documenti& din, const TDate& data_elab);
void process_by_cli(const TMask& m);
void process_by_ragsoc(const TMask& m);
void process_by_doc(const TMask& m);
};
bool TFatturazione_bolle_app::create()
{
open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_OCCAS, LF_INDSP, LF_CFVEN,
@ -325,7 +310,7 @@ bool TFatturazione_bolle_app::create()
return TSkeleton_application::create();
}
bool TFatturazione_bolle_app::process(TIndwin& iw, TFatturazione_bolle& eld,
bool TFatturazione_bolle_app::process(TIndwin& iw, TElaborazione & eld,
TLista_documenti& din, const TDate& data_elab)
{
// Crea documenti di output
@ -378,7 +363,8 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m)
const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA);
const long an = m.get_long(F_NUMERO_DOCUMENTO_A);
TFatturazione_bolle eld(m.get(F_CODICE_ELAB));
TElaborazione * e = elab(m.get(F_CODICE_ELAB));
TElaborazione & eld = *e;
TToken_string tipidoc(24), statidoc(10);
eld.tipi_validi(tipidoc);
eld.stati_validi(statidoc);
@ -406,6 +392,7 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m)
break;
}
}
delete e;
}
void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
@ -429,7 +416,8 @@ void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA);
const long an = m.get_long(F_NUMERO_DOCUMENTO_A);
TFatturazione_bolle eld(m.get(F_CODICE_ELAB));
TElaborazione * e = elab(m.get(F_CODICE_ELAB));
TElaborazione & eld = *e;
TToken_string tipidoc(24), statidoc(10);
eld.tipi_validi(tipidoc);
eld.stati_validi(statidoc);
@ -457,6 +445,8 @@ void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
break;
}
}
delete e;
}
void TFatturazione_bolle_app::process_by_doc(const TMask& m)
@ -481,7 +471,8 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m)
const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA);
const long an = m.get_long(F_NUMERO_DOCUMENTO_A);
TFatturazione_bolle eld(m.get(F_CODICE_ELAB));
TElaborazione * e = elab(m.get(F_CODICE_ELAB));
TElaborazione & eld = *e;
TToken_string tipidoc(24), statidoc(10);
eld.tipi_validi(tipidoc);
eld.stati_validi(statidoc);
@ -530,6 +521,7 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m)
break;
}
}
delete e;
}
void TFatturazione_bolle_app::main_loop()

26
ve/ve6200.h Executable file
View File

@ -0,0 +1,26 @@
#ifndef __APPLICATION_H
#include <applicat.h>
#endif
#ifndef __MASK_H
#include <mask.h>
#endif
#include "velib.h"
class TFatturazione_bolle_app : public TSkeleton_application
{
TString4 _default_selection;
protected:
virtual bool create();
virtual void main_loop();
virtual TFatturazione_bolle * elab(const TString & cod) const { return new TFatturazione_bolle(cod);}
bool process(TIndwin& iw, TElaborazione & eld, TLista_documenti& din, const TDate& data_elab);
void process_by_cli(const TMask& m);
void process_by_ragsoc(const TMask& m);
void process_by_doc(const TMask& m);
};

View File

@ -308,12 +308,11 @@ void TPenna_app::check_doc() //definizione della me
TCheck_mask m; //istanza di TPenna_mask con il nome m (perche'ho chiamato una maschera)
if(m.run()==K_ENTER)
{
TConfig ini(_ini_name, "Main"); //apre il file su cui scrivere
TConfig ini(_ini_name, "Transaction"); //apre il file su cui scrivere
//chiamo il nome del file F_FILE che abbiamo scelto con la maschera; get
//legge una stringa
TRecord_cache c(LF_CODCORR, 2);
ini.set("Result", "SUCCESS"); //comunica al chiamante il successo della transazione
const TFilename nomefile = m.get(F_FILE); //assegno alla variabile nomefile la stringa letta con m.get(F_FILE);
//nomefile é una variabile di tipo TFilename
@ -371,6 +370,7 @@ void TPenna_app::check_doc() //definizione della me
{
bool found = false;
TString codice = articolocor.get(fcod);
TString codicecorr;
const real qta(articolocor.get(fqta));
TString16 mag;
@ -378,7 +378,7 @@ void TPenna_app::check_doc() //definizione della me
const TRectype & codcorr = c.get(codice);
if (!codcorr.empty())
codice = codcorr.get("CODART");
codicecorr = codcorr.get("CODART");
if (fmag >= 0)
mag = articolocor.get(fmag);
@ -387,7 +387,7 @@ void TPenna_app::check_doc() //definizione della me
TRiga_documento & row = d[r];
const TString & rowcod = row.get(RDOC_CODART);
if (codice == rowcod)
if ((codice == rowcod) ||(codicecorr == rowcod))
{
if (mag.blank() || mag == row.get(RDOC_CODMAG))
{
@ -404,16 +404,30 @@ void TPenna_app::check_doc() //definizione della me
row.put(RDOC_CODART, codice);
row.put(RDOC_CODARTMAG, codice);
row.put(RDOC_CODMAG, mag);
row.put(RDOC_DESCR, cache().get(LF_ANAMAG, codice, ANAMAG_DESCR));
row.put(RDOC_QTAGG1, qta);
}
}
}
articoli.close();
const int rows = d.physical_rows();
bool doc_different = false;
for (int r = rows; !doc_different && r > 0; r--)
{
TRiga_documento & row = d[r];
const real qta1 = row.get_real(RDOC_QTAGG1);
doc_different = row.get_real(RDOC_QTA) != qta1;
}
TReport rep;
TReport_book book;
ini.set("Result", "SUCCESS", "Transaction"); //comunica al chiamante il successo della transazione
if (doc_different)
{
if (rep.load("ve6500a"))
{
const TString query(rep.recordset()->query_text());
@ -422,10 +436,47 @@ void TPenna_app::check_doc() //definizione della me
book.add(rep);
if (book.pages() > 0)
book.print_or_preview();
xvt_fsys_removefile(nomefile);
for (int r = rows; r > 0; r--)
{
TRiga_documento & row = d[r];
const real qta1 = row.get_real(RDOC_QTAGG1);
if (qta1 == ZERO)
d.destroy_row(r, true);
else
{
if (row.get_real(RDOC_QTA) != qta1)
row.put(RDOC_QTA, qta1);
row.zero(RDOC_QTAGG1);
}
}
if (yesno_box("Si desidera aggiornare il documento\ncon la lettura da terminale"))
{
const int rows = d.rows();
const int items = TRectype(LF_RIGHEDOC).items();
for (int r = 1; r <= rows; r++)
{
const TRiga_documento & row = d[r];
para.format("%d,%d", LF_RIGHEDOC, r); // scrive i due numeri (%d) separati dalla , con format (che formatta
// la stringa para con il formato specificato tra " ")
ini.set_paragraph(para); // sposta il cursore sulla nuova para (nuovo valore)
for (int f = 0; f < items; f++)
{
const char * name = row.fieldname(f);
const TString & val = row.get(name);
ini.set(name, val); // scrive il codice sul file ini
}
}
}
else
ini.set("Result", "ERROR", "Transaction"); //comunica al chiamante l'insuccesso della transazione
}
else
error_box("Non posso leggere il report ve6500.rep");
}
xvt_fsys_removefile(nomefile);
}
}
@ -435,7 +486,7 @@ void TPenna_app::load_doc() //definizione della me
TPenna_mask m; //istanza di TPenna_mask con il nome m (perche'ho chiamato una maschera)
if(m.run()==K_ENTER)
{
TConfig ini(_ini_name, "Main"); //apre il file su cui scrivere
TConfig ini(_ini_name, "Transaction"); //apre il file su cui scrivere
//chiamo il nome del file F_FILE che abbiamo scelto con la maschera; get
//legge una stringa
ini.set("Result", "SUCCESS"); //comunica al chiamante il successo della transazione
@ -462,7 +513,7 @@ void TPenna_app::load_doc() //definizione della me
TEsercizi_contabili esc; //crea un oggetto esc di tipo TEsercizi_contabili
TString16 annoes;
annoes.format("%04d", esc.date2esc(datadoc)); //crea un intero lungo 4 riempito di 0 all'inizio
TString16 codmag = m.get(F_MAG); // setta codmag in base al valore della maschera
TString8 codmag = m.get(F_MAG); // setta codmag in base al valore della maschera
codmag.left_just(3) << m.get(F_DEP); // attacca a codmag il F_DEP, codice deposito dalla maschera

View File

@ -15,6 +15,7 @@ Item_09 = "Configurazione", [ACQVEN_020]
Item_10 = "Importazione documenti STORE", <dtmenu.men>
Item_11 = "Trasferimento PACK", <tpmenu.men>
Item_12 = "Vendita al dettaglio", <vdmenu.men>, "E"
Item_13 = "Gestione cooperative", <comenu.men>, "E"
[ACQVEN_001]
Caption = "Archivi e tabelle di base"

View File

@ -222,6 +222,7 @@ class TTipo_documento : public TRectype // velib03
TString16 _totale_cont;
TString16 _field_prezzo;
TString16 _field_qta, _field_qtaevasa; // Veri campi Quantità e Quantità Evasa
TString16 _raee_cod, _raee_fld;
TString _str_desc_doc, _str_desc_rdoc;
char _tipocf;
@ -264,6 +265,8 @@ public:
bool check_giac() const { return _check_qta == 'G'; }
bool check_disp() const { return _check_qta == 'D'; }
bool load_cont() const { return _load_cont; }
const TString& raee_cod() const { return _raee_cod; }
const TString& raee_fld() const { return _raee_fld; }
const TString & descrizione() const { return get("S0"); }
const TString & riferimento(const TDocumento& doc, TString& rif) const;
@ -651,7 +654,8 @@ protected:
void init();
void check_modules();
virtual void set_variables(TExpression * e) const ;
int set_row_ids();
void update_raee();
int set_row_ids();
public:
long renum_ndoc(long numdoc = 0);
@ -847,6 +851,7 @@ public:
static bool universal_handler( TMask_field& f, KEY key);
static bool occas_handler( TMask_field& f, KEY key );
static bool occas_code_handler( TMask_field& f, KEY key );
static bool occas_cfpi_handler( TMask_field& f, KEY key );
static bool clifo_handler( TMask_field& f, KEY key );
static bool print_handler( TMask_field& f, KEY key );
static bool elabora_handler( TMask_field& f, KEY key );

View File

@ -270,7 +270,7 @@ real TDocumento::spese_incasso(real & imp, int ndec, TTipo_importo t) const
{
if (ndec == AUTO_DECIMALS)
ndec = decimals();
if (spese_inc.objptr(_rim_dir) == NULL)
if (spese_inc.objptr(_rim_dir) == NULL) // Inizializzo le spese d'incasso se necessario
{
TConfig conf(CONFIG_STUDIO, "ve");
for (TTipo_pag p = _rim_dir; p < _nessun_pag; p = TTipo_pag((int)p + 1))
@ -755,7 +755,7 @@ void TDocumento::set_riga_sconto()
{
if (_sconto == NULL)
{
static TString16 _tipo_riga_sc;
static TString4 _tipo_riga_sc;
if (_tipo_riga_sc.empty())
{
TConfig conf(CONFIG_STUDIO, "ve");
@ -765,13 +765,13 @@ void TDocumento::set_riga_sconto()
{
_tipo_riga_sc = "08";
conf.set("TRSCONTI", _tipo_riga_sc);
warning_box("Il tipo riga sconti di testa non risultava impostato.\n L'applicazione usera' automaticamente il tipo %s", (const char*) _tipo_riga_sc);
warning_box(FR("Il tipo riga sconti di testa non risultava impostato.\n L'applicazione usera' automaticamente il tipo %s"), (const char*) _tipo_riga_sc);
}
}
_sconto = new TRiga_documento(this, _tipo_riga_sc);
_sconto->put("DESCR","Sconto");
_sconto->put(RDOC_DESCR, TR("Sconto"));
}
_sconto->put("SCONTO", sconto);
_sconto->put(RDOC_SCONTO, sconto);
}
}
@ -881,11 +881,12 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
{
if (tipo().spese_aut() && !get_bool(DOC_SPESEUPD))
{
char name[8] = "CODSP0";
TString_array spese;
const TRectype & ven_rec = clifor().vendite();
for (int i = 1; i <= 4; i++)
{
TString8 name; name.format("CODSP%d", i);
name[5] = '0' + i;
const TString& s = ven_rec.get(name);
if (s.full())
spese.add(s);
@ -893,6 +894,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
myself.update_spese_aut(spese);
}
myself.update_conai();
myself.update_raee();
myself.set_row_ids();
const bool check_movmag = dongle().active(MGAUT) && tipo().mov_mag();
@ -2186,6 +2188,14 @@ void TDocumento::put_str(const char* fieldname, const char* val)
dirty_fields();
}
else
if (strcmp(fieldname, DOC_CODCF) == 0)
{
const TString16 v(val);
put("SPESEUPD", TRectype::get(DOC_CODCF) == v);
TAuto_variable_rectype::put_str(fieldname, v);
dirty_fields();
}
else
{
TAuto_variable_rectype::put_str(fieldname, val);
dirty_fields();
@ -2204,9 +2214,9 @@ const TString& TDocumento::get_str(const char* fieldname) const
void TDocumento::zero(const char * fieldname)
{
if (strcmp(fieldname, "TIPODOC") == 0)
if (strcmp(fieldname, DOC_TIPODOC) == 0)
reset_fields(*this);
TRectype::zero(fieldname);
TAuto_variable_rectype::zero(fieldname);
dirty_fields();
}
@ -2315,6 +2325,96 @@ TRecord_array& TDocumento::body(int logicnum) const
return r;
}
void TDocumento::update_raee()
{
const TString & r_cod = tipo().raee_cod();
const TString & r_fld = tipo().raee_fld();
if (r_cod.full() && r_fld.full())
{
TSpesa_prest sp(r_cod);
TString4 cod_iva_cli;
TLocalisamfile cfven(LF_CFVEN);
cfven.put("TIPOCF", get("TIPOCF"));
cfven.put("CODCF", get("CODCF"));
if (cfven.read() == NOERR)
cod_iva_cli = cfven.get("ASSFIS");
int nrows = physical_rows();
int i;
TArticolo art;
for (i = nrows; i > 0; i--)
{
TRiga_documento & r = row(i);
if (r.tipo().tipo() == RIGA_SPESEDOC && r.is_generata() && r.get("GENTIPO") == "R")
destroy_row(i, true);
}
nrows = physical_rows();
for (i = nrows; i > 0; i--)
{
TRiga_documento & r = row(i);
if (r.is_articolo())
{
const TString & codart = r.get(RDOC_CODARTMAG);
art.read(codart);
real tax = art.get_real(r_fld);
if (tax != ZERO)
{
const TCurrency_documento val(tax, *this, true);
TString16 t(sp.tipo_riga());
TRiga_documento & r1 = insert_row(i + 1, t);
copy_data(r1, r);
r1.set_tipo(t);
r1.put(RDOC_CODART, r_cod);
TString d(sp.descrizione());
if (d.full())
d << " - ";
d << r1.get(RDOC_DESCR);
d << r1.get(RDOC_DESCEST);
r1.put(RDOC_DESCR, d.left(50));
if (d.len() > 50)
{
r1.put(RDOC_DESCLUNGA, "X");
r1.put(RDOC_DESCEST, d.mid(50));
}
else
{
r1.zero(RDOC_DESCLUNGA);
r1.zero(RDOC_DESCEST);
}
const TString & um = sp.um();
if (um.full())
r1.put(RDOC_UMQTA, um);
if (cod_iva_cli.blank())
{
const TString & codiva = sp.cod_iva();
if (codiva.full())
r1.put(RDOC_CODIVA, codiva);
}
else
r1.put(RDOC_CODIVA, cod_iva_cli);
tax = val.get_num();
r1.put(RDOC_PREZZO, tax);
if (tipo().calcolo_lordo())
{
tax = r1.iva().lordo(tax, ALL_DECIMALS);
r1.put(RDOC_PREZZOL, tax);
}
r1.generata();
r1.put("GENTIPO", "R");
}
}
}
}
}
void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, TSheet_field * sh)
{
const bool updated = get_bool("SPESEUPD");
@ -2366,6 +2466,10 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old,
riga.put(RDOC_CODART, s);
riga.generata();
riga.put(RDOC_DESCR, sp.descrizione());
if (cod_iva_cli.blank())
riga.put(RDOC_CODIVA, sp.cod_iva());
else
riga.put(RDOC_CODIVA, cod_iva_cli);
switch (sp.tipo())
{
case 'Q':
@ -2385,7 +2489,10 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old,
sppr_calc(sp, valuta, cambio, prezzo, controeuro);
if (this->tipo().calcolo_lordo())
{
prezzo = riga.iva().lordo(prezzo, ALL_DECIMALS);
riga.put(RDOC_PREZZOL, prezzo);
}
riga.put(RDOC_PREZZO, prezzo);
riga.put(RDOC_UMQTA, sp.um());
}
@ -2653,4 +2760,4 @@ int TDocumento::tipo_riclassificato() const
tipo_riclassificato = TTipo_documento::_fattura;
}
return tipo_riclassificato;
}
}

View File

@ -266,7 +266,7 @@ void TTipo_documento::add_formula_if_needed(TConfig& profile, TString& variable,
const char* varname, const char* formula)
{
variable = profile.get(varname, "MAIN");
if (variable.empty())
if (variable.blank())
variable = varname;
const TRectype& trr = cache().get("%FRD", variable);
if (trr.empty() || trr.get("S1").empty())
@ -336,6 +336,8 @@ void TTipo_documento::read_formule()
_field_qtaevasa = prof.get(RDOC_QTAEVASA, NULL, -1, RDOC_QTAEVASA);
_check_qta = prof.get_char("CHECK_QTA", "MAIN");
_load_cont = prof.get_bool("LOAD_CONT", "MAIN");
_raee_cod = prof.get("RAEE_COD", "MAIN");
_raee_fld = prof.get("RAEE_FLD", "MAIN");
_str_desc_doc = prof.get("DESCRIZIONE_DOC");
_str_desc_rdoc = prof.get("DESCRIZIONE_RDOC");
@ -397,6 +399,23 @@ bool TTipo_documento::scarica_residuo() const
return get_bool("B4");
}
const TString& TTipo_documento::main_print_profile() const
{
TString& tmp = get_tmp_string();
tmp = get("S5");
tmp.cut(8); tmp.rtrim();
return tmp;
}
const TString& TTipo_documento::additional_print_profile() const
{
TString& tmp = get_tmp_string();
tmp = get("S5");
tmp.ltrim(8); tmp.rtrim();
return tmp;
}
///////////////////////////////////////////////////////////
// Espressione documento
@ -458,6 +477,8 @@ int TExpr_documento::parse_user_func(const char * name, int nparms) const
return nparms == 2 ? _componente : -1;
if (strcmp(name, "COMPQTA") == 0)
return nparms == 2 ? _comp_qta : -1;
if (strcmp(name, "NRATE") == 0)
return nparms == 0 ? _nrate : -1;
return -1;
}
@ -885,6 +906,13 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
}
}
break;
case _nrate:
{
const TPagamento & p = _doc->pagamento();
const real r = p.n_rate();
stack.push(r);
}
break;
default:
TExpression::evaluate_user_func(index, nparms, stack, type);
break;
@ -949,7 +977,7 @@ int TFormula_documento::read(const char* codice, const char * expr, bool numexpr
if (err == NOERR)
{
const TTypeexp et = expr_type();
const TString e = expr_string(); // Copio espressione proveniente da record
const TString& e = expr_string(); // Copio espressione proveniente da record
_expr = new TExpr_documento(e, et);
}
else

View File

@ -281,7 +281,7 @@ bool TElaborazione_esterna::elabora(TLista_documenti& doc_in, TLista_documenti&
TExternal_app app(command_line);
if (app.run() == 0)
{
TConfig c(name, "Main");
TConfig c(name, "Transaction");
const TString & res = c.get("Result");
if (res == "SUCCESS")
{
@ -316,6 +316,7 @@ bool TElaborazione_esterna::elabora(TLista_documenti& doc_in, TLista_documenti&
r++;
par.format("%d,%d", LF_RIGHEDOC, r);
}
d.stato(stato_finale_doc_iniziale()[0]);
return true;
}
else

View File

@ -80,6 +80,9 @@ public:
const TString& descrizione() const { return get("S0"); }
const TTipo_elaborazione tipo() const { return (TTipo_elaborazione) get_int("I0"); }
virtual void tipi_validi(TToken_string& tipi) const {}
virtual void stati_validi(TToken_string& stati) const {}
bool doc_uguale(int u) const { return get("S1").mid(u, 1) == "X"; }
bool riga_uguale(int u) const { return get("S1").mid(40+u, 1) == "X"; }
@ -97,6 +100,7 @@ public:
bool usa_data_consegna() const { return get_bool("B9"); }
bool kill_descrizione_estesa() const { return get_bool("B10"); }
bool calcola_scarti() const { return get_bool("B11"); }
const TString & num_riferimenti_in() const { return get("S11"); }
int intestazioni_sheet() const { return get_int("I1"); }
@ -139,6 +143,8 @@ protected:
bool aggiorna_ncolli_tara_pnetto(TRiga_documento& r) const;
public:
bool nettifica() { return get_bool("B12"); }
bool reload_prices() { return get_bool("B13"); }
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
@ -151,13 +157,24 @@ class TFatturazione_bolle : public TElaborazione // velib04a
{
TToken_string _cod_desc;
protected:
virtual void campi_raggruppamento_righe(TToken_string& campi_riga) const;
virtual void campi_raggruppamento(TToken_string& campi) const;
virtual bool doc_raggruppabile(const TDocumento & doc) const { return doc.raggruppabile(); }
virtual bool doc_raggruppabile(const TDocumento & doc_in, const TDocumento & doc_out, TToken_string & campi) const
{ return doc_in.raggruppabile(doc_out, campi); }
virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin) { rout += rin; }
virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin);
virtual const TString & get_tipo_out(const TDocumento & doc_out) { return get("S8"); }
public:
virtual bool raggruppa(TDocumento& din, TDocumento& dout);
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
void tipi_validi(TToken_string& tipi) const;
void stati_validi(TToken_string& stati) const;
virtual void tipi_validi(TToken_string& tipi) const;
virtual void stati_validi(TToken_string& stati) const;
TFatturazione_bolle(const char* cod);
TFatturazione_bolle(const TRectype& rec) : TElaborazione(rec) { }

View File

@ -37,6 +37,74 @@ void TFatturazione_bolle::stati_validi(TToken_string& stati) const
CHECK(!stati.empty_items(), "Nessuno stato documento valido");
}
void TFatturazione_bolle::campi_raggruppamento_righe(TToken_string& campi_riga) const
{
const bool ragg_rig = raggruppa_righe();
if (ragg_rig)
{
campi_riga = "CODART|UMQTA"; // Uguali sempre
// Uguali se commesse attive
if (dongle().active(CAAUT) || dongle().active(CMAUT))
{
campi_riga.add(RDOC_CODCMS);
campi_riga.add(RDOC_FASCMS);
campi_riga.add(RDOC_CODCOSTO);
}
// Uguali opzionalmente
if (riga_uguale(0)) campi_riga.add("CODMAG");
if (riga_uguale(1)) campi_riga.add("CODIVA");
if (riga_uguale(2)) campi_riga.add("PREZZO|SCONTO");
}
}
void TFatturazione_bolle::campi_raggruppamento(TToken_string& campi) const
{
campi = "TIPOCF|CODCF|CODVAL|CODLIN"; // Uguali sempre
// Uguali opzionalmente
const char* cond[] = { "CAMBIO", "SCONTO", "TIPODOC", "CODNUM",
"CODPAG", "CODABIA|CODCABA", "CODLIST", "CODAG",
"CODSPMEZZO", "CODPORTO", "CAUSTRASP", "CODVETT1|CODVETT2|CODVETT3",
"CODINDSP",
NULL };
for (int u = 0; cond[u]; u++)
if (doc_uguale(u)) campi.add(cond[u]);
}
void TFatturazione_bolle::create_row(TDocumento& doc_out, const TRiga_documento & rin)
{
TRiga_documento& rout = doc_out.new_row(); // ... crea una riga nuova e
doc_out.copy_data(rout, rin); // copiaci tutti i campi della riga sorgente.
rout.set_original_rdoc_key(rin); // memorizza il codice della riga originale
if (usa_data_consegna())
{
rout.zero(RDOC_QTAEVASA);
rout.zero(RDOC_RIGAEVASA);
}
if (kill_descrizione_estesa()) // Cancello eventualmente la descrizione estesa
{
rout.zero(RDOC_DESCLUNGA);
rout.zero(RDOC_DESCEST);
}
if (prezzo_da_ordine()) // Se devo copiare il prezzo originale all'ordine
{
const TRectype* row_ord = rin.find_original_rdoc();
if (row_ord != NULL)
{
const real ord_price = row_ord->get_real(RDOC_PREZZO);
const TString& ord_scont = row_ord->get(RDOC_SCONTO);
rout.put(RDOC_PREZZO, ord_price);
rout.put(RDOC_SCONTO, ord_scont);
}
}
}
bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
{
@ -131,30 +199,10 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
const bool ignora_desc = ignora_descrizioni();
TToken_string campi_riga(80);
const bool ragg_rig = raggruppa_righe();
if (ragg_rig)
{
// Uguali sempre
campi_riga.add(RDOC_CODART);
campi_riga.add(RDOC_UMQTA);
// Uguali se commesse attive
if (dongle().active(CAAUT) || dongle().active(CMAUT))
{
campi_riga.add(RDOC_CODCMS);
campi_riga.add(RDOC_FASCMS);
campi_riga.add(RDOC_CODCOSTO);
}
// Uguali opzionalmente
if (riga_uguale(0))
campi_riga.add(RDOC_CODMAG);
if (riga_uguale(1))
campi_riga.add(RDOC_CODIVA);
if (riga_uguale(2))
{
campi_riga.add(RDOC_PREZZO);
campi_riga.add(RDOC_SCONTO);
}
}
campi_raggruppamento_righe(campi_riga);
const bool ragg_rig = campi_riga.full();
for (int r = 1; r <= doc_in.physical_rows(); r++)
{
@ -192,43 +240,15 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
if (rin.raggruppabile(rout, campi_riga)) // Se esiste una riga compatibile ...
{
rout += rin; // ... sommaci la quantita' ecc.
add_rows(rout, rin);
elaborata = true; // Ricorda di averla gia' elaborata
break;
}
}
}
if (!elaborata) // Se la riga non e' stata gia' sommata ...
{
TRiga_documento& rout = doc_out.new_row(); // ... crea una riga nuova e
create_row(doc_out, rin);
doc_out.copy_data(rout, rin); // copiaci tutti i campi della riga sorgente.
rout.set_original_rdoc_key(rin); // memorizza il codice della riga originale
if (usa_dcons)
{
rout.zero(RDOC_QTAEVASA);
rout.zero(RDOC_RIGAEVASA);
}
if (kill_descrizione_estesa()) // Cancello eventualmente la descrizione estesa
{
rout.zero(RDOC_DESCLUNGA);
rout.zero(RDOC_DESCEST);
}
if (prezzo_da_ordine()) // Se devo copiare il prezzo originale all'ordine
{
const TRectype* row_ord = rin.find_original_rdoc();
if (row_ord != NULL)
{
const real ord_price = row_ord->get_real(RDOC_PREZZO);
const TString& ord_scont = row_ord->get(RDOC_SCONTO);
rout.put(RDOC_PREZZO, ord_price);
rout.put(RDOC_SCONTO, ord_scont);
}
}
}
}
//cambio stato documento
@ -266,18 +286,10 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
{
TWait_cursor hourglass;
TToken_string campi_doc(128); // Lista di campi che devono essere uguali
campi_doc = "TIPOCF|CODCF|CODVAL|CODLIN"; // Uguali sempre
// Uguali opzionalmente
const char* cond[] = { "CAMBIO", "SCONTO", "TIPODOC", "CODNUM",
"CODPAG", "CODABIA|CODCABA", "CODLIST", "CODAG",
"CODSPMEZZO", "CODPORTO", "CAUSTRASP", "CODVETT1|CODVETT2|CODVETT3",
"CODINDSP",
NULL };
for (int u = 0; cond[u]; u++)
if (doc_uguale(u)) campi_doc.add(cond[u]);
campi_raggruppamento( campi_doc);
for (int id = 0; id < doc_in.items(); id++)
{
TDocumento& campione = doc_in[id];
@ -296,11 +308,13 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
}
else
{
if (campione.raggruppabile()) // Se il documento ha il flag di raggruppabilita' ...
if (doc_raggruppabile(campione)) // Se il documento ha il flag di raggruppabilita' ...
// if (campione.raggruppabile()) // Se il documento ha il flag di raggruppabilita' ...
{
for (od = 0; od < tot; od++) // ... cerca un documento compatibile.
{
if (campione.raggruppabile(doc_out[od], campi_doc))
if (doc_raggruppabile(campione, doc_out[od], campi_doc))
// if (campione.raggruppabile(doc_out[od], campi_doc))
break;
}
}
@ -335,7 +349,6 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
const int tot = doc_out.items();
const TString4 codnum(codice_numerazione_finale());
const TString4 tipo_out(get("S8")); // Tipo del documento di output
for (int i = 0; i < tot; i++) // Forza tipo e numerazione documento.
{
@ -346,6 +359,7 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
const TRectype & cfven = cache().get(LF_CFVEN, key);
const TString4 tipo_cli(cfven.get(CFV_TIPODOCFAT));
const TString & tipo_out = get_tipo_out(d); // Tipo del documento di output
TRecfield td(d, DOC_TIPODOC); // Uso il TRecfield per scavalcare tutti gli automatismi
td = tipo_cli.empty() ? tipo_out : tipo_cli;
const TString& sconto = d.get(DOC_SCONTOPERC);

View File

@ -2,6 +2,9 @@
#include "velib04d.h"
#include <automask.h>
#include <doc.h>
#include <rdoc.h>
#include <recset.h>
///////////////////////////////////////////////////////////
// TConsegna ordini mask
@ -178,7 +181,7 @@ void TConsegna_mask::doc2mask(const TDocumento& doc, const TString & articolo)
if (rec.is_descrizione())
show_line = !_ignora_descrizioni;
if ( show_line && (articolo.empty() || articolo == rec.get(RDOC_CODART)))
if ( show_line && (articolo.blank() || articolo == rec.get(RDOC_CODART)))
{
TToken_string& r = s.row(-1);
r = " ";
@ -209,6 +212,8 @@ void TConsegna_mask::doc2mask(const TDocumento& doc, const TString & articolo)
r.add(rec.get(RDOC_DESCR), s.cid2index(S_DESCR));
r.add(rec.get(RDOC_TIPORIGA), s.cid2index(S_TIPORIGA));
r.add(rec.get(RDOC_NRIGA),s.cid2index(S_NUMRIGA));
r.add(rec.get(RDOC_CODAGG1),s.cid2index(S_CODAGG1));
r.add(rec.get(RDOC_CODAGG2),s.cid2index(S_CODAGG2));
}
}
if (_ordina_per_codice)
@ -245,6 +250,28 @@ TConsegna_mask::TConsegna_mask(int header_code, bool per_codice, bool ignora_des
s.set_column_header(S_QTADAEVADERE, h);
s.sheet_mask().field(S_QTADAEVADERE).set_prompt("Da evadere ");
}
TConfig c(CONFIG_DITTA, "ve");
if (c.exist("CODAGG1"))
{
TString80 codagg1 = c.get("CODAGG1");
TMask_field & agg1 =s.sheet_mask().field(S_CODAGG1);
s.set_column_header(S_CODAGG1, codagg1);
codagg1.rpad(strlen(agg1.prompt()));
agg1.set_prompt(codagg1);
}
if (c.exist("CODAGG2"))
{
TString80 codagg2 = c.get("CODAGG2");
TMask_field & agg2 =s.sheet_mask().field(S_CODAGG2);
s.set_column_header(S_CODAGG2, codagg2);
codagg2.rpad(strlen(agg2.prompt()));
agg2.set_prompt(codagg2);
}
}
///////////////////////////////////////////////////////////
@ -330,15 +357,28 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
}
TRiga_documento& rout = outdoc[riga_rif];
TString memo(1024);
memo = rout.get(RDOC_DESCR);
if (rout.get_bool(RDOC_DESCLUNGA))
memo << rout.get(RDOC_DESCEST);
// Costruisce la stringa di riferimento
TString riferimento;
indoc.riferimento(riferimento);
if (riferimento.empty())
riferimento = indoc.tipo().descrizione();
if (usa_doc_rif() && indoc.get(DOC_NUMDOCRIF).not_empty())
TString80 nrif = indoc.get(DOC_NUMDOCRIF);
if (nrif.blank())
nrif = indoc.get(DOC_DOC1);
if (nrif.blank())
nrif = indoc.get(DOC_DOC2);
if (nrif.blank())
nrif = indoc.get(DOC_DOC3);
if (usa_doc_rif() && nrif.full())
{
riferimento << " n. " << indoc.get(DOC_NUMDOCRIF);
riferimento << " n. " << nrif;
riferimento << " del " << indoc.get(DOC_DATADOCRIF);
}
else
@ -346,30 +386,87 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
riferimento << " n. " << indoc.numero();
riferimento << " del " << indoc.data().string();
}
if (memo.full())
memo << '\n';
memo << riferimento;
const TString4 numrif = num_riferimenti_in();
// Setta la descrizione se vuota
if (rout.get(RDOC_DESCR).empty())
rout.put(RDOC_DESCR, riferimento);
else
if (numrif.full())
{
// Altrimenti aggiungi il riferimento al memo
TString memo(1024);
memo = rout.get(RDOC_DESCEST);
if (memo.empty())
riferimento.cut(0);
TSheet_field& s = m.sfield(F_ROWS);
TAssoc_array doc_rows;
FOR_EACH_SHEET_ROW(s, n, row)
{
TString80 rif(rout.get(RDOC_DESCR));
const int r = row->get_int(s.cid2index(S_NUMRIGA));
if (row->get_char(0) > ' ') // E' da consegnare?
{
const TRiga_documento& rin = indoc[r];
TString query("USE RDOC KEY 4");
TString select;
const char provv = rin.get_char(RDOC_PROVV);
const int anno = rin.get_int(RDOC_ANNO);
const TString4 codnum = rin.get(RDOC_CODNUM);
const long ndoc = rin.get_long(RDOC_NDOC);
const int idriga = rin.get_int(RDOC_IDRIGA);
query << "\nSELECT CODNUM=\"" << numrif << '\"';
select.format("DAPROVV=\"%c\" DAANNO=%d DACODNUM=\"%s\" DANDOC=%ld DAIDRIGA=%d", provv, anno, (const char *) codnum, ndoc, idriga);
query << "\nFROM " << select;
query << "\nTO " << select;
TISAM_recordset recset(query);
rif << '\n';
rout.put(RDOC_DESCR, rif);
rout.put(RDOC_DESCLUNGA, "X");
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
const char provv = recset.get(RDOC_PROVV).as_string()[0];
const int anno = recset.get(RDOC_ANNO).as_int();
const TString4 codnum = recset.get(RDOC_CODNUM).as_string();
const long ndoc = recset.get(RDOC_NDOC).as_int();
TString doc_key; doc_key.format("%c|%d|%s|%ld", provv, anno, (const char *) codnum, ndoc);
if (!doc_rows.is_key(doc_key))
{
const TDocumento d(provv, anno, codnum, ndoc);
TString rif;
if (!d.empty())
{
d.riferimento(rif);
TString80 nrifin = d.get(DOC_NUMDOCRIF);
if (nrifin.blank())
nrifin = d.get(DOC_DOC1);
if (nrifin.blank())
nrifin = d.get(DOC_DOC2);
if (nrifin.blank())
nrifin = d.get(DOC_DOC3);
if (usa_doc_rif() && nrifin.full())
{
rif << " n. " << nrifin;
rif << " del " << d.get(DOC_DATADOCRIF);
}
else
memo << '\n';
memo << riferimento;
rout.put(RDOC_DESCEST, memo);
{
rif << " n. " << d.numero();
rif << " del " << d.data().string();
}
riferimento << rif << '\n';
}
doc_rows.add(doc_key);
}
}
}
}
memo.insert(riferimento);
}
rout.put(RDOC_DESCLUNGA, memo.len() > 50);
rout.put(RDOC_DESCR, memo.left(50));
rout.put(RDOC_DESCEST, memo.mid(50));
}
TToken_string campi_riga(80);
const bool ragg_rig = raggruppa_righe();
@ -390,8 +487,8 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
TSheet_field& s = m.sfield(F_ROWS);
FOR_EACH_SHEET_ROW(s, n, row)
{
const int r = row->get_int(S_NUMRIGA - FIRST_FIELD);
if (*row->get(0) > ' ') // E' da consegnare?
const int r = row->get_int(s.cid2index(S_NUMRIGA));
if (row->get_char(0) > ' ') // E' da consegnare?
{
TRiga_documento& inrec = indoc[r];
const real daeva = row->get(S_QTADAEVADERE - FIRST_FIELD);
@ -493,6 +590,8 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
outrec.zero(qtaevasa_field); // Azzera quantita' evasa erroneamente copiata dall'ordine
outrec.zero(RDOC_RIGAEVASA); // Azzera flag di evasa erroneamente copiata dall'ordine
outrec.set_original_rdoc_key(inrec);
if (reload_prices())
outrec.zero(RDOC_CHECKED);
}
}
}
@ -523,7 +622,42 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
}
}
if (indoc.is_evaso())
if (reload_prices())
{
TDocumento_mask * m = new TDocumento_mask(outdoc.get(DOC_TIPODOC));
m->doc() = outdoc;
m->doc2mask();
m->mask2doc();
outdoc = m->doc();
delete m;
}
if (nettifica())
{
int i;
for (i = indoc.physical_rows(); i >= 1; i--)
{
TRiga_documento& inrec = indoc[i];
const int nrow = inrec.get_int(RDOC_NRIGA);
if (inrec.is_evasa())
indoc.destroy_row(i, true);
else
{
const real evaso = inrec.qtaevasa();
const char* fq = inrec.field_qta();
const char* fqe = inrec.field_qtaevasa();
inrec.add(fq, -evaso); // nuovo modo di incrementare
inrec.zero(fqe);
}
}
}
if (indoc.is_evaso())
{
indoc.stato(stato_finale_doc_iniziale()[0]);
}

View File

@ -14,6 +14,8 @@
#define S_DESCR 114
#define S_TIPORIGA 115
#define S_NUMRIGA 116
#define S_CODAGG1 117
#define S_CODAGG2 118
#define F_CODNUM 201
#define F_DESNUM 202

View File

@ -188,13 +188,15 @@ BEGIN
ITEM "Descrizione@50"
ITEM "Tipo@4"
ITEM "N.ro riga"
ITEM "Codice Aggiuntivo 1"
ITEM "Codice Aggiuntivo 2"
END
ENDPAGE
ENDMASK
PAGE "Riga 1" -1 -1 66 13
PAGE "Riga 1" -1 -1 66 15
GROUPBOX DLG_NULL 64 8
BEGIN
@ -317,6 +319,18 @@ BEGIN
PROMPT 41 10 "Riga evasa"
END
STRING S_CODAGG1 20
BEGIN
PROMPT 2 11 "Cod.Aggiuntivo 1 "
FLAGS "D"
END
STRING S_CODAGG2 20
BEGIN
PROMPT 2 12 "Cod.Aggiuntivo 2 "
FLAGS "D"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""

View File

@ -9,8 +9,6 @@
#include "sconti.h"
#include "veini.h"
#include "velib.h"
#include "vepriv.h"
#include "verig.h"
#include "veuml1.h"
#include "veini.h"
@ -50,7 +48,7 @@ bool numdocrif_hndl( TMask_field& field, KEY key )
TRelation rel(LF_DOC);
TString sortkey = "TIPOCF|CODCF|PROVV|ANNO|CODNUM|"; sortkey << campo;
TSorted_cursor cur(&rel, sortkey, "", 2, &filtrec, &filtrec);
TString80 f; f.format("CODNUM==\"%s\"", (const char*)m.get(F_CODNUM));
TString16 f; f.format("CODNUM==\"%s\"", (const char*)m.get(F_CODNUM));
cur.setfilter(f);
@ -294,8 +292,15 @@ bool data_hndl( TMask_field& field, KEY key )
if (key == K_ENTER || field.to_check(key))
{
const TDate datadoc(m.get(F_DATADOC));
if (!datadoc.ok())
return field.error_box("La data documento deve essere comunque indicata.");
const int annodoc = m.get_int(F_ANNO);
if (datadoc.year() != annodoc)
{
if (datadoc.ok())
return field.error_box(TR("La data documento deve appartenere all'anno %d"), annodoc);
else
return field.error_box(TR("La data documento deve essere comunque indicata"));
}
const TCodice_numerazione codnum(m.get(F_CODNUM));
if (codnum.test_eser())
{
@ -333,12 +338,17 @@ bool data_hndl( TMask_field& field, KEY key )
doc.read(_isgteq);
if (doc.eof() || doc.prev() == NOERR)
{
TDate dataprev = doc.get_date(DOC_DATADOC);
const TDate dataprev = doc.get_date(DOC_DATADOC);
same_key = doc.curr().same_key(m.doc().head(), 1, 1);
if (same_key && datadoc < dataprev)
return field.error_box("Data documento inferiore alla data del documento precedente");
}
doc.curr() = m.doc().head();
doc.read(_isgreat);
same_key = doc.curr().same_key(m.doc().head(), 1, 1);
if (doc.good() && same_key && datadoc > doc.get_date(DOC_DATADOC))
return field.error_box("Data documento superiore alla data del documento successivo");
}
return true;
}
@ -358,6 +368,11 @@ void row_set_handler( TMask& m, const int field, const int index )
case 3:
if (field == FR_CODART)
m.set_handler( field, search_price_handler );
case 4:
if (field == FR_CODART)
m.set_handler( field, find_price_handler );
break;
default:
break;
default:
yesnofatal_box( false, "Funzione di handler sulla riga non definita( %d ).", index );
@ -367,13 +382,13 @@ void row_set_handler( TMask& m, const int field, const int index )
}
HIDDEN TString16 curr_um;
HIDDEN real curr_fc(1.0);
HIDDEN real curr_fc = UNO;
bool iva_handler( TMask_field& f, KEY key )
{
TDocumento_mask & mask = (TDocumento_mask &) f.mask().get_sheet()->mask();
if (key == 0 || (key == K_ENTER && f.get().empty()))
if (key == 0 || (key == K_ENTER && f.empty()))
{
const TString16 codiva = mask.condv().clifo().vendite().get(CFV_ASSFIS);
if (codiva.not_empty())
@ -2007,17 +2022,18 @@ bool TDocumento_mask::numdocrif_search_handler(TMask_field& f, KEY key)
TRelation rel(LF_DOC);
rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec);
TString80 f; f.format("(CODNUM==\"%s\") && (PROVV==\"%s\") && (ANNO==\"%s\")",
(const char *)m.get(F_CODNUM), (const char *)m.get(F_PROVV), (const char *)m.get(F_ANNO));
cur.setfilter(f);
TCursor_sheet sheet(&cur, "CODCF|20->RAGSOC|ANNO|CODNUM|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|DATADOC|CODVAL|G1:TOTDOC",
TString80 filter;
filter.format("(CODNUM==\"%s\") && (PROVV==\"D\") && (ANNO==\"%d\")",
(const char *)m.get(F_CODNUM), m.get_int(F_ANNO));
cur.setfilter(filter);
TToken_string siblings;
TBrowse_sheet sheet(&cur, "CODCF|20->RAGSOC|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|DATADOC|G1:TOTDOC|CODVAL",
"Documento di riferimento",
"Codice|Ragione Sociale@50|Anno|Numeraz|Docum.Rif.|Data@10|Docum.Rif. 1|Docum.Rif. 2|Docum.Rif. 3|Documento|Data\nDocumento@10|Valuta|Totale\nDocumento@18V",
0, 1);
"Codice|Ragione Sociale@50|Docum.Rif.|Data@10|Docum.Rif. 1|Docum.Rif. 2|Docum.Rif. 3|Documento|Data\nDocumento@10|Totale\nDocumento@18V|Valuta",
0, (TEdit_field&)f, siblings);
if (sheet.run() == K_ENTER)
{
const TString16 ndoc = sheet.row(-1).get(9);
const long ndoc = sheet.row(-1).get_long(7);
m.set(F_NDOC, ndoc);
m.stop_run(K_AUTO_ENTER);
}
@ -2038,16 +2054,16 @@ bool TDocumento_mask::ragsoc_search_handler(TMask_field& f, KEY key)
filtrec.put(DOC_ANNO, m.get(F_ANNO));
TRelation rel(LF_DOC);
rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
TSorted_cursor cur(&rel, "TIPOCF|UPPER(20->RAGSOC)|PROVV|ANNO|CODNUM|PROVV|NDOC", "", 1, &filtrec, &filtrec);
TString80 form; form.format("CODNUM==\"%s\"", (const char *)m.get(F_CODNUM));
TString16 filter; filter.format("CODNUM==\"%s\"", (const char*)m.get(F_CODNUM));
cur.setfilter(form, true);
cur.setfilter(filter, true);
TToken_string siblings;
TBrowse_sheet sheet(&cur, "20->RAGSOC|CODCF|NDOC|DATADOC|G1:TOTDOC|CODVAL|20->PAIV",
TR("Ragione Sociale"),
HR("Ragione Sociale@50|Codice|Documento|Data\nDocumento@10|Totale\nDocumento@18V|Valuta|Partita IVA"),
0, (TEdit_field&)f, siblings);
TCursor_sheet sheet(&cur, "20->RAGSOC|CODCF|20->PAIV|ANNO|CODNUM|NDOC|DATADOC|CODVAL|G1:TOTDOC",
"Ragione Sociale",
"Ragione Sociale@50|Codice|Partita IVA|Anno|Numeraz|Documento|Data\nDocumento@10|Valuta|Totale\nDocumento@18V",
0, 1);
TString ragsoc(f.get()); ragsoc.upper();

View File

@ -3,7 +3,7 @@
enum _formule {_somma, _bolli, _bolli_int, _spinc, _prezzo, _importo, _imponibile, _sconto, _iva,
_provv, _qtares, _valdoc, _tipo, _imponibili, _imposte, _totprovv, _pscontot, _ritenuta,
_tipo_ritenuta, _quant, _quantevasa, _componente, _comp_qta };
_tipo_ritenuta, _quant, _quantevasa, _componente, _comp_qta, _nrate};
enum TTipo_calcolo { _nessun_calcolo, _qtaprezzo, _valore, _percentuale, _scontopi};
void row_set_handler( TMask& m, const int field, const int index );

View File

@ -174,6 +174,9 @@ ENDIF
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT FR_CODART CODART
IFDEF(OU_CODART)
OUTPUT OUM_CODART OU_CODART
ENDIF
WARNING "Articolo assente"
IFDEF(CH_CODART)
CHECKTYPE CH_CODART
@ -205,6 +208,9 @@ ENDIF
DISPLAY "Descrizione@50" LF_ANAMAG->DESCR
DISPLAY "Codice@20" CODART
OUTPUT FR_CODART CODART
IFDEF(OU_CODART)
OUTPUT OUM_CODART OU_CODART
ENDIF
WARNING "Articolo assente"
IFDEF(CH_CODALT)
CHECKTYPE CH_CODALT
@ -683,6 +689,9 @@ ENDIF
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@20" CODART
OUTPUT FR_DESCRART DESCR
IFDEF(OU_CODART)
OUTPUT OUM_CODART OU_CODART
ENDIF
ADD RUN ve2 -3
IFDEF(MS_DESCRART)
MESSAGE MS_DESCRART

View File

@ -16,6 +16,7 @@ DEFINE_FIELD(DESMAG)
DEFINE_FIELD(CODDEP)
DEFINE_FIELD(DESDEP)
DEFINE_FIELD(CODART)
// F_OUT(CODART, FR_CODAGG1, USER1)
DEFINE_FIELD(DESCRART)
DEFINE_FIELD(UMQTA)
DEFINE_FIELD(QTA)

View File

@ -24,6 +24,8 @@
!!define DI7_##name e7 ;\
!!define DI8_##name e8 ;\
!!define DI9_##name e9 ;
#define F_OUT(name, mfield, field) !!define OUM_##name mfield ; \
!!define OU_##name field ; \
INCLDEF("verig.h")

View File

@ -248,7 +248,7 @@ int TToas400::separa_sconti(const TString& sconto, TToken_string& sconti4) const
bool TToas400::genera_righedoc(const TString& path, char t)
{
//Crea il file vuoto delle righe documenti
const char* tipor = t == 'B' ? "rbolle" : "rfatt";
const char* tipor = t == 'B' ? "rbolle" : "rfatture";
TFilename trrrig = path; trrrig.add(tipor); trrrig.ext("trr");
TFilename siriorig = path; siriorig.add(tipor); siriorig.ext("dbf");
@ -379,7 +379,7 @@ void TToas400::copia_documento(TRectype& recdest, const TRectype& recsource, con
// tipo -> B=bolle, F=fatture
bool TToas400::genera_documenti(const TString& path, char t)
{
const char* tipo = t == 'B' ? "bolle" : "fatt";
const char* tipo = t == 'B' ? "bolle" : "fatture";
//crea il file delle testate delle bolle utilizzando bolle.trr come tracciato record
TFilename siriodoc = path; siriodoc.add(tipo); siriodoc.ext("dbf");

View File

@ -40,7 +40,6 @@
#define F_DOC8 158
#define F_DOC9 159
#define F_DOC10 160
#define F_PROVVISORIO 162
#define F_APPLICAZIONE 163
#define F_INTERATTIVO 164
#define F_INSERT_MODE 165
@ -50,6 +49,8 @@
#define F_USA_DCONS 170
#define F_KILLDESC 171
#define F_SCARTI 172
#define F_NETTIFICA 173
#define F_RELOAD_PRICES 174
#define H_DOC1 180
#define H_DOC2 181
@ -76,6 +77,8 @@
#define F_RIFERIMENTI_IN_TESTA 321
#define F_IGNORA_DESCRIZIONI 330
#define F_USA_DOCRIF 331
#define F_RIF_DOCIN 332
#define F_COMMESSA 333
#define F_PREZZO_DA_ORDINE 340

View File

@ -493,31 +493,45 @@ END
BOOLEAN F_KILLDESC
BEGIN
PROMPT 45 14 "Non riportare descrizione estesa"
PROMPT 45 13 "Non riportare descrizione estesa"
FIELD B10
END
BOOLEAN F_ORDINA
BEGIN
PROMPT 45 15 "Ordina per codice"
PROMPT 45 14 "Ordina per codice"
FIELD B7
GROUP 1
END
BOOLEAN F_SCARTI
BEGIN
PROMPT 45 16 "Calcolo automatico degli scarti"
FIELD B11
GROUP 1
END
BOOLEAN F_USA_DCONS
BEGIN
PROMPT 45 15 "Usa data di consegna"
PROMPT 45 14 "Usa data di consegna"
FIELD B9
GROUP 2
END
BOOLEAN F_SCARTI
BEGIN
PROMPT 45 15 "Calcolo automatico degli scarti"
FIELD B11
GROUP 1
END
BOOLEAN F_NETTIFICA
BEGIN
PROMPT 45 16 "Nettifica le quantità"
FIELD B12
GROUP 1
END
BOOLEAN F_RELOAD_PRICES
BEGIN
PROMPT 45 17 "Ricarica i prezzi"
FIELD B13
GROUP 1
END
RADIOBUTTON F_PROTOCOLLO 1 38
BEGIN
PROMPT 44 13 "@bProtocollo IVA"
@ -628,6 +642,12 @@ BEGIN
FIELD S1[13,13]
END
BOOLEAN F_COMMESSA
BEGIN
PROMPT 56 3 "Commessa"
FIELD S1[14,14]
END
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 9 "@bModalita' di raggruppamento delle righe"
@ -666,7 +686,7 @@ BEGIN
FIELD B5
END
GROUPBOX DLG_NULL 78 4
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 14 "@bGestione descrizioni"
END
@ -695,9 +715,21 @@ BEGIN
FIELD B8
END
STRING F_RIF_DOCIN 4
BEGIN
PROMPT 2 17 "Numerazione documenti in entrata "
USE %NUM
INPUT CODTAB F_RIF_DOCIN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_RIF_DOCIN CODTAB
CHECKTYPE NORMAL
FIELD S11
END
NUMBER F_COLONNE_CO 1
BEGIN
PROMPT 1 18 "Intestazioni consegna ordini "
PROMPT 1 19 "Intestazioni consegna ordini "
SHEET "Tipo|Colonna 1@25|Colonna 2@25"
ITEM " |Quantita' residua|Quantita' da evadere"
ITEM "1|Quantita' consegnata|Quantita' da fatturare"

View File

@ -122,6 +122,11 @@ PAGE "Tipi documento validi" -1 -1 60 14
MESSAGE CLEAR,F_EMRI
ITEM "4|Scontrino"
MESSAGE ENABLE,F_EMRI
ITEM "5|Conferimento soci"
MESSAGE CLEAR,F_EMRI
ITEM "6|Prestazioni ai soci"
MESSAGE CLEAR,F_EMRI
END
STRING F_TIPODOC1 4

View File

@ -19,7 +19,7 @@
#define PRS_DESCRCONTOA 119
#define PRS_CAMPI 120
#define PRS_QTA 121
#define PRS_SEZIONE 122
#define PRS_CDC_V1 131
#define PRS_CDC_A1 151

View File

@ -42,6 +42,13 @@ BEGIN
MESSAGE COPY,20@
END
LISTBOX PRS_SEZIONE 6
BEGIN
PROMPT 2 3 "Sezione per cooperative "
FIELD S11
ITEM "D|Dare"
ITEM "A|Avere"
END
STRING PRS_CODASSFIS 4
BEGIN

View File

@ -24,6 +24,7 @@
#define SPP_TIPORIT 124
#define SPP_CODTRB 125
#define SPp_CODTRB1 126
#define F_SEZIONE 127
#define SPP_CDC_V1 130
#define SPP_CDC_V2 131

View File

@ -42,6 +42,14 @@ BEGIN
MESSAGE COPY,20@
END
LISTBOX F_SEZIONE 6
BEGIN
PROMPT 2 "Sezione per cooperative "
FIELD S11
ITEM "D|Dare"
ITEM "A|Avere"
END
STRING SPP_CODASSFIS 4
BEGIN
PROMPT 2 4 "Codice IVA "

View File

@ -59,6 +59,8 @@ BEGIN
ITEM "2|Fattura" MESSAGE ENABLE,2@|ENABLE,F_LORDO
ITEM "3|Ordine" MESSAGE CLEAR,2@|ENABLE,F_LORDO
ITEM "4|Scontrino" MESSAGE ENABLE,2@|DISABLE,F_LORDO|"X",F_LORDO
ITEM "5|Conferimento soci" MESSAGE CLEAR,2@
ITEM "6|Prestazioni ai soci" MESSAGE CLEAR,2@
END
STRING F_PROFILO 8