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 168
0 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 168
48 49
CODCONT|3|6|0|Codice Contratto CODCONT|3|6|0|Codice Contratto
STATUS|1|2|0|Stato del contratto, <CH>chiuso, <CO>confermato, <DC>da confermare STATUS|1|2|0|Stato del contratto, <CH>chiuso, <CO>confermato, <DC>da confermare
PROPOSTA|8|1|0|Proposta di contratto 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 TPDOC|1|4|0|Tipo documento Buono di Consegna
REDDI|1|5|0|Reddività REDDI|1|5|0|Reddività
RAGGCGRUP|8|1|0|Raggruppa sul capogruppo RAGGCGRUP|8|1|0|Raggruppa sul capogruppo
GIOCHI|2|1|0|Giorno di chiusura
1 1
CODCF+CODCONT| CODCF+CODCONT|

View File

@ -1,57 +1,96 @@
#include <applicat.h> #include <applicat.h>
#include <reprint.h> #include <reprint.h>
#include "lvlib.h" #include "lvlib.h"
#include "lv0201.h"
class TStampa_tabelle_lv : public TSkeleton_application #include "lv0b00.h"
{
protected: class TStampa_tabelle_lv : public TSkeleton_application
virtual void main_loop(); {
virtual void print(); protected:
}; virtual void main_loop();
virtual void print();
void TStampa_tabelle_lv::print() };
{
WINDOW win = cur_win(); // Trova la finestra corrente di XVT void TStampa_tabelle_lv::print()
if (win != NULL_WIN && win != TASK_WIN) // E' una finestra valida? {
{ WINDOW win = cur_win(); // Trova la finestra corrente di XVT
TWindow* w = (TWindow*)xvt_vobj_get_data(win); // Risale alla classe originale if (win != NULL_WIN && win != TASK_WIN) // E' una finestra valida?
if (w != NULL) // E' una TWindow valida? (sarebbe TMask) {
w->stop_run(K_ENTER); // Simula la pressione del bottone stampa 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 void TStampa_tabelle_lv::main_loop()
TFilename rep; {
if (argc() > 2) bool repcom = false;
{ // Costruisce il nome del report in base alla riga di comando
rep = argv(2); TFilename rep;
rep.strip("-&%$^"); if (argc() > 2)
if (rep.len() == 3) {
rep.insert("lvst"); rep = argv(2); rep.lower();
rep.ext("rep"); if (rep == "repcom")
} {
rep.cut(0);
TLV_report r; repcom = true;
bool ok = r.load(rep); // Controlla l'effettiva esistenza del report }
if (ok) else
{ {
TReport_book b; rep.strip("-&%$^");
ok = b.add(r); // Richiede parametri di stampa in base alla maschera omonima if (rep.len() == 3)
if (ok) rep.insert("lvst");
if(b.pages() >0) rep.ext("rep");
b.print_or_preview(); // Stampa effettivamente }
else }
warning_box (TR("Nessun record estratto per i parametri inseriti"));
} TLV_report r;
}
bool ok = true;
int lv0200(int argc, char* argv[]) while (ok)
{ {
TStampa_tabelle_lv app; if (repcom)
app.run(argc, argv, TR("Stampa tabelle")); ok = handle_repcom(r);
return 0; 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 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: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -17,13 +18,13 @@ public:
// ereditato da TAlmanac_mask // ereditato da TAlmanac_mask
virtual bool is_date_void(int currpage, const TDate& cdate); virtual bool is_date_void(int currpage, const TDate& cdate);
virtual void change_year(int newyear); virtual void change_year(int newyear);
const TLavanderie_calendar & calendario() const { return _cal; } const TLavanderie_calendar& calendario() const { return _cal; }
// metodi di accesso // metodi di accesso
void update_current_calendar(int year); void update_current_calendar(int year);
// apertura del foglio interno di gestione dei documenti // 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 // Costruttore
TConf_lavanderie_mask(const char* name); TConf_lavanderie_mask(const char* name);
@ -91,7 +92,6 @@ protected:
public: public:
TConf_Lavanderie() : TConfig_application( CONFIG_DITTA ), _mask(NULL) {} TConf_Lavanderie() : TConfig_application( CONFIG_DITTA ), _mask(NULL) {}
virtual ~TConf_Lavanderie( ){ }
}; };
TMask* TConf_Lavanderie::create_mask(const TFilename & f) 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( ) bool TConf_Lavanderie::user_create( )
{ {
TConfig conf(CONFIG_DITTA ); ini_set_string(CONFIG_DITTA, "lv", "EdMask", "lv0300a" );
conf.set( "EdMask", "lv0300a", "lv" );
return true; return true;
} }

View File

@ -1,134 +1,137 @@
#include "../ci/cimsk.h" #include "../ci/cimsk.h"
#define GEN 1 #define GEN 1
#define FAT 2 #define FAT 2
#define ORF 3 #define ORF 3
#define ORC 4 #define ORC 4
#define RIT 5 #define RIT 5
#define ANT 6 #define ANT 6
#define CONG 7 #define CONG 7
#define DOT 8 #define DOT 8
#define F_CODNUM_GEN 201 #define F_CODNUM_GEN 201
#define F_DESNUM_GEN 202 #define F_DESNUM_GEN 202
#define F_TIPODOC_GEN 203 #define F_TIPODOC_GEN 203
#define F_DESTIPODOC_GEN 204 #define F_DESTIPODOC_GEN 204
#define F_CODNUM_FAT 205 #define F_CODNUM_FAT 205
#define F_DESNUM_FAT 206 #define F_DESNUM_FAT 206
#define F_TIPODOC_FAT 207 #define F_TIPODOC_FAT 207
#define F_DESTIPODOC_FAT 208 #define F_DESTIPODOC_FAT 208
#define F_RIFTEST 209 #define F_RIFTEST 209
#define F_FELAB_DIF 210 #define F_FELAB_DIF 210
#define F_FELAB_PRO 211 #define F_FELAB_PRO 211
#define F_CODNUM_ORF 212 #define F_CODNUM_ORF 212
#define F_DESNUM_ORF 213 #define F_DESNUM_ORF 213
#define F_TIPODOC_ORF 214 #define F_TIPODOC_ORF 214
#define F_DESTIPODOC_ORF 215 #define F_DESTIPODOC_ORF 215
#define F_CODNUM_ORC 216 #define F_CODNUM_ORC 216
#define F_DESNUM_ORC 217 #define F_DESNUM_ORC 217
#define F_TIPODOC_ORC 218 #define F_TIPODOC_ORC 218
#define F_DESTIPODOC_ORC 219 #define F_DESTIPODOC_ORC 219
#define F_CODNUM_INV 220 #define F_CODNUM_INV 220
#define F_DESNUM_INV 221 #define F_DESNUM_INV 221
#define F_TIPODOC_INV 222 #define F_TIPODOC_INV 222
#define F_DESTIPODOC_INV 223 #define F_DESTIPODOC_INV 223
#define F_BUONIRIT 224 #define F_BUONIRIT 224
#define F_BUONIANT 225 #define F_BUONIANT 225
#define F_BUONIPREL 226 #define F_BUONIPREL 226
#define F_DOCCONG 227 #define F_DOCCONG 227
#define F_DOCDOT 228 #define F_DOCDOT 228
#define F_CAUSLAV 229 #define F_CAUSLAV 229
#define F_CAUSLAVDESC 230 #define F_CAUSLAVDESC 230
#define F_CAULVRITDT 231 #define F_CAULVRITDT 231
#define F_CAULVRITDTDE 232 #define F_CAULVRITDTDE 232
#define F_CAUCARMAG 233 #define F_CAUCARMAG 233
#define F_CAUCARMAGDE 234 #define F_CAUCARMAGDE 234
#define F_CAUSCARMAG 235 #define F_CAUSCARMAG 235
#define F_CAUSCARMAGDE 236 #define F_CAUSCARMAGDE 236
#define F_CODMAG 237 #define F_CODMAG 237
#define F_DESMAG 238 #define F_DESMAG 238
#define F_CODMAGN 239 #define F_CODMAGN 239
#define F_DESMAGN 240 #define F_DESMAGN 240
#define F_CODMAGC 241 #define F_CODMAGC 241
#define F_DESMAGC 242 #define F_DESMAGC 242
#define F_CODMAGP 243 #define F_CODMAGP 243
#define F_DESMAGP 244 #define F_DESMAGP 244
#define F_CODMAGCL 245 #define F_CODMAGCL 245
#define F_DESMAGCL 246 #define F_DESMAGCL 246
#define F_UNICONT 247 #define F_UNICONT 247
#define F_QTAMODI 248 #define F_QTAMODI 248
#define F_AUTGIRI 249 #define F_AUTGIRI 249
#define F_ORDGIRI 250 #define F_ORDGIRI 250
#define F_DATAFISSA 251 #define F_DATAFISSA 251
#define F_AGGCONG 252 #define F_AGGCONG 252
#define F_PERARR 253 #define F_PERARR 253
#define F_RIFOR 254 #define F_RIFOR 254
#define F_ARTCANFIS 255 #define F_ARTCANFIS 255
#define F_GESTSACA 256 #define F_GESTSACA 256
#define F_ALMANAC 257 #define F_ALMANAC 257
#define F_USEINDSP 258 #define F_USEINDSP 258
#define F_DATABCON 259 #define F_DATABCON 259
#define F_CONDOM 260 #define F_CONDOM 260
#define F_CODARTFIX 261 #define F_CODARTFIX 261
#define F_DESARTFIX 262 #define F_DESARTFIX 262
#define F_CODARTCAFIX 263 #define F_CODARTCAFIX 263
#define F_DESARTCAFIX 264 #define F_DESARTCAFIX 264
#define F_TIPOPR 265 #define F_TIPOPR 265
#define F_UMPESO 266 #define F_UMPESO 266
#define F_PATH_CON 267 #define F_PATH_CON 267
#define F_SHEET_NAME 268 #define F_SHEET_NAME 268
#define F_PATH_MAN 269 #define F_PATH_MAN 269
#define F_PATH_LAVA 270 #define F_PATH_LAVA 270
#define F_PATH_PUL 271 #define F_PATH_PUL 271
#define F_FILE_PUL 272 #define F_FILE_PUL 272
#define F_CODARTCOFIX 273 #define F_CODARTCOFIX 273
#define F_DESARTCOFIX 274 #define F_DESARTCOFIX 274
#define F_AGGHEAD 275 #define F_AGGHEAD 275
#define F_DESTHEAD 276 #define F_DESTHEAD 276
#define F_ZERONOTE 277
#define F_RIFTESTNUM 277
#define F_BACKUP 300
#define F_DOTSTO 278
#define S_CODNUM_RIT 101
#define S_TIPODOC_RIT 102 #define F_BACKUP 300
#define S_DESTIPODOC_RIT 103
#define S_STATO_RIT 104 #define S_CODNUM_RIT 101
#define S_DESNUM_RIT 105 #define S_TIPODOC_RIT 102
#define S_DESTIPODOC_RIT 103
#define S_CODNUM_PRE 101 #define S_STATO_RIT 104
#define S_TIPODOC_PRE 102 #define S_DESNUM_RIT 105
#define S_DESTIPODOC_PRE 103
#define S_STATO_PRE 104 #define S_CODNUM_PRE 101
#define S_DESNUM_PRE 105 #define S_TIPODOC_PRE 102
#define S_DESTIPODOC_PRE 103
#define S_CODNUM_ANT 101 #define S_STATO_PRE 104
#define S_TIPODOC_ANT 102 #define S_DESNUM_PRE 105
#define S_DESTIPODOC_ANT 103
#define S_STATO_ANT 104 #define S_CODNUM_ANT 101
#define S_DESNUM_ANT 105 #define S_TIPODOC_ANT 102
#define S_DESTIPODOC_ANT 103
#define S_CODNUM_CONG 101 #define S_STATO_ANT 104
#define S_TIPODOC_CONG 102 #define S_DESNUM_ANT 105
#define S_DESTIPODOC_CONG 103
#define S_STATO_CONG 104 #define S_CODNUM_CONG 101
#define S_DESNUM_CONG 105 #define S_TIPODOC_CONG 102
#define S_DESTIPODOC_CONG 103
#define S_CODNUM_DOT 101 #define S_STATO_CONG 104
#define S_TIPODOC_DOT 102 #define S_DESNUM_CONG 105
#define S_DESTIPODOC_DOT 103
#define S_STATO_DOT 104 #define S_CODNUM_DOT 101
#define S_DESNUM_DOT 105 #define S_TIPODOC_DOT 102
#define S_DESTIPODOC_DOT 103
#define S_NAME 101 #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 <automask.h>
#include <colmask.h> #include <colmask.h>
#include <defmask.h>
#include <execp.h> #include <execp.h>
#include <progind.h> #include <progind.h>
#include <relapp.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); 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 //questo pezzo serve per gestire enable e disable dei campi in modo corretto
//senza massage in maschera, sia sullo sheet che sul dettaglio //senza massage in maschera, sia sullo sheet che sul dettaglio
TMask& rowmask = ss.sheet_mask(); 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 _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 //se ho cancellato una riga dello sheet, chiedo conferma che sia effettivamente quello che si vuole fare
if (e == se_query_del) 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 //se ho scritto un articolo diverso da quello che esisteva prima
//e se si desidera veramente modificarlo, allora permetto la modifica //e se si desidera veramente modificarlo, allora permetto la modifica
//e forzo l'updatre della riga, altrimenti riscrivo l'articolo che c'era prima //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(prezzo.string(), ss.cid2index(S_PREZZOST));
row.add(_artrig, ss.cid2index(S_CODART)); 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()); ss.force_update(ss.selected());
} }
//se all'articolo è associata un'unità di misura, la propongo //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_DOTIN:
case S_DOTOD: case S_DOTOD:
case S_DOTTMP: case S_DOTTMP:
{
if (e == fe_modify) if (e == fe_modify)
{ {
TString str; TString str;
str << "ATTENZIONE: Una quantità risulta modificata a mano!\nDopo questa operazione i totali dei movimenti" str << "ATTENZIONE: Una quantità risulta modificata a mano; dopo questa operazione i totali dei movimenti"
<< "di magazzino\npotrebbero non corrispondere ai numeri qui salvati."; << "di magazzino potrebbero non corrispondere ai numeri qui salvati";
warning_box(str); warning_box(str);
TSheet_field& ss = sfield(F_RIGHE); 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())); row.add(qta, ss.cid2index(o.dlg()));
//ss.force_update(rigasel); //ss.force_update(rigasel);
} }
}
break; break;
case DLG_PLANNING: case DLG_PLANNING:
//se viene premuto il bottone "Giri", lancia lv0500 (generatore automatico dei giri) //se viene premuto il bottone "Giri", lancia lv0500 (generatore automatico dei giri)

View File

@ -54,6 +54,8 @@
#define F_REDDI 247 #define F_REDDI 247
#define F_RAGGCGRUP 252 #define F_RAGGCGRUP 252
#define F_COMMENTI 253
#define F_GIOCHI 254
// Campi del dettalio sotto lo spreadsheet // Campi del dettalio sotto lo spreadsheet

View File

@ -134,7 +134,7 @@ BEGIN
ITEM "Dot.\nOd.@5" ITEM "Dot.\nOd.@5"
ITEM "Cons.\nmese@5" ITEM "Cons.\nmese@5"
ITEM "Cons.\nanno@5" ITEM "Cons.\nanno@5"
ITEM "Tipo\nForfait@22" ITEM "Tipo\nForfait@25"
ITEM "Prezzo\nRinnovo@8" ITEM "Prezzo\nRinnovo@8"
ITEM "Sconto %@5" ITEM "Sconto %@5"
ITEM "Dot.\nTemp.@5" ITEM "Dot.\nTemp.@5"
@ -196,7 +196,7 @@ BEGIN
ITEM "1|Conguaglio alla confezione" ITEM "1|Conguaglio alla confezione"
END END
LISTBOX F_TIPOFORF 1 20 LISTBOX F_TIPOFORF 1 25
BEGIN BEGIN
PROMPT 1 -7 "Forfait " PROMPT 1 -7 "Forfait "
ITEM "0|Nessuno" 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 MESSAGE SHOW,F_NOLCIC|SHOW,F_IMPFISART|DISABLE,F_IMPFISART|DISABLE,3@|SHOW,F_MINCIC|HIDE,F_PREZNOL
ITEM "4|% sul val. convenz." ITEM "4|% sul val. convenz."
MESSAGE SHOW,F_NOLCIC|SHOW,F_IMPFISART|DISABLE,F_IMPFISART|ENABLE,3@|HIDE,F_MINCIC|HIDE,F_PREZNOL 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 MESSAGE HIDE,1@|SHOW,F_IMPFISART|ENABLE,F_IMPFISART|DISABLE,3@|HIDE,F_MINCIC|HIDE,F_PREZNOL
END END
@ -635,6 +635,30 @@ END
ENDPAGE 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 ENDMASK
TOOLBAR "" 0 0 0 2 TOOLBAR "" 0 0 0 2
@ -746,7 +770,7 @@ BEGIN
PROMPT 1 6 "@bForfait/Prezzi" PROMPT 1 6 "@bForfait/Prezzi"
END END
LISTBOX S_TIPOFORF 1 20 LISTBOX S_TIPOFORF 1 25
BEGIN BEGIN
PROMPT 2 7 "Tipo " PROMPT 2 7 "Tipo "
ITEM "0|Nessuno" 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 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." 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 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 MESSAGE DISABLE,1@|ENABLE,S_IMPFISART|DISABLE,3@|DISABLE,S_MINCIC|DISABLE,2@|DISABLE,S_PREZNOL
FIELD TIPOFORF FIELD TIPOFORF
END END

View File

@ -1,7 +1,9 @@
//Definizione campi per maschera lv0400c //Definizione campi per maschera lv0400c
//Stampa Contratti per Cliente /Stampa Contratti per Cliente
#define F_CODCF 201 #define F_CODCF 201
#define F_RAGSOC 202 #define F_RAGSOC 202
#define F_CODCONT_DA 203 #define F_CODCONT_DA 203
#define F_CODCONT_A 204 #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" ?> <?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> <description>Stampa Contratto per Cliente</description>
<font face="Courier New" size="8" /> <font face="Courier New" size="8" />
<section type="Head" pattern="1" /> <section type="Head" pattern="1" />
<section type="Head" level="1" 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> <groupby>CODCONT</groupby>
<field x="32.5" type="Testo" width="50" pattern="1" text="STAMPA DETTAGLIATA CONTRATTO LAVANDERIA"> <field x="32.5" type="Testo" width="50" pattern="1" text="STAMPA DETTAGLIATA CONTRATTO LAVANDERIA">
<font face="Courier New" bold="1" size="9" /> <font face="Courier New" bold="1" size="9" />
</field> </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" 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="12" pattern="1" text="Contratto Nr.">
<field x="2" y="2" type="Testo" width="20" pattern="1" text="Contratto Base Nr.">
<font face="Courier New" bold="1" size="8" /> <font face="Courier New" bold="1" size="8" />
</field> </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> <source>168.CODCONT</source>
</field> </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" /> <font face="Courier New" bold="1" size="8" />
</field> </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> <source>CLIFO.CODCF</source>
</field> </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> <source>CLIFO.RAGSOC</source>
</field> </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"> <field x="2" y="3" type="Testo" width="3" pattern="1" text="del">
<font face="Courier New" bold="1" size="8" /> <font face="Courier New" bold="1" size="8" />
</field> </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> <source>168.DATAIN</source>
</field> </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> <source>CLIFO.INDCF</source>
</field> </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> <source>CLIFO.CIVCF</source>
</field> </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"> <field x="2" y="4" type="Testo" width="10" pattern="1" text="Scadenza">
<font face="Courier New" bold="1" size="8" /> <font face="Courier New" bold="1" size="8" />
</field> </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> <source>168.DATASC</source>
</field> </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> <source>CLIFO.CAPCF</source>
</field> </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> <source>CLIFO.LOCALITACF</source>
</field> </field>
<field x="52" y="5" type="Testo" width="5" pattern="1" text="C.F." /> <field x="76" y="4" type="Testo" width="5" pattern="1" text="Fax" />
<field x="57" y="5" type="Stringa" width="16" pattern="1"> <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> <source>CLIFO.COFI</source>
</field> </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 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"> <field x="2" y="6" type="Testo" width="14" pattern="1" text="Consegnare a">
<font face="Courier New" bold="1" size="8" /> <font face="Courier New" bold="1" size="8" />
@ -166,38 +188,34 @@
<source>305@.S0</source> <source>305@.S0</source>
</field> </field>
<field border="2" x="1" y="17" type="Linea" width="115" height="0" pattern="1" /> <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" /> <font face="Courier New" bold="1" size="8" />
</field> </field>
<field x="2" y="18" type="Stringa" width="7" pattern="1" /> <field x="2" y="18" type="Stringa" width="113" height="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">
<source>168.COMMENTI</source> <source>168.COMMENTI</source>
</field> </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>
<section type="Body" pattern="1" /> <section type="Body" pattern="1" />
<section type="Body" level="1" pattern="1" /> <section type="Body" level="1" pattern="1" />
<section type="Head" level="11" pattern="1"> <section type="Head" level="11" pattern="1">
<font face="Courier New" bold="1" size="8" /> <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 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 x="2" type="Testo" width="17" pattern="1" text="Articolo" />
<field border="2" x="23" type="Linea" pattern="1" /> <field border="2" x="23" type="Linea" pattern="1" />
<field x="24" type="Stringa" pattern="1" /> <field x="24" type="Stringa" pattern="1" />
<field x="24" type="Testo" width="50" pattern="1" text="Descrizione Articolo" /> <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="75" type="Linea" pattern="1" />
<field border="2" x="95" type="Linea" pattern="1" /> <field x="76" type="Testo" width="18" pattern="1" text="Prezzo" />
<field border="2" x="100" type="Linea" pattern="1" /> <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="116" type="Linea" pattern="1" />
<field border="2" x="1" y="1" type="Linea" width="115" height="0" pattern="1" />
</section> </section>
<section type="Body" level="11" width="115" height="1" pattern="1"> <section type="Body" level="11" width="115" height="1" pattern="1">
<sql>USE 169 <sql>USE 169
@ -208,22 +226,26 @@ TO CODCF=#PARENT.CODCF CODCONT=#PARENT.CODCONT
</sql> </sql>
<field border="2" x="1" type="Linea" pattern="1" /> <field border="2" x="1" type="Linea" pattern="1" />
<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"> <field x="24" type="Stringa" width="50" pattern="1">
<source>600@.DESCR</source> <source>600@.DESCR</source>
</field> </field>
<field border="1" x="75" type="Linea" pattern="1" /> <field border="2" x="75" type="Linea" pattern="1" />
<field x="76" type="Numero" align="right" width="18" pattern="1" hide_zero="1"> <field x="75.5" type="Numero" align="right" width="10" pattern="1" hide_zero="1" text="######,@@@">
<source>169.PREZZO</source> <source>169.PREZZO</source>
</field> </field>
<field border="1" x="95" type="Linea" pattern="1" /> <field border="2" x="87" type="Linea" pattern="1" />
<field x="96" type="Stringa" width="3" pattern="1"> <field x="88" type="Stringa" width="3" pattern="1">
<source>169.UM</source> <source>169.UM</source>
</field> </field>
<field border="1" x="100" type="Linea" pattern="1" /> <field border="2" x="92" type="Linea" pattern="1" />
<field x="101" type="Numero" align="right" width="14" pattern="1" hide_zero="1"> <field x="93" type="Numero" align="right" width="5" pattern="1" hide_zero="1">
<source>#DOTOD</source> <source>#DOTOD</source>
</field> </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 border="2" x="116" type="Linea" pattern="1" />
<field x="2" type="Stringa" width="20" id="600" pattern="1"> <field x="2" type="Stringa" width="20" id="600" pattern="1">
<source>169.CODART</source> <source>169.CODART</source>
@ -231,10 +253,11 @@ TO CODCF=#PARENT.CODCF CODCONT=#PARENT.CODCONT
</section> </section>
<section type="Foot" level="11" pattern="1"> <section type="Foot" level="11" pattern="1">
<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 border="1" x="75" type="Linea" pattern="1" /> <field border="2" x="75" type="Linea" pattern="1" />
<field border="1" x="95" type="Linea" pattern="1" /> <field border="2" x="87" type="Linea" pattern="1" />
<field border="1" x="100" 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 x="116" type="Stringa" pattern="1" />
<field border="2" x="116" type="Linea" 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" /> <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" /> <section type="Foot" level="2" pattern="1" />
<sql>USE LVCONDV <sql>USE LVCONDV
JOIN CLIFO INTO TIPOCF=="C" CODCF==CODCF 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 %CPG TO 20 ALIAS 201 INTO CODTAB==CODPAG
JOIN %BAN TO 20 ALIAS 204 INTO CODTAB==CODABI+CODCAB JOIN %BAN TO 20 ALIAS 204 INTO CODTAB==CODABI+CODCAB
JOIN %VAL TO 20 ALIAS 207 INTO CODTAB==CODVAL JOIN %VAL TO 20 ALIAS 207 INTO CODTAB==CODVAL
JOIN %CAU TO 168 ALIAS 208 INTO CODTAB==CAUSLAV JOIN %CAU TO 168 ALIAS 208 INTO CODTAB==CAUSLAV
JOIN 17 TO 168 ALIAS 300 INTO TIPOCF=="C" CODCF==CODCF 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 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 %POR TO 17 ALIAS 302 INTO CODTAB==CODPORTO
JOIN %MSP TO 17 ALIAS 303 INTO CODTAB==CODSPMEZZO JOIN %MSP TO 17 ALIAS 303 INTO CODTAB==CODSPMEZZO
JOIN 122 TO 17 ALIAS 304 INTO CODAGE==CODAG JOIN 122 TO 17 ALIAS 304 INTO CODAGE==CODAG

View File

@ -58,6 +58,7 @@ BEGIN
OUTPUT F_CODCF CODCF OUTPUT F_CODCF CODCF
OUTPUT F_CODCONT_DA CODCONT OUTPUT F_CODCONT_DA CODCONT
FLAGS "U" FLAGS "U"
MESSAGE COPY,F_CODCONT_A
FIELD #F_CODCONT_FROM FIELD #F_CODCONT_FROM
CHECKTYPE SEARCH CHECKTYPE SEARCH
END END
@ -90,6 +91,13 @@ BEGIN
FLAGS "H" FLAGS "H"
END END
STRING F_REPORT 20
BEGIN
PROMPT 2 -2 "Tipo di stampa "
RSELECT "lv0400c"
CHECKTYPE NORMAL
END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -4,4 +4,7 @@
#define F_DARAGSOC 202 #define F_DARAGSOC 202
#define F_ACODCF 203 #define F_ACODCF 203
#define F_ARAGSOC 204 #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" ?> <?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> <description>Stampa Contratto per Cliente</description>
<font face="Courier New" size="8" /> <font face="Courier New" size="8" />
<section type="Head" pattern="1" /> <section type="Head" pattern="1" />

View File

@ -81,6 +81,13 @@ BEGIN
FLAGS "H" FLAGS "H"
END END
STRING F_REPORT 20
BEGIN
PROMPT 2 -2 "Tipo di stampa "
RSELECT "lv0400f"
CHECKTYPE NORMAL
END
ENDPAGE ENDPAGE
ENDMASK 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_DESCAUS_DA 212
#define F_CODCAUS_A 213 #define F_CODCAUS_A 213
#define F_DESCAUS_A 214 #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="2" pattern="1" />
<section type="Foot" level="3" pattern="1" /> <section type="Foot" level="3" pattern="1" />
<sql>USE 34 <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 BY 33.CODCF 34.CODART 33.DATADOC
JOIN 33 TO 34 ALIAS 1000 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC 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 20 TO 33 ALIAS 2000 INTO TIPOCF==TIPOCF CODCF==CODCF
JOIN 47 TO 34 ALIAS 3000 INTO CODART==CODART 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> </report>

View File

@ -24,7 +24,7 @@ BEGIN
DISPLAY "Partita IVA@11" PAIV DISPLAY "Partita IVA@11" PAIV
OUTPUT F_CODCF_DA CODCF OUTPUT F_CODCF_DA CODCF
OUTPUT F_RAGSOC_DA RAGSOC OUTPUT F_RAGSOC_DA RAGSOC
CHECKTYPE SEARCH CHECKTYPE NORMAL
FIELD #F_CODCF_FROM FIELD #F_CODCF_FROM
MESSAGE COPY,F_CODCF_A|CHECK,F_CODCF_A MESSAGE COPY,F_CODCF_A|CHECK,F_CODCF_A
END END
@ -40,6 +40,7 @@ BEGIN
DISPLAY "Partita IVA@11" PAIV DISPLAY "Partita IVA@11" PAIV
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
COPY OUTPUT F_CODCF_DA COPY OUTPUT F_CODCF_DA
CHECKTYPE SEARCH
END END
NUMBER F_CODCF_A 6 NUMBER F_CODCF_A 6
@ -54,7 +55,7 @@ BEGIN
DISPLAY "Partita IVA@11" PAIV DISPLAY "Partita IVA@11" PAIV
OUTPUT F_CODCF_A CODCF OUTPUT F_CODCF_A CODCF
OUTPUT F_RAGSOC_A RAGSOC OUTPUT F_RAGSOC_A RAGSOC
CHECKTYPE SEARCH CHECKTYPE NORMAL
FIELD #F_CODCF_TO FIELD #F_CODCF_TO
END END
@ -64,16 +65,15 @@ BEGIN
USE LF_CLIFO KEY 2 USE LF_CLIFO KEY 2
INPUT TIPOCF "C" INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOC_A INPUT RAGSOC F_RAGSOC_A
DISPLAY "Ragione Sociale@50" RAGSOC COPY DISPLAY F_RAGSOC_DA
DISPLAY "Partita IVA@11" PAIV
DISPLAY "Codice" CODCF
OUTPUT F_CODCF_A CODCF OUTPUT F_CODCF_A CODCF
OUTPUT F_RAGSOC_A RAGSOC OUTPUT F_RAGSOC_A RAGSOC
CHECKTYPE SEARCH
END END
GROUPBOX DLG_NULL 80 3 GROUPBOX DLG_NULL 80 3
BEGIN BEGIN
PROMPT 1 5 "@b Parametri Data" PROMPT 1 5 "@bParametri Data"
END END
DATE F_DATA_DA DATE F_DATA_DA
@ -84,6 +84,15 @@ DATE F_DATA_DA
GROUP 1 GROUP 1
END 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 DATE F_DATA_A
BEGIN BEGIN
PROMPT 40 6 "A Data " PROMPT 40 6 "A Data "
@ -94,9 +103,18 @@ DATE F_DATA_A
GROUP 1 GROUP 1
END 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 GROUPBOX DLG_NULL 80 4
BEGIN BEGIN
PROMPT 1 8 "@b Parametri Articolo" PROMPT 1 8 "@bParametri Articolo"
END END
STRING F_CODART_DA 20 STRING F_CODART_DA 20
@ -154,7 +172,7 @@ END
GROUPBOX DLG_NULL 80 4 GROUPBOX DLG_NULL 80 4
BEGIN BEGIN
PROMPT 1 12 "@b Parametri Causale" PROMPT 1 12 "@bParametri Causale"
END END
STRING F_CODCAUS_DA 3 STRING F_CODCAUS_DA 3

View File

@ -221,7 +221,7 @@ MESSAGE RESET,F3.2000</prescript>
</section> </section>
<sql>USE 34 KEY 2 <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))) 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 33 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC
JOIN 20 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF JOIN 20 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF
JOIN 47 TO 34 INTO CODART==CODART JOIN 47 TO 34 INTO CODART==CODART

View File

@ -5,4 +5,6 @@
#define F_CODNUM_1 203 #define F_CODNUM_1 203
#define F_DESCODNUM_1 204 #define F_DESCODNUM_1 204
#define F_TIPODOC_1 205 #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" ?> <?xml version="1.0" encoding="UTF-8" ?>
<report name="lv0800a" lpi="6"> <report name="lv0800a" lpi="6">
<description>Statistica per Mangano</description> <description>Stampa Statistica per Mangano</description>
<font face="Courier New" size="10" /> <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="0.5" type="Testo" width="12" pattern="1" text="Data Elab.:" />
<field x="11.5" type="Stringa" width="12" pattern="1"> <field x="11.5" type="Stringa" width="12" pattern="1">
<prescript>MESSAGE _TODAY</prescript> <prescript>MESSAGE _TODAY</prescript>
@ -11,10 +11,10 @@
<field x="76.5" type="Stringa" width="12" pattern="1"> <field x="76.5" type="Stringa" width="12" pattern="1">
<prescript>MESSAGE _PAGENO</prescript> <prescript>MESSAGE _PAGENO</prescript>
</field> </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" /> <font face="Courier New" bold="1" size="14" />
</field> </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:"> <field x="0.5" y="3.75" type="Testo" width="12" pattern="1" text="Numerazione:">
<font face="Courier New" bold="1" size="10" /> <font face="Courier New" bold="1" size="10" />
</field> </field>
@ -49,9 +49,9 @@
<field x="14" y="8.25" type="Testo" width="15" pattern="1" text="Descrizione" /> <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="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="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>
<section type="Head" level="1"> <section type="Head" level="1" pattern="1">
<prescript description="H1 PRESCRIPT">MESSAGE RESET,F2.100 <prescript description="H1 PRESCRIPT">MESSAGE RESET,F2.100
MESSAGE RESET,F2.101 MESSAGE RESET,F2.101
MESSAGE RESET,F2.102 MESSAGE RESET,F2.102
@ -59,7 +59,7 @@ MESSAGE RESET,F1.100
MESSAGE RESET,F1.101 MESSAGE RESET,F1.101
MESSAGE RESET,F1.102</prescript> MESSAGE RESET,F1.102</prescript>
</section> </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> <groupby>47.MANGDEST</groupby>
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2.100 <prescript description="H2 PRESCRIPT">MESSAGE RESET,F2.100
MESSAGE RESET,F2.101 MESSAGE RESET,F2.101
@ -70,8 +70,8 @@ MESSAGE RESET,F2.102</prescript>
<source>47.MANGDEST</source> <source>47.MANGDEST</source>
</field> </field>
</section> </section>
<section type="Head" level="3"> <section type="Head" level="3" pattern="1">
<groupby>47.CODART</groupby> <groupby>47.MANGDEST+CODART</groupby>
<prescript description="H3 PRESCRIPT">MESSAGE RESET,F3.100 <prescript description="H3 PRESCRIPT">MESSAGE RESET,F3.100
MESSAGE RESET,F3.101 MESSAGE RESET,F3.101
MESSAGE RESET,F3.102 MESSAGE RESET,F3.102
@ -79,9 +79,8 @@ MESSAGE RESET,F3.1
MESSAGE RESET,F3.2 MESSAGE RESET,F3.2
</prescript> </prescript>
</section> </section>
<section type="Body" /> <section type="Body" pattern="1" />
<section type="Body" level="1" hidden="1"> <section type="Body" level="1" hidden="1" pattern="1">
<condition>#F_TOT!='X'</condition>
<field type="Stringa" width="20" pattern="1"> <field type="Stringa" width="20" pattern="1">
<source>47.CODART</source> <source>47.CODART</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.1</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.1</prescript>
@ -90,36 +89,36 @@ MESSAGE RESET,F3.2
<source>47.DESCR</source> <source>47.DESCR</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.2</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.2</prescript>
</field> </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> <source>34.QTA</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.100</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.100</prescript>
</field> </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> <source>34.QTA * 34.PREZZO</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.101</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.101</prescript>
</field> </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> <source>34.QTA * 47.PESO</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.102</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.102</prescript>
</field> </field>
</section> </section>
<section type="Foot" /> <section type="Foot" pattern="1" />
<section type="Foot" level="1"> <section type="Foot" level="1" pattern="1">
<field border="2" y="0.5" type="Rettangolo" width="91" height="2.5" 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: "> <field x="16" y="1.25" type="Testo" width="22" pattern="1" text="Totale Statistica: ">
<font face="Courier New" bold="1" size="10" /> <font face="Courier New" bold="1" size="10" />
</field> </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" /> <font face="Courier New" bold="1" size="10" />
</field> </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" /> <font face="Courier New" bold="1" size="10" />
</field> </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" /> <font face="Courier New" bold="1" size="10" />
</field> </field>
</section> </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: "> <field x="15" y="0.5" type="Testo" width="22" pattern="1" text="Totale per Mangano: ">
<font face="Courier New" bold="1" size="10" /> <font face="Courier New" bold="1" size="10" />
</field> </field>
@ -127,34 +126,35 @@ MESSAGE RESET,F3.2
<font face="Courier New" bold="1" size="10" /> <font face="Courier New" bold="1" size="10" />
<prescript description="F2.100 PRESCRIPT">MESSAGE ADD,F1.100</prescript> <prescript description="F2.100 PRESCRIPT">MESSAGE ADD,F1.100</prescript>
</field> </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" /> <font face="Courier New" bold="1" size="10" />
<prescript description="F2.101 PRESCRIPT">MESSAGE ADD,F1.101</prescript> <prescript description="F2.101 PRESCRIPT">MESSAGE ADD,F1.101</prescript>
</field> </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" /> <font face="Courier New" bold="1" size="10" />
<prescript description="F2.102 PRESCRIPT">MESSAGE ADD,F1.102</prescript> <prescript description="F2.102 PRESCRIPT">MESSAGE ADD,F1.102</prescript>
</field> </field>
</section> </section>
<section type="Foot" level="3"> <section type="Foot" level="3" pattern="1">
<field type="Stringa" width="20" id="1" pattern="1" /> <field type="Stringa" width="20" id="1" pattern="1" />
<field x="14" type="Stringa" width="42" id="2" 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="57" type="Numero" align="right" width="5" id="100" pattern="1">
<prescript description="F3.100 PRESCRIPT">MESSAGE ADD,F2.100</prescript> <prescript description="F3.100 PRESCRIPT">MESSAGE ADD,F2.100</prescript>
</field> </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> <prescript description="F3.101 PRESCRIPT">MESSAGE ADD,F2.101</prescript>
</field> </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> <prescript description="F3.102 PRESCRIPT">MESSAGE ADD,F2.102</prescript>
</field> </field>
</section> </section>
<sql>USE 34 KEY 2 <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 BY 47.MANGDEST CODART
JOIN 33 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC JOIN 33 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC
JOIN 47 TO 34 INTO CODART==CODART JOIN 47 TO 34 INTO CODART==CODART
FROM CODNUM=#F_CODNUM FROM CODNUM=#F_CODNUM ANNO=#F_DA_ANNO PROVV='D'
TO CODNUM=#F_CODNUM TO CODNUM=#F_CODNUM ANNO=#F_A_ANNO PROVV='D'
</sql> </sql>
</report> </report>

View File

@ -4,7 +4,7 @@ TOOLBAR "topbar" 0 0 0 2
#include "printbar.h" #include "printbar.h"
ENDPAGE ENDPAGE
PAGE "Statistica per Lavatrice" -1 -1 40 5 PAGE "Stampa Statistica per Mangano" -1 -1 40 5
GROUPBOX DLG_NULL 85 8 GROUPBOX DLG_NULL 85 8
BEGIN BEGIN
@ -19,6 +19,16 @@ BEGIN
FLAGS "A" FLAGS "A"
END 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 DATE F_DATADOC_A_1
BEGIN BEGIN
PROMP 40 3 "A Data " PROMP 40 3 "A Data "
@ -29,6 +39,16 @@ BEGIN
FLAGS "A" FLAGS "A"
END 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 STRING F_CODNUM_1 4
BEGIN BEGIN
PROMPT 2 5 "Numerazione " PROMPT 2 5 "Numerazione "
@ -68,6 +88,7 @@ BEGIN
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_TIPODOC_1 CODTAB OUTPUT F_TIPODOC_1 CODTAB
OUTPUT F_DESTIPODOC_1 S0 OUTPUT F_DESTIPODOC_1 S0
CHECKTYPE NORMAL
FLAGS "UPA" FLAGS "UPA"
FIELD #F_TIPODOC FIELD #F_TIPODOC
END END

View File

@ -5,4 +5,6 @@
#define F_CODNUM_1 203 #define F_CODNUM_1 203
#define F_DESCODNUM_1 204 #define F_DESCODNUM_1 204
#define F_TIPODOC_1 205 #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" ?> <?xml version="1.0" encoding="UTF-8" ?>
<report name="lv0900a" lpi="6"> <report name="lv0900a" lpi="6">
<description>Statistica per Lavatrice</description> <description>Stampa Statistica per Lavatrice</description>
<font face="Courier New" size="10" /> <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="0.5" type="Testo" width="12" pattern="1" text="Data Elab.:" />
<field x="11.5" type="Stringa" width="12" pattern="1"> <field x="11.5" type="Stringa" width="12" pattern="1">
<prescript>MESSAGE _TODAY</prescript> <prescript>MESSAGE _TODAY</prescript>
@ -11,10 +11,10 @@
<field x="76.5" type="Stringa" width="12" pattern="1"> <field x="76.5" type="Stringa" width="12" pattern="1">
<prescript>MESSAGE _PAGENO</prescript> <prescript>MESSAGE _PAGENO</prescript>
</field> </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" /> <font face="Courier New" bold="1" size="14" />
</field> </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:"> <field x="0.5" y="3.75" type="Testo" width="12" pattern="1" text="Numerazione:">
<font face="Courier New" bold="1" size="10" /> <font face="Courier New" bold="1" size="10" />
</field> </field>
@ -49,9 +49,9 @@
<field x="14" y="8.25" type="Testo" width="15" pattern="1" text="Descrizione" /> <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="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="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>
<section type="Head" level="1"> <section type="Head" level="1" pattern="1">
<prescript description="H1 PRESCRIPT">MESSAGE RESET,F2.100 <prescript description="H1 PRESCRIPT">MESSAGE RESET,F2.100
MESSAGE RESET,F2.101 MESSAGE RESET,F2.101
MESSAGE RESET,F2.102 MESSAGE RESET,F2.102
@ -59,7 +59,7 @@ MESSAGE RESET,F1.100
MESSAGE RESET,F1.101 MESSAGE RESET,F1.101
MESSAGE RESET,F1.102</prescript> MESSAGE RESET,F1.102</prescript>
</section> </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> <groupby>47.LAVATRICE</groupby>
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2.100 <prescript description="H2 PRESCRIPT">MESSAGE RESET,F2.100
MESSAGE RESET,F2.101 MESSAGE RESET,F2.101
@ -70,7 +70,7 @@ MESSAGE RESET,F2.102</prescript>
<source>47.LAVATRICE</source> <source>47.LAVATRICE</source>
</field> </field>
</section> </section>
<section type="Head" level="3"> <section type="Head" level="3" pattern="1">
<groupby>47.CODART</groupby> <groupby>47.CODART</groupby>
<prescript description="H3 PRESCRIPT">MESSAGE RESET,F3.100 <prescript description="H3 PRESCRIPT">MESSAGE RESET,F3.100
MESSAGE RESET,F3.101 MESSAGE RESET,F3.101
@ -79,9 +79,8 @@ MESSAGE RESET,F3.1
MESSAGE RESET,F3.2 MESSAGE RESET,F3.2
</prescript> </prescript>
</section> </section>
<section type="Body" /> <section type="Body" pattern="1" />
<section type="Body" level="1" hidden="1"> <section type="Body" level="1" hidden="1" pattern="1">
<condition>#F_TOT!='X'</condition>
<field type="Stringa" width="20" pattern="1"> <field type="Stringa" width="20" pattern="1">
<source>47.CODART</source> <source>47.CODART</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.1</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.1</prescript>
@ -90,71 +89,72 @@ MESSAGE RESET,F3.2
<source>47.DESCR</source> <source>47.DESCR</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.2</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE COPY,F3.2</prescript>
</field> </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> <source>34.QTA</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.100</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.100</prescript>
</field> </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> <source>34.QTA * 34.PREZZO</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.101</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.101</prescript>
</field> </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> <source>34.QTA * 47.PESO</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.102</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.102</prescript>
</field> </field>
</section> </section>
<section type="Foot" /> <section type="Foot" pattern="1" />
<section type="Foot" level="1"> <section type="Foot" level="1" pattern="1">
<field border="2" y="0.5" type="Rettangolo" width="91" height="2.5" 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: "> <field x="16" y="1.25" type="Testo" width="22" pattern="1" text="Totale Statistica: ">
<font face="Courier New" bold="1" size="10" /> <font face="Courier New" bold="1" size="10" />
</field> </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" /> <font face="Courier New" bold="1" size="10" />
</field> </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" /> <font face="Courier New" bold="1" size="10" />
</field> </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" /> <font face="Courier New" bold="1" size="10" />
</field> </field>
</section> </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: "> <field x="15" y="0.5" type="Testo" width="22" pattern="1" text="Totale per Lavatrice: ">
<font face="Courier New" bold="1" size="10" /> <font face="Courier New" bold="1" size="10" />
</field> </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" /> <font face="Courier New" bold="1" size="10" />
<prescript description="F2.100 PRESCRIPT">MESSAGE ADD,F1.100</prescript> <prescript description="F2.100 PRESCRIPT">MESSAGE ADD,F1.100</prescript>
</field> </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" /> <font face="Courier New" bold="1" size="10" />
<prescript description="F2.101 PRESCRIPT">MESSAGE ADD,F1.101</prescript> <prescript description="F2.101 PRESCRIPT">MESSAGE ADD,F1.101</prescript>
</field> </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" /> <font face="Courier New" bold="1" size="10" />
<prescript description="F2.102 PRESCRIPT">MESSAGE ADD,F1.102</prescript> <prescript description="F2.102 PRESCRIPT">MESSAGE ADD,F1.102</prescript>
</field> </field>
</section> </section>
<section type="Foot" level="3"> <section type="Foot" level="3" pattern="1">
<field type="Stringa" width="20" id="1" pattern="1" /> <field type="Stringa" width="20" id="1" pattern="1" />
<field x="14" type="Stringa" width="42" id="2" 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> <prescript description="F3.100 PRESCRIPT">MESSAGE ADD,F2.100</prescript>
</field> </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> <prescript description="F3.101 PRESCRIPT">MESSAGE ADD,F2.101</prescript>
</field> </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> <prescript description="F3.102 PRESCRIPT">MESSAGE ADD,F2.102</prescript>
</field> </field>
</section> </section>
<sql>USE 34 KEY 2 <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 BY 47.LAVATRICE CODART
JOIN 33 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC JOIN 33 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC
JOIN 47 TO 34 INTO CODART==CODART JOIN 47 TO 34 INTO CODART==CODART
FROM CODNUM=#F_CODNUM FROM CODNUM=#F_CODNUM ANNO=#F_DA_ANNO PROVV='D'
TO CODNUM=#F_CODNUM TO CODNUM=#F_CODNUM ANNO=#F_A_ANNO PROVV='D'
</sql> </sql>
</report> </report>

View File

@ -4,7 +4,7 @@ TOOLBAR "topbar" 0 0 0 2
#include "printbar.h" #include "printbar.h"
ENDPAGE ENDPAGE
PAGE "Statistica per Lavatrice" -1 -1 40 5 PAGE "Stampa Statistica per Lavatrice." -1 -1 40 5
GROUPBOX DLG_NULL 85 8 GROUPBOX DLG_NULL 85 8
BEGIN BEGIN
@ -19,6 +19,16 @@ BEGIN
FLAGS "A" FLAGS "A"
END 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 DATE F_DATADOC_A_1
BEGIN BEGIN
PROMP 40 3 "A Data " PROMP 40 3 "A Data "
@ -29,6 +39,16 @@ BEGIN
FLAGS "A" FLAGS "A"
END 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 STRING F_CODNUM_1 4
BEGIN BEGIN
PROMPT 2 5 "Numerazione " 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; 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; 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 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; const TDate str2date(const TString& data, int year) const;
public: public:
@ -145,13 +145,13 @@ bool TGenera_planning_app::kill_planning (TISAM_recordset& selrighe) const
const TRecnotype righe = selrighe.items(); const TRecnotype righe = selrighe.items();
if (righe > 0) 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(); TLocalisamfile& rplan = selrighe.cursor()->file();
for (bool ok = selrighe.move_last(); ok; ok = selrighe.move_prev()) for (bool ok = selrighe.move_last(); ok; ok = selrighe.move_prev())
{ {
if (!pi.addstatus(1))
break;
rplan.remove(); rplan.remove();
if (!pi.add_status())
break;
} }
} }
return true; 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_CODCONT, codcont);
rplan.put(LVRCONSPLAN_DTCONS, data); rplan.put(LVRCONSPLAN_DTCONS, data);
rplan.put(LVRCONSPLAN_CODITI, 999); rplan.put(LVRCONSPLAN_CODITI, 999);
int err; int err = rplan.read(_isgteq);
if ((err = rplan.read(_isgteq)) == NOERR) if (err == NOERR)
err = rplan.prev(); err = rplan.prev();
if (err == NOERR) 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()) for (bool ok = rplan.move_first(); ok; ok = rplan.move_next())
{ {
TDate data = rplan.get(LVRCONSPLAN_DTCONS).as_date(); TDate data = rplan.get(LVRCONSPLAN_DTCONS).as_date();
if (giorno == data.wday()) if (giorno == data.wday())
contatore++; 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 //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: //dati recuperati dalla tabella dei passaggi per contratto:
if (pplan.get(LVPASPLAN_NRIGA).as_int() <= 0) 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 if (frequenza <= 0 || frequenza > 28) //forza una frequenza valida
frequenza = 7; frequenza = 7;
TLocalisamfile file_rplan(LF_LVRCONSPLAN);
TRectype& rplan = file_rplan.curr(); TRectype& rplan = file_rplan.curr();
for (TDate d = primogiorno; d <= adata; d += frequenza) 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 dadata = _msk->get(F_DADATA);
const TDate adata = _msk->get(F_ADATA); 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 //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 //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); 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()) 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; break;
elabora_passaggio(dadata, adata, pplan);
} }
return true; return true;
} }
@ -485,14 +486,14 @@ void TGenera_planning_app::main_loop()
ininame.ltrim(2); ininame.ltrim(2);
if (ininame.exist()) if (ininame.exist())
{ {
TConfig ini(ininame,"167"); TConfig ini(ininame, LF_LVRCONSPLAN);
const long codcf = ini.get_long("CODCF"); const long codcf = ini.get_long("CODCF");
if (codcf > 0) if (codcf > 0)
{ {
TLocalisamfile rplan(LF_LVRCONSPLAN); TLocalisamfile rplan(LF_LVRCONSPLAN);
rplan.last(); rplan.last();
const TDate adata = rplan.curr().get_date(LVRCONSPLAN_DTCONS); 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_CODCF, codcf);
_msk->set(F_DADATA, dadata); _msk->set(F_DADATA, dadata);
@ -506,7 +507,7 @@ void TGenera_planning_app::main_loop()
while (_msk->run() == K_ENTER) while (_msk->run() == K_ENTER)
if (transfer()) 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[]) 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 //se questi campi vengono riempiti, allora riempi lo sheet opportunamante
case F_DADATA: case F_DADATA:
if (e == fe_init)
fill_sheet();
case F_ADATA: case F_ADATA:
case F_CODITI: case F_CODITI:
case F_CODCF: case F_CODCF:
if (e == fe_modify || e == fe_init) if (e == fe_modify)
{
fill_sheet(); fill_sheet();
}
break; break;
case F_ORDGIRI: case F_ORDGIRI:
if (e == fe_init) if (e == fe_init)

View File

@ -9,6 +9,8 @@
#define F_RAGSOCCLI 206 #define F_RAGSOCCLI 206
#define F_ORDGIRI 207 #define F_ORDGIRI 207
#define F_PLAN 208 #define F_PLAN 208
#define F_RICALT 209
//campi dello sheet //campi dello sheet
#define F_S_BOLLA 100 #define F_S_BOLLA 100
#define F_S_DATA 101 #define F_S_DATA 101

View File

@ -31,32 +31,14 @@ ENDPAGE
PAGE "Visualizzazione e modifica giri" -1 -1 76 20 PAGE "Visualizzazione e modifica giri" -1 -1 76 20
GROUPBOX DLG_NULL 76 6 GROUPBOX DLG_NULL 76 7
BEGIN BEGIN
PROMPT 1 1 "@bDati del giro" PROMPT 1 1 "@bDati del giro"
END 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 STRING F_CODITI 3
BEGIN BEGIN
PROMPT 2 3 "Itinerario " PROMPT 2 2 "Itinerario "
FLAGS "UZ" FLAGS "UZ"
USE &ITI USE &ITI
JOIN &AUT TO &ITI ALIAS 1000 INTO CODTAB==S1 JOIN &AUT TO &ITI ALIAS 1000 INTO CODTAB==S1
@ -70,21 +52,23 @@ BEGIN
DISPLAY "Descrizione Mezzo@50" 2000@->S0 DISPLAY "Descrizione Mezzo@50" 2000@->S0
OUTPUT F_CODITI CODTAB OUTPUT F_CODITI CODTAB
OUTPUT F_DESCRITI S0 OUTPUT F_DESCRITI S0
CHECKTYPE NORMAL
END END
STRING F_DESCRITI 50 STRING F_DESCRITI 50
BEGIN BEGIN
PROMPT 23 3 "" PROMPT 23 2 ""
USE &ITI KEY 2 USE &ITI KEY 2
INPUT S0 F_DESCRITI INPUT S0 F_DESCRITI
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
DISPLAY "Codice " CODTAB DISPLAY "Codice " CODTAB
COPY OUTPUT F_CODITI COPY OUTPUT F_CODITI
CHECKTYPE SEARCH
END END
NUMBER F_CODCF 6 NUMBER F_CODCF 6
BEGIN BEGIN
PROMPT 2 4 "Cliente " PROMPT 2 3 "Cliente "
FLAGS "U" FLAGS "U"
USE LF_CLIFO KEY 1 USE LF_CLIFO KEY 1
INPUT TIPOCF "C" INPUT TIPOCF "C"
@ -93,24 +77,56 @@ BEGIN
DISPLAY "Ragione sociale@50" RAGSOC DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_CODCF CODCF OUTPUT F_CODCF CODCF
OUTPUT F_RAGSOCCLI RAGSOC OUTPUT F_RAGSOCCLI RAGSOC
OUTPUT F_RICALT RICALT
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
STRING F_RAGSOCCLI 50 STRING F_RAGSOCCLI 50
BEGIN BEGIN
PROMPT 23 4 "" PROMPT 24 3 ""
USE LF_CLIFO KEY 2 USE LF_CLIFO KEY 2
INPUT TIPOCF "C" INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOCCLI INPUT RAGSOC F_RAGSOCCLI
DISPLAY "Ragione sociale@50" RAGSOC DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Codice " CODCF DISPLAY "Codice " CODCF
COPY OUTPUT F_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 CHECKTYPE NORMAL
END END
LISTBOX F_ORDGIRI 1 25 LISTBOX F_ORDGIRI 1 25
BEGIN BEGIN
PROMPT 2 5 "Criterio ordinamento giri " PROMPT 2 6 "Criterio ordinamento giri "
ITEM "0|Ordine di generazione" ITEM "0|Ordine di generazione"
ITEM "1|Ordine di fermata" ITEM "1|Ordine di fermata"
ITEM "2|Orario di passaggio" ITEM "2|Orario di passaggio"
@ -119,7 +135,7 @@ END
SPREADSHEET F_PLAN SPREADSHEET F_PLAN
BEGIN BEGIN
PROMPT 0 7 "Giri" PROMPT 0 8 "Giri"
ITEM "Data" ITEM "Data"
ITEM "Giorno@10" ITEM "Giorno@10"
ITEM "Itinerario@11" ITEM "Itinerario@11"
@ -221,7 +237,7 @@ BEGIN
FIELD FREQ FIELD FREQ
END END
LIST F_S_MODPASS 1 10 LIST F_S_MODPASS 10
BEGIN BEGIN
PROMPT 38 3 "Mod. pas. " PROMPT 38 3 "Mod. pas. "
ITEM "C|Consegna" ITEM "C|Consegna"

View File

@ -95,7 +95,7 @@
</field> </field>
</section> </section>
<section type="Body" level="1" pattern="1"> <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 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"> <field x="1" type="Numero" align="right" width="5" pattern="1" hide_zero="1">
<source>167.ORDFER</source> <source>167.ORDFER</source>
@ -108,10 +108,9 @@
<field x="14" type="Stringa" width="17" height="3" pattern="1"> <field x="14" type="Stringa" width="17" height="3" pattern="1">
<source>IF(#F_CHECK_MNEM=="X";303@.RICALT;303@.RAGSOC)</source> <source>IF(#F_CHECK_MNEM=="X";303@.RICALT;303@.RAGSOC)</source>
</field> </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"> <field x="31.5" type="Stringa" width="25" height="2" pattern="1">
<source>IF(304@.CODINDSP= "0" ;303@.LOCALITACF;305@.LOCALITA)</source> <source>IF(304@.CODINDSP= "0" ;303@.LOCALITACF;305@.LOCALITA)</source>
<alt_source>IF(304@.CODINDSP= "0" ;307@.DENCOM;308@.DENCOM)</alt_source>
</field> </field>
<field border="1" x="56.75" type="Linea" height="4" pattern="1" /> <field border="1" x="56.75" type="Linea" height="4" pattern="1" />
<field x="57" type="Array" align="center" width="9" 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"> <field x="66.5" y="2" type="Numero" align="right" width="13" pattern="1" hide_zero="1">
<source>167.NDOC</source> <source>167.NDOC</source>
</field> </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>
<section type="Foot" pattern="1" /> <section type="Foot" pattern="1" />
<section type="Foot" level="1" 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;AUT TO 167 ALIAS 301 INTO CODTAB==CODAUT
JOIN &#26;MEZ TO 167 ALIAS 302 INTO CODTAB==CODMEZ JOIN &#26;MEZ TO 167 ALIAS 302 INTO CODTAB==CODMEZ
JOIN 20 TO 167 ALIAS 303 INTO TIPOCF=="C" CODCF==CODCF JOIN 20 TO 167 ALIAS 303 INTO TIPOCF=="C" CODCF==CODCF
JOIN 17 TO 20 ALIAS 304 INTO TIPOCF=="C" CODCF==CODCF JOIN 168 TO 167 ALIAS 304 INTO CODCONT==CODCONT CODCF==CODCF
JOIN 16 TO 17 ALIAS 305 INTO TIPOCF=="C" CODCF==CODCF CODIND==CODINDSP JOIN 16 TO 168 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
FROM DTCONS=#FROM_DATA FROM DTCONS=#FROM_DATA
TO DTCONS=#TO_DATA TO DTCONS=#TO_DATA
</sql> </sql>

View File

@ -84,7 +84,7 @@ END
STRING F_CODAUT_FROM 6 STRING F_CODAUT_FROM 6
BEGIN BEGIN
PROMPT 2 9 "Da Autista " PROMPT 2 9 "Da Autista "
FLAGS "U" FLAGS "UZ"
USE &AUT USE &AUT
INPUT CODTAB F_CODAUT_FROM INPUT CODTAB F_CODAUT_FROM
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
@ -104,7 +104,7 @@ END
STRING F_CODAUT_TO 6 STRING F_CODAUT_TO 6
BEGIN BEGIN
PROMPT 2 10 "Ad Autista " PROMPT 2 10 "Ad Autista "
FLAGS "U" FLAGS "UZ"
USE &AUT USE &AUT
INPUT CODTAB F_CODAUT_TO INPUT CODTAB F_CODAUT_TO
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB

View File

@ -67,7 +67,8 @@ class TGenera_documenti_app : public TSkeleton_application
private: private:
//Metodi per la generazione dei documenti //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); 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 //Metodi per il recupero di codnum, tpdoc, stato
bool numerazione_ddt(TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const; 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 //// //// Metodi per la generazione dei documenti ////
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
//CREA_DOCUMENTO: metodo che crea un nuovo documento di trasporto dai dati salvati //CREA_DOCUMENTO_RITIRO: 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) 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 //recupero i dati di interesse dalla maschera
const TDate datagen(TODAY); 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 TDate dtcons = plan.get(LVRCONSPLAN_DTCONS).as_date(); //che è anche la data documento
const char modpas = plan.get(LVRCONSPLAN_MODPASS).as_string()[0]; const char modpas = plan.get(LVRCONSPLAN_MODPASS).as_string()[0];
const int coditi = plan.get(LVRCONSPLAN_CODITI).as_int(); const int coditi = plan.get(LVRCONSPLAN_CODITI).as_int();
TString8 codaut = plan.get(LVRCONSPLAN_CODAUT).as_string().right(5); codaut.trim(); 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 = _msk->get_bool(F_DTEMIS) ? _msk->get_date(F_DTDOC).year() : dtcons.year(); const int anno = datadoc.year();
//preparo la chiave per la tabella contratti //preparo la chiave per la tabella contratti
TToken_string keycont; 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... //variabili che conterranno i parametri dei documenti che devo generare...
//...settati dalla funzione numerazione_ddt() //...settati dalla funzione numerazione_ddt()
TString4 codnum; TString4 codnum, tpdoc, statoi, statof;
TString4 tpdoc;
TString4 statoi;
TString4 statof;
//Cerco il tipo documento da generare sul contratto; se non lo trovo lo cerco in configurazione. //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 //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); codnum = tcont.get(LVCONDV_CODNUM);
tpdoc = tcont.get(LVCONDV_TPDOC); tpdoc = tcont.get(LVCONDV_TPDOC);
@ -186,7 +409,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep
TString query2; TString query2;
query2 << "USE DOC\n" query2 << "USE DOC\n"
<< "FROM PROVV=\"D\" ANNO=" << anno << " CODNUM=\"" << codnum << "\"\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); TISAM_recordset bolle(query2);
if (bolle.move_last()) if (bolle.move_last())
_ndoc = bolle.get(DOC_NDOC).as_int(); _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('C');
key.add(codcli); key.add(codcli);
const TRectype& clifo = cache().get(LF_CLIFO, key); const TRectype& clifo = cache().get(LF_CLIFO, key);
const TString4 codpag = clifo.get(CLI_CODPAG); const TString4 codpag = clifo.get(CLI_CODPAG);
const long codabi = clifo.get_long(CLI_CODABI); const long codabi = clifo.get_long(CLI_CODABI);
const long codcab = clifo.get_long(CLI_CODCAB); const long codcab = clifo.get_long(CLI_CODCAB);
const TString80 iban = clifo.get(CLI_IBAN); const TString80 iban = clifo.get(CLI_IBAN);
//reupero la cuasale di magazzino di testata //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 //recupero i dati di interesse dal file CFVEN
const TRectype& cfven = cache().get(LF_CFVEN, key); 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) if (sconti.read() == NOERR)
sconto = sconti.get("SCONTO"); sconto = sconti.get("SCONTO");
} }
break;
case 'N': //sconto non gestito case 'N': //sconto non gestito
default: break; default : break;
} }
//creo il documento corretto riempiendo i campi che già conosco //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 //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"); const int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr");
//creo la nuova riga //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 //preparo la chiave per la tabella righe contratti
TLaundry_contract cont(codcli, codcont); TLaundry_contract cont(codcli, codcont);
const TRectype& rcont = cont.row(codart); 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 //recupero i dati di interesse dalla riga del contratto
const bool arrot = rcont.get_int(LVRCONDV_CALCCONS) == 1; 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 rit(caudt.causale_ritiro());
const TCausale_magazzino con(caudt.causale_consegna()); const TCausale_magazzino con(caudt.causale_consegna());
TString8 magazzino, magazzinoc;
TString8 magazzino;
TString8 magazzinoc;
if(rit.get("S10").full()) if (rit.get("S10").full())
magazzino = rit.get("S10").mid(0,5); magazzino = rit.get("S10").mid(0,5);
else else
magazzino << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGN"); 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); magazzinoc = con.get("S10").mid(0,5);
else else
magazzinoc << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGC"); 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 //scrivo gli estremi della dotazione temporanea
rdoc.put("DADATATMP", rcont.get_date(LVRCONDV_INDTTMP)); rdoc.put("DADATATMP", rcont.get_date(LVRCONDV_INDTTMP));
rdoc.put("ADATATMP", rcont.get_date(LVRCONDV_FIDTTMP)); rdoc.put("ADATATMP", rcont.get_date(LVRCONDV_FIDTTMP));
rdoc.dirty_fields();
} }
if (qta > ZERO || (tmp && rcont.get_bool(LVRCONDV_RITAUDTTMP) && qta == ZERO)) 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; TString str;
str << "L'articolo " << codart << " inserito nel documento " << doc.get(DOC_CODNUM) << "-" << doc.get(DOC_TIPODOC) 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à" << " 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); 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_CODMAG, magazzino);
rdoc.put(RDOC_CODMAGC, magazzinoc); rdoc.put(RDOC_CODMAGC, magazzinoc);
rdoc.dirty_fields();
} }
if (dottmp == 0) 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 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); codnum = _configlv->get("NUM_RIT", NULL, cod);
tpdoc = _configlv->get("TIPODOC_RIT", NULL, cod); tpdoc = _configlv->get("TIPODOC_RIT", NULL, cod);
codnum = _configlv->get("NUM_RIT", NULL, cod);
tpdoc = _configlv->get("TIPODOC_RIT", NULL, cod);
//instanzio una cache sulla tabella tipi documento (cerco lo stato iniziale) //instanzio una cache sulla tabella tipi documento (cerco lo stato iniziale)
const TString& s2 = cache().get("%TIP",tpdoc,"S2"); const TString& s2 = cache().get("%TIP",tpdoc,"S2");
statoi = s2.left(1); statoi = s2.left(1);
statof = s2.mid(1,1); statof = s2.mid(1,1);
return codnum.full() && tpdoc.full(); return codnum.full() && tpdoc.full();
} }
@ -917,21 +1144,50 @@ bool TGenera_documenti_app::transfer()
rep.kill_duplicates(true); rep.kill_duplicates(true);
//preparo un recordset che contiene tutti planning per cui voglio creare i documenti relativi //preparo un recordset che contiene tutti planning per cui voglio creare i documenti relativi
TString4 codnum; TString4 codnum, tpdoc, statoi, statof;
TString4 tpdoc;
TString4 statoi;
TString4 statof;
numerazione_drit(0, codnum, tpdoc, statoi, statof); numerazione_drit(0, codnum, tpdoc, statoi, statof);
int numdocgen = 0; int numdocgen = 0;
TAssoc_array documenti; 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 //per ogni data cerco i documenti e per ogni documento cerco i dati del passaggio
TString query; TString query;
query << "USE DOC " 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)&&" << "SELECT (ANSI(G1:DATAPRCO)<=#ADATA)&&"
<< "(CODNUM=\"" << codnum << "\")&&(TIPODOC=\"" << tpdoc << "\")&&" << "(CODNUM=\"" << codnum << "\")&&(TIPODOC=\"" << tpdoc << "\")&&"
<< "(STATO=\"" << statoi <<"\")&&" << "(STATO=\"" << statoi <<"\")&&"
@ -939,48 +1195,52 @@ bool TGenera_documenti_app::transfer()
<< "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n" << "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n"
<< "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n"; << "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n";
TISAM_recordset docritiri(query); TISAM_recordset docritiri(query);
docritiri.set_var("#ADATA", adata); docritiri.set_var("#ADATA", adata);
docritiri.set_var("#CODCF", codcli); 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()) 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)
{ {
if (coditi > 0) if (!pi.add_status())
query << "&&(CODITI=" << coditi << ")"; break;
if (codaut > 0) if (_msk->field(F_CODCF).empty())
query << "&&(CODAUT=" << codaut << ")"; 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"; if (coditi || codaut)
query << "TO DTCONS=#ADATA"; {
if (coditi > 0)
query << "&&(CODITI=" << coditi << ")";
TISAM_recordset plan(query); if (codaut > 0)
plan.set_var("#DADATA", dadata); query << "&&(CODAUT=" << codaut << ")";
plan.set_var("#ADATA", dadata); }
query << "\nFROM DTCONS=#DADATA";
query << "\nTO DTCONS=#ADATA";
if (plan.move_first()) TISAM_recordset plan(query);
{ plan.set_var("#DADATA", dadata);
_quantita.destroy(); if (_msk->get_int(F_TPGEN) == 0)
_quantita_ritirata.destroy(); plan.set_var("#ADATA", adata);
crea_documento(plan, rep, numdocgen, documenti); 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) if (_msk->get_bool(F_STAMPA) && documenti.items() > 0)
@ -1014,9 +1274,16 @@ bool TGenera_documenti_app::transfer()
if (tmp.exist()) if (tmp.exist())
{ {
TString cmdline; cmdline << "ve1 -2 -i" << tmp; {
TExternal_app app(cmdline); TString cmdline; cmdline << "ve1 -2 -i" << tmp;
app.run(); TExternal_app app(cmdline);
app.run();
}
{
TString cmdline; cmdline << "lv1 -3 -i" << tmp;
TExternal_app app(cmdline);
app.run();
}
tmp.fremove(); tmp.fremove();
} }
} }
@ -1037,11 +1304,10 @@ bool TGenera_documenti_app::transfer()
{ {
TString str; TString str;
if (numdocgen > 1) if (numdocgen > 1)
str << "Sono stati generati " << numdocgen << " buoni."; str << TR("Sono stati generati ") << numdocgen << TR(" buoni.");
else else
str << "E' stato generato " << numdocgen << " buono."; str << TR("E' stato generato ") << numdocgen << TR(" buono.");
message_box(str); message_box(str);
message_box(TR("Generazione terminata")); message_box(TR("Generazione terminata"));
} }
} }
@ -1049,10 +1315,15 @@ bool TGenera_documenti_app::transfer()
return true; return true;
} }
void TGenera_documenti_app::main_loop() void TGenera_documenti_app::main_loop()
{ {
_msk->set(F_NOTPLAN, "X");
while (_msk->run() == K_ENTER) while (_msk->run() == K_ENTER)
{
transfer(); transfer();
_msk->set(F_NOTPLAN, "X");
}
} }
int lv2400(int argc, char* argv[]) int lv2400(int argc, char* argv[])

View File

@ -10,4 +10,5 @@
#define F_RAGSOCCLI 111 #define F_RAGSOCCLI 111
#define F_DTEMIS 112 #define F_DTEMIS 112
#define F_DTDOC 113 #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 CHECKTYPE NORMAL
END END
BOOLEAN F_NOTPLAN
BEGIN
PROMPT 2 9 "Non considerare i giri"
END
GROUPBOX DLG_NULL 76 4 GROUPBOX DLG_NULL 76 4
BEGIN BEGIN
PROMPT 1 9 "@bParametri di stampa" PROMPT 1 10 "@bParametri di stampa"
END END
BOOLEAN F_DTEMIS BOOLEAN F_DTEMIS
BEGIN BEGIN
PROMPT 2 10 "Imposta la data documento" PROMPT 2 11 "Imposta la data documento"
MESSAGE TRUE SHOW,F_DTDOC MESSAGE TRUE SHOW,F_DTDOC
MESSAGE FALSE HIDE,F_DTDOC MESSAGE FALSE HIDE,F_DTDOC
END END
DATE F_DTDOC DATE F_DTDOC
BEGIN BEGIN
PROMPT 30 10 "Data documento " PROMPT 30 11 "Data documento "
FLAGS "A" FLAGS "A"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
BOOLEAN F_STAMPA BOOLEAN F_STAMPA
BEGIN BEGIN
PROMPT 2 11 "Stampa automatica buoni" PROMPT 2 12 "Stampa automatica buoni"
END END
ENDPAGE ENDPAGE

View File

@ -660,8 +660,11 @@ bool TAcquisizione_lavanderie_app::elabora_file(const TString& file, TLog_report
if (riga.blank()) if (riga.blank())
continue; continue;
const int reclen = riga.len();
TDate datadoc; TDate datadoc;
long codcf = 0; TString8 codcf_str; long codcf = 0;
TString80 codcf_str;
TString80 codart; TString80 codart;
long qta; long qta;
long rotti; long rotti;
@ -670,7 +673,7 @@ bool TAcquisizione_lavanderie_app::elabora_file(const TString& file, TLog_report
TString80 operatore; TString80 operatore;
//controllo quale tracciato record devo seguire //controllo quale tracciato record devo seguire
if (riga.len() == 34) // -> MONTANARI if (reclen == 34) // -> MONTANARI
{ {
nrighe++; nrighe++;
//leggo i campi dalla riga del file //leggo i campi dalla riga del file
@ -694,7 +697,7 @@ bool TAcquisizione_lavanderie_app::elabora_file(const TString& file, TLog_report
else else
continue; continue;
} }
else if (riga.len() == 121) // ->SKEMA else if (reclen == 81 || reclen == 121) // ->SKEMA
{ {
//leggo i campi dalla riga del file //leggo i campi dalla riga del file
const int y = atoi(riga.mid(0,4)); 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); TSheet_field& sheet = _msk->sfield(F_SHEET_NAME);
TFilename file; TFilename file;
TLog_report logrep(TR("Aquisizione da contapezzi")); TLog_report logrep(TR("Acquisizione da contapezzi"));
logrep.kill_duplicates(true); logrep.kill_duplicates(true);
TArticoli_contati articoli; TArticoli_contati articoli;

View File

@ -11,35 +11,55 @@
class TRiepBolle_recordset: public TCSV_recordset class TRiepBolle_recordset: public TCSV_recordset
{ {
int _loop;
unsigned int _max_column;
TArray _max_cli_col;
public: 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; r = new real;
TString _articolo; _max_cli_col.add(r, codcli);
TString _descr; }
TDate _dataDoc; if ((unsigned int )r->integer() < column) *r = column;
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) {}
};
struct TStrutturaData: public TObject unsigned int TRiepBolle_recordset::get_curr_max_column() const
{ {
TDate _dataDoc; const long codcli = get(0).as_int();
long _numeroDoc; real * r = (real *) _max_cli_col.objptr(codcli);
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) {}
};
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 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; return true;
} }
class TRiepBolle_report : public TReport class TRiepBolle_report : public TDocument_report
{ {
TArray _tot;
protected: protected:
virtual bool use_mask() { return false; } 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 class TRiepBolle_app: public TSkeleton_application
{ {
protected: protected:
virtual void main_loop(); virtual void main_loop();
void elabora(const TMask& mask) const; 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
{ {
/* TReport_book b;
RICHIESTA QUERY: const long from_cli = mask.get_long(F_CODCF_DA);
estrazione di tutte le bolle in base ai range della parametrica: const long to_cli = mask.get_long(F_CODCF_A);
- cliente const TDate dal = mask.get_date(F_DATA_DA);
- data const TDate al = mask.get_date(F_DATA_A);
- zona const long anno = dal.year();
Inoltre estrarre in base alla causale di lavanderia tutte quelle const bool print_resi = mask.get_bool(F_PRINT_RESI);
righe che non sono di reso (2000@.B2!='X'). const bool print_da_fatt = mask.get_bool(F_PRINT_FATT);
Dalla causale di lavanderia agganciare la causale di magazzino const TString4 zona = mask.get(F_ZONA);
consegnata e verificare che abbiano il segno '+' nel campo TString query;
consegnato mese (3000@.S2[37,38] ='+1').
le bolle sono determinate dal file di configurazione Ditta.ini
*/
//Stringhe x composizione query
TString query, select, between, orderBy, join;
//Richiamo parametri della ditta di configurazione file Ditta.ini //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"); const TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN");
select << "USE RDOC KEY 1\n"; query << "USE DOC KEY 2\n";
select << "SELECT ((DOC.TIPODOC='" << tipodoc << "')&&"; 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)){ TRectype from(LF_CLIFO); from.put(CLI_TIPOCF, "C");
select << "(2000@.B2!='X')&&"; TRectype to(from);
}
if(mask.get_bool(F_CHECK_FATT)){
select << "(3000@.S2[37,38] ='+1')&&";
}
between << "(BETWEEN(DOC.ZONA,#F_ZONA_FROM,#F_ZONA_FROM))&&(BETWEEN(DOC.DATADOC,#F_DATA_FROM,#F_DATA_TO))&&(STR(BETWEEN(DOC.CODCF,#F_CODCF_FROM,#F_CODCF_TO))))\n"; if (from_cli > 0L)
from.put(CLI_CODCF, from_cli);
if (to_cli > 0L)
to.put(CLI_CODCF, to_cli);
if(isArticolo) TRelation rel(LF_CLIFO);
orderBy << "BY DOC.CODCF CODART DOC.DATADOC NDOC\n"; TCursor cli(&rel, "", 1, &from, &to);
else const long ncli = cli.items();
orderBy << "BY DOC.CODCF DOC.DATADOC NDOC\n"; 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"; for (cli = 0L; cli.pos() < ncli && pi_cli.add_status(); ++cli)
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;
{ {
TISAM_recordset riep(get_query(true,mask)); const long codcli = cli.curr().get_long(CLI_CODCF);
//inserire parametri filtri //inserire parametri filtri
riep.set_var("#F_DATA_FROM",mask.get_date(F_DATA_DA)); TISAM_recordset docs(query);
riep.set_var("#F_DATA_TO",mask.get_date(F_DATA_A)); docs.set_var("#CODCF", codcli);
riep.set_var("#F_CODCF_FROM",mask.get_long(F_CODCF_DA)); const TRecnotype docsi = docs.items();
riep.set_var("#F_CODCF_TO",mask.get_long(F_CODCF_A)); if (docsi == 0)
riep.set_var("#F_ZONA_FROM",TVariant(mask.get(F_ZONA))); 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; 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 TDocumento d(docs.cursor()->curr());
const long cliente = riep.get("DOC.CODCF").as_int(); const TDate data = d.get_date(DOC_DATADOC);
const TString articolo = riep.get("CODART").as_string(); const TString8 numero = d.get(DOC_NDOC);
const TString descr = riep.get("DESCR").as_string(); const int nrows = d.physical_rows();
const long numeroDoc = riep.get("NDOC").as_int(); const int id = nbolle.add(numero);
const TString4 causale = riep.get("CODAGG1").as_string(); TString8 ggmm; ggmm.format("%02d-%02d", data.day(), data.month());
TCausale_lavanderie cau(causale);
//se la causale è di reso devo leggere il ritirato e non il consegnato
long qta = 0L;
if(cau.is_reso() && mask.get_bool(F_CHECK_NO_RESI)) datebolle.add(ggmm, id);
qta = riep.get("QTAGG1").as_int();
else
qta = riep.get("QTA").as_int();
riepilogo.add(count,cliente,articolo,descr,dataDoc,numeroDoc,qta);
count++;
}
}
TRiepBolle_report rep; for (int r = 1; r <= nrows; r++)
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)
{ {
riepilogoData.destroy(); const TRiga_documento & row = d[r];
riepilogoData2.destroy(); 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. if (print_resi && cau.is_reso())
TISAM_recordset dateDocAll(get_query(false, mask)); qta = row.get_real(RDOC_QTAGG1);
//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++;
}
}
else else
{ {
if(!overflow_date.ok()) TCausale_magazzino & caumag = cached_causale_magazzino(cau.get("S2"));
{ if (!print_da_fatt || caumag.get("S2").mid(36, 2) == "+1")
overflow_date = s._dataDoc; qta = row.get_real(RDOC_QTA);
overflow_clifo = s._cliente;
}
} }
break; if (qta != ZERO)
} {
else TArray * riep_row = (TArray *) riepilogo.objptr(articolo);
{
contatore++;
contatore++;
riep_set->set(contatore,TVariant(long (0)));
contatore++;
}
}
}
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 #ifdef DBG
//Crea file che contiene il recordset per debug //Crea file che contiene il recordset per debug
riep_set->save_as("c:/temp/riepilogoBolla.txt"); riep_set->save_as("c:/temp/riepilogoBolla.txt");
#endif #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. //carica tutte le variabili del report.
rep.mask2report(mask); if (riep_set->items() > 0L)
TReport_book b;
bool ok = b.add(rep);// Richiede parametri di stampa in base alla maschera omonima
if (ok)
{ {
if (b.pages() > 0) const int loops = riep_set->loops();
b.print_or_preview(); // Stampa effettivamente rep.mask2report(mask);
else riep_set->first_loop();
warning_box (TR("Nessun record estratto per i parametri inseriti")); 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() void TRiepBolle_app::main_loop()
{ {
TRiepBolle_mask m; TRiepBolle_mask m;
while(m.run()==K_ENTER) while(m.run()==K_ENTER)
{
elabora(m); elabora(m);
} }
}
int lv2700(int argc, char* argv[]) int lv2700(int argc, char* argv[])
{ {

View File

@ -7,5 +7,5 @@
#define F_DATA_A 208 #define F_DATA_A 208
#define F_ZONA 209 #define F_ZONA 209
#define F_DESZONA 210 #define F_DESZONA 210
#define F_CHECK_NO_RESI 211 #define F_PRINT_RESI 211
#define F_CHECK_FATT 212 #define F_PRINT_FATT 212

View File

@ -12,7 +12,7 @@
</field> </field>
<field x="113.37" y="0.12" type="Testo" width="5" height="1.5" pattern="1" text="Pag." /> <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"> <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> </field>
</section> </section>
<section type="Head" level="1" pattern="1" /> <section type="Head" level="1" pattern="1" />
@ -277,7 +277,13 @@
<source>BR</source> <source>BR</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,1000</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE ADD,1000</prescript>
</field> </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>
<section type="Foot" pattern="1" /> <section type="Foot" pattern="1" />
<section type="Foot" level="1" pattern="1" /> <section type="Foot" level="1" pattern="1" />

View File

@ -24,7 +24,7 @@ BEGIN
OUTPUT F_CODCF_DA CODCF OUTPUT F_CODCF_DA CODCF
OUTPUT F_RAGSOC_DA RAGSOC OUTPUT F_RAGSOC_DA RAGSOC
CHECKTYPE SEARCH CHECKTYPE SEARCH
FIELD #F_CODCF_FROM MESSAGE COPY,F_CODCF_A|CHECK,F_CODCF_A
END END
STRING F_RAGSOC_DA 50 STRING F_RAGSOC_DA 50
@ -50,7 +50,6 @@ BEGIN
COPY DISPLAY F_CODCF_DA COPY DISPLAY F_CODCF_DA
OUTPUT F_CODCF_A CODCF OUTPUT F_CODCF_A CODCF
OUTPUT F_RAGSOC_A RAGSOC OUTPUT F_RAGSOC_A RAGSOC
FIELD #F_CODCF_TO
CHECKTYPE SEARCH CHECKTYPE SEARCH
END END
@ -73,14 +72,12 @@ END
DATE F_DATA_DA DATE F_DATA_DA
BEGIN BEGIN
PROMPT 2 6 "Da Data " PROMPT 2 6 "Da Data "
FIELD #F_DATA_FROM
END END
DATE F_DATA_A DATE F_DATA_A
BEGIN BEGIN
PROMPT 40 6 "A Data " PROMPT 40 6 "A Data "
FLAGS "A" FLAGS "A"
FIELD #F_DATA_TO
VALITATE DATE_CMP_FUNC >= F_DATA_DA VALITATE DATE_CMP_FUNC >= F_DATA_DA
WARNING "La data finale deve essere successiva a quella iniziale" WARNING "La data finale deve essere successiva a quella iniziale"
END END
@ -100,7 +97,6 @@ BEGIN
OUTPUT F_ZONA CODTAB OUTPUT F_ZONA CODTAB
OUTPUT F_DESZONA S0 OUTPUT F_DESZONA S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
FIELD #F_ZONA_FROM
END END
STRING F_DESZONA 50 STRING F_DESZONA 50
@ -120,16 +116,14 @@ BEGIN
PROMPT 1 11 "@bDettaglio" PROMPT 1 11 "@bDettaglio"
END END
BOOLEAN F_CHECK_NO_RESI BOOLEAN F_PRINT_RESI
BEGIN BEGIN
PROMPT 2 12 "Stampare tutti i righi incluso i resi" PROMPT 2 12 "Stampare tutti i righi incluso i resi"
FIELD #F_CHECK_NO_RESI_TO
END END
BOOLEAN F_CHECK_FATT BOOLEAN F_PRINT_FATT
BEGIN BEGIN
PROMPT 2 13 "Stampare solo i righi da fatturare" PROMPT 2 13 "Stampare solo i righi da fatturare"
FIELD #F_CHECK_FATT_TO
END END
ENDPAGE ENDPAGE

View File

@ -65,53 +65,49 @@ protected:
virtual void main_loop(); virtual void main_loop();
void elabora(const TMask& mask) const; void elabora(const TMask& mask) const;
TString getQuery(const TMask& mask) const; TString getQuery(const TMask& mask) const;
bool ctl(TDate dataInizio, bool ctl(const TDate& dataInizio, const TDate& dataFine, bool isAnno) const;
TDate dataFine,
bool isAnno) const;
bool erroreBox(TString aMsg) const;
}; };
TString TVend_cli_app::getQuery(const TMask& mask) const TString TVend_cli_app::getQuery(const TMask& mask) const
{ {
//Stringhe x composizione query //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 //Richiamo parametri della ditta di configurazione file Ditta.ini
//andare su bolle senza numeratore //andare su bolle senza numeratore
//const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_FAT"); //const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_FAT");
//const TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_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"); const TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN");
select << "USE RDOC KEY 3\n";
select << "SELECT (DOC.TIPODOC='" << tipodoc << "')";
select << "USE RDOC KEY 1\n";
select << "SELECT ((DOC.TIPODOC='" << tipodoc << "')&&"; between << "&&(BETWEEN(DOC.ZONA,#ZONA_FROM,#ZONA_FROM))";
between << "&&(BETWEEN(CODART,#CODART_FROM,#CODART_TO))";
if(!mask.get_bool(F_CHECK_NO_RESI)){ between << "&&(BETWEEN(DOC.DATADOC,#DATA_FROM,#DATA_TO))";
select << "(2000@.B2!='X')&&"; between << "&&(STR(BETWEEN(DOC.CODCF,#CODCF_FROM,#CODCF_TO)))\n";
}
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";
orderBy << "BY DOC.CODCF CODART DOC.DATADOC NDOC\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"; join << "JOIN DOC TO RDOC ALIAS 1000 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n";
if(!mask.get_bool(F_CHECK_NO_RESI)){ if(!mask.get_bool(F_CHECK_NO_RESI))
join << "JOIN &LVCAU TO RDOC ALIAS 2000 INTO CODTAB==CODAGG1\n"; {
select << "&&(2000@.B2!='X')";
join << "JOIN &LVCAU TO RDOC ALIAS 2000 INTO CODTAB==CODAGG1\n";
} }
if(mask.get_bool(F_CHECK_FATT)){ if(mask.get_bool(F_CHECK_FATT))
join << "JOIN %CAU TO &LVCAU ALIAS 3000 INTO CODTAB==S2\n"; {
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 << select << between << orderBy << join;
query << "\nFROM " << limit;
query << "\nTO " << limit;
return query; return query;
} }
@ -131,16 +127,6 @@ void TRiepVendCli::add(long cliente, TString articolo, TString descr,
TArray::add(struttura); 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: Effettuo Controlli. Ritorna false-Errore se:
- data iniziale vuota - data iniziale vuota
@ -149,18 +135,14 @@ Effettuo Controlli. Ritorna false-Errore se:
(msk gestisce controllo se data iniziale è maggiore di (msk gestisce controllo se data iniziale è maggiore di
quella finale) quella finale)
*/ */
bool TVend_cli_app:: ctl(TDate dataInizio, bool TVend_cli_app::ctl(const TDate& dataInizio, const TDate& dataFine, bool isAnno) const
TDate dataFine,
bool isAnno) const
{ {
if(!isAnno) if (!isAnno)
{ {
int annoInizio = dataInizio.year(); const int annoInizio = dataInizio.year();
int annoFine = dataFine.year(); const int annoFine = dataFine.year();
if(annoInizio!=annoFine) if (annoInizio != annoFine)
{ return error_box(TR("Le date non fanno parte dello stesso anno!"));
return erroreBox(TR("le date non fanno parte dello stesso anno!"));;
}
} }
return true; return true;
} }
@ -173,9 +155,7 @@ void TVend_cli_app:: elabora(const TMask& mask)const
Se i controlli vanno a buon fine, allora Se i controlli vanno a buon fine, allora
va avanti nella gestione va avanti nella gestione
*/ */
if(ctl(mask.get_date(F_DATA_DA), if (ctl(mask.get_date(F_DATA_DA), mask.get_date(F_DATA_A), mask.get_bool(F_CHECK_ANNO)))
mask.get_date(F_DATA_A),
mask.get_bool(F_CHECK_ANNO)))
{ {
TISAM_recordset riep(getQuery(mask)); 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); const long cazzone2 = mask.get_long(F_CODCF_A);
//inserire parametri filtri //inserire parametri filtri
riep.set_var("#F_DATA_FROM", dataDa); riep.set_var("#DATA_FROM", dataDa);
riep.set_var("#F_DATA_TO", dataA); riep.set_var("#DATA_TO", dataA);
riep.set_var("#F_CODCF_FROM", cazzone1); riep.set_var("#CODCF_FROM", cazzone1);
riep.set_var("#F_CODCF_TO", cazzone2); riep.set_var("#CODCF_TO", cazzone2);
riep.set_var("#F_ZONA_FROM", TVariant(mask.get(F_ZONA))); riep.set_var("#ZONA_FROM", TVariant(mask.get(F_ZONA)));
riep.set_var("#F_ANNO_TO", TVariant(mask.get(F_ANNO))); riep.set_var("#ANNO_TO", TVariant(mask.get(F_ANNO)));
riep.set_var("#F_CHECK_ANNO_TO", TVariant(mask.get(F_CHECK_ANNO))); riep.set_var("#CODART_FROM", TVariant(mask.get(F_CODART_FROM)));
riep.set_var("#F_CODART_FROM", TVariant(mask.get(F_CODART_FROM))); riep.set_var("#CODART_TO", TVariant(mask.get(F_CODART_TO)));
riep.set_var("#F_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("#F_CHECK_NO_RESI_TO", TVariant(mask.get(F_CHECK_NO_RESI))); riep.set_var("#CHECK_FATT_TO", TVariant(mask.get(F_CHECK_FATT)));
riep.set_var("#F_CHECK_FATT_TO", TVariant(mask.get(F_CHECK_FATT)));
TRiepVendCli riepilogo; TRiepVendCli riepilogo;
//inizializzazione variabili da utilizzare nella //inizializzazione variabili da utilizzare nella
//struttura //struttura
TDate dataDoc; TDate dataDoc;
TString articolo; TString80 articolo;
TString descr; TString descr;
int numeroDoc; int numeroDoc;
long cliente; long cliente, qta;
long 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(); dataDoc = riep.get("DOC.DATADOC").as_date();
articolo = riep.get("CODART").as_string(); 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 //Stampa Ultimo record se ne ha fatto almeno 1
if(!start) if (!start)
{ {
riep_set->new_rec(); riep_set->new_rec();
colonna = 0; colonna = 0;
@ -309,7 +287,7 @@ void TVend_cli_app:: elabora(const TMask& mask)const
colonna++; colonna++;
riep_set->set(colonna,TVariant(descrOld)); riep_set->set(colonna,TVariant(descrOld));
for(int a = 1; a<13; a++) for (int a = 1; a<13; a++)
{ {
//colonna=3 //colonna=3
riep_set->set((colonna+a),TVariant(qtaArray[a])); 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"); //riep_set->save_as("c:\\riepilogoBolla.txt");
//Se il report esiste.. //Se il report esiste..
if(stampa) if (stampa)
{ {
//carica tutte le variabili del report. //carica tutte le variabili del report.
rep.mask2report(mask); rep.mask2report(mask);
@ -346,19 +324,16 @@ void TVend_cli_app::main_loop()
//Settaggio della data finale come //Settaggio della data finale come
//31-12-(anno in corso) //31-12-(anno in corso)
TString data = "31-12-"; TString16 data = "31-12-"; data << mask.get_int(F_ANNO);
data << mask.get_int(F_ANNO); mask.set(F_DATA_A, data);
mask.set("#F_DATA_TO",data);
while(mask.run()==K_ENTER) while (mask.run()==K_ENTER)
{
elabora(mask); elabora(mask);
}
} }
int lv2800(int argc, char* argv[]) int lv2800(int argc, char* argv[])
{ {
TVend_cli_app app; 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; return 0;
} }

View File

@ -24,7 +24,8 @@ BEGIN
DISPLAY "Partita IVA@11" PAIV DISPLAY "Partita IVA@11" PAIV
OUTPUT F_CODCF_DA CODCF OUTPUT F_CODCF_DA CODCF
OUTPUT F_RAGSOC_DA RAGSOC OUTPUT F_RAGSOC_DA RAGSOC
FIELD #F_CODCF_FROM FIELD #CODCF_FROM
CHECKTYPE NORMAL
END END
STRING F_RAGSOC_DA 50 STRING F_RAGSOC_DA 50
@ -39,6 +40,7 @@ BEGIN
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
OUTPUT F_CODCF_DA CODCF OUTPUT F_CODCF_DA CODCF
OUTPUT F_RAGSOC_DA RAGSOC OUTPUT F_RAGSOC_DA RAGSOC
CHECKTYPE SEARCH
END END
NUMBER F_CODCF_A 6 NUMBER F_CODCF_A 6
@ -54,7 +56,8 @@ BEGIN
DISPLAY "Partita IVA@11" PAIV DISPLAY "Partita IVA@11" PAIV
OUTPUT F_CODCF_A CODCF OUTPUT F_CODCF_A CODCF
OUTPUT F_RAGSOC_A RAGSOC OUTPUT F_RAGSOC_A RAGSOC
FIELD #F_CODCF_TO FIELD #CODCF_TO
CHECKTYPE NORMAL
END END
STRING F_RAGSOC_A 50 STRING F_RAGSOC_A 50
@ -69,6 +72,7 @@ BEGIN
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
OUTPUT F_CODCF_A CODCF OUTPUT F_CODCF_A CODCF
OUTPUT F_RAGSOC_A RAGSOC OUTPUT F_RAGSOC_A RAGSOC
CHECKTYPE SEARCH
END END
GROUPBOX DLG_NULL 80 3 GROUPBOX DLG_NULL 80 3
@ -80,14 +84,14 @@ DATE F_DATA_DA
BEGIN BEGIN
PROMPT 2 6 "Da Data " PROMPT 2 6 "Da Data "
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
FIELD #F_DATA_FROM FIELD #DATA_FROM
GROUP 1 GROUP 1
END END
DATE F_DATA_A DATE F_DATA_A
BEGIN BEGIN
PROMPT 30 6 "A Data " PROMPT 30 6 "A Data "
FIELD #F_DATA_TO FIELD #DATA_TO
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
VALITATE DATE_CMP_FUNC >= F_DATA_DA VALITATE DATE_CMP_FUNC >= F_DATA_DA
WARNING "La data finale deve essere successiva a quella iniziale" WARNING "La data finale deve essere successiva a quella iniziale"
@ -97,7 +101,6 @@ END
BOOLEAN F_CHECK_ANNO BOOLEAN F_CHECK_ANNO
BEGIN BEGIN
PROMPT 60 6 "Per Anno " PROMPT 60 6 "Per Anno "
FIELD #F_CHECK_ANNO_TO
MESSAGE TRUE DISABLE,1@|ENABLE,F_ANNO MESSAGE TRUE DISABLE,1@|ENABLE,F_ANNO
MESSAGE FALSE ENABLE,1@|DISABLE,F_ANNO MESSAGE FALSE ENABLE,1@|DISABLE,F_ANNO
END END
@ -108,7 +111,7 @@ NUMBER F_ANNO 4
FLAGS "A" FLAGS "A"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "Inserire l'anno" WARNING "Inserire l'anno"
FIELD #F_ANNO_TO FIELD #ANNO_TO
END END
GROUPBOX DLG_NULL 80 4 GROUPBOX DLG_NULL 80 4
@ -123,10 +126,11 @@ BEGIN
USE 47 USE 47
INPUT CODART F_CODART_FROM INPUT CODART F_CODART_FROM
DISPLAY "Codice@20" CODART DISPLAY "Codice@20" CODART
DISPAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_CODART_FROM CODART OUTPUT F_CODART_FROM CODART
OUTPUT F_DESART_FROM DESCR OUTPUT F_DESART_FROM DESCR
FIELD #F_CODART_FROM FIELD #CODART_FROM
CHECKTYPE NORMAL
END END
STRING F_DESART_FROM 40 STRING F_DESART_FROM 40
@ -135,10 +139,10 @@ BEGIN
USE 47 KEY 2 USE 47 KEY 2
INPUT DESCR F_DESART_FROM INPUT DESCR F_DESART_FROM
DISPLAY "Codice@20" CODART DISPLAY "Codice@20" CODART
DISPALY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_CODART_FROM CODART OUTPUT F_CODART_FROM CODART
OUTPUT F_DESART_FROM DESCR OUTPUT F_DESART_FROM DESCR
FIELD #F_DESART_FROM CHECKTYPE SEARCH
END END
STRING F_CODART_TO 20 STRING F_CODART_TO 20
@ -151,7 +155,7 @@ BEGIN
DISPAY "Descrizione@50" DESCR DISPAY "Descrizione@50" DESCR
OUTPUT F_CODART_TO CODART OUTPUT F_CODART_TO CODART
OUTPUT F_DESART_TO DESCR OUTPUT F_DESART_TO DESCR
FIELD #F_CODART_TO FIELD #CODART_TO
END END
STRING F_DESART_TO 40 STRING F_DESART_TO 40
@ -160,10 +164,9 @@ BEGIN
USE 47 KEY 2 USE 47 KEY 2
INPUT DESCR F_DESART_TO INPUT DESCR F_DESART_TO
DISPLAY "Codice@20" CODART DISPLAY "Codice@20" CODART
DISPALY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_CODART_TO CODART OUTPUT F_CODART_TO CODART
OUTPUT F_DESART_TO DESCR OUTPUT F_DESART_TO DESCR
FIELD #F_DESART_TO
END END
GROUPBOX DLG_NULL 80 3 GROUPBOX DLG_NULL 80 3
@ -181,7 +184,8 @@ BEGIN
OUTPUT F_ZONA CODTAB OUTPUT F_ZONA CODTAB
OUTPUT F_DESZONA S0 OUTPUT F_DESZONA S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
FIELD #F_ZONA_FROM FIELD #ZONA_FROM
CHECKTYPE NORMAL
END END
STRING F_DESZONA 50 STRING F_DESZONA 50
@ -193,21 +197,21 @@ BEGIN
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_ZONA CODTAB OUTPUT F_ZONA CODTAB
OUTPUT F_DESZONA S0 OUTPUT F_DESZONA S0
CHECKTYPE SEARCH
END END
BOOLEAN F_CHECK_NO_RESI BOOLEAN F_CHECK_NO_RESI
BEGIN BEGIN
PROMPT 2 16 "Stampo tutti i righi incluso i resi " PROMPT 2 16 "Stampo tutti i righi incluso i resi "
FIELD #F_CHECK_NO_RESI_TO FIELD #CHECK_NO_RESI_TO
END END
BOOLEAN F_CHECK_FATT BOOLEAN F_CHECK_FATT
BEGIN BEGIN
PROMPT 2 18 "Stampo solo i righi da fatturare " PROMPT 2 18 "Stampo solo i righi da fatturare "
FIELD #F_CHECK_FATT_TO FIELD #CHECK_FATT_TO
END END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -107,7 +107,7 @@ TObject* TBuoni_cache::key2obj(const char* key)
const long codcab = clifo.get_long(CLI_CODCAB); const long codcab = clifo.get_long(CLI_CODCAB);
const TString80 iban = clifo.get(CLI_IBAN); 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"); const TString8 causmag = cache().get("%TIP", _tipodoc, "S9");
//recupero i dati di interesse dal file CFVEN //recupero i dati di interesse dal file CFVEN
@ -1041,7 +1041,7 @@ bool TConta_pulito_app::create()
_msk = new TConta_pulito_msk(); _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) if (argc() > 2)
{ {
_auto = argv(2); _auto = argv(2);

View File

@ -35,7 +35,7 @@ TAutogiro_msk::TAutogiro_msk() : TAutomask("lv2a00a")
// Propone itinerario senza autista // Propone itinerario senza autista
TEdit_field& g = efield(F_ITINERARIO); TEdit_field& g = efield(F_ITINERARIO);
TCursor& gcur = *g.browse()->cursor(); 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()) if (gcur.curr().get("S1").empty())
{ {
@ -77,20 +77,22 @@ void TAutogiro_app::main_loop()
while (msk.run() == K_ENTER) while (msk.run() == K_ENTER)
{ {
const TDate oggi(TODAY); const TDate oggi(TODAY);
TLocalisamfile pasplan(LF_LVPASPLAN); TFast_isamfile pasplan(LF_LVPASPLAN);
TString query; TString query;
query << "USE LVCONDV SELECT LVPASPLAN->NRIGA!=1" query << "USE LVCONDV SELECT LVPASPLAN->NRIGA!=1"
<< "\nJOIN LVPASPLAN INTO CODCF==CODCF CODCONT==CODCONT NRIGA==1"; << "\nJOIN LVPASPLAN INTO CODCF==CODCF CODCONT==CODCONT NRIGA==1";
TISAM_recordset contratti(query); TISAM_recordset contratti(query);
TProgind pi(contratti.items(), title()); TProgress_monitor pi(contratti.items(), title());
TLog_report log; TLog_report log;
for (bool ok = contratti.move_first(); ok; ok = contratti.move_next()) for (bool ok = contratti.move_first(); ok; ok = contratti.move_next())
{ {
if (!pi.addstatus(1)) const long codcf = contratti.get(LVCONDV_CODCF).as_int();
break; if (codcf <= 0)
continue;
const TDate datasc = contratti.get(LVCONDV_DATASC).as_date(); const TDate datasc = contratti.get(LVCONDV_DATASC).as_date();
if (datasc.ok() && datasc < oggi) if (datasc.ok() && datasc < oggi)
continue; continue;
@ -100,12 +102,10 @@ void TAutogiro_app::main_loop()
{ {
if (nriga == 1) if (nriga == 1)
{ {
TString8 cod; cod.format("C|%06ld", codcf);
TString msg; TString msg;
msg << TR("Contratto ") << cod << '/' << contratti.get(LVCONDV_CODCONT)
TString8 cod; cod.format("%06ld", contratti.get(LVCONDV_CODCF).as_int()); << " - " << cache().get(LF_CLIFO, cod, CLI_RAGSOC);
msg << TR("Contratto ") << cod << '/' << contratti.get(LVCONDV_CODCONT);
cod.insert("C|");
msg << " - " << cache().get(LF_CLIFO, cod, CLI_RAGSOC);
log.log(0, msg); log.log(0, msg);
} }
@ -127,6 +127,9 @@ void TAutogiro_app::main_loop()
break; break;
} }
} }
if (!pi.add_status())
break;
} }
log.preview(); log.preview();
@ -136,6 +139,6 @@ void TAutogiro_app::main_loop()
int lv2A00(int argc, char* argv[]) int lv2A00(int argc, char* argv[])
{ {
TAutogiro_app app; TAutogiro_app app;
app.run(argc, argv, TR("Generazione automatica giri")); app.run(argc, argv, TR("Pianificazione da contratti"));
return 0; return 0;
} }

File diff suppressed because it is too large Load Diff

View File

@ -29,7 +29,7 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
GROUPBOX DLG_NULL 78 8 GROUPBOX DLG_NULL 78 9
BEGIN BEGIN
PROMPT 1 4 "Estremi del documento" PROMPT 1 4 "Estremi del documento"
END END
@ -105,6 +105,7 @@ BEGIN
FIELD NDOC FIELD NDOC
USE LF_DOC SELECT ((#F_STATO=="")||(STATO==#F_STATO))&&((#F_DATADOC=="")||(DATADOC==#F_DATADOC)) 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_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 PROVV F_PROVV SELECT
INPUT ANNO F_ANNO SELECT INPUT ANNO F_ANNO SELECT
INPUT CODNUM F_CODNUM SELECT INPUT CODNUM F_CODNUM SELECT
@ -119,6 +120,10 @@ BEGIN
DISPLAY "C/F" TIPOCF DISPLAY "C/F" TIPOCF
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC 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_NDOC NDOC
OUTPUT F_STATO STATO OUTPUT F_STATO STATO
OUTPUT F_TIPODOC TIPODOC OUTPUT F_TIPODOC TIPODOC
@ -159,6 +164,7 @@ BEGIN
PROMPT 24 8 "Codice " 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)) 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_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
JOIN LF_COMUNI TO LF_CLIFO INTO STATO==STATOCF COM==COMCF
INPUT TIPOCF F_TIPOCF SELECT INPUT TIPOCF F_TIPOCF SELECT
INPUT CODCF F_CODCF INPUT CODCF F_CODCF
INPUT PROVV F_PROVV INPUT PROVV F_PROVV
@ -175,6 +181,10 @@ BEGIN
DISPLAY "Data\ndocumento" DATADOC DISPLAY "Data\ndocumento" DATADOC
DISPLAY "Valuta" CODVAL DISPLAY "Valuta" CODVAL
DISPLAY "Totale\ndocumento@18V" G1:TOTDOC 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 COPY OUTPUT F_NDOC
OUTPUT F_CODCF CODCF OUTPUT F_CODCF CODCF
CHECKTYPE NORMAL CHECKTYPE NORMAL
@ -193,10 +203,16 @@ BEGIN
FLAGS "B" FLAGS "B"
END END
STRING F_RIFSEARCH 30
BEGIN
PROMPT 2 10 "Ricerca alternativa "
FLAGS "B"
END
LISTBOX F_PROVV 14 LISTBOX F_PROVV 14
BEGIN BEGIN
FIELD PROVV FIELD PROVV
PROMPT 2 10 "Tipo " PROMPT 2 11 "Tipo "
ITEM "D|Definitiva " ITEM "D|Definitiva "
ITEM "P|Provvisoria" ITEM "P|Provvisoria"
KEY 1 2 KEY 1 2

View File

@ -74,11 +74,12 @@ protected:
virtual int write( const TMask& m ); virtual int write( const TMask& m );
virtual int rewrite( const TMask& m ); virtual int rewrite( const TMask& m );
virtual int read ( TMask& m ); virtual int read ( TMask& m );
virtual void init_query_mode( TMask& m );
virtual void init_insert_mode( TMask& m ); virtual void init_insert_mode( TMask& m );
virtual void init_modify_mode( TMask& m ); virtual void init_modify_mode( TMask& m );
void elimina_vuote( const 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); void date_dotmp( const TMask& m);
virtual const char * query_mask_name() { return "lv3300a"; } 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 //ARROTONDA: metodo che arrotonda la quantità che gli passo se è previsto sul contratto
void TGestione_buoni_msk::arrotonda(const TMask& msk, real& quantita) 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); const TString& codart = msk.get(FR_CODART);
//instanzio una cache sulla tabella del magazzino //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) void TGestione_buoni_msk::dettaglio_causale(TSheet_field& ss)
{ {
TGestione_buoni_msk& dmsk = (TGestione_buoni_msk&) ss.mask(); 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 //instanzio una cache sulle causali
const TCausale_lavanderie cau(causale); const TCausale_lavanderie cau(causale);
@ -159,12 +160,12 @@ TDate TGestione_buoni_msk::proponi_dataprco() const
if (dadata.ok()) if (dadata.ok())
{ {
TDate adata = dadata; TDate adata = dadata;
++dadata;
adata.addmonth(1); adata.addmonth(1);
++dadata;
TString query = "USE LVRCONSPLAN KEY 3\n"; TString query = "USE LVRCONSPLAN KEY 3";
query << "FROM CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_LVCODCONT) << " DTCONS=" << dadata << "\n"; query << "\nFROM CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_LVCODCONT) << " DTCONS=" << dadata;
query << "TO CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_LVCODCONT) << " DTCONS=" << adata << "\n"; query << "\nTO CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_LVCODCONT) << " DTCONS=" << adata;
TISAM_recordset consegne(query); TISAM_recordset consegne(query);
if (consegne.move_first()) 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); dmsk.set(F_LVCODCONT, tmp);
const TDate dataprco = dmsk.proponi_dataprco(); 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); dmsk.set(F_LVDATAPRCO, dataprco);
const TString8 autista = dmsk.proponi_autista(); 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(); TGestione_buoni_msk& dmsk = (TGestione_buoni_msk&)f.mask();
const bool ins_mode = dmsk.mode() == MODE_INS; if(dmsk.mode() == MODE_INS)
if (ins_mode)
dmsk.set(F_CODAG, dmsk.proponi_autista()); 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) 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); doc.put(DOC_CODCONT, codcont);
const TDate dataprco = dmsk.proponi_dataprco(); 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); 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 //recupero i dati di interesse dalla riga del contratto e li inserisco sullo sheet
const TString80 codart = rcont.get(LVRCONDV_CODART).as_string(); 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 //instanzio una cache sulle anagrafice di magazzino
const TRectype& anamag = cache().get(LF_ANAMAG,codart); 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_ANNOES, datadoc.year());
magcli.put(CLIFOGIAC_TIPOCF, 'C'); magcli.put(CLIFOGIAC_TIPOCF, 'C');
magcli.put(CLIFOGIAC_CODCF, codcf); 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_CODART, msk.get(FR_CODART));
magcli.put(CLIFOGIAC_NRIGA, 1); magcli.put(CLIFOGIAC_NRIGA, 1);
@ -1248,10 +1251,11 @@ TMask* TGestione_buoni_app::get_mask( int mode )
_doc_masks.add(tipodoc, m); _doc_masks.add(tipodoc, m);
const TTipo_documento& tdoc = m->doc().tipo(); 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) 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")) 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)
{ {
TRiga_documento& rdoc = (TRiga_documento&)*row; TDocumento_mask& mask = (TDocumento_mask&) m;
TDocumento& d = mask.doc();
const TCausale_lavanderie cau(rdoc.get(RDOC_CODAGG1));
if (cau.movcong())
{
rcondv.put(LVRCONDV_CODCF,codcf);
rcondv.put(LVRCONDV_CODCONT, codcont);
rcondv.put(LVRCONDV_CODART, rdoc.get(RDOC_CODART));
if (rcondv.read() == NOERR)
{
rcondv.put(LVRCONDV_QTACONG, rdoc.get_real(RDOC_QTAGG5));
rcondv.rewrite();
}
}
const real ritat = rdoc.get_real(RDOC_QTAGG1);
const real conat = rdoc.get_real(RDOC_QTA);
rdoc.put(RDOC_QTAGG4, ritat);
rdoc.put(RDOC_QTAGG3, conat);
}
return true; 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) 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); TSheet_field& sheet = mask.sfield(F_SHEET);
const long codcf = mask.get_long(F_CODCF); const long codcf = mask.get_long(F_CODCF);
const int indsped = mask.get_int(F_CODINDSP); 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 TLaundry_contract cont(codcf, indsped, datadoc);
const int codcont = cont.get_int(LVCONDV_CODCONT); const int codcont = cont.get_int(LVCONDV_CODCONT);
@ -1376,7 +1371,7 @@ int TGestione_buoni_app::write( const TMask& m )
{ {
elimina_vuote(m); elimina_vuote(m);
salva_conguaglio((const TDocumento_mask&)m); salva_conguaglio(m);
date_dotmp(m); date_dotmp(m);
@ -1388,7 +1383,7 @@ int TGestione_buoni_app::rewrite( const TMask& m )
{ {
elimina_vuote(m); elimina_vuote(m);
salva_conguaglio((const TDocumento_mask&)m); salva_conguaglio(m);
date_dotmp(m); date_dotmp(m);
@ -1439,19 +1434,26 @@ int TGestione_buoni_app::read(TMask& m)
return err; 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 //ridefinisco il metodo init_insert_mode della TMotore_application
void TGestione_buoni_app::init_insert_mode(TMask &m) 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(); TDocumento& d = mask.doc();
_giac.reset(d); _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.reset_var_mask();
mask.first_focus(F_CODCF, false); 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 //ridefinisco il metodo init_query_mode della TMotore_application
void TGestione_buoni_app::init_modify_mode(TMask &m) void TGestione_buoni_app::init_modify_mode(TMask &m)
{ {
TGestione_buoni_msk& mask = (TGestione_buoni_msk&) m; m.first_focus(F_CODCF, false);
//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);
return TMotore_application::init_modify_mode(m); return TMotore_application::init_modify_mode(m);
} }
@ -1483,6 +1476,7 @@ TGiac_per_cli& TGestione_buoni_app::giacenza()
int lv3300( int argc, char* argv[]) int lv3300( int argc, char* argv[])
{ {
TGestione_buoni_app a; TGestione_buoni_app a;
a.run( argc, argv, TR("Buoni di Prelievo")); a.run( argc, argv, TR("Buoni di Prelievo"));
return 0; return 0;
} }

View File

@ -12,7 +12,6 @@
//classe TSitmag_msk //classe TSitmag_msk
class TSitmag_msk: public TAutomask class TSitmag_msk: public TAutomask
{ {
static const int _ndep = 4;
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); 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 //recupero le variabili di interesse
const TString80 codart = field(F_CODART).get(); const TString80 codart = field(F_CODART).get();
const int anno = field(F_ANNO).get_long(); 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 //Instanzio l'oggetto che mi permette di recuperare le quantità riceercate
const TArticolo_giacenza art(codart); 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 posordf = sheet.cid2index(S_ORDFOR);
const int posordc = sheet.cid2index(S_ORDCLI); const int posordc = sheet.cid2index(S_ORDCLI);
const int posdisp = sheet.cid2index(S_DISP); 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 //per ogni magazzino
for(int i = 0; i < _ndep; i++) for(int i = 0; i < rows; i++)
{ {
//recupero una riga alla volta //recupero una riga alla volta
TToken_string& row = sheet.row(i); TToken_string& row = sheet.row(i);
//recupero il codice del deposito //recupero il codice del deposito
TString4 coddep = row.get(sheet.cid2index(S_CODDEP)); TString8 codmag = row.get(sheet.cid2index(S_CODMAG)); codmag.rpad(3);
coddep.trim(); const TString4 coddep = row.get(sheet.cid2index(S_CODDEP));
//costruisco il codice magazzino + deposito //costruisco il codice magazzino + deposito
TString8 deposito; codmag << coddep;
deposito << codmag << coddep;
//inizializzo le quantità di interesse(la giacenza a quella corrente, le altre a zero) //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 ordf = 0L;
long ordc = 0L; long ordc = 0L;
long disp = 0L; long disp = 0L;
//cerco il record dell'articolo selzionato corrispondente all'anno corrente //cerco il record dell'articolo selzionato corrispondente all'anno corrente
TRecord_array& rmag = art.mag(anno); 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 //se lo trovo ricavo i valori degli ordini fornitori e clienti
//e poi calcolo la disponibilità seconda la formula //e poi calcolo la disponibilità seconda la formula
//disponibilità = giacenza + ordini_fornitori - ordini_clienti //disponibilità = giacenza + ordini_fornitori - ordini_clienti
@ -83,27 +86,15 @@ void TSitmag_msk::calcola_qta_magazzino() const
row.add(ordf, posordf); row.add(ordf, posordf);
row.add(ordc, posordc); row.add(ordc, posordc);
row.add(disp, posdisp); row.add(disp, posdisp);
} totgiac += giac;
totordf += ordf;
//calcolo dei totali totordc += ordc;
long totgiac = 0L; totdisp += disp;
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);
} }
//scrivo i totali nelle posizioni corrette //scrivo i totali nelle posizioni corrette
TToken_string& row = sheet.row(_ndep); TToken_string& row = sheet.row(rows);
row.add(totgiac, posgiac); row.add(totgiac, posgiac);
row.add(totordf, posordf); row.add(totordf, posordf);
row.add(totordc, posordc); 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); reset(F_DESART);
TSheet_field& sheet = sfield(F_RIGHE); 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); TToken_string& row = sheet.row(i);
row.add(0L, sheet.cid2index(S_GIAC)); row.add(0L, sheet.cid2index(S_GIAC));
@ -164,30 +157,29 @@ TSitmag_msk::TSitmag_msk():TAutomask("lv3500a")
//precarico i campi fissi //precarico i campi fissi
const TDate oggi(TODAY); const TDate oggi(TODAY);
set(F_ANNO, esercizi().date2esc(oggi)); 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); 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); if (coddep.full())
switch(i)
{ {
case 0: coddep = ini_get_string(CONFIG_DITTA, "lv", "CODMAGN"); break; //Deposito nuovo TToken_string& row = sheet.row(-1);
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 row.add(codmag, sheet.cid2index(S_CODMAG));
case 3: coddep = ini_get_string(CONFIG_DITTA, "lv", "CODMAGCL"); break; //Deposito presso cliente
default: row.add(TR("TOTALI"), sheet.cid2index(S_DESDEP)); break;
}
row.add(coddep, sheet.cid2index(S_CODDEP)); row.add(coddep, sheet.cid2index(S_CODDEP));
//questo if mi permette di fare la decodifica del campo descrizione deposito //questo if mi permette di fare la decodifica del campo descrizione deposito
if(i < _ndep) sheet.check_row(sheet.items() - 1);
sheet.check_row(i); }
} }
TToken_string& row = sheet.row(-1);
row.add(TR("TOTALI"), sheet.cid2index(S_DESDEP));
sheet.force_update(); sheet.force_update();
} }

View File

@ -3,13 +3,12 @@
#define F_CODART 201 #define F_CODART 201
#define F_DESART 202 #define F_DESART 202
#define F_ANNO 203 #define F_ANNO 203
#define F_CODMAG 204 #define F_RIGHE 204
#define F_DESMAG 205
#define F_RIGHE 206
#define S_CODDEP 101 #define S_CODMAG 101
#define S_DESDEP 102 #define S_CODDEP 102
#define S_GIAC 103 #define S_DESDEP 103
#define S_ORDFOR 104 #define S_GIAC 104
#define S_ORDCLI 105 #define S_ORDFOR 105
#define S_DISP 106 #define S_ORDCLI 106
#define S_DISP 107

View File

@ -13,7 +13,7 @@ END
ENDPAGE ENDPAGE
PAGE "Riepilogo depositi" -1 -1 80 10 PAGE "Riepilogo Magazzini" -1 -1 80 10
GROUPBOX DLG_NULL 78 4 GROUPBOX DLG_NULL 78 4
BEGIN BEGIN
@ -51,29 +51,13 @@ BEGIN
PROMPT 2 3 "Esercizio " PROMPT 2 3 "Esercizio "
END 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 BEGIN
PROMPT 23 5 "" PROMPT 0 7 "Righe"
FLAGS "D" ITEM "Cod.\nMag.@3"
END
SPREADSHEET F_RIGHE 76 8
BEGIN
PROMPT 2 7 "Righe"
ITEM "Cod.\nDep.@3" ITEM "Cod.\nDep.@3"
ITEM "Deposito@50" ITEM "Deposito@32"
ITEM "Giacenza@6" ITEM "Giacenza@6"
ITEM "Ord.\nFor.@6" ITEM "Ord.\nFor.@6"
ITEM "Ord.\nCli.@6" ITEM "Ord.\nCli.@6"
@ -100,11 +84,20 @@ ENDPAGE
PAGE "Riga" -1 -1 80 10 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 STRING S_CODDEP 3
BEGIN BEGIN
PROMPT 1 1 "Cod. dep. " PROMPT 1 1 "Deposito "
USE MAG USE MAG
INPUT CODTAB[1,3] -F_CODMAG INPUT CODTAB[1,3] S_CODMAG
INPUT CODTAB[4,5] S_CODDEP INPUT CODTAB[4,5] S_CODDEP
OUTPUT S_DESDEP S0 OUTPUT S_DESDEP S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED

View File

@ -106,6 +106,7 @@
#define F_CODDITTA 209 #define F_CODDITTA 209
#define F_RAGSOCDITTA 210 #define F_RAGSOCDITTA 210
#define F_LIQDIFF 211 #define F_LIQDIFF 211
#define F_RIFSEARCH 212
#define F_CDC1 251 #define F_CDC1 251
#define F_CDC12 262 #define F_CDC12 262

View File

@ -68,7 +68,10 @@ DATASCAD4 = S_DISABILITATO //500
DATASCAD5 = S_DISABILITATO //500 DATASCAD5 = S_DISABILITATO //500
CODABIA = S_OBBLIGATORIO //600 CODABIA = S_OBBLIGATORIO //600
CODCABA = 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 = S_NORMALE //600
IBAN_STATO = S_NORMALE //600 IBAN_STATO = S_NORMALE //600
IBAN_CHECK = S_NORMALE //600 IBAN_CHECK = S_NORMALE //600
@ -79,7 +82,12 @@ BBAN_CAB = S_NORMALE //600
BBAN_CONTO = S_NORMALE //600 BBAN_CONTO = S_NORMALE //600
CODABIP = S_NORMALE //700 CODABIP = S_NORMALE //700
CODCABP = 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 CATVEN = S_NORMALE //800
DESCATVEN = S_DISABILITATO //800 DESCATVEN = S_DISABILITATO //800
CODLIST1 = S_NORMALE //800 CODLIST1 = S_NORMALE //800
@ -300,6 +308,6 @@ Rule(1) = (TIPORIGA!="05")&&(QTA==0)&&(QTAGG1==0)
BgCol(1) = 255,255,128 BgCol(1) = 255,255,128
FgCol(1) = 0,0,0 FgCol(1) = 0,0,0
RuleName(2) = Dotazione scaduta 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 BgCol(2) = 255,0,0
FgCol(2) = 0,0,0 FgCol(2) = 0,0,0

View File

@ -68,7 +68,10 @@ DATASCAD4 = S_DISABILITATO //500
DATASCAD5 = S_DISABILITATO //500 DATASCAD5 = S_DISABILITATO //500
CODABIA = S_OBBLIGATORIO //600 CODABIA = S_OBBLIGATORIO //600
CODCABA = 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 = S_NORMALE //600
IBAN_STATO = S_NORMALE //600 IBAN_STATO = S_NORMALE //600
IBAN_CHECK = S_NORMALE //600 IBAN_CHECK = S_NORMALE //600
@ -79,7 +82,12 @@ BBAN_CAB = S_NORMALE //600
BBAN_CONTO = S_NORMALE //600 BBAN_CONTO = S_NORMALE //600
CODABIP = S_NORMALE //700 CODABIP = S_NORMALE //700
CODCABP = 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 CATVEN = S_NORMALE //800
DESCATVEN = S_DISABILITATO //800 DESCATVEN = S_DISABILITATO //800
CODLIST1 = S_NORMALE //800 CODLIST1 = S_NORMALE //800
@ -303,6 +311,6 @@ Rule(1) = (TIPORIGA!="05")&&(QTA==0)&&(QTAGG1==0)
BgCol(1) = 255,255,128 BgCol(1) = 255,255,128
FgCol(1) = 0,0,0 FgCol(1) = 0,0,0
RuleName(2) = Dotazione scaduta 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 BgCol(2) = 255,0,0
FgCol(2) = 0,0,0 FgCol(2) = 0,0,0

View File

@ -68,7 +68,10 @@ DATASCAD4 = S_DISABILITATO //500
DATASCAD5 = S_DISABILITATO //500 DATASCAD5 = S_DISABILITATO //500
CODABIA = S_OBBLIGATORIO //600 CODABIA = S_OBBLIGATORIO //600
CODCABA = 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 = S_NORMALE //600
IBAN_STATO = S_NORMALE //600 IBAN_STATO = S_NORMALE //600
IBAN_CHECK = S_NORMALE //600 IBAN_CHECK = S_NORMALE //600
@ -79,7 +82,12 @@ BBAN_CAB = S_NORMALE //600
BBAN_CONTO = S_NORMALE //600 BBAN_CONTO = S_NORMALE //600
CODABIP = S_NORMALE //700 CODABIP = S_NORMALE //700
CODCABP = 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 CATVEN = S_NORMALE //800
DESCATVEN = S_DISABILITATO //800 DESCATVEN = S_DISABILITATO //800
CODLIST1 = S_NORMALE //800 CODLIST1 = S_NORMALE //800
@ -124,9 +132,9 @@ DENCAUSTRASP = S_NORMALE //1400
CODVETT1 = S_NORMALE //1500 CODVETT1 = S_NORMALE //1500
CODVETT2 = S_NORMALE //1500 CODVETT2 = S_NORMALE //1500
CODVETT3 = S_NORMALE //1500 CODVETT3 = S_NORMALE //1500
NOMEVETT1 = S_NORMALE //1500 NOMEVETT1 = S_NOCHECK //1500
NOMEVETT2 = S_NORMALE //1500 NOMEVETT2 = S_NOCHECK //1500
NOMEVETT3 = S_NORMALE //1500 NOMEVETT3 = S_NOCHECK //1500
NCOPIE = S_NASCOSTO //1600 NCOPIE = S_NASCOSTO //1600
GRPARTENZA = S_NORMALE //1700 GRPARTENZA = S_NORMALE //1700
DATAPART = S_NORMALE //1700 DATAPART = S_NORMALE //1700
@ -188,7 +196,6 @@ LVCODITI = S_NORMALE //4041
BLANK = S_DISABILITATO //4000 BLANK = S_DISABILITATO //4000
[DEFAULT] [DEFAULT]
Default(0)=F_CAUSTRASP|VEN
[SHEET] [SHEET]
Col(0)=FR_CODART|Codice|8 Col(0)=FR_CODART|Codice|8
@ -200,13 +207,14 @@ Col(5)=FR_DESCR||28
Col(6)=FR_CAULAV|Caus.|5 Col(6)=FR_CAULAV|Caus.|5
Col(7)=FR_RITIRO|Ritiro|6 Col(7)=FR_RITIRO|Ritiro|6
Col(8)=FR_QTA|Rotti|6 Col(8)=FR_QTA|Rotti|6
Col(9)=FR_JOLLY1@R|Dot.Od.|7 Col(9)=FR_JOLLY1@R|Dotaz.|7
Col(10)=FR_JOLLY5@R|Dot.In.|7 Col(10)=FR_JOLLY2@R|D.Temp.|7
Col(11)=FR_TIPORIGA|Tipo|4 Col(11)=FR_JOLLY3|Inizio|10
Col(12)=FR_CODMAG Col(12)=FR_JOLLY4|Fine|10Col(9)=FR_TIPORIGA|Tipo|4
Col(13)=FR_CODDEP Col(13)=FR_CODMAG
Col(14)=FR_CODMAGC Col(14)=FR_CODDEP
Col(15)=FR_CODDEPC Col(15)=FR_CODMAGC
Col(16)=FR_CODDEPC
[RIGHE] [RIGHE]

View File

@ -68,7 +68,10 @@ DATASCAD4 = S_DISABILITATO //500
DATASCAD5 = S_DISABILITATO //500 DATASCAD5 = S_DISABILITATO //500
CODABIA = S_OBBLIGATORIO //600 CODABIA = S_OBBLIGATORIO //600
CODCABA = 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 = S_NORMALE //600
IBAN_STATO = S_NORMALE //600 IBAN_STATO = S_NORMALE //600
IBAN_CHECK = S_NORMALE //600 IBAN_CHECK = S_NORMALE //600
@ -79,7 +82,12 @@ BBAN_CAB = S_NORMALE //600
BBAN_CONTO = S_NORMALE //600 BBAN_CONTO = S_NORMALE //600
CODABIP = S_NORMALE //700 CODABIP = S_NORMALE //700
CODCABP = 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 CATVEN = S_NORMALE //800
DESCATVEN = S_DISABILITATO //800 DESCATVEN = S_DISABILITATO //800
CODLIST1 = S_NORMALE //800 CODLIST1 = S_NORMALE //800
@ -188,7 +196,6 @@ LVCODITI = S_NORMALE //4041
BLANK = S_DISABILITATO //4000 BLANK = S_DISABILITATO //4000
[DEFAULT] [DEFAULT]
Default(0)=F_CAUSTRASP|VEN
[SHEET] [SHEET]
Col(0)=FR_CODART|Codice|8 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(11)=FR_JOLLY2@R|D.Temp.|7
Col(12)=FR_JOLLY3|Inizio|10 Col(12)=FR_JOLLY3|Inizio|10
Col(13)=FR_JOLLY4|Fine|10 Col(13)=FR_JOLLY4|Fine|10
Col(14)=FR_UMQTA Col(14)=FR_QTAGG5|Conguaglio|10
Col(15)=FR_SCONTO Col(15)=FR_UMQTA
Col(16)=FR_PERCPROV Col(16)=FR_SCONTO
Col(17)=FR_PERCPROV1 Col(17)=FR_PERCPROV
Col(18)=FR_CODIVA Col(18)=FR_PERCPROV1
Col(19)=FR_NCOLLI Col(19)=FR_CODIVA
Col(20)=FR_PNETTO Col(20)=FR_NCOLLI
Col(21)=FR_TARA Col(21)=FR_PNETTO
Col(22)=FR_CAUS Col(22)=FR_TARA
Col(23)=FR_CODMAGC Col(23)=FR_CAUS
Col(24)=FR_CODDEPC Col(24)=FR_CODMAGC
Col(25)=FR_CODMAG Col(25)=FR_CODDEPC
Col(26)=FR_CODDEP Col(26)=FR_CODMAG
Col(27)=FR_TIPORIGA|Tipo|4 Col(27)=FR_CODDEP
Col(28)=FR_TIPORIGA|Tipo|4
[RIGHE] [RIGHE]
Tipo(0)=21 Tipo(0)=21
@ -301,6 +309,6 @@ Rule(1) = (TIPORIGA!="05")&&(QTA==0)&&(QTAGG1==0)
BgCol(1) = 255,255,128 BgCol(1) = 255,255,128
FgCol(1) = 0,0,0 FgCol(1) = 0,0,0
RuleName(2) = Dotazione scaduta 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 BgCol(2) = 255,0,0
FgCol(2) = 0,0,0 FgCol(2) = 0,0,0

View File

@ -56,11 +56,11 @@ bool lv_is_holiday(const TDate& data)
return (*cal)[index] == 'X'; return (*cal)[index] == 'X';
} }
HIDDEN short __lv_02_active = 0x3;
HIDDEN TFilename __lv_backup_path; HIDDEN TFilename __lv_backup_path;
bool lv_is_02_active() bool lv_is_02_active()
{ {
HIDDEN short __lv_02_active = 0x3;
if (__lv_02_active == 0x3) if (__lv_02_active == 0x3)
{ {
__lv_02_active = main_app().has_module(L2AUT); __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; 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) public:
causale = ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV"); 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"); test_file_changes(); // Tieni d'occhio le modifiche sul file
if (causale_consegna.full()) set_items_limit(256); // Standard
causale = causale_consegna;
} }
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 // TLaundry_contract
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -201,6 +235,11 @@ int TLaundry_contract::add_row(const char* codart)
rcondv.put(LVRCONDV_CODCONT, codcont); rcondv.put(LVRCONDV_CODCONT, codcont);
rcondv.put(LVRCONDV_CODART, codart); rcondv.put(LVRCONDV_CODART, codart);
rcondv.put(LVRCONDV_DATAINS, TDate(TODAY)); 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(); return rcondv.rewrite_write();
} }
@ -508,6 +547,8 @@ void TRecmag_lavanderie::update()
const int anno = get_int(CLIFOGIAC_ANNOES); const int anno = get_int(CLIFOGIAC_ANNOES);
TEsercizi_contabili & esc = esercizi(); TEsercizi_contabili & esc = esercizi();
if (esc.exist(anno))
{
const TDate oggi(TODAY); const TDate oggi(TODAY);
TDate imese; TDate imese;
@ -521,6 +562,9 @@ void TRecmag_lavanderie::update()
_consmese = consmese(imese, oggi); _consmese = consmese(imese, oggi);
} }
else
_consmese = 0L;
}
TRecmag_lavanderie::TRecmag_lavanderie() TRecmag_lavanderie::TRecmag_lavanderie()
: TVariable_rectype(LF_CLIFOGIAC) : TVariable_rectype(LF_CLIFOGIAC)
@ -764,39 +808,6 @@ TArticolo_lavanderie::TArticolo_lavanderie(const TRectype & rec, const char tipo
add_file(LF_CLIFOGIAC ,"NRIGA"); 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 // TLavanderie_calendar
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -830,7 +841,7 @@ int TLavanderie_calendar::read(int year)
if (year != 0) if (year != 0)
_year = year; _year = year;
TConfig cfg(CONFIG_DITTA); TConfig cfg(CONFIG_DITTA, "lv");
const TString val = cfg.get("CAL", "lv", _year); const TString val = cfg.get("CAL", "lv", _year);
if (val.full()) if (val.full())
@ -843,8 +854,8 @@ int TLavanderie_calendar::read(int year)
{ {
const TDate inizio(1, 1, _year); const TDate inizio(1, 1, _year);
const TDate fine(31, 12, _year); const TDate fine(31, 12, _year);
TDate data(inizio);
TDate data = inizio;
for (int i = 0; data <= fine; ++data, i++) for (int i = 0; data <= fine; ++data, i++)
_days.set(i, data.is_holiday()); _days.set(i, data.is_holiday());
} }
@ -854,29 +865,31 @@ int TLavanderie_calendar::read(int year)
int TLavanderie_calendar::write() const int TLavanderie_calendar::write() const
{ {
TString val(366);
const TDate inizio(1, 1, _year); const TDate inizio(1, 1, _year);
const TDate fine(31, 12, _year); const TDate fine(31, 12, _year);
TDate data(inizio); TDate data(inizio);
TConfig cfg(CONFIG_DITTA);
TString val(366);
for (int i = 0; data <= fine; ++data, i++) for (int i = 0; data <= fine; ++data, i++)
val << (_days[i] ? 'X' : '-'); val << (_days[i] ? 'X' : '-');
TConfig cfg(CONFIG_DITTA, "lv");
cfg.set("CAL", val, "lv", true, _year); cfg.set("CAL", val, "lv", true, _year);
return NOERR;
return NOERR;
} }
int TLavanderie_calendar::remove() const int TLavanderie_calendar::remove() const
{ {
TString val(366); TString val(366);
TConfig cfg(CONFIG_DITTA);
const TDate inizio(1, 1, _year); const TDate inizio(1, 1, _year);
const TDate fine(31, 12, _year); const TDate fine(31, 12, _year);
TDate data(inizio); for (TDate data = inizio; data <= fine; ++data)
for (int i = 0; data <= fine; ++data, i++)
val << data.is_holiday() ? 'X' : '-'; val << data.is_holiday() ? 'X' : '-';
TConfig cfg(CONFIG_DITTA, "lv");
cfg.set("CAL", val, "lv", true, _year); cfg.set("CAL", val, "lv", true, _year);
return NOERR; return NOERR;
} }
@ -1724,6 +1737,35 @@ bool TLV_report::msg_lv_dot(TVariant& var, const char tipo) const
return false; 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 bool TLV_report::msg_lv_consmese(TVariant& var) const
{ {
TRecordset* recset = recordset(); TRecordset* recset = recordset();
@ -1805,6 +1847,79 @@ bool TLV_report::get_usr_val(const TString& name, TVariant& var) const
if(name.starts_with("#CONSANNO")) if(name.starts_with("#CONSANNO"))
return msg_lv_dot(var, 'C'); 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); 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); return TDocument_report::set_recordset(sql);
} }
TLV_report::TLV_report()
{
_umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg");
}
/////////////////////////////// ///////////////////////////////
//// TDOC_INVENTARIO //// //// TDOC_INVENTARIO ////
/////////////////////////////// ///////////////////////////////
@ -1999,4 +2120,4 @@ void TDoc_inventario_row::set_magazzino(const char* mag)
void TDoc_inventario_row::set_magazzinoc(const char* magc) void TDoc_inventario_row::set_magazzinoc(const char* magc)
{ {
_rinv.put(RDOC_CODMAGC, magc); _rinv.put(RDOC_CODMAGC, magc);
} }

View File

@ -80,6 +80,8 @@ public:
virtual ~TRecmag_lavanderie() {} 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 class TArticolo_lavanderie : public TArticolo_giacenza_data
{ {
int _anno_lav; int _anno_lav;
@ -144,7 +146,6 @@ public:
bool is_holiday(const TDate& date) const; bool is_holiday(const TDate& date) const;
TLavanderie_calendar(int year); TLavanderie_calendar(int year);
virtual ~TLavanderie_calendar() {}
}; };
class TCausale_lavanderie : public TRectype 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_ritiro() const {return cached_causale_magazzino(caurit());}
const TCausale_magazzino& causale_consegna() const {return cached_causale_magazzino(caucon());} const TCausale_magazzino& causale_consegna() const {return cached_causale_magazzino(caucon());}
//costruttore //costruttore
TCausale_lavanderie(const char * codice); TCausale_lavanderie(const char* codice);
TCausale_lavanderie(const TRectype &r); TCausale_lavanderie(const TRectype &r);
virtual ~TCausale_lavanderie() {}
}; };
TCausale_lavanderie & cached_causale_lavanderie(const char * codcaus); TCausale_lavanderie & cached_causale_lavanderie(const char * codcaus);
@ -333,11 +332,13 @@ public:
class TLV_report : public TDocument_report class TLV_report : public TDocument_report
{ {
//size_t _first_lv_msg; //size_t _first_lv_msg;
TString4 _umkg;
protected: protected:
bool msg_lv_nextcons(TVariant& var) const; bool msg_lv_nextcons(TVariant& var) const;
bool msg_lv_dot(TVariant& var, const char tipo) const; bool msg_lv_dot(TVariant& var, const char tipo) const;
bool msg_lv_consmese(TVariant& var) 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 size_t get_usr_words(TString_array& words) const;
//virtual bool execute_usr_word(unsigned int opcode, TVariant_stack& stack); //virtual bool execute_usr_word(unsigned int opcode, TVariant_stack& stack);
@ -346,7 +347,7 @@ protected:
public: public:
virtual bool set_recordset(TRecordset* rs) { return TReport::set_recordset(rs); } virtual bool set_recordset(TRecordset* rs) { return TReport::set_recordset(rs); }
virtual bool set_recordset(const TString& sql); virtual bool set_recordset(const TString& sql);
TLV_report() {} TLV_report();
virtual ~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_06 = "Contratti in scadenza Da/A", "lv0 -1 lv0400b", "F"
Item_07 = "Stampa lista dotazioni temporanee scadute", "lv0 -1 lv0400e", "F" Item_07 = "Stampa lista dotazioni temporanee scadute", "lv0 -1 lv0400e", "F"
Item_08 = "Contratti Cogeco", "lv0 -1 lv0400g", "F" Item_08 = "Contratti Cogeco", "lv0 -1 lv0400g", "F"
Item_09 = "Elenco conguagli diversi da zero", "lv0 -1 lv0400h", "F"
[LVMENU_030] [LVMENU_030]
Caption = "Giri" Caption = "Giri"
@ -108,7 +108,7 @@ Module = 41
Flags = "" Flags = ""
Item_01 = "Generazione automatica", "lv2 -0", "F" Item_01 = "Generazione automatica", "lv2 -0", "F"
Item_02 = "Gestione manuale", "lv2 -1", "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] [LVMENU_032]
Caption = "Stampe" 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_16 = "Esportazione dati per Contapezzi Montanari", "lv3 -5 T", "F"
Item_17 = "Esportazione dati per Contapezzi Skema", "lv3 -7", "F" Item_17 = "Esportazione dati per Contapezzi Skema", "lv3 -7", "F"
Item_18 = "Inventario da terminale", "lv3 -6", "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] [LVMENU_050]
Caption = "Stampe" 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_11 = "Stampa Statistica per Lavatrice", "lv0 -1 lv0900a", "F"
Item_12 = "Stampa Inventari", "lv1 -2", "F" Item_12 = "Stampa Inventari", "lv1 -2", "F"
Item_13 = "Stampa Articoli per raggruppamento Fiscale", "lv0 -1 lvtd001", "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] [LVMENU_060]
Caption = "Importazioni da COGECO" Caption = "Importazioni da COGECO"

View File

@ -58,7 +58,7 @@ BEGIN
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
STRING FR_DESCRART 50 ZOOM FR_DESCRART 50
BEGIN BEGIN
PROMPT 25 5 "" PROMPT 25 5 ""
USE LF_ANAMAG KEY 2 USE LF_ANAMAG KEY 2
@ -66,6 +66,7 @@ BEGIN
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@8" CODART DISPLAY "Codice@8" CODART
COPY OUTPUT FR_CODART COPY OUTPUT FR_CODART
FIELD DESCR
ADD RUN ve2 -3 ADD RUN ve2 -3
END END

View File

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

View File

@ -58,7 +58,7 @@ BEGIN
ADD RUN ve2 -3 ADD RUN ve2 -3
END END
STRING FR_DESCRART 50 ZOOM FR_DESCRART 50
BEGIN BEGIN
PROMPT 25 5 "" PROMPT 25 5 ""
USE LF_ANAMAG KEY 2 USE LF_ANAMAG KEY 2
@ -66,6 +66,7 @@ BEGIN
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@8" CODART DISPLAY "Codice@8" CODART
COPY OUTPUT FR_CODART COPY OUTPUT FR_CODART
FIELD DESCR
ADD RUN ve2 -3 ADD RUN ve2 -3
FIELD DESCR FIELD DESCR
END END
@ -200,20 +201,41 @@ BEGIN
PROMPT 1 10 "@bDotazioni" PROMPT 1 10 "@bDotazioni"
END END
NUMBER 155 7 NUMBER FR_JOLLY1 7
BEGIN BEGIN
PROMPT 2 11 "Dotazione Odierna " PROMPT 2 11 "Dotazione Odierna "
FIELD DOTOD FIELD DOTOD
FLAGS "D" FLAGS "D"
END END
NUMBER 159 7 NUMBER FR_JOLLY5 7
BEGIN BEGIN
PROMPT 2 12 "Dotazione iniziale " PROMPT 2 12 "Dotazione iniziale "
FIELD DOTIN FIELD DOTIN
FLAGS "D" FLAGS "D"
END 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 STRING FR_CAULAV 3
BEGIN BEGIN
PROMPT 2 7 "Cau.Lav. " PROMPT 2 7 "Cau.Lav. "
@ -249,7 +271,7 @@ END
NUMBER FR_QTA 6 0 NUMBER FR_QTA 6 0
BEGIN BEGIN
PROMPT 45 8 "Rotti " PROMPT 47 8 "Rotti "
FIELD QTA FIELD QTA
END END
@ -350,14 +372,13 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
ENDPAGE ENDPAGE
PAGE "Analitica" 0 2 0 0 PAGE "Analitica" 0 2 0 0
GROUPBOX DLG_NULL 78 14 GROUPBOX DLG_NULL 78 14
BEGIN BEGIN
PROMPT 1 0 "Contabilita' analitica" PROMPT 1 0 "Contabilità analitica"
END END
ENDPAGE ENDPAGE

View File

@ -58,7 +58,7 @@ BEGIN
ADD RUN ve2 -3 ADD RUN ve2 -3
END END
STRING FR_DESCRART 50 ZOOM FR_DESCRART 50
BEGIN BEGIN
PROMPT 25 4 "" PROMPT 25 4 ""
USE LF_ANAMAG KEY 2 USE LF_ANAMAG KEY 2
@ -66,6 +66,7 @@ BEGIN
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@8" CODART DISPLAY "Codice@8" CODART
COPY OUTPUT FR_CODART COPY OUTPUT FR_CODART
FIELD DESCR
ADD RUN ve2 -3 ADD RUN ve2 -3
FIELD DESCR FIELD DESCR
END END