Patch level : 10.0 patch 380

Files correlati     : lv2, lv2400a.msk, lvmenu
Ricompilazione Demo : [ ]
Commento            :
Corretta la generazione automatica dei documenti in base algi accordi previsti nell'ultima riunione [prima versione; ulteriori test sono in corso]


git-svn-id: svn://10.65.10.50/trunk@19126 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-07-22 14:57:08 +00:00
parent 3587bb603a
commit 0c6f9681fe
4 changed files with 167 additions and 112 deletions

View File

@ -39,6 +39,7 @@ class TGenera_documenti_app : public TSkeleton_application
TAssoc_array _quantita; TAssoc_array _quantita;
TAssoc_array _quantita_ritirata; TAssoc_array _quantita_ritirata;
TConfig* _configlv; TConfig* _configlv;
char _buono;
private: private:
//Metodi per la generazione dei documenti //Metodi per la generazione dei documenti
@ -49,11 +50,11 @@ private:
bool numerazione_drit(const int cod, TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const; bool numerazione_drit(const int cod, TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const;
bool numerazione_dant(const int cod, TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const; bool numerazione_dant(const int cod, TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const;
//Metodi per l'eliminazione dei documenti //Metodi per l'eliminazione dei documenti
void cambia_stato(const long codcli, const long codind, const char ritoant); void cambia_stato(const char ritoant, const TString_array& docarr);
void elimina_bolle(const long codcli, const long codind); void elimina_bolle(const long codcli, const long codind, TString_array& docarr);
//Metodi per la scansione dei documenti //Metodi per la scansione dei documenti
void scansione_ritiri_anticipi(const long codcli, const long codind, const char ritoant); void scansione_ritiri_anticipi(const long codcli, const long codind, const char ritoant, const TDocumento& docgen);
void scansione_consegne(const long codcli, const long codind); void scansione_consegne(const long codcli, const long codind, const TDocumento& docgen);
//Metodo per il calcolo delle quantità in bolla //Metodo per il calcolo delle quantità in bolla
void calcolo_quantita(const TDocumento& doc, const char ritoant); void calcolo_quantita(const TDocumento& doc, const char ritoant);
//Metodi aggiornare il conguaglio sui contratti //Metodi aggiornare il conguaglio sui contratti
@ -78,6 +79,7 @@ bool TGenera_documenti_app::create()
{ {
_msk = new TGenera_documenti_mask("lv2400a"); _msk = new TGenera_documenti_mask("lv2400a");
_configlv = new TConfig(CONFIG_DITTA,"lv"); _configlv = new TConfig(CONFIG_DITTA,"lv");
_buono = *TApplication::argv(2);
return TSkeleton_application::create(); return TSkeleton_application::create();
} }
@ -130,15 +132,11 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan)
//elimina eventuali documenti di consegna che sono ancora in stato iniziale //elimina eventuali documenti di consegna che sono ancora in stato iniziale
//...e riporta in stato iniziale i documenti di ritiro e di anticipo che concorrono //...e riporta in stato iniziale i documenti di ritiro e di anticipo che concorrono
//...a calcolare le quantità da riportare sulla bolla //...a calcolare le quantità da riportare sulla bolla
cambia_stato(codcli, codind, 'R');
cambia_stato(codcli, codind, 'A');
elimina_bolle(codcli, codind);
//calcola tutte le quantità riportate sui documenti di ritiro, sui documenti di anticipo e sulle bolle di consegna TString_array docarr; //array che conterrà i riferimenti ai documenti da cancellare
//...eventualmente modificate a mano elimina_bolle(codcli, codind, docarr);
scansione_ritiri_anticipi(codcli,codind,'R'); cambia_stato('R', docarr);
scansione_ritiri_anticipi(codcli,codind,'A'); cambia_stato('A', docarr);
scansione_consegne(codcli,codind);
//variabili che conterranno i parametri dei documenti che devo generare... //variabili che conterranno i parametri dei documenti che devo generare...
//...settati dalla funzione numerazione_ddt() //...settati dalla funzione numerazione_ddt()
@ -153,7 +151,18 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan)
//creo il documento corretto riempiendo i campi che già conosco //creo il documento corretto riempiendo i campi che già conosco
TDocumento doc('D',anno,codnum,0); TDocumento doc('D',anno,codnum,0);
doc.put(DOC_TIPODOC, tpdoc);
//calcola tutte le quantità riportate sui documenti di ritiro, sui documenti di anticipo e sulle bolle di consegna
//...eventualmente modificate a mano
scansione_ritiri_anticipi(codcli,codind,'R', doc);
scansione_ritiri_anticipi(codcli,codind,'A', doc);
scansione_consegne(codcli, codind, doc);
//se non trovo quale documento generare, evito il resto dell'elaborazione
if (!numerazione_ddt(codnum, tpdoc, statoi, statof))
return NOERR;
doc.put(DOC_STATO, statoi); doc.put(DOC_STATO, statoi);
doc.put(DOC_TIPODOC, tpdoc); doc.put(DOC_TIPODOC, tpdoc);
doc.put(DOC_DATADOC, datadoc); doc.put(DOC_DATADOC, datadoc);
@ -179,7 +188,9 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan)
crea_riga(rcont, modpas, true, doc);*/ crea_riga(rcont, modpas, true, doc);*/
} }
int err = doc.write(); int err = 1;
if (doc.rows() > 0)
err = doc.write();
//scrivo sul planning il riferimento alla bolla che lo accompagna //scrivo sul planning il riferimento alla bolla che lo accompagna
if (err == NOERR) if (err == NOERR)
@ -195,12 +206,20 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan)
} }
//CREA_RIGA: questa funzione crea una riga merce per una bolla di consegna //CREA_RIGA: questa funzione crea una riga merce per una bolla di consegna
void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, const int tplis, const bool tmp, const bool prinbo,TDocumento& doc) void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc)
{ {
const int perarr = _configlv->get_int("Perarr"); const int perarr = _configlv->get_int("Perarr");
//creo la nuova riga //creo la nuova riga
TRiga_documento& rdoc = doc.new_row("21"); TString4 tiporiga;
switch (_buono)
{
case 'P': tiporiga = "21"; break;
case 'C': tiporiga = "21"; break;
default: break;
}
TRiga_documento& rdoc = doc.new_row(tiporiga);
const long codcli = doc.get_long(DOC_CODCF); const long codcli = doc.get_long(DOC_CODCF);
const long codcont = doc.get_long(DOC_CODCONT); const long codcont = doc.get_long(DOC_CODCONT);
@ -287,8 +306,27 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas,
//NUMERAZIONE_DDT: questa funzione cerca quali sono i codnum e i tpdoc che devo generare //NUMERAZIONE_DDT: questa funzione cerca quali sono i codnum e i tpdoc che devo generare
bool TGenera_documenti_app::numerazione_ddt(TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const bool TGenera_documenti_app::numerazione_ddt(TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const
{ {
codnum = _configlv->get("NUM_GEN"); //questo switc mi permette di generare con lo stesso programma sia i buoni di prelievo (P)
tpdoc = _configlv->get("TIPODOC_GEN"); //che i buoni di consegna (C); la variabile globale _buono viene inizializzata con il valore
//passato come parametro al programma al momento della chiamata da menù
switch (_buono)
{
case 'P':
{
codnum = _configlv->get("NUM_PRE(0)");
tpdoc = _configlv->get("TIPODOC_PRE(0)");
}
break;
case 'C':
{
codnum = _configlv->get("NUM_GEN");
tpdoc = _configlv->get("TIPODOC_GEN");
}
break;
default: break;
}
//instanzio una cache sulla tabella delle righe contratti (cerco lo stato iniziale) //instanzio una cache sulla tabella delle righe contratti (cerco lo stato iniziale)
statoi = cache().get("%TIP",tpdoc,"S2").left(1); statoi = cache().get("%TIP",tpdoc,"S2").left(1);
statof = cache().get("%TIP",tpdoc,"S2").mid(2,1); statof = cache().get("%TIP",tpdoc,"S2").mid(2,1);
@ -326,15 +364,8 @@ bool TGenera_documenti_app::numerazione_dant(const int cod, TString& codnum, TSt
//CAMBIA_STATO: questa funzione cerca tutte le bolle di ritiro e anticipo relative a un certo cliente... //CAMBIA_STATO: questa funzione cerca tutte le bolle di ritiro e anticipo relative a un certo cliente...
//in un certo intervallo di date, e gli cambia stato //in un certo intervallo di date, e gli cambia stato
void TGenera_documenti_app::cambia_stato(const long codcli, const long codind, const char ritoant) void TGenera_documenti_app::cambia_stato(const char ritoant, const TString_array& docarr)
{ {
//recupero dalla maschera i campi di interesse
const TDate dadatabolla = _msk->get_date(F_DADTBOLLE);
const TDate adatabolla = _msk->get_date(F_ADTBOLLE);
const long daanno = dadatabolla.year();
const long aanno = adatabolla.year();
//per ogni paragrafo scritto in ditta.ini... //per ogni paragrafo scritto in ditta.ini...
//recupero numerazione, tipo documento e stato tramite la funzione apposita //recupero numerazione, tipo documento e stato tramite la funzione apposita
for (int i = 0; ; i++) for (int i = 0; ; i++)
@ -362,39 +393,31 @@ void TGenera_documenti_app::cambia_stato(const long codcli, const long codind, c
if (!err) if (!err)
break; break;
//instanzio un recordset che contiene tutti i documenti di interesse FOR_EACH_ARRAY_ROW(docarr, r, row);
TISAM_recordset docritiri ("USE DOC KEY 2 SELECT (STATO=#STATO)&&(TIPODOC=#TIPODOC)&&(CODINDSP=#CODINDSP)\nFROM TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#DAANNO DATADOC=#DADATABOLLA CODNUM=#CODNUM\nTO TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#AANNO DATADOC=#ADATABOLLA CODNUM=#CODNUM");
docritiri.set_var("#STATO",TVariant(statof)); //lo stato va preso dallo sheet
docritiri.set_var("#TIPODOC",TVariant(tpdoc));
docritiri.set_var("#CODINDSP",codind);
docritiri.set_var("#TIPOCF","C");
docritiri.set_var("#CODCF",codcli);
docritiri.set_var("#PROVV","D");
docritiri.set_var("#DAANNO",daanno);
docritiri.set_var("#DADATABOLLA",dadatabolla);
docritiri.set_var("#CODNUM",TVariant(codnum));
docritiri.set_var("#AANNO",aanno);
docritiri.set_var("#ADATABOLLA",adatabolla);
//per ogni documento che trovo, cambio stato al documento
for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next())
{ {
TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento TToken_string(row);
doc.put(DOC_STATO,statoi); //stato iniziale
TString str;
str << "USE DOC\n"
<< "FROM PROVV=" << row.get(0) << " ANNO=" << row.get(1) << " CODNUM=" << row.get(2) << " NDOC=" << row.get(3) << "\n"
<< "TO PROVV=" << row.get(0) << " ANNO=" << row.get(1) << " CODNUM=" << row.get(2) << " NDOC=" << row.get(3);
TISAM_recordset docritiro (str);
if (!docritiro.empty())
{
TDocumento doc(docritiro.cursor()->curr()); //instanzio il documento
doc.put(DOC_STATO, statoi);
}
} }
} }
return;
} }
//ELIMINA_BOLLE: questa funzione cerca tutte le bolle di consegna relative a un certo cliente ancora... //ELIMINA_BOLLE: questa funzione cerca tutte le bolle di consegna relative a un certo cliente ancora...
//nello stato iniziale in un certo intervallo di date e le elimina //nello stato iniziale in un certo intervallo di date e le elimina
void TGenera_documenti_app::elimina_bolle(const long codcli, const long codind) void TGenera_documenti_app::elimina_bolle(const long codcli, const long codind, TString_array& docarr)
{ {
//recupero dalla maschera i campi di interesse //recupero dalla maschera i campi di interesse
const TDate dadatabolla = _msk->get_date(F_DADTBOLLE); const TDate adatabolla = _msk->get_date(F_DTCONS);
const TDate adatabolla = _msk->get_date(F_ADTBOLLE);
const long daanno = dadatabolla.year();
const long aanno = adatabolla.year(); const long aanno = adatabolla.year();
//recupero numerazione, tipo documento e stato tramite la funzione apposita //recupero numerazione, tipo documento e stato tramite la funzione apposita
@ -408,15 +431,13 @@ void TGenera_documenti_app::elimina_bolle(const long codcli, const long codind)
return; return;
//instanzio un recordset che contiene tutti i documenti di interesse //instanzio un recordset che contiene tutti i documenti di interesse
TISAM_recordset docritiri ("USE DOC KEY 2 SELECT (STATO=#STATO)&&(TIPODOC=#TIPODOC)&&(CODINDSP=#CODINDSP)\nFROM TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#DAANNO DATADOC=#DADATABOLLA CODNUM=#CODNUM\nTO TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#AANNO DATADOC=#ADATABOLLA CODNUM=#CODNUM"); TISAM_recordset docritiri ("USE DOC KEY 2 SELECT (STATO=#STATO)&&(TIPODOC=#TIPODOC)&&(CODINDSP=#CODINDSP)\nFROM TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV CODNUM=#CODNUM\nTO TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#AANNO DATADOC=#ADATABOLLA CODNUM=#CODNUM");
docritiri.set_var("#STATO",TVariant(statof)); docritiri.set_var("#STATO",TVariant(statof));
docritiri.set_var("#TIPODOC",TVariant(tpdoc)); docritiri.set_var("#TIPODOC",TVariant(tpdoc));
docritiri.set_var("#CODINDSP",codind); docritiri.set_var("#CODINDSP",codind);
docritiri.set_var("#TIPOCF","C"); docritiri.set_var("#TIPOCF","C");
docritiri.set_var("#CODCF",codcli); docritiri.set_var("#CODCF",codcli);
docritiri.set_var("#PROVV","D"); docritiri.set_var("#PROVV","D");
docritiri.set_var("#DAANNO",daanno);
docritiri.set_var("#DADATABOLLA",dadatabolla);
docritiri.set_var("#CODNUM",TVariant(codnum)); docritiri.set_var("#CODNUM",TVariant(codnum));
docritiri.set_var("#AANNO",aanno); docritiri.set_var("#AANNO",aanno);
docritiri.set_var("#ADATABOLLA",adatabolla); docritiri.set_var("#ADATABOLLA",adatabolla);
@ -425,6 +446,15 @@ void TGenera_documenti_app::elimina_bolle(const long codcli, const long codind)
for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next()) for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next())
{ {
TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento
//salvo la chiave del documento che sto cancellando
TToken_string key;
key.add(doc.get(DOC_PROVV));
key.add(doc.get(DOC_ANNO));
key.add(doc.get(DOC_CODNUM));
key.add(doc.get(DOC_NDOC));
docarr.add(key);
doc.remove(); //stato di bloccato doc.remove(); //stato di bloccato
} }
return; return;
@ -435,14 +465,11 @@ void TGenera_documenti_app::elimina_bolle(const long codcli, const long codind)
////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////
//SCANSIONE_RITIRI_ANTICIPI: questa funzione cerca tutte le bolle di ritiro relative a un certo cliente non ancora evase... //SCANSIONE_RITIRI_ANTICIPI: questa funzione cerca tutte le bolle di ritiro relative a un certo cliente non ancora evase...
//in un certo intervallo di date, e, dopo l'elaborazione, gli cambia stato //e, dopo l'elaborazione, gli cambia stato
void TGenera_documenti_app::scansione_ritiri_anticipi(const long codcli, const long codind, const char ritoant) void TGenera_documenti_app::scansione_ritiri_anticipi(const long codcli, const long codind, const char ritoant, const TDocumento& docgen)
{ {
//recupero dalla maschera i campi di interesse //recupero dalla maschera i campi di interesse
const TDate dadatabolla = _msk->get_date(F_DADTBOLLE); const TDate adatabolla = _msk->get_date(F_DTCONS);
const TDate adatabolla = _msk->get_date(F_ADTBOLLE);
const long daanno = dadatabolla.year();
const long aanno = adatabolla.year(); const long aanno = adatabolla.year();
//per ogni paragrafo scritto in ditta.ini... //per ogni paragrafo scritto in ditta.ini...
@ -473,16 +500,13 @@ void TGenera_documenti_app::scansione_ritiri_anticipi(const long codcli, const l
break; break;
//instanzio un recordset che contiene tutti i documenti di interesse //instanzio un recordset che contiene tutti i documenti di interesse
TISAM_recordset docritiri ("USE DOC KEY 2 SELECT (STATO!=#STATO)&&(TIPODOC=#TIPODOC)&&(CODINDSP=#CODINDSP)\nFROM TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#DAANNO DATADOC=#DADATABOLLA CODNUM=#CODNUM\nTO TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#AANNO DATADOC=#ADATABOLLA CODNUM=#CODNUM"); TISAM_recordset docritiri ("USE DOC KEY 2 SELECT (STATO==#STATO)&&(TIPODOC==#TIPODOC)&&(CODNUM==#CODNUM)\nFROM TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV \nTO TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#AANNO DATADOC=#ADATABOLLA");
docritiri.set_var("#STATO",TVariant(statof)); //lo stato va preso dallo sheet docritiri.set_var("#STATO",TVariant(statoi)); //lo stato va preso dallo sheet
docritiri.set_var("#TIPODOC",TVariant(tpdoc)); docritiri.set_var("#TIPODOC",TVariant(tpdoc));
docritiri.set_var("#CODINDSP",codind); docritiri.set_var("#CODNUM",TVariant(codnum));
docritiri.set_var("#TIPOCF","C"); docritiri.set_var("#TIPOCF","C");
docritiri.set_var("#CODCF",codcli); docritiri.set_var("#CODCF",codcli);
docritiri.set_var("#PROVV","D"); docritiri.set_var("#PROVV","D");
docritiri.set_var("#DAANNO",daanno);
docritiri.set_var("#DADATABOLLA",dadatabolla);
docritiri.set_var("#CODNUM",TVariant(codnum));
docritiri.set_var("#AANNO",aanno); docritiri.set_var("#AANNO",aanno);
docritiri.set_var("#ADATABOLLA",adatabolla); docritiri.set_var("#ADATABOLLA",adatabolla);
@ -491,7 +515,12 @@ void TGenera_documenti_app::scansione_ritiri_anticipi(const long codcli, const l
{ {
TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento
calcolo_quantita(doc,ritoant); calcolo_quantita(doc,ritoant);
doc.put(DOC_STATO,statof); //stato di elaborato, preso dallo sheet doc.put(DOC_STATO,statof); //stato di elaborato, preso dallo sheet
//salvo i riferimenti del documento che sto andando a generare
doc.put("PROVVDG", docgen.get(DOC_PROVV));
doc.put("ANNODG", docgen.get(DOC_ANNO));
doc.put("CODNUMDG", docgen.get(DOC_CODNUM));
doc.put("NDCODG", docgen.get(DOC_NDOC));
} }
} }
return; return;
@ -499,13 +528,10 @@ void TGenera_documenti_app::scansione_ritiri_anticipi(const long codcli, const l
//SCANSIONE_CONSEGNE: questa funzione cerca tutte le bolle di consegna relative a un certo cliente ancora... //SCANSIONE_CONSEGNE: questa funzione cerca tutte le bolle di consegna relative a un certo cliente ancora...
//nello stato iniziale in un certo intervallo di date //nello stato iniziale in un certo intervallo di date
void TGenera_documenti_app::scansione_consegne(const long codcli, const long codind) void TGenera_documenti_app::scansione_consegne(const long codcli, const long codind, const TDocumento& docgen)
{ {
//recupero dalla maschera i campi di interesse //recupero dalla maschera i campi di interesse
const TDate dadatabolla = _msk->get_date(F_DADTBOLLE); const TDate adatabolla = _msk->get_date(F_DTCONS);
const TDate adatabolla = _msk->get_date(F_ADTBOLLE);
const long daanno = dadatabolla.year();
const long aanno = adatabolla.year(); const long aanno = adatabolla.year();
//recupero numerazione, tipo documento e stato tramite la funzione apposita //recupero numerazione, tipo documento e stato tramite la funzione apposita
@ -519,16 +545,14 @@ void TGenera_documenti_app::scansione_consegne(const long codcli, const long cod
return; return;
//instanzio un recordset che contiene tutti i documenti di interesse //instanzio un recordset che contiene tutti i documenti di interesse
TISAM_recordset docritiri ("USE DOC KEY 2 SELECT (STATO!=#STATO)&&(TIPODOC=#TIPODOC)&&(CODINDSP=#CODINDSP)\nFROM TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#DAANNO DATADOC=#DADATABOLLA CODNUM=#CODNUM\nTO TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#AANNO DATADOC=#ADATABOLLA CODNUM=#CODNUM"); TISAM_recordset docritiri ("USE DOC KEY 2 SELECT (STATO==#STATO)&&(TIPODOC==#TIPODOC)&&(CODNUM==#CODNUM)\nFROM TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV \nTO TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#AANNO DATADOC=#ADATABOLLA");
docritiri.set_var("#STATO",TVariant(statof)); docritiri.set_var("#STATO",TVariant(statof));
docritiri.set_var("#TIPODOC",TVariant(tpdoc)); docritiri.set_var("#TIPODOC",TVariant(tpdoc));
docritiri.set_var("#CODINDSP",codind); docritiri.set_var("#CODINDSP",codind);
docritiri.set_var("#CODNUM",TVariant(codnum));
docritiri.set_var("#TIPOCF","C"); docritiri.set_var("#TIPOCF","C");
docritiri.set_var("#CODCF",codcli); docritiri.set_var("#CODCF",codcli);
docritiri.set_var("#PROVV","D"); docritiri.set_var("#PROVV","D");
docritiri.set_var("#DAANNO",daanno);
docritiri.set_var("#DADATABOLLA",dadatabolla);
docritiri.set_var("#CODNUM",TVariant(codnum));
docritiri.set_var("#AANNO",aanno); docritiri.set_var("#AANNO",aanno);
docritiri.set_var("#ADATABOLLA",adatabolla); docritiri.set_var("#ADATABOLLA",adatabolla);
@ -538,6 +562,11 @@ void TGenera_documenti_app::scansione_consegne(const long codcli, const long cod
TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento
calcolo_quantita(doc,'B'); calcolo_quantita(doc,'B');
doc.put(DOC_STATO,statof); //stato di bloccato doc.put(DOC_STATO,statof); //stato di bloccato
//salvo i riferimenti del documento che sto andando a generare
doc.put("PROVVDG", docgen.get(DOC_PROVV));
doc.put("ANNODG", docgen.get(DOC_ANNO));
doc.put("CODNUMDG", docgen.get(DOC_CODNUM));
doc.put("NDCODG", docgen.get(DOC_NDOC));
} }
return; return;
} }
@ -558,7 +587,7 @@ void TGenera_documenti_app::calcolo_quantita(const TDocumento& doc, const char r
const TRiga_documento& rdoc = doc[i]; const TRiga_documento& rdoc = doc[i];
//estraggo i dati di interesse //estraggo i dati di interesse
const TString80 codart = rdoc.get(RDOC_CODARTMAG); const TString80 codart = rdoc.get(RDOC_CODARTMAG);
const real qtardoc = rdoc.get_real(RDOC_QTA); const real qtardoc = rdoc.get_real(RDOC_QTAGG1);
//se è una riga che riguarda un articolo e se la quantità su questa riga non è nulla, allora la elaboro //se è una riga che riguarda un articolo e se la quantità su questa riga non è nulla, allora la elaboro
if (codart.full() && !qtardoc.is_zero()) if (codart.full() && !qtardoc.is_zero())
{ {

View File

@ -2,9 +2,10 @@
// definizione campi per maschera lv2400a // definizione campi per maschera lv2400a
#define F_DTCONS 103 #define F_DTCONS 103
#define F_DTDOC 104 #define F_DTDOC 104
#define F_DADTBOLLE 105 #define F_TPGEN 105
#define F_ADTBOLLE 106 #define F_CODITI 106
#define F_CODITI 107 #define F_DESCRITI 107
#define F_DESCRITI 108 #define F_CODAUT 108
#define F_CODCF 109 #define F_DESCRAUT 109
#define F_RAGSOCCLI 110 #define F_CODCF 110
#define F_RAGSOCCLI 111

View File

@ -4,43 +4,36 @@ TOOLBAR "" 0 0 0 2
#include <elabar.h> #include <elabar.h>
ENDPAGE ENDPAGE
PAGE "Generazione giri" -1 -1 76 20 PAGE "Generazione documenti" -1 -1 76 20
GROUPBOX DLG_NULL 76 6 GROUPBOX DLG_NULL 76 8
BEGIN BEGIN
PROMPT 1 1 "@bDati per la generazione documenti relativi ai giri" PROMPT 1 1 "@bDati per la generazione documenti relativi ai giri"
END END
DATE F_DTCONS DATE F_DTCONS
BEGIN BEGIN
PROMPT 2 2 "Giro del " PROMPT 2 2 "Data di prevista consegna "
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
DATE F_DTDOC DATE F_DTDOC
BEGIN BEGIN
PROMPT 30 2 "Data documento " PROMPT 50 2 "Data documento "
FLAGS "A" FLAGS "A"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
DATE F_DADTBOLLE LISTBOX F_TPGEN 1 37
BEGIN BEGIN
PROMPT 2 3 "Considera i documenti di ritiro fino dal " PROMPT 2 3 "Generare i documenti "
CHECKTYPE REQUIRED ITEM "0|Fino alla data di prevista consegna"
END ITEM "1|Solo per la data di prevista consegna"
DATE F_ADTBOLLE
BEGIN
PROMPT 55 3 " al "
VALIDATE DATE_CMP_FUNC >= F_DADTBOLLE
WARNING "Attenzione: la data deve essere maggiore di quella di inizio del periodo"
CHECKTYPE REQUIRED
END END
STRING F_CODITI 3 STRING F_CODITI 3
BEGIN BEGIN
PROMPT 2 4 "Itinerario " PROMPT 2 5 "Itinerario "
FLAGS "UZ" FLAGS "UZ"
USE &ITI USE &ITI
JOIN &AUT TO &ITI ALIAS 1000 INTO CODTAB==S1 JOIN &AUT TO &ITI ALIAS 1000 INTO CODTAB==S1
@ -59,7 +52,7 @@ END
STRING F_DESCRITI 50 STRING F_DESCRITI 50
BEGIN BEGIN
PROMPT 23 4 "" PROMPT 23 5 ""
USE &ITI KEY 2 USE &ITI KEY 2
INPUT S0 F_DESCRITI INPUT S0 F_DESCRITI
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
@ -68,9 +61,40 @@ BEGIN
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
STRING F_CODAUT 6
BEGIN
PROMPT 2 6 "Autista "
FLAGS "UZ"
USE &ITI
JOIN &AUT TO &ITI ALIAS 1000 INTO CODTAB==S1
JOIN &MEZ TO &ITI ALIAS 2000 INTO CODTAB==S2
INPUT CODTAB F_CODITI
DISPLAY "Autista" S1
DISPLAY "Descrizione Autista@50" 1000@->S0
DISPLAY "Itinerario" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Targa@8" S2
DISPLAY "Descrizione Mezzo@50" 2000@->S0
OUTPUT F_CODAUT S1
OUTPUT F_DESCRAUT 1000@->S0
CHECKTYPE NORMAL
END
STRING F_DESCRAUT 50
BEGIN
PROMPT 23 6 ""
USE &AUT KEY 2
INPUT S0 F_DESCRAUT
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
OUTPUT F_CODAUT CODTAB
OUTPUT F_DESCRAUT S0
CHECKTYPE NORMAL
END
NUMBER F_CODCF 6 NUMBER F_CODCF 6
BEGIN BEGIN
PROMPT 2 5 "Cliente " PROMPT 2 7 "Cliente "
FLAGS "U" FLAGS "U"
USE LF_CLIFO USE LF_CLIFO
INPUT TIPOCF "C" INPUT TIPOCF "C"
@ -84,7 +108,7 @@ END
STRING F_RAGSOCCLI 50 STRING F_RAGSOCCLI 50
BEGIN BEGIN
PROMPT 23 5 "" PROMPT 23 7 ""
USE LF_CLIFO KEY 2 USE LF_CLIFO KEY 2
INPUT TIPOCF "C" INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOCCLI INPUT RAGSOC F_RAGSOCCLI

View File

@ -85,7 +85,6 @@ Module = 41
Flags = "" Flags = ""
Item_01 = "Generazione automatica", "lv2 -0", "F" Item_01 = "Generazione automatica", "lv2 -0", "F"
Item_02 = "Gestione manuale", "lv2 -1", "F" Item_02 = "Gestione manuale", "lv2 -1", "F"
Item_04 = "Generazione bolle di consegna", "lv2 -3", "F"
[LVMENU_032] [LVMENU_032]
Caption = "Stampe" Caption = "Stampe"
@ -99,13 +98,15 @@ Caption = "Documenti"
Picture = <lv00> Picture = <lv00>
Module = 41 Module = 41
Flags = "" Flags = ""
Item_01 = "Acquisizione Bolle di rientro", "lv2 -5 lv2600a", "F" Item_01 = "Acquisizione da Contapezzi", "lv2 -5 lv2600a", "F"
Item_02 = "Documenti di Trasporto", "lv3 -0 -filtI1=1 -defNUM_GEN,TIPODOC_GEN,lv", "F" Item_02 = "Generazione buoni di prelievo", "lv2 -3 P", "F"
Item_03 = "Fatture", "ve0 -1 -filtI1=2 -defNUM_FAT,TIPODOC_FAT,lv", "F" Item_03 = "Generazione buoni di consegna", "lv2 -3 C", "F"
Item_04 = "Ordini Fornitori", "ve0 -1 -filtI1=3 -defNUM_ORF,TIPODOC_ORF,lv", "F" Item_04 = "Buoni di Consegna", "lv3 -0 -filtI1=1 -defNUM_GEN,TIPODOC_GEN,lv", "F"
Item_05 = "Ordini Clienti", "ve0 -1 -filtI1=3 -defNUM_ORC,TIPODOC_ORC,lv", "F" Item_05 = "Fatture", "ve0 -1 -filtI1=2 -defNUM_FAT,TIPODOC_FAT,lv", "F"
Item_06 = "Fatturazione", "lv2 -4", "F" Item_06 = "Ordini Fornitori", "ve0 -1 -filtI1=3 -defNUM_ORF,TIPODOC_ORF,lv", "F"
Item_07 = "Stampe", [LVMENU_050] Item_07 = "Ordini Clienti", "ve0 -1 -filtI1=3 -defNUM_ORC,TIPODOC_ORC,lv", "F"
Item_08 = "Fatturazione", "lv2 -4", "F"
Item_09 = "Stampe", [LVMENU_050]
[LVMENU_050] [LVMENU_050]
Caption = "Stampe" Caption = "Stampe"