797e8900fb
Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 873 git-svn-id: svn://10.65.10.50/trunk@15151 c028cbd2-c16b-5b4b-a496-9718f37d4682
878 lines
26 KiB
C++
Executable File
878 lines
26 KiB
C++
Executable File
#include "pd0666.h"
|
|
#include "pd0666100a.h"
|
|
|
|
#include <applicat.h>
|
|
#include <automask.h>
|
|
#include <progind.h>
|
|
#include <recarray.h>
|
|
#include <relation.h>
|
|
#include <reprint.h>
|
|
#include <reputils.h>
|
|
#include <textset.h>
|
|
|
|
#include "../cg/cglib01.h"
|
|
|
|
#include <anafis.h>
|
|
#include <clifo.h>
|
|
#include <comuni.h>
|
|
#include <mov.h>
|
|
#include <partite.h>
|
|
#include <rmov.h>
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TEsporta_SAP_mask
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TEsporta_SAP_mask : public TAutomask
|
|
{
|
|
|
|
public:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
TEsporta_SAP_mask();
|
|
~TEsporta_SAP_mask();
|
|
};
|
|
|
|
|
|
bool TEsporta_SAP_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case F_NEXTNUMC:
|
|
if (e == fe_init)
|
|
{
|
|
const int n = get(F_LASTDATAC) != get(F_TODAY) ? 1 : get_int(F_LASTNUMC)+1;
|
|
TString4 str; str.format("%02d", n);
|
|
o.set(str);
|
|
}
|
|
break;
|
|
case F_NEXTNUMF:
|
|
if (e == fe_init)
|
|
{
|
|
const int n = get(F_LASTDATAF) != get(F_TODAY) ? 1 : get_int(F_LASTNUMF)+1;
|
|
TString4 str; str.format("%02d", n);
|
|
o.set(str);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
TEsporta_SAP_mask::TEsporta_SAP_mask() : TAutomask("pd0666100a")
|
|
{
|
|
//carica i parametri del file di configurazione
|
|
TConfig configfile("pd0666conf.ini", "MAIN");
|
|
for (int i = 0; i < fields() ; i++)
|
|
{
|
|
TMask_field& f = fld(i);
|
|
const TFieldref* fr = f.field();
|
|
if (fr != NULL)
|
|
f.set(configfile.get(fr->name()));
|
|
}
|
|
|
|
//file dei clienti..
|
|
TFilename file;
|
|
if (get(F_CLIFILE).empty())
|
|
{
|
|
file.tempdir();
|
|
file.add("clienti.xls");
|
|
set(F_CLIFILE, file);
|
|
}
|
|
//..dei fornitori..
|
|
if (get(F_FORNFILE).empty())
|
|
{
|
|
file.tempdir();
|
|
file.add("fornitori.xls");
|
|
set(F_FORNFILE, file);
|
|
}
|
|
//..e delle partite
|
|
if (get(F_PARTFILEC).empty())
|
|
{
|
|
file.tempdir();
|
|
file.add("partitec.xls");
|
|
set(F_PARTFILEC, file);
|
|
}
|
|
|
|
if (get(F_PARTFILEF).empty())
|
|
{
|
|
file.tempdir();
|
|
file.add("partitef.xls");
|
|
set(F_PARTFILEF, file);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
TEsporta_SAP_mask::~TEsporta_SAP_mask()
|
|
{
|
|
//carica i parametri del file di configurazione
|
|
TConfig configfile("pd0666conf.ini", "MAIN");
|
|
for (int i = 0; i < fields() ; i++)
|
|
{
|
|
TMask_field& f = fld(i);
|
|
const TFieldref* fr = f.field();
|
|
if (fr != NULL)
|
|
configfile.set(fr->name(), f.get());
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// Recordset specifici per i dati da trasferire
|
|
/////////////////////////////////////////////////////////////
|
|
//Clienti
|
|
class TEsporta_SAP_clienti_recordset : public TAS400_recordset
|
|
{
|
|
public:
|
|
TEsporta_SAP_clienti_recordset();
|
|
};
|
|
|
|
TEsporta_SAP_clienti_recordset::TEsporta_SAP_clienti_recordset()
|
|
: TAS400_recordset("AS400(512)")
|
|
{
|
|
create_field("KTOKD", -1, 4, _alfafld); //zicc o zicu
|
|
create_field("NAME1", -1, 50, _alfafld); //ragsoc1
|
|
create_field("NAME2", -1, 5, _alfafld); //ragsoc2
|
|
create_field("SORTL", -1, 1, _alfafld); //campo non richiesto?
|
|
create_field("STRAS", -1, 45, _alfafld); //via+numero
|
|
create_field("ORT01", -1, 35, _alfafld); //localita'
|
|
create_field("PSTLZ", -1, 5, _alfafld); //cap
|
|
create_field("LAND1", -1, 3, _alfafld); //codice paese
|
|
create_field("REGIO", -1, 2, _alfafld); //occhio al casino in fase di caricamento!
|
|
create_field("SPRAS", -1, 1, _alfafld); //codlin
|
|
create_field("TELX1", -1, 40, _alfafld); //somma prefisso+telefono telex
|
|
create_field("TELF1", -1, 40, _alfafld); //somma prefisso+telefono ptel1+tel1
|
|
create_field("TELFX", -1, 40, _alfafld); //somma prefisso+telefono fax
|
|
create_field("TELF2", -1, 40, _alfafld); //somma prefisso+telefono ptel2+tel2
|
|
create_field("LZONE", -1, 10, _alfafld); //non l'abbiamo
|
|
create_field("VBUND", -1, 1, _alfafld); //non l'abbiamo
|
|
create_field("STCD1", -1, 16, _alfafld); //cofi
|
|
create_field("STCD2", -1, 16, _alfafld); //non l'abbiamo
|
|
create_field("BRSCH", -1, 2, _alfafld); //non l'abbiamo
|
|
create_field("STCEG", -1, 14, _alfafld); //statopaiv+p.iva
|
|
create_field("STKZN", -1, 1, _alfafld); //tipopers
|
|
create_field("BUSAB", -1, 2, _alfafld); //non l'abbiamo
|
|
create_field("XAUSZ", -1, 1, _alfafld); //non l'abbiamo
|
|
create_field("AKONT", -1, 8, _alfafld, true, "41001000"); //conto da tabella!
|
|
create_field("FDGRV", -1, 5, _alfafld); //non l'abbiamo
|
|
create_field("ZTERM", -1, 4, _alfafld); //codpag?
|
|
create_field("ZAMIM", -1, 1, _alfafld); //non l'abbiamo
|
|
create_field("ZWELS", -1, 4, _alfafld); //metodopag
|
|
create_field("VZSKZ", -1, 2, _alfafld); //non l'abbiamo
|
|
create_field("EIKTO", -1, 6, _alfafld); //nostro codcf
|
|
create_field("XZVER", -1, 1, _alfafld); //non l'abbiamo
|
|
create_field("TOGRU", -1, 4, _alfafld); //non l'abbiamo
|
|
create_field("ALTKN", -1, 7, _alfafld); //non l'abbiamo
|
|
create_field("MAHNA", -1, 4, _alfafld); //non l'abbiamo
|
|
}
|
|
|
|
//Forinitori
|
|
class TEsporta_SAP_fornitori_recordset : public TAS400_recordset
|
|
{
|
|
public:
|
|
TEsporta_SAP_fornitori_recordset();
|
|
};
|
|
|
|
TEsporta_SAP_fornitori_recordset::TEsporta_SAP_fornitori_recordset()
|
|
: TAS400_recordset("AS400(512)")
|
|
{
|
|
create_field("ACCVE", -1, 6, _alfafld); //codcf
|
|
create_field("ACCOUNT", -1, 4, _alfafld); //z00?
|
|
create_field("NAME1", -1, 50, _alfafld); //ragsoc1
|
|
create_field("NAME2", -1, 5, _alfafld); //ragsoc2
|
|
create_field("SORTL", -1, 10, _alfafld); //sort non l'abbiamo (ricalt?)
|
|
create_field("STREET", -1, 35, _alfafld); //indcf
|
|
create_field("HOUSEN", -1, 10, _alfafld); //civcf
|
|
create_field("DISTR", -1, 35, _alfafld); //localita'
|
|
create_field("ZIP", -1, 5, _alfafld); //cap
|
|
create_field("CITY", -1, 50, _alfafld); //dencom
|
|
create_field("COUNTRY", -1, 3, _alfafld); //codice paese
|
|
create_field("REGION", -1, 2, _alfafld); //provincia
|
|
create_field("LANG", -1, 1, _alfafld); //codlin
|
|
create_field("TEL", -1, 40, _alfafld); //pref+tel
|
|
create_field("TEL2", -1, 40, _alfafld); //pref+tel
|
|
create_field("FAX", -1, 40, _alfafld); //pref+fax
|
|
create_field("TAXC1", -1, 16, _alfafld); //cofi
|
|
create_field("TAXC2", -1, 16, _alfafld); //non l'abbiamo
|
|
create_field("VATRN", -1, 14, _alfafld); //statopaiv+iva
|
|
create_field("TIPOP", -1, 1, _alfafld); //tipopers
|
|
create_field("SEX", -1, 1, _alfafld); //sesso!
|
|
create_field("BIRTHL", -1, 50, _alfafld); //luogo nascita
|
|
create_field("BIRTHD", -1, 10, _alfafld); //data nascita
|
|
create_field("PROF", -1, 1, _alfafld); //professione non l'abbiamo
|
|
create_field("BANKC", -1, 2, _alfafld); //stato banca non l'abbiamo (stato?)
|
|
create_field("BANKK", -1, 10, _alfafld); //abi+cab
|
|
create_field("BANKA", -1, 20, _alfafld); //contocorrente
|
|
create_field("RECON", -1, 10, _alfafld); //tabella trascodifica necessaria
|
|
create_field("PLANG", -1, 1, _alfafld); //non l'abbiamo
|
|
create_field("PREVAN", -1, 1, _alfafld); //non l'abbiamo
|
|
create_field("SORTK", -1, 1, _alfafld); //non l'abbiamo
|
|
create_field("PAYTR", -1, 4, _alfafld); //tabella trascodifica
|
|
create_field("PAYMT", -1, 1, _alfafld); //tabella trascodifica
|
|
create_field("WTAXC2", -1, 1, _alfafld); //non l'abbiamo
|
|
create_field("WTAXT2", -1, 1, _alfafld); //non l'abbiamo
|
|
create_field("WTAXS2", -1, 1, _alfafld); //non l'abbiamo
|
|
create_field("CHKDB", -1, 1, _alfafld); //non l'abbiamo
|
|
}
|
|
|
|
|
|
//Partite
|
|
class TEsporta_SAP_partite_recordset : public TAS400_recordset
|
|
{
|
|
public:
|
|
TEsporta_SAP_partite_recordset();
|
|
};
|
|
|
|
TEsporta_SAP_partite_recordset::TEsporta_SAP_partite_recordset()
|
|
: TAS400_recordset("AS400(512)")
|
|
{
|
|
//record di tipo BBKPF+BBSEG(1)+BBSEG(2)
|
|
create_field("BLDAT", -1, 8, _alfafld); //datadoc (gg/mm/aa)
|
|
create_field("BLART", -1, 2, _alfafld); //tipi doc da tabella trascodifica
|
|
create_field("BUKRS", -1, 4, _alfafld, true, "0706"); //0706
|
|
create_field("BUDAT", -1, 8, _alfafld); //31/03/07
|
|
create_field("WAERS", -1, 5, _alfafld, true, "EUR"); //EUR
|
|
create_field("XBLNR", -1, 16, _alfafld); //numdoc
|
|
create_field("BKTXT", -1, 25, _alfafld); //descr
|
|
|
|
create_field("NEWBS", -1, 2, _alfafld); //chiavi contabili da tabella trascodifica
|
|
create_field("NEWKO", -1, 17, _alfafld); //conto di contropartita da tabella trascodifica
|
|
create_field("WRBTR", -1, 16, _alfafld); //imponibile con .2 decimals
|
|
create_field("ZUONR", -1, 18, _alfafld); //datareg del documento
|
|
create_field("ZTERM", -1, 4, _alfafld, true, "C000"); //??
|
|
create_field("ZFBDT", -1, 8, _alfafld); //data di scadenza???
|
|
create_field("ZLSCH", -1, 1, _alfafld, true, "E"); // '/'
|
|
create_field("SGTXT", -1, 50, _alfafld); //descrizione testata documento
|
|
|
|
create_field("ZNEWBS", -1, 2, _alfafld);
|
|
create_field("ZNEWKO", -1, 17, _alfafld);
|
|
create_field("ZWRBTR", -1, 16, _alfafld);
|
|
create_field("ZZUONR", -1, 18, _alfafld);
|
|
//create_field("ZZTERM", -1, 4, _alfafld); non la si vuole al secondo giro?
|
|
create_field("ZZFBDT", -1, 8, _alfafld);
|
|
create_field("ZZLSCH", -1, 1, _alfafld);
|
|
create_field("ZSGTXT", -1, 50, _alfafld);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TEsporta_SAP applicazione
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TEsporta_SAP_app : public TSkeleton_application
|
|
{
|
|
TAssoc_array _codpag_c, _codpag_f;
|
|
|
|
protected:
|
|
virtual bool check_autorization() const {return false;}
|
|
virtual const char * extra_modules() const {return "cg";}
|
|
virtual void main_loop();
|
|
|
|
bool is_cofi(const TString& cofi) const;
|
|
const TRectype& find_comune(const TRecordset& clifo) const;
|
|
const TString& find_dencom_nasc(TString& codcom) const;
|
|
bool check_clifo(const char tipo, const long codcf) const;
|
|
const TString& format_data(const TDate& data) const;
|
|
const TString& trova_il_codsap(const char tipo, const char sezione) const;
|
|
|
|
public:
|
|
void esporta_clienti(const TString& path) const;
|
|
void esporta_fornitori(const TString& path) const;
|
|
void esporta_partite(const TMask& msk, const char tipo) const;
|
|
|
|
};
|
|
|
|
bool TEsporta_SAP_app::is_cofi(const TString& cofi) const
|
|
{
|
|
if (cofi.len() != 16)
|
|
return false;
|
|
const char* const fmt = "AAAAAANNANNANNNA";
|
|
int i = 0;
|
|
for (i = 15; i >= 0; i--)
|
|
{
|
|
if (fmt[i] == 'A')
|
|
{
|
|
if (cofi[i] < 'A' || cofi[i] > 'Z')
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
if (cofi[i] < '0' || cofi[i] > '9')
|
|
break;
|
|
}
|
|
}
|
|
return i < 0;
|
|
}
|
|
|
|
//Clienti
|
|
const TRectype& TEsporta_SAP_app::find_comune(const TRecordset& clifo) const
|
|
{
|
|
TToken_string ws;
|
|
if (clifo.get(CLI_COMCF).is_empty())
|
|
{
|
|
ws = " ";
|
|
ws.add(cap2comune(clifo.get(CLI_CAPCF).as_string(),
|
|
clifo.get(CLI_LOCCF).as_string()));
|
|
}
|
|
else
|
|
{
|
|
ws = clifo.get(CLI_STATOCF).as_string();
|
|
ws.add(clifo.get(CLI_COMCF).as_string() ,1);
|
|
}
|
|
const TRectype& com_rec = cache().get(LF_COMUNI, ws);
|
|
return com_rec;
|
|
}
|
|
|
|
|
|
bool TEsporta_SAP_app::check_clifo(const char tipo, const long codcf) const
|
|
{
|
|
const TDate datareg(1,1,2005);
|
|
//primo criterio di ricerca: movimento p.n. con clifo
|
|
TLocalisamfile mov(LF_MOV);
|
|
mov.setkey(3);
|
|
mov.put(MOV_TIPO, tipo);
|
|
mov.put(MOV_CODCF, codcf);
|
|
mov.put(MOV_DATAREG, datareg);
|
|
int err = mov.read(_isgteq);
|
|
if(err == NOERR && mov.get_long(MOV_CODCF) == codcf)
|
|
return true;
|
|
|
|
//secondo criterio di ricerca: una riga di movimento con clifo
|
|
TToken_string chiave;
|
|
chiave.add(tipo);
|
|
chiave.add(codcf);
|
|
|
|
const TRectype& rec_clifo = cache().get(LF_CLIFO, chiave);
|
|
const int gruppo = rec_clifo.get_int(CLI_GRUPPO);
|
|
const int conto = rec_clifo.get_int(CLI_CONTO);
|
|
|
|
TLocalisamfile rmov(LF_RMOV);
|
|
rmov.setkey(2);
|
|
rmov.put(RMV_GRUPPO, gruppo);
|
|
rmov.put(RMV_CONTO, conto);
|
|
rmov.put(RMV_SOTTOCONTO, codcf);
|
|
rmov.put(RMV_DATAREG, datareg);
|
|
err = rmov.read(_isgteq);
|
|
if(err == NOERR && rmov.get_long(RMV_SOTTOCONTO) == codcf)
|
|
return true;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
void TEsporta_SAP_app::esporta_clienti(const TString& path) const
|
|
{
|
|
TString query;
|
|
query << "USE CLIFO";
|
|
query << "\nFROM TIPOCF='C'";
|
|
query << "\nTO TIPOCF='C'";
|
|
TISAM_recordset clienti_campo(query);
|
|
|
|
TEsporta_SAP_clienti_recordset clienti_sap;
|
|
|
|
const int cazzoni = clienti_campo.items();
|
|
TProgind pi(cazzoni, "Trasferimento clienti...", true, true);
|
|
TString ws;
|
|
for (bool ok = clienti_campo.move_first(); ok; ok = clienti_campo.move_next())
|
|
{
|
|
if (!pi.addstatus(1))
|
|
break;
|
|
|
|
const long codcf = clienti_campo.get(CLI_CODCF).as_int();
|
|
if (!check_clifo('C', codcf))
|
|
continue;
|
|
|
|
//creazione di un nuovo record di tipo clienti..
|
|
clienti_sap.new_rec("");
|
|
//..e successivo riempimento
|
|
const long conto = clienti_campo.get(CLI_CONTO).as_int(); //ktokd
|
|
if (conto == 8 || conto == 9)
|
|
clienti_sap.set("KTOKD", TVariant("ZICC"));
|
|
else
|
|
clienti_sap.set("KTOKD", TVariant("ZICU"));
|
|
|
|
clienti_sap.set("NAME1", clienti_campo.get(CLI_RAGSOC)); //name1 e name2
|
|
|
|
ws = clienti_campo.get(CLI_INDCF).as_string(); //stras
|
|
ws << " " << clienti_campo.get(CLI_CIVCF).as_string();
|
|
clienti_sap.set("STRAS", TVariant(ws));
|
|
|
|
//pocci su comune localita' provincia
|
|
const TRectype& com_rec = find_comune(clienti_campo);
|
|
const TString& dencom = com_rec.get(COM_DENCOM);
|
|
|
|
ws = clienti_campo.get(CLI_LOCCF).as_string(); //ort01
|
|
if (dencom.full())
|
|
{
|
|
if (ws.blank())
|
|
ws = dencom;
|
|
else
|
|
{
|
|
ws.upper();
|
|
if (xvt_str_fuzzy_compare(ws, dencom) < 0.75)
|
|
ws << ", " << dencom;
|
|
}
|
|
}
|
|
clienti_sap.set("ORT01", TVariant(ws));
|
|
|
|
clienti_sap.set("PSTLZ", clienti_campo.get(CLI_CAPCF)); //pstlz
|
|
|
|
clienti_sap.set("LAND1", clienti_campo.get(CLI_STATOCF)); //land1
|
|
|
|
clienti_sap.set("REGIO", TVariant(com_rec.get(COM_PROVCOM))); //regio
|
|
|
|
clienti_sap.set("SPRAS", clienti_campo.get(CLI_CODLIN)); //spras
|
|
|
|
ws = clienti_campo.get(CLI_PTELEX).as_string(); //telx1
|
|
ws << clienti_campo.get(CLI_TELEX).as_string();
|
|
clienti_sap.set("TELX1", TVariant(ws));
|
|
|
|
ws = clienti_campo.get(CLI_PTEL).as_string(); //telf1
|
|
ws << clienti_campo.get(CLI_TEL).as_string();
|
|
clienti_sap.set("TELF1", TVariant(ws));
|
|
|
|
ws = clienti_campo.get(CLI_PFAX).as_string(); //telfx
|
|
ws << clienti_campo.get(CLI_FAX).as_string();
|
|
clienti_sap.set("TELFX", TVariant(ws));
|
|
|
|
ws = clienti_campo.get(CLI_PTEL2).as_string(); //telf2
|
|
ws << clienti_campo.get(CLI_TEL2).as_string();
|
|
clienti_sap.set("TELF2", TVariant(ws));
|
|
|
|
ws = clienti_campo.get(CLI_COFI).as_string();
|
|
clienti_sap.set("STCD1", TVariant(ws)); //stcd1
|
|
|
|
if (is_cofi(ws)) //stkzn
|
|
clienti_sap.set("STKZN", TVariant("X"));
|
|
|
|
ws = clienti_campo.get(CLI_STATOPAIV).as_string(); //stceg
|
|
ws << clienti_campo.get(CLI_PAIV).as_string();
|
|
clienti_sap.set("STCEG", TVariant(ws));
|
|
|
|
ws = clienti_campo.get(CLI_CODPAG).as_string(); //zterm
|
|
TString* codpag = (TString*)_codpag_c.objptr(ws);
|
|
if (codpag == NULL) //deve gestire la condpag assente
|
|
ws = "R007";
|
|
else
|
|
ws = *codpag;
|
|
clienti_sap.set("ZTERM", TVariant(ws));
|
|
|
|
if (ws == "R000") //zwels
|
|
clienti_sap.set("ZWELS", TVariant("2"));
|
|
else
|
|
clienti_sap.set("ZWELS", TVariant("D"));
|
|
|
|
clienti_sap.set("EIKTO", clienti_campo.get(CLI_CODCF)); //eikto
|
|
|
|
} //for(move_first()..
|
|
|
|
//scrivitore in formato xls
|
|
clienti_sap.save_as(path, fmt_silk);
|
|
#ifdef DBG
|
|
xvt_sys_goto_url(path, "open");
|
|
#endif
|
|
|
|
}
|
|
|
|
//Fornitori
|
|
const TString& TEsporta_SAP_app::find_dencom_nasc(TString& codcom) const
|
|
{
|
|
TToken_string key;
|
|
key.add(" ");
|
|
key.add(codcom);
|
|
return cache().get(LF_COMUNI, key, COM_DENCOM);
|
|
}
|
|
|
|
void TEsporta_SAP_app::esporta_fornitori(const TString& path) const
|
|
{
|
|
TString query;
|
|
query << "USE CLIFO";
|
|
query << "\nFROM TIPOCF='F'";
|
|
query << "\nTO TIPOCF='F'";
|
|
TISAM_recordset fornitori_campo(query);
|
|
|
|
TEsporta_SAP_fornitori_recordset fornitori_sap;
|
|
|
|
const int cazzoni = fornitori_campo.items();
|
|
TProgind pi(cazzoni, "Trasferimento fornitori...", true, true);
|
|
TString ws;
|
|
for (bool ok = fornitori_campo.move_first(); ok; ok = fornitori_campo.move_next())
|
|
{
|
|
if (!pi.addstatus(1))
|
|
break;
|
|
|
|
const long codcf = fornitori_campo.get(CLI_CODCF).as_int();
|
|
if (!check_clifo('F', codcf))
|
|
continue;
|
|
|
|
//creazione di un nuovo record di tipo fornitori..
|
|
fornitori_sap.new_rec();
|
|
//..e successivo riempimento
|
|
fornitori_sap.set("ACCVE", codcf); //codcf
|
|
|
|
const long conto = fornitori_campo.get(CLI_CONTO).as_int(); //account e recon
|
|
switch (conto)
|
|
{
|
|
case 1:
|
|
fornitori_sap.set("ACCOUNT", TVariant("Z009"));
|
|
fornitori_sap.set("RECON", TVariant("40001000"));
|
|
break;
|
|
case 2:
|
|
fornitori_sap.set("ACCOUNT", TVariant("Z003"));
|
|
if (fornitori_campo.get(CLI_OCCAS).as_bool())
|
|
fornitori_sap.set("RECON", TVariant("43009006"));
|
|
else
|
|
fornitori_sap.set("RECON", TVariant("43009051"));
|
|
break;
|
|
case 3:
|
|
fornitori_sap.set("ACCOUNT", TVariant("Z007"));
|
|
fornitori_sap.set("RECON", TVariant("40001001"));
|
|
break;
|
|
case 13:
|
|
fornitori_sap.set("ACCOUNT", TVariant("Z001"));
|
|
fornitori_sap.set("RECON", TVariant("40001000"));
|
|
break;
|
|
default:
|
|
fornitori_sap.set("ACCOUNT", TVariant(""));
|
|
fornitori_sap.set("RECON", TVariant(""));
|
|
break;
|
|
}
|
|
|
|
fornitori_sap.set("NAME1", fornitori_campo.get(CLI_RAGSOC)); //name1 e name2
|
|
|
|
fornitori_sap.set("STREET", fornitori_campo.get(CLI_INDCF)); //street
|
|
|
|
fornitori_sap.set("HOUSEN", fornitori_campo.get(CLI_CIVCF)); //housen
|
|
|
|
//pocci su comune localita' provincia
|
|
const TRectype& com_rec = find_comune(fornitori_campo);
|
|
|
|
fornitori_sap.set("DISTR", fornitori_campo.get(CLI_LOCCF)); //distr
|
|
|
|
fornitori_sap.set("ZIP", fornitori_campo.get(CLI_CAPCF)); //zip
|
|
|
|
fornitori_sap.set("CITY", TVariant(com_rec.get(COM_DENCOM))); //city
|
|
|
|
fornitori_sap.set("COUNTRY", fornitori_campo.get(CLI_STATOCF)); //country
|
|
|
|
fornitori_sap.set("REGION", TVariant(com_rec.get(COM_PROVCOM))); //region
|
|
|
|
fornitori_sap.set("LANG", fornitori_campo.get(CLI_CODLIN)); //lang
|
|
|
|
ws = fornitori_campo.get(CLI_PTEL).as_string(); //tel
|
|
ws << fornitori_campo.get(CLI_TEL).as_string();
|
|
fornitori_sap.set("TEL", TVariant(ws));
|
|
|
|
ws = fornitori_campo.get(CLI_PTEL2).as_string(); //tel2
|
|
ws << fornitori_campo.get(CLI_TEL2).as_string();
|
|
fornitori_sap.set("TEL2", TVariant(ws));
|
|
|
|
ws = fornitori_campo.get(CLI_PFAX).as_string(); //fax
|
|
ws << fornitori_campo.get(CLI_FAX).as_string();
|
|
fornitori_sap.set("FAX", TVariant(ws));
|
|
|
|
ws = fornitori_campo.get(CLI_COFI).as_string(); //taxc1
|
|
fornitori_sap.set("TAXC1", TVariant(ws));
|
|
|
|
//pocci per le persone fisiche (luogo e data nascita, sesso ed amenita' simili)
|
|
if (is_cofi(ws))
|
|
{
|
|
fornitori_sap.set("TIPOP", TVariant("X")); //tipop
|
|
|
|
ws = fornitori_campo.get(CLI_CODANAGPER).as_string();
|
|
const TRectype& anafis_rec = cache().get(LF_ANAGFIS, ws);
|
|
if (anafis_rec.get(ANF_SESSO) == "M") //sex
|
|
fornitori_sap.set("SEX", TVariant("1"));
|
|
else
|
|
fornitori_sap.set("SEX", TVariant("2"));
|
|
|
|
ws = fornitori_campo.get(CLI_COMNASC).as_string(); //birthl
|
|
//se il luogo di nascita e' nel file clifo...
|
|
if (ws.full())
|
|
ws = find_dencom_nasc(ws);
|
|
//..senno' puo' essere in anagrafica persone fisiche
|
|
else
|
|
{
|
|
ws = anafis_rec.get(ANF_COMNASC);
|
|
if (ws.full())
|
|
ws = find_dencom_nasc(ws);
|
|
}
|
|
fornitori_sap.set("BIRTHL", TVariant(ws));
|
|
|
|
TDate datanasc = fornitori_campo.get(CLI_DATANASC).as_date(); //birthd
|
|
//se la data di nascita non e' nel clifo puo' essere in anagrafica persone fisiche
|
|
if (datanasc.empty())
|
|
datanasc = anafis_rec.get_date(ANF_DATANASC);
|
|
fornitori_sap.set("BIRTHD", TVariant(datanasc));
|
|
|
|
} //if(is_cofi(...
|
|
|
|
ws = fornitori_campo.get(CLI_STATOPAIV).as_string(); //vatrn
|
|
ws << fornitori_campo.get(CLI_PAIV).as_string();
|
|
fornitori_sap.set("VATRN", TVariant(ws));
|
|
|
|
/* ws = fornitori_campo.get(CLI_CODABI).as_string(); //bankk
|
|
ws << fornitori_campo.get(CLI_CODCAB).as_string();
|
|
fornitori_sap.set("BANKK", TVariant(ws));
|
|
|
|
fornitori_sap.set("BANKA", fornitori_campo.get(CLI_NUMCC));*/ //banka
|
|
|
|
ws = fornitori_campo.get(CLI_CODPAG).as_string(); //paytr e paymt
|
|
TToken_string* codpag = (TToken_string*)_codpag_f.objptr(ws);
|
|
if(codpag != NULL)
|
|
{
|
|
fornitori_sap.set("PAYTR", TVariant(codpag->get(0)));
|
|
fornitori_sap.set("PAYMT", TVariant(codpag->get(1)));
|
|
}
|
|
else //il codice non esiste in tabella!
|
|
{
|
|
fornitori_sap.set("PAYTR", TVariant(""));
|
|
fornitori_sap.set("PAYMT", TVariant(""));
|
|
}
|
|
|
|
} //for(move_first()..
|
|
|
|
//scrivitore in formato xls
|
|
fornitori_sap.save_as(path, fmt_silk);
|
|
#ifdef DBG
|
|
xvt_sys_goto_url(path, "open");
|
|
#endif
|
|
}
|
|
|
|
|
|
const TString& TEsporta_SAP_app::format_data(const TDate& data) const
|
|
{
|
|
TString& ws = get_tmp_string();
|
|
//nuovo modo
|
|
ws.format("%02d%02d%04d", data.day(), data.month(), data.year());
|
|
return ws;
|
|
}
|
|
|
|
const TString& TEsporta_SAP_app::trova_il_codsap(const char tipo, const char sezione) const
|
|
{
|
|
TString& ws = get_tmp_string();
|
|
if (tipo == 'C')
|
|
{
|
|
if (sezione == 'A')
|
|
ws = "04";
|
|
else
|
|
ws = "50";
|
|
}
|
|
else
|
|
{
|
|
if (sezione == 'A')
|
|
ws = "34";
|
|
else
|
|
ws = "40";
|
|
}
|
|
return ws;
|
|
}
|
|
|
|
//Partite
|
|
void TEsporta_SAP_app::esporta_partite(const TMask& msk, const char tipo) const
|
|
{
|
|
TString query;
|
|
query << "USE PART";
|
|
query << "\nSELECT CHIUSA!=\"X\"";
|
|
if (tipo == 'C')
|
|
{
|
|
query << "\nFROM TIPOC=C";
|
|
query << "\nTO TIPOC=C";
|
|
}
|
|
else
|
|
{
|
|
query << "\nFROM TIPOC=F";
|
|
query << "\nTO TIPOC=F";
|
|
}
|
|
|
|
TISAM_recordset partite_campo(query);
|
|
|
|
TEsporta_SAP_partite_recordset partite_sap;
|
|
|
|
const int cazzoni = partite_campo.items();
|
|
TProgind pi(cazzoni, "Trasferimento partite...", true, true);
|
|
TString ws;
|
|
TDate data;
|
|
TVariant datadoc, numdoc, descr, datareg;
|
|
for (bool ok = partite_campo.move_first(); ok; ok = partite_campo.move_next())
|
|
{
|
|
if (!pi.addstatus(1))
|
|
break;
|
|
|
|
long nriga = partite_campo.get(PART_NRIGA).as_int();
|
|
if (nriga < 9999)
|
|
{
|
|
if (partite_campo.get(PART_TIPOMOV).as_int() == 1)
|
|
{
|
|
datadoc = partite_campo.get(PART_DATADOC);
|
|
numdoc = partite_campo.get(PART_NUMDOC);
|
|
descr = partite_campo.get(PART_DESCR);
|
|
|
|
datareg = partite_campo.get(PART_DATAREG);
|
|
}
|
|
}
|
|
else //e' la riga saldo
|
|
{
|
|
//creazione di un nuovo record di tipo partite..
|
|
//record tipo BBKPF+BBSEG(1)+BBSEG(2)
|
|
partite_sap.new_rec("");
|
|
|
|
data = datadoc.as_date();
|
|
ws = format_data(data);
|
|
partite_sap.set("BLDAT", TVariant(ws));
|
|
partite_sap.set("BLART", TVariant(tipo == 'C' ? "CA" : "V1"));
|
|
data = msk.get_date(F_TODAY);
|
|
ws = format_data(data);
|
|
partite_sap.set("BUDAT", TVariant(ws));
|
|
partite_sap.set("XBLNR", numdoc);
|
|
partite_sap.set("BKTXT", TVariant(tipo == 'C' ? "CONV. P.A. CLIENTI" : "CONV. P.A. FORNITORI"));
|
|
|
|
|
|
const char sezione = partite_campo.get(PART_SEZ).as_string()[0];
|
|
|
|
//ws = trova_il_codsap(tipo, sezione);
|
|
partite_sap.set("NEWBS", TVariant(tipo == 'C' ? "04" : "34"));
|
|
//ws = trova_il_codsap(tipo, sezione == 'A' ? 'D' : 'A');
|
|
partite_sap.set("ZNEWBS", TVariant(tipo == 'C' ? "50" : "40"));
|
|
|
|
partite_sap.set("NEWKO", partite_campo.get(PART_SOTTOCONTO));
|
|
partite_sap.set("ZNEWKO", TVariant(tipo == 'C' ? "48999998" : "48999999"));
|
|
|
|
ws = partite_campo.get(PART_IMPORTO).as_string();
|
|
ws.replace('.', ',');
|
|
partite_sap.set("WRBTR", TVariant(ws));
|
|
partite_sap.set("ZWRBTR", TVariant(ws));
|
|
|
|
|
|
data = datareg.as_date();
|
|
ws = format_data(data);
|
|
partite_sap.set("ZFBDT", TVariant(ws));
|
|
|
|
partite_sap.set("SGTXT", descr);
|
|
partite_sap.set("ZSGTXT", descr);
|
|
|
|
} //else di if(nriga<9999...
|
|
} //for(move_first()..
|
|
|
|
|
|
//scrivitore in formato xls
|
|
TString path;
|
|
if (tipo == 'C')
|
|
path = msk.get(F_PARTFILEC);
|
|
else
|
|
path = msk.get(F_PARTFILEF);
|
|
|
|
partite_sap.save_as(path, fmt_silk);
|
|
#ifdef DBG
|
|
xvt_sys_goto_url(path, "open");
|
|
/*
|
|
//se volessimo il report...
|
|
TAS400_report rep(partite_sap);
|
|
TReport_book book;
|
|
book.add(rep);
|
|
book.preview();*/
|
|
#endif
|
|
}
|
|
|
|
|
|
|
|
void TEsporta_SAP_app::main_loop()
|
|
{
|
|
open_files(LF_CLIFO, LF_MOV, LF_RMOV, LF_PARTITE, LF_COMUNI, 0);
|
|
|
|
//crea tabella trascodifica clienti
|
|
//condizione di pagamento
|
|
_codpag_c.add("BB", new TString("R000"));
|
|
_codpag_c.add("B09", new TString("R002"));
|
|
_codpag_c.add("B01", new TString("R003"));
|
|
_codpag_c.add("BB09", new TString("R004"));
|
|
_codpag_c.add("B05", new TString("R004"));
|
|
_codpag_c.add("B07", new TString("R005"));
|
|
_codpag_c.add("B03", new TString("R007"));
|
|
_codpag_c.add("B04", new TString("R007"));
|
|
_codpag_c.add("B11", new TString("R007"));
|
|
_codpag_c.add("BB30", new TString("R007"));
|
|
_codpag_c.add("B08", new TString("R009"));
|
|
_codpag_c.add("BB60", new TString("R009"));
|
|
_codpag_c.add("B10", new TString("R010"));
|
|
_codpag_c.add("BB90", new TString("R010"));
|
|
|
|
//crea tabella trascodifica fornitori
|
|
_codpag_f.add("BB", new TToken_string("P000|E"));
|
|
_codpag_f.add("RB", new TToken_string("P000|I"));
|
|
_codpag_f.add("RD", new TToken_string("P000|G"));
|
|
_codpag_f.add("RD0", new TToken_string("P000|G"));
|
|
_codpag_f.add("RD1", new TToken_string("P000|G"));
|
|
_codpag_f.add("RID", new TToken_string("P000|G"));
|
|
_codpag_f.add("", new TToken_string("P000|O")); //pagamento in contanti
|
|
_codpag_f.add("B09", new TToken_string("P002|E"));
|
|
_codpag_f.add("RB4", new TToken_string("P002|I"));
|
|
_codpag_f.add("RD03", new TToken_string("P002|G"));
|
|
_codpag_f.add("RD8", new TToken_string("P002|G"));
|
|
_codpag_f.add("B01", new TToken_string("P003|E"));
|
|
_codpag_f.add("RB5", new TToken_string("P003|I"));
|
|
_codpag_f.add("RD7", new TToken_string("P003|G"));
|
|
_codpag_f.add("BB09", new TToken_string("P004|E"));
|
|
_codpag_f.add("RB09", new TToken_string("P004|I"));
|
|
_codpag_f.add("RB7", new TToken_string("P004|I"));
|
|
_codpag_f.add("RB9", new TToken_string("P004|I"));
|
|
_codpag_f.add("RD10", new TToken_string("P004|G"));
|
|
_codpag_f.add("RD90", new TToken_string("P004|G"));
|
|
_codpag_f.add("RDD", new TToken_string("P004|G"));
|
|
_codpag_f.add("B07", new TToken_string("P005|E"));
|
|
_codpag_f.add("RBA", new TToken_string("P005|I"));
|
|
_codpag_f.add("RDE", new TToken_string("P005|G"));
|
|
_codpag_f.add("B03", new TToken_string("P007|E"));
|
|
_codpag_f.add("B04", new TToken_string("P007|E"));
|
|
_codpag_f.add("B11", new TToken_string("P007|E"));
|
|
_codpag_f.add("BB30", new TToken_string("P007|E"));
|
|
_codpag_f.add("RB3", new TToken_string("P007|I"));
|
|
_codpag_f.add("RD2", new TToken_string("P007|G"));
|
|
_codpag_f.add("RD30", new TToken_string("P007|G"));
|
|
_codpag_f.add("B08", new TToken_string("P009|E"));
|
|
_codpag_f.add("BB60", new TToken_string("P009|E"));
|
|
_codpag_f.add("RB6", new TToken_string("P009|I"));
|
|
_codpag_f.add("RD3", new TToken_string("P009|G"));
|
|
_codpag_f.add("RD60", new TToken_string("P009|G"));
|
|
_codpag_f.add("B10", new TToken_string("P047|E"));
|
|
_codpag_f.add("BB90", new TToken_string("P047|E"));
|
|
_codpag_f.add("RB61", new TToken_string("P047|I"));
|
|
_codpag_f.add("RD4", new TToken_string("P047|G"));
|
|
_codpag_f.add("RD41", new TToken_string("P048|G"));
|
|
|
|
|
|
TEsporta_SAP_mask m;
|
|
|
|
while (m.run() == K_ENTER)
|
|
{
|
|
if (m.get_bool(F_CLIENTI))
|
|
esporta_clienti(m.get(F_CLIFILE));
|
|
if (m.get_bool(F_FORNITORI))
|
|
esporta_fornitori(m.get(F_FORNFILE));
|
|
|
|
if (m.get_bool(F_PARTITEC))
|
|
{
|
|
esporta_partite(m, 'C');
|
|
m.set(F_LASTDATAC, m.get(F_TODAY));
|
|
m.set(F_LASTNUMC, m.get(F_NEXTNUMC));
|
|
}
|
|
if (m.get_bool(F_PARTITEF))
|
|
{
|
|
esporta_partite(m, 'F');
|
|
m.set(F_LASTDATAF, m.get(F_TODAY));
|
|
m.set(F_LASTNUMF, m.get(F_NEXTNUMF));
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
int pd0666100(int argc, char* argv[])
|
|
{
|
|
TEsporta_SAP_app app;
|
|
app.run(argc, argv, TR("Esportazione a SAP"));
|
|
return 0;
|
|
}
|