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:
parent
3587bb603a
commit
0c6f9681fe
187
lv/lv2400.cpp
187
lv/lv2400.cpp
@ -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())
|
||||||
{
|
{
|
||||||
|
13
lv/lv2400a.h
13
lv/lv2400a.h
@ -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
|
@ -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
|
||||||
|
@ -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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user