1999-07-16 14:59:11 +00:00
# include "dbcv.h"
# include "dbcv09.h"
# include "dbcv02a.h"
# include <automask.h>
# include <applicat.h>
# include <relation.h>
# include <execp.h>
# include "..\mg\anamag.h"
# include "..\mg\mag.h"
# include "..\include\doc.h"
# include "..\include\rdoc.h"
# include "..\db\dblib.h"
typedef void ( * SET_DOC_FUN ) ( TImport_file & import , TConfig & trans ) ;
typedef bool ( * FILTER_FUN ) ( TImport_file & import ) ;
bool unevadi_orc ( TMask & m , const TString & codimp )
{
TString8 codnum = codimp ;
codnum < < " OC " ;
TRelation * r = new TRelation ( LF_DOC ) ;
r - > add ( LF_RIGHEDOC , " CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC " ) ;
TCursor c ( r ) ;
TRectype frec ( LF_DOC ) ;
frec . put ( " CODNUM " , codnum ) ;
frec . put ( " PROVV " , " D " ) ;
frec . put ( " ANNO " , " 1999 " ) ;
c . setregion ( frec , frec ) ;
c . freeze ( ) ;
const long items = c . items ( ) ;
TProgind info ( items , " Reset evasione commesse cliente... " , FALSE , TRUE ) ;
for ( long i = 0 ; i < items ; i + + )
{
c = i ;
info . addstatus ( 1 ) ;
TRelation * r = c . relation ( ) ;
TLocalisamfile & righe = c . relation ( ) - > lfile ( LF_RIGHEDOC ) ;
bool ok = r - > is_first_match ( LF_RIGHEDOC ) ;
while ( ok )
{
if ( righe . get_bool ( " RIGAEVASA " ) | | righe . get_real ( " QTAEVASA " ) ! = ZERO )
{
righe . put ( " RIGAEVASA " , " " ) ;
righe . put ( " QTAEVASA " , " 0.0 " ) ;
righe . rewrite ( ) ;
}
ok = r - > next_match ( LF_RIGHEDOC ) ;
}
}
return TRUE ;
}
bool evadi_orc ( TCursor & c , TAssoc_array & evasioni )
{
const long items = c . items ( ) ;
TProgind info ( items , " Evasione commesse cliente... " , FALSE , TRUE ) ;
for ( long i = 0 ; i < items ; i + + )
{
c = i ;
info . addstatus ( 1 ) ;
TRelation * r = c . relation ( ) ;
TLocalisamfile & righe = c . relation ( ) - > lfile ( LF_RIGHEDOC ) ;
bool ok = r - > is_first_match ( LF_RIGHEDOC ) ;
while ( ok )
{
const TString codprod = righe . get ( " CODARTMAG " ) ;
real * qta = NULL ;
if ( evasioni . is_key ( codprod ) )
qta = ( real * ) evasioni . objptr ( codprod ) ;
if ( ! righe . get_bool ( " RIGAEVASA " ) & & qta ! = NULL )
{
real q ( righe . get_real ( " QTA " ) ) ;
real qevasa ( righe . get_real ( " QTAEVASA " ) ) ;
if ( * qta > ZERO & & q > qevasa )
{
if ( q - qevasa > * qta )
{
qevasa + = * qta ;
* qta = 0 ;
} else {
* qta - = q ;
qevasa = q ;
righe . put ( " RIGAEVASA " , " X " ) ;
}
righe . put ( " QTAEVASA " , qevasa ) ;
righe . rewrite ( ) ;
}
}
ok = r - > next_match ( LF_RIGHEDOC ) ;
}
}
return TRUE ;
}
bool evadi_orc ( TMask & m , const TString & codimp )
{
if ( ! yesno_box ( " I movimenti 00 e T-04 sul mag. 25 verranno usati per evadere le commesse. Procedo? " ) )
return FALSE ;
TFilename source ( m . get ( S_MOVMAG_FILE ) ) ;
if ( source . blank ( ) )
source = BPCS_MOVMAG ;
TDate fromdate ( m . get ( S_MOVMAG_FROMD ) ) ;
TDate todate ( m . get ( S_MOVMAG_TOD ) ) ;
TImport_file movmag ( m . get ( F_PATH ) , source ) ;
bool ok = TRUE ;
if ( noyes_box ( " Attenzione: l'operazione non e' ripetibile;assicurarsi che la situazione del pending delle commesse sia relativa alla bolla indicata. Procedo? " ) )
{
const int expmag = codimp = = " SE " ? 25 : 27 ;
TString8 codnum = codimp ;
codnum < < " OC " ;
TRelation * r = new TRelation ( LF_DOC ) ;
r - > add ( LF_RIGHEDOC , " CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC " ) ;
TCursor c ( r , " !DOCEVASO " ) ;
TRectype frec ( LF_DOC ) ;
frec . put ( " CODNUM " , codnum ) ;
frec . put ( " PROVV " , " D " ) ;
frec . put ( " ANNO " , " 1999 " ) ;
c . setregion ( frec , frec ) ;
c . freeze ( ) ;
long lastbolla ( m . get_int ( S_LASTBOLLA ) ) , nobolla ;
TProgind info ( movmag . items ( ) , " Estrazione ultime consegne... " , FALSE , TRUE ) ;
TAssoc_array evasioni ;
movmag . first ( ) ;
while ( ! movmag . eof ( ) )
{
info . addstatus ( 1 ) ;
const TDate dmov = movmag . get_date ( " TTDTE " ) ;
if ( movmag . get_int ( " TWHS " ) = = expmag & &
( ! fromdate . ok ( ) | | dmov > = fromdate ) & &
( ! todate . ok ( ) | | dmov < = todate ) )
{
TString codprod ( movmag . get ( " TPROD " ) ) ;
real qta ( movmag . get_real ( " TQTY " ) ) ;
TString com ( movmag . get ( " TCOM " ) ) ;
nobolla = - 1 ;
if ( movmag . get ( " TTYPE " ) = = " T " )
{
if ( movmag . get ( " TRES " ) = = " 04 " & & com . len ( ) = = 15 )
nobolla = atol ( com . mid ( 7 ) ) ;
else
if ( yesno_box ( " Includo il trasferimento del %s, %s per %s, \n '%s' " ,
( const char * ) dmov , ( const char * ) codprod , ( const char * ) qta . string ( ) , ( const char * ) com ) )
nobolla = lastbolla + 1 ; // non so come filtrarla !!!
}
else if ( movmag . get ( " TTYPE " ) = = " 00 " )
{
if ( yesno_box ( " Includo il carico da terzi del %s, %s per %s, \n '%s' " ,
( const char * ) dmov , ( const char * ) codprod , ( const char * ) qta . string ( ) , ( const char * ) com ) )
nobolla = lastbolla + 1 ; // non so come filtrarla !!!
}
if ( nobolla > lastbolla )
{
// evadi
if ( evasioni . is_key ( codprod ) )
qta + = ( real & ) evasioni . find ( codprod ) ;
evasioni . add ( codprod , qta , TRUE ) ;
}
}
movmag . next ( ) ;
}
ok = evadi_orc ( c , evasioni ) ;
}
return FALSE ;
return ok ;
}
void crea_mag3 ( )
{
TString codmag ; TString desc ;
TTable mag ( " MAG " ) ;
mag . put ( " CODTAB " , " SE1 " ) ;
mag . put ( " B0 " , " X " ) ;
mag . put ( " S0 " , " Magazzino di Segrate (ex mag. 26,91 e 93) " ) ;
force_write ( mag ) ;
mag . put ( " CODTAB " , " TS1 " ) ;
mag . put ( " B0 " , " X " ) ;
mag . put ( " S0 " , " Magazzino di Trieste (ex mag. 28 e 92) " ) ;
force_write ( mag ) ;
mag . put ( " CODTAB " , " PR1 " ) ;
mag . put ( " B0 " , " X " ) ;
mag . put ( " S0 " , " Magazzino di Parma " ) ;
force_write ( mag ) ;
mag . put ( " CODTAB " , " PD1 " ) ;
mag . put ( " B0 " , " X " ) ;
mag . put ( " S0 " , " Magazzino di Padova " ) ;
force_write ( mag ) ;
const char * codimp [ ] = { " SE " , " TS " , " PR " , " PD " } ;
const char * descimp [ ] = { " Segrate " , " Trieste " , " Parma " , " Padova " } ;
for ( int t = 0 ; t < 99 ; t + + )
for ( int i = 0 ; i < 4 ; i + + )
{
mag . zero ( ) ;
long l = - 1 ;
if ( t = = 0 )
{
codmag . format ( " %s1PF " , codimp [ i ] ) ;
desc = " Deposito prodotti finiti " ;
desc < < descimp [ i ] ;
l = 0 ;
}
else
if ( i < 2 )
{
l = method2location ( t ) ;
desc = descr_method ( t ) ;
desc < < " (ex locazione " < < l < < " ) " ;
codmag . format ( " %s1%02d " , codimp [ i ] , t ) ;
}
if ( l > = 0 )
{
mag . put ( " CODTAB " , codmag ) ;
mag . put ( " S0 " , desc ) ;
force_write ( mag ) ;
}
}
}
void crea_linee3 ( )
{
TTable lnp ( " LNP " ) ;
TString8 code ;
TString8 codimp ;
for ( int imp = 0 ; imp < 4 ; imp + + )
{
switch ( imp )
{
case 0 : codimp = " SE " ; break ;
case 1 : codimp = " TS " ; break ;
case 2 : codimp = " PD " ; break ;
case 3 : codimp = " PR " ; break ;
}
for ( int terz = 1 ; terz < 99 ; terz + + )
{
code = format ( " X%02d " , terz ) ;
code < < codimp ;
lnp . put ( " CODTAB " , code ) ;
if ( lnp . read ( ) = = NOERR )
{
lnp . put ( " S0 " , format ( " %s (%s) " , descr_method ( terz ) , ( const char * ) codimp ) ) ;
lnp . rewrite ( ) ;
}
}
}
}
bool find_wrongcycle ( )
{
TIndwin iw ( 80 , " Ricerca errori sui cicli di lavoro ... " , FALSE , FALSE ) ;
bool some_done = FALSE ;
int err ;
long distno = 1L ;
TString cod = " " ;
TLocalisamfile umart ( LF_UMART ) ;
TRelation r ( new TLocalisamfile ( LF_RDIST ) ) ;
r . add ( LF_DIST , " CODDIST==CODDIST " ) ;
r . add ( LF_UMART , " CODART==CODDIST|UM=UM " , 2 , LF_DIST ) ;
r . add ( LF_UMART , " CODART==CODDIST " , 1 , LF_DIST , LF_UMART ) ;
err = r . first ( ) ;
while ( err = = NOERR )
{
if ( ( distno % TICK ) = = 1 )
{
iw . set_text ( format ( " Ricerca errori riga n. %ld " , distno ) ) ;
do_events ( ) ;
}
distno + + ;
if ( r . lfile ( ) . get ( " TIPO " ) = = " L " )
{
long expr = atol ( r . lfile ( ) . get ( " EXPR " ) ) , newexpr ;
bool ask = FALSE ;
if ( r . update ( ) = = NOERR )
{
long divisore = r . lfile ( LF_UMART ) . get_long ( " FC " ) ;
TString lav ( r . lfile ( ) . get ( " CODCOMP " ) ) ;
if ( expr < divisore & & lav . left ( 5 ) ! = " ACQUA " )
{
TString codice ( r . lfile ( ) . get ( " CODDIST " ) ) ;
// caso sospetto
TString4 main_um ( r . lfile ( - LF_UMART ) . get ( " UM " ) ) ;
int formato = lav . find ( format ( " _X " ) ) ;
if ( formato < 0 )
formato = lav . find ( format ( " .X " ) ) ;
if ( formato < 0 )
formato = lav . find ( format ( " X12 " ) ) ;
newexpr = divisore ;
if ( formato > 0 )
{
// lav in casse
int pzxca = atoi ( lav . sub ( formato + 2 ) ) ;
if ( pzxca > 0 )
{
if ( main_um = = " PZ " )
newexpr / = atoi ( lav . sub ( formato + 2 ) ) ;
ask = TRUE ;
}
}
else
{
if ( main_um = = " PZ " )
ask = TRUE ;
}
if ( ask )
{
if ( yesno_box ( " Il codice %s espresso in '%s'(=%ld %s) \n contiene la lavorazione %s in quantita' %ld; \n sostituisco con %ld? " , ( const char * ) codice ,
( const char * ) r . lfile ( LF_DIST ) . get ( " UM " ) ,
divisore ,
( const char * ) main_um ,
( const char * ) lav , expr , newexpr ) )
{
r . lfile ( ) . put ( " EXPR " , newexpr ) ;
r . lfile ( ) . rewrite ( ) ;
}
} else {
message_box ( " Il codice %s espresso in '%s'(=%ld %s) \n contiene la lavorazione %s in quantita' %ld " , ( const char * ) codice ,
( const char * ) r . lfile ( LF_DIST ) . get ( " UM " ) ,
divisore ,
( const char * ) main_um ,
( const char * ) lav , expr , newexpr ) ;
}
}
}
}
err = r . next ( ) ;
}
return TRUE ;
}
class TMov_diff_inv : public TConfig
{
2001-05-02 13:40:49 +00:00
int _nriga ;
TDate _al ;
bool _use_giac_al ;
TArticolo_giacenza_data _art ;
1999-07-16 14:59:11 +00:00
public :
void set_header ( const char * imp_filter ) ;
int righe ( ) { return _nriga ; }
bool max_righe ( ) { return _nriga > 99 ; }
2000-05-05 15:25:49 +00:00
void locate_bpcs_stock ( const TString & codice , int mag , const TString & location , TImport_file & mag_bpcs , real & giac ) ;
1999-07-16 14:59:11 +00:00
int compare_stocks ( TLocalisamfile & mag , const real & bpcs_stock , bool giac ) ;
2001-05-02 13:40:49 +00:00
TMov_diff_inv ( int num , const char * al , bool giac_al ) ;
~ TMov_diff_inv ( ) { }
1999-07-16 14:59:11 +00:00
} ;
2001-05-02 13:40:49 +00:00
TMov_diff_inv : : TMov_diff_inv ( int num , const char * al , bool giac_al ) :
TConfig ( format ( " ND_%05d.ini " , num ) ) , _nriga ( 0 ) , _al ( al ) ,
_use_giac_al ( giac_al ) , _art ( )
1999-07-16 14:59:11 +00:00
{ }
2000-05-05 15:25:49 +00:00
void TMov_diff_inv : : locate_bpcs_stock ( const TString & codice , int mag , const TString & location , TImport_file & mag_bpcs , real & giac )
1999-07-16 14:59:11 +00:00
{
long diff = 0 ;
2001-05-02 13:40:49 +00:00
/*
int direction = 0 ;
1999-07-16 14:59:11 +00:00
do {
diff = codice . compare ( mag_bpcs . get ( " CODICE " ) ) ;
if ( diff = = 0 )
2001-05-02 13:40:49 +00:00
diff = mag - mag_bpcs . get_int ( " MAG " ) ;
if ( diff = = 0 )
2000-05-05 15:25:49 +00:00
diff = location . compare ( mag_bpcs . get ( " LOC " ) ) ;
1999-07-16 14:59:11 +00:00
if ( diff > 0 & & direction ! = - 1 )
{
direction = + 1 ;
if ( mag_bpcs . next ( ) ! = NOERR )
direction = 0 ;
}
if ( diff < 0 & & direction ! = 1 )
{
direction = - 1 ;
if ( mag_bpcs . prev ( ) ! = NOERR )
direction = 0 ;
}
} while ( diff * direction > 0 & & direction ! = 0 ) ;
2001-05-02 13:40:49 +00:00
*/
mag_bpcs . zero ( ) ;
mag_bpcs . put ( " MAG " , format ( " %d " , mag ) ) ;
mag_bpcs . put ( " LOC " , location ) ;
mag_bpcs . put ( " CODICE " , codice ) ;
diff = mag_bpcs . read ( _isequal ) ;
1999-07-16 14:59:11 +00:00
if ( diff ! = 0 )
giac = ZERO ;
else
giac = mag_bpcs . get_real ( " QTY " ) ;
}
2001-05-02 13:40:49 +00:00
2000-05-05 15:25:49 +00:00
int TMov_diff_inv : : compare_stocks ( TLocalisamfile & mag , const real & val_bpcs , bool giac )
1999-07-16 14:59:11 +00:00
{
if ( ! giac )
return _nriga ;
2001-05-02 13:40:49 +00:00
/*
1999-07-16 14:59:11 +00:00
TRectype newmag = mag . curr ( ) ;
if ( mag . read ( ) ! = NOERR )
mag . curr ( ) = newmag ;
real val ( mag . get_real ( " GIAC " ) ) ;
if ( ! giac )
val = ( mag . get_real ( " VEN " ) ) ;
real diff = ( val_bpcs - val ) ;
2000-05-05 15:25:49 +00:00
diff . round ( 3 ) ;
2001-05-02 13:40:49 +00:00
*/
real val ;
if ( _use_giac_al )
{
_art . read ( mag . get ( " CODART " ) ) ;
TString16 codmag ( mag . get ( " CODMAG " ) ) ;
TString16 annoes ( mag . get ( " ANNOES " ) ) ;
_art . al ( _al , codmag ) ;
const int i = _art . find_mag ( annoes , codmag ) ;
TRectype & mag1 = _art . mag ( annoes ) [ i ] ;
val = mag1 . get_real ( " GIAC " ) ;
if ( ! giac )
val = ( mag1 . get_real ( " VEN " ) ) ;
}
else
{
TRectype newmag = mag . curr ( ) ;
if ( mag . read ( ) ! = NOERR )
mag . curr ( ) = newmag ;
val = mag . get_real ( " GIAC " ) ;
if ( ! giac )
val = ( mag . get_real ( " VEN " ) ) ;
}
real diff = ( val_bpcs - val ) ;
diff . round ( 3 ) ;
2000-05-05 15:25:49 +00:00
const real piotta = " 900000.0 " ;
while ( diff > = 0.001 | | diff < = - 0.001 )
1999-07-16 14:59:11 +00:00
{
2000-05-05 15:25:49 +00:00
real newqtadoc = diff ;
if ( diff > piotta )
newqtadoc = piotta ;
if ( diff < - piotta )
newqtadoc = - piotta ;
1999-07-16 14:59:11 +00:00
set_paragraph ( format ( " 34,%d " , + + _nriga ) ) ;
set ( " TIPORIGA " , " 01 " ) ;
set ( " CODART " , mag . get ( " CODART " ) ) ;
set ( " CODARTMAG " , mag . get ( " CODART " ) ) ;
set ( " DESCR " , cache ( ) . get ( LF_ANAMAG , mag . get ( " CODART " ) ) . get ( " DESCR " ) ) ;
set ( " CODMAG " , mag . get ( " CODMAG " ) ) ;
TToken_string um_key ( mag . get ( " CODART " ) ) ;
um_key . add ( " 1 " ) ;
set ( " UMQTA " , cache ( ) . get ( LF_UMART , um_key ) . get ( " UM " ) ) ;
2000-05-05 15:25:49 +00:00
set ( " QTA " , newqtadoc . string ( ) ) ;
1999-07-16 14:59:11 +00:00
set ( " CODCAUS " , giac ? " CAR " : " " ) ;
2000-05-05 15:25:49 +00:00
diff = diff - newqtadoc ;
1999-07-16 14:59:11 +00:00
}
return _nriga ;
}
2000-05-05 15:25:49 +00:00
void TMov_diff_inv : : set_header ( const char * imp_filter )
1999-07-16 14:59:11 +00:00
{
2001-05-02 13:40:49 +00:00
// TDate today(TODAY);
1999-07-16 14:59:11 +00:00
set_paragraph ( " Transaction " ) ;
set ( " Action " , " INSERT " ) ;
set ( " Mode " , " AUTO " ) ;
set_paragraph ( " 33 " ) ;
TString8 codimp = imp_filter ;
codimp < < " DI " ;
set ( " CODNUM " , codimp ) ;
set ( " CAUSMAG " , " " ) ;
set ( " NOTE " , " \" Differenze inventariali rilevate per confronto con gli archivi di BPCS \" " ) ;
2001-05-02 13:40:49 +00:00
//set("DATADOC",today.string());
set ( " DATADOC " , _al . string ( ) ) ;
1999-07-16 14:59:11 +00:00
}
2000-05-05 15:25:49 +00:00
1999-07-16 14:59:11 +00:00
void sinchro_stock ( const TMask & m , const char * imp_filter )
{
2000-05-05 15:25:49 +00:00
if ( ! yesno_box ( format ( " Confermi l'allineamento giacenze per %s dal file %s? " , imp_filter , BPCS_STOCK ) ) )
1999-07-16 14:59:11 +00:00
return ;
2001-05-02 13:40:49 +00:00
const bool launch_ve0 = yesno_box ( " Devo registrare immediatamente i documenti? " ) ;
TDate day ( TODAY ) ;
TString16 data ( m . get ( S_GIAC_AL ) ) ;
if ( data . not_empty ( ) )
day = data ;
const bool use_al = m . get_bool ( S_USE_AL ) ;
1999-07-16 14:59:11 +00:00
TIndwin info ( 60 , format ( " Allineamento giacenze per %s... " , imp_filter ) , FALSE , FALSE ) ;
TImport_file mag_bpcs ( m . get ( F_PATH ) , BPCS_STOCK ) ;
TLocalisamfile mag ( LF_MAG ) ;
2000-05-05 15:25:49 +00:00
TLocalisamfile anamag ( LF_ANAMAG ) ;
1999-07-16 14:59:11 +00:00
TString codart , codmag , coddep , codimp ;
2000-05-05 15:25:49 +00:00
TString codlocation ;
1999-07-16 14:59:11 +00:00
int nummag , movimenti = 0 ;
bool ok ;
delete_files ( " ND_*.ini " ) ;
TMov_diff_inv * action ;
2001-05-02 13:40:49 +00:00
action = new TMov_diff_inv ( movimenti + + , day , use_al ) ;
1999-07-16 14:59:11 +00:00
action - > set_header ( imp_filter ) ;
2000-05-05 15:25:49 +00:00
// Crea i mag di eurocampo eventualemnte mancanti
1999-07-16 14:59:11 +00:00
mag . setkey ( 2 ) ;
ok = mag_bpcs . first ( ) = = NOERR ;
while ( ok )
{
codart = mag_bpcs . get ( " CODICE " ) ;
nummag = mag_bpcs . get_int ( " MAG " ) ;
num_mag2main_imp ( nummag , codimp ) ;
if ( codimp = = imp_filter )
2001-05-02 13:40:49 +00:00
{
TString16 loc = mag_bpcs . get ( " LOC " ) ;
imploc2codmagdep ( codimp , loc , codmag ) ;
2000-05-05 15:25:49 +00:00
//num_mag2cod_imp(nummag, codmag);
2001-05-02 13:40:49 +00:00
mag . put ( " ANNOES " , day . year ( ) ) ;
1999-07-16 14:59:11 +00:00
mag . put ( " CODART " , codart ) ;
mag . put ( " CODMAG " , codmag ) ;
if ( mag . read ( ) ! = NOERR )
{
2000-05-05 15:25:49 +00:00
anamag . put ( " CODART " , codart ) ;
int err = NOERR ;
bool skip = FALSE ;
while ( TRUE )
{
err = anamag . read ( _isequal , _testandlock ) ;
if ( err = = NOERR )
break ;
if ( err = = _islocked )
{
if ( yesno_box ( " Articolo %s bloccato: termina allineamento ? " , ( const char * ) codart ) )
return ;
if ( yesno_box ( " Tralascio l'articolo %s? " , ( const char * ) codart ) )
skip = TRUE ;
}
if ( err ! = _islocked )
{
if ( yesno_box ( " Articolo %s sconosciuto: termina allineamento ? " , ( const char * ) codart ) )
return ;
skip = TRUE ;
inserisci_articolo ( codart , mag_bpcs . get ( " UM " ) ) ;
}
}
if ( ! skip )
{
int nriga = 0 ;
2001-05-02 13:40:49 +00:00
mag . put ( " ANNOES " , day . year ( ) ) ;
2000-05-05 15:25:49 +00:00
mag . put ( " CODART " , codart ) ;
1999-07-16 14:59:11 +00:00
mag . put ( " NRIGA " , + + nriga ) ;
2000-05-05 15:25:49 +00:00
mag . setkey ( 1 ) ;
while ( mag . read ( ) = = NOERR )
mag . put ( " NRIGA " , + + nriga ) ;
mag . zero ( ' ' ) ;
2001-05-02 13:40:49 +00:00
mag . put ( " ANNOES " , day . year ( ) ) ;
2000-05-05 15:25:49 +00:00
mag . put ( " CODART " , codart ) ;
mag . put ( " NRIGA " , nriga ) ;
mag . put ( " CODMAG " , codmag ) ;
mag . write ( ) ;
mag . setkey ( 2 ) ;
anamag . read ( _isequal , _unlock ) ;
}
1999-07-16 14:59:11 +00:00
}
}
ok = mag_bpcs . next ( ) = = NOERR ;
}
real bpcsstock ;
mag_bpcs . first ( ) ;
mag . setkey ( 1 ) ;
mag . zero ( ) ;
2001-05-02 13:40:49 +00:00
mag . put ( " ANNOES " , day . year ( ) ) ;
1999-07-16 14:59:11 +00:00
ok = mag . read ( _isgteq ) = = NOERR ;
// magazzino Eurocampo vs mag BPCS
while ( ok )
{
codart = mag . get ( " CODART " ) ;
codmag = mag . get ( " CODMAG " ) ;
codimp = codmag . left ( 2 ) ;
nummag = cod_mag2num_mag ( codmag ) ;
2000-05-05 15:25:49 +00:00
coddep = codmag . sub ( 3 ) ;
codmag . cut ( 3 ) ;
anamag . put ( " CODART " , codart ) ;
int err = NOERR ;
bool skip = FALSE ;
while ( TRUE )
1999-07-16 14:59:11 +00:00
{
2000-05-05 15:25:49 +00:00
err = anamag . read ( _isequal , _testandlock ) ;
if ( err = = NOERR )
break ;
if ( err = = _islocked )
{
if ( yesno_box ( " Articolo %s bloccato: termina allineamento ? " , ( const char * ) codart ) )
break ;
if ( yesno_box ( " Tralascio l'articolo %s? " , ( const char * ) codart ) )
skip = TRUE ;
}
if ( err ! = _islocked )
1999-07-16 14:59:11 +00:00
{
2000-05-05 15:25:49 +00:00
if ( ! noyes_box ( " Articolo %s sconosciuto: termina allineamento ? " , ( const char * ) codart ) )
skip = TRUE ;
inserisci_articolo ( codart , mag_bpcs . get ( " UM " ) ) ;
break ;
1999-07-16 14:59:11 +00:00
}
}
2000-05-05 15:25:49 +00:00
if ( ! skip )
1999-07-16 14:59:11 +00:00
{
2000-05-05 15:25:49 +00:00
if ( err ! = NOERR )
break ;
2001-05-02 13:40:49 +00:00
if ( ( ( ( codimp = = " SE1 " | | codimp = = " TS1 " ) & & coddep = = " 07 " ) | | codimp = = imp_filter ) & & nummag > 0 )
2000-05-05 15:25:49 +00:00
{
2001-05-02 13:40:49 +00:00
coddep2location ( codmag , coddep , codlocation , nummag ) ;
if ( codmag = = " SE1 " & & coddep = = " 07 " )
2000-05-05 15:25:49 +00:00
nummag = 91 ;
if ( codmag = = " TS1 " & & coddep = = " 07 " )
2001-05-02 13:40:49 +00:00
nummag = 92 ;
2000-05-05 15:25:49 +00:00
action - > locate_bpcs_stock ( codart , nummag , codlocation , mag_bpcs , bpcsstock ) ;
action - > compare_stocks ( mag , bpcsstock , TRUE ) ;
/*if (FALSE && nummag < 30) // elimina
{
action - > locate_bpcs_stock ( codart , nummag - 1 , 0 , mag_bpcs , bpcsstock ) ;
action - > compare_stocks ( mag , bpcsstock , FALSE ) ;
} */
}
2001-05-02 13:40:49 +00:00
if ( codmag = = " SE3 " | | codmag = = " TS3 " /*|| coddep == "07"*/ )
2000-05-05 15:25:49 +00:00
{
// elimina vecchimagazzini SE3/TS3 e la vecchia codifica del magazzino di padova/parma
bpcsstock = ZERO ;
action - > compare_stocks ( mag , bpcsstock , TRUE ) ;
}
if ( action - > max_righe ( ) )
{
2001-05-02 13:40:49 +00:00
TString80 filename ( action - > name ( ) ) ;
2000-05-05 15:25:49 +00:00
delete action ;
2001-05-02 13:40:49 +00:00
if ( launch_ve0 )
{
TExternal_app gestdoc ( format ( " ve0.exe -1 -i%s " , ( const char * ) filename ) ) ;
gestdoc . run ( ) ;
}
action = new TMov_diff_inv ( movimenti + + , day , use_al ) ;
2000-05-05 15:25:49 +00:00
action - > set_header ( imp_filter ) ;
}
1999-07-16 14:59:11 +00:00
}
ok = mag . next ( ) = = NOERR ;
2000-05-05 15:25:49 +00:00
anamag . read ( _isequal , _unlock ) ;
}
1999-07-16 14:59:11 +00:00
if ( action - > righe ( ) )
{
2001-05-02 13:40:49 +00:00
TString80 filename ( action - > name ( ) ) ;
1999-07-16 14:59:11 +00:00
delete action ;
2001-05-02 13:40:49 +00:00
if ( launch_ve0 )
{
TExternal_app gestdoc ( format ( " ve0.exe -1 -i%s " , ( const char * ) filename ) ) ;
gestdoc . run ( ) ;
}
1999-07-16 14:59:11 +00:00
}
}
void unlink_numdoc ( const char * codnum , int anno )
{
TRelation * r = new TRelation ( LF_DOC ) ;
r - > add ( LF_RIGHEDOC , " PROVV==PROVV|ANNO==ANNO|CODNUM==CODNUM|NDOC==NDOC " ) ;
TCursor c ( r ) ;
TRectype from ( LF_DOC ) , to ( LF_DOC ) ;
from . put ( " PROVV " , " D " ) ;
from . put ( " ANNO " , anno ) ;
from . put ( " CODNUM " , codnum ) ;
to = from ;
c . setregion ( from , to ) ;
const long items = c . items ( ) ;
TProgind info ( items , format ( " Scollegamento documenti %s anno %d... " , codnum , anno ) , FALSE , TRUE ) ;
for ( long i = items - 1 ; i > = 0 ; i - - )
{
c = i ;
info . addstatus ( 1 ) ;
TLocalisamfile & doc = r - > lfile ( ) ;
TLocalisamfile & rdoc = r - > lfile ( LF_RIGHEDOC ) ;
if ( doc . get_long ( " MOVMAG " ) ! = 0L )
{
doc . put ( " MOVMAG " , 0 ) ;
doc . rewrite ( ) ;
}
if ( r - > is_first_match ( LF_RIGHEDOC ) )
do {
if ( rdoc . get_long ( " MOVMAG " ) ! = 0L )
{
rdoc . put ( " MOVMAG " , 0 ) ;
rdoc . rewrite ( ) ;
}
} while ( r - > next_match ( LF_RIGHEDOC ) ) ;
}
}
void unlink_docs ( )
{
unlink_numdoc ( " SEBA " , 1998 ) ;
unlink_numdoc ( " SEBA " , 1999 ) ;
unlink_numdoc ( " SEBE " , 1998 ) ;
unlink_numdoc ( " SEBE " , 1999 ) ;
unlink_numdoc ( " SEBP " , 1998 ) ;
unlink_numdoc ( " SEBP " , 1999 ) ;
unlink_numdoc ( " SEBT " , 1998 ) ;
unlink_numdoc ( " SEBT " , 1999 ) ;
unlink_numdoc ( " SEBU " , 1998 ) ;
unlink_numdoc ( " SEBU " , 1999 ) ;
unlink_numdoc ( " SEBV " , 1998 ) ;
unlink_numdoc ( " SEBV " , 1999 ) ;
unlink_numdoc ( " SEDI " , 1998 ) ;
unlink_numdoc ( " SEDI " , 1999 ) ;
unlink_numdoc ( " SEFA " , 1998 ) ;
unlink_numdoc ( " SEFA " , 1999 ) ;
unlink_numdoc ( " SEMM " , 1998 ) ;
unlink_numdoc ( " SEMM " , 1999 ) ;
unlink_numdoc ( " SEMP " , 1998 ) ;
unlink_numdoc ( " SEMP " , 1999 ) ;
unlink_numdoc ( " SEOC " , 1998 ) ;
unlink_numdoc ( " SEOC " , 1999 ) ;
unlink_numdoc ( " SEOF " , 1998 ) ;
unlink_numdoc ( " SEOF " , 1999 ) ;
unlink_numdoc ( " SEOP " , 1998 ) ;
unlink_numdoc ( " SEOP " , 1999 ) ;
unlink_numdoc ( " SERF " , 1998 ) ;
unlink_numdoc ( " SERF " , 1999 ) ;
}
void kill_blank_mag ( const TMask & m , const char * codmag )
{
TLocalisamfile mag ( LF_MAG ) , mag2 ( LF_MAG ) ;
mag2 . setkey ( 2 ) ;
TString codart ;
int anno ;
int err = mag . first ( ) ;
while ( err = = NOERR )
{
anno = mag . get_int ( " ANNOES " ) ;
codart = mag . get ( " CODART " ) ;
mag2 . put ( " ANNOES " , anno ) ;
mag2 . put ( " CODMAG " , codmag ) ;
mag2 . put ( " CODART " , codart ) ;
if ( mag2 . read ( ) = = NOERR )
{
}
else
{
}
err = mag . next ( ) ;
}
}
bool unify_magcode ( const char * field , TLocalisamfile & file , bool only3 = FALSE )
{
TString codmag = file . get ( field ) ;
if ( codmag . blank ( ) )
return FALSE ;
2000-05-05 15:25:49 +00:00
int coddep = atoi ( codmag . sub ( 3 ) ) ;
if ( coddep = = 7 )
{
TString codmagazz = codmag . left ( 3 ) ;
if ( codmagazz = = " SE1 " )
codmag = " PR1 " ;
if ( codmagazz = = " TS1 " )
codmag = " PD1 " ;
codmag . overwrite ( " PF " , 3 ) ; // deposito produzione finiti
}
else
1999-07-16 14:59:11 +00:00
if ( ! only3 & & codmag [ 2 ] = = ' 1 ' & & codmag [ 3 ] = = ' \0 ' )
{
codmag . overwrite ( " PF " , 3 ) ; // deposito produzione finiti
}
else if ( codmag [ 2 ] = = ' 3 ' & & codmag [ 3 ] ! = ' \0 ' )
{
codmag [ 2 ] = ' 1 ' ;
} else if ( codmag = = " PF " )
{
codmag = " " ;
} else
return FALSE ;
2000-05-05 15:25:49 +00:00
if ( codmag = = file . get ( field ) )
return FALSE ;
1999-07-16 14:59:11 +00:00
file . put ( field , codmag ) ;
2000-05-05 15:25:49 +00:00
int err ;
if ( ( err = file . rewrite ( ) ) ! = NOERR )
err = file . write ( ) ;
if ( err ! = NOERR )
message_box ( " Impossibile scrivere il record %d del file %d " , file . recno ( ) , file . num ( ) ) ;
1999-07-16 14:59:11 +00:00
do_events ( ) ;
return TRUE ;
}
void unify_mags_reset_bar ( TProgind & pi , const char * msg2 , long max )
{
const char * msg = " Unificazione magazzini interni e terzisti: " ;
pi . set_text ( format ( " %s%s " , msg , msg2 ) ) ;
pi . setstatus ( 0 ) ;
2000-05-05 15:25:49 +00:00
pi . setmax ( max ? max : 1 ) ;
}
void check_movmags ( const TMask & m )
{
TString codmag ;
int err ;
TLocalisamfile mag ( LF_MAG ) ,
rmovmag ( LF_RMOVMAG ) , movmag ( LF_MOVMAG ) ;
TProgind info ( 80 , " " , FALSE , TRUE ) ;
TLocalisamfile doc ( LF_DOC ) , rdoc ( LF_RIGHEDOC ) ;
TString8 caumag ;
TString16 codnum ;
long ndoc ;
int anno ;
bool remove ;
bool rewrite ;
unify_mags_reset_bar ( info , " Correzione stringa di rif.doc. sui mov mag " , movmag . items ( ) ) ;
err = movmag . first ( ) ;
while ( err = = NOERR )
{
TString descr = movmag . get ( " DESCR " ) ;
rewrite = FALSE ;
if ( descr . left ( 5 ) = = " n.ro " )
{
codnum = movmag . get ( " CODNUM " ) ;
anno = movmag . get_int ( " ANNODOC " ) ;
ndoc = movmag . get_long ( " NUMDOC " ) ;
if ( ndoc )
{
doc . put ( DOC_PROVV , " D " ) ;
doc . put ( DOC_CODNUM , codnum ) ;
doc . put ( DOC_ANNO , anno ) ;
doc . put ( DOC_NDOC , ndoc ) ;
err = doc . read ( ) ;
if ( err = = NOERR )
{
descr = codnum ;
descr < < " n. " < < ndoc < < " del " < < doc . get ( " DATADOC " ) ;
rewrite = TRUE ;
}
}
}
if ( rewrite )
{
movmag . put ( " DESCR " , descr ) ;
while ( ( err = movmag . rewrite ( ) ) ! = NOERR )
yesno_box ( " Errore %d nella scrittura del movimento %ld. \n Riprovo ? " , err , rdoc . get_long ( " NUMREG " ) ) ;
}
info . addstatus ( 1 ) ;
err = movmag . next ( ) ;
}
unify_mags_reset_bar ( info , " Correzione date reg e comp errate " , movmag . items ( ) ) ;
err = movmag . first ( ) ;
while ( err = = NOERR )
{
TDate datareg = movmag . get_date ( " DATAREG " ) ;
TDate datacomp = movmag . get_date ( " DATACOMP " ) ;
rewrite = FALSE ;
if ( ! datacomp . ok ( ) )
{
datacomp = datareg ;
rewrite = datacomp . ok ( ) ;
}
if ( ! datacomp . ok ( ) )
{
codnum = movmag . get ( " CODNUM " ) ;
anno = movmag . get_int ( " ANNODOC " ) ;
ndoc = movmag . get_long ( " NUMDOC " ) ;
if ( ndoc )
{
doc . put ( DOC_PROVV , " D " ) ;
doc . put ( DOC_CODNUM , codnum ) ;
doc . put ( DOC_ANNO , anno ) ;
doc . put ( DOC_NDOC , ndoc ) ;
err = doc . read ( ) ;
if ( err = = NOERR )
{
datacomp = doc . get ( " DATADOC " ) ;
rewrite = TRUE ;
}
}
}
if ( ! datacomp . ok ( ) )
warning_box ( " Data di competenza non valida sul movimento di magazzino %ld " , movmag . get_long ( " NUMREG " ) ) ;
else
if ( rewrite )
{
movmag . put ( " DATACOMP " , datacomp ) ;
movmag . put ( " DATAREG " , datacomp ) ;
while ( ( err = movmag . rewrite ( ) ) ! = NOERR )
yesno_box ( " Errore %d nella scrittura del movimento %ld. \n Riprovo ? " , err , rdoc . get_long ( " NUMREG " ) ) ;
}
info . addstatus ( 1 ) ;
err = movmag . next ( ) ;
}
unify_mags_reset_bar ( info , " Distruzione righe mov.mag. non da documento " , movmag . items ( ) ) ;
err = movmag . first ( ) ;
while ( err = = NOERR )
{
codnum = movmag . get ( " CODNUM " ) ;
anno = movmag . get_int ( " ANNODOC " ) ;
ndoc = movmag . get_long ( " NUMDOC " ) ;
doc . put ( DOC_PROVV , " D " ) ;
doc . put ( DOC_CODNUM , codnum ) ;
doc . put ( DOC_ANNO , anno ) ;
doc . put ( DOC_NDOC , ndoc ) ;
remove = FALSE ;
err = doc . read ( ) ;
if ( err = = _iskeynotfound | | err = = _iseof )
remove = TRUE ;
else
remove = doc . get ( DOC_CAUSMAG ) . blank ( ) ;
if ( ! remove )
{
remove = movmag . get ( " NUMREG " ) ! = doc . get ( " MOVMAG " ) ;
if ( remove )
{
doc . put ( " MOVMAG " , 0 ) ;
while ( ( err = doc . rewrite ( ) ) ! = NOERR )
yesno_box ( " Errore %d nella scrittura del documento %s %d %ld. \n Riprovo ? " , err , ( const char * ) rdoc . get ( RDOC_CODNUM ) , rdoc . get_int ( RDOC_ANNO ) , rdoc . get_long ( RDOC_NDOC ) ) ;
}
}
caumag = doc . get ( DOC_CAUSMAG ) ;
if ( remove )
movmag . remove ( ) ;
info . addstatus ( 1 ) ;
err = movmag . next ( ) ;
}
unify_mags_reset_bar ( info , " Distruzione righe mov.mag. orfane " , rmovmag . items ( ) ) ;
err = rmovmag . first ( ) ;
while ( err = = NOERR )
{
movmag . put ( " NUMREG " , rmovmag . get ( " NUMREG " ) ) ;
err = movmag . read ( ) ;
if ( err = = _iskeynotfound | | err = = _iseof )
rmovmag . remove ( ) ;
info . addstatus ( 1 ) ;
err = rmovmag . next ( ) ;
}
return ;
1999-07-16 14:59:11 +00:00
}
2000-05-05 15:25:49 +00:00
1999-07-16 14:59:11 +00:00
void unify_mags ( const TMask & m )
{
2000-05-05 15:25:49 +00:00
TTable impianti ( " IMP " ) , linee ( " LNP " ) , tabmag ( " MAG " ) , caumag ( " %CAU " ) ;
1999-07-16 14:59:11 +00:00
TString codmag ;
2000-05-05 15:25:49 +00:00
int err ;
1999-07-16 14:59:11 +00:00
TLocalisamfile mag ( LF_MAG ) ,
2000-05-05 15:25:49 +00:00
rmovmag ( LF_RMOVMAG ) , movmag ( LF_MOVMAG ) ;
2001-05-02 13:40:49 +00:00
TProgind info ( 80 , " " , TRUE , TRUE ) ;
2000-05-05 15:25:49 +00:00
unify_mags_reset_bar ( info , " tabella causali mag " , caumag . items ( ) ) ;
err = caumag . first ( ) ;
while ( err = = NOERR )
{
unify_magcode ( " S10 " , caumag ) ;
err = caumag . next ( ) ;
info . addstatus ( 1 ) ;
2001-05-02 13:40:49 +00:00
if ( info . iscancelled ( ) )
return ;
2000-05-05 15:25:49 +00:00
}
1999-07-16 14:59:11 +00:00
message_box ( " Modificare a mano la tabella magazzini " ) ;
unify_mags_reset_bar ( info , " tabella impianti " , impianti . items ( ) ) ;
impianti . setkey ( 2 ) ;
2000-05-05 15:25:49 +00:00
err = impianti . first ( ) ;
1999-07-16 14:59:11 +00:00
while ( err = = NOERR )
{
unify_magcode ( " S7 " , impianti ) ;
unify_magcode ( " S8 " , impianti ) ;
err = impianti . next ( ) ;
info . addstatus ( 1 ) ;
2001-05-02 13:40:49 +00:00
if ( info . iscancelled ( ) )
return ;
1999-07-16 14:59:11 +00:00
}
unify_mags_reset_bar ( info , " tabella linee di produzione " , linee . items ( ) ) ;
linee . setkey ( 2 ) ;
err = linee . first ( ) ;
while ( err = = NOERR )
{
unify_magcode ( " S7 " , linee ) ;
unify_magcode ( " S8 " , linee ) ;
err = linee . next ( ) ;
info . addstatus ( 1 ) ;
2001-05-02 13:40:49 +00:00
if ( info . iscancelled ( ) )
return ;
1999-07-16 14:59:11 +00:00
}
unify_mags_reset_bar ( info , " giacenze " , mag . items ( ) ) ;
err = mag . first ( ) ;
while ( err = = NOERR )
{
2001-05-02 13:40:49 +00:00
unify_magcode ( " CODMAG " , mag ) ;
1999-07-16 14:59:11 +00:00
err = mag . next ( ) ;
info . addstatus ( 1 ) ;
2001-05-02 13:40:49 +00:00
if ( info . iscancelled ( ) )
return ;
2000-05-05 15:25:49 +00:00
}
1999-07-16 14:59:11 +00:00
unify_mags_reset_bar ( info , " movimenti di magazzino " , rmovmag . items ( ) ) ;
err = rmovmag . first ( ) ;
2000-05-05 15:25:49 +00:00
movmag . zero ( ) ;
1999-07-16 14:59:11 +00:00
while ( err = = NOERR )
{
unify_magcode ( " CODMAG " , rmovmag ) ;
err = rmovmag . next ( ) ;
info . addstatus ( 1 ) ;
2001-05-02 13:40:49 +00:00
if ( info . iscancelled ( ) )
return ;
1999-07-16 14:59:11 +00:00
}
2000-05-05 15:25:49 +00:00
TLocalisamfile doc ( LF_DOC ) , rdoc ( LF_RIGHEDOC ) ;
unify_mags_reset_bar ( info , " righe documenti " , rdoc . items ( ) ) ;
1999-07-16 14:59:11 +00:00
err = rdoc . first ( ) ;
2000-05-05 15:25:49 +00:00
doc . zero ( ) ;
TString16 codnum ;
long ndoc ;
int anno ;
1999-07-16 14:59:11 +00:00
while ( err = = NOERR )
{
2000-05-05 15:25:49 +00:00
codnum = rdoc . get ( RDOC_CODNUM ) ;
anno = rdoc . get_int ( RDOC_ANNO ) ;
ndoc = rdoc . get_long ( RDOC_NDOC ) ;
do {
if ( err ! = NOERR
| | doc . get ( DOC_CODNUM ) ! = codnum
| | doc . get_int ( DOC_ANNO ) ! = anno
| | doc . get_long ( DOC_NDOC ) ! = ndoc )
{
doc . put ( DOC_PROVV , " D " ) ;
doc . put ( DOC_CODNUM , codnum ) ;
doc . put ( DOC_ANNO , anno ) ;
doc . put ( DOC_NDOC , ndoc ) ;
err = doc . read ( ) ;
}
} while ( err ! = NOERR & & yesno_box ( " Errore nella lettura del documento %s %d %ld. \n Riprovo ? " , ( const char * ) rdoc . get ( RDOC_CODNUM ) , rdoc . get_int ( RDOC_ANNO ) , rdoc . get_long ( RDOC_NDOC ) ) ) ;
if ( err = = NOERR )
{
unify_magcode ( " CODMAG " , rdoc ) ;
unify_magcode ( " CODMAGC " , rdoc ) ;
}
1999-07-16 14:59:11 +00:00
err = rdoc . next ( ) ;
info . addstatus ( 1 ) ;
2001-05-02 13:40:49 +00:00
if ( info . iscancelled ( ) )
return ;
1999-07-16 14:59:11 +00:00
}
}
void checkexplosions ( const TMask & m )
{
TLocalisamfile movmag ( LF_MOVMAG ) ,
rmovmag ( LF_RMOVMAG ) ;
TArray boom ;
TAssoc_array movs , arts ;
TDistinta_tree search ;
TString desc , codcaus , key , grmerc ;
TLocalisamfile anamag ( LF_ANAMAG ) ;
int err = rmovmag . last ( ) ;
TProgind info ( rmovmag . items ( ) , " Controllo scarichi errati da esplosioni distinte " , FALSE , TRUE ) ;
while ( err = = NOERR )
{
movmag . put ( " ANNOES " , " 1999 " ) ;
movmag . put ( " NUMREG " , rmovmag . get ( " NUMREG " ) ) ;
movmag . read ( ) ;
desc = movmag . get ( " DESCR " ) ;
codcaus = rmovmag . get ( " CAUS " ) ;
if ( codcaus . blank ( ) )
codcaus = movmag . get ( " CODCAUS " ) ;
key = rmovmag . get ( " CODART " ) ;
anamag . put ( " CODART " , key ) ;
if ( ! arts . is_key ( key ) )
{
if ( anamag . read ( ) ! = NOERR )
{
message_box ( " Articolo '%s' mancante " ,
( const char * ) rmovmag . get ( " CODART " ) ) ;
arts . add ( key , grmerc ) ;
grmerc = " ~ " ;
}
else
grmerc = anamag . get ( " GRMERC " ) ;
}
else
grmerc = ( TString & ) arts [ key ] ;
if ( grmerc [ 0 ] = = ' ~ ' | | codcaus . left ( 3 ) = = " SCC " )
{
if ( grmerc [ 0 ] = = ' ~ ' | | grmerc [ 0 ] = = ' F ' )
{
if ( ! arts . is_key ( key ) )
{
if ( search . set_root ( key ) )
{
search . explode ( boom , FALSE , RAGGR_EXP_NONE , 1 , " A " ) ;
if ( boom . items ( ) < = 0 )
message_box ( " Distinta di %s priva di componenti " , ( const char * ) key ) ;
} else
message_box ( " Distinta di %s mancante " , ( const char * ) key ) ;
arts . add ( key , grmerc ) ;
}
key = format ( " %ld " , rmovmag . get_long ( " NUMREG " ) ) ;
if ( ! movs . is_key ( key ) )
{
message_box ( " Errore nel movimento %ld (%s) " ,
rmovmag . get_long ( " NUMREG " ) ,
( const char * ) desc ) ;
movs . add ( key , key ) ;
}
}
}
err = rmovmag . prev ( ) ;
info . addstatus ( 1 ) ;
}
}
2000-05-05 15:25:49 +00:00
// rimuove le unit<69> di misura errate
void remove_wrong_um ( const TMask & m )
{
const bool vars = noyes_box ( " Vuoi eliminare tutte le unit<69> di misura delle varianti di produzione? " ) ;
const bool var3 = vars ? 1 : yesno_box ( " Vuoi eliminare le unit<69> di misura degli articoli tipo 'xxxxx__SE3xx' o 'xxxx__TS3xx'? " ) ;
TLocalisamfile umart ( LF_UMART ) ;
int err = umart . last ( ) ;
TProgind info ( umart . items ( ) , " Eliminazione unit<69> di misura " , FALSE , TRUE ) ;
TString code ;
while ( err = = NOERR )
{
code = umart . get ( " CODART " ) ;
if ( ( var3 & & ( code . find ( " __SE3 " ) > = 0 | | code . find ( " __TS3 " ) > = 0 ) )
| | ( vars & & code . find ( " __ " ) > = 3 ) )
umart . remove ( ) ;
err = umart . prev ( ) ;
info . addstatus ( 1 ) ;
}
}
bool sum_giacfield ( TRectype & dest , const TRectype & source , const char * filedname )
{
dest . put ( filedname , dest . get_real ( filedname ) + source . get_real ( filedname ) ) ;
return ! source . get_real ( filedname ) . is_zero ( ) ;
}
bool sum_giacrecord ( TRectype & dest , const TRectype & source )
{
bool some = FALSE ;
some | = sum_giacfield ( dest , source , " RIM " ) ;
some | = sum_giacfield ( dest , source , " VALRIM " ) ;
some | = sum_giacfield ( dest , source , " ACQ " ) ;
some | = sum_giacfield ( dest , source , " VALACQ " ) ;
some | = sum_giacfield ( dest , source , " ENT " ) ;
some | = sum_giacfield ( dest , source , " VALENT " ) ;
some | = sum_giacfield ( dest , source , " VEN " ) ;
some | = sum_giacfield ( dest , source , " VALVEN " ) ;
some | = sum_giacfield ( dest , source , " USC " ) ;
some | = sum_giacfield ( dest , source , " VALUSC " ) ;
some | = sum_giacfield ( dest , source , " GIAC " ) ;
some | = sum_giacfield ( dest , source , " ORDF " ) ;
some | = sum_giacfield ( dest , source , " VALORDF " ) ;
some | = sum_giacfield ( dest , source , " ORDC " ) ;
some | = sum_giacfield ( dest , source , " VALORDC " ) ;
some | = sum_giacfield ( dest , source , " INCL " ) ;
some | = sum_giacfield ( dest , source , " ACL " ) ;
some | = sum_giacfield ( dest , source , " PRODCOMP " ) ;
some | = sum_giacfield ( dest , source , " PRODFIN " ) ;
some | = sum_giacfield ( dest , source , " NLABEL " ) ;
some | = sum_giacfield ( dest , source , " NDIST " ) ;
some | = sum_giacfield ( dest , source , " SCARTI " ) ;
return some ;
}
// rimuove le unit<69> di misura errate
void unify_giacrecords ( const TMask & m )
{
TLocalisamfile anamag ( LF_ANAMAG ) ;
TLocalisamfile mag ( LF_MAG ) ;
TString last_art ;
TToken_string key ;
TAssoc_array giacrows ;
int err = mag . first ( ) ;
TProgind info ( mag . items ( ) , " Rimozione righe di giacenza doppie " , FALSE , TRUE ) ;
while ( err = = NOERR )
{
if ( last_art . blank ( ) | | last_art ! = mag . get ( " CODART " ) )
{
last_art = mag . get ( " CODART " ) ;
anamag . put ( " CODART " , last_art ) ;
while ( anamag . read ( _excllock ) ! = NOERR )
{
error_box ( " Record di anagrafica %s bloccato " , ( const char * ) last_art ) ;
}
giacrows . destroy ( ) ;
}
int curr_riga = mag . get_int ( " NRIGA " ) ;
if ( mag . get ( " ANNOES " ) = = " 0 " )
mag . remove ( ) ;
else
{
key . add ( mag . get ( " ANNOES " ) , 0 ) ;
key . add ( mag . get ( " CODART " ) , 1 ) ;
key . add ( mag . get ( " CODMAG " ) , 2 ) ;
key . add ( mag . get ( " LIVELLO " ) , 3 ) ;
if ( giacrows . is_key ( key ) )
{
// giacenza duplicata!
int last_riga = atoi ( ( TString & ) giacrows [ key ] ) ;
TRectype dup ( mag . curr ( ) ) ;
mag . put ( " NRIGA " , last_riga ) ;
mag . read ( ) ;
if ( sum_giacrecord ( mag . curr ( ) , dup ) )
mag . rewrite ( ) ;
mag . put ( " NRIGA " , curr_riga ) ;
mag . remove ( ) ;
} else {
//
giacrows . add ( key , new TString ( mag . get ( " NRIGA " ) ) ) ;
}
}
mag . put ( " NRIGA " , + + curr_riga ) ;
err = mag . read ( _isgteq ) ;
info . addstatus ( 1 ) ;
}
anamag . read ( ) ;
rinumera_mags ( ) ;
}
// rimuove le unit<69> di misura errate
void find_wrong_um ( const TMask & m )
{
TLocalisamfile dist ( LF_DIST ) ;
TLocalisamfile rdist ( LF_RDIST ) ;
TLocalisamfile umart ( LF_UMART ) ;
int err = dist . last ( ) ;
TProgind info ( dist . items ( ) , " Ricerca unit<69> di misura di distinta errate " , FALSE , TRUE ) ;
TString coddist , codeum , code ;
while ( err = = NOERR )
{
coddist = dist . get ( " CODDIST " ) ;
codeum = dist . get ( " UM " ) ;
umart . setkey ( 2 ) ;
umart . put ( " CODART " , coddist ) ;
umart . put ( " UM " , codeum ) ;
if ( umart . read ( ) ! = NOERR )
codeum = " " ;
umart . setkey ( 1 ) ;
if ( codeum . blank ( ) )
{
umart . put ( " CODART " , coddist ) ;
umart . put ( " NRIGA " , 1 ) ;
if ( umart . read ( ) = = NOERR )
{
dist . put ( " UM " , umart . get ( " UM " ) ) ;
err = dist . rewrite ( ) ;
} else {
int pos = coddist . find ( " __ " ) ;
if ( pos > = 0 )
{
umart . put ( " CODART " , coddist . left ( pos ) ) ;
umart . put ( " NRIGA " , " 1 " ) ;
if ( umart . read ( ) = = NOERR )
{
codeum = umart . get ( " UM " ) ;
umart . put ( " CODART " , coddist ) ;
umart . put ( " NRIGA " , " 1 " ) ;
err = umart . write ( ) ;
}
}
if ( codeum . blank ( ) )
2001-05-02 13:40:49 +00:00
if ( yesno_box ( " Unit<EFBFBD> di misura nulla per %s. Aggiungo " , ( const char * ) coddist ) )
{
umart . put ( " CODART " , coddist ) ;
umart . put ( " NRIGA " , " 2 " ) ;
umart . put ( " UM " , dist . get ( " UM " ) ) ;
umart . put ( " FC " , 1 ) ;
err = umart . write ( ) ;
if ( err ! = NOERR )
warning_box ( " Errore in scrittura UM " ) ;
}
2000-05-05 15:25:49 +00:00
}
}
else if ( coddist . find ( " __ " ) > = 0 )
{
// variante di prod, probabilmente da esprimere in batch di prod
2001-05-02 13:40:49 +00:00
bool chk_ricetta = FALSE ;
bool chk_distinta = FALSE ;
real bp = ZERO ;
if ( codeum ! = " BP " ) // oh, guarda, la UM non <20> uguale a batch, caso sospetto!
2000-05-05 15:25:49 +00:00
{
umart . setkey ( 2 ) ;
umart . put ( " CODART " , coddist ) ;
umart . put ( " UM " , " BP " ) ;
if ( ( err = umart . read ( ) ) = = NOERR )
bp = umart . get_real ( " FC " ) ;
umart . setkey ( 1 ) ;
2001-05-02 13:40:49 +00:00
if ( bp . is_zero ( ) | | bp = = 1.0 )
chk_distinta = TRUE ;
}
else
{
umart . setkey ( 2 ) ;
umart . put ( " CODART " , coddist ) ;
umart . put ( " UM " , " BP " ) ;
if ( ( err = umart . read ( ) ) = = NOERR )
bp = umart . get_real ( " FC " ) ;
umart . setkey ( 1 ) ;
umart . put ( " CODART " , coddist ) ;
umart . put ( " NRIGA " , " 1 " ) ;
err = umart . read ( ) ;
if ( err = = NOERR )
if ( umart . get ( " UM " ) = = " KG " )
chk_ricetta = TRUE ;
else
if ( bp = = 1.0 )
chk_distinta = TRUE ;
}
if ( chk_distinta )
{
2000-05-05 15:25:49 +00:00
real total = ZERO ;
rdist . zero ( ) ;
rdist . put ( " CODDIST " , coddist ) ;
2001-05-02 13:40:49 +00:00
if ( rdist . read ( ) )
2000-05-05 15:25:49 +00:00
{
int newbp = 0 ;
2001-05-02 13:40:49 +00:00
while ( bp < = 1.0 & & coddist = = rdist . get ( " CODDIST " ) //
& & ( rdist . get ( " TIPO " ) ! = " V " ) )
2000-05-05 15:25:49 +00:00
{
code = rdist . get ( " CODCOMP " ) ;
real expr = rdist . get_real ( " EXPR " ) ;
if ( ! expr . is_zero ( ) )
{
if ( rdist . get ( " UM " ) ! = " KG " & & rdist . get ( " UM " ) ! = " GR " )
{
total = ZERO ;
if ( expr = = 1.0 | | ( expr < 10.0 & & expr = = ( int ) expr . integer ( ) ) )
bp = 1.0 ;
else
{
expr / = 1000.0 ;
newbp = ( int ) expr . integer ( ) ;
if ( expr = = newbp )
newbp = 1000 ;
else
{
expr * = 10.0 ;
newbp = ( int ) expr . integer ( ) ;
if ( expr = = newbp )
newbp = 100 ;
else
{
expr * = 100.0 ;
newbp = ( int ) expr . integer ( ) ;
if ( expr = = newbp )
newbp = 1 ;
else
newbp = 0 ;
}
}
}
if ( bp > 1.0 & & code . find ( " __ " ) < 0 )
{
if ( bp ! = newbp )
bp = - 1.0 ;
}
else
bp = newbp ? newbp : bp ;
}
else
total + = expr ;
}
rdist . next ( ) ;
}
}
if ( bp = = 0 & & ! total . is_zero ( ) )
if ( total > 1000 )
bp = 10000.0 ;
else if ( total > 100 )
bp = 1000.0 ;
else if ( total > 10 )
bp = 100.0 ;
if ( bp > 1.0 & & ! yesno_box ( " Imposto la UM di distinta per %s a %s %s ? " , ( const char * ) coddist , bp . string ( ) , ( const char * ) codeum ) )
bp = ZERO ;
if ( bp < 1.0 )
if ( ! number_box ( format ( " Batch di distinta per %s " , ( const char * ) coddist ) , bp ) )
bp = 1.0 ;
if ( bp > 1.0 )
{
umart . zero ( ) ;
umart . put ( " CODART " , coddist ) ;
umart . put ( " NRIGA " , " 2 " ) ;
umart . put ( " UM " , " BP " ) ;
umart . put ( " FC " , bp ) ;
if ( ( err = umart . write ( ) ) ! = NOERR )
{
2001-05-02 13:40:49 +00:00
umart . rewrite ( ) ;
2000-05-05 15:25:49 +00:00
}
dist . put ( " UM " , " BP " ) ;
err = dist . rewrite ( ) ;
} else {
if ( bp ! = 1 )
warning_box ( " UM di distinta per %s %s " , ( const char * ) coddist , ( const char * ) codeum ) ;
}
}
2001-05-02 13:40:49 +00:00
if ( chk_ricetta )
{
real totale_ricetta = ZERO ;
rdist . zero ( ) ;
rdist . put ( " CODDIST " , coddist ) ;
rdist . read ( _isgteq + _nolock ) ;
while ( coddist = = rdist . get ( " CODDIST " ) )
{
code = rdist . get ( " CODCOMP " ) ;
real expr = rdist . get_real ( " EXPR " ) ;
if ( rdist . get ( " UM " ) = = " KG " )
totale_ricetta = totale_ricetta + expr ;
if ( rdist . get ( " UM " ) = = " GR " )
totale_ricetta = totale_ricetta + ( expr / 1000.0 ) ;
rdist . next ( ) ;
}
if ( bp ! = totale_ricetta & & ( ( ( bp - totale_ricetta ) > 0.001 ) | |
( ( totale_ricetta - bp ) > 0.001 ) ) )
{
TString ts ( totale_ricetta . string ( ) ) ;
if ( ( totale_ricetta = = 10000.0 | | totale_ricetta = = 1000.0 ) )
{
if ( yesno_box ( " Batch di produzione per %s a %s; lo porto a %s " ,
( const char * ) coddist , ( const char * ) bp . string ( ) , ( const char * ) ts ) )
{
umart . put ( " CODART " , coddist ) ;
umart . put ( " UM " , " BP " ) ;
umart . put ( " FC " , totale_ricetta ) ;
umart . rewrite ( ) ;
}
} // else
// warning_box("Batch di produzione per %s a %s, totale componenti %s",
// (const char *)coddist, (const char *)bp.string(), (const char *)ts);
}
}
2000-05-05 15:25:49 +00:00
}
info . addstatus ( 1 ) ;
err = dist . prev ( ) ;
}
}
1999-07-16 14:59:11 +00:00
class TCover_services : public TSkeleton_application
{
protected :
virtual void main_loop ( ) ;
} ;
class TService_mask : public TAutomask
{
protected :
virtual bool on_field_event ( TOperable_field & o , TField_event e , long jolly ) ;
public :
TService_mask ( ) : TAutomask ( " dbcv02a.msk " ) { }
} ;
bool TService_mask : : on_field_event ( TOperable_field & o , TField_event e , long jolly )
{
switch ( o . dlg ( ) )
{
case DLG_OK :
if ( e = = fe_button )
{
switch ( get_int ( F_SERVICE ) )
{
case 1 :
if ( noyes_box ( " Confermi la cancellazione del file degli articoli da escludere ? " ) )
{
TSupport_file morti ( LF_DIST , ANAGRAFICA_MORTI ) ;
morti . zap ( ) ;
}
break ;
case 2 :
crea_mag3 ( ) ;
break ;
case 3 :
crea_linee3 ( ) ;
break ;
case 4 :
if ( noyes_box ( " Rinumero le righe delle distinte? " ) )
rinumera_dist ( ) ;
break ;
case 5 :
if ( noyes_box ( " Rinumero le unita' di misura? " ) )
rinumera_ums ( ) ;
break ;
case 6 :
if ( noyes_box ( " Le lavorazioni presenti sui finiti verrano spostate sulle varianti di impianto. Confermi? " ) )
if ( sposta_lavs ( ) & & yesno_box ( " Rinumero le righe di lavorazione? " ) )
rinumera_dist ( ) ;
break ;
case 7 :
build2levmsp ( ) ;
break ;
case 8 :
setformulavar ( ) ;
break ;
case 9 :
//check_mag_locations(get(F_PATH),source);
break ;
case 10 :
evadi_orc ( * this , get ( S_CODIMP ) ) ;
break ;
case 11 :
unevadi_orc ( * this , get ( S_CODIMP ) ) ;
break ;
case 12 :
find_wrongcycle ( ) ;
break ;
case 13 :
sinchro_stock ( * this , " SE " ) ;
sinchro_stock ( * this , " TS " ) ;
break ;
case 14 :
unlink_docs ( ) ;
break ;
case 15 :
kill_blank_mag ( * this , " SE1 " ) ;
break ;
case 16 :
unify_mags ( * this ) ;
break ;
case 17 :
checkexplosions ( * this ) ;
2000-05-05 15:25:49 +00:00
case 18 :
remove_wrong_um ( * this ) ;
break ;
case 19 :
find_wrong_um ( * this ) ;
break ;
case 20 :
check_movmags ( * this ) ;
break ;
case 21 :
unify_giacrecords ( * this ) ;
break ;
case 22 :
if ( noyes_box ( " Rinumero le righe di giacenza? " ) )
rinumera_mags ( ) ;
1999-07-16 14:59:11 +00:00
break ;
case 100 :
if ( noyes_box ( " Esporto le lavorazioni? " ) )
//exportlavs();
break ;
}
}
}
return TRUE ;
}
2001-05-02 13:40:49 +00:00
void converti_magazzino ( TLocalisamfile & file , const char * campo , const char * campovecchio , const char * camponuovo )
{
file . first ( ) ;
while ( ! file . eof ( ) )
{
if ( file . get ( campo ) = = campovecchio )
{
file . put ( campo , camponuovo ) ;
file . rewrite ( ) ;
}
file . next ( ) ;
do_events ( ) ;
}
}
void uniscimag ( const char * campovecchio , const char * camponuovo )
{
TLocalisamfile file ( LF_MAG ) , nfile ( LF_MAG ) ; ;
TString codart = " " ;
real qentr , qusc , qacq , qven , qrimin , qgiac ;
real vqentr , vqusc , vqacq , vqven , vqrimin ;
int nriga = 1 ;
int annoes ;
bool done = TRUE ;
file . first ( ) ;
while ( ! file . eof ( ) )
{
if ( codart = = " " )
{
codart = file . get ( " CODART " ) ;
annoes = file . get_int ( " ANNOES " ) ;
done = TRUE ;
}
if ( file . get ( " CODMAG " ) = = campovecchio )
{
qentr = file . get_real ( " ENT " ) ;
qusc = file . get_real ( " USC " ) ;
qacq = file . get_real ( " ACQ " ) ;
qven = file . get_real ( " VEN " ) ;
qrimin = file . get_real ( " RIM " ) ;
vqentr = file . get_real ( " VALENT " ) ;
vqusc = file . get_real ( " VALUSC " ) ;
vqacq = file . get_real ( " VALACQ " ) ;
vqven = file . get_real ( " VALVEN " ) ;
vqrimin = file . get_real ( " VALRIM " ) ;
qgiac = file . get_real ( " GIAC " ) ;
file . put ( " ENT " , ZERO ) ;
file . put ( " USC " , ZERO ) ;
file . put ( " ACQ " , ZERO ) ;
file . put ( " VEN " , ZERO ) ;
file . put ( " RIM " , ZERO ) ;
file . put ( " VALENT " , ZERO ) ;
file . put ( " VALUSC " , ZERO ) ;
file . put ( " VALACQ " , ZERO ) ;
file . put ( " VALVEN " , ZERO ) ;
file . put ( " VALRIM " , ZERO ) ;
file . put ( " GIAC " , ZERO ) ;
// file.remove(); can' remove without renumbering
//file.rewrite();
done = FALSE ;
}
else if ( file . get ( " CODMAG " ) = = camponuovo & & ! done )
{
qentr + = file . get_real ( " ENT " ) ;
qusc + = file . get_real ( " USC " ) ;
qacq + = file . get_real ( " ACQ " ) ;
qven + = file . get_real ( " VEN " ) ;
qrimin + = file . get_real ( " RIM " ) ;
vqentr + = file . get_real ( " VALENT " ) ;
vqusc + = file . get_real ( " VALUSC " ) ;
vqacq + = file . get_real ( " VALACQ " ) ;
vqven + = file . get_real ( " VALVEN " ) ;
vqrimin + = file . get_real ( " VALRIM " ) ;
qgiac + = file . get_real ( " GIAC " ) ;
file . put ( " ENT " , qentr ) ;
file . put ( " USC " , qusc ) ;
file . put ( " ACQ " , qacq ) ;
file . put ( " VEN " , qven ) ;
file . put ( " RIM " , qrimin ) ;
file . put ( " VALENT " , vqentr ) ;
file . put ( " VALUSC " , vqusc ) ;
file . put ( " VALACQ " , vqacq ) ;
file . put ( " VALVEN " , vqven ) ;
file . put ( " VALRIM " , vqrimin ) ;
file . put ( " GIAC " , qgiac ) ;
file . put ( " CODMAG " , camponuovo ) ;
//file.rewrite();
done = TRUE ;
}
nriga = file . get_int ( " NRIGA " ) ;
file . next ( ) ;
if ( file . eof ( ) | | codart ! = file . get ( " CODART " ) )
{
if ( ! done )
{
nfile . zero ( ) ;
nfile . put ( " ENT " , qentr ) ;
nfile . put ( " USC " , qusc ) ;
nfile . put ( " ACQ " , qacq ) ;
nfile . put ( " VEN " , qven ) ;
nfile . put ( " RIM " , qrimin ) ;
nfile . put ( " VALENT " , vqentr ) ;
nfile . put ( " VALUSC " , vqusc ) ;
nfile . put ( " VALACQ " , vqacq ) ;
nfile . put ( " VALVEN " , vqven ) ;
nfile . put ( " VALRIM " , vqrimin ) ;
nfile . put ( " GIAC " , qgiac ) ;
nfile . put ( " CODMAG " , camponuovo ) ;
nfile . put ( " CODART " , codart ) ;
nfile . put ( " ANNOES " , codart ) ;
nfile . put ( " NRIGA " , nriga + 1 ) ;
//nfile.write();
}
codart = file . get ( " CODART " ) ;
annoes = file . get_int ( " ANNOES " ) ;
done = TRUE ;
qentr = qusc = qacq = qven = qrimin = vqentr = vqusc = vqacq = vqven = vqrimin = qgiac = ZERO ;
}
do_events ( ) ;
}
}
2000-05-05 15:25:49 +00:00
void TCover_services : : main_loop ( )
1999-07-16 14:59:11 +00:00
{
2001-05-02 13:40:49 +00:00
TLocalisamfile rdoc ( LF_RIGHEDOC ) , rmovmag ( LF_RMOVMAG ) , mag ( LF_MAG ) ;
//converti_magazzino(rdoc, "CODMAG", "COMSE", "SE1X0");
//converti_magazzino(rdoc, "CODMAGC", "COMSE", "SE1X0");
//converti_magazzino(rmovmag, "CODMAG", "COMSE", "SE1X0");
//uniscimag("COM", "SE1X0");
1999-07-16 14:59:11 +00:00
TService_mask m ;
2001-05-02 13:40:49 +00:00
1999-07-16 14:59:11 +00:00
while ( m . run ( ) ! = K_QUIT ) ;
}
int dbcv02 ( int argc , char * argv [ ] )
{
TString name ;
TCover_services dt ;
dt . run ( argc , argv , " Utilita' di conversione BPCS " ) ;
return 0 ;
}