Patch level : 2.2 112

Files correlati     : ve0.exe bacnv.exe profili riga e documento
Ricompilazione Demo : [ ]
Commento            :

Bug 0000423

Possibilità di variare il tipo riga direttamente sulla riga
Possibilità di selezionare piu' documenti in caso di elaborazione interattiva che aggiunge al documento attuale
Modificati i profili documento per le definizioni dei tipi riga colonne handlers etc..
Per quest'ultimo esiste il programma di conversione bacnv 23 nomeprofilo.ini


git-svn-id: svn://10.65.10.50/trunk@13151 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2005-05-25 11:32:58 +00:00
parent 5c664b90e7
commit 520f73114a
26 changed files with 695 additions and 385 deletions

View File

@ -1122,7 +1122,7 @@ WARNING "Ufficio IVA assente"
GROUP 5
END
STRINF F_DENUFFIVA 50 48
STRING F_DENUFFIVA 50 48
BEGIN
PROMPT 23 10 " "
FLAGS "D"

View File

@ -29,6 +29,7 @@
#define usage "Errore - uso : bacnv [1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22] ditta"
#define usage1 "Errore - uso : bacnv 23 profilo"
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Applicazione di conversione archivi XBase, valida per tutti e 4 i tipi di DLL
@ -197,6 +198,7 @@ public:
void convert_quadst() const;
void convert_clifo_privati();
void convert_pcon_ivd();
void convert_profile(const char * profile_name);
TConversione_archivi() : _oldditta(0), _codditta(0), _error(0) {}
@ -360,6 +362,8 @@ bool TConversione_archivi::menu(MENU_TAG)
break;
case 22:
convert_pcon_ivd();
case 23:
convert_profile(argv(2));
default:
break;
}
@ -1930,6 +1934,58 @@ void TConversione_archivi::convert_pcon_ivd()
prefix().set(pref);
}
void TConversione_archivi::convert_profile(const char * profile_name)
{
TConfig p(profile_name);
TString16 str;
int i;
int ncols = p.get_int( "NCOLS", "SHEET" );
p.remove("NCOLS");
for (i = 1; i <= ncols; i++)
{
str.format( "%d", i );
const TString16 val(p.get(str));
p.remove(str);
p.set("Col", val, NULL, true, i - 1);
}
const int numtr = p.get_int( "NTIPIRIGA", "RIGHE" );
p.remove( "NTIPIRIGA");
for (i = 1; i <= numtr; i ++ )
{
str.format("%d", i);
const TString16 tiporiga(p.get(str));
p.remove(str);
p.set("Tipo", tiporiga, NULL, true, i - 1);
}
const int hitems = p.get_int("NHANDLER", "HANDLERS");
p.remove("NHANDLER");
for (i = 1; i <= hitems; i++)
{
str.format("%d", i);
const TToken_string h(p.get(str));
p.remove(str);
p.set("Handler", h, NULL, true, i - 1);
}
const int ditems = p.get_int("NDEFAULTS", "DEFAULT");
p.remove("NDEFAULTS");
for (i = 1; i <= ditems; i++)
{
str.format("%d", i);
const TToken_string h(p.get(str));
p.remove(str);
p.set("Default", h, NULL, true, i - 1);
}
}
///////////////////////////////////////////////////////////
// Programma di conversione archivi speciale
///////////////////////////////////////////////////////////
@ -1938,7 +1994,7 @@ int main(int argc,char** argv)
{
const int r = (argc > 1) ? abs(atoi(argv[1])) : 0;
if (r < 0 || r > 22)
if (r < 0 || r > 23)
{
error_box(usage);
return 100;

View File

@ -96,6 +96,8 @@
#define BMP_FILE 169
#define BMP_STOP 170
#define BMP_FILECHK 171
#define BMP_DIRSEL 172
#define BMP_DIRDNSEL 173
#endif
/* @END */

BIN
res/dirdnsel.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 B

BIN
res/dirsel.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 B

View File

@ -63,6 +63,8 @@
169=file.bmp
170=stop.bmp
171=filechk.bmp
172=dirsel.bmp
173=dirdnsel.bmp
1661=check.bmp
1662=darrowu.bmp

View File

@ -157,40 +157,36 @@ DESCRCMS = S_NORMALE //3000
FASCMS = S_NORMALE //3000
DESCRFAS = S_NORMALE //3000
[DEFAULT]
[SHEET]
NCOLS=22
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
4=FR_LIV1
5=FR_LIV2
6=FR_LIV3
7=FR_LIV4
8=FR_DESCR
9=FR_UMQTA
10=FR_QTA
11=FR_PREZZO
12=FR_SCONTO
13=FR_PERCPROV
14=FR_IMPFISUN
15=FR_IMPFISSO
16=FR_CODIVA
17=FR_ADDIVA
18=FR_CAUS
19=FR_CODMAGC
20=FR_CODDEPC
21=FR_CODCMS
22=FR_FASCMS
Col(1)=FR_CODMAG
Col(2)=FR_CODDEP
Col(3)=FR_CODART
Col(4)=FR_LIV1
Col(5)=FR_LIV2
Col(6)=FR_LIV3
Col(7)=FR_LIV4
Col(8)=FR_DESCR
Col(9)=FR_UMQTA
Col(10)=FR_QTA
Col(11)=FR_PREZZO
Col(12)=FR_SCONTO
Col(13)=FR_PERCPROV
Col(14)=FR_IMPFISUN
Col(15)=FR_IMPFISSO
Col(16)=FR_CODIVA
Col(17)=FR_ADDIVA
Col(18)=FR_CAUS
Col(19)=FR_CODMAGC
Col(20)=FR_CODDEPC
Col(21)=FR_CODCMS
Col(22)=FR_FASCMS
[RIGHE]
NTIPIRIGA=*
[HANDLERS]
NHANDLER=0
1 = F_ORAPART|1
// Handler(0)=F_ORAPART|1
[PROFILOGRUPPO]
101 = S_NASCOSTO
@ -239,3 +235,4 @@ NGROUPS=11
9=2400
10=2900
11=3000

View File

@ -155,44 +155,40 @@ BLANK = S_DISABILITATO //4000
CODNOTE = S_NORMALE //2500
NOTECLI = S_NOCHECK //2500
[DEFAULT]
Default(0)=F_CAUSTRASP|VEN
[SHEET]
NCOLS=25
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
4=FR_LIV1
5=FR_LIV2
6=FR_LIV3
7=FR_LIV4
8=FR_DESCR
9=FR_UMQTA
10=FR_QTA
11=FR_PREZZO
12=FR_SCONTO
13=FR_PERCPROV
14=FR_IMPFISUN
15=FR_IMPFISSO
16=FR_CODIVA
17=FR_ADDIVA
18=FR_NCOLLI
19=FR_PNETTO
20=FR_TARA
21=FR_CAUS
22=FR_CODMAGC
23=FR_CODDEPC
24=FR_CODCMS
25=FR_FASCMS
Col(1)=FR_CODMAG
Col(2)=FR_CODDEP
Col(3)=FR_CODART
Col(4)=FR_LIV1
Col(5)=FR_LIV2
Col(6)=FR_LIV3
Col(7)=FR_LIV4
Col(8)=FR_DESCR
Col(9)=FR_UMQTA
Col(10)=FR_QTA
Col(11)=FR_PREZZO
Col(12)=FR_SCONTO
Col(13)=FR_PERCPROV
Col(14)=FR_IMPFISUN
Col(15)=FR_IMPFISSO
Col(16)=FR_CODIVA
Col(17)=FR_ADDIVA
Col(18)=FR_NCOLLI
Col(19)=FR_PNETTO
Col(20)=FR_TARA
Col(21)=FR_CAUS
Col(22)=FR_CODMAGC
Col(23)=FR_CODDEPC
Col(24)=FR_CODCMS
Col(25)=FR_FASCMS
[RIGHE]
NTIPIRIGA=*
[HANDLERS]
NHANDLER=0
1 = F_ORAPART|1
// Handler(0) = F_ORAPART|1
[PROFILOGRUPPO]
101 = S_NASCOSTO
@ -229,7 +225,7 @@ NHANDLER=0
2710 = S_NORMALE
2800 = S_NORMALE
2900 = S_NORMALE
3000 = S_NORMALE
3000 = S_NORMALE
4000 = S_NORMALE
[ORDINEGRUPPI]
@ -264,3 +260,4 @@ NGROUPS=30
28=1000
29=2900
30=3000

View File

@ -109,37 +109,33 @@ DESCRCMS = S_NORMALE //3000
FASCMS = S_NORMALE //3000
DESCRFAS = S_NORMALE //3000
[DEFAULT]
Default(0)=F_CAUSTRASP|RES
[SHEET]
NCOLS=18
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
4=FR_LIV1
5=FR_LIV2
6=FR_LIV3
7=FR_LIV4
8=FR_DESCR
9=FR_UMQTA
10=FR_QTA
11=FR_LORDO
12=FR_PREZZO
13=FR_CODIVA
14=FR_CAUS
15=FR_CODMAGC
16=FR_CODDEPC
17=FR_CODCMS
18=FR_FASCMS
Col(0) = FR_CODMAG
Col(1) = FR_CODDEP
Col(2) = FR_CODART
Col(3) = FR_LIV1
Col(4) = FR_LIV2
Col(5) = FR_LIV3
Col(6) = FR_LIV4
Col(7) = FR_DESCR
Col(8) = FR_UMQTA
Col(9) = FR_QTA
Col(10) = FR_LORDO
Col(11) = FR_PREZZO
Col(12) = FR_CODIVA
Col(13) = FR_CAUS
Col(14) = FR_CODMAGC
Col(15) = FR_CODDEPC
Col(16) = FR_CODCMS
Col(17) = FR_FASCMS
[RIGHE]
NTIPIRIGA=*
[HANDLERS]
NHANDLER=0
1 = F_ORAPART|1
// Handler(0) = F_ORAPART|1
[PROFILOGRUPPO]
100 = S_NORMALE
@ -185,3 +181,4 @@ NGROUPS=20
18=1500
19=1600
20=3000

View File

@ -120,35 +120,32 @@ DESCRFAS = S_NORMALE //3000
[DEFAULT]
[SHEET]
NCOLS=22
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
4=FR_LIV1
5=FR_LIV2
6=FR_LIV3
7=FR_LIV4
8=FR_DESCR
9=FR_UMQTA
10=FR_QTA
11=FR_PREZZO
12=FR_SCONTO
13=FR_PERCPROV
14=FR_IMPFISUN
15=FR_IMPFISSO
16=FR_CODIVA
17=FR_ADDIVA
18=FR_CAUS
19=FR_CODMAGC
20=FR_CODDEPC
21=FR_CODCMS
22=FR_FASCMS
Col(0) = FR_CODMAG
Col(1) = FR_CODDEP
Col(2) = FR_CODART
Col(3) = FR_LIV1
Col(4) = FR_LIV2
Col(5) = FR_LIV3
Col(6) = FR_LIV4
Col(7) = FR_DESCR
Col(8) = FR_UMQTA
Col(9) = FR_QTA
Col(10) = FR_PREZZO
Col(11) = FR_SCONTO
Col(12) = FR_PERCPROV
Col(13) = FR_IMPFISUN
Col(14) = FR_IMPFISSO
Col(15) = FR_CODIVA
Col(16) = FR_ADDIVA
Col(17) = FR_CAUS
Col(18) = FR_CODMAGC
Col(19) = FR_CODDEPC
Col(20) = FR_CODCMS
Col(21) = FR_FASCMS
[RIGHE]
NTIPIRIGA=*
[HANDLERS]
NHANDLER=0
[PROFILOGRUPPO]
101 = S_NASCOSTO

View File

@ -158,40 +158,37 @@ DESCRFAS = S_NORMALE //3000
Default(0)=F_CAUSTRASP|VEN
[SHEET]
NCOLS=26
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
4=FR_LIV1
5=FR_LIV2
6=FR_LIV3
7=FR_LIV4
8=FR_DESCR
9=FR_UMQTA
10=FR_QTA
11=FR_LORDO
12=FR_PREZZO
13=FR_SCONTO
14=FR_PERCPROV
15=FR_IMPFISUN
16=FR_IMPFISSO
17=FR_CODIVA
18=FR_ADDIVA
19=FR_NCOLLI
20=FR_PNETTO
21=FR_TARA
22=FR_CAUS
23=FR_CODMAGC
24=FR_CODDEPC
25=FR_CODCMS
26=FR_FASCMS
Col(0) = FR_CODMAG
Col(1) = FR_CODDEP
Col(2) = FR_CODART
Col(3) = FR_LIV1
Col(4) = FR_LIV2
Col(5) = FR_LIV3
Col(6) = FR_LIV4
Col(7) = FR_DESCR
Col(8) = FR_UMQTA
Col(9) = FR_QTA
Col(10) = FR_LORDO
Col(11) = FR_PREZZO
Col(12) = FR_SCONTO
Col(13) = FR_PERCPROV
Col(14) = FR_IMPFISUN
Col(15) = FR_IMPFISSO
Col(16) = FR_CODIVA
Col(17) = FR_ADDIVA
Col(18) = FR_NCOLLI
Col(19) = FR_PNETTO
Col(20) = FR_TARA
Col(21) = FR_CAUS
Col(22) = FR_CODMAGC
Col(23) = FR_CODDEPC
Col(24) = FR_CODCMS
Col(25) = FR_FASCMS
[RIGHE]
NTIPIRIGA=*
[HANDLERS]
NHANDLER=0
1 = F_ORAPART|1
// Handler(0)=F_ORAPART|1
[PROFILOGRUPPO]
101 = S_NASCOSTO
@ -262,3 +259,4 @@ NGROUPS=30
28=1000
29=2900
30=3000

View File

@ -132,33 +132,30 @@ BLANK = S_DISABILITATO //4000
[DEFAULT]
[SHEET]
NCOLS=20
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
4=FR_LIV1
5=FR_LIV2
6=FR_LIV3
7=FR_LIV4
8=FR_DESCR
9=FR_UMQTA
10=FR_QTA
11=FR_PREZZO
12=FR_SCONTO
13=FR_PERCPROV
14=FR_IMPFISUN
15=FR_IMPFISSO
16=FR_CODIVA
17=FR_ADDIVA
18=FR_CAUS
19=FR_CODMAGC
20=FR_CODDEPC
Col(1)=FR_CODMAG
Col(2)=FR_CODDEP
Col(3)=FR_CODART
Col(4)=FR_LIV1
Col(5)=FR_LIV2
Col(6)=FR_LIV3
Col(7)=FR_LIV4
Col(8)=FR_DESCR
Col(9)=FR_UMQTA
Col(10)=FR_QTA
Col(11)=FR_PREZZO
Col(12)=FR_SCONTO
Col(13)=FR_PERCPROV
Col(14)=FR_IMPFISUN
Col(15)=FR_IMPFISSO
Col(16)=FR_CODIVA
Col(17)=FR_ADDIVA
Col(18)=FR_CAUS
Col(19)=FR_CODMAGC
Col(20)=FR_CODDEPC
[RIGHE]
NTIPIRIGA=*
[HANDLERS]
NHANDLER=0
[PROFILOGRUPPO]
101 = S_NASCOSTO

View File

@ -153,38 +153,34 @@ BLANK = S_DISABILITATO //4000
CODNOTE = S_NORMALE //2500
NOTECLI = S_NOCHECK //2500
[DEFAULT]
[SHEET]
NCOLS=20
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
4=FR_LIV1
5=FR_LIV2
6=FR_LIV3
7=FR_LIV4
8=FR_DESCR
9=FR_UMQTA
10=FR_QTA
11=FR_PREZZO
12=FR_SCONTO
13=FR_PERCPROV
14=FR_IMPFISUN
15=FR_IMPFISSO
16=FR_CODIVA
17=FR_ADDIVA
18=FR_CAUS
19=FR_CODMAGC
20=FR_CODDEPC
Col(0) = FR_CODMAG
Col(1) = FR_CODDEP
Col(2) = FR_CODART
Col(3) = FR_LIV1
Col(4) = FR_LIV2
Col(5) = FR_LIV3
Col(6) = FR_LIV4
Col(7) = FR_DESCR
Col(8) = FR_UMQTA
Col(9) = FR_QTA
Col(10) = FR_PREZZO
Col(11) = FR_SCONTO
Col(12) = FR_PERCPROV
Col(13) = FR_IMPFISUN
Col(14) = FR_IMPFISSO
Col(15) = FR_CODIVA
Col(16) = FR_ADDIVA
Col(17) = FR_CAUS
Col(18) = FR_CODMAGC
Col(19) = FR_CODDEPC
[RIGHE]
NTIPIRIGA=*
[HANDLERS]
NHANDLER=0
1 = F_ORAPART|1
// Handler(0)=F_ORAPART|1
[PROFILOGRUPPO]
101 = S_NASCOSTO

View File

@ -11,7 +11,7 @@ TYPE=Ordine Cliente
// modifica
CAMPICALC=TOTMER|TOTPRE|SPESE|SPESIMB|SPESTRA|SPESINC|BOLLI|IMPONIBILI|IMPOSTE|TOTDOC|SCONTOD|SCONTOT|OMAGGI|TOTPROVV
CALCOLI=*
TOTPROVV =
TOTPROVV =
// modifica
// Procedure utente da chiamare per il documento ( preprocessarle? )
NUOVO=
@ -153,41 +153,36 @@ BLANK = S_DISABILITATO //4000
[DEFAULT]
[SHEET]
NCOLS=26
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
4=FR_LIV1
5=FR_LIV2
6=FR_LIV3
7=FR_LIV4
8=FR_DESCR
9=FR_UMQTA
10=FR_QTA
11=FR_LORDO
12=FR_QTAEVASA
13=FR_RIGAEVASA
14=FR_DATACONS
15=FR_PREZZO
16=FR_SCONTO
17=FR_PERCPROV
18=FR_IMPFISUN
19=FR_IMPFISSO
20=FR_CODIVA
21=FR_ADDIVA
22=FR_CAUS
23=FR_CODMAGC
24=FR_CODDEPC
25=FR_CODCMS
26=FR_FASCMS
Col(0) = FR_CODMAG
Col(1) = FR_CODDEP
Col(2) = FR_CODART
Col(3) = FR_LIV1
Col(4) = FR_LIV2
Col(5) = FR_LIV3
Col(6) = FR_LIV4
Col(7) = FR_DESCR
Col(8) = FR_UMQTA
Col(9) = FR_QTA
Col(10) = FR_LORDO
Col(11) = FR_QTAEVASA
Col(12) = FR_RIGAEVASA
Col(13) = FR_DATACONS
Col(14) = FR_PREZZO
Col(15) = FR_SCONTO
Col(16) = FR_PERCPROV
Col(17) = FR_IMPFISUN
Col(18) = FR_IMPFISSO
Col(19) = FR_CODIVA
Col(20) = FR_ADDIVA
Col(21) = FR_CAUS
Col(22) = FR_CODMAGC
Col(23) = FR_CODDEPC
Col(24) = FR_CODCMS
Col(25) = FR_FASCMS
[RIGHE]
NTIPIRIGA=*
// #include <VEUML.H>
[HANDLERS]
NHANDLER=0
// S_DISABILITATO = F_ORAPART|1
[PROFILOGRUPPO]
101 = S_NASCOSTO
@ -220,7 +215,7 @@ NHANDLER=0
2400 = S_NORMALE
2500 = S_NORMALE
2900 = S_NORMALE
3000 = S_NORMALE
3000 = S_NORMALE
4000 = S_NORMALE
[ORDINEGRUPPI]

View File

@ -157,40 +157,37 @@ DESCRFAS = S_NORMALE //3000
BLANK = S_DISABILITATO //4000
[SHEET]
NCOLS=25
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
4=FR_LIV1
5=FR_LIV2
6=FR_LIV3
7=FR_LIV4
8=FR_DESCR
9=FR_UMQTA
10=FR_QTA
11=FR_QTAEVASA
12=FR_RIGAEVASA
13=FR_DATACONS
14=FR_PREZZO
15=FR_SCONTO
16=FR_PERCPROV
17=FR_IMPFISUN
18=FR_IMPFISSO
19=FR_CODIVA
20=FR_ADDIVA
21=FR_CAUS
22=FR_CODMAGC
23=FR_CODDEPC
24=FR_CODCMS
25=FR_FASCMS
[RIGHE]
NTIPIRIGA=*
Col(0) = FR_CODMAG
Col(1) = FR_CODDEP
Col(2) = FR_CODART
Col(3) = FR_LIV1
Col(4) = FR_LIV2
Col(5) = FR_LIV3
Col(6) = FR_LIV4
Col(7) = FR_DESCR
Col(8) = FR_UMQTA
Col(9) = FR_QTA
Col(10) = FR_QTAEVASA
Col(11) = FR_RIGAEVASA
Col(12) = FR_DATACONS
Col(13) = FR_PREZZO
Col(14) = FR_SCONTO
Col(15) = FR_PERCPROV
Col(16) = FR_IMPFISUN
Col(17) = FR_IMPFISSO
Col(18) = FR_CODIVA
Col(19) = FR_ADDIVA
Col(20) = FR_CAUS
Col(21) = FR_CODMAGC
Col(22) = FR_CODDEPC
Col(23) = FR_CODCMS
Col(24) = FR_FASCMS
[DEFAULT]
[RIGHE]
[HANDLERS]
NHANDLER=0
[PROFILOGRUPPO]
101 = S_NASCOSTO
@ -266,3 +263,4 @@ NGROUPS=33
31=1600
32=2000
33=2900

View File

@ -11,7 +11,7 @@ TYPE=Ordine Cliente
// modifica
CAMPICALC=
CALCOLI=
TOTPROVV =
TOTPROVV =
// modifica
// Procedure utente da chiamare per il documento ( preprocessarle? )
NUOVO=
@ -141,43 +141,38 @@ BLANK = S_DISABILITATO //4000
[DEFAULT]
[SHEET]
NCOLS=19
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
4=FR_LIV1
5=FR_LIV2
6=FR_LIV3
7=FR_LIV4
8=FR_DESCR
9=FR_UMQTA
10=FR_QTA
11=FR_LORDO
12=FR_QTAEVASA
13=FR_RIGAEVASA
14=FR_DATACONS
15=FR_CAUS
16=FR_CODMAGC
17=FR_CODDEPC
18=FR_IMPIANTO
19=FR_LINEA
Col(0) = FR_CODMAG
Col(1) = FR_CODDEP
Col(2) = FR_CODART
Col(3) = FR_LIV1
Col(4) = FR_LIV2
Col(5) = FR_LIV3
Col(6) = FR_LIV4
Col(7) = FR_DESCR
Col(8) = FR_UMQTA
Col(9) = FR_QTA
Col(10) = FR_LORDO
Col(11) = FR_QTAEVASA
Col(12) = FR_RIGAEVASA
Col(13) = FR_DATACONS
Col(14) = FR_CAUS
Col(15) = FR_CODMAGC
Col(16) = FR_CODDEPC
Col(17) = FR_IMPIANTO
Col(18) = FR_LINEA
[RIGHE]
NTIPIRIGA=9
1=01
2=02
3=03
4=04
5=05
6=06
7=07
8=08
9=09
Tipo(0) = 01
Tipo(1) = 02
Tipo(2) = 03
Tipo(3) = 04
Tipo(4) = 05
Tipo(5) = 06
Tipo(6) = 07
Tipo(7) = 08
Tipo(8) = 09
// #include <VEUML.H>
[HANDLERS]
NHANDLER=0
// S_DISABILITATO = F_ORAPART|1
[PROFILOGRUPPO]
101 = S_NASCOSTO
@ -242,4 +237,3 @@ NGROUPS=27
26=2900
27=2000

View File

@ -4,12 +4,18 @@ TOOLBAR "" 0 -2 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
PROMPT -13 -1 ""
END
BUTTON DLG_LINK 10 2
BEGIN
PROMPT -23 -1 "Colle~ga"
PICTURE BMP_LINK
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
PROMPT -33 -1 ""
END
ENDPAGE
@ -33,7 +39,7 @@ BEGIN
PROMPT 1 1 "@bDestinazione"
END
GROUPBOX F_GROUP_S 77 9
GROUPBOX F_GROUP_S 77 10
BEGIN
PROMPT 1 1 "@bSorgente"
END
@ -151,13 +157,12 @@ END
NUMBER F_NDOC_ELAB 6
BEGIN
PROMPT 24 5 "Numero doc. "
USE LF_DOC KEY 2
USE LF_DOC KEY 4
JOIN LF_CLIFO TO LF_DOC INTO TIPOCF==TIPOCF CODCF==CODCF
INPUT TIPOCF F_TIPOCF_ELAB SELECT
INPUT CODCF F_CODCF_ELAB SELECT
INPUT PROVV F_PROVV_ELAB SELECT
INPUT ANNO F_ANNO_ELAB SELECT
INPUT DATADOC F_DATADOC_ELAB
INPUT CODNUM F_CODNUM_ELAB
INPUT NDOC F_NDOC_ELAB
DISPLAY "Num." CODNUM
@ -247,9 +252,23 @@ BEGIN
GROUP GRP_ART
END
CURRENCY F_TOTVAL 18
BEGIN
PROMPT 2 9 "Valore totale "
FLAGS "HD"
GROUP GRP_CHK
END
CURRENCY F_TOTSEL 18
BEGIN
PROMPT 40 9 "Valore selezionato "
FLAGS "HD"
GROUP GRP_CHK
END
TREE F_ROWS -3 -1
BEGIN
PROMPT 0 10 ""
PROMPT 0 11 ""
GROUP GRP_DOC
END

View File

@ -20,10 +20,13 @@
#define F_QTA 220
#define F_NUMDOCRIF_ELAB 227
#define F_CODVAL_ELAB 228
#define F_ROWS 229
#define F_TOTVAL 229
#define F_TOTSEL 230
#define F_ROWS 231
#define GRP_ART 2
#define GRP_DOC 3
#define GRP_CHK 4
#define S_RIGACONSEGNATA 101
#define S_QTARESIDUA 102

View File

@ -245,7 +245,7 @@ public:
void set_defaults(TMask& m) const;
const TString_array& keys_descrs();
const TString_array& sheet_columns();
const TString_array& handlers();
const TString_array& handlers() const;
const TString& mask_name() const { return get("S4");}
const TString& causale() const { return get("S6"); }
@ -694,6 +694,7 @@ public:
bool provvisorio() const { return get_char("PROVV") == 'P'; }
char stato() const { return get_char("STATO"); }
void stato(char s) { put("STATO", s); }
const TString & codice_costo() const { return get(DOC_CODCOSTO);}
const TString & codice_commessa() const { return get(DOC_CODCMS);}
const TString & fase_commessa() const { return get(DOC_FASCMS);}
bool modificabile() const;
@ -811,7 +812,6 @@ protected:
static bool codlist_handler( TMask_field& f, KEY key );
static bool codcont_handler( TMask_field& f, KEY key );
static bool codcamp_handler( TMask_field& f, KEY key );
// static bool controeuro_handler( TMask_field& f, KEY key );
static bool datacambio_handler( TMask_field& f, KEY key );
static bool codval_handler( TMask_field& f, KEY key );
void user_set_handler( int fieldid, int index);

View File

@ -2,6 +2,7 @@
#include "velib.h"
#include "vepriv.h"
#include "verig.h"
#include "../mg/mglib.h"
@ -103,26 +104,28 @@ const TString_array& TTipo_documento::keys_descrs()
TString16 var, tiporiga;
TFilename pn; profile_name(pn);
TConfig prof(pn);
const int numtr = prof.get_int( "NTIPIRIGA", "RIGHE" );
TTipo_riga_documento tr;
TTipo_riga_documento tr;
_keys_descrs.add("");
_keys_descrs.add("");
TToken_string& k = (TToken_string&)_keys_descrs[0];
TToken_string& d = (TToken_string&)_keys_descrs[1];
if (numtr > 0)
{
for ( int i = 1; i <= numtr; i ++ )
{
var.format("%d", i);
tiporiga = prof.get(var, "RIGHE");
tr.read(tiporiga);
k.add(tr.codice());
d.add(tr.descrizione());
}
int i;
for (i = 0; ; i++)
{
const TString16 tiporiga(prof.get("Tipo", "RIGHE", i));
if (tiporiga.empty())
break;
tr.read(tiporiga);
k.add(tr.codice());
d.add(tr.descrizione());
}
else
{
if (i == 0)
{
TTable tri("%TRI");
for (int err = tri.first(); err == NOERR; err = tri.next())
@ -140,34 +143,34 @@ const TString_array& TTipo_documento::sheet_columns()
{
if (_sheet_columns.items() == 0)
{
TString16 col;
TFilename pn; profile_name(pn);
TConfig prof(pn, "SHEET");
int ncols = prof.get_int( "NCOLS", "SHEET" );
for (int i = 1; i <= ncols; i++)
for (int i = 0; i < MAX_COLUMNS; i++)
{
col.format( "%d", i );
_sheet_columns.add(prof.get(col, "SHEET"));
const TString & id = prof.get("Col", NULL, i);
if (atoi(id) == 0)
break;
_sheet_columns.add(id);
}
}
return _sheet_columns;
}
const TString_array& TTipo_documento::handlers()
const TString_array& TTipo_documento::handlers() const
{
if (_handlers.items() == 0)
{
TString16 chiave;
TFilename pn; profile_name(pn);
TConfig prof(pn);
TConfig prof(pn, "HANDLERS");
int numhandler = prof.get_int( "NHANDLER", "HANDLERS" ); // prof
for (int i = 1; i <= numhandler; i++)
for (int i = 0; ; i++)
{
chiave.format("%d", i);
_handlers.add(prof.get(chiave, "HANDLERS"));
const TString & h = prof.get("Handler", NULL, i);
if (h.empty())
break;
((TString_array &)_handlers).add(h);
}
}
return _handlers;

View File

@ -18,6 +18,25 @@ TDate TLista_documenti::num2date(char provv, int anno, const char* codnum, long
return doc.get_date(DOC_DATADOC);
}
bool TLista_documenti::find(char provv, int anno, const char * codnum, long ndoc) const
{
bool found = false;
if (ndoc > 0)
{
const int it = items();
for (int i = 0; !found && i < it; i++)
{
const TDocumento & d = doc(i);
found = ((d.head().get_long(DOC_NDOC) == ndoc) &&
(d.head().get_char(DOC_PROVV) == provv) &&
(d.head().get_int(DOC_ANNO) == anno) &&
(d.head().get(DOC_CODNUM) == codnum));
}
}
return found;
}
int TLista_documenti::read(char provv, char tipocf, long clifo, int anno,
TToken_string& tipidoc, TToken_string& statidoc,
const TDate& dd, const TDate& ad,

View File

@ -19,6 +19,7 @@ protected:
TDate num2date(char provv, int anno, const char* codnum, long num) const;
public:
bool find(char provv, int anno, const char * codnum, long ndoc) const;
int read(char provv, char tipo, long clifo, int anno,
TToken_string& tipidoc, TToken_string& statidoc,
const TDate& dd, const TDate& ad,

View File

@ -1,5 +1,6 @@
#include <automask.h>
#include <dongle.h>
#include <execp.h>
#include <modaut.h>
#include <sheet.h>
#include <smartcard.h>
@ -7,6 +8,7 @@
#include <tree.h>
#include <postman.h>
#include <urldefid.h>
#include <utility.h>
#include "velib04.h"
#include "vepriv.h"
@ -81,8 +83,9 @@ TDocumento_mask::TDocumento_mask(const char* td)
listbox.replace_items(keys, descrs);
// Controlla se deve generare la pagina di analitica
if (dongle().active(CAAUT) || dongle().active(CMAUT))
if (dongle().active(CAAUT) || dongle().active(CMAUT))
insert_anal_page();
configura_sheet(*_sheet);
@ -1017,9 +1020,15 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga)
row_set_handler( *m, riga.get_int( 0 ), riga.get_int( 1 ) );
}
m->set_handler( FR_QTA, qta_handler );
m->set_handler(FR_TIPORIGA, tipo_riga_handler);
m->set_handler( FR_QTA, qta_handler );
m->set_handler( FR_UMQTA, um_handler );
m->set_handler( FR_DATACONS, dcons_handler);
TList_field & htr = lfield(F_LBTIPORIGA);
const TString codes(htr.get_codes());
const TString values(htr.get_values());
m->lfield(FR_TIPORIGA).replace_items(codes, values);
const int pos = m->id2pos(FR_CODART);
if (pos >= 0)
@ -1162,7 +1171,7 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga)
f.reset_driver();
f.add_driver(-F_CODVAL);
}
return m;
}
@ -1569,6 +1578,10 @@ class TDocument_tree : public TBidirectional_tree
TRelation* _relation;
TCursor* _cursor;
TToken_string _curnode;
bool _multiple_selection;
TAssoc_array _selected_docs;
TString _selected;
protected:
virtual void node2id(const TObject* node, TString& id) const;
@ -1579,6 +1592,13 @@ protected:
void append_custom_fields(const TTipo_documento& tipo, const TRectype& rec, TString& str) const;
public:
void multiple_selection(bool on);
bool multiple_selection() const { return _multiple_selection;}
bool node_selected(const TObject* node = NULL) const;
void select_node(const TObject* node = NULL, bool on = true);
real select_doc(long numdoc);
void build_doc_list(TLista_documenti & docs);
void unselect_node(const TObject* node) { select_node(node, false);}
virtual bool goto_root();
virtual bool goto_firstson();
virtual bool goto_rbrother();
@ -1592,10 +1612,14 @@ public:
virtual TObject* curr_node() const { return &(TToken_string&)_curnode; }
virtual bool get_description(TString& str) const;
virtual TImage* image(bool selected) const;
void select(TString & id) { _selected = id;}
const TString & selected() const { return _selected;}
const TRectype& testata() const;
const TRectype& riga() const;
const TRectype& record() const;
const real totale_doc() const { TDocumento d(testata()); return d.totale_doc();}
void set_cursor(char tipocf, long codcf, int anno, const char* filter, FILTERFUNCTION ff = NULL);
TCursor* get_cursor() { return _cursor; }
@ -1648,6 +1672,83 @@ bool TDocument_tree::on_row() const
return me._curnode.get_int(1) > 0;
}
void TDocument_tree::multiple_selection(bool on)
{
_multiple_selection = on;
if (!_multiple_selection)
_selected_docs.destroy();
}
bool TDocument_tree::node_selected(const TObject* node) const
{
TToken_string id;
if (node == NULL)
node = curr_node();
node2id(node, id);
id = id.get(0);
return _selected_docs.is_key(id);
}
void TDocument_tree::select_node(const TObject* node, bool on)
{
TToken_string id;
if (node == NULL)
node = curr_node();
node2id(node, id);
id = id.get(0);
if (on)
_selected_docs.add(id);
else
_selected_docs.remove(id);
select(id);
}
bool find_doc(TTree& tree, void* jolly, word flags)
{
TDocument_tree & t = (TDocument_tree &) tree;
if (!t.node_selected())
{
t.select_node();
real & val = *((real *) jolly);
val = t.totale_doc();
return true;
}
return false;
}
real TDocument_tree::select_doc(long numdoc)
{
real val;
if (goto_root())
scan_depth_first(find_doc, (void *) &val, SCAN_PRE_ORDER | SCAN_IGNORING_LEAVES);
return val;
}
bool add_to_list(TTree& tree, void* jolly, word flags)
{
TDocument_tree & t = (TDocument_tree &) tree;
if (t.node_selected())
{
TLista_documenti & docs = *((TLista_documenti *) jolly);
docs.add(new TDocumento(t.testata()));
}
return false;
}
void TDocument_tree::build_doc_list(TLista_documenti & docs)
{
if (goto_root())
scan_depth_first(add_to_list, (void *) &docs, SCAN_PRE_ORDER | SCAN_IGNORING_LEAVES);
}
bool TDocument_tree::goto_root()
{
const bool ok = _cursor != NULL && _cursor->items()>0;
@ -1817,6 +1918,19 @@ TImage* TDocument_tree::image(bool selected) const
if (rec.get_bool(RDOC_RIGAEVASA))
return get_res_image(BMP_STOP);
}
else
if (multiple_selection())
{
const bool sel = node_selected();
if (sel)
{
if (selected)
return get_res_image(BMP_DIRDNSEL);
else
return get_res_image(BMP_DIRSEL);
}
}
return TTree::image(selected);
}
@ -1902,7 +2016,8 @@ void TDocument_tree::set_cursor(char tipocf, long codcf, int anno, const char* f
}
TDocument_tree::TDocument_tree()
: _relation(NULL), _cursor(NULL)
: _relation(NULL), _cursor(NULL), _multiple_selection(false)
{
}
@ -1923,6 +2038,7 @@ class TElabora_mask : public TAutomask
TDocumento_mask* _main;
TLista_elaborazioni _elab;
TDocument_tree _tree;
int _check_fld;
TElaborazione* _last_elab;
@ -1962,6 +2078,22 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
if (e == fe_modify)
update_ndoc_filter();
break;
case F_NDOC_ELAB:
if (e == fe_init || e == fe_modify)
{
const long ndoc = atol(o.get());
if (ndoc > 0L)
{
real val = _tree.select_doc(ndoc);
if (val != ZERO)
{
val += o.mask().get_real(F_TOTSEL);
o.mask().set(F_TOTSEL, val);
}
}
}
break;
case F_TYPE:
if (e == fe_init || e == fe_modify)
{
@ -1974,8 +2106,34 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
set(F_TYPE, "");
}
update_ndoc_filter(TRUE);
const bool is_search = o.get().empty() || field(F_CODCF_ELAB).empty();
o.mask().field(F_NDOC_ELAB).check_type(is_search ? CHECK_SEARCH : CHECK_REQUIRED);
const bool add_to_doc = o.get().not_empty();
const bool is_search = !add_to_doc || field(F_CODCF_ELAB).empty();
o.mask().field(F_NDOC_ELAB).check_type(is_search ? CHECK_SEARCH : CHECK_NORMAL);
_tree.multiple_selection(add_to_doc);
bool check_tot = false;
if (add_to_doc)
{
if (_check_fld < -1)
{
_check_fld = -1;
const TString_array& handlers = _main->doc().tipo().handlers();
const int items = handlers.items();
for (int i = 0; i < items; i ++ )
{
TToken_string& riga = (TToken_string&) handlers[i];
if (riga.get_int(1) == 2)
_check_fld = riga.get_int(0);
}
}
check_tot = _check_fld >= 0;
}
if (!add_to_doc)
o.mask().set(F_TOTSEL, "");
o.mask().show(-GRP_CHK, check_tot);
if (check_tot)
o.mask().set(F_TOTVAL, _main->get(_check_fld));
}
break;
case F_STATODOC_ELAB:
@ -1998,38 +2156,83 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
if (e == fe_button)
docrif_search();
break;
case F_NDOC_ELAB:
if ((e == fe_modify || e == fe_close) && o.check_type() == CHECK_SEARCH && !o.empty())
{
TToken_string key;
key.add("D"); key.add(get(F_ANNO_ELAB));
key.add(get(F_CODNUM_ELAB)); key.add(o.get());
const TRectype& rec = cache().get(LF_DOC, key);
bool ok = !rec.empty(); // Verifica esistenza documento
if (ok)
{
TCursor* c = _tree.get_cursor();
c->curr() = rec;
ok = c->test(_isequal) == NOERR; // Verifica compatibilità documento
}
if (!ok)
return error_box(((TEdit_field&)o).get_warning());
}
break;
case F_ROWS:
if (e == fe_modify && is_running())
if (e == fe_modify)
{
TCursor* c = _tree.get_cursor();
if (c != NULL && c->items() > 0)
{
const TRectype& head = _tree.testata();
set(F_DATADOC_ELAB, head.get(DOC_DATADOC)); // Anch'essa nella chiave 2!
set(F_ANNO_ELAB, head.get(DOC_ANNO));
set(F_CODNUM_ELAB, head.get(DOC_CODNUM), 2); // Check but not hit
set(F_NDOC_ELAB, head.get(DOC_NDOC));
}
TString id;
_tree.curr_id(id);
_tree.select(id);
if (is_running() && !_tree.multiple_selection())
{
TCursor* c = _tree.get_cursor();
if (c != NULL && c->items() > 0)
{
const TRectype& head = _tree.testata();
set(F_DATADOC_ELAB, head.get(DOC_DATADOC)); // Anch'essa nella chiave 2!
set(F_ANNO_ELAB, head.get(DOC_ANNO));
set(F_CODNUM_ELAB, head.get(DOC_CODNUM), 2); // Check but not hit
set(F_NDOC_ELAB, head.get(DOC_NDOC));
}
}
}
else
if (e == fe_select)
{
if (_tree.multiple_selection())
{
const bool on = !_tree.node_selected();
_tree.select_node(NULL, on);
if (_check_fld >= 0)
{
real val = get_real(F_TOTSEL);
if (on)
val += _tree.totale_doc();
else
{
val -= _tree.totale_doc();
if (_tree.testata().get_long(DOC_NDOC) == o.mask().get_long(F_NDOC_ELAB))
o.mask().set(F_NDOC_ELAB, "");
}
set(F_TOTSEL, val);
}
}
}
break;
case DLG_LINK:
if (e == fe_button)
{
_tree.goto_node(_tree.selected());
const TRectype & rec = _tree.testata();
if (!rec.empty())
{
TFilename tempfile;
tempfile.temp("ve0");
tempfile.ext("ini");
{
TConfig configfile(tempfile);
configfile.set("Action", "Modify", "Transaction");
configfile.set("NDOC", rec.get(DOC_NDOC), "33");
configfile.set(DOC_PROVV, rec.get(DOC_PROVV), "33");
configfile.set(DOC_ANNO, rec.get(DOC_ANNO), "33");
configfile.set(DOC_CODNUM, rec.get(DOC_CODNUM), "33");
}
TString commandline;
commandline.format("ve0 -0 /i%s",(const char*)tempfile);
TExternal_app ve(commandline);
ve.run();
remove_file(tempfile);
}
}
break;
default:
break;
}
@ -2046,15 +2249,10 @@ int TElabora_mask::update_list()
const bool from_elab = !get_bool(F_TYPE);
int items = 0;
bool agg_test = FALSE;
if (from_elab)
items = _elab.select(elabs, tipo, stato,"","") ;
else
{
items = _elab.select(elabs, tipo_elab, stato_elab, tipo, stato);
agg_test = _main->sfield(F_SHEET).items() == 0;
}
set(F_UPDATE_HEADER, agg_test ? "X" : "");
TList_field & f = (TList_field &) field(F_ELAB);
TToken_string codes;
@ -2179,17 +2377,27 @@ bool TElabora_mask::elabora()
else
{
out.add(app_doc);
in.add(d);
_tree.build_doc_list(in);
char provv = get(F_PROVV_ELAB)[0];
int anno = get_int(F_ANNO_ELAB);
TString16 codnum(get(F_CODNUM_ELAB));
long ndoc = get_long(F_NDOC_ELAB);
if (ndoc > 0L && !in.find(provv, anno, codnum, ndoc))
{
TDocumento* d = new TDocumento(provv, anno, codnum, ndoc);
in.add(d);
}
if (e->elabora(in, out, TDate(TODAY), TRUE))
{
if (out[0] != app_doc)
{
out.rewrite();
app_doc = out[0];
app_doc.read(out[0].head());
update_mask = TRUE;
}
if (d != in[0])
in.rewrite();
}
in.rewrite();
}
const TString8 num_in = e->codice_numerazione_iniziale();
set(F_CODNUM_ELAB, num_in);
@ -2297,6 +2505,8 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
{
if (aggiungi_doc_att)
{
const bool agg_test = e->aggiorna_testata_se_vuoto() && _main->sfield(F_SHEET).items() == 0;
set(F_UPDATE_HEADER, agg_test ? "X" : "");
const TString8 num_in = e->codice_numerazione_iniziale();
if (elab_changed)
{
@ -2382,6 +2592,7 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
const TString4 tipo_fin(e->tipo_finale());
const TString4 stato_fin(e->stato_finale());
set(F_UPDATE_HEADER, "");
filter << "&&";
if (stato_fin != "0")
filter << '(';
@ -2502,7 +2713,7 @@ void TElabora_mask::docrif_search()
}
TElabora_mask::TElabora_mask(TDocumento_mask& main_mask)
: TAutomask("ve0100b"), _main(&main_mask), _last_elab(NULL)
: TAutomask("ve0100b"), _main(&main_mask), _last_elab(NULL), _check_fld(-883)
{
_myself = this;
@ -2543,6 +2754,8 @@ bool TDocumento_mask::elabora_handler( TMask_field& f, KEY key )
m.ss_notify(ss,i,K_ENTER);
}
}
if (!m.get_bool(F_TYPE)) // non aggiunge al documento attuale
break;
}
if (update_mask)
{
@ -2555,7 +2768,6 @@ bool TDocumento_mask::elabora_handler( TMask_field& f, KEY key )
f.check(STARTING_CHECK);
}
for (int i = m.fields() - 1; i >= 0; i--)
m.fld(i).set_dirty(FALSE);
}
delete selection;

View File

@ -91,7 +91,7 @@ bool totdoc_hndl( TMask_field& field, KEY key )
const real totdoc_check(field.get());
if (totdoc != totdoc_check)
if (m.doc().physical_rows() > 0 && totdoc != totdoc_check)
{
const TString16 tchk(totdoc_check.string());
@ -505,7 +505,48 @@ bool dcons_handler( TMask_field& f, KEY key )
return TRUE;
}
bool tipo_riga_handler(TMask_field& f, KEY key)
{
if (key == K_SPACE && f.focusdirty())
{
TMask & row_mask = f.mask();
TVariable_sheet_field * sf = (TVariable_sheet_field *) row_mask.get_sheet();
if (sf != NULL)
{
TDocumento_mask & docmask = (TDocumento_mask&)sf->mask();
if (docmask.is_running())
{
const int curr_row = sf->selected();
TToken_string & row = sf->row(curr_row);
const int col = sf->cid2index(FR_TIPORIGA);
const TString16 old_tipo_riga = row.get(col);
const TString16 tipo_riga = f.get();
if (!row_mask.is_running())
{
if (old_tipo_riga != tipo_riga)
{
row.add(tipo_riga, col);
docmask.doc()[curr_row + 1].set_tipo(tipo_riga);
TMask * rm = docmask.riga_mask(curr_row);
sf->post_insert(curr_row);
sf->check_row(curr_row);
sf->force_update(curr_row);
}
}
else
if (old_tipo_riga != tipo_riga)
{
f.set(old_tipo_riga);
return error_box("Impossibile cambiare il tipo nella maschera di riga");
}
}
}
}
return true;
}
bool codmag_handler( TMask_field& f, KEY key )
{
// if (f.to_check(key, TRUE))

View File

@ -14,6 +14,7 @@ bool dcons_handler( TMask_field& f, KEY key );
bool iva_handler( TMask_field& f, KEY key );
void sppr_calc(const TRectype& rec, const TString& valuta_doc, const real& cambio, real& prezzo, exchange_type controeuro);
void row_set_handler(TMask& m, const int field, const int index);
bool tipo_riga_handler(TMask_field& f, KEY key);
bool codmag_handler(TMask_field& f, KEY key);
bool codmag_coll_handler(TMask_field& f, KEY key);
bool codart_handler(TMask_field& f, KEY key);

View File

@ -46,27 +46,12 @@ BEGIN
PROMPT 2 1 "Lordo "
END
STRING FR_TIPORIGA 2
LIST FR_TIPORIGA 2 50
BEGIN
PROMPT 2 2 "Tipo riga "
USE %TRI
IN CODTAB FR_TIPORIGA
OU FR_DESTIPORIGA S0
CHECKTYPE REQUIRED
FLAGS "DG"
FIELD TIPORIGA
END
#ifdef FULL_SCREEN
STRING FR_DESTIPORIGA 50
#else
STRING FR_DESTIPORIGA 25
#endif
BEGIN
PROMPT 22 2 ""
FLAGS "D"
END
IFDEF(FLD_CODMAG)
STRING FR_CODMAG 3
BEGIN