Prima versione syncronizzazione Bee Store
git-svn-id: svn://10.65.10.50/branches/R_10_00@23013 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
7918129e41
commit
e2489c47e4
13
bs/bs0.cpp
Normal file
13
bs/bs0.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
#include <xvt.h>
|
||||
#include "bs0.h"
|
||||
|
||||
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;
|
||||
}
|
||||
return 0;
|
||||
}
|
3
bs/bs0.h
Normal file
3
bs/bs0.h
Normal file
@ -0,0 +1,3 @@
|
||||
int bs0200(int argc, char* argv[]);
|
||||
int bs0100(int argc, char* argv[]);
|
||||
|
20
bs/bs0100.cpp
Normal file
20
bs/bs0100.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <applicat.h>
|
||||
#include "bs0.h"
|
||||
|
||||
#include <confapp.h>
|
||||
|
||||
class TParametri_ditta : public TConfig_application
|
||||
{
|
||||
public:
|
||||
virtual bool check_autorization() const { return false; }
|
||||
virtual const char* get_mask_name() const { return "bs0100a"; }
|
||||
|
||||
TParametri_ditta() : TConfig_application(CONFIG_DITTA) {}
|
||||
};
|
||||
|
||||
int bs0100(int argc, char* argv[])
|
||||
{
|
||||
TParametri_ditta appc;
|
||||
appc.run(argc, argv, TR("Parametri Bee Store"));
|
||||
return 0;
|
||||
}
|
22
bs/bs0100a.uml
Normal file
22
bs/bs0100a.uml
Normal file
@ -0,0 +1,22 @@
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
#include <stdbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Parametri Bee Store" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bODBC"
|
||||
END
|
||||
|
||||
STRING 101 50
|
||||
BEGIN
|
||||
PROMPT 2 2 "Data Source Name (DSN) "
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD DSN
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
509
bs/bs0200.cpp
Normal file
509
bs/bs0200.cpp
Normal file
@ -0,0 +1,509 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <ODBCrset.h>
|
||||
#include <progind.h>
|
||||
#include <reputils.h>
|
||||
|
||||
#include <../ve/velib.h>
|
||||
|
||||
#include "bs0.h"
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TBeeStore_mask
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TBeeStore_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
void autoload();
|
||||
void autosave() const;
|
||||
|
||||
bool get_bool(const char* fld) { TMask_field* f = find_by_fieldname(fld); return f ? f->get().full() : false; }
|
||||
TDate get_date(const char* fld) { TMask_field* f = find_by_fieldname(fld); return TDate(f ? f->get() : EMPTY_STRING); }
|
||||
|
||||
TBeeStore_mask() : TAutomask("bs0200a") { autoload(); }
|
||||
~TBeeStore_mask() { autosave(); }
|
||||
};
|
||||
|
||||
bool TBeeStore_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void TBeeStore_mask::autoload()
|
||||
{
|
||||
FOR_EACH_MASK_FIELD(*this, i, f)
|
||||
{
|
||||
const TFieldref* fr = f->field();
|
||||
if (fr != NULL)
|
||||
f->set(ini_get_string(CONFIG_DITTA, "bs", fr->name()));
|
||||
}
|
||||
}
|
||||
|
||||
void TBeeStore_mask::autosave() const
|
||||
{
|
||||
FOR_EACH_MASK_FIELD(*this, i, f)
|
||||
{
|
||||
const TFieldref* fr = f->field();
|
||||
if (fr != NULL)
|
||||
ini_set_string(CONFIG_DITTA, "bs", fr->name(), f->get());
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TBeeStore_sync
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TBeeStore_sync : public TSkeleton_application
|
||||
{
|
||||
TString16 _dsn;
|
||||
TLog_report* _log;
|
||||
|
||||
protected:
|
||||
bool save_doc(TDocumento* doc) const;
|
||||
|
||||
void load_origine_1(TISAM_recordset& out_set, const char* in_table, const TString_array& pairs);
|
||||
void save_origine_2(TISAM_recordset& in_set, const char* out_table, const TString_array& pairs);
|
||||
|
||||
void sync_table(TISAM_recordset& in_set, const char* out_table, const TString_array& pairs);
|
||||
void sync_table(const char* in_table, const char* out_table, const TString_array& fields, const TDate& dal);
|
||||
void sync_table(const int logicnum, const char* out_table, const TString_array& fields, const TDate& dal);
|
||||
|
||||
void sync_iva(const TDate& dal);
|
||||
void sync_ums(const TDate& dal);
|
||||
void sync_lines(const TDate& dal);
|
||||
void sync_catmer(const TDate& dal);
|
||||
void sync_anamag(const TDate& dal);
|
||||
void sync_scontrini(const TDate& dal);
|
||||
|
||||
public:
|
||||
virtual void main_loop();
|
||||
};
|
||||
|
||||
const TString& date2sql(const TDate& d)
|
||||
{
|
||||
TString& tmp = get_tmp_string();
|
||||
tmp.format("DATEFROMPARTS(%d,%d,%d)", d.year(), d.month(), d.day());
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
const TString& var2sql(const TVariant& var)
|
||||
{
|
||||
TString& tmp = get_tmp_string();
|
||||
switch (var.type())
|
||||
{
|
||||
case _boolfld:
|
||||
tmp = var.as_bool() ? "1" : "0";
|
||||
break;
|
||||
case _datefld:
|
||||
tmp = date2sql(var.as_date());
|
||||
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;
|
||||
}
|
||||
|
||||
// Carica da Bee Store 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)
|
||||
{
|
||||
TString str(255);
|
||||
str << "ODBC(" << _dsn << ")\n"
|
||||
<< "SELECT * FROM " << in_table << " WHERE Origine=1;";
|
||||
TODBC_recordset odbc(str);
|
||||
const TRecnotype n = odbc.items();
|
||||
if (n > 0)
|
||||
{
|
||||
TLocalisamfile& file = out_set.cursor()->file();
|
||||
const RecDes& rd = file.curr().rec_des();
|
||||
TToken_string key_fields;
|
||||
for (int i = 0; i < rd.Ky->NkFields; i++)
|
||||
{
|
||||
const int nf = rd.Ky[0].FieldSeq[i] % MaxFields;
|
||||
key_fields.add(rd.Fd[nf].Name);
|
||||
}
|
||||
|
||||
str.format(TR("Importazione %ld record dalla tabella %s"), n, in_table);
|
||||
_log->log(0, "");
|
||||
_log->log(0, str);
|
||||
|
||||
TProgress_monitor pi(n, str);
|
||||
for (bool ok = odbc.move_first(); ok; ok = odbc.move_next())
|
||||
{
|
||||
file.zero();
|
||||
TString80 cfld, bfld; // Campo field e BeeStore field
|
||||
FOR_EACH_ARRAY_ROW(pairs, p, row)
|
||||
{
|
||||
bfld = row->get(0);
|
||||
cfld = row->get();
|
||||
const int pos = key_fields.get_pos(cfld);
|
||||
if (pos >= 0)
|
||||
{
|
||||
const TVariant& var = odbc.get(bfld);
|
||||
if (!var.is_null())
|
||||
file.put(cfld, var.as_string());
|
||||
if (pos == key_fields.items()-1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int err = file.read(_isequal, _lock);
|
||||
if (err == NOERR)
|
||||
{
|
||||
bool dirty = false;
|
||||
const TDate dataagg = file.get("DATAAGG");
|
||||
TDate dtultagg = odbc.get("DtUltAgg").as_date();
|
||||
if (!dtultagg.ok()) dtultagg = TODAY;
|
||||
|
||||
str.format("record");
|
||||
FOR_EACH_TOKEN(key_fields, f)
|
||||
str << ' ' << file.get(f);
|
||||
|
||||
if (dtultagg >= dataagg)
|
||||
{
|
||||
FOR_EACH_ARRAY_ROW(pairs, r,row)
|
||||
{
|
||||
bfld = row->get(0);
|
||||
cfld = row->get();
|
||||
if (cfld[0] >= 'A' && cfld.find("->") < 0 && key_fields.get_pos(cfld) < 0) // Aggiorno solo i campi NON chiave
|
||||
{
|
||||
const TString& vec = file.get(cfld);
|
||||
const TString& nov = odbc.get(bfld).as_string();
|
||||
if (nov != vec)
|
||||
{
|
||||
if (!dirty)
|
||||
str << ' ' << bfld << "='" << nov << '\'';
|
||||
file.put(cfld, nov);
|
||||
dirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dirty)
|
||||
{
|
||||
file.put("UTENTE", "BEESTORE");
|
||||
file.put("DATAAGG", dtultagg);
|
||||
}
|
||||
else
|
||||
str << " Nessuna variazione pertinente";
|
||||
}
|
||||
else
|
||||
str << " Data di ultimo aggiornamento obsoleta";
|
||||
if (dirty)
|
||||
{
|
||||
if (file.rewrite() == 0)
|
||||
_log->log(1, str);
|
||||
else
|
||||
{
|
||||
TString80 err; err << TR("ERRORE ") << err << TR(" aggiornando il ");
|
||||
str.insert(err);
|
||||
_log->log(2, str);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_log->log(0, str);
|
||||
file.reread(_unlock);
|
||||
}
|
||||
} else
|
||||
if (err == _iskeynotfound)
|
||||
{
|
||||
file.zero();
|
||||
FOR_EACH_ARRAY_ROW(pairs, r,row)
|
||||
{
|
||||
bfld = row->get(0);
|
||||
cfld = row->get();
|
||||
if (cfld[0] >= 'A' && cfld.find("->"))
|
||||
{
|
||||
const TString& nov = odbc.get(bfld).as_string();
|
||||
file.put(cfld, nov);
|
||||
}
|
||||
}
|
||||
if (file.write() == 0)
|
||||
_log->log(1, str);
|
||||
else
|
||||
{
|
||||
TString80 msg; msg << TR("ERRORE ") << err << TR(" inserendo il ");
|
||||
str.insert(msg);
|
||||
_log->log(2, str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
str.cut(0) << "DELETE FROM " << in_table << " WHERE Origine=1;";
|
||||
odbc.exec(str);
|
||||
}
|
||||
}
|
||||
|
||||
void TBeeStore_sync::save_origine_2(TISAM_recordset& in_set, const char* out_table, const TString_array& fields)
|
||||
{
|
||||
const TRecnotype n = in_set.items();
|
||||
TString str(255);
|
||||
str << "ODBC(" << _dsn << ")\n";
|
||||
TODBC_recordset odbc(str);
|
||||
|
||||
str.cut(0) << "DELETE FROM " << out_table << " WHERE Origine=2;";
|
||||
odbc.exec(str);
|
||||
|
||||
str.format(TR("Esportazione %ld record nella tabella %s"), n, out_table);
|
||||
_log->log(0, "");
|
||||
_log->log(0, str);
|
||||
|
||||
TProgress_monitor pi(n, str);
|
||||
for (bool ok = in_set.move_first(); ok; ok = in_set.move_next())
|
||||
{
|
||||
str.cut(0) << "INSERT INTO " << out_table << " (";
|
||||
FOR_EACH_ARRAY_ROW(fields, sr, srow)
|
||||
str << (sr ? ", " : "") << srow->get(0);
|
||||
str << ", Origine, Errore, DTUltAgg";
|
||||
str << ")\nVALUES (";
|
||||
|
||||
FOR_EACH_ARRAY_ROW(fields, ir, irow)
|
||||
{
|
||||
if (ir)
|
||||
{
|
||||
str << ", ";
|
||||
if (str.len() - str.rfind('\n') > 80)
|
||||
str << '\n';
|
||||
}
|
||||
const TFixed_string cfld = irow->get(1);
|
||||
if (cfld[0] >= 'A' && cfld[0] <= 'Z')
|
||||
{
|
||||
const TVariant& var = in_set.get(cfld);
|
||||
str << var2sql(var);
|
||||
} else
|
||||
if (cfld.find("->") > 0)
|
||||
{
|
||||
const TVariant& var = in_set.get(cfld);
|
||||
str << var2sql(var);
|
||||
}
|
||||
else
|
||||
str << cfld;
|
||||
}
|
||||
str << ", 2, 0, GETDATE()";
|
||||
str << ");";
|
||||
|
||||
if (odbc.exec(str) <= 0)
|
||||
_log->log(1, str);
|
||||
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
}
|
||||
|
||||
odbc.exec("COMMIT;");
|
||||
}
|
||||
|
||||
void TBeeStore_sync::sync_table(TISAM_recordset& in_set, const char* out_table, const TString_array& fields)
|
||||
{
|
||||
load_origine_1(in_set, out_table, fields);
|
||||
save_origine_2(in_set, out_table, fields);
|
||||
}
|
||||
|
||||
void TBeeStore_sync::sync_table(const char* table, const char* out_table, const TString_array& fields, const TDate& dal)
|
||||
{
|
||||
TString q;
|
||||
q << "USE " << table << " SELECT BETWEEN(DATAAGG,"<< dal.date2ansi() << ",0)";
|
||||
TISAM_recordset set(q);
|
||||
sync_table(set, out_table, fields);
|
||||
}
|
||||
|
||||
void TBeeStore_sync::sync_table(const int logicnum, const char* out_table, const TString_array& fields, const TDate& dal)
|
||||
{
|
||||
TString4 q; q << logicnum;
|
||||
sync_table(q, out_table, fields, dal);
|
||||
}
|
||||
|
||||
void TBeeStore_sync::sync_ums(const TDate& dal)
|
||||
{
|
||||
TString_array fields;
|
||||
fields.add("CodUntMis|CODTAB");
|
||||
fields.add("DSUntMis|S0");
|
||||
sync_table("%UMS", "tieUntMisura", fields, dal);
|
||||
}
|
||||
|
||||
void TBeeStore_sync::sync_iva(const TDate& dal)
|
||||
{
|
||||
TString_array fields;
|
||||
fields.add("CodIva|CODTAB");
|
||||
fields.add("CodIvaSt|CODTAB");
|
||||
fields.add("DSIva|S0");
|
||||
fields.add("Aliquota|R0");
|
||||
|
||||
sync_table("%IVA", "tieIva", fields, dal);
|
||||
}
|
||||
|
||||
void TBeeStore_sync::sync_lines(const TDate& dal)
|
||||
{
|
||||
TString_array fields;
|
||||
fields.add("CodLinea|CODTAB");
|
||||
fields.add("DSLinea|S0");
|
||||
|
||||
TString query;
|
||||
query << "USE GMC SELECT (CODTAB?='???')";
|
||||
if (dal.ok())
|
||||
query << "&&(BETWEEN(DATAAGG,"<< dal.date2ansi() << ",0))";
|
||||
|
||||
TISAM_recordset lin(query);
|
||||
sync_table(lin, "tieLineeArt", fields);
|
||||
}
|
||||
|
||||
void TBeeStore_sync::sync_catmer(const TDate& dal)
|
||||
{
|
||||
TString_array fields;
|
||||
fields.add("CodCategoriaMerceologica|CODTAB");
|
||||
fields.add("DSCategoriaMerceologica|S0");
|
||||
fields.add("CodTipoEtichetta|''");
|
||||
|
||||
sync_table("GMC", "tieCategorieMerceologiche", fields, dal);
|
||||
}
|
||||
|
||||
void TBeeStore_sync::sync_anamag(const TDate& dal)
|
||||
{
|
||||
TString_array fields;
|
||||
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);
|
||||
|
||||
TString query;
|
||||
query << "USE 47\nJOIN 49 INTO CODART==CODART";
|
||||
if (dal.ok())
|
||||
query << "\nSELECT BETWEEN(DATAAGG,"<< dal.date2ansi() << ",0)";
|
||||
TISAM_recordset art(query);
|
||||
sync_table(art, "tieArticoli", fields);
|
||||
}
|
||||
|
||||
bool TBeeStore_sync::save_doc(TDocumento* doc) const
|
||||
{
|
||||
if (doc != NULL && doc->rows() > 0)
|
||||
{
|
||||
const int err = doc->write();
|
||||
if (err != NOERR)
|
||||
{
|
||||
TString msg;
|
||||
msg.format(FR("Errore %d in registrazione scontrino %s/%d del %s"), err,
|
||||
(const char*)doc->get(DOC_CODNUM), doc->get_long(DOC_NDOC),
|
||||
(const char*)doc->get(DOC_DATADOC));
|
||||
_log->log(2, msg);
|
||||
msg << TR("\nSi desidera proseguire ugualmente?");
|
||||
if (!noyes_box(msg))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void TBeeStore_sync::sync_scontrini(const TDate& dal)
|
||||
{
|
||||
const TString4 codnum = ini_get_string(CONFIG_DITTA, "bs", DOC_CODNUM);
|
||||
const TString4 tipodoc = ini_get_string(CONFIG_DITTA, "bs", DOC_TIPODOC);
|
||||
if (codnum.blank() || tipodoc.blank())
|
||||
{
|
||||
_log->log(2, "Configurare numerazione e tipo documento per movimenti Bee Store");
|
||||
return;
|
||||
}
|
||||
|
||||
TString str(255);
|
||||
str << "ODBC(" << _dsn << ")\n";
|
||||
str << "SELECT * FROM tieDMovMag WHERE Origine=1";
|
||||
if (dal.ok())
|
||||
str << " AND DataMov>=" << date2sql(dal);
|
||||
str << "\nORDER BY NumMov,NumRiga";
|
||||
|
||||
TODBC_recordset mov(str);
|
||||
TProgress_monitor pi(mov.items(), str);
|
||||
|
||||
TString num_mov;
|
||||
TDocumento* doc = NULL;
|
||||
|
||||
for (bool ok = mov.move_first(); ok; ok = mov.move_next())
|
||||
{
|
||||
const TString80 nm = mov.get("NumMov").as_string();
|
||||
if (nm != num_mov)
|
||||
{
|
||||
if (!save_doc(doc))
|
||||
break;
|
||||
delete doc;
|
||||
|
||||
num_mov = nm;
|
||||
const TDate datadoc = mov.get("DataMov").as_date();
|
||||
doc = new TDocumento('D', datadoc.year(), codnum, 0L);
|
||||
doc->put(DOC_TIPODOC, tipodoc);
|
||||
doc->put(DOC_DATADOC, datadoc);
|
||||
|
||||
const TString& codval = mov.get("CodValuta").as_string();
|
||||
if (is_true_value(codval))
|
||||
{
|
||||
doc->put(DOC_CODVAL, codval);
|
||||
doc->put(DOC_CAMBIO, mov.get("CambioValuta").as_string());
|
||||
}
|
||||
}
|
||||
TRiga_documento& rdoc = doc->new_row("01");
|
||||
rdoc.put(RDOC_CODART, mov.get("CodArticolo").as_string());
|
||||
rdoc.put(RDOC_CODARTMAG, mov.get("CodArticolo").as_string());
|
||||
rdoc.put(RDOC_CHECKED, true);
|
||||
rdoc.put(RDOC_UMQTA, mov.get("CodUntMis").as_string());
|
||||
rdoc.put(RDOC_PREZZO, mov.get("PrzCassaValuta").as_real());
|
||||
}
|
||||
|
||||
save_doc(doc);
|
||||
}
|
||||
|
||||
void TBeeStore_sync::main_loop()
|
||||
{
|
||||
TBeeStore_mask mask;
|
||||
|
||||
_dsn = ini_get_string(CONFIG_DITTA, "bs", "DSN", "BEESTORE");
|
||||
|
||||
while (mask.run() == K_ENTER)
|
||||
{
|
||||
mask.autosave(); // Rende definitivi tutti i paramentri in [bs]
|
||||
_log = new TLog_report;
|
||||
|
||||
const TDate dal = mask.get_date("SyncDate");
|
||||
|
||||
if (mask.get_bool("SyncUMS"))
|
||||
sync_ums(dal);
|
||||
if (mask.get_bool("SyncIVA"))
|
||||
sync_iva(dal);
|
||||
if (mask.get_bool("SyncLinee"))
|
||||
sync_lines(dal);
|
||||
if (mask.get_bool("SyncCatMer"))
|
||||
sync_catmer(dal);
|
||||
if (mask.get_bool("SyncAnamag"))
|
||||
sync_anamag(dal);
|
||||
if (mask.get_bool("SyncSontr"))
|
||||
sync_scontrini(dal);
|
||||
|
||||
_log->preview();
|
||||
delete _log;
|
||||
_log = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int bs0200(int argc, char* argv[])
|
||||
{
|
||||
TBeeStore_sync bss;
|
||||
bss.run(argc, argv, TR("Bee Store"));
|
||||
return 0;
|
||||
}
|
107
bs/bs0200a.uml
Normal file
107
bs/bs0200a.uml
Normal file
@ -0,0 +1,107 @@
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
#include <stdbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Sincronizzazione Bee Store" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 8
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bArchivi"
|
||||
END
|
||||
|
||||
BOOLEAN 103
|
||||
BEGIN
|
||||
PROMPT 2 2 "Unità di misura "
|
||||
FIELD SyncUMS
|
||||
END
|
||||
|
||||
BOOLEAN 104
|
||||
BEGIN
|
||||
PROMPT 2 3 "Codici IVA "
|
||||
FIELD SyncIVA
|
||||
END
|
||||
|
||||
BOOLEAN 105
|
||||
BEGIN
|
||||
PROMPT 2 4 "Linee Articolo "
|
||||
FIELD SyncLinee
|
||||
END
|
||||
|
||||
BOOLEAN 106
|
||||
BEGIN
|
||||
PROMPT 2 5 "Categorie Merceol."
|
||||
FIELD SyncCatMer
|
||||
END
|
||||
|
||||
BOOLEAN 147
|
||||
BEGIN
|
||||
PROMPT 2 6 "Articoli "
|
||||
FIELD SyncAnamag
|
||||
END
|
||||
|
||||
BOOLEAN 148
|
||||
BEGIN
|
||||
PROMPT 2 7 "Scontrini "
|
||||
FIELD SyncScontr
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 8
|
||||
BEGIN
|
||||
PROMPT 1 10 "@bFiltri"
|
||||
END
|
||||
|
||||
DATE 100
|
||||
BEGIN
|
||||
PROMPT 2 11 "Dalla data di modifica "
|
||||
FIELD SyncDate
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Parametri" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 6
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bScontrini"
|
||||
END
|
||||
|
||||
STRING 201 4
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice numerazione "
|
||||
USE %NUM
|
||||
INPUT CODTAB 201
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT 201 CODTAB
|
||||
OUTPUT 202 S0
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD CODNUM
|
||||
END
|
||||
|
||||
STRING 202 50 46
|
||||
BEGIN
|
||||
PROMPT 30 2 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING 203 4
|
||||
BEGIN
|
||||
PROMPT 2 3 "Tipo documento "
|
||||
USE %TIP
|
||||
INPUT CODTAB 203
|
||||
COPY DISPLAY 201
|
||||
OUTPUT 203 CODTAB
|
||||
OUTPUT 204 S0
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD TIPODOC
|
||||
END
|
||||
|
||||
STRING 204 50 46
|
||||
BEGIN
|
||||
PROMPT 30 3 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
7
bs/bsmenu.men
Normal file
7
bs/bsmenu.men
Normal file
@ -0,0 +1,7 @@
|
||||
[BSMENU_001]
|
||||
Caption = "Bee Store"
|
||||
Picture = <ve01>
|
||||
Module = bs
|
||||
Flags = "F"
|
||||
Item_01 = "Configurazione", "bs0 -0", "F", 9015
|
||||
Item_02 = "Sincronizzazione", "bs0 -1", "F", 9015
|
Loading…
x
Reference in New Issue
Block a user