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:
angelo 1996-06-27 09:37:32 +00:00
parent 7b0f8834b3
commit 0fb4849349

View File

@ -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...