campo-sirio/db/dbcv00.cpp
alex 16258dc547 Patch level : xx.502
Files correlati     :
Ricompilazione Demo : [ ]
Commento            : Riportata la versione 10.05 patch 502


git-svn-id: svn://10.65.10.50/trunk@8388 c028cbd2-c16b-5b4b-a496-9718f37d4682
1999-07-16 14:59:11 +00:00

1565 lines
46 KiB
C++
Executable File

#include "dbcv.h"
#include "dbcv09.h"
#include "dbcv00a.h"
#include <automask.h>
#include <applicat.h>
#include <execp.h>
#include "..\mg\anamag.h"
#include "..\mg\mag.h"
#include "..\include\doc.h"
#include "..\include\rdoc.h"
typedef void (*SET_DOC_FUN)(TImport_file & import,TConfig &trans);
typedef bool (*FILTER_FUN)(TImport_file & import);
class TImporta_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TImporta_mask() :TAutomask("dbcv00a.msk"){}
};
bool TImporta_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return TRUE;
}
class TImporta_BPCS : public TSkeleton_application
{
TLocalisamfile * _dist, *_rdist, * _anamag, *_umart, *_codcorr,*_mag;
private:
void delete_ghosts();
void delete_arts();
bool delete_boms();
int read_last_rdist(const char *item_code);
bool read_is_dist(const char *item_code);
bool is_ghost(const char *item_code);
const char * read_first_um(const char *item_code);
bool creadocs(const char * msg,
long firm, TImport_file & imp_file,
const char *FieldNumDoc, const char *FieldClifor, const char *FieldDataDoc,const char *FieldGroup1, const char *FieldGroup2, const char *FieldGroup3,
SET_DOC_FUN set_header, SET_DOC_FUN set_body, FILTER_FUN filter );
void clear_docs(long firm, const char * num, TDate *fromdate=NULL, TDate *todate=NULL);
void newums();
protected:
virtual bool create();
virtual bool destroy();
bool importa_boms(TMask &m);
bool cambia_gmc(TMask & m);
bool importa_arts(TMask &m, const bool erase, const bool sologhost=FALSE);
bool importa_ums_BP(TMask &m);
bool importa_ordacq(TMask & m);
bool importa_ordcli(TMask & m);
bool importa_ordprod(TMask & m);
bool importa_movmag(TMask & m, bool segrate=FALSE, bool trieste=FALSE);
protected:
virtual void main_loop() ;
};
bool TImporta_BPCS::create()
{
_dist = new TLocalisamfile(LF_DIST);
_rdist = new TLocalisamfile(LF_RDIST);
_anamag = new TLocalisamfile(LF_ANAMAG);
_umart = new TLocalisamfile(LF_UMART);
_codcorr = new TLocalisamfile(LF_CODCORR);
_mag = new TLocalisamfile(LF_MAG);
return TSkeleton_application::create();
}
bool TImporta_BPCS::destroy()
{
delete _dist;
delete _rdist;
delete _anamag;
delete _umart;
delete _codcorr;
delete _mag;
return TSkeleton_application::destroy();
}
int TImporta_BPCS::read_last_rdist(const char *item_code)
{
static TString prevcode="";
static int nrig=0;
if (prevcode!=item_code)
{
prevcode=item_code;
nrig=0;
_rdist->put("CODDIST",item_code);
int err=_rdist->read(_isgteq);
while (err==NOERR && _rdist->get("CODDIST")==item_code)
{
nrig++;
err=_rdist->next();
}
}
return ++nrig;
}
bool TImporta_BPCS::read_is_dist(const char *item_code)
{
const TRectype & rec=cache().get(LF_DIST,item_code);
if (!rec.empty())
return TRUE;
return FALSE;
}
bool TImporta_BPCS::is_ghost(const char *item_code)
{
const TRectype & rec=cache().get(LF_DIST,item_code);
if (!rec.empty())
return rec.get_bool("VIRTUALE") && !rec.get_bool("ARTPROD")&& !rec.get_bool("ARTACQ") ;
return FALSE;
}
const char * TImporta_BPCS::read_first_um(const char *item_code)
{
TToken_string key(item_code);
key.add(1);
const TRectype & rec=cache().get(LF_UMART,key);
if (rec.empty())
error_box("Impossibile trovare l'item %s",item_code);
return rec.get("UM");
}
// cancella gli articoli
void TImporta_BPCS ::delete_arts()
{
TIndwin info(60,"Cancellazione articoli...",FALSE,FALSE);
int err;
_anamag->first();
for (long i=_anamag->items(); i>0; i--)
{
_anamag->readat(i);
err=_anamag->remove();
if ((i%TICK)==0)
do_events();
}
}
// cancella le distinte che non sono lavorazioni
bool TImporta_BPCS ::delete_boms()
{
bool retv=FALSE;
TWait_cursor hourglass;
TIndwin info(60,"Cancellazione distinte...",FALSE,FALSE);
// distinte
for (long i=_dist->items(); i>0; i--)
{
_dist->readat(i);
if (cache().get("LAV",_dist->get("CODDIST")).empty())
{
// non e' una lavorazione
_dist->remove();
}
if ((i%TICK)==0)
do_events();
}
// righe distinte
for (i=_rdist->items(); i>0; i--)
{
_rdist->readat(i);
if (_rdist->get("TIPO")!="L" ||
_rdist->get("CODCOMP").left(5)=="ACQUA")
{
// non e' una lavorazione interessante
_rdist->remove();
}
else
{
_rdist->put("NRIG",_rdist->get("NRIG")+200);
_rdist->rewrite();
retv=TRUE;
}
if ((i%TICK)==0)
do_events();
}
return retv;
}
// elimina i ghost "di servizio"
void TImporta_BPCS ::delete_ghosts()
{
TWait_cursor hourglass;
TIndwin info(60,"Cancellazione distinte fantasma inutili...",FALSE,FALSE);
TLocalisamfile dist(LF_DIST);
_dist->first();
while (!_dist->eof())
{
do_events();
if (_dist->get_bool("VIRTUALE") && !_dist->get_bool("ARTPROD")&& !_dist->get_bool("ARTACQ") )// fantasma
{
TString codice=_dist->get("CODDIST");
if (codice.find("__") < 0) // non appartiene ad uno stabilimento particolare
_dist->remove();
}
_dist->next();
}
}
bool TImporta_BPCS ::importa_boms(TMask &m)
{
TWait_cursor hourglass;
cache().flush(LF_DIST);
cache().flush(LF_ANAMAG);
cache().flush(LF_UMART);
TSupport_file morti(LF_DIST,ANAGRAFICA_MORTI);
TImport_file boms(m.get(F_PATH), BPCS_DISTINTE);
TProgind info(boms.items(),"Importazione distinte...",TRUE,TRUE);
TToken_string imported_lcode,dead_lcode,skipped_lcode,current_lcode;
TString old_code,item_code,last_code;
TString8 impianto,main_imp;
int bseq=0;
boms.first();
while (!boms.eof())
{
info.addstatus(1);
if (info.iscancelled())
return FALSE;
// converte ogni distinta ancora valida
old_code=(boms.get_codice("BPROD"));
impianto=(boms.get("BMWHS"));
int metodo(int(boms.get_long("BMBOMM")));
current_lcode.add(old_code,0);
current_lcode.add(impianto,1);
current_lcode.add(metodo,2);
const long ddis=boms.get_long("BDDIS");
bool skip=!((ddis==99999999)||(ddis==9999999)||(ddis==999999)||(ddis==99999));
if (skipped_lcode==current_lcode || dead_lcode==current_lcode)
skip = TRUE;
if (!skip && m.get_bool(F_CHECKDEADARTS))
{
morti.put("CODDIST",old_code);
if (morti.read()==NOERR)
{
skip=TRUE;
skipped_lcode=current_lcode;
}
}
if (!skip && atol(boms.get("BDEFF"))<m.get_int(F_ANNO)*10000L)
{
if (skipped_lcode==current_lcode || dead_lcode==current_lcode)
skip = TRUE;
else
{
TTimed_skipbox bbox(format("La distinta %s (%s), di %s metodo '%02d', risale al %s; ignoro l'importazione ?",
(const char *)old_code,
(const char *)cache().get(LF_ANAMAG,old_code).get("DESCR"),
(const char *)impianto,
metodo,
(const char *)boms.get("BDEFF")),60);
if (skip=(bbox.run()==K_ESC))
{
if (noyes_box("Ignoro l'importazione di tutti i metodi del codice %s?",(const char *) old_code))
{
morti.put("CODDIST",old_code);
morti.write();
dead_lcode=current_lcode;
}
skipped_lcode=current_lcode;
}
}
}
// importa solo gli impianti SEgrate e TrieSte
if (!skip && metodo == 99 && (impianto=="SE" || impianto=="TS" ))
{
main_imp=impianto;
do {
if (impianto == "PD")
impianto = "PR";
if (metodo==7)
{
impianto = "PD";
metodo = 0;
}
const TString8 father_grmerc= cache().get(LF_ANAMAG,old_code).get("GRMERC");
if (metodo!=0)
{
if (metodo==99)
{
if (cache().get(LF_ANAMAG,old_code ).get(ANAMAG_GRMERC)[0]!='F')
message_box("Il codice %s con metodo 99 non e' un finito",(const char *)old_code);
// sconfezionamento
impianto=format("%s9%02d",(const char *)main_imp,metodo);
if (cache().get("LNP",impianto).empty())
{
cache().discard("LNP",impianto);
// inserisce la linea di sconfezionamento
TTable imp("LNP");
imp.put("CODTAB",impianto);
imp.put("S0","Riconfezionamento/sconfezionamento");
imp.put("S6",main_imp);
imp.put("S7",format("%s1",(const char *) impianto));
imp.put("B9","X");
imp.write();
}
}
else
{
// terzisti
impianto=format("X%02d%s",metodo,(const char *)main_imp);
if (cache().get("LNP",impianto).empty())
{
cache().discard("LNP",impianto);
// inserisce il terzista come linea produttiva sull'impianto esterno
TTable imp("LNP");
imp.put("CODTAB",impianto);
imp.put("S0",format("%s (%s)",descr_method(metodo),(const char *) impianto));
imp.put("S6","XT");
imp.put("S7",format("%s3%02d",(const char *) impianto,metodo));
imp.put("B9","X");
imp.write();
}
}
}
// padre
TString descr,um_f(read_first_um(old_code));
TString item_code=old_code;
item_code << "__" << impianto;
const bool father_ghost= is_ghost(old_code);
if (father_ghost)
descr=cache().get(LF_DIST,old_code).get("DESCR");
else
descr=cache().get(LF_ANAMAG,old_code).get("DESCR");
if (!father_ghost && item_code!=last_code)
{
// se non e' un fantasma lo definisce come variante (distinta contenente una riga di tipo variabile)
if (cache().get(LF_DIST,old_code).empty())
{
cache().discard(LF_DIST,old_code);
_dist->zero();
_dist->put("CODDIST", old_code);
_dist->put("DESCR", descr);
_dist->put("VIRTUALE", " ");
_dist->put("MASTER", "X");
_dist->put("ARTPROD", "X");
_dist->put("UM", um_f);
TString varvar("VARIANTE=");
varvar << "_DISTINTA+\"__\"+IF(_IMPIANTO!=\"XT\",_IMPIANTO,_LINEA)" ;
_dist->put("PARAMETRI",varvar);
int err=_dist->write();
if (err!=_isreinsert)
{
_rdist->zero();
_rdist->put("CODDIST", old_code);
_rdist->put("NRIG", 1 );
_rdist->put("TIPO", "V" );
_rdist->put("CODCOMP", "VARIANTE" );
_rdist->put("UM", "");
_rdist->put("EXPR", 1 );
_rdist->write();
}
}
}
// figlio
TString son_code=boms.get_codice("BCHLD");
TString um_s=read_first_um(son_code) ;
const bool son_ghost=is_ghost(son_code);
if (son_ghost)
son_code << "__" << impianto ;
// scrivi la bom
if (last_code!=item_code)
{
if (cache().get(LF_DIST,item_code).empty())
{
cache().discard(LF_DIST,item_code);
descr << " (impianto " << main_imp << ")";
_dist->zero(' ');
_dist->put("CODDIST", item_code);
_dist->put("DESCR", descr);
_dist->put("VIRTUALE", "X" );
_dist->put("ARTPROD", "");
_dist->put("UM", "BP");
if (impianto.left(2)!= "XT")
{
// l'albero della distinte di un impianto e' su qyell'impianto
// i terzisti seguono l'impianto di pianificazione
TString varimp("_IMPIANTO=");
varimp << '"'<< main_imp <<'"';
_dist->put("PARAMETRI",varimp);
}
_dist->write(); // fallisce se esiste gia'
_umart->zero(' ');
_umart->put("CODART",item_code);
_umart->put("NRIGA",1);
_umart->put("UM",um_f);
_umart->put("FC","1");
force_write(*_umart);
}
last_code=item_code;
if (bseq>0 || (impianto != "PD" && impianto != "PR"))
bseq=0;
}
if (impianto == "PD")
bseq--;
else if (impianto != "PR")
bseq++;
if (bseq==0) error_box("Numero riga 0 per %s / %s",(const char *)item_code,(const char *)son_code);
_rdist->zero(' ');
_rdist->put("CODDIST", item_code);
_rdist->put("NRIG", bseq >0 ? bseq : -bseq);
if (son_ghost)
_rdist->put("TIPO", "D");
else if (son_code=="ACQUA" || son_code=="ACQUADEION")
_rdist->put("TIPO", "L");
else
_rdist->put("TIPO", "A");
_rdist->put("CODCOMP", son_code );
_rdist->put("UM", um_s);
_rdist->put("EXPR", boms.get_real("BQREQ") );
_rdist->write();
imported_lcode=current_lcode;
} while (impianto == "PD");
}
boms.next();
}
delete_ghosts();
return TRUE;
}
void TImporta_BPCS ::newums()
{
_dist->first();
TString item_code,ghostcode;
while (!_dist->eof())
{
if (_dist->get_bool("VIRTUALE") && !_dist->get_bool("ARTPROD")&& !_dist->get_bool("ARTACQ") )// fantasma
{
item_code=_dist->get("CODDIST");
int pos=item_code.find("__");
if (pos>=0)
{
ghostcode=item_code;
ghostcode.cut(pos);
_umart->zero();
_umart->put("CODART",ghostcode);
_umart->put("NRIGA",1);
if (_umart->read()==NOERR)
{
_umart->put("CODART",item_code);
force_write(*_umart);
}
}
}
_dist->next();
}
}
// importa le ums dal file di anagrafica
bool TImporta_BPCS ::importa_arts(TMask & m, const bool erase, const bool sologhost)
{
TWait_cursor hourglass;
cache().flush(LF_ANAMAG);
cache().flush(LF_DIST);
cache().flush(LF_UMART);
if (erase)
delete_arts();
TSupport_file morti(LF_DIST,ANAGRAFICA_MORTI);
TImport_file items_ext(m.get(F_PATH),BPCS_IMPORTEX);
TImport_file items(m.get(F_PATH),BPCS_ANAGRAFICA);
TString item_code,item_type,tmp;
bool skip;
TProgind info(items.items(),sologhost ? "Importazione distinte fantasma...":"Importazione articoli e distinte fantasma...",TRUE,TRUE);
items_ext.first();
items.first();
while (!items.eof())
{
info.addstatus(1);
if (info.iscancelled())
return FALSE;
item_type=items.get("IITYP");
if (items.get("IID")=="IM" && atoi(item_type)!=6)
{
item_code=items.get_codice("IPROD");
skip=FALSE;
// sincronizza il file dell'anagrafica Importex
while (!sologhost && items_ext.get_codice("MSITE")<item_code && !items_ext.eof())
items_ext.next();
morti.put("CODDIST",item_code);
if ((!m.get_bool(F_CHECKDEADARTS) || morti.read()!=NOERR) &&
item_type=="0" || !sologhost)
{
if (item_type=="0") // fantasma
{
_dist->zero();
_dist->put("CODDIST",item_code);
_dist->put("DESCR",items.get("IDESC"));
_dist->put("VIRTUALE", "X" );
_dist->put("ARTPROD", " ");
force_write(*_dist);
} else {
_anamag->zero();
_anamag->put( ANAMAG_CODART,item_code);
_anamag->put( ANAMAG_DESCR,items.get("IDESC"));
_anamag->put( ANAMAG_DESCRAGG,items.get("IDSCE"));
_anamag->put( ANAMAG_CODFORN, items.get("IVEND"));
_anamag->put( ANAMAG_UMP, "KG");
_anamag->put( ANAMAG_PESO, items.get("IWGHT"));
// riordino
_anamag->put( ANAMAG_RIORDINO , "F"); //_anamag->put( ANAMAG_RIORDINO , items.get("IMRP")=="M" ? "F" : "P" );
_anamag->put( ANAMAG_GIORNIRIOR, items.get("ILEAD"));
_anamag->put( ANAMAG_LOTTORIOR, items.get("ILOTS"));
_anamag->put( ANAMAG_LOTTOIRIOR, items.get("IIOQ"));
//
_anamag->put( ANAMAG_PPCONF , items.get("IFII"));
_anamag->put( ANAMAG_PPCOLLO , items.get("IFII"));
TString16 gmc=items.get("IITYP");
switch (gmc[0])
{
case 'F':
case 'E':
case 'Z':
case 'G':
gmc[0]= 'F'; break;
case 'M':
gmc[0]= 'S'; break;
case 'P':
gmc[0]= 'C'; break;
}
TString16 iclas(items.get("ICLAS"));
if (!iclas.blank())
{
switch (m.get(F_ICLAS)[0])
{
case 'S':
complete_gmc(gmc, iclas);
break;
case 'C':
gmc << iclas;
break;
case ' ':
break;
}
}
_anamag->put( ANAMAG_GRMERC,gmc);
_anamag->put( ANAMAG_COSTSTD, items.get("ISCST"));
_anamag->put( ANAMAG_ULTCOS1, items.get("IACST"));
tmp=items.get("TAXC1");
if (tmp.left(3)=="IVA")
tmp=tmp.sub(3);
_anamag->put( ANAMAG_CODIVA , tmp);
if (items_ext.get_codice("MSITE")==items.get_codice("IPROD"))
{
_anamag->put( ANAMAG_CLASSDOG , check_clasdog(items_ext.get_long("MSTDO")));
_anamag->put( ANAMAG_USER1 , items_ext.get("MSIDR"));// idrati
_anamag->put( ANAMAG_USER2 , items_ext.get("MSANI"));//anidri
_anamag->put( ANAMAG_USER3 , items_ext.get("MSTAL"));//alcool
// dimensioni
_anamag->put( ANAMAG_USER4, items_ext.get("MSPLU"));
_anamag->put( ANAMAG_USER5, items_ext.get("MSPAL"));
_anamag->put( ANAMAG_USER6, items_ext.get("MSPPR"));
// composizione pallets
_anamag->put( ANAMAG_USER7, items_ext.get("MSCST")); // casse per strato
_anamag->put( ANAMAG_USER8, items_ext.get("MSSTP")); // strati per pallet
}
force_write(*_anamag);
real smin(items.get("IMIN"));
if (smin!=ZERO)
{
_mag->zero();
_mag->put(MAG_SCORTAMIN,smin);
_mag->put(MAG_ANNOES,"1999");
_mag->put(MAG_CODART,item_code);
_mag->put(MAG_NRIGA,1);
_mag->put(MAG_CODMAG,"SE1");
force_write(*_mag);
_mag->put(MAG_NRIGA,2);
_mag->put(MAG_CODMAG,"TS1");
force_write(*_mag);
}
}
TString16 um,ums(items.get("IUMS"));
real fc;
int nriga=1;
for (int u=0; u<3; u++)
{
switch (u)
{
case 1:
um=items.get("IUMP");
fc=items.get_real("IUMCN");
break;
case 2:
um=items.get("IUMR");
fc=items.get_real("IUMRC");
break;
default:
um=ums;
fc=1.0;
}
if (!um.blank() && (u==0 || um!=ums))
{
_umart->zero();
_umart->put("CODART",item_code);
_umart->put("NRIGA",nriga);
_umart->put("UM",um);
if (nriga==1)
_umart->put("PREZZO",items.get("ILIST"));
_umart->put("FC",fc);
force_write(*_umart);
nriga++;
}
} // fine ciclo unita' di misura
long ean=items.get_long("IDRAW");
if (!m.get(F_EAN).blank())
{
TString16 eancode=items.get("IDRAW");
if (ean!=0L || (eancode[0]>='A' && eancode[0]<='Z' && atol(eancode.sub(1))!=0L))
{
_codcorr->zero();
_codcorr->put("CODARTALT",eancode);
_codcorr->put("NRIGA",1);
_codcorr->put("TIPO",m.get(F_EAN));
_codcorr->put("CODART",item_code);
force_write(*_codcorr);
}
}
}
}
items.next();
}
return TRUE;
}
bool TImporta_BPCS ::cambia_gmc(TMask & m)
{
TWait_cursor hourglass;
cache().flush(LF_ANAMAG);
cache().flush(LF_DIST);
cache().flush(LF_UMART);
TImport_file items_ext(m.get(F_PATH),BPCS_IMPORTEX);
TImport_file items(m.get(F_PATH),BPCS_ANAGRAFICA);
TString item_code,item_type,tmp;
TProgind info(items.items(),"Importazione gruppi merceologici e classi doganali",TRUE,TRUE);
items_ext.first();
items.first();
while (!items.eof())
{
info.addstatus(1);
if (info.iscancelled())
return FALSE;
item_type=items.get("IITYP");
if (items.get("IID")=="IM" && atoi(item_type)!=6)
{
item_code=items.get_codice("IPROD");
if (item_type!="0") // fantasma
{
_anamag->zero();
_anamag->put( ANAMAG_CODART,item_code);
if (_anamag->read()==NOERR)
{
// sincronizza il file dell'anagrafica Importex
while (items_ext.get_codice("MSITE")<item_code && !items_ext.eof())
items_ext.next();
if (items_ext.get_codice("MSITE")==items.get_codice("IPROD"))
{
TString cld=check_clasdog(items_ext.get_long("MSTDO"));
if (!cld.blank())
_anamag->put( ANAMAG_CLASSDOG , cld);
}
TString16 gmc=items.get("IITYP");
switch (gmc[0])
{
case 'F':
case 'E':
case 'Z':
case 'G':
gmc[0]= 'F'; break; // finiti
case 'M':
gmc[0]= 'S'; break; // semilavorati ()
case 'P':
gmc[0]= 'C'; break; // componenti (parts)
}
TString16 iclas(items.get("ICLAS"));
if (!iclas.blank())
{
switch (m.get(F_ICLAS)[0])
{
case 'S':
complete_gmc(gmc, iclas);
break;
case 'C':
gmc << iclas;
break;
case ' ':
break;
}
}
_anamag->put( ANAMAG_GRMERC,gmc);
_anamag->rewrite();
}
}
}
items.next();
}
return TRUE;
}
// importa le ums dal file dei divisori
bool TImporta_BPCS ::importa_ums_BP(TMask & m)
{
TWait_cursor hourglass;
cache().flush(LF_UMART);
TImport_file divisori(m.get(F_PATH),BPCS_DIVISORI);
TProgind info(divisori.items(),"Importazione divisori (batch di produzione)...",TRUE,TRUE);
divisori.first();
TString item_code,impianto;
while (!divisori.eof())
{
info.addstatus(1);
if (info.iscancelled())
return FALSE;
impianto=divisori.get("ICFAC");
if (impianto=="SE" || impianto == "TS")
{
for (int falsi_terzisti=0;falsi_terzisti<3; falsi_terzisti++)
{
item_code=(divisori.get_codice("ICPROD"));
item_code << "__";
switch (falsi_terzisti)
{
case 1:
item_code << "PD"; break;
case 2:
item_code << "PR"; break;
default:
item_code << impianto; break;
}
if (read_is_dist(item_code))
{
_umart->zero();
_umart->put("CODART",item_code);
_umart->put("NRIGA",2);
_umart->put("UM","BP");
_umart->put("FC",divisori.get("ICBTCH"));
force_write(*_umart);
}
}
}
divisori.next();
}
return TRUE;
}
void TImporta_BPCS ::clear_docs(long firm, const char * num, TDate *fromdate, TDate *todate)
{
TConfig *trans=NULL;
long ntransac=0;
// rimuove le transazioni
delete_files("ND_*.ini");
TString codnum(num);
TLocalisamfile doc(LF_DOC);
TLocalisamfile rdoc(LF_RIGHEDOC);
for (int anno=1998; anno<=1999; anno++)
{
TDate docdate(doc.get_date("DATADOC"));
doc.put(DOC_PROVV,"D");
doc.put(DOC_ANNO,anno);
doc.put(DOC_CODNUM,codnum);
doc.read(_isgteq);
while (!doc.eof() && doc.get("CODNUM")==codnum)
{
if (!fromdate || fromdate->empty() || doc.get_date("DATADOC")>=*fromdate)
if (!todate || todate->empty() || doc.get_date("DATADOC")<=*todate)
{
ntransac++;
if (trans) delete trans;
trans = new TConfig(format("ND_%05d.ini",ntransac));
trans->set_paragraph("Transaction");
trans->set("Action","DELETE");
trans->set("Mode","AUTO");
trans->set("Firm",firm);
trans->set_paragraph(format("%d",LF_DOC));
trans->set(DOC_PROVV,doc.get(DOC_PROVV));
trans->set(DOC_ANNO,doc.get(DOC_ANNO));
trans->set(DOC_CODNUM,doc.get(DOC_CODNUM));
trans->set(DOC_NDOC,doc.get(DOC_NDOC));
}
doc.read(_isnext);
}
}
if (trans)
{
delete trans;
// genera i documenti
TExternal_app gestdoc("ve0.exe -1 -iND_*.INI");
gestdoc.run();
}
}
bool TImporta_BPCS ::creadocs(const char * msg,
long firm, // ditta
TImport_file & imp_file,
const char *FieldNumDoc, const char *FieldClifor, const char *FieldDataDoc,
const char *FieldGroup1, const char *FieldGroup2, const char *FieldGroup3,
SET_DOC_FUN set_header, SET_DOC_FUN set_body, FILTER_FUN filter )
{
TProgind info(imp_file.items(),msg,TRUE,TRUE);
TConfig *trans=NULL;
int nblock=1;
long ntransac=0;
int nrigadoc=0;
// rimuove le transazioni
delete_files("ND_*.ini");
imp_file.first();
while (!imp_file.eof() )
{
long last_ndoc=-1L;
TDate last_date("");
long last_clifor=-1L;
TString last_group1="";
TString last_group2="";
TString last_group3="";
while (!imp_file.eof())
{
info.addstatus(1);
if (info.iscancelled())
return FALSE;
if (filter(imp_file))
{
long new_ndoc =FieldNumDoc ? imp_file.get_long(FieldNumDoc) : last_ndoc;
long new_clifor=FieldClifor ? imp_file.get_long(FieldClifor) : last_clifor;
if (new_clifor==0L && FieldClifor)
new_clifor=9999; // cliente generico
TDate new_date(FieldDataDoc ? imp_file.get_long(FieldDataDoc) : 0L);
TString new_group1=FieldGroup1 ? imp_file.get(FieldGroup1) : last_group1;
TString new_group2=FieldGroup2 ? imp_file.get(FieldGroup2) : last_group2;
TString new_group3=FieldGroup3 ? imp_file.get(FieldGroup3) : last_group3;
if (nrigadoc>99 || (last_ndoc != new_ndoc) || (last_date != new_date ) || (last_clifor != new_clifor )||
(last_group1 != new_group1 )|| (last_group2 != new_group2 )|| (last_group3 != new_group3 ))
{
if (ntransac==nblock*100)
{
break;
}
// emetti il doc
// reset
if (new_ndoc>0L) last_ndoc=new_ndoc;
if (new_clifor>0L) last_clifor=new_clifor;
if (!new_group1.blank()) last_group1=new_group1;
if (!new_group2.blank()) last_group2=new_group2;
if (!new_group3.blank()) last_group3=new_group3;
if (!new_date.empty()) last_date=new_date;
if (trans) delete trans;
trans = new TConfig(format("ND_%05d.INI",ntransac));
trans->set_paragraph("Transaction");
trans->set("Action","INSERT");
trans->set("Mode","AUTO");
trans->set("Firm",firm);
trans->set_paragraph(format("%d",LF_DOC));
if (new_ndoc>0)
trans->set(DOC_NDOC,new_ndoc);
if (new_date.empty())
new_date=TODAY;
trans->set(DOC_DATADOC, new_date);
trans->set(DOC_TIPOCF,"F");
if (new_clifor>0L)
trans->set(DOC_CODCF,new_clifor);
trans->set(DOC_PROVV,"D");
set_header(imp_file, *trans);
nrigadoc=0;
ntransac++;
}
// righe
nrigadoc++;
trans->set_paragraph(format("%d,%d",LF_RIGHEDOC, nrigadoc));
set_body(imp_file, *trans);
}
imp_file.next();
}
if (trans)
{
delete trans;
trans=NULL;
// genera i documenti
TString cmd("ve0.exe -1 -i");
cmd << format("ND_%03d*.INI",nblock-1) ;
TExternal_app gestdoc((const char *)cmd);
gestdoc.run();
nblock++;
}
}
return TRUE;
}
void set_head_F_ordcli(TImport_file & import, TConfig &trans)
{
trans.set(DOC_ANNO,import.get_date("FRDTE").year());
trans.set(DOC_CODNUM,(import.get("FPFAC")=="SE") ? "SEOC": "TSOC");
trans.set(DOC_TIPODOC,"ORC");
TDate dc(import.get_date("FRDTE"));
round_date(dc,28,TRUE);
trans.set(DOC_DATACONS, dc);// stessa data del doc
}
void set_body_F_ordcli(TImport_file &import, TConfig &trans)
{
TToken_string tmp;
trans.set(RDOC_TIPORIGA,"01");
tmp =import.get_codice("FPROD");
trans.set(RDOC_CODART,tmp);
trans.set(RDOC_DESCR,cache().get(LF_ANAMAG,tmp).get("DESCR"));
tmp.add("1");
trans.set(RDOC_PREZZO,cache().get(LF_UMART,tmp).get("PREZZO"));
trans.set(RDOC_UMQTA,cache().get(LF_UMART,tmp).get("UM"));
trans.set(RDOC_QTA,import.get_real("FQTY"));
// gia' suddivisa su doc : trans.set(RDOC_DATACONS, import.get_date("FDATE"));
tmp=import.get("FPFAC");
tmp << 1;
trans.set(RDOC_CODMAG,tmp);
}
bool filter_F_ordcli(TImport_file & import)
{
bool ok= import.get("FID")=="FP" && import.get("FTYPE")=="F";
if (ok)
{
char type = cache().get(LF_ANAMAG,import.get_codice("FPROD")).get(ANAMAG_GRMERC)[0];
ok = (type== 'F');
}
return ok;
}
void set_head_R_ordcli(TImport_file & import, TConfig &trans)
{
trans.set(DOC_ANNO,import.get_date("SRDTE").year());
trans.set(DOC_CODNUM,(import.get("SOFAC")=="SE") ? "SEOC": "TSOC");
trans.set(DOC_TIPODOC,"ORC");
TDate dc(import.get_date("SRDTE"));
round_date(dc,28,TRUE);
trans.set(DOC_DATACONS, dc);// stessa data del doc
}
void set_body_R_ordcli(TImport_file &import, TConfig &trans)
{
TToken_string tmp;
trans.set(RDOC_TIPORIGA,"01");
tmp =import.get_codice("SPROD");
trans.set(RDOC_CODART,tmp);
trans.set(RDOC_DESCR,cache().get(LF_ANAMAG,tmp).get("DESCR"));
tmp.add("1");
trans.set(RDOC_PREZZO,cache().get(LF_UMART,tmp).get("PREZZO"));
trans.set(RDOC_UMQTA,cache().get(LF_UMART,tmp).get("UM"));
trans.set(RDOC_QTA,import.get_real("SQREQ"));
trans.set(RDOC_QTAEVASA,import.get_real("SQFIN"));
tmp=import.get("SOFAC");
tmp << 1;
trans.set(RDOC_CODMAG,tmp);
}
bool filter_R_ordcli(TImport_file & import)
{
bool ok=import.get("SID")=="SO";
if (ok)
{
char type = cache().get(LF_ANAMAG,import.get_codice("SPROD")).get(ANAMAG_GRMERC)[0];
ok = (type== 'F');
}
return ok;
}
// ordini di produzione
void set_head_F_ordprod(TImport_file & import, TConfig &trans)
{
trans.set(DOC_ANNO,import.get_date("FRDTE").year());
trans.set(DOC_CODNUM,(import.get("FPFAC")=="SE") ? "MSP": "TSMP");
trans.set("TIPODOC","ORP");
TDate today(TODAY),dc(import.get_date("FRDTE"));
TDate rdt(import.get_date("FRSDT"));
if (rdt.ok() && rdt != 99999999L && rdt > dc)
dc = rdt;
if (dc < today)
if (1 || yesno_box("Data ordine di produzione per l'articolo %s inferiore a quella attuale: posticipo ?",(const char *) import.get("FPROD")))
dc = today;
round_date(dc,28,TRUE);
TDate dd(trans.get(DOC_DATADOC));
if (dc < dd )
trans.set(DOC_DATADOC, dc);
trans.set(DOC_DATACONS, dc);
}
void set_body_F_ordprod(TImport_file &import, TConfig &trans)
{
TToken_string tmp,tmp2;
trans.set(RDOC_TIPORIGA,"01");
tmp =import.get_codice("FPROD");
trans.set(RDOC_CODART,tmp);
trans.set(RDOC_DESCR,cache().get(LF_ANAMAG,tmp).get("DESCR"));
tmp.add("1");
trans.set(RDOC_PREZZO,cache().get(LF_UMART,tmp).get("PREZZO"));
trans.set(RDOC_UMQTA,cache().get(LF_UMART,tmp).get("UM"));
tmp=import.get("FPFAC");
codimp2codmagdep(tmp, atoi(import.get("FPBOMM")), tmp2);
trans.set(RDOC_IMPIANTO,tmp);
trans.set(RDOC_CODMAG,tmp2);
trans.set(RDOC_QTA,import.get_real("FQTY"));
trans.set(RDOC_QTAEVASA,"0");
}
bool filterFordprodSE(TImport_file & import)
{
bool ok= import.get("FID")=="FP" && import.get("FPFAC")=="SE" && import.get("FTYPE")=="F";
if (ok)
{
const TRectype &art= cache().get(LF_ANAMAG,import.get_codice("FPROD"));
char type = art.get(ANAMAG_GRMERC)[0];
if (art.empty())
{
if (yesno_box("Articolo non trovato:%s. Lo considero ugualmente come prodotto finito?",(const char *)import.get_codice("FPROD")))
type = 'F';
}
ok = (type== 'F' || type== 'S' );
}
return ok;
}
void set_head_R_ordprod(TImport_file & import, TConfig &trans)
{
trans.set(DOC_ANNO,import.get_date("SRDTE").year());
trans.set("CODNUM",(import.get("SOFAC")=="SE") ? "MSP": "TSMP");
trans.set("TIPODOC","ORP");
TDate today(TODAY),dc(import.get_date("SDDTE"));
TDate rdt(import.get_date("SRSDT"));
if (rdt.ok() && rdt != 99999999L && rdt > dc)
dc = rdt;
if (dc < today)
if (1 || yesno_box("Data ordine di produzione %ld per l'articolo %s inferiore a quella attuale: posticipo ?",import.get_long("SORD"),(const char *) import.get("SPROD")))
dc = today;
round_date(dc,28,TRUE);
TDate dd(trans.get(DOC_DATADOC));
if (dc < dd )
trans.set(DOC_DATADOC, dc);
trans.set(DOC_DATACONS, dc);
}
void set_body_R_ordprod(TImport_file &import, TConfig &trans)
{
TToken_string tmp,tmp2;
trans.set(RDOC_TIPORIGA,"01");
tmp =import.get_codice("SPROD");
trans.set(RDOC_CODART,tmp);
trans.set(RDOC_DESCR,cache().get(LF_ANAMAG,tmp).get("DESCR"));
tmp.add("1");
trans.set(RDOC_PREZZO,cache().get(LF_UMART,tmp).get("PREZZO"));
trans.set(RDOC_UMQTA,cache().get(LF_UMART,tmp).get("UM"));
tmp=import.get("SOFAC");
codimp2codmagdep(tmp, atoi(import.get("SOBOMM")), tmp2);
trans.set(RDOC_IMPIANTO,tmp);
trans.set(RDOC_CODMAG,tmp2);
tmp=import.get("SOFAC");
set_workcenter_code(tmp2, tmp, import.get_long("SWRKC"), int(import.get_long("SOBOMM"))) ;
trans.set(RDOC_LINEA,tmp2);
if (tmp2.left(3)=="X07") // ex terzista cover
{
if (tmp2.right(2)=="SE")
tmp="PR";
else
tmp="PD";
trans.set(RDOC_IMPIANTO,tmp);
tmp << "01M";
trans.set(RDOC_LINEA,tmp);
}
real totale = import.get_real("SQREQ");
real evasa = import.get_real("SQFIN");
trans.set(RDOC_QTA,totale);
trans.set(RDOC_QTAEVASA,evasa);
add_stdlabors(import.get_codice("SPROD"), import.get_long("SWRKC"), int(import.get_long("SOBOMM")));
}
bool filterRordprodSE(TImport_file & import)
{
bool ok=(import.get("SID")=="SO"
&& import.get("SOFAC")=="SE");
if (ok)
{
real totale = import.get_real("SQREQ");
totale-= import.get_real("SQFIN");
ok = (totale > ZERO);
if (ok)
{
char type = cache().get(LF_ANAMAG,import.get_codice("SPROD")).get(ANAMAG_GRMERC)[0];
ok = (type== 'F'||type== 'S');
}
}
return ok;
}
void set_head_ordacq(TImport_file & import, TConfig &trans)
{
TString codimp;
int nummag=(atoi(import.get_date("PWHSE"))) ;
num_mag2main_imp(nummag, codimp);
TDate dc(import.get_date("PDDTE"));
TDate dd(import.get_date("PEDTE"));//data doc
if (dc < dd )
dd=dc;
trans.set(DOC_DATADOC, dd);
trans.set(DOC_DATACONS, dc);
trans.set(DOC_ANNO,dd.year());
trans.set("CODNUM",(codimp=="SE") ? "SEOF": "TSOF");
trans.set("TIPODOC","ORF");
}
void set_body_ordacq(TImport_file &import, TConfig &trans)
{
TToken_string tmp,tmp2;
trans.set(RDOC_TIPORIGA,"01");
tmp=import.get_codice("PPROD");
trans.set(RDOC_CODART,tmp);
trans.set(RDOC_DESCR,cache().get(LF_ANAMAG,tmp).get("DESCR"));
//trans.set(RDOC_PREZZO,import.get("POLIST"));
trans.set(RDOC_UMQTA,import.get("PUM"));
int nummag=(atoi(import.get_date("PWHSE"))) ;
num_mag2main_imp(nummag, tmp);
tmp << "1";
trans.set(RDOC_CODMAG,tmp);
trans.set(RDOC_QTA,import.get("PQORD"));
trans.set(RDOC_QTAEVASA,import.get("PQREC"));
}
bool filter_ordacq(TImport_file & import)
{
TString codimp;
int nummag=(atoi(import.get_date("PWHSE"))) ;
num_mag2main_imp(nummag, codimp);
bool ok =(codimp == "SE" ||codimp == "TS" );
if (!ok)
error_box("Ordine di acquisto sull'impianto %s",(const char *)codimp);
return ok;
}
void set_head_movmag(TImport_file & import, TConfig &trans)
{
long codcli=atol(import.get("TVEND"));
int magno=atoi(import.get("TWHS"));
char cod0=*((const char * )import.get("TTYPE"));
char cod1=*((const char * )import.get("TTYPE")+1);
if (magno == 25 || magno == 27)
{
cod1=cod0;
cod0='V'; // codice fittizio per simulare la vendita
import.put("TTYPE", "V");
if (magno == 25)
magno = 26;
else
magno = 28;
}
TString codimp;
num_mag2main_imp(magno, codimp);
TString codnum,tipodoc, causmag, descrmov;
codnum=codimp;
long numdoc=0L;// riassegno qui il numdoc , per usare il nummag al suo posto come ragguppatore nel ciclo di crea_docs
switch (cod0)
{
case 'O': // completed;
descrmov="Movimento di apertura di inizio esercizio";
codnum << "DI";
causmag="RIMI";
tipodoc = "__O";
codcli=0L;
break;
case 'A': // completed
descrmov="Differenza inventariale";
codnum << "DI";
tipodoc = "__A";
codcli=0L;
break;
case '0': // completed;
descrmov="Carico prodotti finiti da terzi";
codnum << "BE";
causmag="CFAL";
break;
case 'C': // completed;
CHECKS(cod1=='3',"Causale sconosciuta :%s",cod0);
descrmov="Scarico componenti terzisti";
codnum << "MM";
tipodoc = "__C3";
trans.set(DOC_TIPOCF,"F");
break;
case 'M':
if (cod1=='\0') // completed;
{
descrmov="Consuntivazione produzione";
codnum << "BP";
tipodoc = "BPR";
} else {
descrmov="Produzione semilavorati per sconfezionamento ";
codnum << "BP";
tipodoc = "BPR1";
}
codcli=0L;
break;
case 'U':
if (cod1=='\0') // completed;
{
descrmov="Acquisto merce";
causmag="ACQO"; // acquisto ordine
codnum << "BA";
} else {
descrmov="Reso su acquisto";
causmag="REAO"; // reso su acquisto ordine
codnum << "RF";
}
break;
case 'I': // confirmed
descrmov="Scarico componenti ";
codnum << "MM";
tipodoc = "__I";
break;
case 'T': // to be confirmed
codnum << "MM";
descrmov="Trasferimento merce";
codcli=0L;
tipodoc = "__T";
break;
case 'X': // completed;
codnum << "MM";
if (cod1=='7')
{
descrmov="Scarico manuale";
} else if (cod1=='8')
{
descrmov="Carico manuale";
} else {
descrmov="Scarico per campionatura";
}
codcli=0L;
break;
case 'V': // completed;
descrmov="Vendita da BPCS (simulata con scarico magazzini 25-27)";
codnum << "MM";
if (cod1=='T')
causmag="VNUSC"; // vendo stornando una uscita
else
causmag="VNENT"; // vendo contemporaneamente ad una entrata
break;
case 'R': // completed;
if (cod1=='D')
{
codnum << "MM";
descrmov="Cambio codice";
codcli=0L;
tipodoc = "__RD";
}
break;
}
descrmov << '(' <<import.get("TCOM") << ')' ;
trans.set(DOC_CODNUM,codnum);
if (!tipodoc.blank())
trans.set(DOC_TIPODOC,tipodoc);
if (!causmag.blank())
trans.set(DOC_CAUSMAG,causmag);
trans.set(DOC_NOTE,descrmov);
trans.set(DOC_NDOC,0L);
trans.set(DOC_CODCF,codcli == 0L ? "" : format("%ld",codcli));
trans.set(DOC_ANNO,import.get_date("TTDTE").year());
trans.set(DOC_NUMDOCRIF,import.get("TREF"));
trans.set(DOC_DATADOCRIF,import.get_date("TSDTE"));
}
void set_body_movmag(TImport_file &import, TConfig &trans)
{
TString codimp, codmag, causmag, desc;
int magno=atoi(import.get("TWHS"));
num_mag2main_imp(magno, codimp);
int terzista=location2method(import.get_long("TLOCT"));
codimp2codmagdep(codimp, terzista,codmag);
TToken_string tmp(import.get_codice("TPROD"));
trans.set(RDOC_TIPORIGA,"01");
trans.set(RDOC_CODART,tmp);
desc =cache().get(LF_ANAMAG,tmp).get("DESCR");
if (terzista==99)
{
message_box("Terzista sconosciuto : %ld",import.get_long("TLOCT"));
desc << "(terzista " << atol(import.get("TLOCT")) << ")";
}
trans.set(RDOC_DESCR,desc);
TString4 umqta(import.get("THTUM"));
if (umqta.blank())
{
tmp .add("1");
umqta=cache().get(LF_UMART,tmp).get("UM");
}
trans.set(RDOC_UMQTA,umqta);
trans.set(RDOC_CODMAG,codmag);
real qta(import.get_real("TQTY"));
const char cod0=*(const char * )import.get("TTYPE");
switch (cod0)
{
case 'T':
case 'M':
case 'A':
case 'I':
case '0':
case 'C':
case 'X':
case 'R':
if (qta >= ZERO)
causmag="CAR";
else {
qta = -qta;
causmag="SCAR";
}
break;
case 'O':
case 'U':
case 'V':
break;
}
trans.set(RDOC_CAUSMAG,causmag);
trans.set(RDOC_QTA, qta.string());
}
bool filter_movmag(TImport_file & import)
{
const long codmag=import.get_long("TWHS");
if (!import.get("TWHS").blank() )
{
if (import.get_real("TQTY")!=ZERO)
{
const char cod0=*(const char * )import.get("TTYPE");
if ((codmag == 25 || codmag == 27) && cod0 == 'X')
return FALSE; // importa solo i magazzini non fittizi
switch (cod0)
{
case 'O':
case 'A':
case '0':
case 'C':
case 'M':
case 'U':
case 'I':
case 'T':
case 'X':
case 'R':
return TRUE;
break;
default:
fatal_box("Causale sconosciuta :%s",(const char * )import.get("TTYPE"));
}
}
}
return FALSE;
}
bool filter_movmagSE(TImport_file & import)
{
TString codimp;
int magno=atoi(import.get("TWHS"));
num_mag2main_imp(magno, codimp);
return codimp=="SE" && filter_movmag(import);
}
bool filter_movmagTS(TImport_file & import)
{
TString codimp;
int magno=atoi(import.get("TWHS"));
num_mag2main_imp(magno, codimp);
return codimp=="TS";
}
bool TImporta_BPCS ::importa_ordacq(TMask & m)
{
long firm =get_firm();
clear_docs(firm,"SEOF");
clear_docs(firm,"TSOF");
TImport_file ordacq(m.get(F_PATH),BPCS_ORDACQ);
return creadocs("Importazione ordini di acquisto..",firm,ordacq,
"PORD","PVEND",NULL,NULL,NULL,NULL,
set_head_ordacq,set_body_ordacq,filter_ordacq);
}
bool TImporta_BPCS ::importa_ordcli(TMask & m)
{
long firm =get_firm();
clear_docs(firm,"SEOC");
clear_docs(firm,"TSOC");
TImport_file released_orders(m.get(F_PATH),BPCS_SHOPORDS);
bool ok = creadocs("Importazione ordini cliente (1)..",firm,released_orders,
NULL,"SCUST","SRDTE","SOFAC",NULL,NULL,
set_head_R_ordcli,set_body_R_ordcli,filter_R_ordcli);
TImport_file firm_orders(m.get(F_PATH),BPCS_FIRMORD);
ok = ok && creadocs("Importazione ordini cliente (2)..",firm,firm_orders,
NULL,"FPPVND","FRDTE","FPFAC",NULL,NULL,
set_head_F_ordcli,set_body_F_ordcli,filter_F_ordcli);
return ok;
}
bool TImporta_BPCS ::importa_ordprod(TMask & m)
{
long firm =get_firm();
if (yesno_box("Cancello gli ordini MSP?"))
clear_docs(firm,"MSP");
clear_docs(firm,"SEFA");
TImport_file released_orders(m.get(F_PATH),BPCS_SHOPORDS);
bool ok = creadocs("Importazione ordini di produzione Segrate (Released)..",firm,released_orders,
"SORD",NULL,"SRDTE","SOFAC",NULL,NULL,
set_head_R_ordprod,set_body_R_ordprod,filterRordprodSE);
TImport_file firm_orders(m.get(F_PATH),BPCS_FIRMORD);
ok = ok && creadocs("Importazione ordini di produzione Segrate (Firm Planned)..",firm,firm_orders,
NULL,NULL,"FRDTE","FPFAC",NULL,NULL,
set_head_F_ordprod,set_body_F_ordprod,filterFordprodSE);
return ok;
}
bool TImporta_BPCS ::importa_movmag(TMask & m, bool segrate, bool trieste)
{
long firm =get_firm();
TFilename source(m.get(F_MOVMAG_FILE));
if (source.blank())
source=BPCS_MOVMAG;
TDate fromdate(m.get(F_MOVMAG_FROMD));
TDate todate(m.get(F_MOVMAG_TOD));
TImport_file movmag(m.get(F_PATH),source);
if (yesno_box("Controllo la presenza di locazioni sconosciute?"))
{
if (!check_mag_locations(m.get(F_PATH),source))
return FALSE;
}
bool ok = TRUE;
if (segrate)
{
clear_docs(firm, "SEBA",&fromdate,&todate);
clear_docs(firm, "SEBE",&fromdate,&todate);
clear_docs(firm, "SEBT",&fromdate,&todate);
clear_docs(firm, "SEBU",&fromdate,&todate);
clear_docs(firm, "SEBV",&fromdate,&todate);
clear_docs(firm, "SEDI",&fromdate,&todate);
clear_docs(firm, "SEMM",&fromdate,&todate);
clear_docs(firm, "SERF",&fromdate,&todate);
ok &= creadocs("Importazione movimenti magazzino di Segrate..",firm, movmag,
NULL,"TVEND","TTDTE","TTYPE","TREF",NULL,
set_head_movmag,set_body_movmag,filter_movmagSE);
}
if (trieste)
{
clear_docs(firm, "TSBA",&fromdate,&todate);
clear_docs(firm, "TSBE",&fromdate,&todate);
clear_docs(firm, "TSBT",&fromdate,&todate);
clear_docs(firm, "TSBU",&fromdate,&todate);
clear_docs(firm, "TSBV",&fromdate,&todate);
clear_docs(firm, "TSDI",&fromdate,&todate);
clear_docs(firm, "TSMM",&fromdate,&todate);
clear_docs(firm, "TSRF",&fromdate,&todate);
ok &= creadocs("Importazione movimenti magazzino di Trieste..",firm, movmag,
NULL,"TVEND","TTDTE","TTYPE","TREF",NULL,
set_head_movmag,set_body_movmag,filter_movmagTS);
}
return ok;
/*bool creadocs( ........
char *FieldNumDoc,char *FieldClifor,char *FieldDataDoc, char *Group
...........)*/
}
void TImporta_BPCS ::main_loop()
{
TImporta_mask m;
m.field(F_PATH).set("E:\\bpcs\\");
while (m.run()!=K_QUIT)
{
bool ok=TRUE;
bool lavs_rinumerate=FALSE;
if (m.get_bool(F_ARTS))
{
if (m.get_bool(F_CHANGEGMC))
ok|=cambia_gmc(m);
else
{
if (m.get_bool(F_BOMS))
lavs_rinumerate = delete_boms();
ok|=importa_arts(m, m.get_bool(F_ERASE_ARTS), FALSE); // articoli e distinte virtuali fantasma
}
}
if (m.get_bool(F_BOMS))
{
if (!m.get_bool(F_ARTS))
{
if (yesno_box("Azzero le distinte e importo i ghost dall'anagrafica?"))
{
lavs_rinumerate = delete_boms();
ok|=importa_arts(m, m.get_bool(F_ERASE_ARTS), TRUE); // importa distinte virtuali fantasma
}
}
ok|=importa_boms(m);
if (lavs_rinumerate || yesno_box("Rinumero le distinte ?" ))
rinumera_dist();
if (yesno_box("Setto gli articolo MASTER per il MSP a 2 livelli ?"))
build2levmsp();
}
if (m.get_bool(F_DIVS))
ok|=importa_ums_BP(m);
if (m.get_bool(F_ORDACQ))
ok|=importa_ordacq(m);
if (m.get_bool(F_ORDPROD))
ok|=importa_ordprod(m);
if (m.get_bool(F_ORDCLI))
if (noyes_box("Gli ordini cliente dovrebbero essere inseriti a mano; confermi l'importazione?"))
ok|=importa_ordcli(m);
if (m.get_bool(F_MOVMAG))
ok|=importa_movmag(m,m.get_bool(F_MOVMAG_SE),m.get_bool(F_MOVMAG_TS));
if (ok)
message_box("Operazione conclusa");
else
message_box("Operazione interrotta");
}
}
int dbcv00(int argc, char* argv[])
{
TString name;
TImporta_BPCS dt;
dt.run(argc, argv, "Importazione archivi da BPCS");
return 0;
}