git-svn-id: svn://10.65.10.50/branches/R_10_00@23034 c028cbd2-c16b-5b4b-a496-9718f37d4682

This commit is contained in:
guy 2015-02-04 10:54:10 +00:00
parent d689b2fdf0
commit d4c46df06c
65 changed files with 4336 additions and 3037 deletions

View File

@ -1,3 +1,3 @@
168
0
$lvcondv|235|243|191|0|Tabella testate di contratto|||
$lvcondv|0|0|193|0|Tabella testate di contratto|||

View File

@ -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|

View File

@ -1,57 +1,96 @@
#include <applicat.h>
#include <reprint.h>
#include "lvlib.h"
class TStampa_tabelle_lv : public TSkeleton_application
{
protected:
virtual void main_loop();
virtual void print();
};
void TStampa_tabelle_lv::print()
{
WINDOW win = cur_win(); // Trova la finestra corrente di XVT
if (win != NULL_WIN && win != TASK_WIN) // E' una finestra valida?
{
TWindow* w = (TWindow*)xvt_vobj_get_data(win); // Risale alla classe originale
if (w != NULL) // E' una TWindow valida? (sarebbe TMask)
w->stop_run(K_ENTER); // Simula la pressione del bottone stampa
}
}
void TStampa_tabelle_lv::main_loop()
{
// Costruisce il nome del report in base alla riga di comando
TFilename rep;
if (argc() > 2)
{
rep = argv(2);
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
if (ok)
{
TReport_book b;
ok = b.add(r); // Richiede parametri di stampa in base alla maschera omonima
if (ok)
if(b.pages() >0)
b.print_or_preview(); // Stampa effettivamente
else
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"));
return 0;
}
#include <applicat.h>
#include <reprint.h>
#include "lvlib.h"
#include "lv0201.h"
#include "lv0b00.h"
class TStampa_tabelle_lv : public TSkeleton_application
{
protected:
virtual void main_loop();
virtual void print();
};
void TStampa_tabelle_lv::print()
{
WINDOW win = cur_win(); // Trova la finestra corrente di XVT
if (win != NULL_WIN && win != TASK_WIN) // E' una finestra valida?
{
TWindow* w = (TWindow*)xvt_vobj_get_data(win); // Risale alla classe originale
if (w != NULL) // E' una TWindow valida? (sarebbe TMask)
w->stop_run(K_ENTER); // Simula la pressione del bottone stampa
}
}
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.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 = 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;
ok = b.add(r); // Richiede parametri di stampa in base alla maschera omonima
if (ok)
if (b.pages() > 0)
b.print_or_preview(); // Stampa effettivamente
else
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("Stampe lavanderie"));
return 0;
}

View File

@ -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);
@ -17,13 +18,13 @@ public:
// ereditato da TAlmanac_mask
virtual bool is_date_void(int currpage, const TDate& cdate);
virtual void change_year(int newyear);
const TLavanderie_calendar & calendario() const { return _cal; }
const TLavanderie_calendar& calendario() const { return _cal; }
// metodi di accesso
void update_current_calendar(int year);
// apertura del foglio interno di gestione dei documenti
virtual void open_day_mask(const TDate & date);
virtual void open_day_mask(const TDate& date);
// Costruttore
TConf_lavanderie_mask(const char* name);
@ -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;
}

View File

@ -1,134 +1,137 @@
#include "../ci/cimsk.h"
#define GEN 1
#define FAT 2
#define ORF 3
#define ORC 4
#define RIT 5
#define ANT 6
#define CONG 7
#define DOT 8
#define F_CODNUM_GEN 201
#define F_DESNUM_GEN 202
#define F_TIPODOC_GEN 203
#define F_DESTIPODOC_GEN 204
#define F_CODNUM_FAT 205
#define F_DESNUM_FAT 206
#define F_TIPODOC_FAT 207
#define F_DESTIPODOC_FAT 208
#define F_RIFTEST 209
#define F_FELAB_DIF 210
#define F_FELAB_PRO 211
#define F_CODNUM_ORF 212
#define F_DESNUM_ORF 213
#define F_TIPODOC_ORF 214
#define F_DESTIPODOC_ORF 215
#define F_CODNUM_ORC 216
#define F_DESNUM_ORC 217
#define F_TIPODOC_ORC 218
#define F_DESTIPODOC_ORC 219
#define F_CODNUM_INV 220
#define F_DESNUM_INV 221
#define F_TIPODOC_INV 222
#define F_DESTIPODOC_INV 223
#define F_BUONIRIT 224
#define F_BUONIANT 225
#define F_BUONIPREL 226
#define F_DOCCONG 227
#define F_DOCDOT 228
#define F_CAUSLAV 229
#define F_CAUSLAVDESC 230
#define F_CAULVRITDT 231
#define F_CAULVRITDTDE 232
#define F_CAUCARMAG 233
#define F_CAUCARMAGDE 234
#define F_CAUSCARMAG 235
#define F_CAUSCARMAGDE 236
#define F_CODMAG 237
#define F_DESMAG 238
#define F_CODMAGN 239
#define F_DESMAGN 240
#define F_CODMAGC 241
#define F_DESMAGC 242
#define F_CODMAGP 243
#define F_DESMAGP 244
#define F_CODMAGCL 245
#define F_DESMAGCL 246
#define F_UNICONT 247
#define F_QTAMODI 248
#define F_AUTGIRI 249
#define F_ORDGIRI 250
#define F_DATAFISSA 251
#define F_AGGCONG 252
#define F_PERARR 253
#define F_RIFOR 254
#define F_ARTCANFIS 255
#define F_GESTSACA 256
#define F_ALMANAC 257
#define F_USEINDSP 258
#define F_DATABCON 259
#define F_CONDOM 260
#define F_CODARTFIX 261
#define F_DESARTFIX 262
#define F_CODARTCAFIX 263
#define F_DESARTCAFIX 264
#define F_TIPOPR 265
#define F_UMPESO 266
#define F_PATH_CON 267
#define F_SHEET_NAME 268
#define F_PATH_MAN 269
#define F_PATH_LAVA 270
#define F_PATH_PUL 271
#define F_FILE_PUL 272
#define F_CODARTCOFIX 273
#define F_DESARTCOFIX 274
#define F_AGGHEAD 275
#define F_DESTHEAD 276
#define F_ZERONOTE 277
#define F_BACKUP 300
#define S_CODNUM_RIT 101
#define S_TIPODOC_RIT 102
#define S_DESTIPODOC_RIT 103
#define S_STATO_RIT 104
#define S_DESNUM_RIT 105
#define S_CODNUM_PRE 101
#define S_TIPODOC_PRE 102
#define S_DESTIPODOC_PRE 103
#define S_STATO_PRE 104
#define S_DESNUM_PRE 105
#define S_CODNUM_ANT 101
#define S_TIPODOC_ANT 102
#define S_DESTIPODOC_ANT 103
#define S_STATO_ANT 104
#define S_DESNUM_ANT 105
#define S_CODNUM_CONG 101
#define S_TIPODOC_CONG 102
#define S_DESTIPODOC_CONG 103
#define S_STATO_CONG 104
#define S_DESNUM_CONG 105
#define S_CODNUM_DOT 101
#define S_TIPODOC_DOT 102
#define S_DESTIPODOC_DOT 103
#define S_STATO_DOT 104
#define S_DESNUM_DOT 105
#define S_NAME 101
#include "../ci/cimsk.h"
#define GEN 1
#define FAT 2
#define ORF 3
#define ORC 4
#define RIT 5
#define ANT 6
#define CONG 7
#define DOT 8
#define F_CODNUM_GEN 201
#define F_DESNUM_GEN 202
#define F_TIPODOC_GEN 203
#define F_DESTIPODOC_GEN 204
#define F_CODNUM_FAT 205
#define F_DESNUM_FAT 206
#define F_TIPODOC_FAT 207
#define F_DESTIPODOC_FAT 208
#define F_RIFTEST 209
#define F_FELAB_DIF 210
#define F_FELAB_PRO 211
#define F_CODNUM_ORF 212
#define F_DESNUM_ORF 213
#define F_TIPODOC_ORF 214
#define F_DESTIPODOC_ORF 215
#define F_CODNUM_ORC 216
#define F_DESNUM_ORC 217
#define F_TIPODOC_ORC 218
#define F_DESTIPODOC_ORC 219
#define F_CODNUM_INV 220
#define F_DESNUM_INV 221
#define F_TIPODOC_INV 222
#define F_DESTIPODOC_INV 223
#define F_BUONIRIT 224
#define F_BUONIANT 225
#define F_BUONIPREL 226
#define F_DOCCONG 227
#define F_DOCDOT 228
#define F_CAUSLAV 229
#define F_CAUSLAVDESC 230
#define F_CAULVRITDT 231
#define F_CAULVRITDTDE 232
#define F_CAUCARMAG 233
#define F_CAUCARMAGDE 234
#define F_CAUSCARMAG 235
#define F_CAUSCARMAGDE 236
#define F_CODMAG 237
#define F_DESMAG 238
#define F_CODMAGN 239
#define F_DESMAGN 240
#define F_CODMAGC 241
#define F_DESMAGC 242
#define F_CODMAGP 243
#define F_DESMAGP 244
#define F_CODMAGCL 245
#define F_DESMAGCL 246
#define F_UNICONT 247
#define F_QTAMODI 248
#define F_AUTGIRI 249
#define F_ORDGIRI 250
#define F_DATAFISSA 251
#define F_AGGCONG 252
#define F_PERARR 253
#define F_RIFOR 254
#define F_ARTCANFIS 255
#define F_GESTSACA 256
#define F_ALMANAC 257
#define F_USEINDSP 258
#define F_DATABCON 259
#define F_CONDOM 260
#define F_CODARTFIX 261
#define F_DESARTFIX 262
#define F_CODARTCAFIX 263
#define F_DESARTCAFIX 264
#define F_TIPOPR 265
#define F_UMPESO 266
#define F_PATH_CON 267
#define F_SHEET_NAME 268
#define F_PATH_MAN 269
#define F_PATH_LAVA 270
#define F_PATH_PUL 271
#define F_FILE_PUL 272
#define F_CODARTCOFIX 273
#define F_DESARTCOFIX 274
#define F_AGGHEAD 275
#define F_DESTHEAD 276
#define F_RIFTESTNUM 277
#define F_DOTSTO 278
#define F_BACKUP 300
#define S_CODNUM_RIT 101
#define S_TIPODOC_RIT 102
#define S_DESTIPODOC_RIT 103
#define S_STATO_RIT 104
#define S_DESNUM_RIT 105
#define S_CODNUM_PRE 101
#define S_TIPODOC_PRE 102
#define S_DESTIPODOC_PRE 103
#define S_STATO_PRE 104
#define S_DESNUM_PRE 105
#define S_CODNUM_ANT 101
#define S_TIPODOC_ANT 102
#define S_DESTIPODOC_ANT 103
#define S_STATO_ANT 104
#define S_DESNUM_ANT 105
#define S_CODNUM_CONG 101
#define S_TIPODOC_CONG 102
#define S_DESTIPODOC_CONG 103
#define S_STATO_CONG 104
#define S_DESNUM_CONG 105
#define S_CODNUM_DOT 101
#define S_TIPODOC_DOT 102
#define S_DESTIPODOC_DOT 103
#define S_STATO_DOT 104
#define S_DESNUM_DOT 105
#define S_NAME 101

File diff suppressed because it is too large Load Diff

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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
#define F_ANNOES 205
#include "lv0100c.h"

View File

@ -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

View File

@ -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

View File

@ -4,4 +4,7 @@
#define F_DARAGSOC 202
#define F_ACODCF 203
#define F_ARAGSOC 204
#define F_ANNOES 207
#define F_ANNOES 207
#include "lv0100c.h"

View File

@ -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" />

View File

@ -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
View 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
View 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

View File

@ -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

View File

@ -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))&#26;&#26;(BETWEEN(33.CODCF,#F_CODCF_FROM,#F_CODCF_TO))&#26;&#26;(BETWEEN(CODART,#F_CODARTI_FROM,#F_CODARTI_TO))&#26;&#26;(BETWEEN(CODAGG1,#F_CODCAUSA_FROM,#F_CODCAUSA_TO)))
SELECT BETWEEN(33.DATADOC,#F_DATA_FROM,#F_DATA_TO)&#26;&#26;STR(BETWEEN(33.CODCF,#F_CODCF_FROM,#F_CODCF_TO))&#26;&#26;BETWEEN(CODART,#F_CODARTI_FROM,#F_CODARTI_TO)&#26;&#26;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>

View File

@ -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,16 +65,15 @@ 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
BEGIN
PROMPT 1 5 "@b Parametri Data"
PROMPT 1 5 "@bParametri Data"
END
DATE F_DATA_DA
@ -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,9 +103,18 @@ 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 "@b Parametri Articolo"
PROMPT 1 8 "@bParametri Articolo"
END
STRING F_CODART_DA 20
@ -154,7 +172,7 @@ END
GROUPBOX DLG_NULL 80 4
BEGIN
PROMPT 1 12 "@b Parametri Causale"
PROMPT 1 12 "@bParametri Causale"
END
STRING F_CODCAUS_DA 3

View File

@ -221,7 +221,7 @@ MESSAGE RESET,F3.2000</prescript>
</section>
<sql>USE 34 KEY 2
SELECT (BETWEEN(33.TIPODOC,#F_TIPODOC,#F_TIPODOC)&#26;&#26;(BETWEEN(33.CODCF,#F_CODCF,#F_CODCF))&#26;&#26;(BETWEEN(33.DATADOC,#F_DATADOC_DA,#F_DATADOC_A))&#26;&#26;(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

View File

@ -5,4 +5,6 @@
#define F_CODNUM_1 203
#define F_DESCODNUM_1 204
#define F_TIPODOC_1 205
#define F_DESTIPODOC_1 206
#define F_DESTIPODOC_1 206
#define F_DA_ANNO_1 207
#define F_A_ANNO_1 208

View File

@ -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)&#26;&#26;(BETWEEN(33.DATADOC,#F_DATADOC_DA,#F_DATADOC_A))&#26;&#26;(CODART!=''))
SELECT ((#F_TIPODOC=="")||(33.TIPODOC==#F_TIPODOC))&#26;&#26;BETWEEN(33.DATADOC,#F_DATADOC_DA,#F_DATADOC_A)&#26;&#26;(34.CODART!="")&#26;&#26;(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>

View File

@ -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

View File

@ -5,4 +5,6 @@
#define F_CODNUM_1 203
#define F_DESCODNUM_1 204
#define F_TIPODOC_1 205
#define F_DESTIPODOC_1 206
#define F_DESTIPODOC_1 206
#define F_DA_ANNO_1 207
#define F_A_ANNO_1 208

View File

@ -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)&#26;&#26;(BETWEEN(33.DATADOC,#F_DATADOC_DA,#F_DATADOC_A))&#26;&#26;(CODART!=''))
SELECT ((#F_TIPODOC!="")||(33.TIPODOC==#F_TIPODOC))&#26;&#26;BETWEEN(33.DATADOC,#F_DATADOC_DA,#F_DATADOC_A)&#26;&#26;(34.CODART!="")&#26;&#26;(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>

View File

@ -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
View 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>#102&#2F;#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>#102&#2F;#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
View 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>#102&#2F;#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>#102&#2F;#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>

View File

@ -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[])

View File

@ -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)

View File

@ -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

View File

@ -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"

View File

@ -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 &#26;AUT TO 167 ALIAS 301 INTO CODTAB==CODAUT
JOIN &#26;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>

View File

@ -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

View File

@ -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,8 +132,233 @@ 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 = 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);
if (ag_selected > 0L && atol(codaut) != ag_selected)
return true;
//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;
//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;
}
//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);
@ -143,9 +369,9 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
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 int anno = _msk->get_bool(F_DTEMIS) ? _msk->get_date(F_DTDOC).year() : dtcons.year();
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;
@ -161,14 +387,11 @@ 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
if(tcont.get(LVCONDV_CODNUM).full() && _buono == 'C')
if (tcont.get(LVCONDV_CODNUM).full() && _buono == 'C')
{
codnum = tcont.get(LVCONDV_CODNUM);
tpdoc = tcont.get(LVCONDV_TPDOC);
@ -186,7 +409,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
TString query2;
query2 << "USE DOC\n"
<< "FROM PROVV=\"D\" ANNO=" << anno << " CODNUM=\"" << codnum << "\"\n"
<< "TO PROVV=\"D\" ANNO=" << anno << " CODNUM=\"" << codnum << "\"";
<< "TO PROVV=\"D\" ANNO=" << anno << " CODNUM=\"" << codnum << "\"";
TISAM_recordset bolle(query2);
if (bolle.move_last())
_ndoc = bolle.get(DOC_NDOC).as_int();
@ -197,13 +420,13 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
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);
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 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,8 +493,9 @@ 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;
default : break;
}
//creo il documento corretto riempiendo i campi che già conosco
@ -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,16 +707,14 @@ 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())
if (rit.get("S10").full())
magazzino = rit.get("S10").mid(0,5);
else
magazzino << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGN");
if(con.get("S10").full())
if (con.get("S10").full())
magazzinoc = con.get("S10").mid(0,5);
else
magazzinoc << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGC");
@ -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)
@ -728,15 +957,13 @@ bool TGenera_documenti_app::numerazione_ddt(TString& codnum, TString& tpdoc, TSt
bool TGenera_documenti_app::numerazione_drit(const int cod, TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const
{
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);
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,21 +1144,50 @@ 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;
for (dadata; dadata <= adata; ++dadata)
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
TString query;
query << "USE DOC "
<< "SELECT (ANSI(G1:DATAPRCO)<=#ADATA)&&"
<< "(CODNUM=\"" << codnum << "\")&&(TIPODOC=\"" << tpdoc << "\")&&"
<< "(STATO=\"" << statoi <<"\")&&"
@ -939,48 +1195,52 @@ bool TGenera_documenti_app::transfer()
<< "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n"
<< "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n";
TISAM_recordset docritiri(query);
docritiri.set_var("#ADATA", adata);
docritiri.set_var("#CODCF", codcli);
TISAM_recordset docritiri(query);
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))
break;
if (_msk->field(F_CODCF).empty())
codcli = docritiri.get(DOC_CODCF).as_int();
//instanzio un recordset che contiene tutti i documenti di interesse
TString query = "USE LVRCONSPLAN KEY 2";
query << " SELECT (CODCF=" << codcli << ")";
if (coditi || codaut)
for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next())
{
if (coditi > 0)
query << "&&(CODITI=" << coditi << ")";
if (!pi.add_status())
break;
if (codaut > 0)
query << "&&(CODAUT=" << codaut << ")";
}
if (_msk->field(F_CODCF).empty())
codcli = docritiri.get(DOC_CODCF).as_int();
// instanzio un recordset che contiene tutti i documenti di interesse
TString query = "USE LVRCONSPLAN KEY 2";
query << " SELECT (CODCF=" << codcli << ")";
query << "\nFROM DTCONS=#DADATA\n";
query << "TO DTCONS=#ADATA";
if (coditi || codaut)
{
if (coditi > 0)
query << "&&(CODITI=" << coditi << ")";
TISAM_recordset plan(query);
plan.set_var("#DADATA", dadata);
plan.set_var("#ADATA", dadata);
if (codaut > 0)
query << "&&(CODAUT=" << codaut << ")";
}
query << "\nFROM DTCONS=#DADATA";
query << "\nTO DTCONS=#ADATA";
if (plan.move_first())
{
_quantita.destroy();
_quantita_ritirata.destroy();
crea_documento(plan, rep, numdocgen, documenti);
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(plan, rep, numdocgen, documenti);
}
codcli = _msk->get_long(F_CODCF);
}
}
codcli = _msk->get_long(F_CODCF);
}
if (_msk->get_bool(F_STAMPA) && documenti.items() > 0)
@ -1014,9 +1274,16 @@ bool TGenera_documenti_app::transfer()
if (tmp.exist())
{
TString cmdline; cmdline << "ve1 -2 -i" << tmp;
TExternal_app app(cmdline);
app.run();
{
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[])

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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)
{
const long codcli = get(0).as_int();
if (_max_column < column) _max_column = column;
real * r = (real *) _max_cli_col.objptr(codcli);
if (r == NULL)
{
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) {}
};
r = new real;
_max_cli_col.add(r, codcli);
}
if ((unsigned int )r->integer() < column) *r = column;
}
struct TStrutturaData: public TObject
unsigned int TRiepBolle_recordset::get_curr_max_column() const
{
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) {}
};
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
void TRiepBolle_app::elabora(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;
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 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 << "')&&";
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 << "'";
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')&&";
}
TRectype from(LF_CLIFO); from.put(CLI_TIPOCF, "C");
TRectype to(from);
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 (from_cli > 0L)
from.put(CLI_CODCF, from_cli);
if (to_cli > 0L)
to.put(CLI_CODCF, to_cli);
if(isArticolo)
orderBy << "BY DOC.CODCF CODART DOC.DATADOC NDOC\n";
else
orderBy << "BY DOC.CODCF DOC.DATADOC NDOC\n";
TRelation rel(LF_CLIFO);
TCursor cli(&rel, "", 1, &from, &to);
const long ncli = cli.items();
TProgress_monitor pi_cli(ncli, TR("Estrazione clienti"));
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;
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);
//se la causale è di reso devo leggere il ritirato e non il consegnato
long qta = 0L;
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());
if(cau.is_reso() && mask.get_bool(F_CHECK_NO_RESI))
qta = riep.get("QTAGG1").as_int();
else
qta = riep.get("QTA").as_int();
riepilogo.add(count,cliente,articolo,descr,dataDoc,numeroDoc,qta);
count++;
}
}
datebolle.add(ggmm, id);
TRiepBolle_report rep;
bool stampa = rep.load("lv2700a");
TRiepBolle_recordset* riep_set = new TRiepBolle_recordset();
rep.set_recordset(riep_set);
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
{
if (!pi.addstatus(1))
break;
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)
for (int r = 1; r <= nrows; r++)
{
riepilogoData.destroy();
riepilogoData2.destroy();
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
TCausale_lavanderie & cau = cached_causale_lavanderie(row.get(RDOC_CODAGG1));
real qta;
//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;
}
}
}
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++;
}
}
if (print_resi && cau.is_reso())
qta = row.get_real(RDOC_QTAGG1);
else
{
if(!overflow_date.ok())
{
overflow_date = s._dataDoc;
overflow_clifo = s._cliente;
}
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);
}
break;
}
else
{
contatore++;
contatore++;
riep_set->set(contatore,TVariant(long (0)));
contatore++;
}
}
}
if (qta != ZERO)
{
TArray * riep_row = (TArray *) riepilogo.objptr(articolo);
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;
}
}
}
TProgress_monitor pi(riepilogo.items(), TR("Costruzione report"));
int maxpos = 0L;
const int cols = nbolle.items();
TString_array keys;
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
{
TArray * row = (TArray *) riepilogo.objptr(*key);
int col = 0;
riep_set->new_rec();
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)
{
riep_set->set(col++, datebolle.row(c));
riep_set->set(col++, nbolle.row(c));
const real * qta = (real *) row->objptr(c);
riep_set->set(col++, qta == NULL ? EMPTY_STRING : qta->stringa(10, 0));
riep_set->set_max_column(col);
}
}
#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)
{
if (b.pages() > 0)
b.print_or_preview(); // Stampa effettivamente
else
warning_box (TR("Nessun record estratto per i parametri inseriti"));
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[])
{

View File

@ -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

View File

@ -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" />

View File

@ -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

View File

@ -65,53 +65,49 @@ 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 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";
select << "USE RDOC KEY 3\n";
select << "SELECT (DOC.TIPODOC='" << tipodoc << "')";
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)){
join << "JOIN &LVCAU TO RDOC ALIAS 2000 INTO CODTAB==CODAGG1\n";
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)){
join << "JOIN %CAU TO &LVCAU ALIAS 3000 INTO CODTAB==S2\n";
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)
if (!isAnno)
{
int annoInizio = dataInizio.year();
int annoFine = dataFine.year();
if(annoInizio!=annoFine)
{
return erroreBox(TR("le date non fanno parte dello stesso anno!"));;
}
const int annoInizio = dataInizio.year();
const int annoFine = dataFine.year();
if (annoInizio != annoFine)
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,30 +177,28 @@ 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;
TDate dataDoc;
TString80 articolo;
TString descr;
int numeroDoc;
long cliente;
long qta;
long cliente, qta;
for(bool ok = riep.move_first();ok;ok=riep.move_next())
for (bool ok = riep.move_first(); ok; ok=riep.move_next())
{
dataDoc = riep.get("DOC.DATADOC").as_date();
articolo = riep.get("CODART").as_string();
@ -297,7 +275,7 @@ void TVend_cli_app:: elabora(const TMask& mask)const
}
//Stampa Ultimo record se ne ha fatto almeno 1
if(!start)
if (!start)
{
riep_set->new_rec();
colonna = 0;
@ -309,7 +287,7 @@ void TVend_cli_app:: elabora(const TMask& mask)const
colonna++;
riep_set->set(colonna,TVariant(descrOld));
for(int a = 1; a<13; a++)
for (int a = 1; a<13; a++)
{
//colonna=3
riep_set->set((colonna+a),TVariant(qtaArray[a]));
@ -321,7 +299,7 @@ void TVend_cli_app:: elabora(const TMask& mask)const
//riep_set->save_as("c:\\riepilogoBolla.txt");
//Se il report esiste..
if(stampa)
if (stampa)
{
//carica tutte le variabili del report.
rep.mask2report(mask);
@ -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)
{
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;
}

View File

@ -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

View File

@ -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);

View File

@ -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;
}

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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,47 +1278,38 @@ 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();
TSheet_field& sheet = mask.sfield(F_SHEET);
const long codcf = mask.get_long(F_CODCF);
const int indsped = mask.get_int(F_CODINDSP);
TDate datadoc = mask.get_date(F_DATADOC);
const TLaundry_contract cont(codcf, indsped, datadoc);
const int codcont = cont.get_int(LVCONDV_CODCONT);
TLocalisamfile rcondv(LF_LVRCONDV);
FOR_EACH_DOC_ROW_BACK(d, r, row)
if (ini_get_bool(CONFIG_DITTA, "lv", "Aggcong"))
{
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);
}
TDocumento_mask& mask = (TDocumento_mask&) m;
TDocumento& d = mask.doc();
return true;
TSheet_field& sheet = mask.sfield(F_SHEET);
const long codcf = mask.get_long(F_CODCF);
const int indsped = mask.get_int(F_CODINDSP);
TDate datadoc = mask.get_date(F_DATADOC);
const TLaundry_contract cont(codcf, indsped, datadoc);
const int codcont = cont.get_int(LVCONDV_CODCONT);
TLocalisamfile rcondv(LF_LVRCONDV);
FOR_EACH_DOC_ROW_BACK(d, r, row)
{
TRiga_documento& rdoc = (TRiga_documento&)*row;
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));
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);
}
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,19 +1434,26 @@ 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)
{
TGestione_buoni_msk& mask = (TGestione_buoni_msk&) m;
TGestione_buoni_msk& mask = (TGestione_buoni_msk&)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;
}
}

View File

@ -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();
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -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)
///////////////////////////////////////////////////////////
// TCache_articoli_lavanderie
///////////////////////////////////////////////////////////
class TCache_articoli_lavanderie : public TRecord_cache
{
TString4 causale = rcont.get(LVRCONDV_CAUSLAV);
protected:
virtual TObject* rec2obj(const TRectype& rec) const { return new TArticolo_lavanderie(rec);}
if (causale.blank() || atoi(causale) == 0)
causale = ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV");
public:
TArticolo_lavanderie& lav(const char* key) { return (TArticolo_lavanderie&)query(key); }
if (is_consegna)
TCache_articoli_lavanderie();
virtual ~TCache_articoli_lavanderie() { }
};
TCache_articoli_lavanderie::TCache_articoli_lavanderie()
: TRecord_cache(LF_ANAMAG, 1)
{
const TString& causale_consegna = cache().get("&CAU", causale, "S5");
if (causale_consegna.full())
causale = causale_consegna;
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;
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 ////
///////////////////////////////
@ -1999,4 +2120,4 @@ void TDoc_inventario_row::set_magazzino(const char* mag)
void TDoc_inventario_row::set_magazzinoc(const char* magc)
{
_rinv.put(RDOC_CODMAGC, magc);
}
}

View File

@ -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
@ -169,10 +170,8 @@ public:
const TCausale_magazzino& causale_ritiro() const {return cached_causale_magazzino(caurit());}
const TCausale_magazzino& causale_consegna() const {return cached_causale_magazzino(caucon());}
//costruttore
TCausale_lavanderie(const char * codice);
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() {}
};

View File

@ -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"

View File

@ -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

View File

@ -5,4 +5,5 @@ CAMPICALC=
IMPONIBILE=IMPNS
[HANDLERS]
1 = 152|4104
1 = 133|4101
2 = 152|4104

View File

@ -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

View File

@ -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