Patch level : 10.0 163

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Riportata la versione 3.2 patch 1262


git-svn-id: svn://10.65.10.50/trunk@17639 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2008-11-14 14:40:28 +00:00
parent 28b73cfd1a
commit f114c27a06
24 changed files with 1689 additions and 196 deletions

@ -106,7 +106,7 @@ END
ENDPAGE
PAGE "Articoli" 1 1 60 14
PAGE "Articoli 1" 1 1 60 14
GROUPBOX DLG_NULL 78 3
BEGIN
@ -146,8 +146,8 @@ BEGIN
FIELD LEN_USER[1]
GROUP 11
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=40)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 40 caratteri"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri"
END
STRING F_DEC_USER1 2
@ -355,7 +355,7 @@ END
ENDPAGE
PAGE "Articoli" 1 1 60 14
PAGE "Articoli 2" 1 1 60 14
GROUPBOX DLG_NULL 78 3
BEGIN
@ -602,6 +602,504 @@ BEGIN
GROUP 20
END
ENDPAGE
PAGE "Articoli 3" 1 1 60 14
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 2 ""
END
BOOLEAN F_CHK_USER11
BEGIN
PROMPT 2 2 "Campo libero 11"
MESSAGE FALSE CLEAR,21@
MESSAGE TRUE ENABLE,21@
FIELD CHK_USER[11]
END
STRING F_PROMPT_USER11 20
BEGIN
PROMPT 2 3 "Prompt "
FIELD PROMPT_USER[11]
GROUP 21
END
LISTBOX F_TYPE_USER11 7
BEGIN
PROMPT 30 3 "Tipo "
ITEM "S|Stringa" MESSAGE ENABLE,F_LEN_USER11|CLEAR,F_DEC_USER11
ITEM "N|Numero" MESSAGE ENABLE,F_LEN_USER11|ENABLE,F_DEC_USER11
ITEM "I|Importo" MESSAGE ENABLE,F_LEN_USER11|CLEAR,F_DEC_USER11
ITEM "D|Data" MESSAGE CLEAR,F_LEN_USER11|CLEAR,F_DEC_USER11
ITEM "X|Si/no" MESSAGE CLEAR,F_LEN_USER11|CLEAR,F_DEC_USER11
FIELD TYPE_USER[11]
GROUP 21
END
NUMBER F_LEN_USER11 2
BEGIN
PROMPT 45 3 "Lunghezza "
FIELD LEN_USER[11]
GROUP 21
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=40)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 40 caratteri"
END
STRING F_DEC_USER11 2
BEGIN
PROMPT 58 3 "Decimali "
FIELD DEC_USER[11]
GROUP 21
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 5 ""
END
BOOLEAN F_CHK_USER12
BEGIN
PROMPT 2 5 "Campo libero 12"
MESSAGE FALSE CLEAR,22@
MESSAGE TRUE ENABLE,22@
FIELD CHK_USER[12]
END
STRING F_PROMPT_USER12 20
BEGIN
PROMPT 2 6 "Prompt "
FIELD PROMPT_USER[12]
GROUP 22
END
LISTBOX F_TYPE_USER12 7
BEGIN
PROMPT 30 6 "Tipo "
ITEM "S|Stringa" MESSAGE ENABLE,F_LEN_USER12|CLEAR,F_DEC_USER12
ITEM "N|Numero" MESSAGE ENABLE,F_LEN_USER12|ENABLE,F_DEC_USER12
ITEM "I|Importo" MESSAGE ENABLE,F_LEN_USER12|CLEAR,F_DEC_USER12
ITEM "D|Data" MESSAGE CLEAR,F_LEN_USER12|CLEAR,F_DEC_USER12
ITEM "X|Si/no" MESSAGE CLEAR,F_LEN_USER12|CLEAR,F_DEC_USER12
FIELD TYPE_USER[12]
GROUP 22
END
NUMBER F_LEN_USER12 2
BEGIN
PROMPT 45 6 "Lunghezza "
FIELD LEN_USER[12]
GROUP 22
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri"
END
STRING F_DEC_USER12 2
BEGIN
PROMPT 58 6 "Decimali "
FIELD DEC_USER[12]
GROUP 22
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 8 ""
END
BOOLEAN F_CHK_USER13
BEGIN
PROMPT 2 8 "Campo libero 13"
MESSAGE FALSE CLEAR,23@
MESSAGE TRUE ENABLE,23@
FIELD CHK_USER[13]
END
STRING F_PROMPT_USER13 20
BEGIN
PROMPT 2 9 "Prompt "
FIELD PROMPT_USER[13]
GROUP 23
END
LISTBOX F_TYPE_USER13 7
BEGIN
PROMPT 30 9 "Tipo "
ITEM "S|Stringa" MESSAGE ENABLE,F_LEN_USER13|CLEAR,F_DEC_USER13
ITEM "N|Numero" MESSAGE ENABLE,F_LEN_USER13|ENABLE,F_DEC_USER13
ITEM "I|Importo" MESSAGE ENABLE,F_LEN_USER13|CLEAR,F_DEC_USER13
ITEM "D|Data" MESSAGE CLEAR,F_LEN_USER13|CLEAR,F_DEC_USER13
ITEM "X|Si/no" MESSAGE CLEAR,F_LEN_USER13|CLEAR,F_DEC_USER13
FIELD TYPE_USER[13]
GROUP 23
END
NUMBER F_LEN_USER13 2
BEGIN
PROMPT 45 9 "Lunghezza "
FIELD LEN_USER[13]
GROUP 23
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri"
END
STRING F_DEC_USER13 2
BEGIN
PROMPT 58 9 "Decimali "
FIELD DEC_USER[13]
GROUP 23
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 11 ""
END
BOOLEAN F_CHK_USER14
BEGIN
PROMPT 2 11 "Campo libero 14"
MESSAGE FALSE CLEAR,24@
MESSAGE TRUE ENABLE,24@
FIELD CHK_USER[14]
END
STRING F_PROMPT_USER14 20
BEGIN
PROMPT 2 12 "Prompt "
FIELD PROMPT_USER[14]
GROUP 24
END
LISTBOX F_TYPE_USER14 7
BEGIN
PROMPT 30 12 "Tipo "
ITEM "S|Stringa" MESSAGE ENABLE,F_LEN_USER14|CLEAR,F_DEC_USER14
ITEM "N|Numero" MESSAGE ENABLE,F_LEN_USER14|ENABLE,F_DEC_USER14
ITEM "I|Importo" MESSAGE ENABLE,F_LEN_USER14|CLEAR,F_DEC_USER14
ITEM "D|Data" MESSAGE CLEAR,F_LEN_USER14|CLEAR,F_DEC_USER14
ITEM "X|Si/no" MESSAGE CLEAR,F_LEN_USER14|CLEAR,F_DEC_USER14
FIELD TYPE_USER[14]
GROUP 24
END
NUMBER F_LEN_USER14 2
BEGIN
PROMPT 45 12 "Lunghezza "
FIELD LEN_USER[14]
GROUP 24
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri"
END
STRING F_DEC_USER14 2
BEGIN
PROMPT 58 12 "Decimali "
FIELD DEC_USER[14]
GROUP 24
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 14 ""
END
BOOLEAN F_CHK_USER15
BEGIN
PROMPT 2 14 "Campo libero 15"
MESSAGE FALSE CLEAR,25@
MESSAGE TRUE ENABLE,25@
FIELD CHK_USER[15]
END
STRING F_PROMPT_USER15 20
BEGIN
PROMPT 2 15 "Prompt "
FIELD PROMPT_USER[15]
GROUP 25
END
LISTBOX F_TYPE_USER15 7
BEGIN
PROMPT 30 15 "Tipo "
ITEM "S|Stringa" MESSAGE ENABLE,F_LEN_USER15|CLEAR,F_DEC_USER15
ITEM "N|Numero" MESSAGE ENABLE,F_LEN_USER15|ENABLE,F_DEC_USER15
ITEM "I|Importo" MESSAGE ENABLE,F_LEN_USER15|CLEAR,F_DEC_USER15
ITEM "D|Data" MESSAGE CLEAR,F_LEN_USER15|CLEAR,F_DEC_USER15
ITEM "X|Si/no" MESSAGE CLEAR,F_LEN_USER15|CLEAR,F_DEC_USER15
FIELD TYPE_USER[15]
GROUP 25
END
NUMBER F_LEN_USER15 2
BEGIN
PROMPT 45 15 "Lunghezza "
FIELD LEN_USER[15]
GROUP 25
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri"
END
STRING F_DEC_USER15 2
BEGIN
PROMPT 58 15 "Decimali "
FIELD DEC_USER[15]
GROUP 25
END
ENDPAGE
PAGE "Articoli 4" 1 1 60 14
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 2 ""
END
BOOLEAN F_CHK_USER16
BEGIN
PROMPT 2 2 "Campo libero 16"
MESSAGE FALSE CLEAR,26@
MESSAGE TRUE ENABLE,26@
FIELD CHK_USER[16]
END
STRING F_PROMPT_USER16 20
BEGIN
PROMPT 2 3 "Prompt "
FIELD PROMPT_USER[16]
GROUP 26
END
LISTBOX F_TYPE_USER16 7
BEGIN
PROMPT 30 3 "Tipo "
ITEM "S|Stringa" MESSAGE ENABLE,F_LEN_USER16|CLEAR,F_DEC_USER16
ITEM "N|Numero" MESSAGE ENABLE,F_LEN_USER16|ENABLE,F_DEC_USER16
ITEM "I|Importo" MESSAGE ENABLE,F_LEN_USER16|CLEAR,F_DEC_USER16
ITEM "D|Data" MESSAGE CLEAR,F_LEN_USER16|CLEAR,F_DEC_USER16
ITEM "X|Si/no" MESSAGE CLEAR,F_LEN_USER16|CLEAR,F_DEC_USER16
FIELD TYPE_USER[16]
GROUP 26
END
NUMBER F_LEN_USER16 2
BEGIN
PROMPT 45 3 "Lunghezza "
FIELD LEN_USER[16]
GROUP 26
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri"
END
STRING F_DEC_USER16 2
BEGIN
PROMPT 58 3 "Decimali "
FIELD DEC_USER[16]
GROUP 26
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 5 ""
END
BOOLEAN F_CHK_USER17
BEGIN
PROMPT 2 5 "Campo libero 17"
MESSAGE FALSE CLEAR,27@
MESSAGE TRUE ENABLE,27@
FIELD CHK_USER[17]
END
STRING F_PROMPT_USER17 20
BEGIN
PROMPT 2 6 "Prompt "
FIELD PROMPT_USER[17]
GROUP 27
END
LISTBOX F_TYPE_USER17 7
BEGIN
PROMPT 30 6 "Tipo "
ITEM "S|Stringa" MESSAGE ENABLE,F_LEN_USER17|CLEAR,F_DEC_USE1R7
ITEM "N|Numero" MESSAGE ENABLE,F_LEN_USER17|ENABLE,F_DEC_USER17
ITEM "I|Importo" MESSAGE ENABLE,F_LEN_USER17|CLEAR,F_DEC_USER17
ITEM "D|Data" MESSAGE CLEAR,F_LEN_USER17|CLEAR,F_DEC_USER17
ITEM "X|Si/no" MESSAGE CLEAR,F_LEN_USER17|CLEAR,F_DEC_USER17
FIELD TYPE_USER[17]
GROUP 27
END
NUMBER F_LEN_USER17 2
BEGIN
PROMPT 45 6 "Lunghezza "
FIELD LEN_USER[17]
GROUP 27
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri"
END
STRING F_DEC_USER17 2
BEGIN
PROMPT 58 6 "Decimali "
FIELD DEC_USER[17]
GROUP 27
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 8 ""
END
BOOLEAN F_CHK_USER18
BEGIN
PROMPT 2 8 "Campo libero 18"
MESSAGE FALSE CLEAR,28@
MESSAGE TRUE ENABLE,28@
FIELD CHK_USER[18]
END
STRING F_PROMPT_USER18 20
BEGIN
PROMPT 2 9 "Prompt "
FIELD PROMPT_USER[18]
GROUP 28
END
LISTBOX F_TYPE_USER18 7
BEGIN
PROMPT 30 9 "Tipo "
ITEM "S|Stringa" MESSAGE ENABLE,F_LEN_USER18|CLEAR,F_DEC_USER18
ITEM "N|Numero" MESSAGE ENABLE,F_LEN_USER18|ENABLE,F_DEC_USER18
ITEM "I|Importo" MESSAGE ENABLE,F_LEN_USER18|CLEAR,F_DEC_USER18
ITEM "D|Data" MESSAGE CLEAR,F_LEN_USER18|CLEAR,F_DEC_USER18
ITEM "X|Si/no" MESSAGE CLEAR,F_LEN_USER18|CLEAR,F_DEC_USER18
FIELD TYPE_USER[18]
GROUP 28
END
NUMBER F_LEN_USER18 2
BEGIN
PROMPT 45 9 "Lunghezza "
FIELD LEN_USER[18]
GROUP 28
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri"
END
STRING F_DEC_USER18 2
BEGIN
PROMPT 58 9 "Decimali "
FIELD DEC_USER[18]
GROUP 28
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 11 ""
END
BOOLEAN F_CHK_USER19
BEGIN
PROMPT 2 11 "Campo libero 19"
MESSAGE FALSE CLEAR,29@
MESSAGE TRUE ENABLE,29@
FIELD CHK_USER[19]
END
STRING F_PROMPT_USER19 20
BEGIN
PROMPT 2 12 "Prompt "
FIELD PROMPT_USER[19]
GROUP 29
END
LISTBOX F_TYPE_USER19 7
BEGIN
PROMPT 30 12 "Tipo "
ITEM "S|Stringa" MESSAGE ENABLE,F_LEN_USER19|CLEAR,F_DEC_USER19
ITEM "N|Numero" MESSAGE ENABLE,F_LEN_USER19|ENABLE,F_DEC_USER19
ITEM "I|Importo" MESSAGE ENABLE,F_LEN_USER19|CLEAR,F_DEC_USER19
ITEM "D|Data" MESSAGE CLEAR,F_LEN_USER19|CLEAR,F_DEC_USER19
ITEM "X|Si/no" MESSAGE CLEAR,F_LEN_USER19|CLEAR,F_DEC_USER19
FIELD TYPE_USER[19]
GROUP 29
END
NUMBER F_LEN_USER19 2
BEGIN
PROMPT 45 12 "Lunghezza "
FIELD LEN_USER[19]
GROUP 29
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri"
END
STRING F_DEC_USER19 2
BEGIN
PROMPT 58 12 "Decimali "
FIELD DEC_USER[19]
GROUP 29
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 14 ""
END
BOOLEAN F_CHK_USER20
BEGIN
PROMPT 2 14 "Campo libero 20"
MESSAGE FALSE CLEAR,30@
MESSAGE TRUE ENABLE,30@
FIELD CHK_USER[20]
END
STRING F_PROMPT_USER20 20
BEGIN
PROMPT 2 15 "Prompt "
FIELD PROMPT_USER[20]
GROUP 30
END
LISTBOX F_TYPE_USER20 7
BEGIN
PROMPT 30 15 "Tipo "
ITEM "S|Stringa" MESSAGE ENABLE,F_LEN_USER20|CLEAR,F_DEC_USER20
ITEM "N|Numero" MESSAGE ENABLE,F_LEN_USER20|ENABLE,F_DEC_USER20
ITEM "I|Importo" MESSAGE ENABLE,F_LEN_USER20|CLEAR,F_DEC_USER20
ITEM "D|Data" MESSAGE CLEAR,F_LEN_USER20|CLEAR,F_DEC_USER20
ITEM "X|Si/no" MESSAGE CLEAR,F_LEN_USER20|CLEAR,F_DEC_USER20
FIELD TYPE_USER[20]
GROUP 30
END
NUMBER F_LEN_USER20 2
BEGIN
PROMPT 45 15 "Lunghezza "
FIELD LEN_USER[20]
GROUP 30
FLAGS "U"
NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20)
WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri"
END
STRING F_DEC_USER20 2
BEGIN
PROMPT 58 15 "Decimali "
FIELD DEC_USER[20]
GROUP 30
END
GROUPBOX DLG_NULL 56 4
BEGIN
PROMPT 1 17 "@bGenerazione automatica codici"

@ -58,6 +58,7 @@ JOLLY3|2|20|Jolly|20
JOLLY4|2|20|Jolly|20
JOLLY5|2|20|Jolly|20
JOLLY6|2|20|Jolly|20
JOLLY7|2|20|Jolly|20
JOLLY8|2|20|Jolly|20
JOLLY9|2|20|Jolly|20
JOLLY10|2|20|Jolly|20

@ -4,6 +4,7 @@ extern int ve2100(int argc, char* argv[]); // tabelle sconti (di riga/di docume
extern int ve2200(int argc, char* argv[]); // testate listini/contratti/offerte
extern int ve2300(int argc, char* argv[]); // righe listini/contratti/offerte
extern int ve2400(int argc, char* argv[]); // anagrafica di magazzino
extern int ve2600(int argc, char* argv[]); // relazioni articoli livelli di giacenza
int main( int argc, char** argv)
{
@ -13,7 +14,9 @@ int main( int argc, char** argv)
case 0: ve2100(argc, argv); break;
case 1: ve2200(argc, argv); break;
case 2: ve2300(argc, argv); break;
default: ve2400(argc, argv); break;
case 3: ve2400(argc, argv); break;
case 5: ve2600(argc, argv); break;
default: error_box("Sintassi: %s -[0 [R|D|I] | 1 [L|C|O] | 2 [L|C|O] | 3]", argv[0]); break;
}
return 0;
}

@ -19,6 +19,8 @@ class TMask_anamag: public TMask
TCodgiac_livelli* livelli_giac;// oggetto handler per i livelli di giacenza
TCodart_livelli* livelli_art;// oggetto handler per i livelli di anagraficca
int last_annogiac, last_annosto;
int _disabled_user_page;
int _type_cod, _altype_cod;
TString4 _ean8_pref;
@ -69,6 +71,7 @@ public:
void update_ordc_ordf();
void set_parametered_fields();
void ricalcola_giacenze();
void disable_user_page() { disable_page(_disabled_user_page);}
TCodart_livelli * get_livelli_art() const { return livelli_art; }
const TString& generated_code() { return _generated_code; }
@ -399,7 +402,7 @@ void TMask_anamag::create_user_fields()
TString80 prompt;
for (int i = 1; i <= 10; i++)
for (int i = 1; i <= 20; i++)
{
if (c.get_bool("CHK_USER", "ve", i))
{
@ -408,33 +411,43 @@ void TMask_anamag::create_user_fields()
prompt.rpad(20);
const char type = c.get_char("TYPE_USER", "ve", i);
if (type == 'S')
f = &add_string(F_USER1 + i - 1, PAGE_USER, prompt, 2, 3 + i, c.get_int("LEN_USER", "ve", i));
f = &add_string(F_USER1 + i - 1, page, prompt, 2, row, c.get_int("LEN_USER", "ve", i));
else
if (type == 'N')
{
f = &add_number(F_USER1 + i - 1, PAGE_USER, prompt, 2, 3 + i, c.get_int("LEN_USER", "ve", i));
f = &add_number(F_USER1 + i - 1, page, prompt, 2, row, c.get_int("LEN_USER", "ve", i));
((TReal_field *) f)->set_decimals(c.get_int("DEC_USER", "ve", i));
}
else
if (type == 'D')
f = &add_date(F_USER1 + i - 1, PAGE_USER, prompt, 2, 3 + i);
f = &add_date(F_USER1 + i - 1, page, prompt, 2, row);
else
if (type == 'I')
f = &add_currency(F_USER1 + i - 1, PAGE_USER, prompt, 2, 3 + i, c.get_int("LEN_USER", "ve", i));
f = &add_currency(F_USER1 + i - 1, page, prompt, 2, row, c.get_int("LEN_USER", "ve", i));
else
if (type == 'X')
f = &add_boolean(F_USER1 + i - 1, PAGE_USER, prompt, 2, 3 + i);
f = &add_boolean(F_USER1 + i - 1, page, prompt, 2, row);
if (f != NULL)
{
TString8 u; u.format("USER%d", i);
f->set_field(u);
}
disable_user_page = false;
pages.set(page);
if (row > 19)
{
page++;
row = 4;
}
}
}
if (disable_user_page)
disable_page(PAGE_USER);
if (!pages[PAGE_USER])
_disabled_user_page = PAGE_USER;
else
if (!pages[PAGE_USER + 1])
_disabled_user_page = PAGE_USER + 1;
else
_disabled_user_page = PAGE_USER + 2;
}
// costruttore della maschera anagrafica di magazzino
@ -1987,6 +2000,8 @@ void TAnagrafica_magazzino::init_insert_mode(TMask &m)
if (advanced_codart_enabled())
m.hide(F_ADVANCED);
((TMask_anamag &)m).disable_user_page();
}
void TAnagrafica_magazzino::init_modify_mode(TMask &m)
@ -1996,6 +2011,7 @@ void TAnagrafica_magazzino::init_modify_mode(TMask &m)
if (advanced_codart_enabled())
m.hide(F_ADVANCED);
((TMask_anamag &)m).disable_user_page();
}
void TAnagrafica_magazzino::ini2sheet(TConfig& ini, TSheet_field &sheet)

@ -133,16 +133,6 @@
#define F_DATAVDIST 266
#define F_USER1 271
#define F_USER2 272
#define F_USER3 273
#define F_USER4 274
#define F_USER5 275
#define F_USER6 276
#define F_USER7 277
#define F_USER8 278
#define F_USER9 279
#define F_USER10 280
#define F_CONACC 281
#define F_CONALL 282
#define F_CONCAR 283
@ -178,6 +168,27 @@
#define F_ARTLAVCONT 320
#define F_MANGDEST 321
#define F_USER1 371
#define F_USER2 372
#define F_USER3 373
#define F_USER4 374
#define F_USER5 375
#define F_USER6 376
#define F_USER7 377
#define F_USER8 378
#define F_USER9 379
#define F_USER10 380
#define F_USER11 381
#define F_USER12 382
#define F_USER13 383
#define F_USER14 384
#define F_USER15 385
#define F_USER16 386
#define F_USER17 387
#define F_USER18 388
#define F_USER19 389
#define F_USER20 390
#define F_CONTOPCIA 401
#define F_DESCRCONTOPCIA 411

@ -1378,7 +1378,30 @@ END
ENDPAGE
PAGE "Utente" 0 0 70 20
PAGE "Utente 1" 0 0 70 20
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 0 0 ""
END
STRING DLG_NULL 20
BEGIN
FLAGS "D"
PROMPT 2 1 "Codice art. "
GROUP G_CODART
END
STRING DLG_NULL 50
BEGIN
FLAGS "D"
PROMPT 2 2 "Descrizione "
GROUP G_DESART
END
ENDPAGE
PAGE "Utente 2" 0 0 70 20
GROUPBOX DLG_NULL 78 3
BEGIN

278
ve/ve2600.cpp Executable file

@ -0,0 +1,278 @@
#include <automask.h>
#include <defmask.h>
#include <msksheet.h>
#include <mask.h>
#include <recarray.h>
#include <recset.h>
#include <tabapp.h>
#include <multirel.h>
#include "../mg/anamag.h"
#include "../mg/mglib.h"
#include "ve2600a.h"
#define FILE_KEY "ARTLV"
///////////////////////////////////////////////////////////
// TArtgiac_mask maschera
///////////////////////////////////////////////////////////
class TArtgiac_mask : public TAutomask
{
TString _query;
bool _filter_changed;
TCodgiac_livelli * _livelli_giac;
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TCodgiac_livelli & livelli_giac() const { return *_livelli_giac;}
TArtgiac_mask();
~TArtgiac_mask() { delete _livelli_giac; }
};
TArtgiac_mask::TArtgiac_mask() : TAutomask("ve2600a")
{
_livelli_giac = new TCodgiac_livelli() ;
TSheet_field & sh = sfield(F_LIVGIAC);
TMask & sh_mask = sh.sheet_mask();
TString80 prompt;
for (int i=0; i < 4; i++)
{
_livelli_giac->set_sheetcolumn(sh,F_LIV1+i,i+1);
if (_livelli_giac->autoinsert(i+1))
{
// codice autoinseribile
TMask_field & campo_liv = sh.sheet_mask().field(F_LIV1+i);
campo_liv.check_type(CHECK_SEARCH);
}
}
}
bool TArtgiac_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_LIV1:
case F_LIV2:
case F_LIV3:
case F_LIV4:
if (e == fe_modify && !o.empty())
{
const int levnum = o.dlg()-F_LIV1+1;
return _livelli_giac->autoinsert(levnum, o);
}
break;
case F_LIVGIAC:
if (e == se_notify_add)
{
TSheet_field & sf = (TSheet_field &) o;
TMask & m = sf.sheet_mask();
const int nrow = sf.selected() + 1;
TToken_string & row = sf.row(nrow);
row.add("X", sf.cid2index(F_ATTIVO));
sf.check_row(nrow);
sf.force_update(nrow);
}
else
if (e == se_query_del)
{
TSheet_field & sf = (TSheet_field &) o;
TMask & m = sf.sheet_mask();
TString80 codgiac;
livelli_giac().pack_grpcode(codgiac, m.get(F_LIV1), 1);
livelli_giac().pack_grpcode(codgiac, m.get(F_LIV2), 2);
livelli_giac().pack_grpcode(codgiac, m.get(F_LIV3), 3);
livelli_giac().pack_grpcode(codgiac, m.get(F_LIV4), 4);
return codgiac.blank();
}
default:
break;
}
return true;
}
class TRelArticoligiac_multirel_app : public TMultirel_application
{
TArtgiac_mask * _mask;
TRelation * _rel;
protected:
virtual void get_mask_name(TString& tabname) const { tabname = "ve2600a";}
//magico metodo per impedire la navigazione su tabelle diverse da quella corrente del cursore
virtual bool has_filtered_cursor() const { return true; }
virtual bool user_create();
virtual bool user_destroy() ;
virtual int read(TMask& m);
virtual int rewrite(const TMask& m);
virtual int write(const TMask& m) { return rewrite(m);}
virtual bool remove();
virtual void init_insert_mode(TMask& m) { read(m); }
virtual bool find(word key = 0);
virtual TMask* get_mask(int mode = MODE_QUERY) { return (TMask *) _mask;}
virtual TRelation* get_relation() const { return _rel;}
public:
TRelArticoligiac_multirel_app() {}
virtual ~TRelArticoligiac_multirel_app() {}
};
bool TRelArticoligiac_multirel_app::user_create()
{
bool ok = TMultirel_application::user_create();
_mask = new TArtgiac_mask;
if (!_mask->livelli_giac().enabled())
return warning_box("gestione livelli di giacenza non abilitata");
_rel = new TRelation(LF_ANAMAG);
set_search_field(F_CODART);
return ok;
}
bool TRelArticoligiac_multirel_app::user_destroy()
{
delete _mask;
delete _rel;
return TMultirel_application::user_destroy();
}
int TRelArticoligiac_multirel_app::read(TMask& m)
{
TLocalisamfile multirel(LF_MULTIREL);
TArtgiac_mask & mask = (TArtgiac_mask &) m;
TString80 codart(m.get(F_CODART));
const TString & cod = get_relation()->lfile().get(ANAMAG_CODART);
TSheet_field & sf = m.sfield(F_LIVGIAC);
const int col_lev1 = sf.cid2index(F_LIV1);
const int col_lev2 = sf.cid2index(F_LIV2);
const int col_lev3 = sf.cid2index(F_LIV3);
const int col_lev4 = sf.cid2index(F_LIV4);
const int col_attivo = sf.cid2index(F_ATTIVO);
int i = 0;
if (cod.full() && cod != codart)
{
codart = cod;
m.set(F_CODART, codart, 0x2);
}
sf.destroy();
multirel.zero();
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, codart);
for ( int err = multirel.read(_isgteq); err == NOERR && codart == multirel.get(MULTI_FIRST); err = multirel.next())
{
TToken_string & row = sf.row(i++);
const TString & codgiac = multirel.get(MULTI_SECOND);
row.add(mask.livelli_giac().unpack_grpcode(codgiac, 1), col_lev1);
row.add(mask.livelli_giac().unpack_grpcode(codgiac, 2), col_lev2);
row.add(mask.livelli_giac().unpack_grpcode(codgiac, 3), col_lev3);
row.add(mask.livelli_giac().unpack_grpcode(codgiac, 4), col_lev4);
row.add("X", col_attivo);
sf.check_row(i - 1);
}
return NOERR;
}
int TRelArticoligiac_multirel_app::rewrite(const TMask& m)
{
int err = NOERR;
TLocalisamfile multirel(LF_MULTIREL);
TSheet_field & sf = m.sfield(F_LIVGIAC);
const TString& codart = m.get(F_CODART);
TArtgiac_mask & mask = (TArtgiac_mask &) m;
const int col_lev1 = sf.cid2index(F_LIV1);
const int col_lev2 = sf.cid2index(F_LIV2);
const int col_lev3 = sf.cid2index(F_LIV3);
const int col_lev4 = sf.cid2index(F_LIV4);
TString80 codgiac;
for (int i = 0; i < sf.items(); i++)
{
TToken_string & row = sf.row(i);
bool selected = *row.get(sf.cid2index(F_ATTIVO)) > ' ';
mask.livelli_giac().pack_grpcode(codgiac, row.get(col_lev1), 1);
mask.livelli_giac().pack_grpcode(codgiac, row.get(col_lev2), 2);
mask.livelli_giac().pack_grpcode(codgiac, row.get(col_lev3), 3);
mask.livelli_giac().pack_grpcode(codgiac, row.get(col_lev4), 4);
if (codgiac.full())
{
multirel.zero();
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, codart);
multirel.put(MULTI_SECOND, codgiac);
bool exist = multirel.read(_isequal) == NOERR;
if (exist && !selected)
err = multirel.remove();
else
if (!exist && selected)
{
multirel.zero();
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, codart);
multirel.put(MULTI_SECOND, codgiac);
err = multirel.write();
}
}
}
TRelation & r = *get_relation();
r.lfile().put(ANAMAG_CODART, codart);
r.read(_isequal);
return err;
}
bool TRelArticoligiac_multirel_app::remove()
{
int err;
TLocalisamfile multirel(LF_MULTIREL);
const TString& codart = _mask->get(F_CODART);
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, codart);
for (err = multirel.read(_isgteq); err == NOERR && codart == multirel.get(MULTI_FIRST); err = multirel.next())
err = multirel.remove();
return err == NOERR || err == _iseof;
}
bool TRelArticoligiac_multirel_app::find(word key)
{
bool ok = false;
const TString& codart = _mask->get(F_CODART);
if (codart.full())
{
TLocalisamfile multirel(LF_MULTIREL);
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, codart);
ok = (multirel.read(_isgteq) == NOERR) && (codart == multirel.get(MULTI_FIRST));
if (ok)
{
TRelation & r = *get_relation();
r.lfile().put(ANAMAG_CODART, codart);
r.read(_isequal);
}
}
return ok;
}
int ve2600(int argc, char* argv[])
{
TRelArticoligiac_multirel_app a;
a.run(argc, argv, TR("Relazioni articoli livelli di giacenza"));
return 0;
}

13
ve/ve2600a.h Executable file

@ -0,0 +1,13 @@
// Defines per maschera
#define F_COD 149
#define F_CODTAB 150
#define F_CODART 151
#define F_DESCRART 152
#define F_LIVGIAC 153
#define F_LIV1 101
#define F_LIV2 102
#define F_LIV3 103
#define F_LIV4 104
#define F_DESCR 105
#define F_ATTIVO 106

172
ve/ve2600a.uml Executable file

@ -0,0 +1,172 @@
#include "ve2600a.h"
TOOLBAR "" 0 -2 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Relazioni Articoli Livelli di Giacenza" -1 -1 80 20
LIST F_COD 5
BEGIN
PROMPT 50 50 ""
ITEM "ARTLV|ARTLV"
FIELD COD
FLAGS "H"
KEY 1
END
NUMBER F_CODTAB 3
BEGIN
PROMPT 50 50 ""
USE LF_MULTIREL
INPUT COD F_COD SELECT
INPUT FIRST F_CODTAB
DISPLAY "Codice" FIRST
DISPLAY "Descrizione@60" DATA
DISPLAY "Causale Collegata" SECOND
OUTPUT F_CODTAB FIRST
CHECKTYPE REQUIRED
FIELD FIRST
FLAGS "H"
KEY 1
END
STRING F_CODART 20
BEGIN
PROMPT 4 2 "Codice Articolo "
FLAG "UG"
USE LF_ANAMAG SELECT LIVPERART!=""
INPUT CODART F_CODART
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CODART CODART
OUTPUT F_DESCRART DESCR
CHECKTYPE REQUIRED
MESSAGE COPY,F_CODTAB
KEY 1
END
STRING F_DESCRART 50
BEGIN
PROMPT 4 3 "Descrizione "
USE LF_ANAMAG KEY 2 SELECT LIVPERART!=""
INPUT DESCR F_DESCRART
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@20" CODART
COPY OUTPUT F_CODART
CHECKTYPE SEARCH
KEY 2
END
SPREADSHEET F_LIVGIAC 85 -3
BEGIN
PROMPT 1 5 "Livelli di giacenza"
ITEM "Liv1@10"
ITEM "Liv2@6"
ITEM "Liv3@6"
ITEM "Liv4@6"
ITEM "Descrizione@50"
ITEM "Attivo"
END
ENDPAGE
ENDMASK
PAGE "Righe" -1 -1 80 18
STRING F_LIV1 10
BEGIN
FLAGS "U"
PROMPT 2 2 "Livello 1 "
USE GCG //SELECT CODTAB[1,1]=="1"
JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
INPUT CODTAB[1,1] "1"
INPUT CODTAB[2,11] F_LIV1
DISPLAY "Livello@20" 500@->S0
DISPLAY "Gruppo@10" CODTAB[2,20]
DISPLAY "Descr.@30" S0
OUTPUT F_LIV1 CODTAB[2,12]
OUTPUT F_DESCR S0
CHECKTYPE NORMAL
MESSAGE EMPTY CLEAR,F_LIV2|CLEAR,F_LIV3|CLEAR,F_LIV4
MESSAGE ENABLE,F_LIV2
END
STRING F_LIV2 10
BEGIN
FLAGS "U"
PROMPT 40 2 "Livello 2 "
USE GCG //SELECT CODTAB[1,1]=="2"
JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
INPUT CODTAB[1,1] "2"
INPUT CODTAB[2,12] F_LIV2
COPY DISPLAY F_LIV1
OUTPUT F_LIV2 CODTAB[2,12]
OUTPUT F_DESCR S0
CHECKTYPE NORMAL
MESSAGE EMPTY CLEAR,F_LIV3|CLEAR,F_LIV4
MESSAGE ENABLE,F_LIV3
END
STRING F_LIV3 10
BEGIN
FLAGS "U"
PROMPT 2 3 "Livello 3 "
USE GCG //SELECT CODTAB[1,1]=="3"
JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
INPUT CODTAB[1,1] "3"
INPUT CODTAB[2,12] F_LIV3
COPY DISPLAY F_LIV1
OUTPUT F_LIV3 CODTAB[2,12]
OUTPUT F_DESCR S0
CHECKTYPE NORMAL
MESSAGE EMPTY CLEAR,F_LIV4
MESSAGE ENABLE,F_LIV4
END
STRING F_LIV4 10
BEGIN
FLAGS "U"
PROMPT 40 3 "Livello 4 "
USE GCG //SELECT CODTAB[1,1]=="4"
JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
INPUT CODTAB[1,1] "4"
INPUT CODTAB[2,12] F_LIV4
COPY DISPLAY F_LIV1
OUTPUT F_LIV4 CODTAB[2,12]
OUTPUT F_DESCR S0
CHECKTYPE NORMAL
END
STRING F_DESCR 50
BEGIN
PROMPT 20 4 ""
FLAGS "D"
END
BOOLEAN F_ATTIVO
BEGIN
PROMPT 2 5 "Attivo per questo utente"
END
BUTTON DLG_OK 11 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_DELREC 11 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_CANCEL 11 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
ENDMASK

@ -53,7 +53,7 @@ void TStatus_change::main_loop()
recfin.put(DOC_NDOC, m.get(F_ANUMERO));
TString filter;
filter << DOC_STATO << "==" << m.get(F_INIZIALE);
filter << DOC_STATO << "==\"" << m.get(F_INIZIALE) << "\"";
TCursor cur(&rel, filter, 1, &recini, &recfin);
const long total = cur.items();

@ -64,7 +64,7 @@ BEGIN
DISPLAY "Descrizione@50" S0
OUTPUT F_INIZIALE CODTAB
OUTPUT F_DESCINI S0
CHECKTYPE REQUIRED
CHECKTYPE NORMAL
END
STRING F_DESCINI 50 52

@ -176,6 +176,16 @@
#define F_CHK_USER8 127
#define F_CHK_USER9 128
#define F_CHK_USER10 129
#define F_CHK_USER11 220
#define F_CHK_USER12 221
#define F_CHK_USER13 222
#define F_CHK_USER14 223
#define F_CHK_USER15 224
#define F_CHK_USER16 225
#define F_CHK_USER17 226
#define F_CHK_USER18 227
#define F_CHK_USER19 228
#define F_CHK_USER20 229
#define F_PROMPT_USER1 130
#define F_PROMPT_USER2 131
#define F_PROMPT_USER3 132
@ -186,46 +196,87 @@
#define F_PROMPT_USER8 137
#define F_PROMPT_USER9 138
#define F_PROMPT_USER10 139
#define F_TYPE_USER1 140
#define F_TYPE_USER2 141
#define F_TYPE_USER3 142
#define F_TYPE_USER4 143
#define F_TYPE_USER5 144
#define F_TYPE_USER6 145
#define F_TYPE_USER7 146
#define F_TYPE_USER8 147
#define F_TYPE_USER9 148
#define F_TYPE_USER10 149
#define F_LEN_USER1 150
#define F_LEN_USER2 151
#define F_LEN_USER3 152
#define F_LEN_USER4 153
#define F_LEN_USER5 154
#define F_LEN_USER6 155
#define F_LEN_USER7 156
#define F_LEN_USER8 157
#define F_LEN_USER9 158
#define F_LEN_USER10 159
#define F_DEC_USER1 160
#define F_DEC_USER2 161
#define F_DEC_USER3 162
#define F_DEC_USER4 163
#define F_DEC_USER5 164
#define F_DEC_USER6 165
#define F_DEC_USER7 166
#define F_DEC_USER8 167
#define F_DEC_USER9 168
#define F_DEC_USER10 169
#define F_GEN_EAN 170
#define F_ALT_EAN 171
#define F_EAN8 172
#define F_EAN13 173
#define F_EAN8CIN 174
#define F_PROMPT_USER11 140
#define F_PROMPT_USER12 141
#define F_PROMPT_USER13 142
#define F_PROMPT_USER14 143
#define F_PROMPT_USER15 144
#define F_PROMPT_USER16 145
#define F_PROMPT_USER17 146
#define F_PROMPT_USER18 147
#define F_PROMPT_USER19 148
#define F_PROMPT_USER20 149
#define F_TYPE_USER1 150
#define F_TYPE_USER2 151
#define F_TYPE_USER3 152
#define F_TYPE_USER4 153
#define F_TYPE_USER5 154
#define F_TYPE_USER6 155
#define F_TYPE_USER7 156
#define F_TYPE_USER8 157
#define F_TYPE_USER9 158
#define F_TYPE_USER10 159
#define F_TYPE_USER11 160
#define F_TYPE_USER12 161
#define F_TYPE_USER13 162
#define F_TYPE_USER14 163
#define F_TYPE_USER15 164
#define F_TYPE_USER16 165
#define F_TYPE_USER17 166
#define F_TYPE_USER18 167
#define F_TYPE_USER19 168
#define F_TYPE_USER20 169
#define F_LEN_USER1 170
#define F_LEN_USER2 171
#define F_LEN_USER3 172
#define F_LEN_USER4 173
#define F_LEN_USER5 174
#define F_LEN_USER6 175
#define F_LEN_USER7 176
#define F_LEN_USER8 177
#define F_LEN_USER9 178
#define F_LEN_USER10 179
#define F_LEN_USER11 180
#define F_LEN_USER12 181
#define F_LEN_USER13 182
#define F_LEN_USER14 183
#define F_LEN_USER15 184
#define F_LEN_USER16 185
#define F_LEN_USER17 186
#define F_LEN_USER18 187
#define F_LEN_USER19 188
#define F_LEN_USER20 189
#define F_DEC_USER1 190
#define F_DEC_USER2 191
#define F_DEC_USER3 192
#define F_DEC_USER4 193
#define F_DEC_USER5 194
#define F_DEC_USER6 195
#define F_DEC_USER7 196
#define F_DEC_USER8 197
#define F_DEC_USER9 198
#define F_DEC_USER10 199
#define F_DEC_USER11 200
#define F_DEC_USER12 201
#define F_DEC_USER13 202
#define F_DEC_USER14 203
#define F_DEC_USER15 204
#define F_DEC_USER16 205
#define F_DEC_USER17 206
#define F_DEC_USER18 207
#define F_DEC_USER19 208
#define F_DEC_USER20 209
#define F_GEN_EAN 210
#define F_ALT_EAN 211
#define F_EAN8 212
#define F_EAN13 213
#define F_EAN8CIN 214
// Campi per ve0200h.uml
#define F_RISKDAYS 201
#define F_PERCTOLL 202
#define F_DOCS 203
#define F_RISKDAYS 215
#define F_PERCTOLL 216
#define F_DOCS 217
#define SN_CODNUM 101
#define SN_DESCR 102

@ -222,6 +222,7 @@ class TTipo_documento : public TRectype // velib03
TString16 _totale_cont;
TString16 _field_prezzo;
TString16 _field_qta, _field_qtaevasa; // Veri campi Quantità e Quantità Evasa
TString16 _field_qta_mag, _field_qtaevasa_mag; // Veri campi Quantità e Quantità Evasa per magazzino
TString16 _raee_cod, _raee_fld;
TString _str_desc_doc, _str_desc_rdoc;
TString4 _module;
@ -263,6 +264,8 @@ public:
const char * field_prezzo() const { return _field_prezzo; }
const TString& field_qta() const { return _field_qta; }
const TString& field_qtaevasa() const { return _field_qtaevasa; }
const TString& field_qta_mag() const { return _field_qta_mag; }
const TString& field_qtaevasa_mag() const { return _field_qtaevasa_mag; }
bool check_giac() const { return _check_qta == 'G'; }
bool check_disp() const { return _check_qta == 'D'; }
bool load_cont() const { return _load_cont; }
@ -386,6 +389,7 @@ class TTipo_riga_documento : public TRectype // velib02
TString16 _field_provv;
TString16 _field_qta, _field_qtaevasa; // Veri campi Quantità e Quantità Evasa
TString16 _field_qta_mag, _field_qtaevasa_mag; // Veri campi Quantità e Quantità Evasa per magazzino
TToken_string _search_nums;
int _search_years;
@ -423,6 +427,8 @@ public:
const TString& quantevasa() const { return _quantevasa;}
const TString& field_qta() const { return _field_qta;}
const TString& field_qtaevasa() const { return _field_qtaevasa;}
const TString& field_qta_mag() const { return _field_qta_mag;}
const TString& field_qtaevasa_mag() const { return _field_qtaevasa_mag;}
const int search_years() const { return _search_years;}
const TToken_string& search_nums() const { return _search_nums;}
@ -469,6 +475,8 @@ protected:
virtual TRiga_documento & copy(const TRiga_documento & r);
TObject* dup() const { return new TRiga_documento(*this); }
virtual void set_variables(TExpression * e) const ;
bool has_doc() const { return _doc != NULL;}
static void test_firm();
@ -548,6 +556,12 @@ public:
real quantita() const;
real qtaevasa() const;
real qtaresidua() const;
virtual const TString& field_qta_mag() const;
virtual const TString& field_qtaevasa_mag() const;
virtual real quantita_mag() const;
virtual real qtaevasa_mag() const;
virtual real qtaresidua_mag() const;
real calc_conai_qta(int type) const;
real valore(bool totale, bool lordo = false, int ndec = AUTO_DECIMALS) const;
@ -907,6 +921,7 @@ public:
static TAssoc_array & auto_reopen_nums() { return _auto_reopen_nums;}
static TAssoc_array & tipidoc_rels() { return _tipidoc_rels;}
const TAssoc_array & father_rows() const { return _father_rows;}
void reset_father_rows() {_father_rows.destroy();}
void update_father_rows(bool add = true);
void save_father_rows();

@ -101,6 +101,12 @@ void TTipo_riga_documento::read_formule()
_field_provv = profile.get("PROVV");
_field_qta = profile.get("QTA"); // Non dare un default: ingannerebbe il tipo documento
_field_qtaevasa = profile.get("QTAEVASA"); // Non dare un default: ingannerebbe il tipo documento
_field_qta_mag = profile.get("QTA_MAG");
if(_field_qta_mag.blank())
_field_qta_mag = _field_qta;
_field_qtaevasa_mag = profile.get("QTAEVASA_MAG");
if(_field_qtaevasa_mag.blank())
_field_qtaevasa_mag = _field_qtaevasa;
_field_imposta = profile.get("IMPOSTA");
_incrp = profile.get_int("VARP+");
_decrp = profile.get_int("VARP-");
@ -153,6 +159,7 @@ bool TRiga_documento::_rit_calc = false;
TRiga_documento::TRiga_documento(TDocumento* doc, const char * tipo)
: TAuto_variable_rectype(LF_RIGHEDOC), _doc(doc)
{
set_memo_fld("G1");
if (tipo)
set_tipo(tipo);
}
@ -161,6 +168,7 @@ TRiga_documento::TRiga_documento(const TRiga_documento & row)
: TAuto_variable_rectype(LF_RIGHEDOC), _doc(NULL)
{
set_memo_fld("G1");
copy(row);
}
@ -168,6 +176,7 @@ TRiga_documento::TRiga_documento(const TRiga_documento& rec, TDocumento* doc,
const char * tipo)
: TAuto_variable_rectype(rec), _doc(doc)
{
set_memo_fld("G1");
if (tipo)
set_tipo(tipo);
}
@ -342,11 +351,11 @@ void TRiga_documento::cost2revenue()
// Ritorna TRUE se le due righe del documento possono essere sommate
bool TRiga_documento::raggruppabile(const TRiga_documento& r, TToken_string& campi) const
{
bool ok = TRUE;
TString campo;
bool ok = field_qta() == r.field_qta() && field_qtaevasa() == r.field_qtaevasa();
for (const char* c = campi.get(0); c && ok; c = campi.get())
{
campo = get(c); // Separare le due get!
const TString & campo = get(c); // Separare le due get!
ok &= campo == r.get(c);
}
return ok;
@ -354,10 +363,8 @@ bool TRiga_documento::raggruppabile(const TRiga_documento& r, TToken_string& cam
TRiga_documento& TRiga_documento::operator +=(const TRiga_documento& r)
{
const TTipo_documento& tipo = doc().tipo();
// New age mode
const char* const campi[5] = { RDOC_NCOLLI, RDOC_TARA, RDOC_PNETTO, tipo.field_qta(), tipo.field_qtaevasa() };
const char* const campi[5] = { RDOC_NCOLLI, RDOC_TARA, RDOC_PNETTO, field_qta(), field_qtaevasa() };
for (int i = 0; i < 5; i++)
add(campi[i], r.get_real(campi[i]));
@ -718,6 +725,45 @@ real TRiga_documento::qtaresidua() const
return ZERO;
}
const TString& TRiga_documento::field_qta_mag() const
{
const TString& rowtype_field = tipo().field_qta_mag();
if (rowtype_field.not_empty())
return rowtype_field;
const TString& doctype_field = doc().tipo().field_qta_mag();
return doctype_field;
}
const TString& TRiga_documento::field_qtaevasa_mag() const
{
const TString& rowtype_field = tipo().field_qtaevasa_mag();
if (rowtype_field.not_empty())
return rowtype_field;
const TString& doctype_field = doc().tipo().field_qtaevasa_mag();
return doctype_field;
}
real TRiga_documento::quantita_mag() const
{
return get_real(field_qta_mag());
}
real TRiga_documento::qtaevasa_mag() const
{
return get_real(field_qtaevasa_mag());
}
real TRiga_documento::qtaresidua_mag() const
{
if (!get_bool(RDOC_RIGAEVASA))
{
real val = quantita_mag() - qtaevasa_mag();
if (val > ZERO)
return val;
}
return ZERO;
}
real TRiga_documento::calc_conai_qta(int type) const
{
const char* const __conai_art_names[] = {"CONACC", "CONALL", "CONCAR", "CONPLA", "CONLEG", "CONVET"};
@ -749,20 +795,13 @@ real TRiga_documento::valore(bool totale, bool lordo, int ndec) const
{
real val;
TString16 field_qta = tipo().field_qta();
if (field_qta.empty())
field_qta = doc().tipo().field_qta();
const bool qta_is_price = field_qta == RDOC_PREZZO;
const TString & f_qta = field_qta();
const bool qta_is_price = f_qta == RDOC_PREZZO;
if (totale)
{
TString16 field_qta = tipo().field_qta();
if (field_qta.empty())
field_qta = doc().tipo().field_qta();
if (qta_is_price)
field_qta = RDOC_QTA;
val = get_real(field_qta);
val *= prezzo(TRUE, lordo, ALL_DECIMALS);
val = get_real(qta_is_price ? RDOC_QTA : f_qta);
val *= prezzo(TRUE, lordo, ALL_DECIMALS);
}
else
{
@ -870,13 +909,7 @@ void TRiga_documento::autosave(TSheet_field& f)
TMask& m = f.sheet_mask();
TToken_string & row = f.row(num);
/* const int lordo_id = f.cid2index(FR_LORDO);
const bool lordo = strcmp(row.get(lordo_id), "X") == 0;
if (lordo)
{
row.add(" ", lordo_id);
m.reset(FR_LORDO);
} */
put( RDOC_TIPORIGA, row.get( f.cid2index(FR_TIPORIGA )) );
TString8 codmag(row.get(f.cid2index(FR_CODMAG)));
@ -951,6 +984,7 @@ void TRiga_documento::autosave(TSheet_field& f)
put( RDOC_LINEA, row.get( f.cid2index(FR_LINEA )) );
put( RDOC_CODAGG1, row.get( f.cid2index(FR_CODAGG1)) );
put( RDOC_CODAGG2, row.get( f.cid2index(FR_CODAGG2)) );
put( RDOC_RIDPREZZO, row.get( f.cid2index(FR_RIDPREZZO)) );
f.select(num); // Seleziona la riga in modo da selezionare la maschera di riga giusta
for (short cdcid = FR_CDC1; cdcid <= FR_CDC12; cdcid++)
@ -1009,23 +1043,23 @@ void TRiga_documento::autosave(TSheet_field& f)
} //if(m.field(...
// Salvo i campi con un FIELD manuale
const int last_pos = f.cid2index(FR_CODAGG2);
f.select(num); // Seleziono la riga giusta in modo da avere la maschera giusta
for (int i = last_pos+1; ; i++)
{
const char* val = row.get(i);
if (val != NULL)
const TMask& m = f.sheet_row_mask(num);
for (short id = FR_JOLLY1; id <= FR_JOLLY10; id++)
{
const short id = FR_LORDO + i;
const int pos = m.id2pos(id);
if (pos >= 0)
if (pos > 0)
{
const TMask_field& c = m.fld(pos);
const TFieldref* fld = c.field();
const char* val = row.get(f.cid2index(id));
if (val != NULL)
{
const TFieldref* fld = m.fld(pos).field();
if (fld != NULL)
fld->write(val, *this);
}
}
else
break;
}
@ -1097,9 +1131,10 @@ void TRiga_documento::autoload(TSheet_field & f)
row.add( get( RDOC_LINEA) , f.cid2index(FR_LINEA));
row.add( get( RDOC_CODAGG1) , f.cid2index(FR_CODAGG1));
row.add( get( RDOC_CODAGG2) , f.cid2index(FR_CODAGG2));
row.add( get( RDOC_RIDPREZZO) , f.cid2index(FR_RIDPREZZO));
const TMask& m = f.sheet_row_mask(num);
f.select(num); // Seleziona la riga in modo da selezionare la maschera di riga giusta
const TMask& m = f.sheet_mask();
for (short cdcid = FR_CDC1; cdcid <= FR_CDC12; cdcid++)
{
const int pos = m.id2pos(cdcid);
@ -1116,19 +1151,23 @@ void TRiga_documento::autoload(TSheet_field & f)
row.add( get( RDOC_TIPODET) , f.cid2index(FR_TIPODET));
// Leggo i campi con un FIELD manuale
const int last_pos = f.cid2index(FR_CODAGG2);
f.select(num); // Seleziono la riga giusta in modo da avere la maschera giusta
FOR_EACH_MASK_FIELD(m, i, c)
for (short id = FR_JOLLY1; id <= FR_JOLLY10; id++)
{
const TFieldref* fld = c->field();
const int pos = m.id2pos(id);
if (pos > 0)
{
const TFieldref* fld = m.fld(pos).field();
if (fld != NULL)
{
const int idx = f.cid2index(c->dlg());
if (idx > last_pos && idx < MAX_COLUMNS)
const int idx = f.cid2index(id);
row.add(fld->read(*this), idx);
}
}
}
}}
TArticolo & TRiga_documento::articolo() const
{

@ -1099,7 +1099,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
r.put(RDOC_MOVMAG, r_num);
}
const real qta = scarica_residuo ? r.qtaresidua(): r.quantita();
const real qta = scarica_residuo ? r.qtaresidua_mag(): r.quantita_mag();
if (r_num == num_movmag && !qta.is_zero())
{
@ -1739,7 +1739,8 @@ void TDocumento::set_fields(TAuto_variable_rectype & rec)
{
const char * fieldname = src_field->name();
if (!exist(fieldname))
// if (!exist(fieldname))
if (src_field->expression() == NULL)
put(fieldname, rec.get(fieldname));
}
}

@ -334,6 +334,12 @@ void TTipo_documento::read_formule()
_field_prezzo = prof.get(RDOC_PREZZO);
_field_qta = prof.get(RDOC_QTA, NULL, -1, RDOC_QTA);
_field_qtaevasa = prof.get(RDOC_QTAEVASA, NULL, -1, RDOC_QTAEVASA);
_field_qta_mag = prof.get("QTA_MAG");
if(_field_qta_mag.blank())
_field_qta_mag = _field_qta;
_field_qtaevasa_mag = prof.get("QTAEVASA_MAG");
if(_field_qtaevasa_mag.blank())
_field_qtaevasa_mag = _field_qtaevasa;
_check_qta = prof.get_char("CHECK_QTA", "MAIN");
_load_cont = prof.get_bool("LOAD_CONT", "MAIN");
_raee_cod = prof.get("RAEE_COD", "MAIN");

@ -589,6 +589,35 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
outrec.set_original_rdoc_key(inrec);
if (reload_prices())
outrec.zero(RDOC_CHECKED);
if (prezzo_da_ordine())
{
const TString & codart = outrec.get(RDOC_CODARTMAG);
const bool doc_al_lordo = outdoc.tipo().calcolo_lordo();
const TRectype & anamag = cache().get(LF_ANAMAG, codart);
if (!anamag.empty())
{
TString16 field_prezzo(outdoc.tipo().field_prezzo());
if (field_prezzo.full())
outrec.put(RDOC_PREZZO, anamag.get_real(field_prezzo));
else
{
const TString16 um(outrec.get(RDOC_UMQTA));
if (um.full())
{
TLocalisamfile umart(LF_UMART);
umart.setkey(2);
umart.put("CODART", codart);
umart.put("UM", um);
if (umart.read() == NOERR)
outrec.put(RDOC_PREZZO, umart.get_real("PREZZO"));
}
}
}
}
}
}
}

@ -25,6 +25,7 @@
#include "veuml1.h"
#include "veini.h"
#include <multirel.h>
#include "sconti.h"
#include "rcondv.h"
#include <occas.h>
@ -1410,11 +1411,15 @@ bool TDocumento_mask::ss_notify( TSheet_field& ss, int r, KEY key )
case K_TAB: // ingresso nella riga
if (!selecting && m.is_running())
{
if (r < doc.physical_rows())
{
m.update_giacenza();
const TRectype& rdoc = doc[r + 1];
set_curr_um(rdoc.get(RDOC_UMQTA));
const bool on = rdoc.get(RDOC_DACODNUM).not_empty();
ss.sheet_mask().enable(DLG_USER, on);
}
if (rdoc.get(RDOC_CODART).empty() && rdoc.get(RDOC_DESCR).empty())
{
@ -1424,6 +1429,56 @@ bool TDocumento_mask::ss_notify( TSheet_field& ss, int r, KEY key )
}
}
break;
case K_CTRL + K_TAB: // uscita dalla riga
{
bool ok = true;
static int checkgiac = 3;
if (checkgiac > 2)
{
TConfig c(CONFIG_DITTA);
checkgiac = c.get_bool("LIVPERART", "ve");
}
if (checkgiac)
{
TString livello;
TToken_string & row = ss.row(r);
for (int l = 0; l<4 ; l++)
doc.livelli().pack_grpcode(livello, row.get(ss.cid2index(FR_LIV1+l)), l+1);
if (livello.full())
{
const TString80 codart(row.get(ss.cid2index(FR_CODART)));
const TRectype & rec = cache().get(LF_ANAMAG, codart);
const bool check_art = rec.get_bool(ANAMAG_LIVPERART);
if (check_art)
{
TLocalisamfile fl(LF_MULTIREL);
TRectype & r = fl.curr();
r.put(MULTI_COD, "ARTLV");
r.put(MULTI_FIRST, codart);
r.put(MULTI_SECOND, livello);
TRectype new_rec(r);
if (fl.read() != NOERR)
{
ok = yesno_box("Il codice di giacenza %s non e' legato all' articolo. Devo legarlo", (const char *)livello);
if (ok)
{
r = new_rec;
const int err = new_rec.write(fl);
if (err != NOERR)
return error_box("Non sono riuscito a legare il codice di giacenza. Errore %d", err);
}
else
return false;
}
}
}
}
}
break;
default:
break;
}
@ -3388,7 +3443,7 @@ void TDocumento_mask::save_father_rows()
if (idriga == rdoc_row.get_long(RDOC_IDRIGA))
{
const real * qta = (const real *) _father_rows.objptr(key);
const TString16 name = rdoc_row.field_qtaevasa();
const TString& name = rdoc_row.field_qtaevasa();
real qtaevasa = rdoc_row.get_real(name) + * qta;
if (qtaevasa < ZERO)

@ -373,6 +373,11 @@ void row_set_handler( TMask& m, const int field, const int index)
if (field == FR_CODART)
m.set_handler( field, link_row_handler );
break;
case 6:
m.set_handler( field, evasion_check_handler );
break;
default:
default:
yesnofatal_box( false, "Funzione di handler sulla riga non definita( %d ).", index );
break;
@ -1036,12 +1041,19 @@ static void search_price_article(TEdit_field& f, KEY key )
const int last_anno = mask.get_int(F_ANNO);
const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
TString80 livello;
for (int l = 0; l<4 ; l++)
mask.doc().livelli().pack_grpcode(livello, row_mask.get(FR_LIV1 + l),l + 1);
from.put(RDOC_CODART, codart);
from.put(RDOC_LIVELLO, livello);
from.put(RDOC_CODNUM, first_num);
from.put(RDOC_ANNO, first_anno);
from.put(RDOC_PROVV, 'D');
to.put(RDOC_CODART, codart);
to.put(RDOC_LIVELLO, livello);
to.put(RDOC_CODNUM, last_num);
to.put(RDOC_ANNO, last_anno);
to.put(RDOC_PROVV, 'D');
@ -1125,12 +1137,19 @@ bool search_price_handler(TMask_field& f, KEY key )
const int last_anno = mask.get_int(F_ANNO);
const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
TString80 livello;
for (int l = 0; l<4 ; l++)
mask.doc().livelli().pack_grpcode(livello, row_mask.get(FR_LIV1 + l),l + 1);
from.put(RDOC_CODART, codart);
from.put(RDOC_LIVELLO, livello);
from.put(RDOC_CODNUM, first_num);
from.put(RDOC_ANNO, first_anno);
from.put(RDOC_PROVV, "D");
to.put(RDOC_CODART, codart);
to.put(RDOC_LIVELLO, livello);
to.put(RDOC_CODNUM, last_num);
to.put(RDOC_ANNO, last_anno);
to.put(RDOC_PROVV, "D");
@ -1172,6 +1191,127 @@ bool find_price_handler(TMask_field& f, KEY key )
return codart_handler( f, key);
}
///////////////////////////////////////////////////////////
// TCache_documenti
///////////////////////////////////////////////////////////
class TCache_documenti : public TRecord_cache
{
protected:
virtual TObject* rec2obj(const TRectype& rec) const;
public:
TDocumento& doc(const char* key);
TCache_documenti();
virtual ~TCache_documenti() { }
};
TCache_documenti::TCache_documenti()
: TRecord_cache(LF_DOC, 1)
{
test_file_changes(); // Tieni d'occhio le modifiche sul file
set_items_limit(256); // Standard
}
TObject* TCache_documenti::rec2obj(const TRectype& curr) const
{
return new TDocumento(curr);
}
TDocumento & TCache_documenti::doc(const char* key)
{
return (TDocumento &)query(key);
}
TDocumento & cached_doc(const char* key)
{
static TCache_documenti * _cache_docs = NULL;
if (_cache_docs == NULL)
_cache_docs = new TCache_documenti();
return _cache_docs->doc(key);
}
class TLink_riga_documento : public TRiga_documento
{
protected:
const TDocumento_mask * _mask;
virtual const TString& get_str(const char* fieldname) const;
public:
virtual const TDocumento & doc() const;
void set_mask(const TDocumento_mask * m) { _mask = m;}
virtual real qtaresidua() const;
TLink_riga_documento(const TDocumento_mask * m = NULL, const char* tipo = NULL) : TRiga_documento(NULL, tipo), _mask(m){}
};
const TString& TLink_riga_documento::get_str(const char* fieldname) const
{
if (strcmp(fieldname, "RESIDUO") == 0)
{
TString & value = get_tmp_string(80);
value = qtaresidua().string();
return value;
}
return TRiga_documento::get_str(fieldname);
}
const TDocumento & TLink_riga_documento::doc() const
{
if (has_doc())
return TRiga_documento::doc();
TToken_string key;
key.add(get_char(RDOC_PROVV));
key.add(get_int(RDOC_ANNO));
key.add(get(RDOC_CODNUM));
key.add(get_long(RDOC_NDOC));
return cached_doc(key);;
}
real TLink_riga_documento::qtaresidua() const
{
real residuo = TRiga_documento::qtaresidua();
TToken_string key, key_to_compare;
const TDocumento_mask& m = (const TDocumento_mask &) *_mask;
const TDocumento &doc = m.doc();
const int rows = doc.physical_rows();
const int current_doc_row = m.sfield(F_SHEET).selected() + 1;
key.add(get(RDOC_PROVV));
key.add(get(RDOC_ANNO));
key.add(get(RDOC_CODNUM));
key.add(get(RDOC_NDOC));
key.add(get(RDOC_IDRIGA));
real * qta = (real *) m.father_rows().objptr(key);
if (qta != NULL)
residuo -= *qta;
for (int j = 1; j <= rows; j++)
{
if (j != current_doc_row)
{
const TRiga_documento & row = doc[j];
key_to_compare.cut(0);
key_to_compare.add(row.get(RDOC_DAPROVV));
key_to_compare.add(row.get(RDOC_DAANNO));
key_to_compare.add(row.get(RDOC_DACODNUM));
key_to_compare.add(row.get(RDOC_DANDOC));
key_to_compare.add(row.get(RDOC_DAIDRIGA));
if (key == key_to_compare)
residuo -= row.quantita();
}
}
return residuo;
}
class TLink_article_sheet : public TBrowse_sheet
{
protected:
@ -1214,11 +1354,34 @@ bool link_row_handler(TMask_field& f, KEY key )
{
TEdit_field& ef = (TEdit_field&)f;
const TString& codart = row_mask.get(FR_CODART);
const bool select_clifo = tipo.select_clifo();
if (codart.full() && r.get(RDOC_DACODNUM).empty())
{
TDate datadoc = mask.get_date(F_DATADOC);
TToken_string nums(((TTipo_riga_documento&)r.tipo()).search_nums());
const int sel = sh.selected();
TToken_string & sh_row = sh.row(sel);
const TString row_cod(sh_row.get(sh.cid2index(FR_CODART)));
TString80 from_livello, to_livello;
int len = 0;
for (int l = 1; l <= doc.livelli().last_level() ; l++)
{
doc.livelli().pack_grpcode(from_livello, row_mask.get(FR_LIV1 + l - 1),l);
len += doc.livelli().code_length(l);
}
to_livello = from_livello;
if (doc.livelli().last_level() > 0 && to_livello.blank())
to_livello.fill('{', len);
if (row_cod.blank())
{
sh_row.add("", sh.cid2index(FR_CHECKED));
sh_row.add(codart, sh.cid2index(FR_CODART));
sh.check_row(sel);
}
r.autosave(sh);
if (nums.blank())
nums = mask.get(F_CODNUM);
@ -1227,31 +1390,49 @@ bool link_row_handler(TMask_field& f, KEY key )
TString4 last_num(first_num);
TString filter;
filter << "(RIGAEVASA!=\"X\")&&(CODART==\"" << codart << "\")&&(ANSI(33->DATADOC)<=\"" << datadoc.string(ANSI) << "\")" << "&&((CODNUM==\"" << first_num << "\")";
filter << "(RIGAEVASA!=\"X\")&&(CODART==\"" << codart << "\")&&((LIVELLO>=\""
<< from_livello << "\")&&(LIVELLO<=\"" << to_livello << "\"))&&(ANSI(33->DATADOC)<=\"" << datadoc.string(ANSI) << "\")";
if (nums.items() > 0)
{
const bool more_nums = (nums.items() > 1);
bool add_or = false;
filter<< "&&";
if (more_nums)
filter<< "(";
FOR_EACH_TOKEN(nums, s)
{
if (add_or)
filter << "||";
add_or = true;
if (first_num > s)
first_num = s;
if (last_num < s)
last_num = s;
filter << "||(CODNUM==\"" << s << "\")";
filter << "(CODNUM==\"" << s << "\")";
}
if (more_nums)
filter << ")";
}
filter << ")";
TRelation rel(LF_RIGHEDOC);
TRectype from(rel.curr());
TRectype to(rel.curr());
rel.lfile().set_curr(new TLink_riga_documento(&mask));
rel.add(LF_DOC, "PROVV==PROVV|ANNO=ANNO|CODNUM==CODNUM|NDOC==NDOC");
const int last_anno = mask.get_int(F_ANNO);
const int first_anno = last_anno - tipo.search_years();
from.put(RDOC_CODART, codart);
from.put(RDOC_LIVELLO, from_livello);
from.put(RDOC_CODNUM, first_num);
from.put(RDOC_ANNO, first_anno);
from.put(RDOC_PROVV, 'D');
to.put(RDOC_CODART, codart);
to.put(RDOC_LIVELLO, to_livello);
to.put(RDOC_CODNUM, last_num);
to.put(RDOC_ANNO, last_anno);
to.put(RDOC_PROVV, 'D');
@ -1265,29 +1446,30 @@ bool link_row_handler(TMask_field& f, KEY key )
sheet.add_string (FR_DESCR, 0, "", 38, 0, 50, "D", 30);
sheet.set(FR_CODART, codart);
sheet.set(FR_DESCR, cache().get(LF_ANAMAG, codart, "DESCR"));
if (sheet.run() == K_ENTER)
{
r.set_original_rdoc_key(cur.curr());
const TRectype * orig_doc = r.find_original_doc(); // warning
if (orig_doc != NULL)
{
r.autosave(sh);
TDocumento doc(*orig_doc);
TRiga_documento & row = doc[cur.curr().get_int(RDOC_NRIGA)];
const TString16 livello = row.get(RDOC_LIVELLO);
TDocumento father_doc(*orig_doc);
TLink_riga_documento & father_row = (TLink_riga_documento &) cur.curr();
const TString16 livello = father_row.get(RDOC_LIVELLO);
father_row.set_doc(&doc);
r.put(RDOC_LIVELLO, livello);
r.put(RDOC_QTA, row.qtaresidua());
TToken_string flds = tipo.fields_to_update();
for (const char * fld = flds.get(0); fld && * fld; fld = flds.get())
FOR_EACH_TOKEN(flds, fld)
{
const TString16 f(fld);
const TString val = row.get(fld);
r.put(f, val);
const TString & val = father_row.get(fld);
r.put(fld, val);
}
r.autoload(sh);
sh.force_update(sh.selected());
sh.force_update(sel);
}
}
}
@ -1619,70 +1801,6 @@ bool liv_handler( TMask_field& f, KEY key )
mask.livelli().autoinsert(levnum, f);
}
if (key == K_ENTER && !f.get().empty())
{
static int checkgiac = 3;
if (checkgiac > 2)
{
TConfig c(CONFIG_DITTA);
checkgiac = c.get_bool("LIVPERART", "ve");
}
if (mask.is_running() && checkgiac)
{
TMask& row_mask = f.mask();
const TString80 codart(row_mask.get(FR_CODART));
const TRectype & rec = cache().get(LF_ANAMAG, codart);
const bool check_art = rec.get_bool(ANAMAG_LIVPERART);
if (check_art)
{
TLocalisamfile fl(LF_MAG);
fl.setkey(2);
TRectype & r = fl.curr();
const int annoes = esercizi().date2esc(mask.get_date(F_DATADOC));
r.put(MAG_ANNOES, annoes);
TString16 codmag(row_mask.get(FR_CODMAG));
codmag.left_just(3);
codmag << row_mask.get(FR_CODDEP);
r.put(MAG_CODMAG, codmag);
r.put(MAG_CODART, codart);
TString liv;
for (int l = 0 ; l <= f.dlg() - FR_LIV1; l++)
mask.doc().livelli().pack_grpcode(liv,row_mask.get(FR_LIV1+l),l+1);
r.put(MAG_LIVELLO, liv);
TRectype new_rec(r);
if (fl.read() != NOERR)
{
ok = yesno_box("Il codice di giacenza %s non e' legato all' articolo. Devo legarlo", (const char *)f.get());
if (ok)
{
fl.setkey(1);
r = new_rec;
r.put("NRIGA", 999);
int nriga = 1;
if (fl.read(_isgteq) == NOERR)
fl.prev();
if (codart == fl.get("CODART"))
nriga = fl.get_int("NRIGA")+1;
new_rec.put("NRIGA", nriga);
const int err = new_rec.write(fl);
if (err != NOERR)
ok = error_box("Non sono riuscito a legare il codice di giacenza. Errore %d", err);
}
else
return false;
}
}
}
}
if (f.to_check(key, true))
{
if (f.dlg() < FR_LIV4)
@ -1916,15 +2034,17 @@ bool qtaart_handler( TMask_field& f, KEY key )
if (doc.tipo().check_giac())
{
real giac(mask.get(F_CURGIAC));
if (giac < -(c.sgn(s_giac) * qta))
warning_box("Attenzione giacenza negativa");
if (giac < -(c.sgn(s_giac) * qta) && !yesno_box("Attenzione giacenza negativa, Devo continuare ?"))
return false;
}
else
if (doc.tipo().check_disp())
{
real disp(mask.get(F_CURDISP));
if (disp < -(c.sgn(s_giac) * qta))
warning_box("Attenzione disponibilita' negativa");
if (disp < -(c.sgn(s_giac) * qta) && !yesno_box("Attenzione disponibilita' negativa, Devo continuare ?"))
return false;
}
}
}
@ -2343,3 +2463,100 @@ bool codcms_handler(TMask_field& f, KEY key)
return true;
}
bool evasion_check_handler(TMask_field& f, KEY key )
{
if (key == K_ENTER && f.dirty())
{
const real qta(f.get());
if (qta <= ZERO)
return true;
const TFieldref * fld = f.field();
if (fld == NULL)
return true;
TSheet_field & sf = *f.mask().get_sheet();
TDocumento_mask & m = (TDocumento_mask & )sf.mask();
const TDocumento & d = m.doc();
const int nrow = sf.selected() + 1;
const TRiga_documento & r = d[nrow];
const TString16 name = fld->name();
const TRectype * orig_doc = r.find_original_doc(); // warning
if (orig_doc != NULL)
{
const long ndoc = d.get_long(DOC_NDOC);
TToken_string key;
key.add(orig_doc->get(DOC_PROVV));
key.add(orig_doc->get(DOC_ANNO));
key.add(orig_doc->get(DOC_CODNUM));
key.add(orig_doc->get(DOC_NDOC));
TDocumento & father_doc = cached_doc(key);
const TRectype * row = r.find_original_rdoc();
if (row != NULL)
{
const TRiga_documento & father_row = father_doc[row->get_int(RDOC_NRIGA)];
const real ordinato(father_row.get(name));
TString query("USE RDOC KEY 4 SELECT NDOC!=");
const int anno = r.get_int(RDOC_DAANNO);
const TString4 & codnum = r.get(RDOC_DACODNUM);
const long numdoc = r.get_long(RDOC_DANDOC);
TString select;
select << " DAPROVV='" << r.get(RDOC_DAPROVV) << "'";
select << " DAANNO='" << r.get(RDOC_DAANNO) << "'";
select << " DACODNUM='" << r.get(RDOC_DACODNUM) << "'";
select << " DANDOC='" << r.get(RDOC_DANDOC) << "'";
select << " DAIDRIGA='" << r.get(RDOC_DAIDRIGA) << "'";
query << ndoc ;
query << "\nFROM " << select;
query << "\nTO " << select;
TISAM_recordset recset(query);
real evaso;
for (bool ok = recset.move_first(); ok ; ok = recset.move_next())
evaso += recset.get(name).as_real();
const int doc_rows = d.physical_rows();
for (int i = 1; i <= doc_rows; i++)
{
if (i != nrow)
{
const TRiga_documento & row = d[i];
if (r.get(RDOC_CODART) == row.get(RDOC_CODART))
evaso += row.get_real(name);
}
}
const real residuo = ordinato - evaso;
if (residuo < qta)
if (!yesno_box(FR("La quantita' %s e' superiore al residuo %s,\nvuoi continuare ugualmente"), qta.stringa(), residuo.stringa()))
{
if (!f.mask().is_running())
{
m.set_focus_field(F_SHEET);
sf.post_select(nrow - 1);
}
return false;
}
else
if (!f.mask().is_running())
m.set_focus_field(F_SHEET);
}
}
}
if (f.dlg() == FR_QTA)
return qtaart_handler(f, key);
return true;
}

@ -32,6 +32,8 @@ bool pricerange_handler(TMask_field& f, KEY key );
bool link_handler( TMask_field& f, KEY key );
bool cdc_mag_handler(TMask_field& f, KEY key);
bool cms_mag_handler(TMask_field& f, KEY key);
bool evasion_check_handler( TMask_field& f, KEY key );
bool codcms_handler(TMask_field &f, KEY key);
bool numdocrif_hndl(TMask_field& field, KEY key);

@ -136,5 +136,6 @@
#define FR_DESCDC12 292
#define FR_FLCONS 293
#define FR_FLRIT 294
#define FR_HDESC 295
#endif
#endif

@ -174,6 +174,7 @@ ENDIF
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT FR_CODART CODART
OUTPUT FR_DESCRART DESCR
IFDEF(OU_CODART)
OUTPUT OUM_CODART OU_CODART
ENDIF
@ -208,6 +209,7 @@ ENDIF
DISPLAY "Descrizione@50" LF_ANAMAG->DESCR
DISPLAY "Codice@20" CODART
OUTPUT FR_CODART CODART
OUTPUT FR_DESCRART DESCR
IFDEF(OU_CODART)
OUTPUT OUM_CODART OU_CODART
ENDIF
@ -226,6 +228,16 @@ ENDIF
END
ENDIF
STRING FR_HDESC 50
BEGIN
PROMPT 100 100 "Descrizione "
USE LF_ANAMAG KEY 2
INPUT DESCR FR_HDESC
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@20" CODART
COPY OUTPUT FR_CODART
END
STRING FR_CODARTMAG 20
BEGIN
PROMPT 50 50 ""
@ -1613,7 +1625,15 @@ ENDIF
ENDIF
IFDEF(FLD_QTAGG1)
IFDEF(TY_QTAGG1)
IF(TY_QTAGG1==CURRENCY)
TY_QTAGG1 FR_QTAGG1 13
ELSEIF
TY_QTAGG1 FR_QTAGG1 13 5
ENDIF
ELSEIF
NUMBER FR_QTAGG1 13 5
ENDIF
BEGIN
IFDEF(X_QTAGG1)
PROMPT X_QTAGG1 Y_QTAGG1 PR_QTAGG1
@ -1634,7 +1654,15 @@ END
ENDIF
IFDEF(FLD_QTAGG2)
IFDEF(TY_QTAGG2)
IF(TY_QTAGG2==CURRENCY)
TY_QTAGG2 FR_QTAGG2 13
ELSEIF
TY_QTAGG2 FR_QTAGG2 13 5
ENDIF
ELSEIF
NUMBER FR_QTAGG2 13 5
ENDIF
BEGIN
IFDEF(X_QTAGG2)
PROMPT X_QTAGG2 Y_QTAGG2 PR_QTAGG2
@ -1655,7 +1683,15 @@ END
ENDIF
IFDEF(FLD_QTAGG3)
IFDEF(TY_QTAGG3)
IF(TY_QTAGG3==CURRENCY)
TY_QTAGG3 FR_QTAGG3 13
ELSEIF
TY_QTAGG3 FR_QTAGG3 13 5
ENDIF
ELSEIF
NUMBER FR_QTAGG3 13 5
ENDIF
BEGIN
IFDEF(X_QTAGG3)
PROMPT X_QTAGG3 Y_QTAGG3 PR_QTAGG3
@ -1676,7 +1712,15 @@ END
ENDIF
IFDEF(FLD_QTAGG4)
IFDEF(TY_QTAGG4)
IF(TY_QTAGG4==CURRENCY)
TY_QTAGG4 FR_QTAGG4 13
ELSEIF
TY_QTAGG4 FR_QTAGG4 13 5
ENDIF
ELSEIF
NUMBER FR_QTAGG4 13 5
ENDIF
BEGIN
IFDEF(X_QTAGG4)
PROMPT X_QTAGG4 Y_QTAGG4 PR_QTAGG4
@ -1697,7 +1741,15 @@ END
ENDIF
IFDEF(FLD_QTAGG5)
IFDEF(TY_QTAGG5)
IF(TY_QTAGG1==CURRENCY)
TY_QTAGG5 FR_QTAGG5 13
ELSEIF
TY_QTAGG5 FR_QTAGG5 13 5
ENDIF
ELSEIF
NUMBER FR_QTAGG5 13 5
ENDIF
BEGIN
IFDEF(X_QTAGG5)
PROMPT X_QTAGG5 Y_QTAGG5 PR_QTAGG5
@ -1964,12 +2016,16 @@ ENDIF // Campi analitici
IFDEF(FLD_CODAGG1)
IFDEF(TY_CODAGG1)
TY_QTAGG1 FR_QTAGG1 20
ELSEIF
STRING FR_CODAGG1 20
ENDIF
BEGIN
IFDEF(X_CODAGG1)
PROMPT X_CODAGG1 Y_CODAGG1 PR_CODAGG1
ELSEIF
PROMPT 2 15 "Strimga 1 "
PROMPT 2 15 "Stringa 1 "
ENDIF
IFDEF(FL_CODAGG1)
FLAGS FL_CODAGG1
@ -1985,12 +2041,15 @@ END
ENDIF
IFDEF(FLD_CODAGG2)
IFDEF(TY_CODAGG2)
TY_CODAGG2 FR_CODAGG2 20
ELSEIF
STRING FR_CODAGG2 13 5
BEGIN
IFDEF(X_CODAGG2)
PROMPT X_CODAGG2 Y_CODAGG2 PR_CODAGG2
ELSEIF
PROMPT 2 17 "Strimga 1 "
PROMPT 42 15 "Stringa 2 "
ENDIF
IFDEF(FL_CODAGG2)
FLAGS FL_CODAGG2

@ -44,5 +44,6 @@ DEFINE_FIELD(JOLLY)
DEFINE_FIELD(CDC)
DEFINE_FIELD(CODAGG1)
DEFINE_FIELD(CODAGG2)
DEFINE_FIELD(RIDPREZZO)
#include "verig.uml"

@ -10,6 +10,8 @@
!!define Y_##name col ;\
!!define PR_##name prompt ;
#define F_TYPE(name, type) !!define TY_##name type ;
#define F_FLG(name, flags) !!define FL_##name flags ;
#define F_CHK(name, type) !!define CH_##name type ;