Cominciata nuova stesura del programma di fatturazione bolle e corrette le tabelle usate.
git-svn-id: svn://10.65.10.50/trunk@3339 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ce6869e681
commit
07bcd60df8
@ -2,7 +2,8 @@
|
|||||||
#define F_CODICE 101
|
#define F_CODICE 101
|
||||||
#define F_DESCR 102
|
#define F_DESCR 102
|
||||||
#define F_TIPO 103
|
#define F_TIPO 103
|
||||||
#define F_CODNUM 104
|
#define F_CODNUM_I 104
|
||||||
|
#define F_CODNUM_F 105
|
||||||
#define F_TIPODOC_I_1 111
|
#define F_TIPODOC_I_1 111
|
||||||
#define F_STATO_I_DOC_I_1 121
|
#define F_STATO_I_DOC_I_1 121
|
||||||
#define F_STATO_F_DOC_I 131
|
#define F_STATO_F_DOC_I 131
|
||||||
@ -16,3 +17,8 @@
|
|||||||
#define F_STATO_I_DOC_I_5 125
|
#define F_STATO_I_DOC_I_5 125
|
||||||
#define F_TIPODOC_F 140
|
#define F_TIPODOC_F 140
|
||||||
#define F_STATO_F_DOC_F 141
|
#define F_STATO_F_DOC_F 141
|
||||||
|
#define F_DOC1 151
|
||||||
|
#define F_DOC2 152
|
||||||
|
#define F_DOC3 153
|
||||||
|
#define F_DOC4 154
|
||||||
|
#define F_DOC5 155
|
||||||
|
110
ve/batbeld.uml
110
ve/batbeld.uml
@ -26,7 +26,6 @@ BEGIN
|
|||||||
OUTPUT F_DESCR S0
|
OUTPUT F_DESCR S0
|
||||||
KEY 1
|
KEY 1
|
||||||
HELP "Codice dell'elaborazione differita da eseguire"
|
HELP "Codice dell'elaborazione differita da eseguire"
|
||||||
MESSAGE ENABLE, F_PROGRAMMA
|
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_DESCR 50
|
STRING F_DESCR 50
|
||||||
@ -53,27 +52,78 @@ BEGIN
|
|||||||
ITEM "TC|Trasferimento a contabilita'"
|
ITEM "TC|Trasferimento a contabilita'"
|
||||||
END
|
END
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 78 5
|
GROUPBOX DLG_NULL 78 6
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 6 "@bDocumento originale"
|
PROMPT 1 6 "@bDocumento originale"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
STRING F_CODNUM_I 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 7 "Codice numerazione "
|
||||||
|
FLAGS "U"
|
||||||
|
FIELD S5
|
||||||
|
USE NUM
|
||||||
|
INPUT CODTAB F_CODNUM_I
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@50" S0
|
||||||
|
OUTPUT F_CODNUM_I CODTAB
|
||||||
|
OUTPUT F_DOC1 S2[1,4]
|
||||||
|
OUTPUT F_DOC2 S2[5,8]
|
||||||
|
OUTPUT F_DOC3 S2[9,12]
|
||||||
|
OUTPUT F_DOC4 S2[13,16]
|
||||||
|
OUTPUT F_DOC5 S2[17,20]
|
||||||
|
CHECKTYPE NORMAL
|
||||||
|
WARNING "Numerazione errata"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DOC1 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 30 7 ""
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DOC2 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 36 7 ""
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DOC3 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 42 7 ""
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DOC4 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 48 7 ""
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DOC5 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 54 7 ""
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
STRING F_TIPODOC_I_1 4
|
STRING F_TIPODOC_I_1 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 7 "Tipo documento "
|
PROMPT 2 8 "Tipo documento "
|
||||||
|
FLAGS "U"
|
||||||
FIELD S2[1,4]
|
FIELD S2[1,4]
|
||||||
CHECKTYPE REQUIRED
|
|
||||||
WARNING "E' necessario specificare un valore"
|
|
||||||
USE %TIP
|
USE %TIP
|
||||||
INPUT CODTAB F_TIPODOC_I_1
|
INPUT CODTAB F_TIPODOC_I_1
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
DISPLAY "Tipo documento@50" S0
|
DISPLAY "Tipo documento@50" S0
|
||||||
OUTPUT F_TIPODOC_I_1 CODTAB
|
OUTPUT F_TIPODOC_I_1 CODTAB
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
STR_EXPR {(#F_CODNUM_I=="")||(#THIS_FIELD==#F_DOC1)||(#THIS_FIELD==#F_DOC2)||(#THIS_FIELD==#F_DOC3)||(#THIS_FIELD==#F_DOC4)||(#THIS_FIELD==#F_DOC5)}
|
||||||
|
WARNING "E' necessario specificare un valore valido e previsto dalla numerazione"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_STATO_I_DOC_I_1 1
|
STRING F_STATO_I_DOC_I_1 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 8 "Stato iniziale "
|
PROMPT 2 9 "Stato iniziale "
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
FIELD S7[1,1]
|
FIELD S7[1,1]
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
@ -82,7 +132,7 @@ END
|
|||||||
|
|
||||||
STRING F_STATO_F_DOC_I 1
|
STRING F_STATO_F_DOC_I 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 9 "Stato finale "
|
PROMPT 2 10 "Stato finale "
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
FIELD S4
|
FIELD S4
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
@ -91,19 +141,21 @@ END
|
|||||||
|
|
||||||
STRING F_TIPODOC_I_2 4
|
STRING F_TIPODOC_I_2 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 30 7 ""
|
PROMPT 30 8 ""
|
||||||
|
FLAGS "U"
|
||||||
FIELD S2[5,8]
|
FIELD S2[5,8]
|
||||||
WARNING "E' necessario specificare un valore"
|
|
||||||
COPY USE F_TIPODOC_I_1
|
COPY USE F_TIPODOC_I_1
|
||||||
INPUT CODTAB F_TIPODOC_I_2
|
INPUT CODTAB F_TIPODOC_I_2
|
||||||
COPY DISPLAY F_TIPODOC_I_1
|
COPY DISPLAY F_TIPODOC_I_1
|
||||||
OUTPUT F_TIPODOC_I_2 CODTAB
|
OUTPUT F_TIPODOC_I_2 CODTAB
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
|
STR_EXPR {(#F_CODNUM_I=="")||(#THIS_FIELD==#F_DOC1)||(#THIS_FIELD==#F_DOC2)||(#THIS_FIELD==#F_DOC3)||(#THIS_FIELD==#F_DOC4)||(#THIS_FIELD==#F_DOC5)}
|
||||||
|
WARNING "E' necessario specificare un valore valido e previsto dalla numerazione"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_STATO_I_DOC_I_2 1
|
STRING F_STATO_I_DOC_I_2 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 30 8 ""
|
PROMPT 30 9 ""
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
FIELD S7[2,2]
|
FIELD S7[2,2]
|
||||||
WARNING "E' necessario specificare un valore"
|
WARNING "E' necessario specificare un valore"
|
||||||
@ -112,19 +164,21 @@ END
|
|||||||
|
|
||||||
STRING F_TIPODOC_I_3 4
|
STRING F_TIPODOC_I_3 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 39 7 ""
|
PROMPT 39 8 ""
|
||||||
|
FLAGS "U"
|
||||||
FIELD S2[9,12]
|
FIELD S2[9,12]
|
||||||
WARNING "E' necessario specificare un valore"
|
|
||||||
COPY USE F_TIPODOC_I_1
|
COPY USE F_TIPODOC_I_1
|
||||||
INPUT CODTAB F_TIPODOC_I_3
|
INPUT CODTAB F_TIPODOC_I_3
|
||||||
COPY DISPLAY F_TIPODOC_I_1
|
COPY DISPLAY F_TIPODOC_I_1
|
||||||
OUTPUT F_TIPODOC_I_3 CODTAB
|
OUTPUT F_TIPODOC_I_3 CODTAB
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
|
STR_EXPR {(#F_CODNUM_I=="")||(#THIS_FIELD==#F_DOC1)||(#THIS_FIELD==#F_DOC2)||(#THIS_FIELD==#F_DOC3)||(#THIS_FIELD==#F_DOC4)||(#THIS_FIELD==#F_DOC5)}
|
||||||
|
WARNING "E' necessario specificare un valore valido e previsto dalla numerazione"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_STATO_I_DOC_I_3 1
|
STRING F_STATO_I_DOC_I_3 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 39 8 ""
|
PROMPT 39 9 ""
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
FIELD S7[3,3]
|
FIELD S7[3,3]
|
||||||
WARNING "E' necessario specificare un valore"
|
WARNING "E' necessario specificare un valore"
|
||||||
@ -133,19 +187,21 @@ END
|
|||||||
|
|
||||||
STRING F_TIPODOC_I_4 4
|
STRING F_TIPODOC_I_4 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 48 7 ""
|
PROMPT 48 8 ""
|
||||||
|
FLAGS "U"
|
||||||
FIELD S2[13,15]
|
FIELD S2[13,15]
|
||||||
WARNING "E' necessario specificare un valore"
|
|
||||||
COPY USE F_TIPODOC_I_1
|
COPY USE F_TIPODOC_I_1
|
||||||
INPUT CODTAB F_TIPODOC_I_4
|
INPUT CODTAB F_TIPODOC_I_4
|
||||||
COPY DISPLAY F_TIPODOC_I_1
|
COPY DISPLAY F_TIPODOC_I_1
|
||||||
OUTPUT F_TIPODOC_I_4 CODTAB
|
OUTPUT F_TIPODOC_I_4 CODTAB
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
|
STR_EXPR {(#F_CODNUM_I=="")||(#THIS_FIELD==#F_DOC1)||(#THIS_FIELD==#F_DOC2)||(#THIS_FIELD==#F_DOC3)||(#THIS_FIELD==#F_DOC4)||(#THIS_FIELD==#F_DOC5)}
|
||||||
|
WARNING "E' necessario specificare un valore valido e previsto dalla numerazione"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_STATO_I_DOC_I_4 1
|
STRING F_STATO_I_DOC_I_4 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 48 8 ""
|
PROMPT 48 9 ""
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
FIELD S7[4,4]
|
FIELD S7[4,4]
|
||||||
WARNING "E' necessario specificare un valore"
|
WARNING "E' necessario specificare un valore"
|
||||||
@ -154,19 +210,21 @@ END
|
|||||||
|
|
||||||
STRING F_TIPODOC_I_5 4
|
STRING F_TIPODOC_I_5 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 57 7 ""
|
PROMPT 57 8 ""
|
||||||
|
FLAGS "U"
|
||||||
FIELD S2[16,19]
|
FIELD S2[16,19]
|
||||||
WARNING "E' necessario specificare un valore"
|
|
||||||
COPY USE F_TIPODOC_I_1
|
COPY USE F_TIPODOC_I_1
|
||||||
INPUT CODTAB F_TIPODOC_I_4
|
INPUT CODTAB F_TIPODOC_I_4
|
||||||
COPY DISPLAY F_TIPODOC_I_1
|
COPY DISPLAY F_TIPODOC_I_1
|
||||||
OUTPUT F_TIPODOC_I_4 CODTAB
|
OUTPUT F_TIPODOC_I_4 CODTAB
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
|
STR_EXPR {(#F_CODNUM_I=="")||(#THIS_FIELD==#F_DOC1)||(#THIS_FIELD==#F_DOC2)||(#THIS_FIELD==#F_DOC3)||(#THIS_FIELD==#F_DOC4)||(#THIS_FIELD==#F_DOC5)}
|
||||||
|
WARNING "E' necessario specificare un valore valido e previsto dalla numerazione"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_STATO_I_DOC_I_5 1
|
STRING F_STATO_I_DOC_I_5 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 57 8 ""
|
PROMPT 57 9 ""
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
FIELD S7[5,5]
|
FIELD S7[5,5]
|
||||||
WARNING "E' necessario specificare un valore"
|
WARNING "E' necessario specificare un valore"
|
||||||
@ -175,12 +233,12 @@ END
|
|||||||
|
|
||||||
GROUPBOX DLG_NULL 78 5
|
GROUPBOX DLG_NULL 78 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 11 "@bDocumento finale"
|
PROMPT 1 12 "@bDocumento finale"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_TIPODOC_F 4
|
STRING F_TIPODOC_F 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 12 "Tipo documento "
|
PROMPT 2 13 "Tipo documento "
|
||||||
FIELD S8
|
FIELD S8
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
WARNING "E' necessario specificare un valore"
|
WARNING "E' necessario specificare un valore"
|
||||||
@ -192,22 +250,22 @@ END
|
|||||||
|
|
||||||
STRING F_STATO_F_DOC_F 1
|
STRING F_STATO_F_DOC_F 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 13 "Stato finale "
|
PROMPT 2 14 "Stato finale "
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
FIELD S9
|
FIELD S9
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
WARNING "E' necessario specificare uno stato finale"
|
WARNING "E' necessario specificare uno stato finale"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CODNUM 4
|
STRING F_CODNUM_F 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 14 "Codice numerazione "
|
PROMPT 2 15 "Codice numerazione "
|
||||||
FIELD S5
|
FIELD S5
|
||||||
USE NUM
|
USE NUM
|
||||||
INPUT CODTAB F_CODNUM
|
INPUT CODTAB F_CODNUM_F
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
DISPLAY "Descrizione@50" S0
|
DISPLAY "Descrizione@50" S0
|
||||||
OUTPUT F_CODNUM CODTAB
|
OUTPUT F_CODNUM_F CODTAB
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
WARNING "E' necessario specificare un codice di numerazione"
|
WARNING "E' necessario specificare un codice di numerazione"
|
||||||
END
|
END
|
||||||
|
116
ve/batbnum.uml
116
ve/batbnum.uml
@ -77,7 +77,7 @@ PAGE "Numerazione documenti" -1 -1 60 14
|
|||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
|
||||||
PAGE "Numerazioni documenti pag.2" -1 -1 60 14
|
PAGE "Tipi documento validi" -1 -1 60 14
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 64 15
|
GROUPBOX DLG_NULL 64 15
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -112,7 +112,7 @@ PAGE "Numerazioni documenti pag.2" -1 -1 60 14
|
|||||||
|
|
||||||
STRING F_TIPODOC2 4
|
STRING F_TIPODOC2 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 5 ""
|
PROMPT 2 6 ""
|
||||||
USE %TIP
|
USE %TIP
|
||||||
INPUT CODTAB F_TIPODOC2
|
INPUT CODTAB F_TIPODOC2
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
@ -126,13 +126,13 @@ PAGE "Numerazioni documenti pag.2" -1 -1 60 14
|
|||||||
|
|
||||||
STRING F_DESDOC2 40
|
STRING F_DESDOC2 40
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 12 5 ""
|
PROMPT 12 6 ""
|
||||||
FLAG "D"
|
FLAG "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_TIPODOC3 4
|
STRING F_TIPODOC3 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 6 ""
|
PROMPT 2 8 ""
|
||||||
USE %TIP
|
USE %TIP
|
||||||
INPUT CODTAB F_TIPODOC3
|
INPUT CODTAB F_TIPODOC3
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
@ -146,13 +146,13 @@ PAGE "Numerazioni documenti pag.2" -1 -1 60 14
|
|||||||
|
|
||||||
STRING F_DESDOC3 40
|
STRING F_DESDOC3 40
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 12 6 ""
|
PROMPT 12 8 ""
|
||||||
FLAG "D"
|
FLAG "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_TIPODOC4 4
|
STRING F_TIPODOC4 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 7 ""
|
PROMPT 2 10 ""
|
||||||
USE %TIP
|
USE %TIP
|
||||||
INPUT CODTAB F_TIPODOC4
|
INPUT CODTAB F_TIPODOC4
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
@ -166,13 +166,13 @@ PAGE "Numerazioni documenti pag.2" -1 -1 60 14
|
|||||||
|
|
||||||
STRING F_DESDOC4 40
|
STRING F_DESDOC4 40
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 12 7 ""
|
PROMPT 12 10 ""
|
||||||
FLAG "D"
|
FLAG "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_TIPODOC5 4
|
STRING F_TIPODOC5 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 8 ""
|
PROMPT 2 12 ""
|
||||||
USE %TIP
|
USE %TIP
|
||||||
INPUT CODTAB F_TIPODOC5
|
INPUT CODTAB F_TIPODOC5
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
@ -185,109 +185,9 @@ PAGE "Numerazioni documenti pag.2" -1 -1 60 14
|
|||||||
END
|
END
|
||||||
|
|
||||||
STRING F_DESDOC5 40
|
STRING F_DESDOC5 40
|
||||||
BEGIN
|
|
||||||
PROMPT 12 8 ""
|
|
||||||
FLAG "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_TIPODOC6 4
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 9 ""
|
|
||||||
USE %TIP
|
|
||||||
INPUT CODTAB F_TIPODOC6
|
|
||||||
DISPLAY "Codice" CODTAB
|
|
||||||
DISPLAY "Descrizione@50" S0
|
|
||||||
OUTPUT F_TIPODOC6 CODTAB
|
|
||||||
OUTPUT F_DESDOC6 S0
|
|
||||||
HELP "Tipo di documento 6"
|
|
||||||
FIELD S2[21,24]
|
|
||||||
CHECKTYPE NORMAL
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_DESDOC6 40
|
|
||||||
BEGIN
|
|
||||||
PROMPT 12 9 ""
|
|
||||||
FLAG "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_TIPODOC7 4
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 10 ""
|
|
||||||
USE %TIP
|
|
||||||
INPUT CODTAB F_TIPODOC7
|
|
||||||
DISPLAY "Codice" CODTAB
|
|
||||||
DISPLAY "Descrizione@50" S0
|
|
||||||
OUTPUT F_TIPODOC7 CODTAB
|
|
||||||
OUTPUT F_DESDOC7 S0
|
|
||||||
HELP "Tipo di documento 7"
|
|
||||||
FIELD S2[25,28]
|
|
||||||
CHECKTYPE NORMAL
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_DESDOC7 40
|
|
||||||
BEGIN
|
|
||||||
PROMPT 12 10 ""
|
|
||||||
FLAG "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_TIPODOC8 4
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 11 ""
|
|
||||||
USE %TIP
|
|
||||||
INPUT CODTAB F_TIPODOC8
|
|
||||||
DISPLAY "Codice" CODTAB
|
|
||||||
DISPLAY "Descrizione@50" S0
|
|
||||||
OUTPUT F_TIPODOC8 CODTAB
|
|
||||||
OUTPUT F_DESDOC8 S0
|
|
||||||
HELP "Tipo di documento 8"
|
|
||||||
FIELD S2[29,32]
|
|
||||||
CHECKTYPE NORMAL
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_DESDOC8 40
|
|
||||||
BEGIN
|
|
||||||
PROMPT 12 11 ""
|
|
||||||
FLAG "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_TIPODOC9 4
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 12 ""
|
|
||||||
USE %TIP
|
|
||||||
INPUT CODTAB F_TIPODOC9
|
|
||||||
DISPLAY "Codice" CODTAB
|
|
||||||
DISPLAY "Descrizione@50" S0
|
|
||||||
OUTPUT F_TIPODOC9 CODTAB
|
|
||||||
OUTPUT F_DESDOC9 S0
|
|
||||||
HELP "Tipo di documento 9"
|
|
||||||
FIELD S2[32,36]
|
|
||||||
CHECKTYPE NORMAL
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_DESDOC9 40
|
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 12 12 ""
|
PROMPT 12 12 ""
|
||||||
FLAG "D"
|
FLAG "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_TIPODOC10 4
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 13 ""
|
|
||||||
USE %TIP
|
|
||||||
INPUT CODTAB F_TIPODOC10
|
|
||||||
DISPLAY "Codice" CODTAB
|
|
||||||
DISPLAY "Descrizione@50" S0
|
|
||||||
OUTPUT F_TIPODOC10 CODTAB
|
|
||||||
OUTPUT F_DESDOC10 S0
|
|
||||||
HELP "Tipo di documento 10"
|
|
||||||
FIELD S2[37,40]
|
|
||||||
CHECKTYPE NORMAL
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_DESDOC10 40
|
|
||||||
BEGIN
|
|
||||||
PROMPT 12 13 ""
|
|
||||||
FLAG "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
ENDMASK
|
ENDMASK
|
||||||
|
1060
ve/ve6200.cpp
1060
ve/ve6200.cpp
File diff suppressed because it is too large
Load Diff
424
ve/ve6300.cpp
424
ve/ve6300.cpp
@ -1,430 +1,6 @@
|
|||||||
// ve6300.cpp. Composizione interattiva dei documenti.
|
// ve6300.cpp. Composizione interattiva dei documenti.
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
#include <application.h>
|
|
||||||
#include <mask.h>
|
|
||||||
#include <relation.h>
|
|
||||||
#include <urldefid.h>
|
|
||||||
#include <utility.h>
|
|
||||||
#include <tabutil.h>
|
|
||||||
|
|
||||||
#include "ve6retv.h"
|
|
||||||
#include "ve6300.h"
|
|
||||||
#include "ve6gen.h"
|
|
||||||
|
|
||||||
class TInterattivo_crea_doc : public TBatch_crea_doc
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
virtual bool menu (MENU_TAG);
|
|
||||||
virtual bool create ();
|
|
||||||
virtual bool destroy();
|
|
||||||
|
|
||||||
// int set_vars(); // setta le variabili della classe
|
|
||||||
int componi_doc_finale(); // corpo del programma
|
|
||||||
static bool tipo_doc_handler (TMask_field&, KEY); // handler per il campo tipo doc. destinaz. della maschera
|
|
||||||
// static bool filterfunct(const TRelation*); // funzione per filtrare i documenti originali
|
|
||||||
|
|
||||||
int _rdoc; // numero di righe nel documento finale
|
|
||||||
public:
|
|
||||||
TInterattivo_crea_doc(void) {}
|
|
||||||
~TInterattivo_crea_doc() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
inline TInterattivo_crea_doc& app() { return (TInterattivo_crea_doc&) main_app(); }
|
|
||||||
|
|
||||||
bool TInterattivo_crea_doc::create()
|
|
||||||
{
|
|
||||||
_interattivo = TRUE;
|
|
||||||
|
|
||||||
const int cargc = argc();
|
|
||||||
const char **vargv = argv();
|
|
||||||
|
|
||||||
if (cargc >= 2)
|
|
||||||
{
|
|
||||||
if (cargc < 5)
|
|
||||||
return error_box ("Numero di parametri insufficiente: chiave incompleta!");
|
|
||||||
|
|
||||||
if (cargc >= 5)
|
|
||||||
{
|
|
||||||
_codnum = vargv[2];
|
|
||||||
_anno = vargv[3];
|
|
||||||
_provv = vargv[4];
|
|
||||||
_ndoc = vargv[5];
|
|
||||||
_crea_doc = (cargc == 7);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cargc > 7)
|
|
||||||
message_box ("Sono presenti piu' di 6 argomenti sulla linea di comando: possibile errore");
|
|
||||||
}
|
|
||||||
|
|
||||||
dispatch_e_menu(BAR_ITEM(1));
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TInterattivo_crea_doc::destroy()
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TInterattivo_crea_doc::menu(MENU_TAG)
|
|
||||||
{
|
|
||||||
// if (errore_fatale (set_vars())) return FALSE;
|
|
||||||
if (errore_fatale (componi_doc_finale()))
|
|
||||||
return FALSE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
TInterattivo_crea_doc::set_vars()
|
|
||||||
{
|
|
||||||
TMask m("ve6300.uml");
|
|
||||||
|
|
||||||
m.set_handler (F_TIPODOCDES, tipo_doc_handler);
|
|
||||||
if (m.run()==K_ESC) return ESC_PRESSED;
|
|
||||||
_datadoc = m.get(F_DATADOC); // data da assegnare al documento da creare
|
|
||||||
_first_codcf = _last_codcf = m.get_long(F_CODCF); // codice cliente
|
|
||||||
_tipo_doc_des = m.get(F_TIPODOCDES); // tipo del documento da creare
|
|
||||||
_codnum = m.get(F_CODNUM); // codice numerazione per il documento da creare
|
|
||||||
_anno << _datadoc.year(); // anno fiscale del documento da creare
|
|
||||||
_provv = m.get(F_PROVV); // indica se il la numerazione _codnum e' provvisoria o definitiva
|
|
||||||
|
|
||||||
// cerca il record di ELD che corrisponde a _tipo_doc_des
|
|
||||||
// TRelation rel("ELD");
|
|
||||||
// TString16 filter ("S8==\"");
|
|
||||||
// filter << _tipo_doc_des << '"';
|
|
||||||
// TCursor curs(&rel, filter);
|
|
||||||
// if (curs.items()==0)
|
|
||||||
// {
|
|
||||||
// fatal_box (TString("Nessuna elaborazione genera documenti del tipo ") << _tipo_doc_des);
|
|
||||||
// return NO_ELABS;
|
|
||||||
// }
|
|
||||||
// else if (curs.items()>1)
|
|
||||||
// warning_box ("Trovate %d elaborazioni per la generazione dei documenti di tipo %s", curs.items(), (const char*)_tipo_doc_des);
|
|
||||||
//
|
|
||||||
// return 0;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// handler per il tipo documento di destinazione
|
|
||||||
bool TInterattivo_crea_doc::tipo_doc_handler (TMask_field& field, KEY key)
|
|
||||||
{
|
|
||||||
if (key == K_TAB)
|
|
||||||
{
|
|
||||||
if (field.to_check(key))
|
|
||||||
{
|
|
||||||
TFixed_string tdd(field.get(),4); // tipo del documento destinazione selezionato
|
|
||||||
tdd.trim();
|
|
||||||
TTable t("%TIP");
|
|
||||||
t.zero();
|
|
||||||
t.put ("CODTAB", tdd); // cerca tipo del documento destinazione
|
|
||||||
t.read (_isgteq);
|
|
||||||
/* if (err = t.read (_isgteq)) // si posiziona sul record relativo al documento del tipo specificato
|
|
||||||
{
|
|
||||||
error_box ("TElaborazioni::run_mask() : errore di lettura %d da tab(TIP)", err);
|
|
||||||
return READ_ERROR;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if (t.get ("CODTAB") != tdd) // verifica che il tipo di documento trovato sia quello richiesto
|
|
||||||
{
|
|
||||||
error_box ("TElaborazioni::run_mask() : non esiste il tipo documento %s in tab(TIP)", (const char *)tdd);
|
|
||||||
return DOC_TYPE_NOT_FOUND;
|
|
||||||
}
|
|
||||||
TFilename profilo(t.get ("S4")); // nome del profilo documento (nome del .ini associato al tipo documento originale)
|
|
||||||
profilo.ext("ini");
|
|
||||||
TConfig profilo_doc(profilo); // file di configurazione (ini) del documento
|
|
||||||
TString tipocf = (profilo_doc.get("TIPOCF", "MAIN"));
|
|
||||||
tipocf.cut(1);
|
|
||||||
field.mask().set(F_TIPOCF, tipocf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TMask& mask = field.mask();
|
|
||||||
TFixed_string s(mask.get(F_TIPIDOC), 40);
|
|
||||||
if (key==K_ENTER || key==K_TAB)
|
|
||||||
return (s.find(field.get()) % 4) == 0; // per evitare che trovi "0010" in "00010002"
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
int TInterattivo_crea_doc::componi_doc_finale()
|
|
||||||
{
|
|
||||||
int err; // errori ritornati dalle funzioni
|
|
||||||
// long n; // numero della fattura nella numerazione corrente
|
|
||||||
bool no_select = TRUE; // TRUE se non sono stati selezionati documenti dallo sheet
|
|
||||||
bool no_elab = TRUE; // TRUE se non ha ancora elaborato nessun documento
|
|
||||||
TLocalisamfile f(LF_DOC); // per gestire la testata dei documenti
|
|
||||||
TLocalisamfile rdoc(LF_RIGHEDOC); // per gestire le righe dei documenti
|
|
||||||
int current = 0; // chiave corrente
|
|
||||||
TRectype pilota (LF_DOC); // record per il documento pilota
|
|
||||||
TTable t("NUM"); // tabella numerazioni
|
|
||||||
TRectype tempr(LF_DOC); // record del documento originale che si sta elaborando
|
|
||||||
TRectype temprdoc (LF_RIGHEDOC); // record per trovare le righe dei documenti originale
|
|
||||||
// int nrdoc; // numero di righe scritte nella fattura
|
|
||||||
// bool end = FALSE; // true non ci sono piu' documenti originali da elaborare
|
|
||||||
bool altri; // TRUE se ci sono altri documenti da includere nella fattura
|
|
||||||
// se _crea_doc, il documento destinazione (testata) deve essere inizializzato
|
|
||||||
// con i valori del primo documento originale selezionato
|
|
||||||
bool primo_pilota = _crea_doc;
|
|
||||||
|
|
||||||
f.put ("CODNUM", _codnum); // la fattura va numerata in base alla codnum specificata in ELD
|
|
||||||
f.put ("ANNO", _anno); // imposta l'anno del documento
|
|
||||||
f.put ("PROVV", _provv); // imposta provv./def. del documento
|
|
||||||
f.put ("NDOC", _ndoc); // imposta il numero del documento
|
|
||||||
|
|
||||||
err = f.read(_isgteq); // cerca il documento
|
|
||||||
if (err) // guarda se si è verificato un errore
|
|
||||||
{
|
|
||||||
error_box ("Errore di lettura %d in doc, cercando il documento", err);
|
|
||||||
return READ_ERROR;
|
|
||||||
}
|
|
||||||
/* else if (_crea_doc) f.curr() = pilota; // tutti i campi della fattura sono uguali al documento pilota, tranne alcuni (impostati più sotto)
|
|
||||||
else {
|
|
||||||
// confronta f.curr() e pilota (se pilota ha dei campi diversi, segnalalo e chiedi conferma
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
// }
|
|
||||||
_first_codcf = _last_codcf = f.get_long("CODCF"); // valori del campo CODCF dei records first e last, per potervi accedere dalla filterfunct()
|
|
||||||
_tipo_doc_des = f.get ("TIPODOC"); // imposta il tipo di documento
|
|
||||||
_stato_f_doc_f = f.get ("STATO"); // stato della fattura appena creata
|
|
||||||
|
|
||||||
TRelation rel (LF_DOC);
|
|
||||||
TString tdfilter(1024);
|
|
||||||
tdfilter =""; // non so se e' necessaria
|
|
||||||
#ifdef _TDD_IN_FILTER
|
|
||||||
// filtro costruito in base a tutti i tipi di doc. che hanno un ELD che li trasforma in _tipo_doc_des
|
|
||||||
tdfilter = td_ELD_to_filter(_tipo_doc_des);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TSorted_cursor curs (&rel, "NDOC", tdfilter); // lista i documenti ordinati per numero
|
|
||||||
curs.set_filterfunction (filterfunct);
|
|
||||||
|
|
||||||
// non dovrebbe servire : _raggruppa = TRUE;
|
|
||||||
_per_articolo = TRUE;
|
|
||||||
|
|
||||||
// Cursore per selezionare le testate dei documenti
|
|
||||||
if (curs.items() == 0) // se non ci sono bolle allo stato richiesto, indica errore
|
|
||||||
{
|
|
||||||
error_box ("Nessun documento da elaborare.");
|
|
||||||
return NO_ORG_DOCS;
|
|
||||||
}
|
|
||||||
curs.freeze(); // non perdere tempo a riaggiornarti
|
|
||||||
// curs=0; // comincia dal primo documento della lista
|
|
||||||
|
|
||||||
// scandaglia tutto curs e setta _processed tutti i doc. originali che non sono selezionati
|
|
||||||
TString80 Titolo("Documenti elaborabili che possono diventare ");
|
|
||||||
Titolo << _tipo_doc_des;
|
|
||||||
TCursor_sheet docs_sheet(&curs,
|
|
||||||
" |NDOC|TIPODOC|DATADOC|TIPOCF|CODCF|OCFPI",
|
|
||||||
Titolo,
|
|
||||||
"@1|Numero@7|Tipo@4|Data@10|C/F|Cod. cliente|CF o P.IVA@16");
|
|
||||||
|
|
||||||
docs_sheet.enable_check();
|
|
||||||
if (docs_sheet.run()==K_ESC) return ESC_PRESSED;
|
|
||||||
for (int i=0; i<docs_sheet.items(); i++)
|
|
||||||
if (!docs_sheet.checked(i))_processed.set(i);
|
|
||||||
else no_select = FALSE;
|
|
||||||
if (no_select)
|
|
||||||
{
|
|
||||||
error_box ("Nessun documento selezionato.");
|
|
||||||
return NO_ORG_DOCS;
|
|
||||||
}
|
|
||||||
|
|
||||||
// scandaglia tutto curs e torna con errore se un doc. originale non hanno la ELD
|
|
||||||
for (int l=0; l<curs.items();l++)
|
|
||||||
if (!_processed[l])
|
|
||||||
{
|
|
||||||
if ((err = esiste_ELD(curs,l,DONT_SET_PROCESSED))==ELAB_NOT_FOUND) return err;
|
|
||||||
TRectype &curr = curs.curr();
|
|
||||||
TConfig doc_config (getini(curr,err), "RAGGRUPPA"); // prende il .ini di curr
|
|
||||||
_stati_validi_doc_i = doc_config.get ("STATIVALIDI"); // stato iniziale del documento originale
|
|
||||||
if (!statovalido(curr))
|
|
||||||
{
|
|
||||||
error_box("Documento selezionato (tipo %s,numero %s) non e' in uno stato adatto all'elaborazione",
|
|
||||||
curr.get("TIPODOC"), curr.get("NDOC"));
|
|
||||||
return ERR_STATO_NON_VALIDO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (next_pilota(curs,pilota)) // ciclo di generazione fattura
|
|
||||||
// locka automaticamente il documento (pilota) che sta elaborando
|
|
||||||
{
|
|
||||||
// get_info(pilota);
|
|
||||||
//*****************************************************
|
|
||||||
//* questa sezione serve a CREARE il documento finale *
|
|
||||||
//*****************************************************
|
|
||||||
|
|
||||||
// imposta il numero per la fattura da creare
|
|
||||||
// inserisce il record di testata della fattura che va a creare
|
|
||||||
|
|
||||||
tempr = pilota; // il primo documento org. da elaborare è quello pilota
|
|
||||||
|
|
||||||
// qui inizia il ciclo per la creazione della fattura
|
|
||||||
// N.B.: appende ogni documento originale nella fattura
|
|
||||||
TRecord_array doc_destinazione (LF_RIGHEDOC, "NRIGA"); // array contenente le righe della fattura
|
|
||||||
TRectype r (LF_RIGHEDOC); // costruisce ed imposta la chiave per doc_destinazione
|
|
||||||
r.zero();
|
|
||||||
r.put ("CODNUM", _codnum);
|
|
||||||
r.put ("ANNO", _anno);
|
|
||||||
r.put ("PROVV", _provv);
|
|
||||||
r.put ("NDOC", _ndoc);
|
|
||||||
doc_destinazione.read(r);
|
|
||||||
// doc_destinazione.set_key(&r);
|
|
||||||
|
|
||||||
// legge tutte le fatture
|
|
||||||
do
|
|
||||||
{
|
|
||||||
// appende il documento originale al documento di destinazione
|
|
||||||
get_info(tempr);
|
|
||||||
bool raggr_parz = get_raggr_parz(tempr,err);
|
|
||||||
TString met = metodo(tempr);
|
|
||||||
// elab_righe restituisce TRUE solo se tutte le righe del documento originale
|
|
||||||
// sono state elaborate, quando cioe' il doc_destinazione deve cambiare stato
|
|
||||||
if (elab_righe(met,raggr_parz,tempr,doc_destinazione,temprdoc))
|
|
||||||
{
|
|
||||||
curs.file(LF_DOC).put ("STATO", _stato_f_doc_i); // aggiorna lo stato del documento originale
|
|
||||||
curs.file(LF_DOC).setkey(1);
|
|
||||||
if (err = curs.file(LF_DOC).rewrite())
|
|
||||||
{
|
|
||||||
error_box ("ve6200: Errore fatale: %d scrivendo sul file DOC", err);
|
|
||||||
return RECORD_WRITE_ERROR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (primo_pilota)
|
|
||||||
{
|
|
||||||
primo_pilota = FALSE;
|
|
||||||
f.curr() = tempr;
|
|
||||||
f.put ("CODNUM", _codnum);
|
|
||||||
f.put ("ANNO", _anno);
|
|
||||||
f.put ("PROVV", _provv);
|
|
||||||
f.put ("NDOC", _ndoc);
|
|
||||||
f.put ("TIPODOC", _tipo_doc_des); // reimposta il tipo di documento
|
|
||||||
f.put ("STATO", _stato_f_doc_f); // stato della fattura appena creata
|
|
||||||
// curs.file(LF_DOC).setkey(1);
|
|
||||||
if (err = f.rewrite())
|
|
||||||
{
|
|
||||||
error_box ("ve6200: Errore fatale: %d scrivendo sul file DOC", err);
|
|
||||||
return RECORD_WRITE_ERROR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// unlocka il record del documento processato
|
|
||||||
curs.file(LF_DOC).setkey(2);
|
|
||||||
curs.unlock();
|
|
||||||
// indica che il documento e' stato processato
|
|
||||||
_processed.set(curs.pos());
|
|
||||||
// cerca il prossimo doc. org. da inserire. Se non ce ne sono piu', termina la generazione fattura
|
|
||||||
// se ce ne sono ancora, mette in tempr il record di doc del prossimo documento da agguungere
|
|
||||||
altri = search(pilota, tempr, curs);
|
|
||||||
}
|
|
||||||
while (altri); // fine del ciclo che raggruppa le bolle dentro una fattura
|
|
||||||
|
|
||||||
// controlla se deve raggruppare le righe per codice articolo
|
|
||||||
if (_per_articolo && (doc_destinazione.rows() > 1)) // se deve raggr. e ci sono almeno 2 righe
|
|
||||||
raggruppa_righe (doc_destinazione);
|
|
||||||
|
|
||||||
// salva la fattura creata
|
|
||||||
if (err = doc_destinazione.write())
|
|
||||||
{
|
|
||||||
error_box ("Errore nella scrittura del doc. destinazione. err = %d", err);
|
|
||||||
return RECORD_WRITE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
no_elab = FALSE; // ha elaborato almeno un documento
|
|
||||||
|
|
||||||
// cerca il prossimo documeto pilota
|
|
||||||
}; // finche' i documenti non finiscono
|
|
||||||
if (no_elab) // se non ci sono bolle allo stato richiesto, indica errore
|
|
||||||
{
|
|
||||||
error_box ("Nessun documento elaborato.");
|
|
||||||
return NO_ORG_DOCS;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ve6300 (int argc, char** argv)
|
int ve6300 (int argc, char** argv)
|
||||||
{
|
{
|
||||||
TInterattivo_crea_doc a;
|
|
||||||
a.run (argc, argv, "Composizione documenti");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
TPerson p ("MATTEO LIGABUE");
|
|
||||||
p.send_message(
|
|
||||||
"DISCLAIMER: se leggerai questo pseudocodice e lo troverai childish, sappi che dopo la prima
|
|
||||||
stesura non l'ho piu' modificato, quindi questa e' l'idea che inizialmente avevo del programma
|
|
||||||
di composizione interattiva.");
|
|
||||||
p.bye();
|
|
||||||
|
|
||||||
- il prg per ora fa:
|
|
||||||
|
|
||||||
a) runna una maschera in cui chiede:
|
|
||||||
a1) il codice di numerazione del doc da comporre (+PROVV)
|
|
||||||
a2) il tipo di documento da comporre
|
|
||||||
a3) la data (AUTOMAGIC)
|
|
||||||
a4) TIPOCF/CODCF del doc da comporre (e degli originali da selezionare)
|
|
||||||
a5) tipo di documento originale (da TOGLIERE !!!)
|
|
||||||
|
|
||||||
b) runna un TCursor_Sheet con i documenti individuati da scegliere ed elaborare
|
|
||||||
|
|
||||||
c) runna un TInterattivo_sheet (TCursor_Sheet) con le singole righe da elaborare (selezionabili)
|
|
||||||
|
|
||||||
d) se la relativa tabella ELD permette l'evasione di parti di riga,
|
|
||||||
a1) mostrare il TCursor_sheet o TSpreadsheet (TSheet_field con maschera ve6301.uml)
|
|
||||||
a2) che possa trattare l'evasione parziale (TCursor_sheet -> con un campo number staccato dallo sheet)
|
|
||||||
a3) oppure il TSpreadsheet (TSheet_field) con tutte le colonne disabilitate, tranne la QTA_DA_EVADERE
|
|
||||||
|
|
||||||
il programma deve ancora:
|
|
||||||
|
|
||||||
a) passare la trasformazione al ve6200, che nella sua parte centrale (elaborazione del singolo doc.)
|
|
||||||
deve avere la eventuale selezione (da richiedersi in base ad un flag che ve6200 e ve6300 devono
|
|
||||||
settare rispettivamente a FALSE e TRUE, alla propria entrata) delle singole righe....
|
|
||||||
aggiornare la qtaevase dei singoli sorgenti...
|
|
||||||
lo stato del documento varia solo con la completa evasione delle righe !!!
|
|
||||||
|
|
||||||
... da continuare ...
|
|
||||||
|
|
||||||
- controllare lo stato dei documenti originali
|
|
||||||
|
|
||||||
-*chiama una funzione che runna la maschera e copia i nomi dei campi in variabili private
|
|
||||||
-*chiama una funzione che trova il record di ELD relativo al documento destinazione specificato
|
|
||||||
e setta le rimanenti variabili private
|
|
||||||
-*chiama una funzione che trova i documenti (testate) validi. Usare un TSorted_cursor od un
|
|
||||||
TRecord_array
|
|
||||||
|
|
||||||
componi la testata del documento originale con le variabili private (non metterci NDOC)
|
|
||||||
while l'utente non preme il button "Salva" per salvare il documento composto
|
|
||||||
se l'utente vuole inserire un documento dalla lista allora
|
|
||||||
mostra la lista
|
|
||||||
per ogni documento selezionato
|
|
||||||
se il flag "raggruppa unito" e' true, allora // caso doc. orig = BOLLE
|
|
||||||
fagli vedere le righe
|
|
||||||
attendi che prema un button
|
|
||||||
se preme ok aggiungi le righe al documento finale
|
|
||||||
end se ru=TRUE
|
|
||||||
altrimenti // caso doc. orig = ORDINI
|
|
||||||
fagli vedere le righe
|
|
||||||
attendi che selezioni le righe (possibilita' di selezionarle tutte)
|
|
||||||
//
|
|
||||||
usare un TBit_array per indicare se una riga va evasa tutta oppure se ne e' stata specificata una parte
|
|
||||||
settare a TRUE tutto il TBit_array; ??????????
|
|
||||||
se doubleclicka una riga
|
|
||||||
chiedigli la quantita' da evadere (puo' essere inferiore alla quantita' ordinata su quella riga)
|
|
||||||
scrivi nel documento originale la quantita' evasa
|
|
||||||
setta il TBit_array per indicare che nella bolla deve essere scritta la quantita' evasa
|
|
||||||
end se dblclk riga
|
|
||||||
//
|
|
||||||
...preferisco usare un TArray delle quantita' evase
|
|
||||||
|
|
||||||
end altrimenti (ru=FALSE)
|
|
||||||
end per ogni documento selezionato
|
|
||||||
end se seleziona dei documenti
|
|
||||||
altrimenti // vuole aggiungere delle righe
|
|
||||||
leggi i campi della riga (settando automaticamente codnum, ecc.)
|
|
||||||
metti la riga letta nel documento finale
|
|
||||||
end altrimenti (inserimento righe)
|
|
||||||
end
|
|
||||||
|
|
||||||
scrivi NDOC nella testata del documento
|
|
||||||
scrivi la testata del documento
|
|
||||||
salva il documento destinazione
|
|
||||||
end
|
|
||||||
*/
|
|
||||||
|
201
ve/velib01.cpp
Executable file
201
ve/velib01.cpp
Executable file
@ -0,0 +1,201 @@
|
|||||||
|
#include <clifo.h>
|
||||||
|
|
||||||
|
#include "velib01.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// Documento per vendite
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
TDocumento_vendita::TDocumento_vendita()
|
||||||
|
: _head(LF_DOC), _rows(LF_RIGHEDOC, "NRIGA")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
TDocumento_vendita::TDocumento_vendita(const char* codnum, int anno, char provv, long numdoc)
|
||||||
|
: _head(LF_DOC), _rows(LF_RIGHEDOC, "NRIGA")
|
||||||
|
{
|
||||||
|
read(codnum, anno, provv, numdoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
int TDocumento_vendita::read(const TRectype& rec)
|
||||||
|
{
|
||||||
|
_head = rec; // Inizializza i campi chiave in ogni caso
|
||||||
|
|
||||||
|
TLocalisamfile doc(LF_DOC);
|
||||||
|
int err = _head.read(doc);
|
||||||
|
if (err == NOERR)
|
||||||
|
{
|
||||||
|
TRectype* key = new TRectype(LF_RIGHEDOC);
|
||||||
|
key->put("CODNUM", doc.get("CODNUM"));
|
||||||
|
key->put("ANNO", doc.get("ANNO"));
|
||||||
|
key->put("PROVV", doc.get("PROVV"));
|
||||||
|
key->put("NUMDOC", doc.get("NUMDOC"));
|
||||||
|
err = _rows.read(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TDocumento_vendita::read(const char* codnum, int anno, char provv, long numdoc)
|
||||||
|
{
|
||||||
|
CHECK(codnum && *codnum && anno > 0 && (provv == 'D' || provv == 'P') && numdoc > 0,
|
||||||
|
"Codice documento non valido");
|
||||||
|
|
||||||
|
_head.zero();
|
||||||
|
_head.put("CODNUM", codnum);
|
||||||
|
_head.put("ANNO", anno);
|
||||||
|
_head.put("PROVV", provv);
|
||||||
|
_head.put("NUMDOC", numdoc);
|
||||||
|
|
||||||
|
return read(_head);
|
||||||
|
}
|
||||||
|
|
||||||
|
int TDocumento_vendita::write(bool re) const
|
||||||
|
{
|
||||||
|
TLocalisamfile doc(LF_DOC);
|
||||||
|
int err = re ? _head.rewrite(doc) : _head.write(doc);
|
||||||
|
if (err != NOERR)
|
||||||
|
err = re ? _head.write(doc) : _head.rewrite(doc);
|
||||||
|
if (err == NOERR)
|
||||||
|
err = _rows.write(re);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TDocumento_vendita::remove() const
|
||||||
|
{
|
||||||
|
TLocalisamfile doc(LF_DOC);
|
||||||
|
int err = _head.remove(doc);
|
||||||
|
if (err == NOERR)
|
||||||
|
err = _rows.remove();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// Cliente per vendite
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void TLista_clienti::TCliente::init(const TRectype& rec)
|
||||||
|
{
|
||||||
|
CHECK(rec.num() == LF_CFVEN, "E' necessario un cliente per vendite");
|
||||||
|
_codice = rec.get_long(CLI_CODCF);
|
||||||
|
_agente = rec.get_long(CLI_CODAG);
|
||||||
|
_zona = rec.get_long(CLI_CODZONA);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TLista_clienti::TCliente::read(long cod)
|
||||||
|
{
|
||||||
|
TRelation clifo(LF_CLIFO);
|
||||||
|
clifo.add(LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF");
|
||||||
|
|
||||||
|
clifo.curr().put(CLI_TIPOCF, "C");
|
||||||
|
clifo.curr().put(CLI_CODCF, cod);
|
||||||
|
if (clifo.read() == NOERR)
|
||||||
|
init(clifo.curr(LF_CFVEN));
|
||||||
|
else
|
||||||
|
zero();
|
||||||
|
|
||||||
|
return ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
TLista_clienti::TCliente::TCliente(const TRectype& rec)
|
||||||
|
{
|
||||||
|
if (rec.num() == LF_CFVEN)
|
||||||
|
init(rec);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_codice = rec.get_long(CLI_CODCF);
|
||||||
|
read(_codice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int TLista_clienti::leggi(long dc, long ac, long da, long aa, long dz, long az)
|
||||||
|
{
|
||||||
|
TRelation clifo(LF_CLIFO);
|
||||||
|
clifo.add(LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF");
|
||||||
|
|
||||||
|
TRectype start(LF_CLIFO), stop(LF_CLIFO);
|
||||||
|
|
||||||
|
start.put(CLI_TIPOCF, 'C');
|
||||||
|
stop.put(CLI_TIPOCF, 'C');
|
||||||
|
|
||||||
|
if (dc > 0)
|
||||||
|
start.put(CLI_CODCF, dc);
|
||||||
|
|
||||||
|
if (ac > 0)
|
||||||
|
stop.put(CLI_CODCF, ac);
|
||||||
|
|
||||||
|
TString filter(32);
|
||||||
|
if (da > 0)
|
||||||
|
filter << '(' << LF_CFVEN << "->" << CLI_CODAG << ">=" << da << ')';
|
||||||
|
if (aa > 0)
|
||||||
|
{
|
||||||
|
if (filter.not_empty()) filter << "&&";
|
||||||
|
filter << '(' << LF_CFVEN << "->" << CLI_CODAG << "<=" << aa << ')';
|
||||||
|
}
|
||||||
|
if (dz > 0)
|
||||||
|
{
|
||||||
|
if (filter.not_empty()) filter << "&&";
|
||||||
|
filter << '(' << LF_CFVEN << "->" << CLI_CODZONA << ">=" << dz << ')';
|
||||||
|
}
|
||||||
|
if (az > 0)
|
||||||
|
{
|
||||||
|
if (filter.not_empty()) filter << "&&";
|
||||||
|
filter << '(' << LF_CFVEN << "->" << CLI_CODZONA << "<=" << az << ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
TCursor cur(&clifo, filter, 1, &start, &stop);
|
||||||
|
for (cur = 0; cur.ok(); ++cur)
|
||||||
|
{
|
||||||
|
TCliente* c = new TCliente(cur.curr(LF_CFVEN));
|
||||||
|
_clienti.add(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dc > 0 || ac > 0) ordina_per_codice(); else
|
||||||
|
if (da > 0 || aa > 0) ordina_per_agente(); else
|
||||||
|
if (dz > 0 || az > 0) ordina_per_zona();
|
||||||
|
|
||||||
|
return _clienti.items();
|
||||||
|
}
|
||||||
|
|
||||||
|
int TLista_clienti::sort_by_code(const TObject** o1, const TObject** o2)
|
||||||
|
{
|
||||||
|
TLista_clienti::TCliente* c1 = (TLista_clienti::TCliente*)*o1;
|
||||||
|
TLista_clienti::TCliente* c2 = (TLista_clienti::TCliente*)*o2;
|
||||||
|
const long d = c1->codice() - c2->codice();
|
||||||
|
return d == 0L ? 0 : (d > 0 ? +1 : -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int TLista_clienti::sort_by_agent(const TObject** o1, const TObject** o2)
|
||||||
|
{
|
||||||
|
TLista_clienti::TCliente* c1 = (TLista_clienti::TCliente*)*o1;
|
||||||
|
TLista_clienti::TCliente* c2 = (TLista_clienti::TCliente*)*o2;
|
||||||
|
const long d = c1->agente() - c2->agente();
|
||||||
|
return d == 0L ? 0 : (d > 0 ? +1 : -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int TLista_clienti::sort_by_zone(const TObject** o1, const TObject** o2)
|
||||||
|
{
|
||||||
|
TLista_clienti::TCliente* c1 = (TLista_clienti::TCliente*)*o1;
|
||||||
|
TLista_clienti::TCliente* c2 = (TLista_clienti::TCliente*)*o2;
|
||||||
|
const long d = c1->zona() - c2->zona();
|
||||||
|
return d == 0L ? 0 : (d > 0 ? +1 : -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int TLista_clienti::ordina_per_codice()
|
||||||
|
{
|
||||||
|
_clienti.sort(sort_by_code);
|
||||||
|
return _clienti.items();
|
||||||
|
}
|
||||||
|
|
||||||
|
int TLista_clienti::ordina_per_agente()
|
||||||
|
{
|
||||||
|
_clienti.sort(sort_by_agent);
|
||||||
|
return _clienti.items();
|
||||||
|
}
|
||||||
|
|
||||||
|
int TLista_clienti::ordina_per_zona()
|
||||||
|
{
|
||||||
|
_clienti.sort(sort_by_zone);
|
||||||
|
return _clienti.items();
|
||||||
|
}
|
||||||
|
|
82
ve/velib01.h
Executable file
82
ve/velib01.h
Executable file
@ -0,0 +1,82 @@
|
|||||||
|
#ifndef __VELIB01_H
|
||||||
|
#define __VELIB01_H
|
||||||
|
|
||||||
|
#ifndef __RELATION_H
|
||||||
|
#include <relation.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class TDocumento_vendita : public TObject
|
||||||
|
{
|
||||||
|
TRectype _head; // Record di testata
|
||||||
|
TRecord_array _rows; // Array di TRectype per le righe documenti di vendita.
|
||||||
|
|
||||||
|
public:
|
||||||
|
int rows() const { return _rows.rows(); }
|
||||||
|
|
||||||
|
const TRectype& head() const { return _head; } // Ritorna la testata del documento
|
||||||
|
const TRectype& operator[](int index) const { return _rows.row(index); } // Ritorna la riga n-esima del documento
|
||||||
|
TRectype& operator[](int index) { return _rows.row(index, FALSE); }
|
||||||
|
TRectype& add_row() { return _rows.row(-1, TRUE); }
|
||||||
|
bool destroy_row(int n) { return _rows.destroy_row(n); }
|
||||||
|
|
||||||
|
int read(const char* codnum, int anno, char provv, long numdoc);
|
||||||
|
int read(const TRectype& rec);
|
||||||
|
int write(bool re = FALSE) const;
|
||||||
|
int rewrite() const { return write(TRUE); }
|
||||||
|
int remove() const;
|
||||||
|
|
||||||
|
TDocumento_vendita ();
|
||||||
|
TDocumento_vendita(const char* codnum, int anno, char provv, long numdoc);
|
||||||
|
virtual ~TDocumento_vendita() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
class TLista_clienti : public TObject
|
||||||
|
{
|
||||||
|
class TCliente : public TObject
|
||||||
|
{
|
||||||
|
long _codice;
|
||||||
|
long _agente;
|
||||||
|
long _zona;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void zero() { _codice = _agente = _zona = 0L; }
|
||||||
|
void init(const TRectype& rec);
|
||||||
|
bool read(long cod);
|
||||||
|
|
||||||
|
public: // TObject
|
||||||
|
virtual bool ok() const { return _codice > 0; }
|
||||||
|
|
||||||
|
public:
|
||||||
|
long codice() const { return _codice; }
|
||||||
|
long agente() const { return _agente; }
|
||||||
|
long zona() const { return _zona; }
|
||||||
|
|
||||||
|
TCliente() { zero(); }
|
||||||
|
TCliente(long cod) { read(cod); }
|
||||||
|
TCliente(const TRectype& rec);
|
||||||
|
virtual ~TCliente() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
TArray _clienti;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
const TCliente& cliente(int n) const { return (TCliente&)_clienti[n]; }
|
||||||
|
|
||||||
|
static int sort_by_code(const TObject** o1, const TObject** o2);
|
||||||
|
static int sort_by_agent(const TObject** o1, const TObject** o2);
|
||||||
|
static int sort_by_zone(const TObject** o1, const TObject** o2);
|
||||||
|
|
||||||
|
public:
|
||||||
|
int ordina_per_codice();
|
||||||
|
int ordina_per_agente();
|
||||||
|
int ordina_per_zona();
|
||||||
|
|
||||||
|
int leggi(long dc, long ac, long da = 0, long aa = 0, long dz = 0, long az = 0);
|
||||||
|
|
||||||
|
long operator[] (int n) const { return cliente(n).codice(); }
|
||||||
|
|
||||||
|
TLista_clienti() { }
|
||||||
|
virtual ~TLista_clienti() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user