Patch level : 12.0 988

Files correlati     : li0.exe li0100a.msk
Commento            :

riepilogo documenti/lettere – nel punto di menu non è possibile scegliere le numerazioni, nel mio caso vengono riepilogate e nel caso di ricalcolo e riporto probabilmente anche considerate le fatture provvisorie che giustamente hanno preso il numero lettera.

Riepilogo documenti/lettere – maiuscolo + f12 mi accende precarica se lo clicco mi chiede anno e cliente, ma l’ho già scelto nella richiesta parametri della pagina precedente, mi aspetterei che i dati della lettera vengano scritti sui documenti che ho a video in quel momento.
This commit is contained in:
Alessandro Bonazzi 2020-08-18 00:07:23 +02:00
parent ba9c4d6bdd
commit 8a66872b84
4 changed files with 179 additions and 334 deletions

View File

@ -7,13 +7,15 @@
#include <doc.h>
#include "../ve/velib.h"
#include "../ve/velib04.h"
#include "lilib01.h"
#include "li0.h"
#include "li0100a.h"
#define PLA_COLS 10 // n° colonne di lettere di intento
#define CPC(x) (START_PLA + x*2)
#define PLNPR(x) (START_PLA + x * 2)
#define PLIMP(x) (START_PLA + x * 2 + 1)
/* Utility ***********************/
@ -33,19 +35,18 @@ private:
void next_page(int p);
bool _filter_changed;
int _plColumns;
void addRow(TSheet_field& sheet, TISAM_recordset& rec);
void resetColumns(TSheet_field& sheet);
void addColumns(TSheet_field& sheet, const int col);
void addRow(TSheet_field& sheet, const TDocumento &d);
public:
void load_sheet();
void setFilterChanged() { _filter_changed = true; }
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void load_config();
TVisLI_mask();
};
TVisLI_mask::TVisLI_mask()
: TAutomask("li0100a"), _filter_changed(true)
TVisLI_mask::TVisLI_mask() : TAutomask("li0100a"), _filter_changed(true)
{
if(get(F_DATAFIN).empty())
set(F_DATAFIN, TDate(TODAY));
@ -57,221 +58,83 @@ void TVisLI_mask::load_sheet()
{
_filter_changed = false;
TSheet_field& sheet = sfield(F_RIGHE);
sheet.hide(); // Nascondo lo sheet per guadagnare un 20% di velocità di caricamento, le ottimizzazioni da PRO!
if(!sheet.empty())
sheet.destroy();
resetColumns(sheet);
TString query = "USE DOC\n";
if(get(F_TIPORIC) == "D")
TLista_documenti din;
int anno = get_int(F_ANNO);
TDate dal = get_date(F_DATAINI);
TDate al = get_date(F_DATAFIN);
long dacodcf = get_long(F_DACODCF);
long acodcf = get_long(F_ACODCF);
TCursor cli(new TRelation(LF_CLIFO));
TRectype from(cli.curr());
TRectype to(cli.curr());
anno = today.year();
if (!dal.ok())
dal.set_start_year(anno);
if (!al.ok())
al.set_end_year(anno);
if (dacodcf > 0L)
{
/* Facciamo una scelta intelligente per ottimizzare sempre la chiave da usare
* Ho il filtro sul cliente? 2
* Ho il filtro sulla data? 3
* Ho il filtro sul codice numerazione? 5
* In caso di tutto negativo uso la chiave classica
*/
int key = get(F_DACODCF).full() ? 2 : (get(F_DATAINI).full() ? 3 : (get(F_CODNUM).full() ? 5 : 1));
query << "KEY " << key << "\n";
from.put(CLI_TIPOCF, "C");
from.put(CLI_CODCF, dacodcf);
}
if (acodcf > 0L)
{
to.put(CLI_TIPOCF, "C");
to.put(CLI_CODCF, acodcf);
}
cli.setregion(from, to);
TString queryFrom, queryTo;
const int items = cli.items();
sheet.destroy();
for (cli = 0L; cli.pos() < items; ++cli)
{
din.read('D', 'C', cli.curr().get_long(CLI_CODCF), anno, tipi(), stati(), dal, al);
switch (key)
{
case 2:
{
// 2: TIPOCF+CODCF+PROVV+ANNO+DATADOC+CODNUM+NDOC
queryFrom.cut(0) << "FROM TIPOCF='C' CODCF=#DACODCF PROVV='D'";
queryTo.cut(0) << "TO TIPOCF='C' CODCF=#ACODCF PROVV='D'";
if(get(F_ANNO).full())
{
queryFrom << " ANNO=#DAANNO";
queryTo << " ANNO=#AANNO";
if(get(F_DATAINI).full())
{
queryFrom << " DATADOC=#DADATA";
if(get(F_CODNUM).full())
queryFrom << " CODNUM=#DACODNUM";
}
if(get(F_DATAFIN).full())
{
queryTo << " DATADOC=#ADATA";
if(get(F_CODNUM).full())
queryTo << " CODNUM=#ACODNUM";
}
}
}
break;
case 3:
{
// 3: DATADOC+PROVV+ANNO+CODNUM+NDOC
queryFrom.cut(0) << "DATADOC=#DADATA PROVV='D'";
queryTo.cut(0) << "DATADOC=#ADATA PROVV='D'";
if(get(F_ANNO).full())
{
queryFrom << " ANNO=#DAANNO";
queryTo << " ANNO=#AANNO";
if(get(F_CODNUM).full())
{
queryFrom << " CODNUM=#DACODNUM";
queryTo << " CODNUM=#ACODNUM";
}
}
}
break;
case 5:
{
// 5: PROVV+CODNUM+ANNO+NDOC
queryFrom.cut(0) << "PROVV='D' CODNUM=#DACODNUM";
queryTo.cut(0) << "PROVV='D' CODNUM=#ACODNUM";
if(get(F_ANNO).full())
{
queryFrom << " ANNO=#DAANNO";
queryTo << " ANNO=#AANNO";
}
}
break;
case 1:
default:
{
// 1: PROVV+ANNO+CODNUM+NDOC
queryFrom.cut(0) << "PROVV='D'";
queryTo.cut(0) << "PROVV='D'";
if(get(F_ANNO).full())
{
queryFrom << " ANNO=#DAANNO";
queryTo << " ANNO=#AANNO";
}
}
break;
}
// Campi solo filtrabili con SELECT **************************
// TIPODOC+STATO
TString querySel;
bool tipo = get(F_TIPODOC).full();
bool stato = get(F_STATO).full();
querySel << ((tipo || stato) ? "\nSELECT " : "") << (tipo ? "TIPODOC==#TIPODOC&&" : "") << (stato ? "STR(STATO==#STATO)" : "");
if(tipo && !stato)
querySel.cut(querySel.len()-2);
// Unisco query
query << querySel << "\nFROM " << queryFrom << "\nTO " << queryTo << "\n";
const int ndocs = din.items();
// Creo recordset
TISAM_recordset rec(query);
// Uso il metodo di TISAM_recordset per valorizzare la query, è più sicuro
if(get(F_DATAINI).full())
rec.set_var("#DADATA", get_date(F_DATAINI));
if(get(F_DATAFIN).full())
rec.set_var("#ADATA", get_date(F_DATAFIN));
if(get(F_CODNUM).full())
{
rec.set_var("#DACODNUM", get(F_CODNUM));
rec.set_var("#ACODNUM", get(F_CODNUM));
}
if(get(F_TIPODOC).full())
rec.set_var("#TIPODOC", get(F_TIPODOC));
if(get(F_ANNO).full())
{
rec.set_var("#DAANNO", get(F_ANNO));
rec.set_var("#AANNO", get(F_ANNO));
}
if(get(F_STATO).full())
rec.set_var("#STATO", get(F_STATO));
if(get(F_DACODCF).full())
rec.set_var("#DACODCF", get(F_DACODCF));
if(get(F_ACODCF).full())
rec.set_var("#ACODCF", get(F_ACODCF));
// Aggiungo le righe allo sheet
for(bool ok = rec.move_first(); ok; ok = rec.move_next())
addRow(sheet, rec);
; for (int d = 0; d < ndocs; d++)
addRow(sheet, din[d]);
}
else
{
TString16 key; key << get(F_ANNO) << "|" << get(F_NUMPROT);
TRectype letint = cache().get(LF_LETINT, key);
// 2: TIPOCF+CODCF+PROVV+ANNO+DATADOC+CODNUM+NDOC
query << "KEY 2\n"
"FROM TIPOCF='C' CODCF=" << letint.get("CODCLI") << " PROVV='D' ANNO=" << letint.get("ANNO") << " DATADOC=" << letint.get("DAL") << "\n"
"TO TIPOCF='C' CODCF=" << letint.get("CODCLI") << " PROVV='D' ANNO=" << letint.get("ANNO") << " DATADOC="<< letint.get("ANNO") << "1231";
TISAM_recordset rec(query);
for(bool ok = rec.move_first(); ok; ok = rec.move_next())
{
TToken_string lePlafs(rec.get("G1:PLAFOND").as_string(), ',');
for(int i = 0; i < lePlafs.items(); i++)
{
TToken_string thisPlaf = lePlafs.get(i);
if(strcmp(thisPlaf.get(1), get(F_NUMPROT)) == 0) // 1 -> _plnumprot from lilib.h
{
addRow(sheet, rec);
break;
}
}
}
}
// Forzo aggiornamento e mostro sheet
sheet.force_update();
sheet.show();
}
void TVisLI_mask::addRow(TSheet_field& sheet, TISAM_recordset& rec)
void TVisLI_mask::addRow(TSheet_field& sheet, const TDocumento &d)
{
// Per ogni documento che aggiungo valuto quante lettere di intento utilizzo.
// Ogni lettera di intento utilizzerà 2 colonne:
// Num protocollo e QTA utilizzata
// Controllo preventivo che abbia effettivamente il plafond sul documento
if(rec.get("G1:PLAFOND").is_empty())
return;
// Creo una nuova riga
TToken_string& row = sheet.row(-1);
// Data documento
row.add(rec.get("DATADOC").as_date(), sheet.cid2index(A_DATADOC)); // Anno documento
row.add(rec.get("ANNO").as_int(), sheet.cid2index(A_ANNO)); // Numero documento
row.add(rec.get("NDOC").as_string(), sheet.cid2index(A_NUMDOC)); // Numero documento
row.add(rec.get("CODNUM").as_string(), sheet.cid2index(A_CODNUM)); // Tipo documento
row.add(rec.get("TIPODOC").as_string(), sheet.cid2index(A_TIPODOC)); // Stato documento
row.add(rec.get("STATO").as_string(), sheet.cid2index(A_STATODOC)); // Tipo cliente
row.add("C", sheet.cid2index(A_TIPOCF)); // Codice cliente
row.add(rec.get("CODCF").as_int(), sheet.cid2index(A_CODCF)); // Ragione Sociale
TToken_string key("C"); key.add(rec.get("CODCF").as_string());
row.add(cache().get(LF_CLIFO, key, CLI_RAGSOC), sheet.cid2index(A_RAGSOC));
// Totale documento
row.add(rec.get("G1:TOTDOC").as_real(), sheet.cid2index(A_TOTDOC));
TToken_string plafs(d.get(DOC_PLAFOND), ',');
TToken_string lePlafs(rec.get("G1:PLAFOND").as_string(), ',');
// Abilito le colonne che mi servono
addColumns(sheet, lePlafs.items());
for(int i = 0; i < lePlafs.items() && i < PLA_COLS; i++)
if (plafs.full())
{
TToken_string thisPlaf = lePlafs.get(i);
row.add(thisPlaf.get(1), sheet.cid2index(CPC(i))); // _plnumprot
row.add(thisPlaf.get(2), sheet.cid2index(CPC(i)+1)); // _plimporto
}
}
const int r = sheet.set_row_cell(A_DATADOC,d.get(DOC_DATADOC)); // Data documento
sheet.set_row_cell(A_ANNO, d.get_int(DOC_ANNO),r); // Anno documento
sheet.set_row_cell(A_NUMDOC, d.get_long(DOC_NDOC), r); // Numero documento
sheet.set_row_cell(A_CODNUM, d.get(DOC_CODNUM), r); // Tipo documento
sheet.set_row_cell(A_TIPODOC, d.get(DOC_TIPODOC), r); // Stato documento
sheet.set_row_cell(A_STATODOC, d.get(DOC_STATO), r); // Tipo cliente
sheet.set_row_cell(A_TIPOCF, "C", r); // Codice cliente
sheet.set_row_cell(A_CODCF, d.get(DOC_CODCF), r); // Ragione Sociale
sheet.set_row_cell(A_RAGSOC, d.clifor().get(CLI_RAGSOC), r);
// Totale documento
sheet.set_row_cell(A_TOTDOC, d.totale_doc(), r);
void TVisLI_mask::resetColumns(TSheet_field& sheet)
{
return; // Disabled
// Disabilito tutte le colonne che non uso
for (int i = 0; i < PLA_COLS * 2; i++)
sheet.show_column(START_PLA+i, false);
}
const int nplafs = plafs.items();
void TVisLI_mask::addColumns(TSheet_field& sheet, const int col)
{
return; // Disabled
for(; _plColumns <= col && _plColumns <= PLA_COLS; _plColumns++)
{
sheet.show_column(CPC(_plColumns), true);
sheet.show_column(CPC(_plColumns)+1, true);
for (int i = 0; i < nplafs && i < PLA_COLS; i++)
{
TToken_string plaf(plafs.get(i));
sheet.set_row_cell(PLNPR(i), plaf.get(_plnumprot), r); // _plnumprot
sheet.set_row_cell(PLIMP(i), plaf.get(_plimporto), r); // _plimporto
}
}
}
@ -279,9 +142,7 @@ void TVisLI_mask::next_page(int p)
{
TAutomask::next_page(p);
if (_filter_changed && curr_win() == sfield(F_RIGHE).parent())
{
load_sheet();
}
}
bool TVisLI_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
@ -290,35 +151,24 @@ bool TVisLI_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
switch(id)
{
case F_CODNUM:
case F_ANNO:
if (e == fe_init)
{
if(e == fe_modify)
{
TMask& m = o.mask();
const TString4& codnum = o.get();
if(codnum.full())
{
const TCodice_numerazione & cod_num = cached_numerazione(codnum);
m.set(F_DESNUM, cod_num.descrizione());
m.set(F_TIPODOC, cod_num.tipo_doc(0));
const TTipo_documento tipodoc(cod_num.tipo_doc(0));
m.set(F_DESTIPODOC, tipodoc.descrizione());
}
}
o.set(today.year());
load_config();
}
break;
case F_TIPORIC:
if(e == fe_modify)
if( e == fe_modify)
{
bool en = o.get() == "D";
enable(F_NUMPROT, !en);
// Pulisco il campo se devo
if(en) reset(F_NUMPROT);
for(int i = START_DOC; i <= END_DOC; i++)
const bool on = o.get() == "D";
enable(F_NUMPROT, !on);
for(int i = F_DACODCF; i <= F_ARAGSOC; i++)
{
enable(i, en);
// Pulisco i campi se devo
if(!en) reset(i);
enable(i, on);
reset(i);
}
}
break;
@ -370,6 +220,12 @@ bool TVisLI_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
to_cli.enable_check();
from_cli.check_type(CHECK_SEARCH);
// Lancio la maschera
sto.disable(F_ANNO_STO);
sto.disable(F_FROM_CLI);
sto.disable(F_TO_CLI);
sto.set(F_ANNO_STO, get_int(F_ANNO));
sto.set(F_FROM_CLI, get_long(F_DACODCF));
sto.set(F_TO_CLI, get_long(F_ACODCF));
if (sto.run() == K_ENTER)
genera_li_storico(sto.get_int(F_ANNO_STO), sto.get_long(F_FROM_CLI), sto.get_long(F_TO_CLI));
return false;
@ -383,6 +239,7 @@ bool TVisLI_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
const TString codnum = o.mask().get(A_CODNUM);
const long numdoc = o.mask().get_long(A_NUMDOC);
const bool enab = numdoc > 0;
if (e == fe_button && enab)
{
o.disable(); // Tecnica anti doppio click!
@ -398,13 +255,36 @@ bool TVisLI_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
break;
}
if (e == fe_modify && jolly == 0 && id >= START_MASK && id <= END_MASK)
{
if (e == fe_modify && jolly == 0 && id >= F_TIPORIC && id <= F_ARAGSOC)
setFilterChanged();
}
return true;
}
void TVisLI_mask::load_config()
{
TToken_string tipidoc(ini_get_string(CONFIG_DITTA, "li", "TIPIDOC"));
TSheet_field &docs = sfield(DOCUMENTI_STATO);
docs.destroy();
for (int i = 0; i < tipidoc.items(); i++)
{
TString td = tipidoc.get(i);
TToken_string stati(ini_get_string(CONFIG_DITTA, "li", td));
for (int j = 0; j < stati.items(); j++)
{
TToken_string s(stati.get(j), ',');
const int r = docs.set_row_cell(F_TIPODOC_C, td);
docs.set_row_cell(F_STATODOCDA_C, s.get(0), r);
docs.set_row_cell(F_STATODOCA_C, s.get(1), r);
}
}
docs.force_update();
}
class TVisLI_app : public TSkeleton_application
{
public:

View File

@ -1,23 +1,12 @@
#define START_MASK 401
#define START_DOC 403
#define END_DOC 414
#define F_TIPORIC 401
#define F_NUMPROT 402
#define F_DATAINI 403
#define F_DATAFIN 404
#define F_CODNUM 405
#define F_DESNUM 406
#define F_TIPODOC 407
#define F_DESTIPODOC 408
#define F_ANNO 409
#define F_STATO 410
#define F_DACODCF 411
#define F_DARAGSOC 412
#define F_ACODCF 413
#define F_ARAGSOC 414
#define END_MASK 499
#define F_ANNO 405
#define F_DACODCF 406
#define F_DARAGSOC 407
#define F_ACODCF 408
#define F_ARAGSOC 409
// maschera ricostruzione storico
#define F_ANNO_STO 101
@ -25,9 +14,12 @@
#define F_TO_CLI 103
#define F_TIPO 104
#define DOCUMENTI_STATO 201
#define F_RIGHE 301
#define START_SHEET 101
#define F_TIPODOC_C 101
#define F_STATODOCDA_C 102
#define F_STATODOCA_C 103
#define A_DATADOC 101
#define A_ANNO 102

View File

@ -1,6 +1,7 @@
#include "li0100a.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_RECALC 2 2
BEGIN
PROMPT 1 1 "Carica"
@ -9,7 +10,7 @@ END
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 "Precarica"
PROMPT 1 1 "Ricostruisci Plafond"
PICTURE TOOL_ELABORA
END
@ -21,8 +22,9 @@ PAGE "Impostazioni" 0 2 0 0
LISTBOX F_TIPORIC 20
BEGIN
PROMPT 1 1 "Ricerca per "
ITEM "D|Estremi documenti"
ITEM "L|Lettera"
ITEM "L|Lettera" MESSAGE ENABLE,1@|CLEAR,2@
ITEM "D|Estremi documenti" MESSAGE CLEAR,1@|ENABLE,2@
END
NUMBER F_NUMPROT 6
@ -45,7 +47,7 @@ BEGIN
OUTPUT F_DARAGSOC LF_CLIFO->RAGSOC
OUTPUT F_ACODCF CODCLI
OUTPUT F_ARAGSOC LF_CLIFO->RAGSOC
FLAGS "DU"
GROUP 1
END
DATE F_DATAINI
@ -60,89 +62,22 @@ BEGIN
WARNING "La data finale non può essere minore della data iniziale"
END
GROUPBOX DLG_NULL 80 5
BEGIN
PROMPT 0 3 "Documento"
END
STRING F_CODNUM 5
BEGIN
PROMPT 1 4 "Numerazione "
HELP "Codice numerazione"
USE %NUM
INPUT CODTAB F_CODNUM
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODNUM CODTAB
OUTPUT F_DESNUM S0
FLAG "UPA"
WARNING "Numerazione assente"
KEY 1 2
END
STRING F_DESNUM 50
BEGIN
PROMPT 24 4 ""
HELP "Descrizione numerazione"
USE %NUM KEY 2
INPUT S0 F_DESNUM
DISPLAY "Descrizione@60" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODNUM
END
STRING F_TIPODOC 5
BEGIN
PROMPT 1 5 "Tipo "
HELP "Codice tipo documento"
USE %TIP
INPUT CODTAB F_TIPODOC
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_TIPODOC CODTAB
OUTPUT F_DESTIPODOC S0
FLAG "UP"
END
STRING F_DESTIPODOC 50
BEGIN
PROMPT 24 5 ""
HELP "Descrizione tipo documento"
USE %TIP KEY 2
INPUT S0 F_DESTIPODOC
DISPLAY "Descrizione@60" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_TIPODOC
END
NUMBER F_ANNO 4
BEGIN
PROMPT 1 6 "Esercizio "
PROMPT 1 3 "Anno "
CHECKTYPE REQUIRED
NUM_EXPR #F_ANNO>0
FLAG "AP"
WARNING "Inserire un anno valido"
END
STRING F_STATO 1
BEGIN
PROMPT 24 6 "Stato "
USE %STD
INPUT CODTAB F_STATO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATO CODTAB
FLAG "U"
WARNING "Inserire un anno"
END
GROUPBOX DLG_NULL 80 4
BEGIN
PROMPT 0 8 "Clienti"
PROMPT 0 5 "Clienti"
END
NUMBER F_DACODCF 6
BEGIN
PROMPT 1 9 "Da Codice"
PROMPT 1 6 "Da Codice"
USE LF_CLIFO
INPUT TIPOCF "C" SELECT
INPUT CODCF F_DACODCF
@ -154,13 +89,13 @@ BEGIN
OUTPUT F_DACODCF CODCF
OUTPUT F_DARAGSOC RAGSOC
CHEKTYPE NORMAL
GROUP 1
FLAGS ""
GROUP 2
FLAGS "D"
END
STRING F_DARAGSOC 50 49
BEGIN
PROMPT 21 9 "R.Soc"
PROMPT 21 6 "R.Soc"
USE LF_CLIFO KEY 2
INPUT TIPOCF "C" SELECT
INPUT RAGSOC F_DARAGSOC
@ -170,14 +105,14 @@ BEGIN
DISPLAY "Partita IVA@15" PAIV
COPY OUTPUT F_DACODCF
ADD RUN CG0 -1
GROUP 1
FLAGS ""
GROUP 2
FLAGS "D"
END
NUMBER F_ACODCF 6
BEGIN
PROMPT 1 10 "A Codice "
PROMPT 1 7 "A Codice "
USE LF_CLIFO
INPUT TIPOCF "C" SELECT
INPUT CODCF F_ACODCF
@ -189,13 +124,13 @@ BEGIN
OUTPUT F_ACODCF CODCF
OUTPUT F_ARAGSOC RAGSOC
CHEKTYPE NORMAL
GROUP 1
FLAGS ""
GROUP 2
FLAGS "D"
END
STRING F_ARAGSOC 50 49
BEGIN
PROMPT 21 10 "R.Soc"
PROMPT 21 7 "R.Soc"
USE LF_CLIFO KEY 2
INPUT TIPOCF "C" SELECT
INPUT RAGSOC F_ARAGSOC
@ -205,13 +140,22 @@ BEGIN
DISPLAY "Partita IVA@15" PAIV
COPY OUTPUT F_ACODCF
ADD RUN CG0 -1
GROUP 1
FLAGS ""
GROUP 2
FLAGS "D"
END
SPREADSHEET DOCUMENTI_STATO 45 10
BEGIN
PROMPT 18 10 ""
ITEM "Tipo Numerazione"
ITEM "Da stato"
ITEM "A stato"
FLAGS "D"
END
STRING DLG_PROFILE 256
BEGIN
PROMPT 1 -1 "Profilo "
PROMPT -1 -1 "Profilo "
PSELECT
FLAGS "H"
END
@ -260,6 +204,31 @@ ENDPAGE
ENDMASK
PAGE "Riga tipo numerazione" -1 -1 78 8
STRING F_TIPODOC_C 4
BEGIN
PROMPT 2 1 "Tipo Documento "
FIELD TIPODOC
END
STRING F_STATODOCDA_C 4
BEGIN
PROMPT 2 2 "Da Numerazione "
FIELD CODTAB
END
STRING F_STATODOCA_C 4
BEGIN
PROMPT 2 3 "A Numerazione "
FIELD CODTAB
END
ENDPAGE
ENDMASK
PAGE "Riga" -1 -1 69 14
DATE A_DATADOC

View File

@ -38,6 +38,10 @@ void lint_reset_msg();
const TToken_string & lint_get_msg();
// Ricostruisce il plafond dall'anno
void genera_li_storico(const int anno, const long from_cli = 0L, const long to_cli = 0L, const char tipocf = 'C');
// Ritorna la lista dei tipi
TToken_string & tipi();
// Ritorna la lista degli stati
TToken_string & stati();
class TLi_manager : public TObject
{