Continua il tremendo sviluppo del ricalcolo di magazzino.
CV: ---------------------------------------------------------------------- git-svn-id: svn://10.65.10.50/trunk@3430 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
60fa7010c1
commit
a1c00c753f
382
ve/ve4100.cpp
382
ve/ve4100.cpp
@ -1,7 +1,10 @@
|
||||
#include <applicat.h>
|
||||
#include <expr.h>
|
||||
#include <msksheet.h>
|
||||
#include <progind.h>
|
||||
#include <relation.h>
|
||||
#include <stack.h>
|
||||
#include <tabutil.h>
|
||||
#include <urldefid.h>
|
||||
#include <viswin.h>
|
||||
|
||||
@ -9,21 +12,67 @@
|
||||
#include "ve4100.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Ciclo principale di elaborazione
|
||||
// TTable_expression
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
bool elabora(TCursor& cur, TString_array& var)
|
||||
{
|
||||
TViswin vw("ve4100.txt", "Ricalcolo valori",
|
||||
FALSE, TRUE, FALSE, 3, 3, -3, -3, FALSE);
|
||||
|
||||
for (cur = 0; cur.ok(); ++cur)
|
||||
{
|
||||
class TTable_expression : public TExpression
|
||||
{
|
||||
static TAssoc_array _expr;
|
||||
void load_expr();
|
||||
|
||||
protected:
|
||||
virtual void evaluate_user_func(const char* name, int nparms, TStack& stack) const;
|
||||
|
||||
public:
|
||||
TTable_expression(TTypeexp t) : TExpression(t) { }
|
||||
TTable_expression(const char* expr, TTypeexp t) : TExpression(expr, t) { }
|
||||
virtual ~TTable_expression() { }
|
||||
};
|
||||
|
||||
TAssoc_array TTable_expression::_expr;
|
||||
|
||||
void TTable_expression::load_expr()
|
||||
{
|
||||
if (_expr.items() == 0)
|
||||
{
|
||||
TString n(15), e(127);
|
||||
TTable expr("%FRM");
|
||||
for (expr.first(); !expr.eof(); expr.next())
|
||||
{
|
||||
n = expr.get("CODTAB");
|
||||
e = expr.get("S1");
|
||||
e << expr.get("S2");
|
||||
const TTypeexp t = expr.get_bool("B0") ? _numexpr : _strexpr;
|
||||
_expr.add(n, new TTable_expression(e, t));
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
void TTable_expression::evaluate_user_func(const char* name, int nparms, TStack& stack) const
|
||||
{
|
||||
TTable_expression* expr = (TTable_expression*)_expr.objptr(name);
|
||||
if (expr == NULL)
|
||||
{
|
||||
TExpression::evaluate_user_func(name, nparms, stack);
|
||||
return;
|
||||
}
|
||||
|
||||
TString var;
|
||||
for (int v = expr->numvar()-1; v >= 0; v--)
|
||||
{
|
||||
var = expr->varname(v); var.upper();
|
||||
if (var[0] == '_') // Parametro della funzione
|
||||
{
|
||||
const int n = atoi(var.mid(2,0));
|
||||
CHECKS(var[1] == 'P' && n > 0 && n <= nparms, "Parametro errato ", (const char*)var);
|
||||
expr->setvar(var, (TString&)stack.peek(nparms-n));
|
||||
}
|
||||
}
|
||||
|
||||
// Vuota lo stack
|
||||
for (v = nparms; v > 0; v--)
|
||||
stack.pop();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Maschera ricalcolo di magazzino
|
||||
@ -35,28 +84,36 @@ class TRicalcolo_mask : public TMask
|
||||
int _cur_file;
|
||||
TToken_string _key_expr;
|
||||
|
||||
TRelation* _relation;
|
||||
TCursor* _cursor;
|
||||
|
||||
protected:
|
||||
static bool file_handler (TMask_field& f, KEY k);
|
||||
static bool key_handler (TMask_field& f, KEY k);
|
||||
static bool filter_handler(TMask_field& f, KEY k);
|
||||
static bool field_handler (TMask_field& f, KEY k);
|
||||
static bool fromto_handler(TMask_field& f, KEY k);
|
||||
|
||||
public:
|
||||
|
||||
bool gestione_um(char tipo) const;
|
||||
TRelation& get_rel() const;
|
||||
const TRectype& get_rec() const;
|
||||
const RecDes* get_rec_des() const;
|
||||
TToken_string& get_key_expr(int k);
|
||||
TToken_string& get_key_expr(int k);
|
||||
|
||||
TRelation& create_relation();
|
||||
TCursor& create_cursor();
|
||||
|
||||
public:
|
||||
bool elabora();
|
||||
|
||||
TRicalcolo_mask();
|
||||
virtual ~TRicalcolo_mask() { }
|
||||
};
|
||||
|
||||
TRicalcolo_mask::TRicalcolo_mask()
|
||||
: TMask("ve4100"), _cur_file(0)
|
||||
: TMask("ve4100"), _cur_file(0), _relation(NULL), _cursor(NULL)
|
||||
{
|
||||
const int lf[] = { LF_ANAMAG, LF_CODCORR, LF_UMART,
|
||||
LF_DESLIN, LF_CONDV, LF_RCONDV, 0 };
|
||||
const int lf[] = { LF_ANAMAG, LF_UMART, LF_DESLIN, LF_CONDV, LF_RCONDV, 0 };
|
||||
for (int i = 0; lf[i]; i++)
|
||||
{
|
||||
TRelation* rel = new TRelation(lf[i]);
|
||||
@ -113,6 +170,206 @@ TToken_string& TRicalcolo_mask::get_key_expr(int key)
|
||||
return _key_expr;
|
||||
}
|
||||
|
||||
bool TRicalcolo_mask::gestione_um(char tipo) const
|
||||
{
|
||||
const char* const lco = "LCO";
|
||||
for (int i = 0; i < 3 && toupper(tipo) != lco[i]; i++);
|
||||
TConfig ve(CONFIG_DITTA, "ve");
|
||||
return ve.get_bool("GESUM", NULL, i+1);
|
||||
}
|
||||
|
||||
TRelation& TRicalcolo_mask::create_relation()
|
||||
{
|
||||
const int logicnum = get_rec().num(); // Numero logico del file principale
|
||||
|
||||
if (_relation)
|
||||
delete _relation;
|
||||
_relation = new TRelation(logicnum);
|
||||
|
||||
const TString& unita_misura = get(F_UNITA_MISURA);
|
||||
const TString& lingua = get(F_LINGUA);
|
||||
|
||||
const TString& tipo_lco = get(F_TIPO_LCO); // Listini, contratti, offerte
|
||||
const TString& cat_ven = get(F_CAT_VEN);
|
||||
const TString& tipo_cf = get(F_TIPO_CF);
|
||||
const TString& codice_cf = get(F_CODICE_CF);
|
||||
const TString& codice_lco = get(F_CODICE_LCO);
|
||||
|
||||
TString condv_expr;
|
||||
if (cat_ven.not_empty() && codice_cf.not_empty() && codice_lco.not_empty())
|
||||
{
|
||||
condv_expr << "TIPO=\"" << tipo_lco << '"';
|
||||
condv_expr << "|CATVEN=\"" << cat_ven << '"';
|
||||
condv_expr << "|TIPOCF=\"" << tipo_cf << '"';
|
||||
condv_expr << "|CODCF=\"" << codice_cf << '"';
|
||||
condv_expr << "|COD=\"" << codice_lco << '"';
|
||||
}
|
||||
|
||||
TString expr(48);
|
||||
|
||||
switch (logicnum)
|
||||
{
|
||||
case LF_ANAMAG:
|
||||
{
|
||||
expr = "CODART=CODART";
|
||||
if (unita_misura.not_empty())
|
||||
{
|
||||
expr << "|UM=\"" << unita_misura << '"';
|
||||
_relation->add(LF_UMART, expr, 2);
|
||||
}
|
||||
else
|
||||
_relation->add(LF_UMART, expr, 1);
|
||||
|
||||
if (lingua.not_empty())
|
||||
{
|
||||
expr = "CODART=CODART";
|
||||
expr << "|CODLIN=\"" << lingua << '"';
|
||||
_relation->add(LF_DESLIN, expr, 2);
|
||||
}
|
||||
|
||||
if (condv_expr.not_empty())
|
||||
{
|
||||
_relation->add(LF_CONDV, condv_expr, 1);
|
||||
|
||||
if (unita_misura.not_empty())
|
||||
{
|
||||
expr = condv_expr;
|
||||
expr << "|TIPORIGA=\"A\"";
|
||||
expr << "|CODRIGA=CODART";
|
||||
expr << "|UM=\"" << unita_misura << '"';
|
||||
_relation->add(LF_RCONDV, expr, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LF_UMART:
|
||||
{
|
||||
_relation->add(LF_ANAMAG, "CODART=CODART", 1);
|
||||
|
||||
if (lingua.not_empty())
|
||||
{
|
||||
expr = "CODART=CODART";
|
||||
expr << "|CODLIN=\"" << lingua << '"';
|
||||
_relation->add(LF_DESLIN, expr, 2);
|
||||
}
|
||||
|
||||
if (condv_expr.not_empty())
|
||||
{
|
||||
_relation->add(LF_CONDV, condv_expr, 1);
|
||||
expr = condv_expr;
|
||||
expr << "|TIPORIGA=\"A\"";
|
||||
expr << "|CODRIGA=CODART";
|
||||
expr << "|UM=UM";
|
||||
_relation->add(LF_RCONDV, expr, 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LF_DESLIN:
|
||||
{
|
||||
_relation->add(LF_ANAMAG, "CODART=CODART", 1);
|
||||
|
||||
expr = "CODART=CODART";
|
||||
if (unita_misura.not_empty())
|
||||
{
|
||||
expr << "|UM=\"" << unita_misura << '"';
|
||||
_relation->add(LF_UMART, expr, 2);
|
||||
}
|
||||
else
|
||||
_relation->add(LF_UMART, expr, 1);
|
||||
|
||||
if (condv_expr.not_empty())
|
||||
{
|
||||
_relation->add(LF_CONDV, condv_expr, 1);
|
||||
|
||||
if (unita_misura.not_empty())
|
||||
{
|
||||
expr = condv_expr;
|
||||
expr << "|TIPORIGA=\"A\"";
|
||||
expr << "|CODRIGA=CODART";
|
||||
expr << "|UM=\"" << unita_misura << '"';
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LF_RCONDV:
|
||||
{
|
||||
_relation->add(LF_ANAMAG, "CODRIGA=CODART", 1);
|
||||
|
||||
if (gestione_um(tipo_lco[0]))
|
||||
_relation->add(LF_UMART, "CODRIGA=CODART|UM=UM", 2);
|
||||
|
||||
if (lingua.not_empty())
|
||||
{
|
||||
expr = "CODRIGA=CODART";
|
||||
expr << "|CODLIN=\"" << lingua << '"';
|
||||
_relation->add(LF_DESLIN, expr, 2);
|
||||
}
|
||||
|
||||
_relation->add(LF_RCONDV, "TIPO=TIPO|CATVEN=CATVEN|TIPOCF=TIPOCF|CODCF=CODCF|COD=COD", 1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return *_relation;
|
||||
}
|
||||
|
||||
TCursor& TRicalcolo_mask::create_cursor()
|
||||
{
|
||||
TString filter = get(F_FILTER); filter.strip("\n");
|
||||
|
||||
int key = get_int(F_KEY);
|
||||
|
||||
TRectype start(get_rec()), stop(get_rec());
|
||||
start.zero(); stop.zero();
|
||||
|
||||
TToken_string& key_des = get_key_expr(key);
|
||||
|
||||
TSheet_field& fs = (TSheet_field&)field(F_FIELDS);
|
||||
TString field, val;
|
||||
bool key_seq = key > 0; // I primi campi corrispondono alla chiave selezionata?
|
||||
|
||||
for (int r = 0; r < fs.items(); r++)
|
||||
{
|
||||
TToken_string& row = fs.row(r);
|
||||
field = row.get(0);
|
||||
if (field.not_empty())
|
||||
{
|
||||
if (key_seq && key_des.get_pos(field) == r)
|
||||
{
|
||||
val = row.get();
|
||||
if (val.not_empty()) start.put(field, val);
|
||||
val = row.get();
|
||||
if (val.not_empty()) stop.put(field, val);
|
||||
}
|
||||
else
|
||||
{
|
||||
key_seq = FALSE;
|
||||
val = row.get();
|
||||
if (val.not_empty())
|
||||
{
|
||||
if (filter.not_empty()) filter << "&&";
|
||||
filter << '(' << field << ">=" << val << ')';
|
||||
}
|
||||
val = row.get();
|
||||
if (val.not_empty())
|
||||
{
|
||||
if (filter.not_empty()) filter << "&&";
|
||||
filter << '(' << field << "<=" << val << ')';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (key <= 0)
|
||||
key = 1;
|
||||
|
||||
if (_cursor)
|
||||
delete _cursor;
|
||||
_cursor = new TCursor(&create_relation(), filter, key, &start, &stop);
|
||||
return *_cursor;
|
||||
}
|
||||
|
||||
bool TRicalcolo_mask::file_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
TRicalcolo_mask& m = (TRicalcolo_mask&)f.mask();
|
||||
@ -153,6 +410,7 @@ bool TRicalcolo_mask::key_handler(TMask_field& f, KEY k)
|
||||
const int cur_key = atoi(f.get());
|
||||
TToken_string& key_expr = m.get_key_expr(cur_key);
|
||||
const bool empty = key_expr.empty_items();
|
||||
bool enable_first_row = TRUE;
|
||||
|
||||
TSheet_field& sheet = (TSheet_field&)m.field(F_FIELDS);
|
||||
TString_array& sa = sheet.rows_array();
|
||||
@ -170,7 +428,10 @@ bool TRicalcolo_mask::key_handler(TMask_field& f, KEY k)
|
||||
const int r = sa.add(field);
|
||||
sa.row(r).add(des.get_field_description(field), F_DESCR-F_FIELD);
|
||||
}
|
||||
}
|
||||
if (des.file_num() == LF_CONDV || des.file_num() == LF_RCONDV)
|
||||
enable_first_row = FALSE;
|
||||
}
|
||||
sheet.enable_cell(0, -1, enable_first_row);
|
||||
sheet.force_update();
|
||||
}
|
||||
return TRUE;
|
||||
@ -254,9 +515,9 @@ bool TRicalcolo_mask::fromto_handler(TMask_field& f, KEY k)
|
||||
const int max = rec.length(field);
|
||||
if (f.get().len() > max)
|
||||
{
|
||||
TString msg(32); msg = "Inserire al massimo ";
|
||||
TString msg(32); msg = "Inserire ";
|
||||
if (max > 1) msg << max; else msg << "un";
|
||||
msg << " caratter" << (max > 1 ? 'i' : 'e') << '.';
|
||||
msg << " caratter" << (max > 1 ? 'i' : 'e') << " al massimo.";
|
||||
ok = f.error_box(msg);
|
||||
}
|
||||
}
|
||||
@ -264,12 +525,36 @@ bool TRicalcolo_mask::fromto_handler(TMask_field& f, KEY k)
|
||||
return ok;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Ciclo principale di elaborazione
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
bool TRicalcolo_mask::elabora()
|
||||
{
|
||||
TIndwin iw(48, "Inizializzazione ...", TRUE, FALSE, 48);
|
||||
begin_wait();
|
||||
|
||||
TCursor& cur = create_cursor();
|
||||
|
||||
TViswin vw("ve4100.txt", "Ricalcolo valori",
|
||||
FALSE, TRUE, FALSE, 3, 3, -3, -3, FALSE);
|
||||
|
||||
for (cur = 0; cur.ok(); ++cur)
|
||||
{
|
||||
}
|
||||
|
||||
end_wait();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Ricalcolo di magazzino
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TRicalcola_application : public TApplication
|
||||
{
|
||||
{
|
||||
protected:
|
||||
virtual bool menu(MENU_TAG);
|
||||
virtual bool create();
|
||||
|
||||
@ -288,57 +573,8 @@ bool TRicalcola_application::menu(MENU_TAG)
|
||||
{
|
||||
TRicalcolo_mask m;
|
||||
while (m.run() == K_ENTER)
|
||||
{
|
||||
TString filter = m.get(F_FILTER); filter.strip("\n");
|
||||
|
||||
int key = m.get_int(F_KEY);
|
||||
|
||||
TRectype start(m.get_rec()), stop(m.get_rec());
|
||||
start.zero(); stop.zero();
|
||||
|
||||
TToken_string& key_des = m.get_key_expr(key);
|
||||
|
||||
TSheet_field& fs = (TSheet_field&)m.field(F_FIELDS);
|
||||
TString field, val;
|
||||
for (int r = 0; r < fs.items(); r++)
|
||||
{
|
||||
TToken_string& row = fs.row(r);
|
||||
field = row.get(0);
|
||||
if (field.not_empty())
|
||||
{
|
||||
if (key > 0 && key_des.get_pos(field) >= 0)
|
||||
{
|
||||
val = row.get();
|
||||
if (val.not_empty()) start.put(field, val);
|
||||
val = row.get();
|
||||
if (val.not_empty()) stop.put(field, val);
|
||||
}
|
||||
else
|
||||
{
|
||||
val = row.get();
|
||||
if (val.not_empty())
|
||||
{
|
||||
if (filter.not_empty()) filter << "&&";
|
||||
filter << '(' << field << ">=" << val << ')';
|
||||
}
|
||||
val = row.get();
|
||||
if (val.not_empty())
|
||||
{
|
||||
if (filter.not_empty()) filter << "&&";
|
||||
filter << '(' << field << "<=" << val << ')';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (key <= 0)
|
||||
key = 1;
|
||||
|
||||
TSheet_field& osf = (TSheet_field&)m.field(F_OUTPUTS);
|
||||
TCursor cur(&m.get_rel(), filter, key,
|
||||
start.empty() ? NULL : &start, stop.empty() ? NULL : &stop);
|
||||
elabora(cur, osf.rows_array());
|
||||
}
|
||||
m.elabora();
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
13
ve/ve4100.h
13
ve/ve4100.h
@ -5,6 +5,19 @@
|
||||
#define F_FILTER 104
|
||||
#define F_OUTPUTS 105
|
||||
#define F_SAVE 106
|
||||
|
||||
#define F_UNITA_MISURA 201
|
||||
#define F_DESC_UNITA_MISURA 202
|
||||
#define F_LINGUA 203
|
||||
#define F_DESC_LINGUA 204
|
||||
#define F_TIPO_LCO 205
|
||||
#define F_CAT_VEN 206
|
||||
#define F_DESC_CAT_VEN 207
|
||||
#define F_TIPO_CF 208
|
||||
#define F_CODICE_CF 209
|
||||
#define F_RAGSOC 210
|
||||
#define F_CODICE_LCO 211
|
||||
#define F_DESC_CODICE_LCO 212
|
||||
|
||||
// Primo sheet
|
||||
#define F_FIELD 101
|
||||
|
163
ve/ve4100.uml
163
ve/ve4100.uml
@ -14,7 +14,7 @@ END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Ricalcolo valori magazzino" -1 -1 78 16
|
||||
PAGE "Parametri di calcolo" -1 -1 78 16
|
||||
|
||||
GROUPBOX DLG_NULL 76 12
|
||||
BEGIN
|
||||
@ -23,13 +23,12 @@ END
|
||||
|
||||
LIST F_FILE 32
|
||||
BEGIN
|
||||
PROMPT 2 2 "File "
|
||||
PROMPT 2 2 "File "
|
||||
ITEM "0|Anagrafica magazzino"
|
||||
ITEM "1|Codici corrispondenti"
|
||||
ITEM "2|Unita' di misura"
|
||||
ITEM "3|Descrizioni in lingua"
|
||||
ITEM "4|Condizioni di vendita"
|
||||
ITEM "5|Righe condizioni di vendita"
|
||||
ITEM "1|Unita' di misura"
|
||||
ITEM "2|Descrizioni in lingua"
|
||||
ITEM "3|Condizioni di vendita"
|
||||
ITEM "4|Righe condizioni di vendita"
|
||||
END
|
||||
|
||||
LIST F_KEY 10
|
||||
@ -77,6 +76,156 @@ END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Parametri di collegamento" -1 -1 78 16
|
||||
|
||||
GROUPBOX DLG_NULL 78 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Generali"
|
||||
END
|
||||
|
||||
STRING F_UNITA_MISURA 2
|
||||
BEGIN
|
||||
PROMPT 2 2 "Unita' di misura "
|
||||
FLAGS "U"
|
||||
USE %UMS
|
||||
JOIN %LIN INTO CODTAB==CODTAB
|
||||
INPUT CODTAB F_UNITA_MISURA
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_UNITA_MISURA CODTAB
|
||||
OUTPUT F_DESC_UNITA_MISURA S0
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_DESC_UNITA_MISURA 50
|
||||
BEGIN
|
||||
PROMPT 25 2 ""
|
||||
USE %UMS KEY 2
|
||||
INPUT S0 F_DESC_UNITA_MISURA
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_UNITA_MISURA
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_LINGUA 1
|
||||
BEGIN
|
||||
PROMPT 2 3 "Lingua "
|
||||
FLAGS "U"
|
||||
USE %LIN
|
||||
INPUT CODTAB F_LINGUA
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_LINGUA CODTAB
|
||||
OUTPUT F_DESC_LINGUA S0
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_DESC_LINGUA 50
|
||||
BEGIN
|
||||
PROMPT 25 3 ""
|
||||
USE %LIN KEY 2
|
||||
INPUT S0 F_DESC_LINGUA
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_LINGUA
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 10
|
||||
BEGIN
|
||||
PROMPT 1 5 "Condizioni di vendita"
|
||||
END
|
||||
|
||||
LIST F_TIPO_LCO 1 10
|
||||
BEGIN
|
||||
PROMPT 2 6 "Condizioni per "
|
||||
ITEM "L|Listini"
|
||||
ITEM "C|Contratti"
|
||||
ITEM "O|Offerte"
|
||||
END
|
||||
|
||||
STRING F_CAT_VEN 4
|
||||
BEGIN
|
||||
PROMPT 2 7 "Categoria "
|
||||
FLAGS "U"
|
||||
USE CVE
|
||||
INPUT CODTAB F_CAT_VEN
|
||||
DISPLAY "Codice"
|
||||
DISPLAY "Descrizione@50"
|
||||
OUTPUT F_CAT_VEN CODTAB
|
||||
OUTPUT F_DESC_CAT_VEN S0
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_DESC_CAT_VEN 50
|
||||
BEGIN
|
||||
PROMPT 25 7 ""
|
||||
USE CVE KEY 2
|
||||
INPUT S0 F_DESC_CAT_VEN
|
||||
DISPLAY "Descrizione@50"
|
||||
DISPLAY "Codice"
|
||||
COPY OUTPUT F_CAT_VEN
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
RADIOBUTTON F_TIPO_CF 1 16
|
||||
BEGIN
|
||||
PROMPT 2 7 ""
|
||||
ITEM "C|Cliente"
|
||||
ITEM "F|Fornitore"
|
||||
END
|
||||
|
||||
NUMBER F_CODICE_CF 6
|
||||
BEGIN
|
||||
PROMPT 18 8 "Codice "
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF F_TIPO_CF SELECT
|
||||
INPUT CODCF F_CODICE_CF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Descrizione@50" RAGSOC
|
||||
OUTPUT F_CODICE_CF CODCF
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
NUMBER F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 25 9 ""
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF F_TIPO_CF SELECT
|
||||
INPUT RAGSOC F_RAGSOC
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY OUTPUT F_CODICE_CF
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_CODICE_LCO 3
|
||||
BEGIN
|
||||
PROMPT 2 10 "Lis/Con/Off "
|
||||
FLAGS "U"
|
||||
USE LF_CONDV
|
||||
INPUT TIPO F_TIPO_LCO SELECT
|
||||
INPUT CATVEN F_CAT_VEN SELECT
|
||||
INPUT TIPOCF F_TIPO_CF SELECT
|
||||
INPUT CODCF F_CODICE_CF SELECT
|
||||
INPUT COD F_CODICE_LCO
|
||||
DISPLAY "Codice" COD
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_CODICE_LCO COD
|
||||
OUTPUT F_DESC_CODICE_LCO DESCR
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_DESC_CODICE_LCO 50
|
||||
BEGIN
|
||||
PROMPT 25 10 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Fields" -1 -1 60 6
|
||||
|
Loading…
x
Reference in New Issue
Block a user