Patch level : 10.0 patch 397

Files correlati     : lv2, lv2400a.msk
Ricompilazione Demo : [ ]
Commento            :
Correzione filtri sui documenti di sporco


git-svn-id: svn://10.65.10.50/trunk@19167 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-07-29 17:08:19 +00:00
parent c6eeb26c1d
commit 59eb735102
3 changed files with 210 additions and 174 deletions

View File

@ -4,6 +4,8 @@
#include "lvlib.h"
#include "../ve/velib.h"
#include "doc.h"
#include "rdoc.h"
#include "lvcondv.h"
#include "lvrcondv.h"
#include "lvrconsplan.h"
@ -53,7 +55,7 @@ private:
void cambia_stato(const char ritoant, const TString_array& docarr);
void elimina_bolle(const long codcli, const long codind, TString_array& docarr);
//Metodi per la scansione dei documenti
void scansione_ritiri_anticipi(const long codcli, const long codind, const char ritoant, const TDocumento& docgen);
int scansione_ritiri_anticipi(const long codcli, const long codind, const char ritoant, const TDocumento& docgen);
void scansione_consegne(const long codcli, const long codind, const TDocumento& docgen);
//Metodo per il calcolo delle quantità in bolla
void calcolo_quantita(const TDocumento& doc, const char ritoant);
@ -77,6 +79,7 @@ public:
//CREATE: metodo costruttore
bool TGenera_documenti_app::create()
{
open_files(LF_DOC, 34, 0);
_msk = new TGenera_documenti_mask("lv2400a");
_configlv = new TConfig(CONFIG_DITTA,"lv");
_buono = *TApplication::argv(2);
@ -113,7 +116,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan)
//per ogni planning recupero i dati di interesse dal planning
const long codcli = plan.get(LVRCONSPLAN_CODCF).as_int();
const long codcont = plan.get(LVRCONSPLAN_CODCONT).as_int();
const TDate dtcons = plan.get(LVRCONSPLAN_DTCONS).as_date();
const TDate dtcons = plan.get(LVRCONSPLAN_DTCONS).as_date(); //che è anche la data documento
const char modpas = plan.get(LVRCONSPLAN_MODPASS).as_string()[0];
const int anno = dtcons.year();
@ -133,10 +136,10 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan)
//...e riporta in stato iniziale i documenti di ritiro e di anticipo che concorrono
//...a calcolare le quantità da riportare sulla bolla
TString_array docarr; //array che conterrà i riferimenti ai documenti da cancellare
/*TString_array docarr; //array che conterrà i riferimenti ai documenti da cancellare
elimina_bolle(codcli, codind, docarr);
cambia_stato('R', docarr);
cambia_stato('A', docarr);
cambia_stato('A', docarr);*/
//variabili che conterranno i parametri dei documenti che devo generare...
//...settati dalla funzione numerazione_ddt()
@ -155,59 +158,63 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan)
//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_TIPODOC, tpdoc);
doc.put(DOC_DATADOC, dtcons);
doc.put(DOC_TIPOCF, 'C');
doc.put(DOC_CODCF, codcli);
doc.put(DOC_CODCONT, codcont);
//per evitare che ci metta uno zero
if (codind > 0)
doc.put(DOC_CODINDSP, codind);
doc.put("DATAGEN", datagen);
doc.put("DATAPRCO", dtcons);
const long ndoc = doc.get_long(DOC_NDOC);
//preparo la chiave per la tabella righe contratti
TToken_string keyrcont;
keycont.add(codcli);
keycont.add(codcont);
FOR_EACH_ASSOC_OBJECT(_quantita,h,codart,obj)
{
crea_riga(codart, modpas, tplis, false, prinbo ,doc);
/*const TDate dadata = rcont.get(LVRCONDV_INDTTMP).as_date();
const TDate adata = rcont.get(LVRCONDV_FIDTTMP).as_date();
if (dadata.ok() && dtcons >= dadata && dtcons <= adata)
crea_riga(rcont, modpas, true, doc);*/
}
int numerodoc = scansione_ritiri_anticipi(codcli, codind, 'R', doc);
//scansione_ritiri_anticipi(codcli, codind,'A', doc);
//scansione_consegne(codcli, codind, doc);
int err = 1;
if (doc.rows() > 0)
err = doc.write();
//scrivo sul planning il riferimento alla bolla che lo accompagna
if (err == NOERR)
if(numerodoc > 0)
{
TLocalisamfile& f = plan.cursor()->file();
f.put(LVRCONSPLAN_ANNO, anno);
f.put(LVRCONSPLAN_CODNUM, codnum);
f.put(LVRCONSPLAN_NDOC, ndoc);
f.rewrite();
}
//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_TIPODOC, tpdoc);
doc.put(DOC_DATADOC, dtcons);
doc.put(DOC_TIPOCF, 'C');
doc.put(DOC_CODCF, codcli);
doc.put(DOC_CODCONT, codcont);
//per evitare che ci metta uno zero
if (codind > 0)
doc.put(DOC_CODINDSP, codind);
doc.put("DATAGEN", datagen);
doc.put("DATAPRCO", dtcons);
const long ndoc = doc.get_long(DOC_NDOC);
//preparo la chiave per la tabella righe contratti
TToken_string keyrcont;
keycont.add(codcli);
keycont.add(codcont);
FOR_EACH_ASSOC_OBJECT(_quantita,h,codart,obj)
{
crea_riga(codart, modpas, tplis, false, prinbo ,doc);
/*const TDate dadata = rcont.get(LVRCONDV_INDTTMP).as_date();
const TDate adata = rcont.get(LVRCONDV_FIDTTMP).as_date();
if (dadata.ok() && dtcons >= dadata && dtcons <= adata)
crea_riga(rcont, modpas, true, doc);*/
}
if (doc.rows() > 0)
err = doc.write();
else
doc.remove();
//scrivo sul planning il riferimento alla bolla che lo accompagna
if (err == NOERR)
{
TLocalisamfile& f = plan.cursor()->file();
f.put(LVRCONSPLAN_ANNO, anno);
f.put(LVRCONSPLAN_CODNUM, codnum);
f.put(LVRCONSPLAN_NDOC, ndoc);
f.rewrite();
}
}
return err == NOERR;
}
@ -346,9 +353,9 @@ bool TGenera_documenti_app::numerazione_ddt(TString& codnum, TString& tpdoc, TSt
}
//instanzio una cache sulla tabella delle righe contratti (cerco lo stato iniziale)
//instanzio una cache sulla tabella dei tipi documento (cerco lo stato iniziale)
statoi = cache().get("%TIP",tpdoc,"S2").left(1);
statof = cache().get("%TIP",tpdoc,"S2").mid(2,1);
statof = cache().get("%TIP",tpdoc,"S2").mid(1,1);
return codnum.full() && tpdoc.full();
}
@ -356,11 +363,16 @@ bool TGenera_documenti_app::numerazione_ddt(TString& codnum, TString& tpdoc, TSt
//NUMERAZIONE_DRIT: questa funzione cerca quali sono i codnum e i tpdoc dei documenti di ritiro
bool TGenera_documenti_app::numerazione_drit(const int cod, TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const
{
codnum = _configlv->get("NUM_RIT",NULL,cod);
tpdoc = _configlv->get("TIPODOC_RIT",NULL,cod);
statof = _configlv->get("STATO_RIT",NULL,cod); //è lo stato finale
//instanzio una cache sulla tabella delle righe contratti (cerco lo stato iniziale)
TString16 tmp;
tmp << "NUM_RIT(" << cod << ")";
codnum = _configlv->get(tmp);
tmp.cut(0);
tmp << "TIPODOC_RIT(" << cod << ")";
tpdoc = _configlv->get(tmp);
//instanzio una cache sulla tabella tipi documento (cerco lo stato iniziale)
statoi = cache().get("%TIP",tpdoc,"S2").left(1);
statof = cache().get("%TIP",tpdoc,"S2").mid(1,1);
return codnum.full() && tpdoc.full();
}
@ -369,10 +381,10 @@ bool TGenera_documenti_app::numerazione_drit(const int cod, TString& codnum, TSt
bool TGenera_documenti_app::numerazione_dant(const int cod, TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const
{
codnum = _configlv->get("NUM_ANT",NULL,cod);
tpdoc = _configlv->get("TIPODOC_ANT",NULL,cod);
statof = _configlv->get("STATO_ANT",NULL,cod); //è lo stato finale
tpdoc = _configlv->get("TIPODOC_ANT",NULL,cod);
//instanzio una cache sulla tabella delle righe contratti (cerco lo stato iniziale)
statoi = cache().get("%TIP",tpdoc,"S2").left(1);
statof = cache().get("%TIP",tpdoc,"S2").mid(1,1);
return codnum.full() && tpdoc.full();
}
@ -438,6 +450,10 @@ void TGenera_documenti_app::elimina_bolle(const long codcli, const long codind,
//recupero dalla maschera i campi di interesse
const TDate adatabolla = _msk->get_date(F_DTCONS);
const long aanno = adatabolla.year();
TDate dadatabolla = adatabolla; dadatabolla.set_month(adatabolla.month() - 2);
const long daanno = dadatabolla.year();
//recupero numerazione, tipo documento e stato tramite la funzione apposita
TString4 codnum;
@ -450,22 +466,20 @@ void TGenera_documenti_app::elimina_bolle(const long codcli, const long codind,
return;
//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 CODNUM=#CODNUM\nTO TIPOCF=#TIPOCF CODCF=#CODCF PROVV=#PROVV ANNO=#AANNO DATADOC=#ADATABOLLA CODNUM=#CODNUM");
docritiri.set_var("#STATO",TVariant(statof));
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("#CODNUM",TVariant(codnum));
docritiri.set_var("#AANNO",aanno);
docritiri.set_var("#ADATABOLLA",adatabolla);
TString query;
query << "USE DOC "
<< "SELECT (TIPOCF=\"C\")&&(CODCF=" << codcli
<< ")&&(TIPODOC=\"" << tpdoc << "\")&&(STATO=\"" << statoi <<"\")&&(DATADOC>=" << dadatabolla << ")\n"
<< "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n"
<< "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n";
TISAM_recordset bolle(query);
//per ogni documento che trovo, aggiorno la quantità e gli cambio stato
for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next())
for (bool ok = bolle.move_first(); ok; ok = bolle.move_next())
{
TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento
TDocumento doc(bolle.cursor()->curr()); //instanzio il documento
//salvo la chiave del documento che sto cancellando
TToken_string key;
key.add(doc.get(DOC_PROVV));
@ -485,64 +499,60 @@ 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...
//e, dopo l'elaborazione, gli cambia stato
void TGenera_documenti_app::scansione_ritiri_anticipi(const long codcli, const long codind, const char ritoant, const TDocumento& docgen)
int 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
const TDate adatabolla = _msk->get_date(F_DTCONS);
const long aanno = adatabolla.year();
//per ogni paragrafo scritto in ditta.ini...
//recupero numerazione, tipo documento e stato tramite la funzione apposita
for (int i = 0; ; i++)
TDate dadatabolla = adatabolla; dadatabolla.set_month(adatabolla.month() - 2);
const long daanno = dadatabolla.year();
TString4 codnum;
TString4 tpdoc;
TString4 statoi;
TString4 statof;
bool err;
//distinguo se sto scandendo i documenti di ritiro o i documenti di anticipo
switch (ritoant)
{
TString4 codnum;
TString4 tpdoc;
TString4 statoi;
TString4 statof;
bool err;
//distinguo se sto scandendo i documenti di ritiro o i documenti di anticipo
switch (ritoant)
{
case 'R':
err = numerazione_drit(i, codnum, tpdoc, statoi, statof);
break;
case 'A':
err = numerazione_dant(i, codnum, tpdoc, statoi, statof);
break;
default:
break;
}
//se non trovo la numerazione richiesta, interrompo il ciclo
if (!err)
break;
//instanzio un recordset che contiene tutti i documenti di interesse
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(statoi)); //lo stato va preso dallo sheet
docritiri.set_var("#TIPODOC",TVariant(tpdoc));
docritiri.set_var("#CODNUM",TVariant(codnum));
docritiri.set_var("#TIPOCF","C");
docritiri.set_var("#CODCF",codcli);
docritiri.set_var("#PROVV","D");
docritiri.set_var("#AANNO",aanno);
docritiri.set_var("#ADATABOLLA",adatabolla);
//per ogni documento che trovo, aggiorno la quantità, e poi cambio stato al documento
for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next())
{
TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento
calcolo_quantita(doc,ritoant);
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));
}
case 'R':
err = numerazione_drit(0, codnum, tpdoc, statoi, statof);
break;
case 'A':
err = numerazione_dant(0, codnum, tpdoc, statoi, statof);
break;
default:
break;
}
return;
//instanzio un recordset che contiene tutti i documenti di interesse
TString query;
query << "USE DOC "
<< "SELECT (TIPOCF=\"C\")&&(CODCF=" << codcli
<< ")&&(TIPODOC=\"" << tpdoc << "\")&&(STATO=\"" << statoi <<"\")\n"
<< "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n"
<< "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n";
//instanzio un recordset che contiene tutti i documenti di interesse
TISAM_recordset docritiri(query);
//per ogni documento che trovo, aggiorno la quantità, e poi cambio stato al documento
for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next())
{
TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento
calcolo_quantita(doc, ritoant);
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));
doc.rewrite();
}
return docritiri.items();
}
//SCANSIONE_CONSEGNE: questa funzione cerca tutte le bolle di consegna relative a un certo cliente ancora...
@ -552,6 +562,9 @@ void TGenera_documenti_app::scansione_consegne(const long codcli, const long cod
//recupero dalla maschera i campi di interesse
const TDate adatabolla = _msk->get_date(F_DTCONS);
const long aanno = adatabolla.year();
TDate dadatabolla = adatabolla; dadatabolla.set_month(adatabolla.month() - 2);
const long daanno = dadatabolla.year();
//recupero numerazione, tipo documento e stato tramite la funzione apposita
TString4 codnum;
@ -564,16 +577,14 @@ void TGenera_documenti_app::scansione_consegne(const long codcli, const long cod
return;
//instanzio un recordset che contiene tutti i documenti di interesse
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("#TIPODOC",TVariant(tpdoc));
docritiri.set_var("#CODINDSP",codind);
docritiri.set_var("#CODNUM",TVariant(codnum));
docritiri.set_var("#TIPOCF","C");
docritiri.set_var("#CODCF",codcli);
docritiri.set_var("#PROVV","D");
docritiri.set_var("#AANNO",aanno);
docritiri.set_var("#ADATABOLLA",adatabolla);
TString query;
query << "USE DOC "
<< "SELECT (TIPOCF=\"C\")&&(CODCF=" << codcli
<< ")&&(TIPODOC=\"" << tpdoc << "\")&&(STATO=\"" << statoi <<"\")\n"
<< "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n"
<< "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n";
//instanzio un recordset che contiene tutti i documenti di interesse
TISAM_recordset docritiri (query);
//per ogni documento che trovo, aggiorno la quantità e gli cambio stato
for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next())
@ -687,43 +698,69 @@ bool TGenera_documenti_app::transfer()
long codcli = _msk->get_long(F_CODCF);
long codaut = _msk->get_long(F_CODAUT);
//preparo un recordset che contiene tutti planning per cui voglio creare i documenti relativi
TString query = "USE LVRCONSPLAN KEY 2";
int daanno = dadatacons.year();
int aanno = adatacons.year();
TString4 codnum;
TString4 tpdoc;
TString4 statoi;
TString4 statof;
bool err;
numerazione_drit(0, codnum, tpdoc, statoi, statof);
if (coditi || codcli || codaut)
//instanzio un recordset che contiene tutti i documenti di interesse
TString query_bolle = "USE DOC\nSELECT ";
if(codcli > 0)
query_bolle << "(TIPOCF=\"C\")&&(CODCF=" << codcli << ")&&\n";
query_bolle <<"(TIPODOC=\"" << tpdoc << "\")&&(STATO=\"" << statoi << "\")\n";
query_bolle << "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n";
query_bolle << "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n";
TISAM_recordset docritiri(query_bolle);
TProgind pi(docritiri.items(), TR("Generazione documenti in corso..."), true, true);
for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next())
{
query << " SELECT ";
if (codcli > 0)
query << "(CODCF=" << codcli << ')';
if (coditi > 0)
{
if (codcli > 0)
query << "&&";
query << "(CODITI=" << coditi << ')';
}
if (codaut > 0)
{
if (codcli > 0 || coditi > 0)
query << "&&";
query << "(CODAUT=" << codaut << ')';
}
}
query << "\n";
if(_msk->get_int(F_TPGEN) == 1)
query << "FROM DTCONS=" << adatacons << "\n";
else
query << "FROM DTCONS=" << dadatacons << "\n";
query << "TO DTCONS=" << adatacons << "\n";
TISAM_recordset plan(query);
TProgind pi(plan.items(), TR("Generazione documenti in corso..."), true, true);
for (bool ok = plan.move_first(); ok; ok = plan.move_next())
{
if (!pi.addstatus(1))
if (!pi.addstatus(1))
break;
codcli = docritiri.get(DOC_CODCF).as_int();
//preparo un recordset che contiene tutti planning per cui voglio creare i documenti relativi
TString query = "USE LVRCONSPLAN KEY 2";
if (coditi || codcli || codaut)
{
query << " SELECT ";
if (codcli > 0)
query << "(CODCF=" << codcli << ')';
if (coditi > 0)
{
if (codcli > 0)
query << "&&";
query << "(CODITI=" << coditi << ')';
}
if (codaut > 0)
{
if (codcli > 0 || coditi > 0)
query << "&&";
query << "(CODAUT=" << codaut << ')';
}
}
query << "\n";
if(_msk->get_int(F_TPGEN) == 1)
query << "FROM DTCONS=" << adatacons << "\n";
else
query << "FROM DTCONS=" << dadatacons << "\n";
query << "TO DTCONS=" << adatacons << "\n";
TISAM_recordset plan(query);
plan.move_first();
crea_documento(plan);
}

View File

@ -17,12 +17,12 @@ BEGIN
CHECKTYPE REQUIRED
END
DATE F_DTDOC
/*DATE F_DTDOC
BEGIN
PROMPT 50 2 "Data documento "
FLAGS "A"
CHECKTYPE REQUIRED
END
END*/
LISTBOX F_TPGEN 1 37
BEGIN

View File

@ -97,9 +97,7 @@ TObject* TAcquisizione_cache::key2obj(const char* key)
query << "SELECT (TIPODOC=\"" << _tipodoc << "\" && STATO=" << _stato <<")\n";
query << "FROM TIPOCF=C CODCF=" << codcf << " PROVV=D ANNO=" << datadoc.year() << " DATADOC=" << datadoc << " CODNUM=" << _codnum << "\n";
query << "TO TIPOCF=C CODCF=" << codcf << " PROVV=D ANNO=" << datadoc.year() << " DATADOC=" << datadoc << " CODNUM=" << _codnum << "\n";
TISAM_recordset rset(query);
TISAM_recordset rset(query);
TDocumento* doc = NULL;
@ -115,6 +113,7 @@ TObject* TAcquisizione_cache::key2obj(const char* key)
query1 << "TO CODCF=" << codcf << " CODCONT=" << codcont << " DTCONS=" << adata << "\n";
TISAM_recordset consegne(query1);
consegne.move_first();
const TDate dataprco = consegne.get(LVRCONSPLAN_DTCONS).as_date();
doc = new TDocumento('D',datadoc.year(),_codnum,0);
doc->put(DOC_TIPODOC, _tipodoc);
@ -124,7 +123,7 @@ TObject* TAcquisizione_cache::key2obj(const char* key)
doc->put(DOC_CODCF, codcf);
doc->put(DOC_CODCONT, codcont);
doc->put("DATAGEN", datagen);
doc->put("DATAPRCO", consegne.get(LVRCONSPLAN_DTCONS).as_date());
doc->put("DATAPRCO", dataprco);
}
return doc;
}