Prime modifiche per far funzionare la stampa documenti.
git-svn-id: svn://10.65.10.50/trunk@3099 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
7b0f8834b3
commit
0fb4849349
114
ve/ve1100.cpp
114
ve/ve1100.cpp
@ -51,11 +51,11 @@ public:
|
||||
|
||||
|
||||
TDocVen_Form::TDocVen_Form(const char* name, TRelation &rel): TForm(), _firmrel(rel) {
|
||||
read(name);
|
||||
_total_prog= new TPiede_documento;
|
||||
_riga= new TRiga;
|
||||
_cliente= new TCliFor;
|
||||
_cli_loaded= FALSE;
|
||||
read(name);
|
||||
_total_prog= new TPiede_documento;
|
||||
_riga= new TRiga;
|
||||
_cliente= new TCliFor;
|
||||
_cli_loaded= FALSE;
|
||||
}
|
||||
|
||||
TDocVen_Form::~TDocVen_Form() {
|
||||
@ -75,8 +75,8 @@ word TDocVen_Form::set_body(word p, bool u) {
|
||||
}
|
||||
|
||||
void TDocVen_Form::extended_parse_general(TScanner &scanner) {
|
||||
if (scanner.popkey() == "MO") _module= scanner.string(); // se viene riconosciuto il token per l'impostazione del modulo legge il codice...
|
||||
else scanner.push(); // ...altrimenti rimette il token nella coda dello scanner
|
||||
if (scanner.popkey() == "MO") _module= scanner.string(); // se viene riconosciuto il token per l'impostazione del modulo legge il codice...
|
||||
else scanner.push(); // ...altrimenti rimette il token nella coda dello scanner
|
||||
}
|
||||
|
||||
bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
|
||||
@ -146,10 +146,12 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
|
||||
for (j=0; j<itms; j++) { // per ogni campo della sezione specificata (o sottointesa)...
|
||||
TForm_item &fi= section(sec, pt).field(j);
|
||||
fi.set(dat); // ...il contenuto viene settato al valore del file
|
||||
fi.put_paragraph(dat);
|
||||
}
|
||||
} else {
|
||||
TForm_item &fi= cf.find_field(fld);
|
||||
fi.set(dat);
|
||||
fi.put_paragraph(dat);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -181,29 +183,29 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
|
||||
} // fine _TABLEREAD
|
||||
|
||||
if (code== "_ALIGN") {
|
||||
// allineamento della posizione di un campo rispetto ad un altro
|
||||
// sintassi: _ALIGN,<campo form>[,<allineamento>][,<allineamento>...]
|
||||
// dove: <campo form> è il campo della form (preceduto da '#') da cui prendere l'allineamento
|
||||
// <allineamento> è uno dei seguenti valori:
|
||||
// TOP allinea sulla riga d'inizio
|
||||
// MIDDLE allinea al centro (effettivo)
|
||||
// BOTTOM allinea sulla riga di fine (effettiva, non preimpostata)
|
||||
// LEFT allinea sulla colonna d'inizio
|
||||
// RIGHT allinea sulla colonna di fine
|
||||
TString in(s.get());
|
||||
// allineamento della posizione di un campo rispetto ad un altro
|
||||
// sintassi: _ALIGN,<campo form>[,<allineamento>][,<allineamento>...]
|
||||
// dove: <campo form> è il campo della form (preceduto da '#') da cui prendere l'allineamento
|
||||
// <allineamento> è uno dei seguenti valori:
|
||||
// TOP allinea sulla riga d'inizio
|
||||
// MIDDLE allinea al centro (effettivo)
|
||||
// BOTTOM allinea sulla riga di fine (effettiva, non preimpostata)
|
||||
// LEFT allinea sulla colonna d'inizio
|
||||
// RIGHT allinea sulla colonna di fine
|
||||
TString in(s.get());
|
||||
if (in[0]== '#') in.ltrim(1);
|
||||
TForm_item &fi= cf.find_field(in);
|
||||
int i= 2;
|
||||
while (i<s.items()) {
|
||||
TString align(s.get());
|
||||
if (align[0]=='!') align.ltrim(1);
|
||||
if (align== "TOP") cf.y()= fi.y();
|
||||
if (align== "MIDDLE") cf.y()= fi.y()+ fi.effective_height()/2;
|
||||
if (align== "BOTTOM") cf.y()= fi.y()+ fi.effective_height()-1;
|
||||
if (align== "LEFT") cf.set_x(fi.x());
|
||||
if (align== "RIGHT") cf.set_x(fi.x()+ fi.width());
|
||||
i++;
|
||||
}
|
||||
TString align(s.get());
|
||||
if (align[0]=='!') align.ltrim(1);
|
||||
if (align== "TOP") cf.y()= fi.y();
|
||||
if (align== "MIDDLE") cf.y()= fi.y()+ fi.effective_height()/2;
|
||||
if (align== "BOTTOM") cf.y()= fi.y()+ fi.effective_height()-1;
|
||||
if (align== "LEFT") cf.set_x(fi.x());
|
||||
if (align== "RIGHT") cf.set_x(fi.x()+ fi.width());
|
||||
i++;
|
||||
}
|
||||
return (TRUE);
|
||||
} // fine _ALIGN
|
||||
|
||||
@ -266,12 +268,12 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
|
||||
}
|
||||
} else {
|
||||
TFieldref fref(s.get(), 0);
|
||||
cf.set(fref.read(&_firmrel));
|
||||
cf.set(fref.read(_firmrel));
|
||||
}
|
||||
return (TRUE);
|
||||
} // fine _DITTA
|
||||
|
||||
if (code== "_CIFRELETTERE") {
|
||||
if (code== "_CIFRELET") {
|
||||
// conversione di un reale da cifre a lettere
|
||||
// sintassi: _CIFRELETTERE[,<campo form>]
|
||||
// dove: <campo form> è il campo della form (preceduto da '#') da cui prendere il valore, se non è specificato è sottointeso il campo corrente
|
||||
@ -393,7 +395,7 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
|
||||
}
|
||||
} else {
|
||||
TFieldref fref(s.get(), 0);
|
||||
cf.set(fref.read((TRelation *)_cliente)); // l'oggetto cliente è figlio della TRelation, quindi lo passo al fieldref semplicemente con un typecast
|
||||
cf.set(fref.read(*_cliente)); // l'oggetto cliente è figlio della TRelation, quindi lo passo al fieldref semplicemente con un typecast
|
||||
}
|
||||
return (TRUE);
|
||||
} // fine _CLIENTE
|
||||
@ -472,6 +474,8 @@ class TStampa_Doc_Vendita: public TApplication {
|
||||
TString _provv; // stampa provvisioria
|
||||
int _anno; // anno della documentazione
|
||||
long _dalnum, _alnum; // estremi di numerazione dei documenti
|
||||
TDate _dadata, _adata; // estremi di data dei documenti
|
||||
bool _order_by_num; // flag che indica se e' stato selezionato l'ordine principale per numero documento
|
||||
bool _interattivo; // flag che indica se il prog. funziona in interattivo o in batch
|
||||
bool _definitiva; // flag che indica se la stampa è definitiva o no
|
||||
TRelation *_firmrel; // puntatore alla relazione che gestisce i dati della ditta corrente
|
||||
@ -484,9 +488,43 @@ protected:
|
||||
virtual void on_firm_change(void);
|
||||
virtual behaviour on_module_change(const TString &, TString &); // funzione chiamata ad ogni cambio modulo durante la stampa
|
||||
virtual bool query_final_print(void); // funzione chiamata all'inizializzazione per sapere se la stampa è definitiva
|
||||
static bool date2num_handler(TMask_field& f, KEY key);
|
||||
};
|
||||
|
||||
|
||||
bool TStampa_Doc_Vendita::date2num_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
if (key == K_TAB && f.focusdirty())
|
||||
{
|
||||
short dlg = f.dlg();
|
||||
TLocalisamfile doc(LF_DOC);
|
||||
doc.setkey(3);
|
||||
TString codnum1(m.get(F_CODNUM)),codnum2;
|
||||
TString anno1(m.get(F_ANNO)),anno2;
|
||||
TString provv1(m.get(F_PROVV)),provv2;
|
||||
TDate data1(m.get_date(dlg)),data2;
|
||||
long numdoc;
|
||||
doc.zero();
|
||||
doc.put("CODNUM", codnum1);
|
||||
doc.put("ANNO", anno1);
|
||||
doc.put("PROVV", provv1);
|
||||
doc.put("DATADOC", data1);
|
||||
if (doc.read(_isgteq) == NOERR)
|
||||
{
|
||||
codnum2 = doc.get("CODNUM");
|
||||
anno2 = doc.get("ANNO");
|
||||
provv2 = doc.get("PROVV");
|
||||
data2 = doc.get_date("DATADOC");
|
||||
if (codnum1 == codnum2 && anno1 == anno2 && provv1 == provv2 && data1 == data2)
|
||||
{
|
||||
numdoc = doc.get_long("NDOC");
|
||||
m.set(dlg == F_DA_DATADOC ? F_DA_NDOC : F_A_NDOC, numdoc);
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TStampa_Doc_Vendita::create() {
|
||||
TApplication::create();
|
||||
@ -523,12 +561,23 @@ void TStampa_Doc_Vendita::on_firm_change() {
|
||||
|
||||
int TStampa_Doc_Vendita::select() {
|
||||
TMask m("ve1100a");
|
||||
TString wdate;
|
||||
m.set_handler(F_DA_DATADOC, date2num_handler);
|
||||
m.set_handler(F_A_DATADOC, date2num_handler);
|
||||
if (m.run() == K_ENTER) {
|
||||
_codnum= m.get(F_CODNUM); // lettura dei dati dalla maschera
|
||||
_anno= m.get_int(F_ANNO);
|
||||
_provv= m.get(F_PROVV);
|
||||
_dalnum= m.get_long(F_DA_NDOC);
|
||||
_alnum= m.get_long(F_A_NDOC);
|
||||
if (_alnum == 0) _alnum = 9999999L;
|
||||
wdate = m.get(F_DA_DATADOC);
|
||||
if (wdate.not_empty()) _dadata = wdate;
|
||||
else _dadata = botime;
|
||||
wdate = m.get(F_A_DATADOC);
|
||||
if (wdate.not_empty()) _adata = wdate;
|
||||
else _adata = eotime;
|
||||
_order_by_num = m.get(F_DATA_O_NUM) == "N";
|
||||
return 1;
|
||||
} else return 0; // 0 indica che non si è usciti con "Conferma" dalla maschera
|
||||
}
|
||||
@ -547,12 +596,14 @@ void TStampa_Doc_Vendita::print() {
|
||||
TTable tip("%TIP"); // istanzia la tabella dei tipi di documento per i profili
|
||||
TRelation rel(LF_DOC); // istanzia la relazione sul file principale
|
||||
TCursor cur(&rel); // crea il cursore principale dalla relazione
|
||||
if (!_order_by_num) cur.setkey(3); // setta l'ordine per data.
|
||||
TLocalisamfile &doc= cur.file(); // prende il riferimento al file principale
|
||||
doc.zero(); // vuota il record del file
|
||||
doc.put("CODNUM", _codnum); // compone la chiave per il record di inizio cursore
|
||||
doc.put("ANNO", _anno);
|
||||
doc.put("PROVV", _provv);
|
||||
doc.put("NDOC", _dalnum);
|
||||
if (!_order_by_num) doc.put("DATADOC", _dadata);
|
||||
doc.read(); // posiziona il file sul record
|
||||
TRectype darec= doc.curr(); // copia il record di inizio cursore
|
||||
doc.zero(); // vuota il record del file
|
||||
@ -560,6 +611,7 @@ void TStampa_Doc_Vendita::print() {
|
||||
doc.put("ANNO", _anno);
|
||||
doc.put("PROVV", _provv);
|
||||
doc.put("NDOC", _alnum);
|
||||
if (!_order_by_num) doc.put("DATADOC", _adata);
|
||||
doc.read(); // posiziona il file sul record
|
||||
TRectype arec= doc.curr(); // copia il record di fine cursore
|
||||
cur.setregion(darec, arec); // imposta il filtro sul cursore di stampa (nell'ordine giusto :-)
|
||||
@ -570,6 +622,10 @@ void TStampa_Doc_Vendita::print() {
|
||||
nomeform= tip.get("S5"); // legge il nome del form di stampa
|
||||
profilo= tip.get("S4"); // legge il nome del profilo di configurazione
|
||||
profilo.ext("ini"); // aggiunge l'estensione al nome del file del profilo
|
||||
if (profilo.empty() || nomeform.empty()) {
|
||||
error_box("Nome profilo o form di stampa non valido nella tabella TIP");
|
||||
break;
|
||||
}
|
||||
TConfig config(profilo, "STAMPA"); // apre il file di configurazione del profilo
|
||||
TToken_string stati((const char*)config.get("STATIVALIDI"), ','); // legge gli stati validi di questo tipo di documento
|
||||
if (_definitiva && (stati.get_pos(doc.get("STATO"))== -1)) { // se lo stato del doc. corrente non è valido...
|
||||
|
Loading…
x
Reference in New Issue
Block a user