Patch level : 12.0

Files correlati     : bs
Commento            : 
- Sistemato aggiunta nuovo programma
- Creata libreria di utility con funzioni in comune
- Cambiato metodo di pulizia db

git-svn-id: svn://10.65.10.50/branches/R_10_00@24423 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2018-03-09 13:54:19 +00:00
parent ab06e0881b
commit 1f7d97acc6
9 changed files with 456 additions and 1345 deletions

View File

@ -6,8 +6,9 @@ int main(int argc, char** argv)
const int p = argc > 1 ? argv[1][1]-'0' : 0;
switch(p)
{
case 1: bs0200(argc, argv); break;
default: bs0100(argc, argv); break;
case 1: bs0200(argc, argv); break; // Impostazioni Beestore
case 2: bs0300(argc, argv); break; // Importazione da SKNET
default: bs0100(argc, argv); break; // Beestore Synchronizer
}
return 0;
}

View File

@ -1,3 +1,3 @@
int bs0200(int argc, char* argv[]);
int bs0100(int argc, char* argv[]);
int bs0200(int argc, char* argv[]);
int bs0300(int argc, char* argv[]);

View File

@ -25,6 +25,8 @@
#include <cfven.h>
#include <rcausali.h>
#include "bsutility.h"
#define BS_DTULTAGG "DtUltAgg"
///////////////////////////////////////////////////////////
@ -196,94 +198,6 @@ public:
virtual void main_loop();
};
// Converte una TDate in una data SQL
const TString& date2sql(const TDate& d)
{
TString& tmp = get_tmp_string();
if (d.ok())
tmp.format("'%04d-%02d-%02d'", d.year(), d.month(), d.day());
else
tmp = "NULL";
return tmp;
}
// Coverte un qualsiasi TVariant in stringa SQL
const TString& var2sql(const TVariant& var)
{
TString& tmp = get_tmp_string();
switch (var.type())
{
case _nullfld:
tmp = "NULL";
break;
case _boolfld:
tmp = var.as_bool() ? "1" : "0";
break;
case _datefld:
tmp = date2sql(var.as_date());
break;
case _intfld:
case _longfld:
var.as_string(tmp);
break;
case _realfld:
if (var.is_empty())
tmp = "0";
else
{
tmp = var.as_real().string(0, 2);
if (tmp.ends_with(".00"))
tmp.rtrim(3);
}
break;
default:
{
var.as_string(tmp);
const int pos = tmp.find('\'');
if (pos >= 0)
{
for (int i = tmp.len()-1; i >= pos; i--)
if (tmp[i] == '\'') tmp.insert("'", i);
}
tmp.insert("'");
tmp << "'";
}
break;
}
return tmp;
}
// Coverte una qualsiasi espressione in stringa SQL
const TString& expr2sql(const TISAM_recordset& set, const char* expr)
{
TVariant var;
TExpression e(expr, _strexpr, true);
if (e.numvar() == 0)
{
if (real::is_natural(expr))
var = atoi(expr);
else
var = expr;
} else
if (e.numvar() == 1 && xvt_str_same(e.varname(0), expr))
{
var = set.get(expr);
}
else
{
for (int v = e.numvar()-1; v >= 0; v--)
{
var = set.get(e.varname(v));
if (var.is_real() || var.is_bool())
e.setvar(v, var.as_real());
else
e.setvar(v, var.as_string());
}
var = e.as_string();
}
return var2sql(var);
}
// Carica da BeeStore i record con Origine=1, cioè generati da lui ed eventualmente aggiorna i corrispondenti in Campo
void TBeeStore_sync::load_origine_1(TISAM_recordset& out_set, const char* in_table, const TString_array& pairs)
{
@ -444,7 +358,7 @@ void TBeeStore_sync::save_origine_2(TISAM_recordset& in_set, const char* out_tab
str.cut(0) << "INSERT INTO " << out_table << "\n(";
FOR_EACH_ARRAY_ROW(fields, sr, srow)
str << (sr ? ", " : "") << srow->get(0);
str << ", Origine, Errore, "BS_DTULTAGG;
str << ", Origine, Errore, " BS_DTULTAGG;
str << ")\nVALUES (";
FOR_EACH_ARRAY_ROW(fields, ir, irow)
@ -625,14 +539,14 @@ void TBeeStore_sync::sync_catmer(const TDate& dal, const TDate& al)
void TBeeStore_sync::sync_anamag(const TDate& dal, const TDate& al)
{
TString_array fields;
fields.add("CodPadre|"ANAMAG_CODART);
fields.add("DSArticolo|"ANAMAG_DESCR);
fields.add("DSArticoloAgg|"ANAMAG_DESCRAGG"[1,70]");
fields.add("CodPadre|" ANAMAG_CODART);
fields.add("DSArticolo|" ANAMAG_DESCR);
fields.add("DSArticoloAgg|" ANAMAG_DESCRAGG"[1,70]");
fields.add("CodUntMagazzino|49->UM");
fields.add("CodIva|"ANAMAG_CODIVA);
fields.add("CodLinea|"ANAMAG_GRMERC"[1,3]");
fields.add("CodCategMerceologica|"ANAMAG_GRMERC);
fields.add("Bloccato|"ANAMAG_SOSPESO);
fields.add("CodIva|" ANAMAG_CODIVA);
fields.add("CodLinea|" ANAMAG_GRMERC"[1,3]");
fields.add("CodCategMerceologica|" ANAMAG_GRMERC);
fields.add("Bloccato|" ANAMAG_SOSPESO);
TString query = build_query(LF_ANAMAG, dal, al);
query << "\nJOIN " << LF_UMART << " INTO CODART==CODART";
@ -641,16 +555,16 @@ void TBeeStore_sync::sync_anamag(const TDate& dal, const TDate& al)
sync_table(art, "tieArticoli", fields);
fields.destroy();
fields.add("CodArticolo|"ANAMAG_CODART);
fields.add("CodPadre|"ANAMAG_CODART);
fields.add("CodArticolo|" ANAMAG_CODART);
fields.add("CodPadre|" ANAMAG_CODART);
save_origine_2(art, "tieArtVarianti", fields);
}
void TBeeStore_sync::sync_barcode(const TDate& dal, const TDate& al)
{
TString_array fields;
fields.add("CodArticolo|"ANAMAG_CODART);
fields.add("BarCode|"ANAMAG_DESCR);
fields.add("CodArticolo|" ANAMAG_CODART);
fields.add("BarCode|" ANAMAG_DESCR);
TString str(255);
str << "SELECT ";
@ -794,7 +708,7 @@ void TBeeStore_sync::sync_barcode(const TDate& dal, const TDate& al)
var = a.fisica() ? 1 : 2;
return true;
}
if (xvt_str_same(fldname, "Cliente"))
if (xvt_str_same(fldname, " CLIente"))
{
const char tipocf = rec.get(CLI_TIPOCF).as_string()[0];
var = tipocf == 'C';
@ -806,7 +720,7 @@ void TBeeStore_sync::sync_barcode(const TDate& dal, const TDate& al)
var = tipocf == 'F';
return true;
}
if (_strnicmp(fldname,"Cli_",4) == 0)
if (_strnicmp(fldname," CLI_",4) == 0)
{
const char tipocf = rec.get(CLI_TIPOCF).as_string()[0];
return tipocf != 'C';
@ -862,7 +776,7 @@ void TBeeStore_sync::load_clifo(char tipocf)
{
TString str(255);
str << "SELECT * FROM tieAnagCFP WHERE (Origine=1)AND";
str << '(' << (tipocf == 'F' ? "Fornitore" : "Cliente") << "=1);";
str << '(' << (tipocf == 'F' ? "Fornitore" : " CLIente") << "=1);";
TFast_isamfile clifo(LF_CLIFO);
@ -870,11 +784,11 @@ void TBeeStore_sync::load_clifo(char tipocf)
odbc.connect(_dsn, _usr, _psw);
const TRecnotype n = odbc.items();
str.cut(0) << TR("Importazione ") << (tipocf == 'F' ? TR("Fornitori") : TR("Clienti"));
str.cut(0) << TR("Importazione ") << (tipocf == 'F' ? TR("Fornitori") : TR(" CLIenti"));
TProgress_monitor pi(n, str);
for (bool ok = odbc.move_first(); ok; ok = odbc.move_next())
{
long codcf = odbc.get(tipocf == 'F' ? "For_CodFor" : "Cli_CodCG").as_int();
long codcf = odbc.get(tipocf == 'F' ? "For_CodFor" : " CLI_CodCG").as_int();
if (codcf <= 0)
{
const TString& cod_pk = odbc.get("Cod_PK").as_string();
@ -970,33 +884,33 @@ void TBeeStore_sync::load_clifo(char tipocf)
void TBeeStore_sync::save_clifo(int cfmask, const TDate& dal, const TDate& al)
{
TString_array fields;
fields.add("Cod_PK|"CLI_CODCF);
fields.add("RagSoc|"CLI_RAGSOC);
fields.add("Cognome|"CLI_RAGSOC);
fields.add("Nome|"CLI_RAGSOC);
fields.add("Indirizzo|"CLI_INDCF);
fields.add("Citta|"CLI_COMCF);
fields.add("Cap|"CLI_CAPCF);
fields.add("Cod_PK|" CLI_CODCF);
fields.add("RagSoc|" CLI_RAGSOC);
fields.add("Cognome|" CLI_RAGSOC);
fields.add("Nome|" CLI_RAGSOC);
fields.add("Indirizzo|" CLI_INDCF);
fields.add("Citta|" CLI_COMCF);
fields.add("Cap|" CLI_CAPCF);
fields.add("Provincia|");
fields.add("Telefono|PTEL+TEL");
fields.add("Cellulare|PTEL2+TEL2");
fields.add("CellulareSMS|PTEL3+TEL3");
fields.add("EMail|"CLI_MAIL);
fields.add("PartitaIva|"CLI_PAIV);
fields.add("CodFiscale|"CLI_COFI);
fields.add("EMail|" CLI_MAIL);
fields.add("PartitaIva|" CLI_PAIV);
fields.add("CodFiscale|" CLI_COFI);
fields.add("Tipo|1");
fields.add("Sesso|"CLI_SESSO);
fields.add("DTNascita|"CLI_DATANASC);
fields.add("ComuneNascita|"CLI_COMNASC);
fields.add("Sesso|" CLI_SESSO);
fields.add("DTNascita|" CLI_DATANASC);
fields.add("ComuneNascita|" CLI_COMNASC);
fields.add("PVNascita|");
fields.add("Cliente|");
fields.add(" CLIente|");
fields.add("Fornitore|");
fields.add("For_CodFor|"CLI_CODCF);
fields.add("For_Blocco|"CLI_SOSPESO);
fields.add("Cli_CodCG|"CLI_CODCF);
fields.add("Cli_Blocco|"CLI_SOSPESO);
fields.add("For_CodFor|" CLI_CODCF);
fields.add("For_Blocco|" CLI_SOSPESO);
fields.add(" CLI_CodCG|" CLI_CODCF);
fields.add(" CLI_Blocco|" CLI_SOSPESO);
fields.add("MagInserAnagrafica|1");
fields.add("CodStato|"CLI_STATOCF);
fields.add("CodStato|" CLI_STATOCF);
fields.add("Annullato|0");
TString query = build_query(LF_CLIFO, dal, al);
@ -1115,16 +1029,16 @@ void TBeeStore_sync::sync_listino(const TString& listino)
TString dtfin; dtfin << "DTFine|'" << dt_fine.string() << '\'';
TString_array fields;
fields.add("Cod_PK|"RCONDV_CODRIGA);
fields.add("CodPadre|"RCONDV_CODRIGA);
fields.add("Cod_PK|" RCONDV_CODRIGA);
fields.add("CodPadre|" RCONDV_CODRIGA);
//fields.add("CodArticolo|"RCONDV_CODRIGA); // NON metterlo!
fields.add("TipoPrezzo|'1'"); // 1=Listino
fields.add(eur);
fields.add("Prezzo|"RCONDV_PREZZO);
fields.add("Prezzo|" RCONDV_PREZZO);
fields.add("Prezzo2|0");
fields.add("Sconto|"RCONDV_SCONTO);
fields.add("Sconto|" RCONDV_SCONTO);
if (real::is_natural(listino))
fields.add("NumListino|"RCONDV_COD);
fields.add("NumListino|" RCONDV_COD);
fields.add(descr);
fields.add(dtini);
fields.add(dtfin);

File diff suppressed because it is too large Load Diff

View File

@ -3,19 +3,11 @@
#define F_UMS 103
#define F_IVA 104
#define F_LINEART 105
#define F_CATMER 106
#define F_ART 107
#define F_LIST 108
#define F_SCONTRINI 109
#define F_CORRISPETTIVI 110
#define F_DOCUMENTI 111
#define F_CARSCAR 112
#define F_GENERICI 113
#define F_VALUTE 114
#define F_CLIENTI 115
#define F_FORNITORI 116
#define F_BARCODE 117
#define F_ART 105
#define F_DOCUMENTI 106
#define F_VALUTE 107
#define F_CLIENTI 108
#define F_FORNITORI 109
#define F_CODNUMBOL 201
#define F_TIPODOCBOL 202
@ -27,23 +19,13 @@
#define F_TIPODOCTAM 208
#define F_CODNUMORC 209
#define F_TIPODOCORC 210
#define F_C_CARSCAR 211
#define F_D_CARSCAR 212
#define F_C_DOCUMENTI 213
#define F_D_DOCUMENTI 214
#define F_C_SCONTRINI 215
#define F_D_SCONTRINI 216
#define F_C_GENERICI 217
#define F_D_GENERICI 218
#define F_CLIFODC 219
#define F_OVERRIG 220
#define F_NUMCUSTRIG 221
#define F_IMPORTUSER 222
#define F_ENIMPORT 223
#define F_ENEXPORT 224
#define F_EMPTYONIMP 225
#define F_ENABCONAI 226
#define F_CODIVADEF 227
#define F_OVERRIG 211
#define F_NUMCUSTRIG 212
#define F_IMPORTUSER 213
#define F_EMPTYONIMP 214
#define F_ENABCONAI 215
#define F_CODIVADEF 216
#define F_CODUMSDEF 217
#define F_C_CORRISPETTIVI 301
#define F_D_CORRISPETTIVI 302

View File

@ -1,12 +1,12 @@
#include "bs0200a.h"
#include "bs0300a.h"
TOOLBAR "topbar" 0 0 0 2
#include <elabar.h>
ENDPAGE
PAGE "Sincronizzazione Bee Store" 0 2 0 0
PAGE "SKNT Importer" 0 2 0 0
GROUPBOX DLG_NULL 78 13
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 1 "@bArchivi"
END
@ -14,135 +14,54 @@ END
BOOLEAN F_UMS
BEGIN
PROMPT 2 2 "Unità di misura "
FIELD SyncUMS
FIELD SKSyncUMS
END
BOOLEAN F_IVA
BEGIN
PROMPT 2 3 "Codici IVA "
FIELD SyncIVA
END
BOOLEAN F_LINEART
BEGIN
PROMPT 2 4 "Linee Articolo "
FIELD SyncLinee
END
BOOLEAN F_CATMER
BEGIN
PROMPT 2 5 "Categorie Merceologiche"
FIELD SyncCatMer
END
BOOLEAN F_ART
BEGIN
PROMPT 2 6 "Articoli "
FIELD SyncAnamag
END
STRING F_LIST 3
BEGIN
PROMPT 40 6 "Listino "
USE LF_CONDV
INPUT TIPO "L"
INPUT CATVEN ""
INPUT TIPOCF ""
INPUT CODCF ""
INPUT COD 148
DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR
DISPLAY "Valuta@5" CODVAL
DISPLAY "Inizio@10" VALIN
DISPLAY "Fine@10" VALFIN
OUTPUT 148 COD
FIELD SyncListino
END
BOOLEAN F_SCONTRINI
BEGIN
PROMPT 2 7 "Scontrini "
FIELD SyncScontr
END
BOOLEAN F_CORRISPETTIVI
BEGIN
PROMPT 2 8 "Corrispettivi "
FIELD SyncCorr
END
BOOLEAN F_DOCUMENTI
BEGIN
PROMPT 2 9 "Documenti "
FIELD SyncDoc
END
BOOLEAN F_CARSCAR
BEGIN
PROMPT 2 10 "Carichi/scarichi "
FIELD SyncCarScar
END
BOOLEAN F_GENERICI
BEGIN
PROMPT 2 11 "Mov.generici "
FIELD SyncGenerici
PROMPT 30 2 "Codici IVA "
FIELD SKSyncIVA
END
BOOLEAN F_VALUTE
BEGIN
PROMPT 40 2 "Valute"
FIELD SyncVAL
PROMPT 60 2 "Valute"
FIELD SKSyncVAL
END
BOOLEAN F_CLIENTI
BEGIN
PROMPT 40 3 "Clienti"
FIELD SyncClienti
PROMPT 2 3 "Clienti"
FIELD SKSyncClienti
END
BOOLEAN F_FORNITORI
BEGIN
PROMPT 40 4 "Fornitori "
FIELD SyncFornitori
PROMPT 30 3 "Fornitori "
FIELD SKSyncFornitori
END
BOOLEAN F_BARCODE
BOOLEAN F_ART
BEGIN
PROMPT 40 5 "Codici a barre"
FIELD SyncBarCode
PROMPT 2 4 "Articoli "
FIELD SKSyncAnamag
END
GROUPBOX DLG_NULL 78 4
BOOLEAN F_DOCUMENTI
BEGIN
PROMPT 1 14 "@bFiltri"
PROMPT 30 4 "Documenti "
FIELD SKSyncDoc
END
DATE F_DAL
BEGIN
PROMPT 2 15 "Dalla data di modifica "
FIELD SyncDateFrom
END
DATE F_AL
BEGIN
PROMPT 42 15 " al "
FIELD SyncDateTo
END
ENDPAGE
PAGE "Parametri" 0 2 0 0
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 1 1 "@bImpostazioni documenti"
PROMPT 1 6 "@bImpostazioni documenti"
END
STRING F_CODNUMBOL 4
BEGIN
PROMPT 2 2 "Numerazione bolle "
FIELD CODNUMBOL
PROMPT 2 7 "Numerazione bolle "
FIELD SKCODNUMBOL
HELP "Codice numerazione"
USE %NUM
INPUT CODTAB F_CODNUMBOL
@ -156,8 +75,8 @@ END
STRING F_TIPODOCBOL 4
BEGIN
PROMPT 40 2 "Tipo bolle "
FIELD TIPODOCBOL
PROMPT 40 7 "Tipo bolle "
FIELD SKTIPODOCBOL
HELP "Codice tipo documento"
USE %TIP
INPUT CODTAB F_TIPODOCBOL
@ -169,8 +88,8 @@ END
STRING F_CODNUMFAT 4
BEGIN
PROMPT 2 3 "Numerazione fatture "
FIELD CODNUMFAT
PROMPT 2 8 "Numerazione fatture "
FIELD SKCODNUMFAT
HELP "Codice numerazione"
USE %NUM
INPUT CODTAB F_CODNUMFAT
@ -184,8 +103,8 @@ END
STRING F_TIPODOCFAT 4
BEGIN
PROMPT 40 3 "Tipo fatture "
FIELD TIPODOCFAT
PROMPT 40 8 "Tipo fatture "
FIELD SKTIPODOCFAT
HELP "Codice tipo documento"
USE %TIP
INPUT CODTAB F_TIPODOCFAT
@ -197,8 +116,8 @@ END
STRING F_CODNUMNC 4
BEGIN
PROMPT 2 4 "Numerazione NC "
FIELD CODNUMNC
PROMPT 2 9 "Numerazione NC "
FIELD SKCODNUMNC
HELP "Codice numerazione"
USE %NUM
INPUT CODTAB F_CODNUMNC
@ -212,8 +131,8 @@ END
STRING F_TIPODOCNC 4
BEGIN
PROMPT 40 4 "Tipo NC "
FIELD TIPODOCNC
PROMPT 40 9 "Tipo NC "
FIELD SKTIPODOCNC
HELP "Codice tipo documento"
USE %TIP
INPUT CODTAB F_TIPODOCNC
@ -225,8 +144,8 @@ END
STRING F_CODNUMTAM 4
BEGIN
PROMPT 2 5 "Numerazione TAM "
FIELD CODNUMTAM
PROMPT 2 10 "Numerazione TAM "
FIELD SKCODNUMTAM
HELP "Codice numerazione"
USE %NUM
INPUT CODTAB F_CODNUMTAM
@ -240,8 +159,8 @@ END
STRING F_TIPODOCTAM 4
BEGIN
PROMPT 40 5 "Tipo TAM "
FIELD TIPODOCTAM
PROMPT 40 10 "Tipo TAM "
FIELD SKTIPODOCTAM
HELP "Codice tipo documento"
USE %TIP
INPUT CODTAB F_TIPODOCTAM
@ -253,8 +172,8 @@ END
STRING F_CODNUMORC 4
BEGIN
PROMPT 2 6 "Numerazione ORC "
FIELD CODNUMORC
PROMPT 2 11 "Numerazione ORC "
FIELD SKCODNUMORC
HELP "Codice numerazione"
USE %NUM
INPUT CODTAB F_CODNUMORC
@ -268,8 +187,8 @@ END
STRING F_TIPODOCORC 4
BEGIN
PROMPT 40 6 "Tipo ORC "
FIELD TIPODOCORC
PROMPT 40 11 "Tipo ORC "
FIELD SKTIPODOCORC
HELP "Codice tipo documento"
USE %TIP
INPUT CODTAB F_TIPODOCORC
@ -279,141 +198,9 @@ BEGIN
FLAG "UP"
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 8 "@bMovimenti"
END
STRING F_C_CARSCAR 4
BEGIN
PROMPT 2 9 "Causale magazzino car./scar. "
USE %CAU SELECT (S2[8,8]=1)&&(S6="P")
INPUT CODTAB F_C_CARSCAR
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_C_CARSCAR CODTAB
OUTPUT F_D_CARSCAR S0
CHECKTYPE NORMAL
FIELD CODCAUS(1)
ADD RUN mg0 -0 %CAU
END
STRING F_D_CARSCAR 50 36
BEGIN
PROMPT 40 9 ""
FLAGS "D"
END
STRING F_C_DOCUMENTI 4
BEGIN
PROMPT 2 10 "Causale magazzino documenti "
USE %CAU SELECT (S2[8,8]=1)&&(S6="P")
INPUT CODTAB F_C_DOCUMENTI
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_C_DOCUMENTI CODTAB
OUTPUT F_D_DOCUMENTI S0
CHECKTYPE NORMAL
FIELD CODCAUS(2)
ADD RUN mg0 -0 %CAU
END
STRING F_D_DOCUMENTI 50 36
BEGIN
PROMPT 40 10 ""
FLAGS "D"
END
STRING F_C_SCONTRINI 4
BEGIN
PROMPT 2 11 "Causale magazzino scontrini "
USE %CAU SELECT (S2[8,8]=1)&&(S6="P")
INPUT CODTAB F_C_SCONTRINI
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_C_SCONTRINI CODTAB
OUTPUT F_D_SCONTRINI S0
CHECKTYPE NORMAL
FIELD CODCAUS(3)
ADD RUN mg0 -0 %CAU
END
STRING F_D_SCONTRINI 50 36
BEGIN
PROMPT 40 11 ""
FLAGS "D"
END
STRING F_C_GENERICI 4
BEGIN
PROMPT 2 12 "Causale magazzino mov.generici "
USE %CAU SELECT (S2[8,8]=1)&&(S6="P")
INPUT CODTAB F_C_GENERICI
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_C_GENERICI CODTAB
OUTPUT F_D_GENERICI S0
CHECKTYPE NORMAL
FIELD CODCAUS(4)
ADD RUN mg0 -0 %CAU
END
STRING F_D_GENERICI 50 36
BEGIN
PROMPT 40 12 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 14 "@bCorrispettivi"
END
STRING F_C_CORRISPETTIVI 4
BEGIN
PROMPT 2 15 "Causale contabile "
USE LF_CAUSALI SELECT TIPODOC="CR"
INPUT CODCAUS F_C_CORRISPETTIVI
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_C_CORRISPETTIVI CODCAUS
OUTPUT F_D_CORRISPETTIVI DESCR
CHECKTYPE NORMAL
FIELD CODCAUSC
ADD RUN cg0 -4
END
STRING F_D_CORRISPETTIVI 50 36
BEGIN
PROMPT 40 15 ""
FLAGS "D"
END
BOOLEAN F_CLIFODC
BEGIN
PROMPT 2 17 "Doppio controllo cod.cli"
FIELD ClifoDC
END
BOOLEAN F_OVERRIG
BEGIN
PROMPT 40 17 "Riga merce custom"
FIELD UseCustomRiga
MESSAGE FALSE DISABLE,F_NUMCUSTRIG
MESSAGE TRUE ENABLE,F_NUMCUSTRIG
END
STRING F_NUMCUSTRIG 2
BEGIN
PROMPT 60 17 ""
FIELD NumCustomRiga
FLAGS "D"
CHECKYPE REQUIRED
END
STRING F_CODIVADEF 4
BEGIN
PROMPT 2 18 "Utilizza cod.IVA default "
PROMPT 2 13 "Utilizza cod.IVA default "
USE %IVA
INPUT CODTAB F_CODIVADEF
DISPLAY "Codice" CODTAB
@ -422,38 +209,55 @@ BEGIN
DISPLAY "Tipo" S1
OUTPUT F_CODIVADEF CODTAB
HELP "Codice IVA per righe con valore nullo"
FIELD CodIvaDef
FIELD SKCodIvaDef
CHECKTYPE REQUIRED
END
BOOLEAN F_ENIMPORT
STRING F_CODUMSDEF 4
BEGIN
PROMPT 2 19 "Abilita Importazione"
FIELD EnableImp
PROMPT 2 14 "Utilizza UMS default "
USE %UMS
INPUT CODTAB F_CODUMSDEF
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODUMSDEF CODTAB
HELP "Codice UmS per righe con valore nullo"
FIELD SKCodUmsDef
CHECKTYPE REQUIRED
END
BOOLEAN F_ENEXPORT
BOOLEAN F_OVERRIG
BEGIN
PROMPT 40 19 "Abilita Esportazione"
FIELD EnableExp
PROMPT 2 15 "Riga merce custom"
FIELD SKUseCustomRiga
MESSAGE FALSE DISABLE,F_NUMCUSTRIG
MESSAGE TRUE ENABLE,F_NUMCUSTRIG
END
STRING F_NUMCUSTRIG 2
BEGIN
PROMPT 40 15 ""
FIELD SKNumCustomRiga
FLAGS "D"
CHECKYPE REQUIRED
END
BOOLEAN F_EMPTYONIMP
BEGIN
PROMPT 2 20 "Svuola DB dopo importazione"
FIELD EmptyOnImp
PROMPT 2 16 "Svuola DB dopo importazione"
FIELD SKEmptyOnImp
END
BOOLEAN F_ENABCONAI
BEGIN
PROMPT 40 20 "Abilita gestione CONAI"
FIELD EnabCONAI
PROMPT 40 16 "Abilita gestione CONAI"
FIELD SKEnabCONAI
END
STRING F_IMPORTUSER 20
BEGIN
PROMPT 2 21 "Utente che effettua l'importazione "
FIELD ImportUser
PROMPT 2 17 "Utente che effettua l'importazione "
FIELD SKImportUser
END
ENDPAGE

View File

@ -5,3 +5,4 @@ Module = bs
Flags = "F"
Item_01 = "Configurazione", "bs0 -0", "F", 9015
Item_02 = "Sincronizzazione", "bs0 -1", "F", 9015
Item_02 = "SKNET Importer", "bs0 -2", "F", 9015

104
src/bs/bsutility.cpp Normal file
View File

@ -0,0 +1,104 @@
#include "bsutility.h"
// Converte una TDate in una data SQL
const TString& date2sql(const TDate& d, int hour)
{
TString& tmp = get_tmp_string();
if (d.ok())
{
tmp.format("'%04d-%02d-%02d", d.year(), d.month(), d.day());
switch (hour)
{
case 1:
tmp << "T00:00:00.000'";
break;
case 2:
tmp << "T23:59:59.999'";
break;
default:
case 0:
tmp << "'";
}
}
else
tmp = "NULL";
return tmp;
}
const TString& var2sql(const TVariant& var)
{
TString& tmp = get_tmp_string();
switch (var.type())
{
case _nullfld:
tmp = "NULL";
break;
case _boolfld:
tmp = var.as_bool() ? "1" : "0";
break;
case _datefld:
tmp = date2sql(var.as_date());
break;
case _intfld:
case _longfld:
var.as_string(tmp);
break;
case _realfld:
if (var.is_empty())
tmp = "0";
else
{
tmp = var.as_real().string(0, 2);
if (tmp.ends_with(".00"))
tmp.rtrim(3);
}
break;
default:
{
var.as_string(tmp);
const int pos = tmp.find('\'');
if (pos >= 0)
{
for (int i = tmp.len() - 1; i >= pos; i--)
if (tmp[i] == '\'') tmp.insert("'", i);
}
tmp.insert("'");
tmp << "'";
}
break;
}
return tmp;
}
const TString& expr2sql(const TISAM_recordset& set, const char* expr)
{
TVariant var;
TExpression e(expr, _strexpr, true);
if (e.numvar() == 0)
{
if (real::is_natural(expr))
var = atoi(expr);
else
var = expr;
}
else
if (e.numvar() == 1 && xvt_str_same(e.varname(0), expr))
{
var = set.get(expr);
}
else
{
for (int v = e.numvar() - 1; v >= 0; v--)
{
var = set.get(e.varname(v));
if (var.is_real() || var.is_bool())
e.setvar(v, var.as_real());
else
e.setvar(v, var.as_string());
}
var = e.as_string();
}
return var2sql(var);
}

11
src/bs/bsutility.h Normal file
View File

@ -0,0 +1,11 @@
#include <expr.h>
#include <recset.h>
// Converte una TDate in una data SQL
const TString& date2sql(const TDate& d, int hour = 0);
// Coverte un qualsiasi TVariant in stringa SQL
const TString& var2sql(const TVariant& var);
// Coverte una qualsiasi espressione in stringa SQL
const TString& expr2sql(const TISAM_recordset& set, const char* expr);