git-svn-id: svn://10.65.10.50/branches/R_10_00@23034 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d689b2fdf0
commit
d4c46df06c
@ -1,3 +1,3 @@
|
||||
168
|
||||
0
|
||||
$lvcondv|235|243|191|0|Tabella testate di contratto|||
|
||||
$lvcondv|0|0|193|0|Tabella testate di contratto|||
|
||||
|
@ -1,5 +1,5 @@
|
||||
168
|
||||
48
|
||||
49
|
||||
CODCONT|3|6|0|Codice Contratto
|
||||
STATUS|1|2|0|Stato del contratto, <CH>chiuso, <CO>confermato, <DC>da confermare
|
||||
PROPOSTA|8|1|0|Proposta di contratto
|
||||
@ -48,5 +48,6 @@ CODNUM|1|4|0|Codice numerazione Buono di Consegna
|
||||
TPDOC|1|4|0|Tipo documento Buono di Consegna
|
||||
REDDI|1|5|0|Reddività
|
||||
RAGGCGRUP|8|1|0|Raggruppa sul capogruppo
|
||||
GIOCHI|2|1|0|Giorno di chiusura
|
||||
1
|
||||
CODCF+CODCONT|
|
||||
|
@ -2,6 +2,8 @@
|
||||
#include <reprint.h>
|
||||
#include "lvlib.h"
|
||||
|
||||
#include "lv0201.h"
|
||||
#include "lv0b00.h"
|
||||
|
||||
class TStampa_tabelle_lv : public TSkeleton_application
|
||||
{
|
||||
@ -23,19 +25,55 @@ void TStampa_tabelle_lv::print()
|
||||
|
||||
void TStampa_tabelle_lv::main_loop()
|
||||
{
|
||||
bool repcom = false;
|
||||
// Costruisce il nome del report in base alla riga di comando
|
||||
TFilename rep;
|
||||
if (argc() > 2)
|
||||
{
|
||||
rep = argv(2);
|
||||
rep = argv(2); rep.lower();
|
||||
if (rep == "repcom")
|
||||
{
|
||||
rep.cut(0);
|
||||
repcom = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
rep.strip("-&%$^");
|
||||
if (rep.len() == 3)
|
||||
rep.insert("lvst");
|
||||
rep.ext("rep");
|
||||
}
|
||||
}
|
||||
|
||||
TLV_report r;
|
||||
bool ok = r.load(rep); // Controlla l'effettiva esistenza del report
|
||||
|
||||
bool ok = true;
|
||||
while (ok)
|
||||
{
|
||||
if (repcom)
|
||||
ok = handle_repcom(r);
|
||||
else
|
||||
{
|
||||
if (rep.starts_with("lv0a00"))
|
||||
ok = handle_lv0a00(r, rep);
|
||||
else
|
||||
{
|
||||
TFilename mskname(rep); mskname.ext("");
|
||||
TMask m(mskname);
|
||||
if (m.find_by_id(F_REPORT))
|
||||
{
|
||||
ok = m.run() == K_ENTER;
|
||||
if (ok)
|
||||
{
|
||||
TFilename crep = m.get(F_REPORT);
|
||||
ok = r.load(crep.full() ? crep : rep);
|
||||
r.mask2report(m);
|
||||
}
|
||||
}
|
||||
else
|
||||
ok = r.load(rep);
|
||||
}
|
||||
}
|
||||
if (ok)
|
||||
{
|
||||
TReport_book b;
|
||||
@ -47,11 +85,12 @@ void TStampa_tabelle_lv::main_loop()
|
||||
warning_box (TR("Nessun record estratto per i parametri inseriti"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int lv0200(int argc, char* argv[])
|
||||
{
|
||||
TStampa_tabelle_lv app;
|
||||
app.run(argc, argv, TR("Stampa tabelle"));
|
||||
app.run(argc, argv, TR("Stampe lavanderie"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,8 @@
|
||||
|
||||
class TConf_lavanderie_mask : public TAlmanac_mask
|
||||
{
|
||||
TLavanderie_calendar _cal; // array di TBit_array. Ognuno di essi è lungo 366 e rappresenta i flag di presenza documenti per ogni giorno dell'anno. Ogni page della maschera ha bisogno di un bitarray diverso
|
||||
TLavanderie_calendar _cal; // array di TBit_array. Ognuno di essi è lungo 366 e rappresenta i flag di presenza documenti per ogni giorno dell'anno.
|
||||
// Ogni page della maschera ha bisogno di un bitarray diverso
|
||||
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
@ -91,7 +92,6 @@ protected:
|
||||
|
||||
public:
|
||||
TConf_Lavanderie() : TConfig_application( CONFIG_DITTA ), _mask(NULL) {}
|
||||
virtual ~TConf_Lavanderie( ){ }
|
||||
};
|
||||
|
||||
TMask* TConf_Lavanderie::create_mask(const TFilename & f)
|
||||
@ -109,8 +109,7 @@ TMask* TConf_Lavanderie::create_mask(const TFilename & f)
|
||||
|
||||
bool TConf_Lavanderie::user_create( )
|
||||
{
|
||||
TConfig conf(CONFIG_DITTA );
|
||||
conf.set( "EdMask", "lv0300a", "lv" );
|
||||
ini_set_string(CONFIG_DITTA, "lv", "EdMask", "lv0300a" );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,10 @@
|
||||
|
||||
#define F_AGGHEAD 275
|
||||
#define F_DESTHEAD 276
|
||||
#define F_ZERONOTE 277
|
||||
|
||||
#define F_RIFTESTNUM 277
|
||||
|
||||
#define F_DOTSTO 278
|
||||
|
||||
#define F_BACKUP 300
|
||||
|
||||
|
@ -179,14 +179,16 @@ END
|
||||
|
||||
BOOLEAN F_RIFTEST
|
||||
BEGIN
|
||||
PROMPT 2 6 "Riportare riferimenti in testata documento"
|
||||
PROMPT 2 6 "Scrivi riferimenti in testata documento"
|
||||
FIELD RifTest
|
||||
MESSAGE FALSE CLEAR,F_RIFTESTNUM
|
||||
MESSAGE TRUE ENABLE,F_RIFTESTNUM
|
||||
END
|
||||
|
||||
BOOLEAN F_ZERONOTE
|
||||
BOOLEAN F_RIFTESTNUM
|
||||
BEGIN
|
||||
PROMPT 42 6 "Non riportare note da bolle a fatture"
|
||||
FIELD ZeroNote
|
||||
PROMPT 50 6 "Solo numeri di bolla"
|
||||
FIELD RifTestNum
|
||||
END
|
||||
|
||||
STRING F_FELAB_DIF 8
|
||||
@ -867,13 +869,19 @@ END
|
||||
|
||||
BOOLEAN F_DESTHEAD
|
||||
BEGIN
|
||||
PROMPT 1 21 "Destinazione nella testata"
|
||||
PROMPT 1 21 "Destinazione in testata"
|
||||
FIELD DestHead
|
||||
END
|
||||
|
||||
BOOLEAN F_DOTSTO
|
||||
BEGIN
|
||||
PROMPT 30 21 "Visualizza dotazione storica"
|
||||
FIELD ShowDotSto
|
||||
END
|
||||
|
||||
STRING F_UMPESO 3
|
||||
BEGIN
|
||||
PROMPT 40 21 "U.M. "
|
||||
PROMPT 66 21 "U.M. "
|
||||
USE %UMS
|
||||
INPUT CODTAB F_UMPESO
|
||||
DISPLAY "Codice@6" CODTAB
|
||||
@ -891,23 +899,10 @@ END
|
||||
|
||||
BOOLEAN F_GESTSACA
|
||||
BEGIN
|
||||
PROMPT 1 23 "Gestione sacchi/carrello"
|
||||
PROMPT 30 22 "Gestione sacchi/carrello"
|
||||
FIELD Gestsaca
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 40 22 "@bOpzioni backup"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING F_BACKUP 128 25
|
||||
BEGIN
|
||||
PROMPT 41 23 "Percorso di backup "
|
||||
FIELD Backup
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "File da elaborare" 0 0 0 0
|
||||
@ -963,6 +958,18 @@ BEGIN
|
||||
FIELD FilePulito
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 0 20 "@bOpzioni backup"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING F_BACKUP 128 25
|
||||
BEGIN
|
||||
PROMPT 1 21 "Percorso di backup "
|
||||
FIELD Backup
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include <automask.h>
|
||||
#include <colmask.h>
|
||||
#include <defmask.h>
|
||||
#include <execp.h>
|
||||
#include <progind.h>
|
||||
#include <relapp.h>
|
||||
@ -407,9 +408,6 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
|
||||
f.set_dirty(false);
|
||||
}
|
||||
}
|
||||
if (e == se_enter || e == se_notify_modify || e == se_query_add || e == se_notify_add)
|
||||
highlight_row();
|
||||
|
||||
//questo pezzo serve per gestire enable e disable dei campi in modo corretto
|
||||
//senza massage in maschera, sia sullo sheet che sul dettaglio
|
||||
TMask& rowmask = ss.sheet_mask();
|
||||
@ -429,6 +427,18 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
|
||||
}
|
||||
|
||||
_artrig = row.get(0); //salvo nella variabile globale il codart della riga selezionata
|
||||
}
|
||||
if (e == se_enter || e == se_notify_modify || e == se_query_add || e == se_notify_add)
|
||||
highlight_row();
|
||||
if (e == se_notify_add)
|
||||
{
|
||||
TSheet_field& ss = (TSheet_field&)o;
|
||||
TMask& rowmask = ss.sheet_mask();
|
||||
TToken_string& row = ss.row(jolly);
|
||||
const TString & val = get(F_RITAUDTTMP);
|
||||
rowmask.set(S_CALCCONS, val);
|
||||
row.add(val, ss.cid2index(S_RITAUDTTMP));
|
||||
set(F_RITAUDTTMPRIG, val);
|
||||
}
|
||||
//se ho cancellato una riga dello sheet, chiedo conferma che sia effettivamente quello che si vuole fare
|
||||
if (e == se_query_del)
|
||||
@ -694,6 +704,8 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//se ho scritto un articolo diverso da quello che esisteva prima
|
||||
//e se si desidera veramente modificarlo, allora permetto la modifica
|
||||
//e forzo l'updatre della riga, altrimenti riscrivo l'articolo che c'era prima
|
||||
@ -768,6 +780,15 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
|
||||
|
||||
row.add(prezzo.string(), ss.cid2index(S_PREZZOST));
|
||||
row.add(_artrig, ss.cid2index(S_CODART));
|
||||
|
||||
const real valconv(cache().get("&LV047", codart, "R0"));
|
||||
|
||||
row.add(valconv.string(), ss.cid2index(S_VALCONV));
|
||||
|
||||
TDate oggi(TODAY);
|
||||
|
||||
row.add(oggi.string(), ss.cid2index(S_DATAINS));
|
||||
|
||||
ss.force_update(ss.selected());
|
||||
}
|
||||
//se all'articolo è associata un'unità di misura, la propongo
|
||||
@ -784,11 +805,12 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
|
||||
case S_DOTIN:
|
||||
case S_DOTOD:
|
||||
case S_DOTTMP:
|
||||
{
|
||||
if (e == fe_modify)
|
||||
{
|
||||
TString str;
|
||||
str << "ATTENZIONE: Una quantità risulta modificata a mano!\nDopo questa operazione i totali dei movimenti"
|
||||
<< "di magazzino\npotrebbero non corrispondere ai numeri qui salvati.";
|
||||
str << "ATTENZIONE: Una quantità risulta modificata a mano; dopo questa operazione i totali dei movimenti"
|
||||
<< "di magazzino potrebbero non corrispondere ai numeri qui salvati";
|
||||
warning_box(str);
|
||||
|
||||
TSheet_field& ss = sfield(F_RIGHE);
|
||||
@ -803,6 +825,7 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
|
||||
row.add(qta, ss.cid2index(o.dlg()));
|
||||
//ss.force_update(rigasel);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DLG_PLANNING:
|
||||
//se viene premuto il bottone "Giri", lancia lv0500 (generatore automatico dei giri)
|
||||
|
@ -54,6 +54,8 @@
|
||||
#define F_REDDI 247
|
||||
|
||||
#define F_RAGGCGRUP 252
|
||||
#define F_COMMENTI 253
|
||||
#define F_GIOCHI 254
|
||||
|
||||
// Campi del dettalio sotto lo spreadsheet
|
||||
|
||||
|
@ -134,7 +134,7 @@ BEGIN
|
||||
ITEM "Dot.\nOd.@5"
|
||||
ITEM "Cons.\nmese@5"
|
||||
ITEM "Cons.\nanno@5"
|
||||
ITEM "Tipo\nForfait@22"
|
||||
ITEM "Tipo\nForfait@25"
|
||||
ITEM "Prezzo\nRinnovo@8"
|
||||
ITEM "Sconto %@5"
|
||||
ITEM "Dot.\nTemp.@5"
|
||||
@ -196,7 +196,7 @@ BEGIN
|
||||
ITEM "1|Conguaglio alla confezione"
|
||||
END
|
||||
|
||||
LISTBOX F_TIPOFORF 1 20
|
||||
LISTBOX F_TIPOFORF 1 25
|
||||
BEGIN
|
||||
PROMPT 1 -7 "Forfait "
|
||||
ITEM "0|Nessuno"
|
||||
@ -209,7 +209,7 @@ BEGIN
|
||||
MESSAGE SHOW,F_NOLCIC|SHOW,F_IMPFISART|DISABLE,F_IMPFISART|DISABLE,3@|SHOW,F_MINCIC|HIDE,F_PREZNOL
|
||||
ITEM "4|% sul val. convenz."
|
||||
MESSAGE SHOW,F_NOLCIC|SHOW,F_IMPFISART|DISABLE,F_IMPFISART|ENABLE,3@|HIDE,F_MINCIC|HIDE,F_PREZNOL
|
||||
ITEM "5|Fisso su dot. iniz."
|
||||
ITEM "5|Fisso su dot. iniziale"
|
||||
MESSAGE HIDE,1@|SHOW,F_IMPFISART|ENABLE,F_IMPFISART|DISABLE,3@|HIDE,F_MINCIC|HIDE,F_PREZNOL
|
||||
END
|
||||
|
||||
@ -635,6 +635,30 @@ END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Dati Testata - Commenti" 0 2 0 0
|
||||
|
||||
MEMO F_COMMENTI 50 16
|
||||
BEGIN
|
||||
PROMPT 2 1 "Commenti"
|
||||
FIELD COMMENTI
|
||||
END
|
||||
|
||||
LISTBOX F_GIOCHI 1 9
|
||||
BEGIN
|
||||
PROMPT 2 18 "Giorno di chiusura "
|
||||
ITEM "0|Nessuno"
|
||||
ITEM "1|Lunedì"
|
||||
ITEM "2|Martedì"
|
||||
ITEM "3|Mercoledì"
|
||||
ITEM "4|Giovedì"
|
||||
ITEM "5|Venerdì"
|
||||
ITEM "6|Sabato"
|
||||
ITEM "7|Domenica"
|
||||
FIELD GIOCHI
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
TOOLBAR "" 0 0 0 2
|
||||
@ -746,7 +770,7 @@ BEGIN
|
||||
PROMPT 1 6 "@bForfait/Prezzi"
|
||||
END
|
||||
|
||||
LISTBOX S_TIPOFORF 1 20
|
||||
LISTBOX S_TIPOFORF 1 25
|
||||
BEGIN
|
||||
PROMPT 2 7 "Tipo "
|
||||
ITEM "0|Nessuno"
|
||||
@ -759,7 +783,7 @@ BEGIN
|
||||
MESSAGE ENABLE,S_NOLCIC|DISABLE,S_VCARTCLI|DISABLE,S_IMPFISART|DISABLE,3@|ENABLE,S_MINCIC|ENABLE,2@|DISABLE,S_PREZNOL
|
||||
ITEM "4|% sul val. convenz."
|
||||
MESSAGE ENABLE,S_NOLCIC|ENABLE,S_VCARTCLI|DISABLE,S_IMPFISART|ENABLE,3@|DISABLE,S_MINCIC|DISABLE,2@|DISABLE,S_PREZNOL
|
||||
ITEM "5|Fisso su dot. iniz."
|
||||
ITEM "5|Fisso su dot. iniziale"
|
||||
MESSAGE DISABLE,1@|ENABLE,S_IMPFISART|DISABLE,3@|DISABLE,S_MINCIC|DISABLE,2@|DISABLE,S_PREZNOL
|
||||
FIELD TIPOFORF
|
||||
END
|
||||
|
@ -1,7 +1,9 @@
|
||||
//Definizione campi per maschera lv0400c
|
||||
//Stampa Contratti per Cliente
|
||||
/Stampa Contratti per Cliente
|
||||
#define F_CODCF 201
|
||||
#define F_RAGSOC 202
|
||||
#define F_CODCONT_DA 203
|
||||
#define F_CODCONT_A 204
|
||||
#define F_ANNOES 205
|
||||
|
||||
#include "lv0100c.h"
|
||||
|
113
lv/lv0400c.rep
113
lv/lv0400c.rep
@ -1,60 +1,82 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="lv0400c" orientation="1" lpi="6" command="lv0 -1 lv0400c">
|
||||
<report name="lv0400c" orientation="1" lpi="6" command="lv0 -1 lv0400c" class="lv0400c">
|
||||
<description>Stampa Contratto per Cliente</description>
|
||||
<font face="Courier New" size="8" />
|
||||
<section type="Head" pattern="1" />
|
||||
<section type="Head" level="1" pattern="1" />
|
||||
<section repeat="1" type="Head" level="2" width="119" height="21" page_break="1" pattern="1">
|
||||
<section repeat="1" type="Head" level="2" width="119" height="25" page_break="1" pattern="1">
|
||||
<groupby>CODCONT</groupby>
|
||||
<field x="32.5" type="Testo" width="50" pattern="1" text="STAMPA DETTAGLIATA CONTRATTO LAVANDERIA">
|
||||
<font face="Courier New" bold="1" size="9" />
|
||||
</field>
|
||||
<field border="2" x="1" y="2" type="Linea" height="23" pattern="1" />
|
||||
<field border="2" x="1" y="2" type="Linea" width="115" height="0" pattern="1" />
|
||||
<field border="2" x="1" y="2" type="Linea" height="19" pattern="1" />
|
||||
<field x="2" y="2" type="Testo" width="20" pattern="1" text="Contratto Base Nr.">
|
||||
<field x="2" y="2" type="Testo" width="12" pattern="1" text="Contratto Nr.">
|
||||
<font face="Courier New" bold="1" size="8" />
|
||||
</field>
|
||||
<field x="22" y="2" type="Numero" align="right" width="6" pattern="1">
|
||||
<field x="16" y="2" type="Numero" align="right" width="6" pattern="1">
|
||||
<source>168.CODCONT</source>
|
||||
</field>
|
||||
<field x="43.5" y="2" type="Testo" width="10" pattern="1" text="Cliente">
|
||||
<field x="23" y="2" type="Testo" width="10" pattern="1" text="Cliente">
|
||||
<font face="Courier New" bold="1" size="8" />
|
||||
</field>
|
||||
<field x="52" y="2" type="Numero" align="right" width="6" pattern="1">
|
||||
<field x="31.5" y="2" type="Numero" align="right" width="6" pattern="1">
|
||||
<source>CLIFO.CODCF</source>
|
||||
</field>
|
||||
<field x="59" y="2" type="Stringa" width="50" pattern="1">
|
||||
<field x="38.5" y="2" type="Stringa" width="50" pattern="1">
|
||||
<source>CLIFO.RAGSOC</source>
|
||||
</field>
|
||||
<field border="2" x="116" y="2" type="Linea" height="19" pattern="1" />
|
||||
<field border="2" x="116" y="2" type="Linea" height="23" pattern="1" />
|
||||
<field x="2" y="3" type="Testo" width="3" pattern="1" text="del">
|
||||
<font face="Courier New" bold="1" size="8" />
|
||||
</field>
|
||||
<field x="11" y="3" type="Data" width="12" pattern="1">
|
||||
<field x="10" y="3" type="Data" width="12" pattern="1">
|
||||
<source>168.DATAIN</source>
|
||||
</field>
|
||||
<field x="52" y="3" type="Stringa" width="35" pattern="1">
|
||||
<field x="31.5" y="3" type="Stringa" width="35" pattern="1">
|
||||
<source>CLIFO.INDCF</source>
|
||||
</field>
|
||||
<field x="88.5" y="3" type="Stringa" width="10" pattern="1">
|
||||
<field x="66.5" y="3" type="Stringa" width="10" pattern="1">
|
||||
<source>CLIFO.CIVCF</source>
|
||||
</field>
|
||||
<field x="76" y="3" type="Testo" width="5" pattern="1" text="Tel." />
|
||||
<field x="82.5" y="3" type="Stringa" width="4" pattern="1">
|
||||
<source>CLIFO.PTEL</source>
|
||||
</field>
|
||||
<field x="87.5" y="3" type="Stringa" width="15" pattern="1">
|
||||
<source>CLIFO.TEL</source>
|
||||
</field>
|
||||
<field x="2" y="4" type="Testo" width="10" pattern="1" text="Scadenza">
|
||||
<font face="Courier New" bold="1" size="8" />
|
||||
</field>
|
||||
<field x="11" y="4" type="Data" width="12" pattern="1">
|
||||
<field x="10" y="4" type="Data" width="12" pattern="1">
|
||||
<source>168.DATASC</source>
|
||||
</field>
|
||||
<field x="52" y="4" type="Stringa" width="6" pattern="1">
|
||||
<field x="31.5" y="4" type="Stringa" width="6" pattern="1">
|
||||
<source>CLIFO.CAPCF</source>
|
||||
</field>
|
||||
<field x="59" y="4" type="Stringa" width="35" pattern="1">
|
||||
<field x="38.5" y="4" type="Stringa" width="35" pattern="1">
|
||||
<source>CLIFO.LOCALITACF</source>
|
||||
</field>
|
||||
<field x="52" y="5" type="Testo" width="5" pattern="1" text="C.F." />
|
||||
<field x="57" y="5" type="Stringa" width="16" pattern="1">
|
||||
<field x="76" y="4" type="Testo" width="5" pattern="1" text="Fax" />
|
||||
<field x="82.5" y="4" type="Stringa" width="4" pattern="1">
|
||||
<source>CLIFO.PFAX</source>
|
||||
</field>
|
||||
<field x="87.5" y="4" type="Stringa" width="15" pattern="1">
|
||||
<source>CLIFO.FAX</source>
|
||||
</field>
|
||||
<field x="31.5" y="5" type="Testo" width="5" pattern="1" text="C.F." />
|
||||
<field x="35.5" y="5" type="Stringa" width="16" pattern="1">
|
||||
<source>CLIFO.COFI</source>
|
||||
</field>
|
||||
<field x="52.5" y="5" type="Testo" width="5" pattern="1" text="P.I." />
|
||||
<field x="56.5" y="5" type="Stringa" width="16" pattern="1">
|
||||
<source>CLIFO.PIVA</source>
|
||||
</field>
|
||||
<field x="76" y="5" type="Testo" width="6" pattern="1" text="E-mail" />
|
||||
<field x="82.5" y="5" type="Stringa" width="33" pattern="1">
|
||||
<source>CLIFO.DOCMAIL + " " + CLIFO.MAIL</source>
|
||||
</field>
|
||||
<field border="2" x="1" y="6" type="Linea" width="115" height="0" pattern="1" />
|
||||
<field x="2" y="6" type="Testo" width="14" pattern="1" text="Consegnare a">
|
||||
<font face="Courier New" bold="1" size="8" />
|
||||
@ -166,38 +188,34 @@
|
||||
<source>305@.S0</source>
|
||||
</field>
|
||||
<field border="2" x="1" y="17" type="Linea" width="115" height="0" pattern="1" />
|
||||
<field x="2" y="17" type="Testo" width="20" pattern="1" text="Causale di default">
|
||||
<field x="2" y="17" type="Testo" width="50" pattern="1" text="Note">
|
||||
<font face="Courier New" bold="1" size="8" />
|
||||
</field>
|
||||
<field x="2" y="18" type="Stringa" width="7" pattern="1" />
|
||||
<field x="10" y="18" type="Stringa" width="50" pattern="1" />
|
||||
<field border="2" x="1" y="19" type="Linea" width="115" height="0" pattern="1" />
|
||||
<field x="2" y="19" type="Testo" width="50" pattern="1" text="Commenti di Testata">
|
||||
<font face="Courier New" bold="1" size="8" />
|
||||
</field>
|
||||
<field x="2" y="20" type="Stringa" width="50" pattern="1">
|
||||
<field x="2" y="18" type="Stringa" width="113" height="7" pattern="1">
|
||||
<source>168.COMMENTI</source>
|
||||
</field>
|
||||
<field border="2" x="1" y="21" type="Linea" width="115" height="0" pattern="1" />
|
||||
<field border="2" x="1" y="25" type="Linea" width="115" height="0" pattern="1" />
|
||||
</section>
|
||||
<section type="Body" pattern="1" />
|
||||
<section type="Body" level="1" pattern="1" />
|
||||
<section type="Head" level="11" pattern="1">
|
||||
<font face="Courier New" bold="1" size="8" />
|
||||
<field border="2" x="1" type="Linea" pattern="1" />
|
||||
<field x="1" type="Stringa" pattern="1" />
|
||||
<field border="2" x="1" type="Linea" pattern="1" />
|
||||
<field x="2" type="Testo" width="17" pattern="1" text="Articolo" />
|
||||
<field border="2" x="23" type="Linea" pattern="1" />
|
||||
<field x="24" type="Stringa" pattern="1" />
|
||||
<field x="24" type="Testo" width="50" pattern="1" text="Descrizione Articolo" />
|
||||
<field x="76" type="Testo" width="18" pattern="1" text="Prezzo" />
|
||||
<field x="96" type="Testo" width="3" pattern="1" text="UM" />
|
||||
<field x="101" type="Testo" width="15" pattern="1" text="Q.t&#E0; Contr." />
|
||||
<field border="2" x="1" y="1" type="Linea" width="115" height="0" pattern="1" />
|
||||
<field border="2" x="75" type="Linea" pattern="1" />
|
||||
<field border="2" x="95" type="Linea" pattern="1" />
|
||||
<field border="2" x="100" type="Linea" pattern="1" />
|
||||
<field x="76" type="Testo" width="18" pattern="1" text="Prezzo" />
|
||||
<field border="2" x="87" type="Linea" pattern="1" />
|
||||
<field x="88.5" type="Testo" width="3" pattern="1" text="UM" />
|
||||
<field border="2" x="92" type="Linea" pattern="1" />
|
||||
<field x="93" type="Testo" width="6" pattern="1" text="Dot.Od." />
|
||||
<field border="2" x="99" type="Linea" pattern="1" />
|
||||
<field x="100" type="Testo" width="6" pattern="1" text="Sconto" />
|
||||
<field border="2" x="116" type="Linea" pattern="1" />
|
||||
<field border="2" x="1" y="1" type="Linea" width="115" height="0" pattern="1" />
|
||||
</section>
|
||||
<section type="Body" level="11" width="115" height="1" pattern="1">
|
||||
<sql>USE 169
|
||||
@ -208,22 +226,26 @@ TO CODCF=#PARENT.CODCF CODCONT=#PARENT.CODCONT
|
||||
</sql>
|
||||
<field border="2" x="1" type="Linea" pattern="1" />
|
||||
<field border="2" x="1" type="Linea" pattern="1" />
|
||||
<field border="1" x="23" type="Linea" pattern="1" />
|
||||
<field border="2" x="23" type="Linea" pattern="1" />
|
||||
<field x="24" type="Stringa" width="50" pattern="1">
|
||||
<source>600@.DESCR</source>
|
||||
</field>
|
||||
<field border="1" x="75" type="Linea" pattern="1" />
|
||||
<field x="76" type="Numero" align="right" width="18" pattern="1" hide_zero="1">
|
||||
<field border="2" x="75" type="Linea" pattern="1" />
|
||||
<field x="75.5" type="Numero" align="right" width="10" pattern="1" hide_zero="1" text="######,@@@">
|
||||
<source>169.PREZZO</source>
|
||||
</field>
|
||||
<field border="1" x="95" type="Linea" pattern="1" />
|
||||
<field x="96" type="Stringa" width="3" pattern="1">
|
||||
<field border="2" x="87" type="Linea" pattern="1" />
|
||||
<field x="88" type="Stringa" width="3" pattern="1">
|
||||
<source>169.UM</source>
|
||||
</field>
|
||||
<field border="1" x="100" type="Linea" pattern="1" />
|
||||
<field x="101" type="Numero" align="right" width="14" pattern="1" hide_zero="1">
|
||||
<field border="2" x="92" type="Linea" pattern="1" />
|
||||
<field x="93" type="Numero" align="right" width="5" pattern="1" hide_zero="1">
|
||||
<source>#DOTOD</source>
|
||||
</field>
|
||||
<field border="2" x="99" type="Linea" pattern="1" />
|
||||
<field x="100" type="Stringa" width="15" pattern="1">
|
||||
<source>169.SCONTPERC</source>
|
||||
</field>
|
||||
<field border="2" x="116" type="Linea" pattern="1" />
|
||||
<field x="2" type="Stringa" width="20" id="600" pattern="1">
|
||||
<source>169.CODART</source>
|
||||
@ -231,10 +253,11 @@ TO CODCF=#PARENT.CODCF CODCONT=#PARENT.CODCONT
|
||||
</section>
|
||||
<section type="Foot" level="11" pattern="1">
|
||||
<field border="2" x="1" type="Linea" pattern="1" />
|
||||
<field border="1" x="23" type="Linea" pattern="1" />
|
||||
<field border="1" x="75" type="Linea" pattern="1" />
|
||||
<field border="1" x="95" type="Linea" pattern="1" />
|
||||
<field border="1" x="100" type="Linea" pattern="1" />
|
||||
<field border="2" x="23" type="Linea" pattern="1" />
|
||||
<field border="2" x="75" type="Linea" pattern="1" />
|
||||
<field border="2" x="87" type="Linea" pattern="1" />
|
||||
<field border="2" x="92" type="Linea" pattern="1" />
|
||||
<field border="2" x="99" type="Linea" pattern="1" />
|
||||
<field x="116" type="Stringa" pattern="1" />
|
||||
<field border="2" x="116" type="Linea" pattern="1" />
|
||||
<field border="2" x="1" y="1" type="Linea" width="115" height="0" pattern="1" />
|
||||
@ -342,13 +365,13 @@ TO CODCF=#PARENT.CODCF CODCONT=#PARENT.CODCONT
|
||||
<section type="Foot" level="2" pattern="1" />
|
||||
<sql>USE LVCONDV
|
||||
JOIN CLIFO INTO TIPOCF=="C" CODCF==CODCF
|
||||
JOIN 16 TO 168 ALIAS 200 INTO TIPOCF=="C" CODCF==CODCF CODIND==CODINDSP
|
||||
JOIN %CPG TO 20 ALIAS 201 INTO CODTAB==CODPAG
|
||||
JOIN %BAN TO 20 ALIAS 204 INTO CODTAB==CODABI+CODCAB
|
||||
JOIN %VAL TO 20 ALIAS 207 INTO CODTAB==CODVAL
|
||||
JOIN %CAU TO 168 ALIAS 208 INTO CODTAB==CAUSLAV
|
||||
JOIN 17 TO 168 ALIAS 300 INTO TIPOCF=="C" CODCF==CODCF
|
||||
JOIN 16 TO 17 ALIAS 301 INTO TIPOCF=="C" CODCF==CODCF CODIND==CODINDDOC
|
||||
JOIN 16 TO 17 ALIAS 200 INTO TIPOCF=="C" CODCF==CODCF CODIND==CODINDSP
|
||||
JOIN %POR TO 17 ALIAS 302 INTO CODTAB==CODPORTO
|
||||
JOIN %MSP TO 17 ALIAS 303 INTO CODTAB==CODSPMEZZO
|
||||
JOIN 122 TO 17 ALIAS 304 INTO CODAGE==CODAG
|
||||
|
@ -58,6 +58,7 @@ BEGIN
|
||||
OUTPUT F_CODCF CODCF
|
||||
OUTPUT F_CODCONT_DA CODCONT
|
||||
FLAGS "U"
|
||||
MESSAGE COPY,F_CODCONT_A
|
||||
FIELD #F_CODCONT_FROM
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
@ -90,6 +91,13 @@ BEGIN
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
STRING F_REPORT 20
|
||||
BEGIN
|
||||
PROMPT 2 -2 "Tipo di stampa "
|
||||
RSELECT "lv0400c"
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
|
@ -5,3 +5,6 @@
|
||||
#define F_ACODCF 203
|
||||
#define F_ARAGSOC 204
|
||||
#define F_ANNOES 207
|
||||
|
||||
#include "lv0100c.h"
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="lv0400f" orientation="1" lpi="6" command="lv0 -1 lv0400c">
|
||||
<report name="lv0400f" orientation="1" lpi="6" command="lv0 -1 lv0400f" class="lv0400f">
|
||||
<description>Stampa Contratto per Cliente</description>
|
||||
<font face="Courier New" size="8" />
|
||||
<section type="Head" pattern="1" />
|
||||
|
@ -81,6 +81,13 @@ BEGIN
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
STRING F_REPORT 20
|
||||
BEGIN
|
||||
PROMPT 2 -2 "Tipo di stampa "
|
||||
RSELECT "lv0400f"
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
|
48
lv/lv0400h.rep
Normal file
48
lv/lv0400h.rep
Normal file
@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="lv0400h" lpi="6">
|
||||
<description>Stampa conguagli diversi da zero</description>
|
||||
<font face="Courier New" size="10" />
|
||||
<section type="Head" pattern="1" />
|
||||
<section type="Head" level="1" pattern="1" />
|
||||
<section type="Head" level="2" pattern="1">
|
||||
<groupby>CODCF</groupby>
|
||||
<field type="Testo" width="10" pattern="1" text="Codice">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="11" type="Numero" width="6" pattern="1">
|
||||
<source>169.CODCF</source>
|
||||
</field>
|
||||
<field x="18" type="Stringa" width="50" pattern="1">
|
||||
<source>20.RAGSOC</source>
|
||||
</field>
|
||||
<field y="2.25" type="Testo" width="20" pattern="1" text="Codice articolo">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="21" y="2.25" type="Testo" width="50" pattern="1" text="Descrizione">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="72" y="2.25" type="Testo" align="right" width="15" pattern="1" text="Conguaglio">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
<source>169.QTACONG</source>
|
||||
</field>
|
||||
<field border="2" y="3.75" type="Linea" width="87" height="0" pattern="1" />
|
||||
</section>
|
||||
<section type="Body" pattern="1" />
|
||||
<section type="Body" level="1" pattern="1">
|
||||
<field type="Stringa" width="20" pattern="1">
|
||||
<source>169.CODART</source>
|
||||
</field>
|
||||
<field x="21" type="Stringa" width="50" pattern="1">
|
||||
<source>47.DESCR</source>
|
||||
</field>
|
||||
<field x="72" type="Numero" align="right" width="15" pattern="1" hide_zero="1">
|
||||
<source>169.QTACONG</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" pattern="1" />
|
||||
<section type="Foot" level="1" pattern="1" />
|
||||
<section type="Foot" level="2" height="2" pattern="1" />
|
||||
<sql>USE 169 SELECT QTACONG!=0
|
||||
JOIN 20 INTO TIPOCF=='C' CODCF==CODCF
|
||||
JOIN 47 INTO CODART==CODART</sql>
|
||||
</report>
|
12
lv/lv0400h.uml
Normal file
12
lv/lv0400h.uml
Normal file
@ -0,0 +1,12 @@
|
||||
// #include "lv0400h.h"
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
#include "printbar.h"
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Stampa Articoli con conguaglio" -1 -1 40 5
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
|
@ -13,3 +13,5 @@
|
||||
#define F_DESCAUS_DA 212
|
||||
#define F_CODCAUS_A 213
|
||||
#define F_DESCAUS_A 214
|
||||
#define F_ANNO_DA 215
|
||||
#define F_ANNO_A 216
|
@ -92,10 +92,11 @@
|
||||
<section type="Foot" level="2" pattern="1" />
|
||||
<section type="Foot" level="3" pattern="1" />
|
||||
<sql>USE 34
|
||||
SELECT ((BETWEEN(33.DATADOC,#F_DATA_FROM,#F_DATA_TO))(BETWEEN(33.CODCF,#F_CODCF_FROM,#F_CODCF_TO))(BETWEEN(CODART,#F_CODARTI_FROM,#F_CODARTI_TO))(BETWEEN(CODAGG1,#F_CODCAUSA_FROM,#F_CODCAUSA_TO)))
|
||||
SELECT BETWEEN(33.DATADOC,#F_DATA_FROM,#F_DATA_TO)STR(BETWEEN(33.CODCF,#F_CODCF_FROM,#F_CODCF_TO))BETWEEN(CODART,#F_CODARTI_FROM,#F_CODARTI_TO)BETWEEN(CODAGG1,#F_CODCAUSA_FROM,#F_CODCAUSA_TO)
|
||||
BY 33.CODCF 34.CODART 33.DATADOC
|
||||
JOIN 33 TO 34 ALIAS 1000 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC
|
||||
JOIN 20 TO 33 ALIAS 2000 INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||
JOIN 47 TO 34 ALIAS 3000 INTO CODART==CODART
|
||||
FROM CODNUM=="B05"</sql>
|
||||
FROM CODNUM="B05" ANNO=#ANNO_FROM
|
||||
TO CODNUM="B05" ANNO=#ANNO_TO</sql>
|
||||
</report>
|
@ -24,7 +24,7 @@ BEGIN
|
||||
DISPLAY "Partita IVA@11" PAIV
|
||||
OUTPUT F_CODCF_DA CODCF
|
||||
OUTPUT F_RAGSOC_DA RAGSOC
|
||||
CHECKTYPE SEARCH
|
||||
CHECKTYPE NORMAL
|
||||
FIELD #F_CODCF_FROM
|
||||
MESSAGE COPY,F_CODCF_A|CHECK,F_CODCF_A
|
||||
END
|
||||
@ -40,6 +40,7 @@ BEGIN
|
||||
DISPLAY "Partita IVA@11" PAIV
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY OUTPUT F_CODCF_DA
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
NUMBER F_CODCF_A 6
|
||||
@ -54,7 +55,7 @@ BEGIN
|
||||
DISPLAY "Partita IVA@11" PAIV
|
||||
OUTPUT F_CODCF_A CODCF
|
||||
OUTPUT F_RAGSOC_A RAGSOC
|
||||
CHECKTYPE SEARCH
|
||||
CHECKTYPE NORMAL
|
||||
FIELD #F_CODCF_TO
|
||||
END
|
||||
|
||||
@ -64,11 +65,10 @@ BEGIN
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "C"
|
||||
INPUT RAGSOC F_RAGSOC_A
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
DISPLAY "Partita IVA@11" PAIV
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY DISPLAY F_RAGSOC_DA
|
||||
OUTPUT F_CODCF_A CODCF
|
||||
OUTPUT F_RAGSOC_A RAGSOC
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 80 3
|
||||
@ -84,6 +84,15 @@ DATE F_DATA_DA
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
NUMBER F_ANNO_DA 4
|
||||
BEGIN
|
||||
PROMPT 30 6 ""
|
||||
FIELD ANNO_FROM
|
||||
DRIVENBY F_DATA_DA
|
||||
STR_CALC MID(#F_DATA_DA,7,10)
|
||||
FLAGS "DH"
|
||||
END
|
||||
|
||||
DATE F_DATA_A
|
||||
BEGIN
|
||||
PROMPT 40 6 "A Data "
|
||||
@ -94,6 +103,15 @@ DATE F_DATA_A
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING F_ANNO_A 4
|
||||
BEGIN
|
||||
PROMPT 60 6 ""
|
||||
FIELD ANNO_TO
|
||||
DRIVENBY F_DATA_A
|
||||
STR_CALC MID(#F_DATA_A,7,10)
|
||||
FLAGS "DH"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 80 4
|
||||
BEGIN
|
||||
PROMPT 1 8 "@bParametri Articolo"
|
||||
|
@ -221,7 +221,7 @@ MESSAGE RESET,F3.2000</prescript>
|
||||
</section>
|
||||
<sql>USE 34 KEY 2
|
||||
SELECT (BETWEEN(33.TIPODOC,#F_TIPODOC,#F_TIPODOC)(BETWEEN(33.CODCF,#F_CODCF,#F_CODCF))(BETWEEN(33.DATADOC,#F_DATADOC_DA,#F_DATADOC_A))(BETWEEN(34.CODAGG1,#F_CODAGG1,#F_CODAGG1)))
|
||||
BY 33,DATADOC
|
||||
BY 33.CODCF 34.CODART 33.DATADOC
|
||||
JOIN 33 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC
|
||||
JOIN 20 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||
JOIN 47 TO 34 INTO CODART==CODART
|
||||
|
@ -6,3 +6,5 @@
|
||||
#define F_DESCODNUM_1 204
|
||||
#define F_TIPODOC_1 205
|
||||
#define F_DESTIPODOC_1 206
|
||||
#define F_DA_ANNO_1 207
|
||||
#define F_A_ANNO_1 208
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="lv0800a" lpi="6">
|
||||
<description>Statistica per Mangano</description>
|
||||
<description>Stampa Statistica per Mangano</description>
|
||||
<font face="Courier New" size="10" />
|
||||
<section type="Head" height="9.5">
|
||||
<section type="Head" height="9.5" pattern="1">
|
||||
<field x="0.5" type="Testo" width="12" pattern="1" text="Data Elab.:" />
|
||||
<field x="11.5" type="Stringa" width="12" pattern="1">
|
||||
<prescript>MESSAGE _TODAY</prescript>
|
||||
@ -11,10 +11,10 @@
|
||||
<field x="76.5" type="Stringa" width="12" pattern="1">
|
||||
<prescript>MESSAGE _PAGENO</prescript>
|
||||
</field>
|
||||
<field x="21" y="1.25" type="Testo" width="60" height="2" pattern="1" text="Statistica per Mangano">
|
||||
<field x="21" y="1.25" type="Testo" width="60" height="2" pattern="1" text="Stampa Statistica per Mangano">
|
||||
<font face="Courier New" bold="1" size="14" />
|
||||
</field>
|
||||
<field border="2" y="3.25" type="Rettangolo" width="91" height="4.5" pattern="1" />
|
||||
<field border="2" y="3.25" type="Rettangolo" width="92" height="4.5" pattern="1" />
|
||||
<field x="0.5" y="3.75" type="Testo" width="12" pattern="1" text="Numerazione:">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
@ -49,9 +49,9 @@
|
||||
<field x="14" y="8.25" type="Testo" width="15" pattern="1" text="Descrizione" />
|
||||
<field x="57" y="8.25" type="Testo" align="right" width="5" pattern="1" text="Qt&#E0;" />
|
||||
<field x="63" y="8.25" type="Testo" align="right" width="10" pattern="1" text="Importo" />
|
||||
<field x="74" y="8.25" type="Testo" align="right" width="16" pattern="1" text="Peso" />
|
||||
<field x="76" y="8.25" type="Testo" align="right" width="16" pattern="1" text="Peso" />
|
||||
</section>
|
||||
<section type="Head" level="1">
|
||||
<section type="Head" level="1" pattern="1">
|
||||
<prescript description="H1 PRESCRIPT">MESSAGE RESET,F2.100
|
||||
MESSAGE RESET,F2.101
|
||||
MESSAGE RESET,F2.102
|
||||
@ -59,7 +59,7 @@ MESSAGE RESET,F1.100
|
||||
MESSAGE RESET,F1.101
|
||||
MESSAGE RESET,F1.102</prescript>
|
||||
</section>
|
||||
<section type="Head" level="2" height="1.5" page_break="1">
|
||||
<section type="Head" level="2" height="1.5" page_break="1" pattern="1">
|
||||
<groupby>47.MANGDEST</groupby>
|
||||
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2.100
|
||||
MESSAGE RESET,F2.101
|
||||
@ -70,8 +70,8 @@ MESSAGE RESET,F2.102</prescript>
|
||||
<source>47.MANGDEST</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Head" level="3">
|
||||
<groupby>47.CODART</groupby>
|
||||
<section type="Head" level="3" pattern="1">
|
||||
<groupby>47.MANGDEST+CODART</groupby>
|
||||
<prescript description="H3 PRESCRIPT">MESSAGE RESET,F3.100
|
||||
MESSAGE RESET,F3.101
|
||||
MESSAGE RESET,F3.102
|
||||
@ -79,9 +79,8 @@ MESSAGE RESET,F3.1
|
||||
MESSAGE RESET,F3.2
|
||||
</prescript>
|
||||
</section>
|
||||
<section type="Body" />
|
||||
<section type="Body" level="1" hidden="1">
|
||||
<condition>#F_TOT!='X'</condition>
|
||||
<section type="Body" pattern="1" />
|
||||
<section type="Body" level="1" hidden="1" pattern="1">
|
||||
<field type="Stringa" width="20" pattern="1">
|
||||
<source>47.CODART</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.1</prescript>
|
||||
@ -90,36 +89,36 @@ MESSAGE RESET,F3.2
|
||||
<source>47.DESCR</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.2</prescript>
|
||||
</field>
|
||||
<field x="57" type="Numero" align="right" width="5" pattern="1">
|
||||
<field x="57" type="Numero" align="right" width="5" pattern="1" text="#####">
|
||||
<source>34.QTA</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.100</prescript>
|
||||
</field>
|
||||
<field x="63" type="Numero" align="right" width="13" pattern="1">
|
||||
<field x="63" type="Numero" align="right" width="13" pattern="1" text="##.###.###,@@">
|
||||
<source>34.QTA * 34.PREZZO</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.101</prescript>
|
||||
</field>
|
||||
<field x="77" type="Numero" align="right" width="13" pattern="1">
|
||||
<field x="79" type="Numero" align="right" width="13" pattern="1" text="##.###.###,@@">
|
||||
<source>34.QTA * 47.PESO</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.102</prescript>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" />
|
||||
<section type="Foot" level="1">
|
||||
<field border="2" y="0.5" type="Rettangolo" width="91" height="2.5" pattern="1" />
|
||||
<section type="Foot" pattern="1" />
|
||||
<section type="Foot" level="1" pattern="1">
|
||||
<field border="2" y="0.5" type="Rettangolo" width="92" height="2.5" pattern="1" />
|
||||
<field x="16" y="1.25" type="Testo" width="22" pattern="1" text="Totale Statistica: ">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="57" y="1.25" type="Numero" align="right" width="5" id="100" pattern="1">
|
||||
<field x="55" y="1.25" type="Numero" align="right" width="7" id="100" pattern="1" text="#######">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="63" y="1.25" type="Numero" align="right" width="13" id="101" pattern="1">
|
||||
<field x="62" y="1.25" type="Numero" align="right" width="14" id="101" pattern="1" text="###.###.###,@@">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="77" y="1.25" type="Numero" align="right" width="13" id="102" pattern="1">
|
||||
<field x="77" y="1.25" type="Numero" align="right" width="15" id="102" pattern="1" text="####.###.###,@@">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" level="2">
|
||||
<section type="Foot" level="2" pattern="1">
|
||||
<field x="15" y="0.5" type="Testo" width="22" pattern="1" text="Totale per Mangano: ">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
@ -127,34 +126,35 @@ MESSAGE RESET,F3.2
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
<prescript description="F2.100 PRESCRIPT">MESSAGE ADD,F1.100</prescript>
|
||||
</field>
|
||||
<field x="63" y="0.5" type="Numero" align="right" width="13" id="101" pattern="1">
|
||||
<field x="63" y="0.5" type="Numero" align="right" width="13" id="101" pattern="1" text="##.###.###,@@">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
<prescript description="F2.101 PRESCRIPT">MESSAGE ADD,F1.101</prescript>
|
||||
</field>
|
||||
<field x="77" y="0.5" type="Numero" align="right" width="13" id="102" pattern="1">
|
||||
<field x="79" y="0.5" type="Numero" align="right" width="13" id="102" pattern="1" text="##.###.###,@@">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
<prescript description="F2.102 PRESCRIPT">MESSAGE ADD,F1.102</prescript>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" level="3">
|
||||
<section type="Foot" level="3" pattern="1">
|
||||
<field type="Stringa" width="20" id="1" pattern="1" />
|
||||
<field x="14" type="Stringa" width="42" id="2" pattern="1" />
|
||||
<field x="57" type="Numero" align="right" width="5" id="100" pattern="1">
|
||||
<prescript description="F3.100 PRESCRIPT">MESSAGE ADD,F2.100</prescript>
|
||||
</field>
|
||||
<field x="63" type="Numero" align="right" width="13" id="101" pattern="1">
|
||||
<field x="63" type="Numero" align="right" width="13" id="101" pattern="1" text="##.###.###,@@">
|
||||
<prescript description="F3.101 PRESCRIPT">MESSAGE ADD,F2.101</prescript>
|
||||
</field>
|
||||
<field x="77" type="Numero" align="right" width="13" id="102" pattern="1">
|
||||
<field x="79" type="Numero" align="right" width="13" id="102" pattern="1" text="##.###.###,@@">
|
||||
<prescript description="F3.102 PRESCRIPT">MESSAGE ADD,F2.102</prescript>
|
||||
</field>
|
||||
</section>
|
||||
<sql>USE 34 KEY 2
|
||||
SELECT (BETWEEN(33.TIPODOC,#F_TIPODOC,#F_TIPODOC)(BETWEEN(33.DATADOC,#F_DATADOC_DA,#F_DATADOC_A))(CODART!=''))
|
||||
SELECT ((#F_TIPODOC=="")||(33.TIPODOC==#F_TIPODOC))BETWEEN(33.DATADOC,#F_DATADOC_DA,#F_DATADOC_A)(34.CODART!="")(33.PROVV=="D")
|
||||
BY 47.MANGDEST CODART
|
||||
JOIN 33 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC
|
||||
JOIN 47 TO 34 INTO CODART==CODART
|
||||
FROM CODNUM=#F_CODNUM
|
||||
TO CODNUM=#F_CODNUM
|
||||
FROM CODNUM=#F_CODNUM ANNO=#F_DA_ANNO PROVV='D'
|
||||
TO CODNUM=#F_CODNUM ANNO=#F_A_ANNO PROVV='D'
|
||||
|
||||
</sql>
|
||||
</report>
|
@ -4,7 +4,7 @@ TOOLBAR "topbar" 0 0 0 2
|
||||
#include "printbar.h"
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Statistica per Lavatrice" -1 -1 40 5
|
||||
PAGE "Stampa Statistica per Mangano" -1 -1 40 5
|
||||
|
||||
GROUPBOX DLG_NULL 85 8
|
||||
BEGIN
|
||||
@ -19,6 +19,16 @@ BEGIN
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
NUMBER F_DA_ANNO_1 4
|
||||
BEGIN
|
||||
PROMP 2 4 "Da Anno "
|
||||
NUM_CALC LEFT(#F_DATADOC_DA_1,4)
|
||||
DRIVENBY F_DATADOC_DA_1
|
||||
FIELD #F_DA_ANNO
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
DATE F_DATADOC_A_1
|
||||
BEGIN
|
||||
PROMP 40 3 "A Data "
|
||||
@ -29,6 +39,16 @@ BEGIN
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
NUMBER F_A_ANNO_1 4
|
||||
BEGIN
|
||||
PROMP 40 4 "A Anno "
|
||||
FIELD #F_A_ANNO
|
||||
NUM_CALC LEFT(#F_DATADOC_A_1,4)
|
||||
DRIVENBY F_DATADOC_A_1
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
STRING F_CODNUM_1 4
|
||||
BEGIN
|
||||
PROMPT 2 5 "Numerazione "
|
||||
@ -68,6 +88,7 @@ BEGIN
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_TIPODOC_1 CODTAB
|
||||
OUTPUT F_DESTIPODOC_1 S0
|
||||
CHECKTYPE NORMAL
|
||||
FLAGS "UPA"
|
||||
FIELD #F_TIPODOC
|
||||
END
|
||||
|
@ -6,3 +6,5 @@
|
||||
#define F_DESCODNUM_1 204
|
||||
#define F_TIPODOC_1 205
|
||||
#define F_DESTIPODOC_1 206
|
||||
#define F_DA_ANNO_1 207
|
||||
#define F_A_ANNO_1 208
|
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="lv0900a" lpi="6">
|
||||
<description>Statistica per Lavatrice</description>
|
||||
<description>Stampa Statistica per Lavatrice</description>
|
||||
<font face="Courier New" size="10" />
|
||||
<section type="Head" height="9.5">
|
||||
<section type="Head" height="9.5" pattern="1">
|
||||
<field x="0.5" type="Testo" width="12" pattern="1" text="Data Elab.:" />
|
||||
<field x="11.5" type="Stringa" width="12" pattern="1">
|
||||
<prescript>MESSAGE _TODAY</prescript>
|
||||
@ -11,10 +11,10 @@
|
||||
<field x="76.5" type="Stringa" width="12" pattern="1">
|
||||
<prescript>MESSAGE _PAGENO</prescript>
|
||||
</field>
|
||||
<field x="21" y="1.25" type="Testo" width="60" height="2" pattern="1" text="Statistica per Lavatrice">
|
||||
<field x="21" y="1.25" type="Testo" width="60" height="2" pattern="1" text="Stampa Statistica per Lavatrice">
|
||||
<font face="Courier New" bold="1" size="14" />
|
||||
</field>
|
||||
<field border="2" y="3.25" type="Rettangolo" width="91" height="4.5" pattern="1" />
|
||||
<field border="2" y="3.25" type="Rettangolo" width="92" height="4.5" pattern="1" />
|
||||
<field x="0.5" y="3.75" type="Testo" width="12" pattern="1" text="Numerazione:">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
@ -49,9 +49,9 @@
|
||||
<field x="14" y="8.25" type="Testo" width="15" pattern="1" text="Descrizione" />
|
||||
<field x="57" y="8.25" type="Testo" align="right" width="5" pattern="1" text="Qt&#E0;" />
|
||||
<field x="63" y="8.25" type="Testo" align="right" width="10" pattern="1" text="Importo" />
|
||||
<field x="74" y="8.25" type="Testo" align="right" width="16" pattern="1" text="Peso" />
|
||||
<field x="76" y="8.25" type="Testo" align="right" width="16" pattern="1" text="Peso" />
|
||||
</section>
|
||||
<section type="Head" level="1">
|
||||
<section type="Head" level="1" pattern="1">
|
||||
<prescript description="H1 PRESCRIPT">MESSAGE RESET,F2.100
|
||||
MESSAGE RESET,F2.101
|
||||
MESSAGE RESET,F2.102
|
||||
@ -59,7 +59,7 @@ MESSAGE RESET,F1.100
|
||||
MESSAGE RESET,F1.101
|
||||
MESSAGE RESET,F1.102</prescript>
|
||||
</section>
|
||||
<section type="Head" level="2" height="1.5" page_break="1">
|
||||
<section type="Head" level="2" height="1.5" page_break="1" pattern="1">
|
||||
<groupby>47.LAVATRICE</groupby>
|
||||
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2.100
|
||||
MESSAGE RESET,F2.101
|
||||
@ -70,7 +70,7 @@ MESSAGE RESET,F2.102</prescript>
|
||||
<source>47.LAVATRICE</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Head" level="3">
|
||||
<section type="Head" level="3" pattern="1">
|
||||
<groupby>47.CODART</groupby>
|
||||
<prescript description="H3 PRESCRIPT">MESSAGE RESET,F3.100
|
||||
MESSAGE RESET,F3.101
|
||||
@ -79,9 +79,8 @@ MESSAGE RESET,F3.1
|
||||
MESSAGE RESET,F3.2
|
||||
</prescript>
|
||||
</section>
|
||||
<section type="Body" />
|
||||
<section type="Body" level="1" hidden="1">
|
||||
<condition>#F_TOT!='X'</condition>
|
||||
<section type="Body" pattern="1" />
|
||||
<section type="Body" level="1" hidden="1" pattern="1">
|
||||
<field type="Stringa" width="20" pattern="1">
|
||||
<source>47.CODART</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.1</prescript>
|
||||
@ -90,71 +89,72 @@ MESSAGE RESET,F3.2
|
||||
<source>47.DESCR</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.2</prescript>
|
||||
</field>
|
||||
<field x="57" type="Numero" align="right" width="5" pattern="1">
|
||||
<field x="56" type="Numero" align="right" width="6" pattern="1" text="######">
|
||||
<source>34.QTA</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.100</prescript>
|
||||
</field>
|
||||
<field x="63" type="Numero" align="right" width="13" pattern="1">
|
||||
<field x="63" type="Numero" align="right" width="13" pattern="1" text="##.###.###,@@">
|
||||
<source>34.QTA * 34.PREZZO</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.101</prescript>
|
||||
</field>
|
||||
<field x="77" type="Numero" align="right" width="13" pattern="1">
|
||||
<field x="79" type="Numero" align="right" width="13" pattern="1" text="##.###.###,@@">
|
||||
<source>34.QTA * 47.PESO</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.102</prescript>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" />
|
||||
<section type="Foot" level="1">
|
||||
<field border="2" y="0.5" type="Rettangolo" width="91" height="2.5" pattern="1" />
|
||||
<section type="Foot" pattern="1" />
|
||||
<section type="Foot" level="1" pattern="1">
|
||||
<field border="2" y="0.5" type="Rettangolo" width="92" height="2.5" pattern="1" />
|
||||
<field x="16" y="1.25" type="Testo" width="22" pattern="1" text="Totale Statistica: ">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="57" y="1.25" type="Numero" align="right" width="5" id="100" pattern="1">
|
||||
<field x="55" y="1.25" type="Numero" align="right" width="7" id="100" pattern="1" text="#######">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="63" y="1.25" type="Numero" align="right" width="13" id="101" pattern="1">
|
||||
<field x="62" y="1.25" type="Numero" align="right" width="14" id="101" pattern="1" text="###.###.###,@@">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="77" y="1.25" type="Numero" align="right" width="13" id="102" pattern="1">
|
||||
<field x="77" y="1.25" type="Numero" align="right" width="15" id="102" pattern="1" text="####.###.###,@@">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" level="2">
|
||||
<section type="Foot" level="2" pattern="1">
|
||||
<field x="15" y="0.5" type="Testo" width="22" pattern="1" text="Totale per Lavatrice: ">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="57" y="0.5" type="Numero" align="right" width="5" id="100" pattern="1">
|
||||
<field x="56" y="0.5" type="Numero" align="right" width="6" id="100" pattern="1">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
<prescript description="F2.100 PRESCRIPT">MESSAGE ADD,F1.100</prescript>
|
||||
</field>
|
||||
<field x="63" y="0.5" type="Numero" align="right" width="13" id="101" pattern="1">
|
||||
<field x="63" y="0.5" type="Numero" align="right" width="13" id="101" pattern="1" text="##.###.###,@@">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
<prescript description="F2.101 PRESCRIPT">MESSAGE ADD,F1.101</prescript>
|
||||
</field>
|
||||
<field x="77" y="0.5" type="Numero" align="right" width="13" id="102" pattern="1">
|
||||
<field x="79" y="0.5" type="Numero" align="right" width="13" id="102" pattern="1" text="##.###.###,@@">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
<prescript description="F2.102 PRESCRIPT">MESSAGE ADD,F1.102</prescript>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" level="3">
|
||||
<section type="Foot" level="3" pattern="1">
|
||||
<field type="Stringa" width="20" id="1" pattern="1" />
|
||||
<field x="14" type="Stringa" width="42" id="2" pattern="1" />
|
||||
<field x="57" type="Numero" align="right" width="5" id="100" pattern="1">
|
||||
<field x="56" type="Numero" align="right" width="6" id="100" pattern="1" text="######">
|
||||
<prescript description="F3.100 PRESCRIPT">MESSAGE ADD,F2.100</prescript>
|
||||
</field>
|
||||
<field x="63" type="Numero" align="right" width="13" id="101" pattern="1">
|
||||
<field x="63" type="Numero" align="right" width="13" id="101" pattern="1" text="##.###.###,@@">
|
||||
<prescript description="F3.101 PRESCRIPT">MESSAGE ADD,F2.101</prescript>
|
||||
</field>
|
||||
<field x="77" type="Numero" align="right" width="13" id="102" pattern="1">
|
||||
<field x="79" type="Numero" align="right" width="13" id="102" pattern="1" text="##.###.###,@@">
|
||||
<prescript description="F3.102 PRESCRIPT">MESSAGE ADD,F2.102</prescript>
|
||||
</field>
|
||||
</section>
|
||||
<sql>USE 34 KEY 2
|
||||
SELECT (BETWEEN(33.TIPODOC,#F_TIPODOC,#F_TIPODOC)(BETWEEN(33.DATADOC,#F_DATADOC_DA,#F_DATADOC_A))(CODART!=''))
|
||||
SELECT ((#F_TIPODOC!="")||(33.TIPODOC==#F_TIPODOC))BETWEEN(33.DATADOC,#F_DATADOC_DA,#F_DATADOC_A)(34.CODART!="")(33.PROVV=="D")
|
||||
BY 47.LAVATRICE CODART
|
||||
JOIN 33 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC
|
||||
JOIN 47 TO 34 INTO CODART==CODART
|
||||
FROM CODNUM=#F_CODNUM
|
||||
TO CODNUM=#F_CODNUM
|
||||
FROM CODNUM=#F_CODNUM ANNO=#F_DA_ANNO PROVV='D'
|
||||
TO CODNUM=#F_CODNUM ANNO=#F_A_ANNO PROVV='D'
|
||||
|
||||
</sql>
|
||||
</report>
|
@ -4,7 +4,7 @@ TOOLBAR "topbar" 0 0 0 2
|
||||
#include "printbar.h"
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Statistica per Lavatrice" -1 -1 40 5
|
||||
PAGE "Stampa Statistica per Lavatrice." -1 -1 40 5
|
||||
|
||||
GROUPBOX DLG_NULL 85 8
|
||||
BEGIN
|
||||
@ -19,6 +19,16 @@ BEGIN
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
NUMBER F_DA_ANNO_1 4
|
||||
BEGIN
|
||||
PROMP 2 4 "Da Anno "
|
||||
NUM_CALC LEFT(#F_DATADOC_DA_1,4)
|
||||
DRIVENBY F_DATADOC_DA_1
|
||||
FIELD #F_DA_ANNO
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
DATE F_DATADOC_A_1
|
||||
BEGIN
|
||||
PROMP 40 3 "A Data "
|
||||
@ -29,6 +39,16 @@ BEGIN
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
NUMBER F_A_ANNO_1 4
|
||||
BEGIN
|
||||
PROMP 40 4 "A Anno "
|
||||
FIELD #F_A_ANNO
|
||||
NUM_CALC LEFT(#F_DATADOC_A_1,4)
|
||||
DRIVENBY F_DATADOC_A_1
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
STRING F_CODNUM_1 4
|
||||
BEGIN
|
||||
PROMPT 2 5 "Numerazione "
|
||||
|
80
lv/lv0a00a.rep
Normal file
80
lv/lv0a00a.rep
Normal file
@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="lv0a00a" lpi="6">
|
||||
<description>Stampa prezzo medio da bolla</description>
|
||||
<font face="Courier New" size="10" />
|
||||
<section type="Head" pattern="1">
|
||||
<field x="24" type="Testo" align="center" width="55" height="2" pattern="1" text="Stampa prezzo medio da bolla">
|
||||
<font face="Courier New" bold="1" size="14" />
|
||||
</field>
|
||||
<field x="0.5" y="0.5" type="Testo" width="12" height="1.5" pattern="1" text="Data elab. :" />
|
||||
<field x="13" y="0.5" type="Stringa" width="12" height="1.5" pattern="1">
|
||||
<prescript>MESSAGE _TODAY</prescript>
|
||||
</field>
|
||||
<field x="79" y="0.5" type="Testo" width="5" height="1.5" pattern="1" text="Pag." />
|
||||
<field x="84.13" y="0.5" type="Stringa" width="10" height="1.5" pattern="1">
|
||||
<prescript>MESSAGE _PAGENO</prescript>
|
||||
</field>
|
||||
<field x="29.5" y="1.5" type="Testo" width="4" height="1.5" pattern="1" text="Dal" />
|
||||
<field x="34.5" y="1.5" type="Data" width="12" height="1.5" pattern="1">
|
||||
<source>#DADATA</source>
|
||||
</field>
|
||||
<field x="56.5" y="1.5" type="Testo" width="4" height="1.5" pattern="1" text="Al" />
|
||||
<field x="61.5" y="1.5" type="Data" width="12" height="1.5" pattern="1">
|
||||
<source>#ADATA</source>
|
||||
</field>
|
||||
<field y="3" type="Testo" width="20" pattern="1" text="Codice" />
|
||||
<field x="20" y="3" type="Testo" width="35" pattern="1" text="Descrizione articolo" />
|
||||
<field border="2" y="4" type="Linea" width="95" height="0" pattern="1" />
|
||||
<field x="55" y="3" type="Testo" align="right" width="10" id="101" pattern="1" text="Quantit&#E0;" />
|
||||
<field x="69" y="3" type="Testo" align="right" width="10" id="102" pattern="1" text="Valore" />
|
||||
<field x="80" y="3" type="Testo" align="right" width="15" id="102" pattern="1" text="Prezzo medio" />
|
||||
</section>
|
||||
<section type="Head" level="1" pattern="1">
|
||||
<prescript description="H3 PRESCRIPT">0 #F3.101 !
|
||||
0 #F1.102 !
|
||||
0 #F1.103 !
|
||||
</prescript>
|
||||
</section>
|
||||
<section type="Body" pattern="1" />
|
||||
<section type="Body" level="1" pattern="1">
|
||||
<field x="61" type="Numero" align="right" width="10" id="101" pattern="1">
|
||||
<source>QTA</source>
|
||||
<postscript description="B1.101 POSTSCRIPT">MESSAGE ADD,F1.101</postscript>
|
||||
</field>
|
||||
<field x="70" type="Valuta" align="right" width="10" id="102" pattern="1" text="#########,@@">
|
||||
<source>VALORE</source>
|
||||
<postscript description="B1.102 POSTSCRIPT">MESSAGE ADD,F1.102</postscript>
|
||||
</field>
|
||||
<field x="80" type="Prezzo" align="right" width="12" id="103" pattern="1" text="#########,@@">
|
||||
<source>#102F;#101</source>
|
||||
<prescript>MESSAGE ADD,F2.103
|
||||
</prescript>
|
||||
</field>
|
||||
<field type="Stringa" width="20" id="201" pattern="1">
|
||||
<source>CODART</source>
|
||||
</field>
|
||||
<field x="21" type="Stringa" dynamic_height="1" width="40" height="2" id="202" pattern="1">
|
||||
<source>ANAMAG.DESCR</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" pattern="1" />
|
||||
<section type="Foot" level="1" pattern="1">
|
||||
<field border="2" y="0.25" type="Linea" width="95" height="0" pattern="1" />
|
||||
<field x="59" y="1" type="Numero" align="right" width="10" id="101" pattern="1">
|
||||
<postscript description="F1.101 POSTSCRIPT">MESSAGE ADD,F2.101</postscript>
|
||||
</field>
|
||||
<field x="70" y="1" type="Valuta" align="right" width="12" id="102" pattern="1" text="#########,@@">
|
||||
<postscript description="F1.102 POSTSCRIPT">MESSAGE ADD,F2.102</postscript>
|
||||
</field>
|
||||
<field x="83" y="1" type="Prezzo" align="right" width="12" id="103" pattern="1" text="#########,@@">
|
||||
<source>#102F;#101</source>
|
||||
<prescript description="F1.103 PRESCRIPT">MESSAGE ADD,F2.103
|
||||
</prescript>
|
||||
</field>
|
||||
<field x="50" y="1" type="Testo" width="6" id="202" pattern="1" text="Totali" />
|
||||
</section>
|
||||
<sql>USE RDOC
|
||||
JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC</sql>
|
||||
<prescript description="PRESCRIPT">0 #DADATA !
|
||||
0 #ADATA !</prescript>
|
||||
</report>
|
80
lv/lv0a00b.rep
Normal file
80
lv/lv0a00b.rep
Normal file
@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="lv0a00b" lpi="6">
|
||||
<description>Stampa prezzo medio da fattura</description>
|
||||
<font face="Courier New" size="10" />
|
||||
<section type="Head" pattern="1">
|
||||
<field x="24" type="Testo" align="center" width="55" height="2" pattern="1" text="Stampa prezzo medio da fattura">
|
||||
<font face="Courier New" bold="1" size="14" />
|
||||
</field>
|
||||
<field x="0.5" y="0.5" type="Testo" width="12" height="1.5" pattern="1" text="Data elab. :" />
|
||||
<field x="13" y="0.5" type="Stringa" width="12" height="1.5" pattern="1">
|
||||
<prescript>MESSAGE _TODAY</prescript>
|
||||
</field>
|
||||
<field x="79" y="0.5" type="Testo" width="5" height="1.5" pattern="1" text="Pag." />
|
||||
<field x="84.13" y="0.5" type="Stringa" width="10" height="1.5" pattern="1">
|
||||
<prescript>MESSAGE _PAGENO</prescript>
|
||||
</field>
|
||||
<field x="29.5" y="1.5" type="Testo" width="4" height="1.5" pattern="1" text="Dal" />
|
||||
<field x="34.5" y="1.5" type="Data" width="12" height="1.5" pattern="1">
|
||||
<source>#DADATA</source>
|
||||
</field>
|
||||
<field x="56.5" y="1.5" type="Testo" width="4" height="1.5" pattern="1" text="Al" />
|
||||
<field x="61.5" y="1.5" type="Data" width="12" height="1.5" pattern="1">
|
||||
<source>#ADATA</source>
|
||||
</field>
|
||||
<field y="3" type="Testo" width="20" pattern="1" text="Codice" />
|
||||
<field x="20" y="3" type="Testo" width="35" pattern="1" text="Descrizione articolo" />
|
||||
<field border="2" y="4" type="Linea" width="95" height="0" pattern="1" />
|
||||
<field x="59" y="3" type="Testo" align="right" width="10" id="101" pattern="1" text="Quantit&#E0;" />
|
||||
<field x="70" y="3" type="Testo" align="right" width="12" id="102" pattern="1" text="Valore" />
|
||||
<field x="83" y="3" type="Testo" align="right" width="12" id="102" pattern="1" text="Prezzo medio" />
|
||||
</section>
|
||||
<section type="Head" level="1" pattern="1">
|
||||
<prescript description="H3 PRESCRIPT">0 #F3.101 !
|
||||
0 #F1.102 !
|
||||
0 #F1.103 !
|
||||
</prescript>
|
||||
</section>
|
||||
<section type="Body" pattern="1" />
|
||||
<section type="Body" level="1" pattern="1">
|
||||
<field x="59" type="Numero" align="right" width="10" id="101" pattern="1">
|
||||
<source>QTA</source>
|
||||
<postscript description="B1.101 POSTSCRIPT">MESSAGE ADD,F1.101</postscript>
|
||||
</field>
|
||||
<field x="70" type="Valuta" align="right" width="12" id="102" pattern="1" text="#########,@@">
|
||||
<source>VALORE</source>
|
||||
<postscript description="B1.102 POSTSCRIPT">MESSAGE ADD,F1.102</postscript>
|
||||
</field>
|
||||
<field x="83" type="Prezzo" align="right" width="12" id="103" pattern="1" text="#########,@@">
|
||||
<source>#102F;#101</source>
|
||||
<prescript description="B1.103 PRESCRIPT">MESSAGE ADD,F2.103
|
||||
</prescript>
|
||||
</field>
|
||||
<field type="Stringa" width="20" id="201" pattern="1">
|
||||
<source>CODART</source>
|
||||
</field>
|
||||
<field x="21" type="Stringa" dynamic_height="1" width="35" height="2" id="202" pattern="1">
|
||||
<source>ANAMAG.DESCR</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" pattern="1" />
|
||||
<section type="Foot" level="1" pattern="1">
|
||||
<field border="2" y="0.5" type="Linea" width="95" height="0" pattern="1" />
|
||||
<field x="59" y="1.25" type="Numero" align="right" width="10" id="101" pattern="1">
|
||||
<postscript description="F1.101 POSTSCRIPT">MESSAGE ADD,F2.101</postscript>
|
||||
</field>
|
||||
<field x="70" y="1.25" type="Valuta" align="right" width="12" id="102" pattern="1" text="#########,@@">
|
||||
<postscript description="F1.102 POSTSCRIPT">MESSAGE ADD,F2.102</postscript>
|
||||
</field>
|
||||
<field x="83" y="1.25" type="Prezzo" align="right" width="12" id="103" pattern="1" text="#########,@@">
|
||||
<source>#102F;#101</source>
|
||||
<prescript description="F1.103 PRESCRIPT">MESSAGE ADD,F2.103
|
||||
</prescript>
|
||||
</field>
|
||||
<field x="50" y="1.25" type="Testo" width="6" id="202" pattern="1" text="Totali" />
|
||||
</section>
|
||||
<sql>USE RDOC
|
||||
JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC</sql>
|
||||
<prescript description="PRESCRIPT">0 #DADATA !
|
||||
0 #ADATA !</prescript>
|
||||
</report>
|
@ -60,7 +60,7 @@ protected:
|
||||
TDate cerca_ultima_consegna(long codcf, long codcont, const TDate& data) const;
|
||||
int conta_consegne_mese(long codcf, long codcont, const TDate& adata, long coditi) const;
|
||||
void arrotonda_al_giorno(TDate& data, const int ggcons) const;
|
||||
void elabora_passaggio(const TDate& dadata, const TDate& adata, const TISAM_recordset& pplan);
|
||||
void elabora_passaggio(const TDate& dadata, const TDate& adata, const TISAM_recordset& pplan, TFast_isamfile& rplan);
|
||||
const TDate str2date(const TString& data, int year) const;
|
||||
|
||||
public:
|
||||
@ -145,13 +145,13 @@ bool TGenera_planning_app::kill_planning (TISAM_recordset& selrighe) const
|
||||
const TRecnotype righe = selrighe.items();
|
||||
if (righe > 0)
|
||||
{
|
||||
TProgind pi(righe, TR("Eliminazione planning precedenti in corso..."), true, true);
|
||||
TProgress_monitor pi(righe, TR("Eliminazione planning precedenti in corso..."));
|
||||
TLocalisamfile& rplan = selrighe.cursor()->file();
|
||||
for (bool ok = selrighe.move_last(); ok; ok = selrighe.move_prev())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
rplan.remove();
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@ -201,8 +201,8 @@ TDate TGenera_planning_app::cerca_ultima_consegna(long codcf, long codcont, cons
|
||||
rplan.put(LVRCONSPLAN_CODCONT, codcont);
|
||||
rplan.put(LVRCONSPLAN_DTCONS, data);
|
||||
rplan.put(LVRCONSPLAN_CODITI, 999);
|
||||
int err;
|
||||
if ((err = rplan.read(_isgteq)) == NOERR)
|
||||
int err = rplan.read(_isgteq);
|
||||
if (err == NOERR)
|
||||
err = rplan.prev();
|
||||
|
||||
if (err == NOERR)
|
||||
@ -233,7 +233,6 @@ int TGenera_planning_app::conta_consegne_mese(long codcf, long codcont, const TD
|
||||
for (bool ok = rplan.move_first(); ok; ok = rplan.move_next())
|
||||
{
|
||||
TDate data = rplan.get(LVRCONSPLAN_DTCONS).as_date();
|
||||
|
||||
if (giorno == data.wday())
|
||||
contatore++;
|
||||
}
|
||||
@ -270,7 +269,8 @@ const TDate TGenera_planning_app::str2date(const TString& data, int year) const
|
||||
}
|
||||
|
||||
//ELABORA_PASSAGGIO: questo metodo effettivamente genera il passaggio e lo salva nella tabella
|
||||
void TGenera_planning_app::elabora_passaggio(const TDate& dadata, const TDate& adata, const TISAM_recordset& pplan)
|
||||
void TGenera_planning_app::elabora_passaggio(const TDate& dadata, const TDate& adata,
|
||||
const TISAM_recordset& pplan, TFast_isamfile& file_rplan)
|
||||
{
|
||||
//dati recuperati dalla tabella dei passaggi per contratto:
|
||||
if (pplan.get(LVPASPLAN_NRIGA).as_int() <= 0)
|
||||
@ -333,7 +333,6 @@ void TGenera_planning_app::elabora_passaggio(const TDate& dadata, const TDate& a
|
||||
if (frequenza <= 0 || frequenza > 28) //forza una frequenza valida
|
||||
frequenza = 7;
|
||||
|
||||
TLocalisamfile file_rplan(LF_LVRCONSPLAN);
|
||||
TRectype& rplan = file_rplan.curr();
|
||||
|
||||
for (TDate d = primogiorno; d <= adata; d += frequenza)
|
||||
@ -429,7 +428,7 @@ bool TGenera_planning_app::transfer()
|
||||
const TDate dadata = _msk->get(F_DADATA);
|
||||
const TDate adata = _msk->get(F_ADATA);
|
||||
|
||||
TString query = "USE LVPASPLAN";
|
||||
TString query; query << "USE " << LF_LVPASPLAN;
|
||||
|
||||
//gli "if" sono stati commentati in data 11/02/2009 per evitare questo messaggio, in seguito alla segnalazione
|
||||
//1162 in mantis; penso sia meglio commentarli perchè erano frutto di una segnalazione precedente, quindi
|
||||
@ -467,12 +466,14 @@ bool TGenera_planning_app::transfer()
|
||||
|
||||
TISAM_recordset pplan(query);
|
||||
|
||||
TProgind pi(pplan.items(), TR("Generazione giri in corso..."), true, true);
|
||||
TProgress_monitor pi(pplan.items(), TR("Generazione giri in corso..."));
|
||||
TFast_isamfile rplan(LF_LVRCONSPLAN);
|
||||
|
||||
for (bool ok = pplan.move_first(); ok; ok = pplan.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
elabora_passaggio(dadata, adata, pplan, rplan);
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
elabora_passaggio(dadata, adata, pplan);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -485,14 +486,14 @@ void TGenera_planning_app::main_loop()
|
||||
ininame.ltrim(2);
|
||||
if (ininame.exist())
|
||||
{
|
||||
TConfig ini(ininame,"167");
|
||||
TConfig ini(ininame, LF_LVRCONSPLAN);
|
||||
const long codcf = ini.get_long("CODCF");
|
||||
if (codcf > 0)
|
||||
{
|
||||
TLocalisamfile rplan(LF_LVRCONSPLAN);
|
||||
rplan.last();
|
||||
const TDate adata = rplan.curr().get_date(LVRCONSPLAN_DTCONS);
|
||||
const TDate dadata = TDate(TODAY);
|
||||
const TDate dadata(TODAY);
|
||||
|
||||
_msk->set(F_CODCF, codcf);
|
||||
_msk->set(F_DADATA, dadata);
|
||||
@ -506,7 +507,7 @@ void TGenera_planning_app::main_loop()
|
||||
|
||||
while (_msk->run() == K_ENTER)
|
||||
if (transfer())
|
||||
message_box(TR("La generazione dei giri è stata completata\nin modo corretto"));
|
||||
message_box(TR("Generazione giri terminata"));
|
||||
}
|
||||
|
||||
int lv2100(int argc, char* argv[])
|
||||
|
@ -516,13 +516,13 @@ bool TGestione_planning_mask::on_field_event(TOperable_field& o, TField_event e,
|
||||
|
||||
//se questi campi vengono riempiti, allora riempi lo sheet opportunamante
|
||||
case F_DADATA:
|
||||
if (e == fe_init)
|
||||
fill_sheet();
|
||||
case F_ADATA:
|
||||
case F_CODITI:
|
||||
case F_CODCF:
|
||||
if (e == fe_modify || e == fe_init)
|
||||
{
|
||||
if (e == fe_modify)
|
||||
fill_sheet();
|
||||
}
|
||||
break;
|
||||
case F_ORDGIRI:
|
||||
if (e == fe_init)
|
||||
|
@ -9,6 +9,8 @@
|
||||
#define F_RAGSOCCLI 206
|
||||
#define F_ORDGIRI 207
|
||||
#define F_PLAN 208
|
||||
#define F_RICALT 209
|
||||
|
||||
//campi dello sheet
|
||||
#define F_S_BOLLA 100
|
||||
#define F_S_DATA 101
|
||||
|
@ -31,32 +31,14 @@ ENDPAGE
|
||||
|
||||
PAGE "Visualizzazione e modifica giri" -1 -1 76 20
|
||||
|
||||
GROUPBOX DLG_NULL 76 6
|
||||
GROUPBOX DLG_NULL 76 7
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bDati del giro"
|
||||
END
|
||||
|
||||
DATE F_DADATA
|
||||
BEGIN
|
||||
PROMPT 2 2 "Visualizza i giri dal "
|
||||
FIELD DADATA
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
DATE F_ADATA
|
||||
BEGIN
|
||||
PROMPT 40 2 "al "
|
||||
FIELD ADATA
|
||||
VALIDATE DATE_CMP_FUNC >= F_DADATA
|
||||
WARNING "Inserire una data finale maggiore della data di inizio"
|
||||
FLAGS "A"
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_CODITI 3
|
||||
BEGIN
|
||||
PROMPT 2 3 "Itinerario "
|
||||
PROMPT 2 2 "Itinerario "
|
||||
FLAGS "UZ"
|
||||
USE &ITI
|
||||
JOIN &AUT TO &ITI ALIAS 1000 INTO CODTAB==S1
|
||||
@ -70,21 +52,23 @@ BEGIN
|
||||
DISPLAY "Descrizione Mezzo@50" 2000@->S0
|
||||
OUTPUT F_CODITI CODTAB
|
||||
OUTPUT F_DESCRITI S0
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_DESCRITI 50
|
||||
BEGIN
|
||||
PROMPT 23 3 ""
|
||||
PROMPT 23 2 ""
|
||||
USE &ITI KEY 2
|
||||
INPUT S0 F_DESCRITI
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice " CODTAB
|
||||
COPY OUTPUT F_CODITI
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
NUMBER F_CODCF 6
|
||||
BEGIN
|
||||
PROMPT 2 4 "Cliente "
|
||||
PROMPT 2 3 "Cliente "
|
||||
FLAGS "U"
|
||||
USE LF_CLIFO KEY 1
|
||||
INPUT TIPOCF "C"
|
||||
@ -93,24 +77,56 @@ BEGIN
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
OUTPUT F_CODCF CODCF
|
||||
OUTPUT F_RAGSOCCLI RAGSOC
|
||||
OUTPUT F_RICALT RICALT
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_RAGSOCCLI 50
|
||||
BEGIN
|
||||
PROMPT 23 4 ""
|
||||
PROMPT 24 3 ""
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "C"
|
||||
INPUT RAGSOC F_RAGSOCCLI
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
DISPLAY "Codice " CODCF
|
||||
COPY OUTPUT F_CODCF
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
STRING F_RICALT 30
|
||||
BEGIN
|
||||
PROMPT 2 4 "Ricerca Alt."
|
||||
USE LF_CLIFO KEY 6
|
||||
INPUT TIPOCF "C"
|
||||
INPUT RICALT F_RICALT
|
||||
DISPLAY "Ricerca alternativa@30" RICALT
|
||||
DISPLAY "Sospeso" SOSPESO
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
COPY OUTPUT F_CODCF
|
||||
HELP "Chiave di ricerca alternativa"
|
||||
END
|
||||
|
||||
DATE F_DADATA
|
||||
BEGIN
|
||||
PROMPT 2 5 "Visualizza i giri dal "
|
||||
FIELD DADATA
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
DATE F_ADATA
|
||||
BEGIN
|
||||
PROMPT 40 5 "al "
|
||||
FIELD ADATA
|
||||
VALIDATE DATE_CMP_FUNC >= F_DADATA
|
||||
WARNING "Inserire una data finale maggiore della data di inizio"
|
||||
FLAGS "A"
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
LISTBOX F_ORDGIRI 1 25
|
||||
BEGIN
|
||||
PROMPT 2 5 "Criterio ordinamento giri "
|
||||
PROMPT 2 6 "Criterio ordinamento giri "
|
||||
ITEM "0|Ordine di generazione"
|
||||
ITEM "1|Ordine di fermata"
|
||||
ITEM "2|Orario di passaggio"
|
||||
@ -119,7 +135,7 @@ END
|
||||
|
||||
SPREADSHEET F_PLAN
|
||||
BEGIN
|
||||
PROMPT 0 7 "Giri"
|
||||
PROMPT 0 8 "Giri"
|
||||
ITEM "Data"
|
||||
ITEM "Giorno@10"
|
||||
ITEM "Itinerario@11"
|
||||
@ -221,7 +237,7 @@ BEGIN
|
||||
FIELD FREQ
|
||||
END
|
||||
|
||||
LIST F_S_MODPASS 1 10
|
||||
LIST F_S_MODPASS 10
|
||||
BEGIN
|
||||
PROMPT 38 3 "Mod. pas. "
|
||||
ITEM "C|Consegna"
|
||||
|
@ -95,7 +95,7 @@
|
||||
</field>
|
||||
</section>
|
||||
<section type="Body" level="1" pattern="1">
|
||||
<field border="1" x="92.75" y="-0.07" type="Linea" height="4" pattern="1" />
|
||||
<field border="1" x="92.9" y="-0.07" type="Linea" height="4" pattern="1" />
|
||||
<field border="1" x="0.5" type="Linea" height="4" pattern="1" />
|
||||
<field x="1" type="Numero" align="right" width="5" pattern="1" hide_zero="1">
|
||||
<source>167.ORDFER</source>
|
||||
@ -108,10 +108,9 @@
|
||||
<field x="14" type="Stringa" width="17" height="3" pattern="1">
|
||||
<source>IF(#F_CHECK_MNEM=="X";303@.RICALT;303@.RAGSOC)</source>
|
||||
</field>
|
||||
<field border="1" x="31.25" type="Linea" height="4" pattern="1" />
|
||||
<field border="1" x="31.37" type="Linea" height="4" pattern="1" />
|
||||
<field x="31.5" type="Stringa" width="25" height="2" pattern="1">
|
||||
<source>IF(304@.CODINDSP= "0" ;303@.LOCALITACF;305@.LOCALITA)</source>
|
||||
<alt_source>IF(304@.CODINDSP= "0" ;307@.DENCOM;308@.DENCOM)</alt_source>
|
||||
</field>
|
||||
<field border="1" x="56.75" type="Linea" height="4" pattern="1" />
|
||||
<field x="57" type="Array" align="center" width="9" pattern="1">
|
||||
@ -137,7 +136,7 @@
|
||||
<field x="66.5" y="2" type="Numero" align="right" width="13" pattern="1" hide_zero="1">
|
||||
<source>167.NDOC</source>
|
||||
</field>
|
||||
<field border="1" x="0.5" y="4" type="Linea" width="92.5" height="0" pattern="1" />
|
||||
<field border="1" x="0.5" y="4" type="Linea" width="92.4" height="0" pattern="1" />
|
||||
</section>
|
||||
<section type="Foot" pattern="1" />
|
||||
<section type="Foot" level="1" pattern="1" />
|
||||
@ -148,10 +147,8 @@
|
||||
JOIN AUT TO 167 ALIAS 301 INTO CODTAB==CODAUT
|
||||
JOIN MEZ TO 167 ALIAS 302 INTO CODTAB==CODMEZ
|
||||
JOIN 20 TO 167 ALIAS 303 INTO TIPOCF=="C" CODCF==CODCF
|
||||
JOIN 17 TO 20 ALIAS 304 INTO TIPOCF=="C" CODCF==CODCF
|
||||
JOIN 16 TO 17 ALIAS 305 INTO TIPOCF=="C" CODCF==CODCF CODIND==CODINDSP
|
||||
JOIN 13 TO 20 ALIAS 307 INTO STATO=STATOCF COM==COMCF
|
||||
JOIN 13 TO 16 ALIAS 308 INTO STATO=STATO COM==COM
|
||||
JOIN 168 TO 167 ALIAS 304 INTO CODCONT==CODCONT CODCF==CODCF
|
||||
JOIN 16 TO 168 ALIAS 305 INTO TIPOCF=="C" CODCF==CODCF CODIND==CODINDSP
|
||||
FROM DTCONS=#FROM_DATA
|
||||
TO DTCONS=#TO_DATA
|
||||
</sql>
|
||||
|
@ -84,7 +84,7 @@ END
|
||||
STRING F_CODAUT_FROM 6
|
||||
BEGIN
|
||||
PROMPT 2 9 "Da Autista "
|
||||
FLAGS "U"
|
||||
FLAGS "UZ"
|
||||
USE &AUT
|
||||
INPUT CODTAB F_CODAUT_FROM
|
||||
DISPLAY "Codice" CODTAB
|
||||
@ -104,7 +104,7 @@ END
|
||||
STRING F_CODAUT_TO 6
|
||||
BEGIN
|
||||
PROMPT 2 10 "Ad Autista "
|
||||
FLAGS "U"
|
||||
FLAGS "UZ"
|
||||
USE &AUT
|
||||
INPUT CODTAB F_CODAUT_TO
|
||||
DISPLAY "Codice" CODTAB
|
||||
|
367
lv/lv2400.cpp
367
lv/lv2400.cpp
@ -67,7 +67,8 @@ class TGenera_documenti_app : public TSkeleton_application
|
||||
|
||||
private:
|
||||
//Metodi per la generazione dei documenti
|
||||
bool crea_documento(const TISAM_recordset& plan, TLog_report& rep, int& numdocgen, TAssoc_array& documenti);
|
||||
bool crea_documento_ritiro(const TISAM_recordset& ritiro, TLog_report& rep, int& numdocgen, TAssoc_array& documenti);
|
||||
bool crea_documento_plan(const TISAM_recordset& plan, TLog_report& rep, int& numdocgen, TAssoc_array& documenti);
|
||||
void crea_riga(TToken_string& chiave, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep);
|
||||
//Metodi per il recupero di codnum, tpdoc, stato
|
||||
bool numerazione_ddt(TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const;
|
||||
@ -131,21 +132,23 @@ bool TGenera_documenti_app::destroy()
|
||||
//// Metodi per la generazione dei documenti ////
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
//CREA_DOCUMENTO: metodo che crea un nuovo documento di trasporto dai dati salvati
|
||||
bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_report& rep, int& numdocgen, TAssoc_array& documenti)
|
||||
//CREA_DOCUMENTO_RITIRO: metodo che crea un nuovo documento di trasporto dai dati salvati
|
||||
bool TGenera_documenti_app::crea_documento_ritiro(const TISAM_recordset& ritiro, TLog_report& rep, int& numdocgen, TAssoc_array& documenti)
|
||||
{
|
||||
//recupero i dati di interesse dalla maschera
|
||||
const TDate datagen(TODAY);
|
||||
|
||||
//per ogni planning recupero i dati di interesse dal planning
|
||||
const long codcli = plan.get(LVRCONSPLAN_CODCF).as_int();
|
||||
const long codcont = plan.get(LVRCONSPLAN_CODCONT).as_int();
|
||||
const TDate dtcons = plan.get(LVRCONSPLAN_DTCONS).as_date(); //che è anche la data documento
|
||||
const char modpas = plan.get(LVRCONSPLAN_MODPASS).as_string()[0];
|
||||
const int coditi = plan.get(LVRCONSPLAN_CODITI).as_int();
|
||||
TString8 codaut = plan.get(LVRCONSPLAN_CODAUT).as_string().right(5); codaut.trim();
|
||||
const long codcli = ritiro.get(DOC_CODCF).as_int();
|
||||
const long codcont = ritiro.get(DOC_CODCONT).as_int();
|
||||
const TDate dtcons = ritiro.get("G1:DATAPRCO").as_date(); //che è anche la data documento
|
||||
const int coditi = int(ritiro.get("CODITI").as_int());
|
||||
TString8 codaut = ritiro.get(DOC_CODAG).as_string().right(5); codaut.trim();
|
||||
const TDate datadoc = _msk->get_bool(F_DTEMIS) ? _msk->get_date(F_DTDOC) : dtcons;
|
||||
const int anno = datadoc.year();
|
||||
const long ag_selected = _msk->get_long(F_CODAUT);
|
||||
|
||||
const int anno = _msk->get_bool(F_DTEMIS) ? _msk->get_date(F_DTDOC).year() : dtcons.year();
|
||||
if (ag_selected > 0L && atol(codaut) != ag_selected)
|
||||
return true;
|
||||
|
||||
//preparo la chiave per la tabella contratti
|
||||
TToken_string keycont;
|
||||
@ -161,10 +164,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
|
||||
|
||||
//variabili che conterranno i parametri dei documenti che devo generare...
|
||||
//...settati dalla funzione numerazione_ddt()
|
||||
TString4 codnum;
|
||||
TString4 tpdoc;
|
||||
TString4 statoi;
|
||||
TString4 statof;
|
||||
TString4 codnum, tpdoc, statoi, statof;
|
||||
|
||||
//Cerco il tipo documento da generare sul contratto; se non lo trovo lo cerco in configurazione.
|
||||
//Se non trovo quale documento generare, evito il resto dell'elaborazione
|
||||
@ -181,17 +181,6 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
|
||||
else if (!numerazione_ddt(codnum, tpdoc, statoi, statof))
|
||||
return NOERR;
|
||||
|
||||
if(_ndoc == 0)
|
||||
{
|
||||
TString query2;
|
||||
query2 << "USE DOC\n"
|
||||
<< "FROM PROVV=\"D\" ANNO=" << anno << " CODNUM=\"" << codnum << "\"\n"
|
||||
<< "TO PROVV=\"D\" ANNO=" << anno << " CODNUM=\"" << codnum << "\"";
|
||||
TISAM_recordset bolle(query2);
|
||||
if (bolle.move_last())
|
||||
_ndoc = bolle.get(DOC_NDOC).as_int();
|
||||
}
|
||||
|
||||
//recupero i dati di interesse dal cliente
|
||||
TToken_string key;
|
||||
key.add('C');
|
||||
@ -203,7 +192,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
|
||||
const TString80 iban = clifo.get(CLI_IBAN);
|
||||
|
||||
//reupero la cuasale di magazzino di testata
|
||||
const TString16 causmag = cache().get("%TIP", tpdoc, "S9");
|
||||
const TString8 causmag = cache().get("%TIP", tpdoc, "S9");
|
||||
|
||||
//recupero i dati di interesse dal file CFVEN
|
||||
const TRectype& cfven = cache().get(LF_CFVEN, key);
|
||||
@ -270,6 +259,241 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
|
||||
if (sconti.read() == NOERR)
|
||||
sconto = sconti.get("SCONTO");
|
||||
}
|
||||
break;
|
||||
case 'N': //sconto non gestito
|
||||
default: break;
|
||||
}
|
||||
|
||||
//creo il documento corretto riempiendo i campi che già conosco
|
||||
TDocumento doc('D', anno, codnum, 0L);
|
||||
doc.put(DOC_TIPODOC, tpdoc);
|
||||
doc.put(DOC_DATADOC, datadoc);
|
||||
doc.put(DOC_TIPOCF, 'C');
|
||||
doc.put(DOC_CODCF, codcli);
|
||||
doc.put(DOC_CODCONT, codcont);
|
||||
if(codindsp > 0)
|
||||
doc.put(DOC_CODINDSP, codindsp);
|
||||
doc.put(DOC_RAGGR, ragdoc);
|
||||
doc.put(DOC_CODPAG, codpag);
|
||||
doc.put(DOC_CODABIA, codabi);
|
||||
doc.put(DOC_CODCABA, codcab);
|
||||
doc.put(DOC_IBAN, iban);
|
||||
doc.put(DOC_CODABIP, codabipr);
|
||||
doc.put(DOC_CODCABP, codcabpr);
|
||||
doc.put(DOC_CODAG, codaut);
|
||||
doc.put(DOC_CODAGVIS, codag1);
|
||||
doc.put(DOC_CODSPMEZZO, codmez);
|
||||
doc.put(DOC_ZONA, codzona);
|
||||
doc.put(DOC_CODPORTO, codporto);
|
||||
doc.put(DOC_CODNOTESP1, codnote1);
|
||||
doc.put(DOC_CODNOTESP2, codnote2);
|
||||
doc.put(DOC_CODNOTE, codnote);
|
||||
doc.put(DOC_CODVETT1, codvet1);
|
||||
doc.put(DOC_CODVETT2, codvet2);
|
||||
doc.put(DOC_CODVETT3, codvet3);
|
||||
doc.put(DOC_CATVEN, catven);
|
||||
doc.put(DOC_CODLIST, codlist);
|
||||
doc.put(DOC_CAUSMAG, causmag);
|
||||
doc.put(DOC_PERCSPINC, speseinc);
|
||||
doc.put(DOC_ADDBOLLI, addbolli);
|
||||
doc.put(DOC_SCONTOPERC, sconto);
|
||||
doc.put(DOC_DATAPART, TDate(TODAY));
|
||||
doc.put("DATAGEN", datagen); //data generazione del documento
|
||||
doc.put("DATAPRCO", dtcons); //data prevista consegna
|
||||
doc.put("CODITI", coditi); //codice itinerario
|
||||
|
||||
//calcola tutte le quantità riportate sui documenti di ritiro, sui documenti di anticipo
|
||||
int numerodoc = scansione_ritiri_anticipi(codcli, dtcons, 'R', doc);
|
||||
scansione_ritiri_anticipi(codcli, dtcons, 'A', doc);
|
||||
|
||||
int err = 1;
|
||||
if(numerodoc > 0)
|
||||
{
|
||||
FOR_EACH_ASSOC_OBJECT(_quantita,h,key,obj)
|
||||
{
|
||||
TToken_string chiave(key);
|
||||
const TCodice_articolo codart = chiave.get(0);
|
||||
//preparo la chiave per la tabella righe contratti
|
||||
TToken_string keyrcont;
|
||||
keyrcont.add(codcli);
|
||||
keyrcont.add(codcont);
|
||||
keyrcont.add(codart);
|
||||
const TRectype& rcont = cache().get(LF_LVRCONDV, keyrcont);
|
||||
const TDate dadata = rcont.get_date(LVRCONDV_INDTTMP);
|
||||
const TDate adata = rcont.get_date(LVRCONDV_FIDTTMP);
|
||||
|
||||
if (dadata.ok() && dtcons >= adata)
|
||||
crea_riga(chiave, ' ', tplis, true, prinbo, doc, rep);
|
||||
else
|
||||
crea_riga(chiave, ' ', tplis, false, prinbo, doc, rep);
|
||||
}
|
||||
|
||||
if (doc.rows() > 0)
|
||||
{
|
||||
TToken_string orderkey;
|
||||
orderkey.add(RDOC_CODART);
|
||||
doc.sort_rows(orderkey);
|
||||
while (err = doc.write() == _isreinsert)
|
||||
{
|
||||
const long old_ndoc = doc.get_long(DOC_NDOC);
|
||||
doc.renum_ndoc();
|
||||
const long new_ndoc = doc.get_long(DOC_NDOC);
|
||||
message_box("Attenzione documento numero %ld rinumerato in %ld", old_ndoc, new_ndoc);
|
||||
}
|
||||
++numdocgen;
|
||||
}
|
||||
else
|
||||
doc.remove();
|
||||
|
||||
//scrivo sul planning il riferimento alla bolla che lo accompagna
|
||||
if (err == NOERR)
|
||||
{
|
||||
//tengo traccia dei documenti che sto generando, per poterli stampare dopo
|
||||
TDoc_key kdoc(doc.get_int(DOC_ANNO), doc.get(DOC_CODNUM), doc.get_int(DOC_NDOC));
|
||||
if (!documenti.is_key(kdoc))
|
||||
documenti.add(kdoc, kdoc);
|
||||
}
|
||||
}
|
||||
return err == NOERR;
|
||||
}
|
||||
|
||||
//CREA_DOCUMENTO_PLAN: metodo che crea un nuovo documento di trasporto dai dati salvati
|
||||
bool TGenera_documenti_app::crea_documento_plan(const TISAM_recordset& plan, TLog_report& rep, int& numdocgen, TAssoc_array& documenti)
|
||||
{
|
||||
//recupero i dati di interesse dalla maschera
|
||||
const TDate datagen(TODAY);
|
||||
|
||||
//per ogni planning recupero i dati di interesse dal planning
|
||||
const long codcli = plan.get(LVRCONSPLAN_CODCF).as_int();
|
||||
const long codcont = plan.get(LVRCONSPLAN_CODCONT).as_int();
|
||||
const TDate dtcons = plan.get(LVRCONSPLAN_DTCONS).as_date(); //che è anche la data documento
|
||||
const char modpas = plan.get(LVRCONSPLAN_MODPASS).as_string()[0];
|
||||
const int coditi = plan.get(LVRCONSPLAN_CODITI).as_int();
|
||||
TString8 codaut = plan.get(LVRCONSPLAN_CODAUT).as_string().right(5); codaut.trim();
|
||||
const TDate datadoc = _msk->get_bool(F_DTEMIS) ? _msk->get_date(F_DTDOC) : dtcons;
|
||||
const int anno = datadoc.year();
|
||||
|
||||
//preparo la chiave per la tabella contratti
|
||||
TToken_string keycont;
|
||||
keycont.add(codcli);
|
||||
keycont.add(codcont);
|
||||
//instanzio una cache sulla tabella dei contratti
|
||||
const TRectype& tcont = cache().get(LF_LVCONDV,keycont);
|
||||
//estraggo i dati di interesse dalla cache
|
||||
const long codind = tcont.get_long(LVCONDV_CODINDSP); //codice dell'indirizzo di spedizione
|
||||
const int tplis = tcont.get_int(LVCONDV_TIPOLIS); //tipo listino
|
||||
//const bool prinbo = tcont.get_bool(LVCONDV_STPRZBOL); //prezzo in bolla
|
||||
const bool prinbo = true; //sempre a true; verrà gestita a video in futuro (27/10/2009)
|
||||
|
||||
//variabili che conterranno i parametri dei documenti che devo generare...
|
||||
//...settati dalla funzione numerazione_ddt()
|
||||
TString4 codnum, tpdoc, statoi, statof;
|
||||
|
||||
//Cerco il tipo documento da generare sul contratto; se non lo trovo lo cerco in configurazione.
|
||||
//Se non trovo quale documento generare, evito il resto dell'elaborazione
|
||||
if (tcont.get(LVCONDV_CODNUM).full() && _buono == 'C')
|
||||
{
|
||||
codnum = tcont.get(LVCONDV_CODNUM);
|
||||
tpdoc = tcont.get(LVCONDV_TPDOC);
|
||||
|
||||
//instanzio una cache sulla tabella dei tipi documento (cerco lo stato iniziale)
|
||||
const TString& s2 = cache().get("%TIP",tpdoc,"S2");
|
||||
statoi = s2.left(1);
|
||||
statof = s2.mid(1,1);
|
||||
}
|
||||
else if (!numerazione_ddt(codnum, tpdoc, statoi, statof))
|
||||
return NOERR;
|
||||
|
||||
if(_ndoc == 0)
|
||||
{
|
||||
TString query2;
|
||||
query2 << "USE DOC\n"
|
||||
<< "FROM PROVV=\"D\" ANNO=" << anno << " CODNUM=\"" << codnum << "\"\n"
|
||||
<< "TO PROVV=\"D\" ANNO=" << anno << " CODNUM=\"" << codnum << "\"";
|
||||
TISAM_recordset bolle(query2);
|
||||
if (bolle.move_last())
|
||||
_ndoc = bolle.get(DOC_NDOC).as_int();
|
||||
}
|
||||
|
||||
//recupero i dati di interesse dal cliente
|
||||
TToken_string key;
|
||||
key.add('C');
|
||||
key.add(codcli);
|
||||
const TRectype& clifo = cache().get(LF_CLIFO, key);
|
||||
const TString4 codpag = clifo.get(CLI_CODPAG);
|
||||
const long codabi = clifo.get_long(CLI_CODABI);
|
||||
const long codcab = clifo.get_long(CLI_CODCAB);
|
||||
const TString80 iban = clifo.get(CLI_IBAN);
|
||||
|
||||
//reupero la cuasale di magazzino di testata
|
||||
const TString8 causmag = cache().get("%TIP", tpdoc, "S9");
|
||||
|
||||
//recupero i dati di interesse dal file CFVEN
|
||||
const TRectype& cfven = cache().get(LF_CFVEN, key);
|
||||
const long codabipr = cfven.get_long(CFV_CODABIPR);
|
||||
const long codcabpr = cfven.get_long(CFV_CODCABPR);
|
||||
const bool ragdoc = cfven.get_bool(CFV_RAGGDOC);
|
||||
const int codindsp = cfven.get_int(CFV_CODINDSP);
|
||||
const TString8 codag1 = cfven.get(CFV_CODAG1);
|
||||
const TString4 codmez = cfven.get(CFV_CODSPMEZZO);
|
||||
const TString4 codporto = cfven.get(CFV_CODPORTO);
|
||||
const TString4 codnote1 = cfven.get(CFV_CODNOTESP1);
|
||||
const TString4 codnote2 = cfven.get(CFV_CODNOTESP2);
|
||||
const TString4 codnote = cfven.get(CFV_CODNOTE);
|
||||
const TString8 codvet1 = cfven.get(CFV_CODVETT1);
|
||||
const TString8 codvet2 = cfven.get(CFV_CODVETT2);
|
||||
const TString8 codvet3 = cfven.get(CFV_CODVETT3);
|
||||
const real speseinc = cfven.get_real(CFV_PERCSPINC);
|
||||
const TString4 catven = cfven.get(CFV_CATVEN);
|
||||
const bool addbolli = cfven.get_bool(CFV_ADDBOLLI);
|
||||
const TString8 codlist = cfven.get(CFV_CODLIST);
|
||||
const TString4 codzona = cfven.get(CFV_CODZONA);
|
||||
|
||||
if(codaut.empty())
|
||||
codaut = cfven.get(CFV_CODAG);
|
||||
|
||||
//gestione sconto
|
||||
TString sconto;
|
||||
|
||||
const char tpgest = ini_get_string(CONFIG_DITTA, "ve", "GESSCO")[0];
|
||||
switch(tpgest)
|
||||
{
|
||||
case 'P': sconto = cfven.get(CFV_SCONTO); break; //Percentuale su anagrafica cliente
|
||||
case 'T': sconto = cache().get("%SCC", cfven.get(CFV_CODSCC), "S1"); break; //Gestione tabella sconti
|
||||
case 'A': //Gestione archivio sconti
|
||||
{
|
||||
TConfig ditta(CONFIG_DITTA, "ve");
|
||||
|
||||
TLocalisamfile sconti(LF_SCONTI);
|
||||
sconti.put("TIPO", "I");
|
||||
|
||||
if(ditta.get_bool("SCOKEY", "ve", 1))
|
||||
sconti.put("CODCAT", cfven.get(CFV_CATVEN));
|
||||
|
||||
TString16 cod;
|
||||
if(ditta.get_bool("SCOKEY", "ve", 2))
|
||||
cod.format("%-2s", (const char*)cfven.get(CFV_CODSCC));
|
||||
else
|
||||
cod = " ";
|
||||
|
||||
if(ditta.get_bool("SCOKEY", "ve", 3))
|
||||
{
|
||||
TString8 tmp;
|
||||
tmp.format("%-2s", (const char*)cfven.get(CFV_CODZONA));
|
||||
cod << tmp;
|
||||
}
|
||||
else
|
||||
cod << " ";
|
||||
|
||||
if(ditta.get_bool("SCOKEY", "ve", 4))
|
||||
cod << clifo.get(CLI_CODPAG);
|
||||
|
||||
sconti.put("CODART", cod);
|
||||
|
||||
if (sconti.read() == NOERR)
|
||||
sconto = sconti.get("SCONTO");
|
||||
}
|
||||
break;
|
||||
case 'N': //sconto non gestito
|
||||
default : break;
|
||||
}
|
||||
@ -370,7 +594,8 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
|
||||
}
|
||||
|
||||
//CREA_RIGA: questa funzione crea una riga merce per una bolla di consegna
|
||||
void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep)
|
||||
void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas, const int tplis,
|
||||
const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep)
|
||||
{
|
||||
const int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr");
|
||||
//creo la nuova riga
|
||||
@ -392,6 +617,10 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
|
||||
//preparo la chiave per la tabella righe contratti
|
||||
TLaundry_contract cont(codcli, codcont);
|
||||
const TRectype& rcont = cont.row(codart);
|
||||
const bool artbloc = rcont.get_int(LVRCONDV_ARTBLOC) > 0;
|
||||
|
||||
if (artbloc)
|
||||
return;
|
||||
|
||||
//recupero i dati di interesse dalla riga del contratto
|
||||
const bool arrot = rcont.get_int(LVRCONDV_CALCCONS) == 1;
|
||||
@ -478,9 +707,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
|
||||
|
||||
const TCausale_magazzino rit(caudt.causale_ritiro());
|
||||
const TCausale_magazzino con(caudt.causale_consegna());
|
||||
|
||||
TString8 magazzino;
|
||||
TString8 magazzinoc;
|
||||
TString8 magazzino, magazzinoc;
|
||||
|
||||
if (rit.get("S10").full())
|
||||
magazzino = rit.get("S10").mid(0,5);
|
||||
@ -506,6 +733,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
|
||||
//scrivo gli estremi della dotazione temporanea
|
||||
rdoc.put("DADATATMP", rcont.get_date(LVRCONDV_INDTTMP));
|
||||
rdoc.put("ADATATMP", rcont.get_date(LVRCONDV_FIDTTMP));
|
||||
rdoc.dirty_fields();
|
||||
}
|
||||
|
||||
if (qta > ZERO || (tmp && rcont.get_bool(LVRCONDV_RITAUDTTMP) && qta == ZERO))
|
||||
@ -557,7 +785,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
|
||||
TString str;
|
||||
str << "L'articolo " << codart << " inserito nel documento " << doc.get(DOC_CODNUM) << "-" << doc.get(DOC_TIPODOC)
|
||||
<< " numero " << doc.get(DOC_NDOC) << " per la quantità di " << quantita_arr << " unità"
|
||||
<< " non è prsente sul contratto del cliente " << codcli;
|
||||
<< " non è presente sul contratto del cliente " << codcli;
|
||||
rep.log(1, str);
|
||||
}
|
||||
}
|
||||
@ -680,6 +908,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
|
||||
|
||||
rdoc.put(RDOC_CODMAG, magazzino);
|
||||
rdoc.put(RDOC_CODMAGC, magazzinoc);
|
||||
rdoc.dirty_fields();
|
||||
}
|
||||
|
||||
if (dottmp == 0)
|
||||
@ -730,13 +959,11 @@ bool TGenera_documenti_app::numerazione_drit(const int cod, TString& codnum, TSt
|
||||
codnum = _configlv->get("NUM_RIT", NULL, cod);
|
||||
tpdoc = _configlv->get("TIPODOC_RIT", NULL, cod);
|
||||
|
||||
codnum = _configlv->get("NUM_RIT", NULL, cod);
|
||||
tpdoc = _configlv->get("TIPODOC_RIT", NULL, cod);
|
||||
|
||||
//instanzio una cache sulla tabella tipi documento (cerco lo stato iniziale)
|
||||
const TString& s2 = cache().get("%TIP",tpdoc,"S2");
|
||||
statoi = s2.left(1);
|
||||
statof = s2.mid(1,1);
|
||||
|
||||
return codnum.full() && tpdoc.full();
|
||||
}
|
||||
|
||||
@ -917,16 +1144,45 @@ bool TGenera_documenti_app::transfer()
|
||||
rep.kill_duplicates(true);
|
||||
|
||||
//preparo un recordset che contiene tutti planning per cui voglio creare i documenti relativi
|
||||
TString4 codnum;
|
||||
TString4 tpdoc;
|
||||
TString4 statoi;
|
||||
TString4 statof;
|
||||
TString4 codnum, tpdoc, statoi, statof;
|
||||
numerazione_drit(0, codnum, tpdoc, statoi, statof);
|
||||
|
||||
int numdocgen = 0;
|
||||
|
||||
TAssoc_array documenti;
|
||||
|
||||
if (_msk->get_bool(F_NOTPLAN))
|
||||
{
|
||||
if (_msk->get_int(F_TPGEN) != 1)
|
||||
dadata.addmonth(-1);
|
||||
//per ogni data cerco i documenti e per ogni documento cerco i dati del passaggio
|
||||
TString query;
|
||||
query << "USE DOC "
|
||||
<< "SELECT (ANSI(G1:DATAPRCO)<=#ADATA)&&"
|
||||
<< "(CODNUM=\"" << codnum << "\")&&(TIPODOC=\"" << tpdoc << "\")&&"
|
||||
<< "(STATO=\"" << statoi <<"\")&&";
|
||||
query << "(TIPOCF=\"C\")&&(BETWEEN(CODCF,#CODCF,#CODCF))\n"
|
||||
<< "FROM PROVV=\"D\" ANNO=" << dadata.year() << " CODNUM=\"" << codnum << "\"\n"
|
||||
<< "TO PROVV=\"D\" ANNO=" << adata.year() << " CODNUM=\"" << codnum << "\"\n";
|
||||
|
||||
TISAM_recordset docritiri(query);
|
||||
docritiri.set_var("#ADATA", adata);
|
||||
docritiri.set_var("#CODCF", codcli);
|
||||
|
||||
TProgress_monitor pi(docritiri.items(), TR("Generazione documenti in corso..."));
|
||||
|
||||
for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next())
|
||||
{
|
||||
_quantita.destroy();
|
||||
_quantita_ritirata.destroy();
|
||||
crea_documento_ritiro(docritiri, rep, numdocgen, documenti);
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//TDate d(adata); d.addmonth(-1);
|
||||
for (dadata; dadata <= adata; ++dadata)
|
||||
{
|
||||
//per ogni data cerco i documenti e per ogni documento cerco i dati del passaggio
|
||||
@ -943,11 +1199,11 @@ bool TGenera_documenti_app::transfer()
|
||||
docritiri.set_var("#ADATA", adata);
|
||||
docritiri.set_var("#CODCF", codcli);
|
||||
|
||||
TProgind pi(docritiri.items(), TR("Generazione documenti in corso..."), true, true);
|
||||
TProgress_monitor pi(docritiri.items(), TR("Generazione documenti in corso..."));
|
||||
|
||||
for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
|
||||
if (_msk->field(F_CODCF).empty())
|
||||
@ -966,22 +1222,26 @@ bool TGenera_documenti_app::transfer()
|
||||
query << "&&(CODAUT=" << codaut << ")";
|
||||
}
|
||||
|
||||
query << "\nFROM DTCONS=#DADATA\n";
|
||||
query << "TO DTCONS=#ADATA";
|
||||
query << "\nFROM DTCONS=#DADATA";
|
||||
query << "\nTO DTCONS=#ADATA";
|
||||
|
||||
TISAM_recordset plan(query);
|
||||
plan.set_var("#DADATA", dadata);
|
||||
if (_msk->get_int(F_TPGEN) == 0)
|
||||
plan.set_var("#ADATA", adata);
|
||||
else
|
||||
plan.set_var("#ADATA", dadata);
|
||||
|
||||
if (plan.move_first())
|
||||
{
|
||||
_quantita.destroy();
|
||||
_quantita_ritirata.destroy();
|
||||
crea_documento(plan, rep, numdocgen, documenti);
|
||||
}
|
||||
crea_documento_plan(plan, rep, numdocgen, documenti);
|
||||
}
|
||||
codcli = _msk->get_long(F_CODCF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_msk->get_bool(F_STAMPA) && documenti.items() > 0)
|
||||
{
|
||||
@ -1013,10 +1273,17 @@ bool TGenera_documenti_app::transfer()
|
||||
}
|
||||
|
||||
if (tmp.exist())
|
||||
{
|
||||
{
|
||||
TString cmdline; cmdline << "ve1 -2 -i" << tmp;
|
||||
TExternal_app app(cmdline);
|
||||
app.run();
|
||||
}
|
||||
{
|
||||
TString cmdline; cmdline << "lv1 -3 -i" << tmp;
|
||||
TExternal_app app(cmdline);
|
||||
app.run();
|
||||
}
|
||||
tmp.fremove();
|
||||
}
|
||||
}
|
||||
@ -1037,11 +1304,10 @@ bool TGenera_documenti_app::transfer()
|
||||
{
|
||||
TString str;
|
||||
if (numdocgen > 1)
|
||||
str << "Sono stati generati " << numdocgen << " buoni.";
|
||||
str << TR("Sono stati generati ") << numdocgen << TR(" buoni.");
|
||||
else
|
||||
str << "E' stato generato " << numdocgen << " buono.";
|
||||
str << TR("E' stato generato ") << numdocgen << TR(" buono.");
|
||||
message_box(str);
|
||||
|
||||
message_box(TR("Generazione terminata"));
|
||||
}
|
||||
}
|
||||
@ -1049,10 +1315,15 @@ bool TGenera_documenti_app::transfer()
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void TGenera_documenti_app::main_loop()
|
||||
{
|
||||
_msk->set(F_NOTPLAN, "X");
|
||||
while (_msk->run() == K_ENTER)
|
||||
{
|
||||
transfer();
|
||||
_msk->set(F_NOTPLAN, "X");
|
||||
}
|
||||
}
|
||||
|
||||
int lv2400(int argc, char* argv[])
|
||||
|
@ -10,4 +10,5 @@
|
||||
#define F_RAGSOCCLI 111
|
||||
#define F_DTEMIS 112
|
||||
#define F_DTDOC 113
|
||||
#define F_STAMPA 114
|
||||
#define F_NOTPLAN 114
|
||||
#define F_STAMPA 115
|
@ -113,28 +113,33 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
BOOLEAN F_NOTPLAN
|
||||
BEGIN
|
||||
PROMPT 2 9 "Non considerare i giri"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
BEGIN
|
||||
PROMPT 1 9 "@bParametri di stampa"
|
||||
PROMPT 1 10 "@bParametri di stampa"
|
||||
END
|
||||
|
||||
BOOLEAN F_DTEMIS
|
||||
BEGIN
|
||||
PROMPT 2 10 "Imposta la data documento"
|
||||
PROMPT 2 11 "Imposta la data documento"
|
||||
MESSAGE TRUE SHOW,F_DTDOC
|
||||
MESSAGE FALSE HIDE,F_DTDOC
|
||||
END
|
||||
|
||||
DATE F_DTDOC
|
||||
BEGIN
|
||||
PROMPT 30 10 "Data documento "
|
||||
PROMPT 30 11 "Data documento "
|
||||
FLAGS "A"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
BOOLEAN F_STAMPA
|
||||
BEGIN
|
||||
PROMPT 2 11 "Stampa automatica buoni"
|
||||
PROMPT 2 12 "Stampa automatica buoni"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
@ -660,8 +660,11 @@ bool TAcquisizione_lavanderie_app::elabora_file(const TString& file, TLog_report
|
||||
if (riga.blank())
|
||||
continue;
|
||||
|
||||
const int reclen = riga.len();
|
||||
|
||||
TDate datadoc;
|
||||
long codcf = 0; TString8 codcf_str;
|
||||
long codcf = 0;
|
||||
TString80 codcf_str;
|
||||
TString80 codart;
|
||||
long qta;
|
||||
long rotti;
|
||||
@ -670,7 +673,7 @@ bool TAcquisizione_lavanderie_app::elabora_file(const TString& file, TLog_report
|
||||
TString80 operatore;
|
||||
|
||||
//controllo quale tracciato record devo seguire
|
||||
if (riga.len() == 34) // -> MONTANARI
|
||||
if (reclen == 34) // -> MONTANARI
|
||||
{
|
||||
nrighe++;
|
||||
//leggo i campi dalla riga del file
|
||||
@ -694,7 +697,7 @@ bool TAcquisizione_lavanderie_app::elabora_file(const TString& file, TLog_report
|
||||
else
|
||||
continue;
|
||||
}
|
||||
else if (riga.len() == 121) // ->SKEMA
|
||||
else if (reclen == 81 || reclen == 121) // ->SKEMA
|
||||
{
|
||||
//leggo i campi dalla riga del file
|
||||
const int y = atoi(riga.mid(0,4));
|
||||
@ -1024,7 +1027,7 @@ bool TAcquisizione_lavanderie_app::transfer()
|
||||
TSheet_field& sheet = _msk->sfield(F_SHEET_NAME);
|
||||
TFilename file;
|
||||
|
||||
TLog_report logrep(TR("Aquisizione da contapezzi"));
|
||||
TLog_report logrep(TR("Acquisizione da contapezzi"));
|
||||
logrep.kill_duplicates(true);
|
||||
|
||||
TArticoli_contati articoli;
|
||||
|
492
lv/lv2700.cpp
492
lv/lv2700.cpp
@ -11,35 +11,55 @@
|
||||
|
||||
class TRiepBolle_recordset: public TCSV_recordset
|
||||
{
|
||||
int _loop;
|
||||
unsigned int _max_column;
|
||||
TArray _max_cli_col;
|
||||
|
||||
|
||||
public:
|
||||
TRiepBolle_recordset(): TCSV_recordset("CSV(\"\t\")") {}
|
||||
void first_loop() { _loop = 0;}
|
||||
void prev_loop() { --_loop;}
|
||||
void next_loop() { ++_loop;}
|
||||
void set_loop(int l) { _loop = l;}
|
||||
unsigned int loops() { return (_max_column - 4 )/ 66 + 1; }
|
||||
unsigned int get_curr_max_column() const ;
|
||||
void set_max_column(unsigned int column);
|
||||
virtual const TVariant& get(unsigned int column) const;
|
||||
|
||||
TRiepBolle_recordset(): TCSV_recordset("CSV(\"\t\")"), _loop(0), _max_column(0) {}
|
||||
};
|
||||
|
||||
struct TStruttura: public TObject
|
||||
void TRiepBolle_recordset::set_max_column(unsigned int column)
|
||||
{
|
||||
long _cliente;
|
||||
TString _articolo;
|
||||
TString _descr;
|
||||
TDate _dataDoc;
|
||||
long _numeroDoc;
|
||||
long _qta;
|
||||
TStruttura():_cliente(0),_numeroDoc(0),_qta(0) {}
|
||||
TStruttura(long cliente, const TString& articolo, const TString& descr,
|
||||
TDate dataDoc, int numeroDoc, long qta):_cliente(cliente),_articolo(articolo),
|
||||
_descr(descr),_dataDoc(dataDoc),_numeroDoc(numeroDoc),_qta(qta) {}
|
||||
};
|
||||
const long codcli = get(0).as_int();
|
||||
|
||||
struct TStrutturaData: public TObject
|
||||
if (_max_column < column) _max_column = column;
|
||||
real * r = (real *) _max_cli_col.objptr(codcli);
|
||||
if (r == NULL)
|
||||
{
|
||||
TDate _dataDoc;
|
||||
long _numeroDoc;
|
||||
long _cliente;
|
||||
int _posizione;
|
||||
TStrutturaData():_cliente(0),_numeroDoc(0),_posizione(0) {}
|
||||
TStrutturaData(int posizione, int cliente,
|
||||
TDate dataDoc, int numeroDoc):_posizione(posizione), _dataDoc(dataDoc),_numeroDoc(numeroDoc) {}
|
||||
};
|
||||
r = new real;
|
||||
_max_cli_col.add(r, codcli);
|
||||
}
|
||||
if ((unsigned int )r->integer() < column) *r = column;
|
||||
}
|
||||
|
||||
unsigned int TRiepBolle_recordset::get_curr_max_column() const
|
||||
{
|
||||
const long codcli = get(0).as_int();
|
||||
real * r = (real *) _max_cli_col.objptr(codcli);
|
||||
|
||||
return r == NULL ? 0 : (int) r->integer();
|
||||
}
|
||||
|
||||
const TVariant& TRiepBolle_recordset::get(unsigned int column) const
|
||||
{
|
||||
static TVariant __s("");
|
||||
if (column < 4)
|
||||
return TCSV_recordset::get( column);
|
||||
if (column + _loop * 66 >= get_curr_max_column())
|
||||
return __s;
|
||||
return TCSV_recordset::get(column + _loop * 66);
|
||||
}
|
||||
|
||||
class TRiepBolle_mask: public TAutomask
|
||||
{
|
||||
@ -66,319 +86,229 @@ bool TRiepBolle_mask::on_field_event(TOperable_field& o, TField_event e, long jo
|
||||
return true;
|
||||
}
|
||||
|
||||
class TRiepBolle_report : public TReport
|
||||
class TRiepBolle_report : public TDocument_report
|
||||
{
|
||||
TArray _tot;
|
||||
|
||||
protected:
|
||||
virtual bool use_mask() { return false; }
|
||||
virtual bool get_usr_val(const TString& name, TVariant& var) const;
|
||||
virtual bool set_usr_val(const TString& name, const TVariant& var);
|
||||
|
||||
public:
|
||||
TRiepBolle_report() {}
|
||||
virtual ~TRiepBolle_report() {}
|
||||
};
|
||||
|
||||
bool TRiepBolle_report::get_usr_val(const TString& name, TVariant& var) const
|
||||
{
|
||||
if (name == "#TOT")
|
||||
{
|
||||
TRecordset* recset = recordset();
|
||||
|
||||
if (recset != NULL)
|
||||
{
|
||||
TVariant * v = (TVariant *) _tot.objptr(recset->current_row());
|
||||
|
||||
var = v != NULL ? *v : NULL_VARIANT;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return TDocument_report::get_usr_val(name, var);
|
||||
}
|
||||
|
||||
bool TRiepBolle_report::set_usr_val(const TString& name, const TVariant& var)
|
||||
{
|
||||
if(name == "#TOT")
|
||||
{
|
||||
TRecordset* recset = recordset();
|
||||
|
||||
if (recset != NULL)
|
||||
{
|
||||
TVariant * v = (TVariant *) _tot.objptr(recset->current_row());
|
||||
|
||||
if (v == NULL)
|
||||
{
|
||||
v = new TVariant(ZERO);
|
||||
_tot.add(v, recset->current_row());
|
||||
}
|
||||
*v = var;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return TDocument_report::set_usr_val(name, var);
|
||||
}
|
||||
|
||||
|
||||
class TRiepBolle_app: public TSkeleton_application
|
||||
{
|
||||
protected:
|
||||
virtual void main_loop();
|
||||
void elabora(const TMask& mask) const;
|
||||
TString get_query(bool isArticolo,const TMask& mask) const;
|
||||
};
|
||||
|
||||
TString TRiepBolle_app::get_query(bool isArticolo,const TMask& mask) const
|
||||
{
|
||||
/*
|
||||
RICHIESTA QUERY:
|
||||
estrazione di tutte le bolle in base ai range della parametrica:
|
||||
- cliente
|
||||
- data
|
||||
- zona
|
||||
Inoltre estrarre in base alla causale di lavanderia tutte quelle
|
||||
righe che non sono di reso (2000@.B2!='X').
|
||||
Dalla causale di lavanderia agganciare la causale di magazzino
|
||||
consegnata e verificare che abbiano il segno '+' nel campo
|
||||
consegnato mese (3000@.S2[37,38] ='+1').
|
||||
le bolle sono determinate dal file di configurazione Ditta.ini
|
||||
*/
|
||||
|
||||
//Stringhe x composizione query
|
||||
TString query, select, between, orderBy, join;
|
||||
|
||||
//Richiamo parametri della ditta di configurazione file Ditta.ini
|
||||
//const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
|
||||
const TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN");
|
||||
|
||||
select << "USE RDOC KEY 1\n";
|
||||
select << "SELECT ((DOC.TIPODOC='" << tipodoc << "')&&";
|
||||
|
||||
if(!mask.get_bool(F_CHECK_NO_RESI)){
|
||||
select << "(2000@.B2!='X')&&";
|
||||
}
|
||||
if(mask.get_bool(F_CHECK_FATT)){
|
||||
select << "(3000@.S2[37,38] ='+1')&&";
|
||||
}
|
||||
|
||||
between << "(BETWEEN(DOC.ZONA,#F_ZONA_FROM,#F_ZONA_FROM))&&(BETWEEN(DOC.DATADOC,#F_DATA_FROM,#F_DATA_TO))&&(STR(BETWEEN(DOC.CODCF,#F_CODCF_FROM,#F_CODCF_TO))))\n";
|
||||
|
||||
if(isArticolo)
|
||||
orderBy << "BY DOC.CODCF CODART DOC.DATADOC NDOC\n";
|
||||
else
|
||||
orderBy << "BY DOC.CODCF DOC.DATADOC NDOC\n";
|
||||
|
||||
join << "JOIN DOC TO RDOC ALIAS 1000 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n";
|
||||
|
||||
if (!mask.get_bool(F_CHECK_NO_RESI))
|
||||
join << "JOIN &LVCAU TO RDOC ALIAS 2000 INTO CODTAB==CODAGG1\n";
|
||||
if (mask.get_bool(F_CHECK_FATT))
|
||||
join << "JOIN %CAU TO &LVCAU ALIAS 3000 INTO CODTAB==S2\n";
|
||||
|
||||
//from_ << "FROM CODNUM='" << codnum << "'\n";
|
||||
//to_ << "TO CODNUM='" << codnum << "'";
|
||||
|
||||
query << select << between << orderBy << join;
|
||||
|
||||
return query;
|
||||
}
|
||||
|
||||
class TRiepilogo: public TArray
|
||||
{
|
||||
public:
|
||||
void add(int count,long cliente, const TString& articolo, const TString& descr,
|
||||
const TDate& dataDoc, long numeroDoc, long qta);
|
||||
};
|
||||
|
||||
class TRiepilogoData: public TArray
|
||||
{
|
||||
public:
|
||||
void add(int posizione, long cliente, const TDate& dataDoc, long numeroDoc);
|
||||
};
|
||||
|
||||
void TRiepilogo::add(int count,long cliente, const TString& articolo, const TString& descr,
|
||||
const TDate& dataDoc, long numeroDoc, long qta)
|
||||
{
|
||||
TStruttura* struttura = new TStruttura(cliente,articolo, descr,dataDoc,numeroDoc,qta);
|
||||
TArray::add(struttura,count);
|
||||
}
|
||||
|
||||
void TRiepilogoData::add(int posizione, long cliente, const TDate& dataDoc, long numeroDoc)
|
||||
{
|
||||
TStrutturaData* strutturaData = new TStrutturaData(posizione,cliente, dataDoc,numeroDoc);
|
||||
TArray::add(strutturaData,posizione);
|
||||
}
|
||||
|
||||
void TRiepBolle_app::elabora(const TMask& mask)const
|
||||
{
|
||||
TRiepilogo riepilogo;
|
||||
TDate overflow_date;
|
||||
long overflow_clifo;
|
||||
TReport_book b;
|
||||
const long from_cli = mask.get_long(F_CODCF_DA);
|
||||
const long to_cli = mask.get_long(F_CODCF_A);
|
||||
const TDate dal = mask.get_date(F_DATA_DA);
|
||||
const TDate al = mask.get_date(F_DATA_A);
|
||||
const long anno = dal.year();
|
||||
const bool print_resi = mask.get_bool(F_PRINT_RESI);
|
||||
const bool print_da_fatt = mask.get_bool(F_PRINT_FATT);
|
||||
const TString4 zona = mask.get(F_ZONA);
|
||||
TString query;
|
||||
|
||||
//Richiamo parametri della ditta di configurazione file Ditta.ini
|
||||
const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
|
||||
const TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN");
|
||||
|
||||
query << "USE DOC KEY 2\n";
|
||||
query << "SELECT ((TIPODOC='" << tipodoc << "')&&";
|
||||
if (zona.full())
|
||||
query << "(ZONA='" << zona << "'))&&";
|
||||
query << "(CODNUM='" << codnum << "'))\n";
|
||||
query << "FROM TIPOCF='C' CODCF=#CODCF PROVV='D' ANNO='" << anno << "' DATADOC='" << dal.string() << "' CODNUM='" << codnum << "'\n";
|
||||
query << "TO TIPOCF='C' CODCF=#CODCF PROVV='D' ANNO='" << anno << "' DATADOC='" << al.string() << "' CODNUM='" << codnum << "'";
|
||||
|
||||
TRectype from(LF_CLIFO); from.put(CLI_TIPOCF, "C");
|
||||
TRectype to(from);
|
||||
|
||||
if (from_cli > 0L)
|
||||
from.put(CLI_CODCF, from_cli);
|
||||
if (to_cli > 0L)
|
||||
to.put(CLI_CODCF, to_cli);
|
||||
|
||||
TRelation rel(LF_CLIFO);
|
||||
TCursor cli(&rel, "", 1, &from, &to);
|
||||
const long ncli = cli.items();
|
||||
TProgress_monitor pi_cli(ncli, TR("Estrazione clienti"));
|
||||
|
||||
for (cli = 0L; cli.pos() < ncli && pi_cli.add_status(); ++cli)
|
||||
{
|
||||
TISAM_recordset riep(get_query(true,mask));
|
||||
|
||||
const long codcli = cli.curr().get_long(CLI_CODCF);
|
||||
//inserire parametri filtri
|
||||
riep.set_var("#F_DATA_FROM",mask.get_date(F_DATA_DA));
|
||||
riep.set_var("#F_DATA_TO",mask.get_date(F_DATA_A));
|
||||
riep.set_var("#F_CODCF_FROM",mask.get_long(F_CODCF_DA));
|
||||
riep.set_var("#F_CODCF_TO",mask.get_long(F_CODCF_A));
|
||||
riep.set_var("#F_ZONA_FROM",TVariant(mask.get(F_ZONA)));
|
||||
TISAM_recordset docs(query);
|
||||
docs.set_var("#CODCF", codcli);
|
||||
const TRecnotype docsi = docs.items();
|
||||
if (docsi == 0)
|
||||
continue;
|
||||
|
||||
TProgind pi(riep.items(), TR("Estrazione articoli"), true, true);
|
||||
TString_array nbolle;
|
||||
TString_array datebolle;
|
||||
TAssoc_array riepilogo;
|
||||
TRiepBolle_report rep;
|
||||
if (!rep.load("lv2700a"))
|
||||
return;
|
||||
TRiepBolle_recordset* riep_set = new TRiepBolle_recordset();
|
||||
((TReport &)rep).set_recordset(riep_set);
|
||||
|
||||
TProgress_monitor pi_art(docsi, TR("Estrazione articoli"));
|
||||
int count = 1;
|
||||
|
||||
for(bool ok = riep.move_first(); ok && pi.addstatus(1); ok = riep.move_next())
|
||||
for(bool ok = docs.move_first(); ok && pi_art.add_status(); ok = docs.move_next())
|
||||
{
|
||||
const TDate dataDoc = riep.get("DOC.DATADOC").as_date();
|
||||
const long cliente = riep.get("DOC.CODCF").as_int();
|
||||
const TString articolo = riep.get("CODART").as_string();
|
||||
const TString descr = riep.get("DESCR").as_string();
|
||||
const long numeroDoc = riep.get("NDOC").as_int();
|
||||
const TString4 causale = riep.get("CODAGG1").as_string();
|
||||
TCausale_lavanderie cau(causale);
|
||||
const TDocumento d(docs.cursor()->curr());
|
||||
const TDate data = d.get_date(DOC_DATADOC);
|
||||
const TString8 numero = d.get(DOC_NDOC);
|
||||
const int nrows = d.physical_rows();
|
||||
const int id = nbolle.add(numero);
|
||||
TString8 ggmm; ggmm.format("%02d-%02d", data.day(), data.month());
|
||||
|
||||
datebolle.add(ggmm, id);
|
||||
|
||||
for (int r = 1; r <= nrows; r++)
|
||||
{
|
||||
const TRiga_documento & row = d[r];
|
||||
const TString articolo = row.get(RDOC_CODARTMAG);
|
||||
//se la causale è di reso devo leggere il ritirato e non il consegnato
|
||||
long qta = 0L;
|
||||
TCausale_lavanderie & cau = cached_causale_lavanderie(row.get(RDOC_CODAGG1));
|
||||
real qta;
|
||||
|
||||
if(cau.is_reso() && mask.get_bool(F_CHECK_NO_RESI))
|
||||
qta = riep.get("QTAGG1").as_int();
|
||||
if (print_resi && cau.is_reso())
|
||||
qta = row.get_real(RDOC_QTAGG1);
|
||||
else
|
||||
qta = riep.get("QTA").as_int();
|
||||
{
|
||||
TCausale_magazzino & caumag = cached_causale_magazzino(cau.get("S2"));
|
||||
if (!print_da_fatt || caumag.get("S2").mid(36, 2) == "+1")
|
||||
qta = row.get_real(RDOC_QTA);
|
||||
}
|
||||
if (qta != ZERO)
|
||||
{
|
||||
TArray * riep_row = (TArray *) riepilogo.objptr(articolo);
|
||||
|
||||
riepilogo.add(count,cliente,articolo,descr,dataDoc,numeroDoc,qta);
|
||||
count++;
|
||||
if(riep_row == NULL)
|
||||
riepilogo.add(articolo, riep_row = new TArray);
|
||||
real * q = (real *) riep_row->objptr(id);
|
||||
|
||||
if (q == NULL)
|
||||
riep_row->add(q = new real, id);
|
||||
|
||||
*q += qta;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TRiepBolle_report rep;
|
||||
bool stampa = rep.load("lv2700a");
|
||||
TRiepBolle_recordset* riep_set = new TRiepBolle_recordset();
|
||||
rep.set_recordset(riep_set);
|
||||
TProgress_monitor pi(riepilogo.items(), TR("Costruzione report"));
|
||||
int maxpos = 0L;
|
||||
const int cols = nbolle.items();
|
||||
TString_array keys;
|
||||
|
||||
long clienteOld = 0;
|
||||
TString articoloOld;
|
||||
int contatore = 0;
|
||||
|
||||
TRiepilogoData riepilogoData, riepilogoData2;
|
||||
|
||||
TProgind pi(riepilogo.items(), TR("Estrazione documenti"), true, true);
|
||||
FOR_EACH_ARRAY_ITEM(riepilogo, c, obj)//scandisce clienti e tiene buoni solo quelli valorizzati
|
||||
riepilogo.get_keys(keys);
|
||||
keys.sort();
|
||||
riep_set->first_loop();
|
||||
FOR_EACH_ARRAY_ROW(keys, r, key)//scandisce clienti e tiene buoni solo quelli valorizzati
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
TArray * row = (TArray *) riepilogo.objptr(*key);
|
||||
int col = 0;
|
||||
|
||||
const TStruttura& s = *(TStruttura*)obj;
|
||||
if (clienteOld!=s._cliente || articoloOld!=s._articolo)
|
||||
{
|
||||
riep_set->new_rec();
|
||||
|
||||
riep_set->set(0, TVariant(s._cliente)); //CAMPO DI ROTTURA
|
||||
riep_set->set(1, TVariant(s._cliente));
|
||||
riep_set->set(2, TVariant(s._articolo));
|
||||
riep_set->set(3, TVariant(s._descr));
|
||||
|
||||
contatore = 4;
|
||||
if (clienteOld != s._cliente)
|
||||
riep_set->set(col++, codcli); //CAMPO DI ROTTURA
|
||||
riep_set->set(col++, codcli);
|
||||
riep_set->set(col++, *key);
|
||||
riep_set->set(col++, cached_article(*key).get(ANAMAG_DESCR));
|
||||
FOR_EACH_ARRAY_ITEM(nbolle, c, obj)
|
||||
{
|
||||
riepilogoData.destroy();
|
||||
riepilogoData2.destroy();
|
||||
riep_set->set(col++, datebolle.row(c));
|
||||
riep_set->set(col++, nbolle.row(c));
|
||||
const real * qta = (real *) row->objptr(c);
|
||||
|
||||
//Per ogni cliente creo una struttura di date. è necessario per il report.
|
||||
TISAM_recordset dateDocAll(get_query(false, mask));
|
||||
|
||||
//inserire parametri filtri
|
||||
dateDocAll.set_var("#F_DATA_FROM", mask.get_date(F_DATA_DA));
|
||||
dateDocAll.set_var("#F_DATA_TO", mask.get_date(F_DATA_A));
|
||||
dateDocAll.set_var("#F_CODCF_FROM", s._cliente);
|
||||
dateDocAll.set_var("#F_CODCF_TO", s._cliente);
|
||||
dateDocAll.set_var("#F_ZONA_FROM", TVariant(mask.get(F_ZONA)));
|
||||
|
||||
TDate dateOld;
|
||||
long numeroOld = 0;
|
||||
long cliente = 0;
|
||||
int posizione = 4;
|
||||
|
||||
for (bool ok = dateDocAll.move_first(); ok; ok=dateDocAll.move_next())
|
||||
{
|
||||
TDate dataDocTot = dateDocAll.get("DOC.DATADOC").as_date();
|
||||
long numeroDocTot = dateDocAll.get("NDOC").as_int();
|
||||
long clientDocTot = dateDocAll.get("DOC.CODCF").as_int();
|
||||
if (dateOld != dataDocTot || numeroOld != numeroDocTot || cliente != clientDocTot)
|
||||
{
|
||||
dateOld=dataDocTot;
|
||||
numeroOld=numeroDocTot;
|
||||
cliente=clientDocTot;
|
||||
riepilogoData.add(posizione,clientDocTot,dataDocTot,numeroDocTot);
|
||||
riepilogoData2.add(posizione,clientDocTot,dataDocTot,numeroDocTot);
|
||||
posizione=posizione+3;
|
||||
riep_set->set(col++, qta == NULL ? EMPTY_STRING : qta->stringa(10, 0));
|
||||
riep_set->set_max_column(col);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
clienteOld=s._cliente;
|
||||
articoloOld=s._articolo;
|
||||
}
|
||||
|
||||
FOR_EACH_ARRAY_ITEM(riepilogoData,f,obj)
|
||||
{
|
||||
TStrutturaData& sD = *(TStrutturaData*) obj;
|
||||
|
||||
//ogni primo record riporto come titolo tutte le date-numero
|
||||
if(contatore==4)
|
||||
{
|
||||
// Imposta data e numero documento, mentre azzera la qta
|
||||
FOR_EACH_ARRAY_ITEM(riepilogoData2,f,obj)
|
||||
{
|
||||
TStrutturaData& sD2 = *(TStrutturaData*) obj;
|
||||
int contatore2 = sD2._posizione;
|
||||
|
||||
TString8 ggmm; ggmm.format("%02d-%02d", sD2._dataDoc.day(), sD2._dataDoc.month());
|
||||
|
||||
riep_set->set(contatore2, ggmm); // data doc.
|
||||
contatore2++;
|
||||
riep_set->set(contatore2, sD2._numeroDoc); // num. doc.
|
||||
contatore2++;
|
||||
riep_set->set(contatore2, NULL_VARIANT); // qta
|
||||
contatore2++;
|
||||
}
|
||||
}
|
||||
|
||||
//posizionamento qta in base alla data-numero
|
||||
if(s._dataDoc==sD._dataDoc && s._numeroDoc==sD._numeroDoc)
|
||||
{
|
||||
contatore = sD._posizione;
|
||||
|
||||
if(72 >= contatore)
|
||||
{
|
||||
TString8 tt2;
|
||||
tt2.format("%02d-%02d", s._dataDoc.day(), s._dataDoc.month());
|
||||
riep_set->set(contatore, tt2);
|
||||
contatore++;
|
||||
riep_set->set(contatore,s._numeroDoc);
|
||||
contatore++;
|
||||
const long qta = riep_set->get(contatore).as_int() + s._qta;
|
||||
riep_set->set(contatore,qta);
|
||||
contatore++;
|
||||
|
||||
TArray* p = (TArray*) obj;
|
||||
int e = p->size();
|
||||
e=e+1;
|
||||
while(72>contatore)
|
||||
{
|
||||
contatore++;
|
||||
contatore++;
|
||||
riep_set->set(contatore,TVariant(long (0)));
|
||||
contatore++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!overflow_date.ok())
|
||||
{
|
||||
overflow_date = s._dataDoc;
|
||||
overflow_clifo = s._cliente;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
contatore++;
|
||||
contatore++;
|
||||
riep_set->set(contatore,TVariant(long (0)));
|
||||
contatore++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DBG
|
||||
//Crea file che contiene il recordset per debug
|
||||
riep_set->save_as("c:/temp/riepilogoBolla.txt");
|
||||
#endif
|
||||
|
||||
if(overflow_date.ok())
|
||||
{
|
||||
TString str;
|
||||
str << "Non è stato possibile stampare i documenti a partire dalla data " << overflow_date.string() << " per il cliente " << overflow_clifo;
|
||||
warning_box(str);
|
||||
}
|
||||
|
||||
if(stampa)
|
||||
{
|
||||
//carica tutte le variabili del report.
|
||||
rep.mask2report(mask);
|
||||
|
||||
TReport_book b;
|
||||
bool ok = b.add(rep);// Richiede parametri di stampa in base alla maschera omonima
|
||||
if (ok)
|
||||
if (riep_set->items() > 0L)
|
||||
{
|
||||
const int loops = riep_set->loops();
|
||||
rep.mask2report(mask);
|
||||
riep_set->first_loop();
|
||||
for (int i = 0 ; i < loops; i++, riep_set->next_loop())
|
||||
b.add(rep);
|
||||
}
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
}
|
||||
if (b.pages() > 0)
|
||||
b.print_or_preview(); // Stampa effettivamente
|
||||
else
|
||||
warning_box (TR("Nessun record estratto per i parametri inseriti"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TRiepBolle_app::main_loop()
|
||||
{
|
||||
TRiepBolle_mask m;
|
||||
while(m.run()==K_ENTER)
|
||||
{
|
||||
elabora(m);
|
||||
}
|
||||
}
|
||||
|
||||
int lv2700(int argc, char* argv[])
|
||||
{
|
||||
|
@ -7,5 +7,5 @@
|
||||
#define F_DATA_A 208
|
||||
#define F_ZONA 209
|
||||
#define F_DESZONA 210
|
||||
#define F_CHECK_NO_RESI 211
|
||||
#define F_CHECK_FATT 212
|
||||
#define F_PRINT_RESI 211
|
||||
#define F_PRINT_FATT 212
|
@ -12,7 +12,7 @@
|
||||
</field>
|
||||
<field x="113.37" y="0.12" type="Testo" width="5" height="1.5" pattern="1" text="Pag." />
|
||||
<field x="118.5" y="0.12" type="Stringa" width="10" pattern="1">
|
||||
<prescript description="H0.0 PRESCRIPT">MESSAGE _PAGENO</prescript>
|
||||
<source>BOOKPAGE</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Head" level="1" pattern="1" />
|
||||
@ -277,7 +277,13 @@
|
||||
<source>BR</source>
|
||||
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,1000</prescript>
|
||||
</field>
|
||||
<field x="182" type="Numero" align="right" width="8" id="1000" pattern="1" hide_zero="1" />
|
||||
<field x="182" type="Numero" align="right" width="8" id="1000" pattern="1" hide_zero="1">
|
||||
<prescript description="B1.1000 PRESCRIPT">#TOT @
|
||||
#THIS
|
||||
+!</prescript>
|
||||
<postscript description="B1.1000 POSTSCRIPT">#THIS @
|
||||
#TOT !</postscript>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" pattern="1" />
|
||||
<section type="Foot" level="1" pattern="1" />
|
||||
|
@ -24,7 +24,7 @@ BEGIN
|
||||
OUTPUT F_CODCF_DA CODCF
|
||||
OUTPUT F_RAGSOC_DA RAGSOC
|
||||
CHECKTYPE SEARCH
|
||||
FIELD #F_CODCF_FROM
|
||||
MESSAGE COPY,F_CODCF_A|CHECK,F_CODCF_A
|
||||
END
|
||||
|
||||
STRING F_RAGSOC_DA 50
|
||||
@ -50,7 +50,6 @@ BEGIN
|
||||
COPY DISPLAY F_CODCF_DA
|
||||
OUTPUT F_CODCF_A CODCF
|
||||
OUTPUT F_RAGSOC_A RAGSOC
|
||||
FIELD #F_CODCF_TO
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
@ -73,14 +72,12 @@ END
|
||||
DATE F_DATA_DA
|
||||
BEGIN
|
||||
PROMPT 2 6 "Da Data "
|
||||
FIELD #F_DATA_FROM
|
||||
END
|
||||
|
||||
DATE F_DATA_A
|
||||
BEGIN
|
||||
PROMPT 40 6 "A Data "
|
||||
FLAGS "A"
|
||||
FIELD #F_DATA_TO
|
||||
VALITATE DATE_CMP_FUNC >= F_DATA_DA
|
||||
WARNING "La data finale deve essere successiva a quella iniziale"
|
||||
END
|
||||
@ -100,7 +97,6 @@ BEGIN
|
||||
OUTPUT F_ZONA CODTAB
|
||||
OUTPUT F_DESZONA S0
|
||||
CHECKTYPE NORMAL
|
||||
FIELD #F_ZONA_FROM
|
||||
END
|
||||
|
||||
STRING F_DESZONA 50
|
||||
@ -120,16 +116,14 @@ BEGIN
|
||||
PROMPT 1 11 "@bDettaglio"
|
||||
END
|
||||
|
||||
BOOLEAN F_CHECK_NO_RESI
|
||||
BOOLEAN F_PRINT_RESI
|
||||
BEGIN
|
||||
PROMPT 2 12 "Stampare tutti i righi incluso i resi"
|
||||
FIELD #F_CHECK_NO_RESI_TO
|
||||
END
|
||||
|
||||
BOOLEAN F_CHECK_FATT
|
||||
BOOLEAN F_PRINT_FATT
|
||||
BEGIN
|
||||
PROMPT 2 13 "Stampare solo i righi da fatturare"
|
||||
FIELD #F_CHECK_FATT_TO
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
101
lv/lv2800.cpp
101
lv/lv2800.cpp
@ -65,52 +65,48 @@ protected:
|
||||
virtual void main_loop();
|
||||
void elabora(const TMask& mask) const;
|
||||
TString getQuery(const TMask& mask) const;
|
||||
bool ctl(TDate dataInizio,
|
||||
TDate dataFine,
|
||||
bool isAnno) const;
|
||||
bool erroreBox(TString aMsg) const;
|
||||
bool ctl(const TDate& dataInizio, const TDate& dataFine, bool isAnno) const;
|
||||
};
|
||||
|
||||
TString TVend_cli_app::getQuery(const TMask& mask) const
|
||||
{
|
||||
//Stringhe x composizione query
|
||||
TString query, select, between, orderBy, join;
|
||||
TString query, select, between, orderBy, join, limit;
|
||||
|
||||
//Richiamo parametri della ditta di configurazione file Ditta.ini
|
||||
|
||||
//andare su bolle senza numeratore
|
||||
//const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_FAT");
|
||||
//const TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_FAT");
|
||||
const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
|
||||
const TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN");
|
||||
|
||||
select << "USE RDOC KEY 3\n";
|
||||
select << "SELECT (DOC.TIPODOC='" << tipodoc << "')";
|
||||
|
||||
|
||||
select << "USE RDOC KEY 1\n";
|
||||
select << "SELECT ((DOC.TIPODOC='" << tipodoc << "')&&";
|
||||
|
||||
if(!mask.get_bool(F_CHECK_NO_RESI)){
|
||||
select << "(2000@.B2!='X')&&";
|
||||
}
|
||||
if(mask.get_bool(F_CHECK_FATT)){
|
||||
select << "(3000@.S2[37,38] ='+1')&&";
|
||||
}
|
||||
|
||||
between << "(BETWEEN(DOC.ZONA,#F_ZONA_FROM,#F_ZONA_FROM))";
|
||||
between << "&&(BETWEEN(CODART,#F_CODART_FROM,#F_CODART_TO))";
|
||||
between << "&&(BETWEEN(DOC.DATADOC,#F_DATA_FROM,#F_DATA_TO))";
|
||||
between << "&&(STR(BETWEEN(DOC.CODCF,#F_CODCF_FROM,#F_CODCF_TO))))\n";
|
||||
between << "&&(BETWEEN(DOC.ZONA,#ZONA_FROM,#ZONA_FROM))";
|
||||
between << "&&(BETWEEN(CODART,#CODART_FROM,#CODART_TO))";
|
||||
between << "&&(BETWEEN(DOC.DATADOC,#DATA_FROM,#DATA_TO))";
|
||||
between << "&&(STR(BETWEEN(DOC.CODCF,#CODCF_FROM,#CODCF_TO)))\n";
|
||||
orderBy << "BY DOC.CODCF CODART DOC.DATADOC NDOC\n";
|
||||
join << "JOIN DOC TO RDOC ALIAS 1000 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n";
|
||||
|
||||
if(!mask.get_bool(F_CHECK_NO_RESI)){
|
||||
if(!mask.get_bool(F_CHECK_NO_RESI))
|
||||
{
|
||||
select << "&&(2000@.B2!='X')";
|
||||
join << "JOIN &LVCAU TO RDOC ALIAS 2000 INTO CODTAB==CODAGG1\n";
|
||||
}
|
||||
if(mask.get_bool(F_CHECK_FATT)){
|
||||
if(mask.get_bool(F_CHECK_FATT))
|
||||
{
|
||||
select << "&&(3000@.S2[37,38] ='+1')";
|
||||
join << "JOIN %CAU TO &LVCAU ALIAS 3000 INTO CODTAB==S2\n";
|
||||
}
|
||||
|
||||
limit << "PROVV=D ANNO=" << mask.get(F_ANNO) << " CODNUM=" << codnum;
|
||||
|
||||
query << select << between << orderBy << join;
|
||||
query << "\nFROM " << limit;
|
||||
query << "\nTO " << limit;
|
||||
|
||||
return query;
|
||||
}
|
||||
@ -131,16 +127,6 @@ void TRiepVendCli::add(long cliente, TString articolo, TString descr,
|
||||
TArray::add(struttura);
|
||||
}
|
||||
|
||||
/*
|
||||
Metodo di visualizzazione pop errore
|
||||
ritorna sempre false.
|
||||
*/
|
||||
bool TVend_cli_app::erroreBox(TString aMsg) const
|
||||
{
|
||||
error_box (aMsg);
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
Effettuo Controlli. Ritorna false-Errore se:
|
||||
- data iniziale vuota
|
||||
@ -149,18 +135,14 @@ Effettuo Controlli. Ritorna false-Errore se:
|
||||
(msk gestisce controllo se data iniziale è maggiore di
|
||||
quella finale)
|
||||
*/
|
||||
bool TVend_cli_app:: ctl(TDate dataInizio,
|
||||
TDate dataFine,
|
||||
bool isAnno) const
|
||||
bool TVend_cli_app::ctl(const TDate& dataInizio, const TDate& dataFine, bool isAnno) const
|
||||
{
|
||||
if (!isAnno)
|
||||
{
|
||||
int annoInizio = dataInizio.year();
|
||||
int annoFine = dataFine.year();
|
||||
const int annoInizio = dataInizio.year();
|
||||
const int annoFine = dataFine.year();
|
||||
if (annoInizio != annoFine)
|
||||
{
|
||||
return erroreBox(TR("le date non fanno parte dello stesso anno!"));;
|
||||
}
|
||||
return error_box(TR("Le date non fanno parte dello stesso anno!"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -173,9 +155,7 @@ void TVend_cli_app:: elabora(const TMask& mask)const
|
||||
Se i controlli vanno a buon fine, allora
|
||||
va avanti nella gestione
|
||||
*/
|
||||
if(ctl(mask.get_date(F_DATA_DA),
|
||||
mask.get_date(F_DATA_A),
|
||||
mask.get_bool(F_CHECK_ANNO)))
|
||||
if (ctl(mask.get_date(F_DATA_DA), mask.get_date(F_DATA_A), mask.get_bool(F_CHECK_ANNO)))
|
||||
{
|
||||
TISAM_recordset riep(getQuery(mask));
|
||||
|
||||
@ -197,28 +177,26 @@ void TVend_cli_app:: elabora(const TMask& mask)const
|
||||
const long cazzone2 = mask.get_long(F_CODCF_A);
|
||||
|
||||
//inserire parametri filtri
|
||||
riep.set_var("#F_DATA_FROM", dataDa);
|
||||
riep.set_var("#F_DATA_TO", dataA);
|
||||
riep.set_var("#F_CODCF_FROM", cazzone1);
|
||||
riep.set_var("#F_CODCF_TO", cazzone2);
|
||||
riep.set_var("#F_ZONA_FROM", TVariant(mask.get(F_ZONA)));
|
||||
riep.set_var("#F_ANNO_TO", TVariant(mask.get(F_ANNO)));
|
||||
riep.set_var("#F_CHECK_ANNO_TO", TVariant(mask.get(F_CHECK_ANNO)));
|
||||
riep.set_var("#F_CODART_FROM", TVariant(mask.get(F_CODART_FROM)));
|
||||
riep.set_var("#F_CODART_TO", TVariant(mask.get(F_CODART_TO)));
|
||||
riep.set_var("#F_CHECK_NO_RESI_TO", TVariant(mask.get(F_CHECK_NO_RESI)));
|
||||
riep.set_var("#F_CHECK_FATT_TO", TVariant(mask.get(F_CHECK_FATT)));
|
||||
riep.set_var("#DATA_FROM", dataDa);
|
||||
riep.set_var("#DATA_TO", dataA);
|
||||
riep.set_var("#CODCF_FROM", cazzone1);
|
||||
riep.set_var("#CODCF_TO", cazzone2);
|
||||
riep.set_var("#ZONA_FROM", TVariant(mask.get(F_ZONA)));
|
||||
riep.set_var("#ANNO_TO", TVariant(mask.get(F_ANNO)));
|
||||
riep.set_var("#CODART_FROM", TVariant(mask.get(F_CODART_FROM)));
|
||||
riep.set_var("#CODART_TO", TVariant(mask.get(F_CODART_TO)));
|
||||
riep.set_var("#CHECK_NO_RESI_TO", TVariant(mask.get(F_CHECK_NO_RESI)));
|
||||
riep.set_var("#CHECK_FATT_TO", TVariant(mask.get(F_CHECK_FATT)));
|
||||
|
||||
TRiepVendCli riepilogo;
|
||||
|
||||
//inizializzazione variabili da utilizzare nella
|
||||
//struttura
|
||||
TDate dataDoc;
|
||||
TString articolo;
|
||||
TString80 articolo;
|
||||
TString descr;
|
||||
int numeroDoc;
|
||||
long cliente;
|
||||
long qta;
|
||||
long cliente, qta;
|
||||
|
||||
for (bool ok = riep.move_first(); ok; ok=riep.move_next())
|
||||
{
|
||||
@ -346,19 +324,16 @@ void TVend_cli_app::main_loop()
|
||||
|
||||
//Settaggio della data finale come
|
||||
//31-12-(anno in corso)
|
||||
TString data = "31-12-";
|
||||
data << mask.get_int(F_ANNO);
|
||||
mask.set("#F_DATA_TO",data);
|
||||
TString16 data = "31-12-"; data << mask.get_int(F_ANNO);
|
||||
mask.set(F_DATA_A, data);
|
||||
|
||||
while (mask.run()==K_ENTER)
|
||||
{
|
||||
elabora(mask);
|
||||
}
|
||||
}
|
||||
|
||||
int lv2800(int argc, char* argv[])
|
||||
{
|
||||
TVend_cli_app app;
|
||||
app.run(argc, argv, TR("Stampa Venduto Per Cliente nei 12 Mesi"));
|
||||
app.run(argc, argv, TR("Venduto per cliente nei 12 mesi"));
|
||||
return 0;
|
||||
}
|
@ -24,7 +24,8 @@ BEGIN
|
||||
DISPLAY "Partita IVA@11" PAIV
|
||||
OUTPUT F_CODCF_DA CODCF
|
||||
OUTPUT F_RAGSOC_DA RAGSOC
|
||||
FIELD #F_CODCF_FROM
|
||||
FIELD #CODCF_FROM
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_RAGSOC_DA 50
|
||||
@ -39,6 +40,7 @@ BEGIN
|
||||
DISPLAY "Codice" CODCF
|
||||
OUTPUT F_CODCF_DA CODCF
|
||||
OUTPUT F_RAGSOC_DA RAGSOC
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
NUMBER F_CODCF_A 6
|
||||
@ -54,7 +56,8 @@ BEGIN
|
||||
DISPLAY "Partita IVA@11" PAIV
|
||||
OUTPUT F_CODCF_A CODCF
|
||||
OUTPUT F_RAGSOC_A RAGSOC
|
||||
FIELD #F_CODCF_TO
|
||||
FIELD #CODCF_TO
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_RAGSOC_A 50
|
||||
@ -69,6 +72,7 @@ BEGIN
|
||||
DISPLAY "Codice" CODCF
|
||||
OUTPUT F_CODCF_A CODCF
|
||||
OUTPUT F_RAGSOC_A RAGSOC
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 80 3
|
||||
@ -80,14 +84,14 @@ DATE F_DATA_DA
|
||||
BEGIN
|
||||
PROMPT 2 6 "Da Data "
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD #F_DATA_FROM
|
||||
FIELD #DATA_FROM
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
DATE F_DATA_A
|
||||
BEGIN
|
||||
PROMPT 30 6 "A Data "
|
||||
FIELD #F_DATA_TO
|
||||
FIELD #DATA_TO
|
||||
CHECKTYPE REQUIRED
|
||||
VALITATE DATE_CMP_FUNC >= F_DATA_DA
|
||||
WARNING "La data finale deve essere successiva a quella iniziale"
|
||||
@ -97,7 +101,6 @@ END
|
||||
BOOLEAN F_CHECK_ANNO
|
||||
BEGIN
|
||||
PROMPT 60 6 "Per Anno "
|
||||
FIELD #F_CHECK_ANNO_TO
|
||||
MESSAGE TRUE DISABLE,1@|ENABLE,F_ANNO
|
||||
MESSAGE FALSE ENABLE,1@|DISABLE,F_ANNO
|
||||
END
|
||||
@ -108,7 +111,7 @@ NUMBER F_ANNO 4
|
||||
FLAGS "A"
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Inserire l'anno"
|
||||
FIELD #F_ANNO_TO
|
||||
FIELD #ANNO_TO
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 80 4
|
||||
@ -123,10 +126,11 @@ BEGIN
|
||||
USE 47
|
||||
INPUT CODART F_CODART_FROM
|
||||
DISPLAY "Codice@20" CODART
|
||||
DISPAY "Descrizione@50" DESCR
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_CODART_FROM CODART
|
||||
OUTPUT F_DESART_FROM DESCR
|
||||
FIELD #F_CODART_FROM
|
||||
FIELD #CODART_FROM
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_DESART_FROM 40
|
||||
@ -135,10 +139,10 @@ BEGIN
|
||||
USE 47 KEY 2
|
||||
INPUT DESCR F_DESART_FROM
|
||||
DISPLAY "Codice@20" CODART
|
||||
DISPALY "Descrizione@50" DESCR
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_CODART_FROM CODART
|
||||
OUTPUT F_DESART_FROM DESCR
|
||||
FIELD #F_DESART_FROM
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
STRING F_CODART_TO 20
|
||||
@ -151,7 +155,7 @@ BEGIN
|
||||
DISPAY "Descrizione@50" DESCR
|
||||
OUTPUT F_CODART_TO CODART
|
||||
OUTPUT F_DESART_TO DESCR
|
||||
FIELD #F_CODART_TO
|
||||
FIELD #CODART_TO
|
||||
END
|
||||
|
||||
STRING F_DESART_TO 40
|
||||
@ -160,10 +164,9 @@ BEGIN
|
||||
USE 47 KEY 2
|
||||
INPUT DESCR F_DESART_TO
|
||||
DISPLAY "Codice@20" CODART
|
||||
DISPALY "Descrizione@50" DESCR
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_CODART_TO CODART
|
||||
OUTPUT F_DESART_TO DESCR
|
||||
FIELD #F_DESART_TO
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 80 3
|
||||
@ -181,7 +184,8 @@ BEGIN
|
||||
OUTPUT F_ZONA CODTAB
|
||||
OUTPUT F_DESZONA S0
|
||||
CHECKTYPE NORMAL
|
||||
FIELD #F_ZONA_FROM
|
||||
FIELD #ZONA_FROM
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_DESZONA 50
|
||||
@ -193,21 +197,21 @@ BEGIN
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_ZONA CODTAB
|
||||
OUTPUT F_DESZONA S0
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
BOOLEAN F_CHECK_NO_RESI
|
||||
BEGIN
|
||||
PROMPT 2 16 "Stampo tutti i righi incluso i resi "
|
||||
FIELD #F_CHECK_NO_RESI_TO
|
||||
FIELD #CHECK_NO_RESI_TO
|
||||
END
|
||||
|
||||
BOOLEAN F_CHECK_FATT
|
||||
BEGIN
|
||||
PROMPT 2 18 "Stampo solo i righi da fatturare "
|
||||
FIELD #F_CHECK_FATT_TO
|
||||
FIELD #CHECK_FATT_TO
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
|
@ -107,7 +107,7 @@ TObject* TBuoni_cache::key2obj(const char* key)
|
||||
const long codcab = clifo.get_long(CLI_CODCAB);
|
||||
const TString80 iban = clifo.get(CLI_IBAN);
|
||||
|
||||
//reupero la causale di magazzino di testata
|
||||
//recupero la causale di magazzino di testata
|
||||
const TString8 causmag = cache().get("%TIP", _tipodoc, "S9");
|
||||
|
||||
//recupero i dati di interesse dal file CFVEN
|
||||
@ -1041,7 +1041,7 @@ bool TConta_pulito_app::create()
|
||||
|
||||
_msk = new TConta_pulito_msk();
|
||||
|
||||
//se ho più di un parametro, allora lo sto lanciando da linea di comando, e ne devo tenere conto
|
||||
//se ho più di un parametro, allora lo sto lanciando da linea di comando e ne devo tenere conto
|
||||
if (argc() > 2)
|
||||
{
|
||||
_auto = argv(2);
|
||||
|
@ -35,7 +35,7 @@ TAutogiro_msk::TAutogiro_msk() : TAutomask("lv2a00a")
|
||||
// Propone itinerario senza autista
|
||||
TEdit_field& g = efield(F_ITINERARIO);
|
||||
TCursor& gcur = *g.browse()->cursor();
|
||||
for (gcur = gcur.items()-1; gcur.ok(); --gcur)
|
||||
for (TRecnotype i = gcur.items()-1; i >= 0; --gcur, i--)
|
||||
{
|
||||
if (gcur.curr().get("S1").empty())
|
||||
{
|
||||
@ -77,20 +77,22 @@ void TAutogiro_app::main_loop()
|
||||
while (msk.run() == K_ENTER)
|
||||
{
|
||||
const TDate oggi(TODAY);
|
||||
TLocalisamfile pasplan(LF_LVPASPLAN);
|
||||
TFast_isamfile pasplan(LF_LVPASPLAN);
|
||||
|
||||
TString query;
|
||||
query << "USE LVCONDV SELECT LVPASPLAN->NRIGA!=1"
|
||||
<< "\nJOIN LVPASPLAN INTO CODCF==CODCF CODCONT==CODCONT NRIGA==1";
|
||||
TISAM_recordset contratti(query);
|
||||
|
||||
TProgind pi(contratti.items(), title());
|
||||
TProgress_monitor pi(contratti.items(), title());
|
||||
TLog_report log;
|
||||
|
||||
for (bool ok = contratti.move_first(); ok; ok = contratti.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
const long codcf = contratti.get(LVCONDV_CODCF).as_int();
|
||||
if (codcf <= 0)
|
||||
continue;
|
||||
|
||||
const TDate datasc = contratti.get(LVCONDV_DATASC).as_date();
|
||||
if (datasc.ok() && datasc < oggi)
|
||||
continue;
|
||||
@ -100,12 +102,10 @@ void TAutogiro_app::main_loop()
|
||||
{
|
||||
if (nriga == 1)
|
||||
{
|
||||
TString8 cod; cod.format("C|%06ld", codcf);
|
||||
TString msg;
|
||||
|
||||
TString8 cod; cod.format("%06ld", contratti.get(LVCONDV_CODCF).as_int());
|
||||
msg << TR("Contratto ") << cod << '/' << contratti.get(LVCONDV_CODCONT);
|
||||
cod.insert("C|");
|
||||
msg << " - " << cache().get(LF_CLIFO, cod, CLI_RAGSOC);
|
||||
msg << TR("Contratto ") << cod << '/' << contratti.get(LVCONDV_CODCONT)
|
||||
<< " - " << cache().get(LF_CLIFO, cod, CLI_RAGSOC);
|
||||
log.log(0, msg);
|
||||
}
|
||||
|
||||
@ -127,6 +127,9 @@ void TAutogiro_app::main_loop()
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
}
|
||||
|
||||
log.preview();
|
||||
@ -136,6 +139,6 @@ void TAutogiro_app::main_loop()
|
||||
int lv2A00(int argc, char* argv[])
|
||||
{
|
||||
TAutogiro_app app;
|
||||
app.run(argc, argv, TR("Generazione automatica giri"));
|
||||
app.run(argc, argv, TR("Pianificazione da contratti"));
|
||||
return 0;
|
||||
}
|
||||
|
1280
lv/lv3100.cpp
1280
lv/lv3100.cpp
File diff suppressed because it is too large
Load Diff
@ -29,7 +29,7 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 8
|
||||
GROUPBOX DLG_NULL 78 9
|
||||
BEGIN
|
||||
PROMPT 1 4 "Estremi del documento"
|
||||
END
|
||||
@ -105,6 +105,7 @@ BEGIN
|
||||
FIELD NDOC
|
||||
USE LF_DOC SELECT ((#F_STATO=="")||(STATO==#F_STATO))&&((#F_DATADOC=="")||(DATADOC==#F_DATADOC))
|
||||
JOIN LF_CLIFO TO LF_DOC INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||
JOIN LF_COMUNI TO LF_CLIFO INTO STATO==STATOCF COM==COMCF
|
||||
INPUT PROVV F_PROVV SELECT
|
||||
INPUT ANNO F_ANNO SELECT
|
||||
INPUT CODNUM F_CODNUM SELECT
|
||||
@ -119,6 +120,10 @@ BEGIN
|
||||
DISPLAY "C/F" TIPOCF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
|
||||
DISPLAY "Indirizzo@35" LF_CLIFO->INDCF
|
||||
DISPLAY "Numero@15" LF_CLIFO->CIVCF
|
||||
DISPLAY "Località@50" LF_CLIFO->LOCALITACF
|
||||
DISPLAY "Comune@50" LF_COMUNI->DENCOM
|
||||
OUTPUT F_NDOC NDOC
|
||||
OUTPUT F_STATO STATO
|
||||
OUTPUT F_TIPODOC TIPODOC
|
||||
@ -159,6 +164,7 @@ BEGIN
|
||||
PROMPT 24 8 "Codice "
|
||||
USE LF_DOC KEY 2 SELECT (CODNUM==#F_CODNUM)&&(PROVV==#F_PROVV)&&(ANNO==#F_ANNO)&&((#F_STATO=="")||(STATO==#F_STATO))&&((#F_DATADOC=="")||(DATADOC==#F_DATADOC))
|
||||
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||
JOIN LF_COMUNI TO LF_CLIFO INTO STATO==STATOCF COM==COMCF
|
||||
INPUT TIPOCF F_TIPOCF SELECT
|
||||
INPUT CODCF F_CODCF
|
||||
INPUT PROVV F_PROVV
|
||||
@ -175,6 +181,10 @@ BEGIN
|
||||
DISPLAY "Data\ndocumento" DATADOC
|
||||
DISPLAY "Valuta" CODVAL
|
||||
DISPLAY "Totale\ndocumento@18V" G1:TOTDOC
|
||||
DISPLAY "Indirizzo@35" LF_CLIFO->INDCF
|
||||
DISPLAY "Numero@15" LF_CLIFO->CIVCF
|
||||
DISPLAY "Località@50" LF_CLIFO->LOCALITACF
|
||||
DISPLAY "Comune@50" LF_COMUNI->DENCOM
|
||||
COPY OUTPUT F_NDOC
|
||||
OUTPUT F_CODCF CODCF
|
||||
CHECKTYPE NORMAL
|
||||
@ -193,10 +203,16 @@ BEGIN
|
||||
FLAGS "B"
|
||||
END
|
||||
|
||||
STRING F_RIFSEARCH 30
|
||||
BEGIN
|
||||
PROMPT 2 10 "Ricerca alternativa "
|
||||
FLAGS "B"
|
||||
END
|
||||
|
||||
LISTBOX F_PROVV 14
|
||||
BEGIN
|
||||
FIELD PROVV
|
||||
PROMPT 2 10 "Tipo "
|
||||
PROMPT 2 11 "Tipo "
|
||||
ITEM "D|Definitiva "
|
||||
ITEM "P|Provvisoria"
|
||||
KEY 1 2
|
||||
|
@ -74,11 +74,12 @@ protected:
|
||||
virtual int write( const TMask& m );
|
||||
virtual int rewrite( const TMask& m );
|
||||
virtual int read ( TMask& m );
|
||||
virtual void init_query_mode( TMask& m );
|
||||
virtual void init_insert_mode( TMask& m );
|
||||
virtual void init_modify_mode( TMask& m );
|
||||
|
||||
void elimina_vuote( const TMask& m);
|
||||
bool salva_conguaglio( const TDocumento_mask& m);
|
||||
void salva_conguaglio( const TMask& m);
|
||||
void date_dotmp( const TMask& m);
|
||||
virtual const char * query_mask_name() { return "lv3300a"; }
|
||||
|
||||
@ -97,7 +98,7 @@ inline TGestione_buoni_app& gbapp() { return (TGestione_buoni_app &)main_app();
|
||||
//ARROTONDA: metodo che arrotonda la quantità che gli passo se è previsto sul contratto
|
||||
void TGestione_buoni_msk::arrotonda(const TMask& msk, real& quantita)
|
||||
{
|
||||
const int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr");
|
||||
int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr");
|
||||
|
||||
const TString& codart = msk.get(FR_CODART);
|
||||
//instanzio una cache sulla tabella del magazzino
|
||||
@ -141,7 +142,7 @@ void TGestione_buoni_msk::arrotonda(const TMask& msk, real& quantita)
|
||||
void TGestione_buoni_msk::dettaglio_causale(TSheet_field& ss)
|
||||
{
|
||||
TGestione_buoni_msk& dmsk = (TGestione_buoni_msk&) ss.mask();
|
||||
const TString4 causale = ss.cell(ss.selected(),ss.cid2index(FR_CODAGG1));
|
||||
TString4 causale = ss.cell(ss.selected(),ss.cid2index(FR_CODAGG1));
|
||||
|
||||
//instanzio una cache sulle causali
|
||||
const TCausale_lavanderie cau(causale);
|
||||
@ -159,12 +160,12 @@ TDate TGestione_buoni_msk::proponi_dataprco() const
|
||||
if (dadata.ok())
|
||||
{
|
||||
TDate adata = dadata;
|
||||
++dadata;
|
||||
adata.addmonth(1);
|
||||
++dadata;
|
||||
|
||||
TString query = "USE LVRCONSPLAN KEY 3\n";
|
||||
query << "FROM CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_LVCODCONT) << " DTCONS=" << dadata << "\n";
|
||||
query << "TO CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_LVCODCONT) << " DTCONS=" << adata << "\n";
|
||||
TString query = "USE LVRCONSPLAN KEY 3";
|
||||
query << "\nFROM CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_LVCODCONT) << " DTCONS=" << dadata;
|
||||
query << "\nTO CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_LVCODCONT) << " DTCONS=" << adata;
|
||||
TISAM_recordset consegne(query);
|
||||
|
||||
if (consegne.move_first())
|
||||
@ -352,7 +353,7 @@ bool TGestione_buoni_msk::set_contratto_handler(TMask_field& f, KEY k)
|
||||
dmsk.set(F_LVCODCONT, tmp);
|
||||
|
||||
const TDate dataprco = dmsk.proponi_dataprco();
|
||||
if (dataprco.ok() && dmsk.field(F_LVDATAPRCO).empty())
|
||||
if (dataprco.ok() && dmsk.get(F_LVDATAPRCO).empty())
|
||||
dmsk.set(F_LVDATAPRCO, dataprco);
|
||||
|
||||
const TString8 autista = dmsk.proponi_autista();
|
||||
@ -414,8 +415,7 @@ bool TGestione_buoni_msk::set_righe_buono_handler(TMask_field& f, KEY k)
|
||||
}
|
||||
|
||||
TGestione_buoni_msk& dmsk = (TGestione_buoni_msk&)f.mask();
|
||||
const bool ins_mode = dmsk.mode() == MODE_INS;
|
||||
if (ins_mode)
|
||||
if(dmsk.mode() == MODE_INS)
|
||||
dmsk.set(F_CODAG, dmsk.proponi_autista());
|
||||
|
||||
if (ok && k == K_TAB && ((dmsk.insert_mode() && f.to_check(k, true)) || f.focusdirty()) && dmsk.mode() != MODE_MOD)
|
||||
@ -451,7 +451,7 @@ bool TGestione_buoni_msk::set_righe_buono_handler(TMask_field& f, KEY k)
|
||||
doc.put(DOC_CODCONT, codcont);
|
||||
|
||||
const TDate dataprco = dmsk.proponi_dataprco();
|
||||
if (dataprco.ok() && dmsk.field(F_LVDATAPRCO).empty())
|
||||
if (dataprco.ok() && dmsk.get(F_LVDATAPRCO).empty())
|
||||
doc.put("DATAPRCO", dataprco);
|
||||
}
|
||||
|
||||
@ -493,7 +493,10 @@ bool TGestione_buoni_msk::set_righe_buono_handler(TMask_field& f, KEY k)
|
||||
//recupero i dati di interesse dalla riga del contratto e li inserisco sullo sheet
|
||||
const TString80 codart = rcont.get(LVRCONDV_CODART).as_string();
|
||||
|
||||
const TString4 causale = lv_get_causale_from_rcontr(rcont.cursor()->curr(), ins_mode);
|
||||
TString4 causale = rcont.get(LVRCONDV_CAUSLAV).as_string();
|
||||
|
||||
if (causale.blank() || atoi(causale) == 0)
|
||||
causale = ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV");
|
||||
|
||||
//instanzio una cache sulle anagrafice di magazzino
|
||||
const TRectype& anamag = cache().get(LF_ANAMAG,codart);
|
||||
@ -658,7 +661,7 @@ bool TGestione_buoni_msk::pre_ritirato_handler(TMask_field& f, KEY k)
|
||||
magcli.put(CLIFOGIAC_ANNOES, datadoc.year());
|
||||
magcli.put(CLIFOGIAC_TIPOCF, 'C');
|
||||
magcli.put(CLIFOGIAC_CODCF, codcf);
|
||||
magcli.put(CLIFOGIAC_INDSPED, indsped);
|
||||
magcli.put(CLIFOGIAC_INDSPED, 0);
|
||||
magcli.put(CLIFOGIAC_CODART, msk.get(FR_CODART));
|
||||
magcli.put(CLIFOGIAC_NRIGA, 1);
|
||||
|
||||
@ -1248,10 +1251,11 @@ TMask* TGestione_buoni_app::get_mask( int mode )
|
||||
|
||||
_doc_masks.add(tipodoc, m);
|
||||
const TTipo_documento& tdoc = m->doc().tipo();
|
||||
const TString_array& handlers = tdoc.handlers();
|
||||
const TPointer_array& handlers = tdoc.handlers();
|
||||
FOR_EACH_ARRAY_ROW(handlers, i, row)
|
||||
{
|
||||
m->user_set_handler( row->get_int( 0 ), row->get_int( 1 ) );
|
||||
CHECKD(i > DLG_CANCEL, "Invalid handled field ", i);
|
||||
m->user_set_handler( i, handlers.get_long(i) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1274,12 +1278,12 @@ void TGestione_buoni_app::elimina_vuote( const TMask& m)
|
||||
}
|
||||
}
|
||||
|
||||
bool TGestione_buoni_app::salva_conguaglio( const TDocumento_mask& mask)
|
||||
void TGestione_buoni_app::salva_conguaglio( const TMask& m)
|
||||
{
|
||||
if (!ini_get_bool(CONFIG_DITTA, "lv", "Aggcong"))
|
||||
return false;
|
||||
|
||||
const TDocumento& d = mask.doc();
|
||||
if (ini_get_bool(CONFIG_DITTA, "lv", "Aggcong"))
|
||||
{
|
||||
TDocumento_mask& mask = (TDocumento_mask&) m;
|
||||
TDocumento& d = mask.doc();
|
||||
|
||||
TSheet_field& sheet = mask.sfield(F_SHEET);
|
||||
const long codcf = mask.get_long(F_CODCF);
|
||||
@ -1294,27 +1298,18 @@ bool TGestione_buoni_app::salva_conguaglio( const TDocumento_mask& mask)
|
||||
FOR_EACH_DOC_ROW_BACK(d, r, row)
|
||||
{
|
||||
TRiga_documento& rdoc = (TRiga_documento&)*row;
|
||||
|
||||
const TCausale_lavanderie cau(rdoc.get(RDOC_CODAGG1));
|
||||
if (cau.movcong())
|
||||
{
|
||||
rcondv.put(LVRCONDV_CODCF,codcf);
|
||||
rcondv.put(LVRCONDV_CODCONT, codcont);
|
||||
rcondv.put(LVRCONDV_CODART, rdoc.get(RDOC_CODART));
|
||||
if (rcondv.read() == NOERR)
|
||||
{
|
||||
rcondv.put(LVRCONDV_QTACONG, rdoc.get_real(RDOC_QTAGG5));
|
||||
rcondv.rewrite();
|
||||
}
|
||||
}
|
||||
|
||||
const real ritat = rdoc.get_real(RDOC_QTAGG1);
|
||||
const real conat = rdoc.get_real(RDOC_QTA);
|
||||
rdoc.put(RDOC_QTAGG4, ritat);
|
||||
rdoc.put(RDOC_QTAGG3, conat);
|
||||
}
|
||||
|
||||
return true;
|
||||
rcondv.rewrite();
|
||||
}
|
||||
}
|
||||
|
||||
void TGestione_buoni_app::date_dotmp( const TMask& m)
|
||||
@ -1325,7 +1320,7 @@ void TGestione_buoni_app::date_dotmp( const TMask& m)
|
||||
TSheet_field& sheet = mask.sfield(F_SHEET);
|
||||
const long codcf = mask.get_long(F_CODCF);
|
||||
const int indsped = mask.get_int(F_CODINDSP);
|
||||
const TDate datadoc = mask.get_date(F_DATADOC);
|
||||
TDate datadoc = mask.get_date(F_DATADOC);
|
||||
|
||||
const TLaundry_contract cont(codcf, indsped, datadoc);
|
||||
const int codcont = cont.get_int(LVCONDV_CODCONT);
|
||||
@ -1376,7 +1371,7 @@ int TGestione_buoni_app::write( const TMask& m )
|
||||
{
|
||||
elimina_vuote(m);
|
||||
|
||||
salva_conguaglio((const TDocumento_mask&)m);
|
||||
salva_conguaglio(m);
|
||||
|
||||
date_dotmp(m);
|
||||
|
||||
@ -1388,7 +1383,7 @@ int TGestione_buoni_app::rewrite( const TMask& m )
|
||||
{
|
||||
elimina_vuote(m);
|
||||
|
||||
salva_conguaglio((const TDocumento_mask&)m);
|
||||
salva_conguaglio(m);
|
||||
|
||||
date_dotmp(m);
|
||||
|
||||
@ -1439,6 +1434,19 @@ int TGestione_buoni_app::read(TMask& m)
|
||||
return err;
|
||||
}
|
||||
|
||||
//ridefinisco il metodo init_query_mode della TMotore_application
|
||||
void TGestione_buoni_app::init_query_mode(TMask &m)
|
||||
{
|
||||
/* La data di prevista cosegna NON puo' essere sulla maschera di query! Guy 10-12-2014
|
||||
//se sto leggendo o generando un buono di ritiro, abilito questo campo
|
||||
bool enable_dataprco = m.get(F_CODNUM) == ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT(0)") &&
|
||||
m.get(F_TIPODOC) == ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT(0)");
|
||||
|
||||
m.enable(F_LVDATAPRCO, enable_dataprco);
|
||||
*/
|
||||
return TMotore_application::init_query_mode(m);
|
||||
}
|
||||
|
||||
//ridefinisco il metodo init_insert_mode della TMotore_application
|
||||
void TGestione_buoni_app::init_insert_mode(TMask &m)
|
||||
{
|
||||
@ -1446,12 +1454,6 @@ void TGestione_buoni_app::init_insert_mode(TMask &m)
|
||||
TDocumento& d = mask.doc();
|
||||
_giac.reset(d);
|
||||
|
||||
//se sto leggendo o generando un buono di ritiro, abilito questo campo
|
||||
bool enable_dataprco = mask.get(F_CODNUM) == ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT(0)") &&
|
||||
mask.get(F_TIPODOC) == ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT(0)");
|
||||
|
||||
mask.field(F_LVDATAPRCO).enable(enable_dataprco);
|
||||
|
||||
mask.reset_var_mask();
|
||||
mask.first_focus(F_CODCF, false);
|
||||
|
||||
@ -1461,16 +1463,7 @@ void TGestione_buoni_app::init_insert_mode(TMask &m)
|
||||
//ridefinisco il metodo init_query_mode della TMotore_application
|
||||
void TGestione_buoni_app::init_modify_mode(TMask &m)
|
||||
{
|
||||
TGestione_buoni_msk& mask = (TGestione_buoni_msk&) m;
|
||||
|
||||
//se sto leggendo o generando un buono di ritiro, abilito questo campo
|
||||
bool enable_dataprco = mask.get(F_CODNUM) == ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT(0)") &&
|
||||
mask.get(F_TIPODOC) == ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT(0)");
|
||||
|
||||
mask.field(F_LVDATAPRCO).enable(enable_dataprco);
|
||||
|
||||
mask.first_focus(F_CODCF, false);
|
||||
|
||||
m.first_focus(F_CODCF, false);
|
||||
return TMotore_application::init_modify_mode(m);
|
||||
}
|
||||
|
||||
@ -1483,6 +1476,7 @@ TGiac_per_cli& TGestione_buoni_app::giacenza()
|
||||
int lv3300( int argc, char* argv[])
|
||||
{
|
||||
TGestione_buoni_app a;
|
||||
|
||||
a.run( argc, argv, TR("Buoni di Prelievo"));
|
||||
return 0;
|
||||
}
|
@ -12,7 +12,6 @@
|
||||
//classe TSitmag_msk
|
||||
class TSitmag_msk: public TAutomask
|
||||
{
|
||||
static const int _ndep = 4;
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
@ -30,7 +29,6 @@ void TSitmag_msk::calcola_qta_magazzino() const
|
||||
//recupero le variabili di interesse
|
||||
const TString80 codart = field(F_CODART).get();
|
||||
const int anno = field(F_ANNO).get_long();
|
||||
TString4 codmag = field(F_CODMAG).get(); codmag.trim();
|
||||
|
||||
//Instanzio l'oggetto che mi permette di recuperare le quantità riceercate
|
||||
const TArticolo_giacenza art(codart);
|
||||
@ -42,29 +40,34 @@ void TSitmag_msk::calcola_qta_magazzino() const
|
||||
const int posordf = sheet.cid2index(S_ORDFOR);
|
||||
const int posordc = sheet.cid2index(S_ORDCLI);
|
||||
const int posdisp = sheet.cid2index(S_DISP);
|
||||
const int rows = sheet.items() - 1;
|
||||
|
||||
//calcolo dei totali
|
||||
long totgiac = 0L;
|
||||
long totordf = 0L;
|
||||
long totordc = 0L;
|
||||
long totdisp = 0L;
|
||||
//per ogni magazzino
|
||||
for(int i = 0; i < _ndep; i++)
|
||||
for(int i = 0; i < rows; i++)
|
||||
{
|
||||
//recupero una riga alla volta
|
||||
TToken_string& row = sheet.row(i);
|
||||
//recupero il codice del deposito
|
||||
TString4 coddep = row.get(sheet.cid2index(S_CODDEP));
|
||||
coddep.trim();
|
||||
TString8 codmag = row.get(sheet.cid2index(S_CODMAG)); codmag.rpad(3);
|
||||
const TString4 coddep = row.get(sheet.cid2index(S_CODDEP));
|
||||
|
||||
//costruisco il codice magazzino + deposito
|
||||
TString8 deposito;
|
||||
deposito << codmag << coddep;
|
||||
codmag << coddep;
|
||||
|
||||
//inizializzo le quantità di interesse(la giacenza a quella corrente, le altre a zero)
|
||||
const long giac = art.giacenza_anno(deposito, "", anno).integer();
|
||||
const long giac = art.giacenza_anno(codmag, "", anno).integer();
|
||||
long ordf = 0L;
|
||||
long ordc = 0L;
|
||||
long disp = 0L;
|
||||
|
||||
//cerco il record dell'articolo selzionato corrispondente all'anno corrente
|
||||
TRecord_array& rmag = art.mag(anno);
|
||||
int j = art.find_mag(anno, deposito, "");
|
||||
int j = art.find_mag(anno, codmag, "");
|
||||
//se lo trovo ricavo i valori degli ordini fornitori e clienti
|
||||
//e poi calcolo la disponibilità seconda la formula
|
||||
//disponibilità = giacenza + ordini_fornitori - ordini_clienti
|
||||
@ -83,27 +86,15 @@ void TSitmag_msk::calcola_qta_magazzino() const
|
||||
row.add(ordf, posordf);
|
||||
row.add(ordc, posordc);
|
||||
row.add(disp, posdisp);
|
||||
}
|
||||
|
||||
//calcolo dei totali
|
||||
long totgiac = 0L;
|
||||
long totordf = 0L;
|
||||
long totordc = 0L;
|
||||
long totdisp = 0L;
|
||||
|
||||
//rileggo lo sheet e sommo le varie quantità
|
||||
for(int i = 1; i < _ndep; i++)
|
||||
{
|
||||
TToken_string& row = sheet.row(i);
|
||||
|
||||
totgiac += row.get_long(posgiac);
|
||||
totordf += row.get_long(posordf);
|
||||
totordc += row.get_long(posordc);
|
||||
totdisp += row.get_long(posdisp);
|
||||
totgiac += giac;
|
||||
totordf += ordf;
|
||||
totordc += ordc;
|
||||
totdisp += disp;
|
||||
}
|
||||
|
||||
//scrivo i totali nelle posizioni corrette
|
||||
TToken_string& row = sheet.row(_ndep);
|
||||
TToken_string& row = sheet.row(rows);
|
||||
|
||||
row.add(totgiac, posgiac);
|
||||
row.add(totordf, posordf);
|
||||
row.add(totordc, posordc);
|
||||
@ -127,7 +118,9 @@ bool TSitmag_msk::on_field_event(TOperable_field& f, TField_event e, long jolly)
|
||||
reset(F_DESART);
|
||||
|
||||
TSheet_field& sheet = sfield(F_RIGHE);
|
||||
for (int i = 1; i <= _ndep; i++)
|
||||
const int rows = sheet.items();
|
||||
|
||||
for (int i = 0; i <= rows; i++)
|
||||
{
|
||||
TToken_string& row = sheet.row(i);
|
||||
row.add(0L, sheet.cid2index(S_GIAC));
|
||||
@ -164,30 +157,29 @@ TSitmag_msk::TSitmag_msk():TAutomask("lv3500a")
|
||||
//precarico i campi fissi
|
||||
const TDate oggi(TODAY);
|
||||
set(F_ANNO, esercizi().date2esc(oggi));
|
||||
set(F_CODMAG, ini_get_string(CONFIG_DITTA, "lv", "CODMAG"));
|
||||
TISAM_recordset mag("USE MAG");
|
||||
|
||||
TSheet_field& sheet = sfield(F_RIGHE);
|
||||
|
||||
for(int i = 0; i <= _ndep; i++)
|
||||
for (bool ok = mag.move_first(); ok; ok = mag.move_next())
|
||||
{
|
||||
TString4 coddep;
|
||||
const TString4 codmag = mag.get("CODTAB").as_string().left(3);
|
||||
const TString4 coddep = mag.get("CODTAB").as_string().mid(3);
|
||||
|
||||
TToken_string& row = sheet.row(-1);
|
||||
switch(i)
|
||||
if (coddep.full())
|
||||
{
|
||||
case 0: coddep = ini_get_string(CONFIG_DITTA, "lv", "CODMAGN"); break; //Deposito nuovo
|
||||
case 1: coddep = ini_get_string(CONFIG_DITTA, "lv", "CODMAGP"); break; //Deposito pulito
|
||||
case 2: coddep = ini_get_string(CONFIG_DITTA, "lv", "CODMAGC"); break; //Deposito circolante
|
||||
case 3: coddep = ini_get_string(CONFIG_DITTA, "lv", "CODMAGCL"); break; //Deposito presso cliente
|
||||
default: row.add(TR("TOTALI"), sheet.cid2index(S_DESDEP)); break;
|
||||
}
|
||||
TToken_string& row = sheet.row(-1);
|
||||
|
||||
row.add(codmag, sheet.cid2index(S_CODMAG));
|
||||
row.add(coddep, sheet.cid2index(S_CODDEP));
|
||||
|
||||
//questo if mi permette di fare la decodifica del campo descrizione deposito
|
||||
if(i < _ndep)
|
||||
sheet.check_row(i);
|
||||
sheet.check_row(sheet.items() - 1);
|
||||
}
|
||||
}
|
||||
TToken_string& row = sheet.row(-1);
|
||||
|
||||
row.add(TR("TOTALI"), sheet.cid2index(S_DESDEP));
|
||||
sheet.force_update();
|
||||
}
|
||||
|
||||
|
17
lv/lv3500a.h
17
lv/lv3500a.h
@ -3,13 +3,12 @@
|
||||
#define F_CODART 201
|
||||
#define F_DESART 202
|
||||
#define F_ANNO 203
|
||||
#define F_CODMAG 204
|
||||
#define F_DESMAG 205
|
||||
#define F_RIGHE 206
|
||||
#define F_RIGHE 204
|
||||
|
||||
#define S_CODDEP 101
|
||||
#define S_DESDEP 102
|
||||
#define S_GIAC 103
|
||||
#define S_ORDFOR 104
|
||||
#define S_ORDCLI 105
|
||||
#define S_DISP 106
|
||||
#define S_CODMAG 101
|
||||
#define S_CODDEP 102
|
||||
#define S_DESDEP 103
|
||||
#define S_GIAC 104
|
||||
#define S_ORDFOR 105
|
||||
#define S_ORDCLI 106
|
||||
#define S_DISP 107
|
@ -13,7 +13,7 @@ END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Riepilogo depositi" -1 -1 80 10
|
||||
PAGE "Riepilogo Magazzini" -1 -1 80 10
|
||||
|
||||
GROUPBOX DLG_NULL 78 4
|
||||
BEGIN
|
||||
@ -51,29 +51,13 @@ BEGIN
|
||||
PROMPT 2 3 "Esercizio "
|
||||
END
|
||||
|
||||
STRING F_CODMAG 4
|
||||
BEGIN
|
||||
PROMPT 2 5 "Magazzino "
|
||||
USE MAG SELECT CODTAB[4,5]==""
|
||||
FLAG "U"
|
||||
INPUT CODTAB F_CODMAG
|
||||
OUTPUT F_CODMAG CODTAB[1,3]
|
||||
OUTPUT F_DESMAG S0
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_DESMAG 50
|
||||
SPREADSHEET F_RIGHE 80 0
|
||||
BEGIN
|
||||
PROMPT 23 5 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
SPREADSHEET F_RIGHE 76 8
|
||||
BEGIN
|
||||
PROMPT 2 7 "Righe"
|
||||
PROMPT 0 7 "Righe"
|
||||
ITEM "Cod.\nMag.@3"
|
||||
ITEM "Cod.\nDep.@3"
|
||||
ITEM "Deposito@50"
|
||||
ITEM "Deposito@32"
|
||||
ITEM "Giacenza@6"
|
||||
ITEM "Ord.\nFor.@6"
|
||||
ITEM "Ord.\nCli.@6"
|
||||
@ -100,11 +84,20 @@ ENDPAGE
|
||||
|
||||
PAGE "Riga" -1 -1 80 10
|
||||
|
||||
STRING S_CODMAG 4
|
||||
BEGIN
|
||||
PROMPT 2 5 "Magazzino "
|
||||
USE MAG SELECT CODTAB[4,5]==""
|
||||
INPUT CODTAB S_CODMAG
|
||||
OUTPUT S_CODMAG CODTAB[1,3]
|
||||
FLAGS "UD"
|
||||
END
|
||||
|
||||
STRING S_CODDEP 3
|
||||
BEGIN
|
||||
PROMPT 1 1 "Cod. dep. "
|
||||
PROMPT 1 1 "Deposito "
|
||||
USE MAG
|
||||
INPUT CODTAB[1,3] -F_CODMAG
|
||||
INPUT CODTAB[1,3] S_CODMAG
|
||||
INPUT CODTAB[4,5] S_CODDEP
|
||||
OUTPUT S_DESDEP S0
|
||||
CHECKTYPE REQUIRED
|
||||
|
@ -106,6 +106,7 @@
|
||||
#define F_CODDITTA 209
|
||||
#define F_RAGSOCDITTA 210
|
||||
#define F_LIQDIFF 211
|
||||
#define F_RIFSEARCH 212
|
||||
|
||||
#define F_CDC1 251
|
||||
#define F_CDC12 262
|
||||
|
@ -68,7 +68,10 @@ DATASCAD4 = S_DISABILITATO //500
|
||||
DATASCAD5 = S_DISABILITATO //500
|
||||
CODABIA = S_OBBLIGATORIO //600
|
||||
CODCABA = S_OBBLIGATORIO //600
|
||||
DESBANAPP = S_NORMALE //600
|
||||
CODABIA1 = S_NORMALE //600
|
||||
CODCABA1 = S_NORMALE //600
|
||||
DESBANAPP = S_NOCHECK //600
|
||||
DESBANAPP1 = S_NOCHECK //600
|
||||
IBAN = S_NORMALE //600
|
||||
IBAN_STATO = S_NORMALE //600
|
||||
IBAN_CHECK = S_NORMALE //600
|
||||
@ -79,7 +82,12 @@ BBAN_CAB = S_NORMALE //600
|
||||
BBAN_CONTO = S_NORMALE //600
|
||||
CODABIP = S_NORMALE //700
|
||||
CODCABP = S_NORMALE //700
|
||||
DESBANPRE = S_NORMALE //700
|
||||
CODABIP1 = S_NORMALE //700
|
||||
CODCABP1 = S_NORMALE //700
|
||||
DESBANPRE = S_NOCHECK //700
|
||||
DESBANPRE1 = S_NOCHECK //700
|
||||
PROGBNP = S_NOCHECK //700
|
||||
PROGBNP1 = S_NORMALE //700
|
||||
CATVEN = S_NORMALE //800
|
||||
DESCATVEN = S_DISABILITATO //800
|
||||
CODLIST1 = S_NORMALE //800
|
||||
@ -300,6 +308,6 @@ Rule(1) = (TIPORIGA!="05")&&(QTA==0)&&(QTAGG1==0)
|
||||
BgCol(1) = 255,255,128
|
||||
FgCol(1) = 0,0,0
|
||||
RuleName(2) = Dotazione scaduta
|
||||
Rule(2) = (ADATATMP!="")&&(ANSI(33.DATADOC)>ANSI(ADATATMP))
|
||||
Rule(2) = (DOTMP!=0)&&(ANSI(33.DATADOC)>ANSI(ADATATMP))
|
||||
BgCol(2) = 255,0,0
|
||||
FgCol(2) = 0,0,0
|
@ -68,7 +68,10 @@ DATASCAD4 = S_DISABILITATO //500
|
||||
DATASCAD5 = S_DISABILITATO //500
|
||||
CODABIA = S_OBBLIGATORIO //600
|
||||
CODCABA = S_OBBLIGATORIO //600
|
||||
DESBANAPP = S_NORMALE //600
|
||||
CODABIA1 = S_NORMALE //600
|
||||
CODCABA1 = S_NORMALE //600
|
||||
DESBANAPP = S_NOCHECK //600
|
||||
DESBANAPP1 = S_NOCHECK //600
|
||||
IBAN = S_NORMALE //600
|
||||
IBAN_STATO = S_NORMALE //600
|
||||
IBAN_CHECK = S_NORMALE //600
|
||||
@ -79,7 +82,12 @@ BBAN_CAB = S_NORMALE //600
|
||||
BBAN_CONTO = S_NORMALE //600
|
||||
CODABIP = S_NORMALE //700
|
||||
CODCABP = S_NORMALE //700
|
||||
DESBANPRE = S_NORMALE //700
|
||||
CODABIP1 = S_NORMALE //700
|
||||
CODCABP1 = S_NORMALE //700
|
||||
DESBANPRE = S_NOCHECK //700
|
||||
DESBANPRE1 = S_NOCHECK //700
|
||||
PROGBNP = S_NOCHECK //700
|
||||
PROGBNP1 = S_NORMALE //700
|
||||
CATVEN = S_NORMALE //800
|
||||
DESCATVEN = S_DISABILITATO //800
|
||||
CODLIST1 = S_NORMALE //800
|
||||
@ -303,6 +311,6 @@ Rule(1) = (TIPORIGA!="05")&&(QTA==0)&&(QTAGG1==0)
|
||||
BgCol(1) = 255,255,128
|
||||
FgCol(1) = 0,0,0
|
||||
RuleName(2) = Dotazione scaduta
|
||||
Rule(2) = (ADATATMP!="")&&(ANSI(33.DATADOC)>ANSI(ADATATMP))
|
||||
Rule(2) = (DOTMP!=0)&&(ANSI(33.DATADOC)>ANSI(ADATATMP))
|
||||
BgCol(2) = 255,0,0
|
||||
FgCol(2) = 0,0,0
|
||||
|
@ -68,7 +68,10 @@ DATASCAD4 = S_DISABILITATO //500
|
||||
DATASCAD5 = S_DISABILITATO //500
|
||||
CODABIA = S_OBBLIGATORIO //600
|
||||
CODCABA = S_OBBLIGATORIO //600
|
||||
DESBANAPP = S_NORMALE //600
|
||||
CODABIA1 = S_NORMALE //600
|
||||
CODCABA1 = S_NORMALE //600
|
||||
DESBANAPP = S_NOCHECK //600
|
||||
DESBANAPP1 = S_NOCHECK //600
|
||||
IBAN = S_NORMALE //600
|
||||
IBAN_STATO = S_NORMALE //600
|
||||
IBAN_CHECK = S_NORMALE //600
|
||||
@ -79,7 +82,12 @@ BBAN_CAB = S_NORMALE //600
|
||||
BBAN_CONTO = S_NORMALE //600
|
||||
CODABIP = S_NORMALE //700
|
||||
CODCABP = S_NORMALE //700
|
||||
DESBANPRE = S_NORMALE //700
|
||||
CODABIP1 = S_NORMALE //700
|
||||
CODCABP1 = S_NORMALE //700
|
||||
DESBANPRE = S_NOCHECK //700
|
||||
DESBANPRE1 = S_NOCHECK //700
|
||||
PROGBNP = S_NOCHECK //700
|
||||
PROGBNP1 = S_NORMALE //700
|
||||
CATVEN = S_NORMALE //800
|
||||
DESCATVEN = S_DISABILITATO //800
|
||||
CODLIST1 = S_NORMALE //800
|
||||
@ -124,9 +132,9 @@ DENCAUSTRASP = S_NORMALE //1400
|
||||
CODVETT1 = S_NORMALE //1500
|
||||
CODVETT2 = S_NORMALE //1500
|
||||
CODVETT3 = S_NORMALE //1500
|
||||
NOMEVETT1 = S_NORMALE //1500
|
||||
NOMEVETT2 = S_NORMALE //1500
|
||||
NOMEVETT3 = S_NORMALE //1500
|
||||
NOMEVETT1 = S_NOCHECK //1500
|
||||
NOMEVETT2 = S_NOCHECK //1500
|
||||
NOMEVETT3 = S_NOCHECK //1500
|
||||
NCOPIE = S_NASCOSTO //1600
|
||||
GRPARTENZA = S_NORMALE //1700
|
||||
DATAPART = S_NORMALE //1700
|
||||
@ -188,7 +196,6 @@ LVCODITI = S_NORMALE //4041
|
||||
BLANK = S_DISABILITATO //4000
|
||||
|
||||
[DEFAULT]
|
||||
Default(0)=F_CAUSTRASP|VEN
|
||||
|
||||
[SHEET]
|
||||
Col(0)=FR_CODART|Codice|8
|
||||
@ -200,13 +207,14 @@ Col(5)=FR_DESCR||28
|
||||
Col(6)=FR_CAULAV|Caus.|5
|
||||
Col(7)=FR_RITIRO|Ritiro|6
|
||||
Col(8)=FR_QTA|Rotti|6
|
||||
Col(9)=FR_JOLLY1@R|Dot.Od.|7
|
||||
Col(10)=FR_JOLLY5@R|Dot.In.|7
|
||||
Col(11)=FR_TIPORIGA|Tipo|4
|
||||
Col(12)=FR_CODMAG
|
||||
Col(13)=FR_CODDEP
|
||||
Col(14)=FR_CODMAGC
|
||||
Col(15)=FR_CODDEPC
|
||||
Col(9)=FR_JOLLY1@R|Dotaz.|7
|
||||
Col(10)=FR_JOLLY2@R|D.Temp.|7
|
||||
Col(11)=FR_JOLLY3|Inizio|10
|
||||
Col(12)=FR_JOLLY4|Fine|10Col(9)=FR_TIPORIGA|Tipo|4
|
||||
Col(13)=FR_CODMAG
|
||||
Col(14)=FR_CODDEP
|
||||
Col(15)=FR_CODMAGC
|
||||
Col(16)=FR_CODDEPC
|
||||
|
||||
|
||||
[RIGHE]
|
||||
|
@ -68,7 +68,10 @@ DATASCAD4 = S_DISABILITATO //500
|
||||
DATASCAD5 = S_DISABILITATO //500
|
||||
CODABIA = S_OBBLIGATORIO //600
|
||||
CODCABA = S_OBBLIGATORIO //600
|
||||
DESBANAPP = S_NORMALE //600
|
||||
CODABIA1 = S_NORMALE //600
|
||||
CODCABA1 = S_NORMALE //600
|
||||
DESBANAPP = S_NOCHECK //600
|
||||
DESBANAPP1 = S_NOCHECK //600
|
||||
IBAN = S_NORMALE //600
|
||||
IBAN_STATO = S_NORMALE //600
|
||||
IBAN_CHECK = S_NORMALE //600
|
||||
@ -79,7 +82,12 @@ BBAN_CAB = S_NORMALE //600
|
||||
BBAN_CONTO = S_NORMALE //600
|
||||
CODABIP = S_NORMALE //700
|
||||
CODCABP = S_NORMALE //700
|
||||
DESBANPRE = S_NORMALE //700
|
||||
CODABIP1 = S_NORMALE //700
|
||||
CODCABP1 = S_NORMALE //700
|
||||
DESBANPRE = S_NOCHECK //700
|
||||
DESBANPRE1 = S_NOCHECK //700
|
||||
PROGBNP = S_NOCHECK //700
|
||||
PROGBNP1 = S_NORMALE //700
|
||||
CATVEN = S_NORMALE //800
|
||||
DESCATVEN = S_DISABILITATO //800
|
||||
CODLIST1 = S_NORMALE //800
|
||||
@ -188,7 +196,6 @@ LVCODITI = S_NORMALE //4041
|
||||
BLANK = S_DISABILITATO //4000
|
||||
|
||||
[DEFAULT]
|
||||
Default(0)=F_CAUSTRASP|VEN
|
||||
|
||||
[SHEET]
|
||||
Col(0)=FR_CODART|Codice|8
|
||||
@ -205,20 +212,21 @@ Col(10)=FR_JOLLY1@R|Dotaz.|7
|
||||
Col(11)=FR_JOLLY2@R|D.Temp.|7
|
||||
Col(12)=FR_JOLLY3|Inizio|10
|
||||
Col(13)=FR_JOLLY4|Fine|10
|
||||
Col(14)=FR_UMQTA
|
||||
Col(15)=FR_SCONTO
|
||||
Col(16)=FR_PERCPROV
|
||||
Col(17)=FR_PERCPROV1
|
||||
Col(18)=FR_CODIVA
|
||||
Col(19)=FR_NCOLLI
|
||||
Col(20)=FR_PNETTO
|
||||
Col(21)=FR_TARA
|
||||
Col(22)=FR_CAUS
|
||||
Col(23)=FR_CODMAGC
|
||||
Col(24)=FR_CODDEPC
|
||||
Col(25)=FR_CODMAG
|
||||
Col(26)=FR_CODDEP
|
||||
Col(27)=FR_TIPORIGA|Tipo|4
|
||||
Col(14)=FR_QTAGG5|Conguaglio|10
|
||||
Col(15)=FR_UMQTA
|
||||
Col(16)=FR_SCONTO
|
||||
Col(17)=FR_PERCPROV
|
||||
Col(18)=FR_PERCPROV1
|
||||
Col(19)=FR_CODIVA
|
||||
Col(20)=FR_NCOLLI
|
||||
Col(21)=FR_PNETTO
|
||||
Col(22)=FR_TARA
|
||||
Col(23)=FR_CAUS
|
||||
Col(24)=FR_CODMAGC
|
||||
Col(25)=FR_CODDEPC
|
||||
Col(26)=FR_CODMAG
|
||||
Col(27)=FR_CODDEP
|
||||
Col(28)=FR_TIPORIGA|Tipo|4
|
||||
|
||||
[RIGHE]
|
||||
Tipo(0)=21
|
||||
@ -301,6 +309,6 @@ Rule(1) = (TIPORIGA!="05")&&(QTA==0)&&(QTAGG1==0)
|
||||
BgCol(1) = 255,255,128
|
||||
FgCol(1) = 0,0,0
|
||||
RuleName(2) = Dotazione scaduta
|
||||
Rule(2) = (ADATATMP!="")&&(ANSI(33.DATADOC)>ANSI(ADATATMP))
|
||||
Rule(2) = (DOTMP!=0)&&(ANSI(33.DATADOC)>ANSI(ADATATMP))
|
||||
BgCol(2) = 255,0,0
|
||||
FgCol(2) = 0,0,0
|
||||
|
227
lv/lvlib.cpp
227
lv/lvlib.cpp
@ -56,11 +56,11 @@ bool lv_is_holiday(const TDate& data)
|
||||
return (*cal)[index] == 'X';
|
||||
}
|
||||
|
||||
HIDDEN short __lv_02_active = 0x3;
|
||||
HIDDEN TFilename __lv_backup_path;
|
||||
|
||||
bool lv_is_02_active()
|
||||
{
|
||||
HIDDEN short __lv_02_active = 0x3;
|
||||
if (__lv_02_active == 0x3)
|
||||
{
|
||||
__lv_02_active = main_app().has_module(L2AUT);
|
||||
@ -120,25 +120,59 @@ long lv_find_contract(const long codcf, const long indsped, const TDate& data)
|
||||
return cod;
|
||||
}
|
||||
|
||||
const TString& lv_get_causale_from_rcontr(const TRectype& rcont, bool is_consegna)
|
||||
{
|
||||
TString4 causale = rcont.get(LVRCONDV_CAUSLAV);
|
||||
///////////////////////////////////////////////////////////
|
||||
// TCache_articoli_lavanderie
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
if (causale.blank() || atoi(causale) == 0)
|
||||
causale = ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV");
|
||||
|
||||
if (is_consegna)
|
||||
class TCache_articoli_lavanderie : public TRecord_cache
|
||||
{
|
||||
const TString& causale_consegna = cache().get("&CAU", causale, "S5");
|
||||
if (causale_consegna.full())
|
||||
causale = causale_consegna;
|
||||
protected:
|
||||
virtual TObject* rec2obj(const TRectype& rec) const { return new TArticolo_lavanderie(rec);}
|
||||
|
||||
public:
|
||||
TArticolo_lavanderie& lav(const char* key) { return (TArticolo_lavanderie&)query(key); }
|
||||
|
||||
TCache_articoli_lavanderie();
|
||||
virtual ~TCache_articoli_lavanderie() { }
|
||||
};
|
||||
|
||||
TCache_articoli_lavanderie::TCache_articoli_lavanderie()
|
||||
: TRecord_cache(LF_ANAMAG, 1)
|
||||
{
|
||||
test_file_changes(); // Tieni d'occhio le modifiche sul file
|
||||
set_items_limit(256); // Standard
|
||||
}
|
||||
|
||||
return get_tmp_string() = causale;
|
||||
HIDDEN TCache_articoli_lavanderie __cache_articoli_lavanderie;
|
||||
|
||||
TArticolo_lavanderie & cached_article_laundry(const char * codart, const char tipocf, const long codcf, const int indsped)
|
||||
{
|
||||
|
||||
|
||||
TArticolo_lavanderie & art = __cache_articoli_lavanderie.lav(codart);
|
||||
|
||||
art.set_tipocf(tipocf);
|
||||
art.set_codcf(codcf);
|
||||
art.set_indsped(indsped);
|
||||
return art;
|
||||
}
|
||||
|
||||
const TRecmag_lavanderie & lv_art_giac(const TString & codart, const char tipocf, const long codcf, const int indsped, const int last_esc, bool force_reload)
|
||||
{
|
||||
if (force_reload)
|
||||
__cache_articoli_lavanderie.discard(codart);
|
||||
|
||||
TArticolo_lavanderie& artrec = cached_article_laundry(codart, tipocf, codcf, indsped);
|
||||
//estraggo il record corrispondente su LF_CLIFOGIAC
|
||||
const TRecmag_lavanderie& reclav = artrec.find_rec(last_esc);
|
||||
|
||||
if(!reclav.empty())
|
||||
return reclav;
|
||||
TArticolo_lavanderie& artrec1 = cached_article_laundry(codart, tipocf, codcf, 0);
|
||||
const TRecmag_lavanderie& reclav1 = artrec1.find_rec(last_esc);
|
||||
|
||||
return reclav1;
|
||||
}
|
||||
///////////////////////////////////////////////////////////
|
||||
// TLaundry_contract
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -201,6 +235,11 @@ int TLaundry_contract::add_row(const char* codart)
|
||||
rcondv.put(LVRCONDV_CODCONT, codcont);
|
||||
rcondv.put(LVRCONDV_CODART, codart);
|
||||
rcondv.put(LVRCONDV_DATAINS, TDate(TODAY));
|
||||
rcondv.put(LVRCONDV_RITAUDTTMP, get(LVCONDV_RITAUDTTMP));
|
||||
|
||||
const TString & valconv = cache().get("&LV047", codart, "R0");
|
||||
|
||||
rcondv.put(LVRCONDV_VALCONV, valconv);
|
||||
|
||||
return rcondv.rewrite_write();
|
||||
}
|
||||
@ -508,6 +547,8 @@ void TRecmag_lavanderie::update()
|
||||
const int anno = get_int(CLIFOGIAC_ANNOES);
|
||||
TEsercizi_contabili & esc = esercizi();
|
||||
|
||||
if (esc.exist(anno))
|
||||
{
|
||||
const TDate oggi(TODAY);
|
||||
TDate imese;
|
||||
|
||||
@ -521,6 +562,9 @@ void TRecmag_lavanderie::update()
|
||||
|
||||
_consmese = consmese(imese, oggi);
|
||||
}
|
||||
else
|
||||
_consmese = 0L;
|
||||
}
|
||||
|
||||
TRecmag_lavanderie::TRecmag_lavanderie()
|
||||
: TVariable_rectype(LF_CLIFOGIAC)
|
||||
@ -764,39 +808,6 @@ TArticolo_lavanderie::TArticolo_lavanderie(const TRectype & rec, const char tipo
|
||||
add_file(LF_CLIFOGIAC ,"NRIGA");
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TCache_articoli_lavanderie
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TCache_articoli_lavanderie : public TRecord_cache
|
||||
{
|
||||
protected:
|
||||
virtual TObject* rec2obj(const TRectype& rec) const { return new TArticolo_lavanderie(rec);}
|
||||
|
||||
public:
|
||||
TArticolo_lavanderie& lav(const char* key) { return (TArticolo_lavanderie&)query(key); }
|
||||
|
||||
TCache_articoli_lavanderie();
|
||||
virtual ~TCache_articoli_lavanderie() { }
|
||||
};
|
||||
|
||||
TCache_articoli_lavanderie::TCache_articoli_lavanderie()
|
||||
: TRecord_cache(LF_ANAMAG, 1)
|
||||
{
|
||||
test_file_changes(); // Tieni d'occhio le modifiche sul file
|
||||
set_items_limit(256); // Standard
|
||||
}
|
||||
|
||||
TArticolo_lavanderie & cached_article_laundry(const char * codart, const char tipocf, const long codcf, const int indsped)
|
||||
{
|
||||
HIDDEN TCache_articoli_lavanderie __cache_articoli_lavanderie;
|
||||
TArticolo_lavanderie& art = __cache_articoli_lavanderie.lav(codart);
|
||||
art.set_tipocf(tipocf);
|
||||
art.set_codcf(codcf);
|
||||
art.set_indsped(indsped);
|
||||
return art;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TLavanderie_calendar
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -830,7 +841,7 @@ int TLavanderie_calendar::read(int year)
|
||||
if (year != 0)
|
||||
_year = year;
|
||||
|
||||
TConfig cfg(CONFIG_DITTA);
|
||||
TConfig cfg(CONFIG_DITTA, "lv");
|
||||
const TString val = cfg.get("CAL", "lv", _year);
|
||||
|
||||
if (val.full())
|
||||
@ -843,8 +854,8 @@ int TLavanderie_calendar::read(int year)
|
||||
{
|
||||
const TDate inizio(1, 1, _year);
|
||||
const TDate fine(31, 12, _year);
|
||||
TDate data(inizio);
|
||||
|
||||
TDate data = inizio;
|
||||
for (int i = 0; data <= fine; ++data, i++)
|
||||
_days.set(i, data.is_holiday());
|
||||
}
|
||||
@ -854,29 +865,31 @@ int TLavanderie_calendar::read(int year)
|
||||
|
||||
int TLavanderie_calendar::write() const
|
||||
{
|
||||
TString val(366);
|
||||
const TDate inizio(1, 1, _year);
|
||||
const TDate fine(31, 12, _year);
|
||||
TDate data(inizio);
|
||||
TConfig cfg(CONFIG_DITTA);
|
||||
|
||||
TString val(366);
|
||||
for (int i = 0; data <= fine; ++data, i++)
|
||||
val << (_days[i] ? 'X' : '-');
|
||||
|
||||
TConfig cfg(CONFIG_DITTA, "lv");
|
||||
cfg.set("CAL", val, "lv", true, _year);
|
||||
|
||||
return NOERR;
|
||||
}
|
||||
|
||||
int TLavanderie_calendar::remove() const
|
||||
{
|
||||
TString val(366);
|
||||
TConfig cfg(CONFIG_DITTA);
|
||||
const TDate inizio(1, 1, _year);
|
||||
const TDate fine(31, 12, _year);
|
||||
TDate data(inizio);
|
||||
|
||||
for (int i = 0; data <= fine; ++data, i++)
|
||||
for (TDate data = inizio; data <= fine; ++data)
|
||||
val << data.is_holiday() ? 'X' : '-';
|
||||
|
||||
TConfig cfg(CONFIG_DITTA, "lv");
|
||||
cfg.set("CAL", val, "lv", true, _year);
|
||||
|
||||
return NOERR;
|
||||
}
|
||||
|
||||
@ -1724,6 +1737,35 @@ bool TLV_report::msg_lv_dot(TVariant& var, const char tipo) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TLV_report::msg_lv_tot_art(TVariant& var, const char * field) const
|
||||
{
|
||||
TRecordset* recset = recordset();
|
||||
TReport_field* cf = curr_field();
|
||||
const TString16 fld(field);
|
||||
|
||||
if(recset != NULL && cf != NULL)
|
||||
{
|
||||
const TString80 codart = recset->get("CODART").as_string();
|
||||
const int es = esercizi().last();
|
||||
TRectype from(LF_CLIFOGIAC);
|
||||
real val;
|
||||
|
||||
from.put(CLIFOGIAC_ANNOES, es);
|
||||
from.put(CLIFOGIAC_CODART, codart);
|
||||
|
||||
TCursor c(new TRelation(LF_CLIFOGIAC), "", 3, &from, &from);
|
||||
|
||||
int items = c.items();
|
||||
|
||||
for (c = 0L; c.pos() < items ; ++c) // Scorre le righe
|
||||
val += c.curr().get_real(fld);
|
||||
|
||||
var = val;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TLV_report::msg_lv_consmese(TVariant& var) const
|
||||
{
|
||||
TRecordset* recset = recordset();
|
||||
@ -1805,6 +1847,79 @@ bool TLV_report::get_usr_val(const TString& name, TVariant& var) const
|
||||
if(name.starts_with("#CONSANNO"))
|
||||
return msg_lv_dot(var, 'C');
|
||||
|
||||
if(name.starts_with("#ART."))
|
||||
return msg_lv_tot_art(var, name.mid(5));
|
||||
|
||||
if (name == "#PESO")
|
||||
{
|
||||
var = ZERO;
|
||||
|
||||
const TLV_recordset& recset = (TLV_recordset &) *recordset();
|
||||
const TString4 umri = recset.get(RDOC_UMQTA).as_string();
|
||||
|
||||
|
||||
//se la riga è già espressa in kg non devo fare niente
|
||||
if (umri == _umkg)
|
||||
var = recset.get(RDOC_QTA);
|
||||
// altrimenti
|
||||
else
|
||||
{
|
||||
const TString & codart = recset.get(RDOC_CODARTMAG).as_string();
|
||||
TArticolo & art = cached_article(codart);
|
||||
const real qta = art.convert_to_um(recset.get(RDOC_QTA).as_real(), NULL, umri, false);
|
||||
|
||||
if (art.is_first_um(_umkg))
|
||||
var = qta;
|
||||
else
|
||||
{
|
||||
//leggo e controllo l'unità di misura del peso
|
||||
//leggo e controllo il peso dell'articolo
|
||||
const TString4 ump = art.get(ANAMAG_UMP);
|
||||
const real peso = art.get_real(ANAMAG_PESO);
|
||||
|
||||
if (ump.full() && peso != ZERO)
|
||||
{
|
||||
//preparo una cache sulla tabella delle unità di misura
|
||||
const TRectype& unita = cache().get("%UMS", ump);
|
||||
//leggo e controllo se esiste l'unità di misura di riferimento
|
||||
const TString4 umrif = unita.get("S7");
|
||||
real fatconv = UNO;
|
||||
|
||||
if (umrif == _umkg)
|
||||
{
|
||||
//leggo e controllo il fattore di conversione
|
||||
fatconv = unita.get_real("R10");
|
||||
}
|
||||
if (fatconv != ZERO)
|
||||
{
|
||||
//se tutti i controlli sono andati a buon fine, converto la quantità e la restituisco
|
||||
const real qtaconv = qta * fatconv * peso;
|
||||
var = qtaconv;
|
||||
}
|
||||
}
|
||||
/* else da decidere se gestire
|
||||
{
|
||||
//preparo una cache sulla tabella delle unità di misura
|
||||
const TRectype& unita = cache().get("%UMS", art.first_um());
|
||||
//leggo e controllo se esiste l'unità di misura di riferimento
|
||||
const TString4 umrif = unita.get("S7");
|
||||
|
||||
if (umrif == _umkg)
|
||||
{
|
||||
//leggo e controllo il fattore di conversione
|
||||
const real fatconv = unita.get_real("R10");
|
||||
if (fatconv != ZERO)
|
||||
{
|
||||
//se tutti i controlli sono andati a buon fine, converto la quantità e la restituisco
|
||||
const real qtaconv = qta * fatconv * peso;
|
||||
var = qtaconv;
|
||||
}
|
||||
}
|
||||
} */
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return TDocument_report::get_usr_val(name, var);
|
||||
}
|
||||
|
||||
@ -1834,6 +1949,12 @@ bool TLV_report::set_recordset(const TString& sql)
|
||||
return TDocument_report::set_recordset(sql);
|
||||
}
|
||||
|
||||
TLV_report::TLV_report()
|
||||
{
|
||||
_umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg");
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////
|
||||
//// TDOC_INVENTARIO ////
|
||||
///////////////////////////////
|
||||
|
@ -80,6 +80,8 @@ public:
|
||||
virtual ~TRecmag_lavanderie() {}
|
||||
};
|
||||
|
||||
const TRecmag_lavanderie & lv_art_giac(const TString & codart, const char tipocf, const long codcf, const int indsped, const int last_esc, bool force_reload = false);
|
||||
|
||||
class TArticolo_lavanderie : public TArticolo_giacenza_data
|
||||
{
|
||||
int _anno_lav;
|
||||
@ -144,7 +146,6 @@ public:
|
||||
bool is_holiday(const TDate& date) const;
|
||||
|
||||
TLavanderie_calendar(int year);
|
||||
virtual ~TLavanderie_calendar() {}
|
||||
};
|
||||
|
||||
class TCausale_lavanderie : public TRectype
|
||||
@ -171,8 +172,6 @@ public:
|
||||
//costruttore
|
||||
TCausale_lavanderie(const char* codice);
|
||||
TCausale_lavanderie(const TRectype &r);
|
||||
|
||||
virtual ~TCausale_lavanderie() {}
|
||||
};
|
||||
|
||||
TCausale_lavanderie & cached_causale_lavanderie(const char * codcaus);
|
||||
@ -333,11 +332,13 @@ public:
|
||||
class TLV_report : public TDocument_report
|
||||
{
|
||||
//size_t _first_lv_msg;
|
||||
TString4 _umkg;
|
||||
|
||||
protected:
|
||||
bool msg_lv_nextcons(TVariant& var) const;
|
||||
bool msg_lv_dot(TVariant& var, const char tipo) const;
|
||||
bool msg_lv_consmese(TVariant& var) const;
|
||||
bool msg_lv_tot_art(TVariant& var, const char * field) const;
|
||||
|
||||
//virtual size_t get_usr_words(TString_array& words) const;
|
||||
//virtual bool execute_usr_word(unsigned int opcode, TVariant_stack& stack);
|
||||
@ -346,7 +347,7 @@ protected:
|
||||
public:
|
||||
virtual bool set_recordset(TRecordset* rs) { return TReport::set_recordset(rs); }
|
||||
virtual bool set_recordset(const TString& sql);
|
||||
TLV_report() {}
|
||||
TLV_report();
|
||||
virtual ~TLV_report() {}
|
||||
};
|
||||
|
||||
|
@ -91,7 +91,7 @@ Item_05 = "Elenco Clienti per Articolo", "lv0 -1 lv0400d", "F"
|
||||
Item_06 = "Contratti in scadenza Da/A", "lv0 -1 lv0400b", "F"
|
||||
Item_07 = "Stampa lista dotazioni temporanee scadute", "lv0 -1 lv0400e", "F"
|
||||
Item_08 = "Contratti Cogeco", "lv0 -1 lv0400g", "F"
|
||||
|
||||
Item_09 = "Elenco conguagli diversi da zero", "lv0 -1 lv0400h", "F"
|
||||
|
||||
[LVMENU_030]
|
||||
Caption = "Giri"
|
||||
@ -108,7 +108,7 @@ Module = 41
|
||||
Flags = ""
|
||||
Item_01 = "Generazione automatica", "lv2 -0", "F"
|
||||
Item_02 = "Gestione manuale", "lv2 -1", "F"
|
||||
Item_03 = "Generazione da contratti", "lv2 -9", "F"
|
||||
Item_03 = "Pianificazione da contratti", "lv2 -9", "F"
|
||||
|
||||
[LVMENU_032]
|
||||
Caption = "Stampe"
|
||||
@ -140,7 +140,8 @@ Item_15 = "Evasione Buoni di Prelievo terminale", "lv3 -3 T", "F"
|
||||
Item_16 = "Esportazione dati per Contapezzi Montanari", "lv3 -5 T", "F"
|
||||
Item_17 = "Esportazione dati per Contapezzi Skema", "lv3 -7", "F"
|
||||
Item_18 = "Inventario da terminale", "lv3 -6", "F"
|
||||
Item_19 = "Stampe", [LVMENU_050]
|
||||
Item_19 = "Allineamento circolante", "lv4 -9", "F"
|
||||
Item_20 = "Stampe", [LVMENU_050]
|
||||
|
||||
[LVMENU_050]
|
||||
Caption = "Stampe"
|
||||
@ -160,6 +161,12 @@ Item_10 = "Stampa Statistica per Mangano", "lv0 -1 lv0800a", "F"
|
||||
Item_11 = "Stampa Statistica per Lavatrice", "lv0 -1 lv0900a", "F"
|
||||
Item_12 = "Stampa Inventari", "lv1 -2", "F"
|
||||
Item_13 = "Stampa Articoli per raggruppamento Fiscale", "lv0 -1 lvtd001", "F"
|
||||
Item_14 = "Stampa riepilogo bolle per agente", "lv1 -3", "F"
|
||||
Item_15 = "Stampa prezzo medio per bolla", "lv0 -1 lv0a00a", "F"
|
||||
Item_16 = "Stampa prezzo medio per fattura", "lv0 -1 lv0a00b", "F"
|
||||
Item_17 = "Reporting commerciale", "lv0 -1 repcom", "F"
|
||||
Item_18 = "Stampa valore convenzionale per articolo", "lv0 -1 lv0200b", "F"
|
||||
Item_19 = "Stampa valore dotazione odierna per articolo", "lv0 -1 lv0200c", "F"
|
||||
|
||||
[LVMENU_060]
|
||||
Caption = "Importazioni da COGECO"
|
||||
|
@ -58,7 +58,7 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING FR_DESCRART 50
|
||||
ZOOM FR_DESCRART 50
|
||||
BEGIN
|
||||
PROMPT 25 5 ""
|
||||
USE LF_ANAMAG KEY 2
|
||||
@ -66,6 +66,7 @@ BEGIN
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Codice@8" CODART
|
||||
COPY OUTPUT FR_CODART
|
||||
FIELD DESCR
|
||||
ADD RUN ve2 -3
|
||||
END
|
||||
|
||||
|
@ -5,4 +5,5 @@ CAMPICALC=
|
||||
IMPONIBILE=IMPNS
|
||||
|
||||
[HANDLERS]
|
||||
1 = 152|4104
|
||||
1 = 133|4101
|
||||
2 = 152|4104
|
@ -58,7 +58,7 @@ BEGIN
|
||||
ADD RUN ve2 -3
|
||||
END
|
||||
|
||||
STRING FR_DESCRART 50
|
||||
ZOOM FR_DESCRART 50
|
||||
BEGIN
|
||||
PROMPT 25 5 ""
|
||||
USE LF_ANAMAG KEY 2
|
||||
@ -66,6 +66,7 @@ BEGIN
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Codice@8" CODART
|
||||
COPY OUTPUT FR_CODART
|
||||
FIELD DESCR
|
||||
ADD RUN ve2 -3
|
||||
FIELD DESCR
|
||||
END
|
||||
@ -200,20 +201,41 @@ BEGIN
|
||||
PROMPT 1 10 "@bDotazioni"
|
||||
END
|
||||
|
||||
NUMBER 155 7
|
||||
NUMBER FR_JOLLY1 7
|
||||
BEGIN
|
||||
PROMPT 2 11 "Dotazione Odierna "
|
||||
FIELD DOTOD
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER 159 7
|
||||
NUMBER FR_JOLLY5 7
|
||||
BEGIN
|
||||
PROMPT 2 12 "Dotazione iniziale "
|
||||
FIELD DOTIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER FR_JOLLY2 6 0
|
||||
BEGIN
|
||||
PROMPT 40 11 "Dotazione Temporanea "
|
||||
FIELD DOTMP
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
DATE FR_JOLLY3
|
||||
BEGIN
|
||||
PROMPT 40 12 "Inizio "
|
||||
FIELD DADATATMP
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
DATE FR_JOLLY4
|
||||
BEGIN
|
||||
PROMPT 61 12 "Fine "
|
||||
FIELD ADATATMP
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING FR_CAULAV 3
|
||||
BEGIN
|
||||
PROMPT 2 7 "Cau.Lav. "
|
||||
@ -249,7 +271,7 @@ END
|
||||
|
||||
NUMBER FR_QTA 6 0
|
||||
BEGIN
|
||||
PROMPT 45 8 "Rotti "
|
||||
PROMPT 47 8 "Rotti "
|
||||
FIELD QTA
|
||||
END
|
||||
|
||||
@ -350,14 +372,13 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Analitica" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 14
|
||||
BEGIN
|
||||
PROMPT 1 0 "Contabilita' analitica"
|
||||
PROMPT 1 0 "Contabilità analitica"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
@ -58,7 +58,7 @@ BEGIN
|
||||
ADD RUN ve2 -3
|
||||
END
|
||||
|
||||
STRING FR_DESCRART 50
|
||||
ZOOM FR_DESCRART 50
|
||||
BEGIN
|
||||
PROMPT 25 4 ""
|
||||
USE LF_ANAMAG KEY 2
|
||||
@ -66,6 +66,7 @@ BEGIN
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Codice@8" CODART
|
||||
COPY OUTPUT FR_CODART
|
||||
FIELD DESCR
|
||||
ADD RUN ve2 -3
|
||||
FIELD DESCR
|
||||
END
|
||||
|
Loading…
x
Reference in New Issue
Block a user