Patch level : 4.0 911
Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.2 1010 git-svn-id: svn://10.65.10.50/trunk@16333 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2c18acdc65
commit
ee80b6a6c0
@ -577,9 +577,13 @@ void TPrint_effetti_app::set_distinta()
|
||||
set_row(2,"@81g@pn@100g%s",
|
||||
FLD(LF_EFFETTI, EFF_IMPORTOVAL, PICTURE_IMPORTO),
|
||||
(const char *)valuta);
|
||||
}
|
||||
write_bancapp();
|
||||
for(int i = 0; i < _interline; i++) set_row(i+1,"");
|
||||
}
|
||||
else
|
||||
{
|
||||
set_row(2,"@100g%s", (const char *)TCurrency::get_firm_val());
|
||||
}
|
||||
write_bancapp();
|
||||
for(int i = 0; i < _interline; i++) set_row(i+1,"");
|
||||
}
|
||||
|
||||
// setta la pagina logica nel caso di stampa per cliente
|
||||
|
525
ef/rf900000.ini
Executable file
525
ef/rf900000.ini
Executable file
@ -0,0 +1,525 @@
|
||||
[MAIN]
|
||||
DECSEP = ,
|
||||
FIELDSEP =
|
||||
RECORDSEP =
|
||||
RECORDSIZE = 120
|
||||
SKIPLINES = 0
|
||||
TYPEFIELD = 1
|
||||
TYPELEN = -1
|
||||
TYPEPOS = -1
|
||||
|
||||
[TYPE FISSO]
|
||||
ALIGN =
|
||||
DATA =
|
||||
DECIMAL = 0
|
||||
FILLER = ' '
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[TYPE IMPORTO]
|
||||
ALIGN = R
|
||||
DATA = N
|
||||
DECIMAL = 1
|
||||
FILLER = 0
|
||||
LENGTH = 13
|
||||
PICTURE = @@@@@@@@@@@@@
|
||||
|
||||
[TYPE DATA]
|
||||
ALIGN =
|
||||
DATA = D
|
||||
DECIMAL = 0
|
||||
FILLER =
|
||||
LENGTH = 6
|
||||
PICTURE = 1442
|
||||
|
||||
[TYPE NUMERO]
|
||||
ALIGN = R
|
||||
DATA = N
|
||||
DECIMAL = 0
|
||||
FILLER = '0'
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[TYPE STRINGA]
|
||||
ALIGN = L
|
||||
DATA = S
|
||||
DECIMAL = 0
|
||||
FILLER = ' '
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[HEADER RB]
|
||||
NAME(0)=CAMPO BLANK
|
||||
TYPE(0)=FISSO
|
||||
POSITION(0)=0
|
||||
LENGTH(0)=1
|
||||
|
||||
NAME(1)=TIPO RECORD
|
||||
POSITION(1)=1
|
||||
LENGTH(1)=2
|
||||
MESSAGE(1)=_FISSO,!PC
|
||||
|
||||
NAME(2)=CODICE MITTENTE
|
||||
POSITION(2)=3
|
||||
LENGTH(2)=5
|
||||
MESSAGE(2)=_CODSIA
|
||||
|
||||
NAME(3)=CODICE DESTINATARIO
|
||||
FIELD(3)=31->CODABIP
|
||||
POSITION(3)=8
|
||||
LENGTH(3)=5
|
||||
|
||||
NAME(4)=DATA EMISSIONE
|
||||
TYPE(4)=DATA
|
||||
FIELD(4)=31->DATAEMISS
|
||||
POSITION(4)=13
|
||||
LENGTH(4)=6
|
||||
MESSAGE(4) = _DATA
|
||||
|
||||
NAME(5)=RAGIONE SOCIALE MITTENTE
|
||||
TYPE(5)=STRINGA
|
||||
POSITION(5)=19
|
||||
LENGTH(5)=26
|
||||
MESSAGE(5)=_DITTA,!RAGSOC,1
|
||||
|
||||
NAME(6)=FILLER
|
||||
TYPE(6)=FISSO
|
||||
POSITION(6)=45
|
||||
LENGTH(6)=68
|
||||
|
||||
NAME(7)=CODICE MONETA
|
||||
TYPE(7)=STRINGA
|
||||
POSITION(7)=113
|
||||
LENGTH(7)=1
|
||||
MESSAGE(7) = _CODMON
|
||||
|
||||
|
||||
NAME(8)=FILLER
|
||||
TYPE(8)=FISSO
|
||||
POSITION(8)=114
|
||||
LENGTH(8)=6
|
||||
|
||||
NAME(9)=TIPO RECORD FINTO
|
||||
POSITION(9)=1
|
||||
LENGTH(9)=2
|
||||
MESSAGE(9)=_FISSO,!PC
|
||||
|
||||
[RECORD 10]
|
||||
NAME(0) = CAMPO BLANK
|
||||
TYPE(0) = FISSO
|
||||
POSITION(0) = 0
|
||||
LENGTH(0) = 1
|
||||
|
||||
NAME(1) = TIPO RECORD
|
||||
POSITION(1) = 1
|
||||
LENGTH(1) = 2
|
||||
MESSAGE(1) = _FISSO,!10
|
||||
|
||||
NAME(2) = NUMERO PROGRESSIVO RIBA
|
||||
TYPE(2) = NUMERO
|
||||
POSITION(2) = 3
|
||||
LENGTH(2) = 7
|
||||
MESSAGE(2) = _NRIBA,!NUM
|
||||
|
||||
NAME(3) = CAMPO ALTERABILE
|
||||
TYPE(3) = FISSO
|
||||
POSITION(3) = 10
|
||||
LENGTH(3) = 6
|
||||
|
||||
NAME(4) = DATA ESECUZIONE
|
||||
TYPE(4) = FISSO
|
||||
// FIELD(4) = 31->DATADIST
|
||||
POSITION(4) = 16
|
||||
LENGTH(4) = 6
|
||||
|
||||
NAME(5) = DATA VALUTA
|
||||
TYPE(5) = DATA
|
||||
FIELD(5) = 31->DATADIST
|
||||
POSITION(5) = 22
|
||||
LENGTH(5) = 6
|
||||
|
||||
NAME(6) = CAUSALE
|
||||
POSITION(6) = 28
|
||||
LENGTH(6) = 5
|
||||
MESSAGE(6) = _FISSO,!48000
|
||||
|
||||
NAME(7) = IMPORTO
|
||||
TYPE(7) = IMPORTO
|
||||
FIELD(7) = 31->IMPORTO
|
||||
POSITION(7) = 33
|
||||
LENGTH(7) = 13
|
||||
MESSAGE(7)=_IMPORTO,!ADD
|
||||
|
||||
NAME(8) = SEGNO
|
||||
POSITION(8) = 46
|
||||
LENGTH(8) = 1
|
||||
MESSAGE(8) = _FISSO,!+
|
||||
|
||||
NAME(9) = CODABI BANCA PRESENTAZIONE
|
||||
FIELD(9) = 31->CODABIP
|
||||
POSITION(9) = 47
|
||||
LENGTH(9) = 5
|
||||
|
||||
NAME(10) = CODCAB BANCA PRESENTAZIONE
|
||||
FIELD(10) = 31->CODCABP
|
||||
POSITION(10) = 52
|
||||
LENGTH(10) = 5
|
||||
|
||||
NAME(11) = C/C n. ordinante
|
||||
TYPE(11) = STRINGA
|
||||
FIELD(11) = 403@->S0
|
||||
POSITION(11) = 57
|
||||
LENGTH(11) = 12
|
||||
|
||||
NAME(12) = CODICE ABI BANCA DOMICILIATARIA (FACOLTATIVO)
|
||||
FIELD(12) = 20->CODABI
|
||||
POSITION(12) = 69
|
||||
LENGTH(12) = 5
|
||||
|
||||
NAME(13) = CODICE CAB BANCA DOMICILIATARIA (FACOLTATIVO)
|
||||
FIELD(13) = 20->CODCAB
|
||||
POSITION(13) = 74
|
||||
LENGTH(13) = 5
|
||||
|
||||
NAME(14) = RIFERIMENTO DEBITORE (FACOLTATIVO)
|
||||
TYPE(14) = STRINGA
|
||||
FIELD(14) = 20->NUMCC
|
||||
POSITION(14) = 79
|
||||
LENGTH(14) = 12
|
||||
|
||||
NAME(15) = CODICE AZIENDA
|
||||
POSITION(15) = 91
|
||||
LENGTH(15) = 5
|
||||
MESSAGE(15) = _CODSIA
|
||||
|
||||
NAME(16) = TIPO CODICE INDIVIDUALE (FACOLTATIVO)
|
||||
TYPE(16) = FISSO
|
||||
POSITION(16) = 96
|
||||
LENGTH(16) = 1
|
||||
MESSAGE(16) = _FISSO,!4
|
||||
|
||||
NAME(17) = CODICE CLIENTE DEBITORE (FACOLTATIVO)
|
||||
TYPE(17) = FISSO
|
||||
POSITION(17) = 97
|
||||
LENGTH(17) = 16
|
||||
|
||||
NAME(18) = FILLER
|
||||
TYPE(18) = FISSO
|
||||
POSITION(18) = 113
|
||||
LENGTH(18) = 6
|
||||
// MESSAGE(18) = _FISSO,!1
|
||||
|
||||
NAME(19) = CODICE MONETA
|
||||
TYPE(19) = STRINGA
|
||||
POSITION(19) = 119
|
||||
LENGTH(19) = 1
|
||||
MESSAGE(19) = _CODMON
|
||||
|
||||
[RECORD 16]
|
||||
NAME(0) = CAMPO BLANK
|
||||
TYPE(0) = FISSO
|
||||
POSITION(0) = 0
|
||||
LENGTH(0) = 1
|
||||
|
||||
NAME(1) = TIPO RECORD
|
||||
POSITION(1) = 1
|
||||
LENGTH(1) = 2
|
||||
MESSAGE(1) = _FISSO,!16
|
||||
|
||||
NAME(2) = NUMERO PROGRESSIVO RIBA
|
||||
TYPE(2) = NUMERO
|
||||
POSITION(2) = 3
|
||||
LENGTH(2) = 7
|
||||
MESSAGE(2) = _NRIBA,!NUM
|
||||
|
||||
NAME(3) = Codice IBAN
|
||||
TYPE(3) = STRINGA
|
||||
POSITION(3) = 10
|
||||
LENGTH(3) = 34
|
||||
FIELD(3) = 403@->S3
|
||||
|
||||
[RECORD 17]
|
||||
NAME(0) = CAMPO BLANK
|
||||
TYPE(0) = FISSO
|
||||
POSITION(0) = 0
|
||||
LENGTH(0) = 1
|
||||
|
||||
NAME(1) = TIPO RECORD
|
||||
POSITION(1) = 1
|
||||
LENGTH(1) = 2
|
||||
MESSAGE(1) = _FISSO,!17
|
||||
|
||||
NAME(2) = NUMERO PROGRESSIVO RIBA
|
||||
TYPE(2) = NUMERO
|
||||
POSITION(2) = 3
|
||||
LENGTH(2) = 7
|
||||
MESSAGE(2) = _NRIBA,!NUM
|
||||
|
||||
NAME(3) = Codice IBAN
|
||||
TYPE(3) = STRINGA
|
||||
POSITION(3) = 10
|
||||
LENGTH(3) = 34
|
||||
FIELD(3) = 31->IBAN
|
||||
|
||||
[RECORD 20]
|
||||
NAME(0)=CAMPO BLANK
|
||||
TYPE(0)=FISSO
|
||||
POSITION(0)=0
|
||||
LENGTH(0)=1
|
||||
|
||||
NAME(1)=TIPO RECORD
|
||||
POSITION(1)=1
|
||||
LENGTH(1)=2
|
||||
MESSAGE(1)=_FISSO,!20
|
||||
|
||||
NAME(2)=NUMERO PROGRESSIVO RIBA
|
||||
TYPE(2)=NUMERO
|
||||
POSITION(2)=3
|
||||
LENGTH(2)=7
|
||||
MESSAGE(2) = _NRIBA,!NUM
|
||||
|
||||
NAME(3)=DESCRIZIONE MITTENTE (CREDITORE) SEGMENTO 1
|
||||
TYPE(3)=STRINGA
|
||||
POSITION(3)=10
|
||||
LENGTH(3)=24
|
||||
MESSAGE(3)=_DITTA,!RAGSOC,1
|
||||
|
||||
NAME(4)=DESCRIZIONE MITTENTE SEGMENTO 2
|
||||
TYPE(4)=STRINGA
|
||||
POSITION(4)=34
|
||||
LENGTH(4)=24
|
||||
MESSAGE(4)=_DITTA,!RAGSOC,2
|
||||
|
||||
NAME(5)=DESCRIZIONE MITTENTE SEGMENTO 3
|
||||
TYPE(5)=STRINGA
|
||||
POSITION(5)=59
|
||||
LENGTH(5)=24
|
||||
MESSAGE(5)=_DITTA,!RAGSOC,3
|
||||
|
||||
NAME(6)=DESCRIZIONE MITTENTE SEGMENTO 4
|
||||
TYPE(6)=STRINGA
|
||||
POSITION(6)=83
|
||||
LENGTH(6)=24
|
||||
MESSAGE(6)=_DITTA,!RAGSOC,4
|
||||
|
||||
NAME(7)=CAMPO BLANK
|
||||
TYPE(7)=FISSO
|
||||
POSITION(7)=106
|
||||
LENGTH(7)=14
|
||||
|
||||
[RECORD 30]
|
||||
NAME(0)=CAMPO BLANK
|
||||
TYPE(0)=FISSO
|
||||
POSITION(0)=0
|
||||
LENGTH(0)=1
|
||||
|
||||
NAME(1)=TIPO RECORD
|
||||
POSITION(1)=1
|
||||
LENGTH(1)=2
|
||||
MESSAGE(1)=_FISSO,!30
|
||||
|
||||
NAME(2)=NUMERO PROGRESSIVO RIBA
|
||||
TYPE(2)=NUMERO
|
||||
POSITION(2)=3
|
||||
LENGTH(2)=7
|
||||
MESSAGE(2) = _NRIBA,!NUM
|
||||
|
||||
NAME(3)=DESCRIZIONE DEBITORE SEGMENTO 1
|
||||
TYPE(3)=STRINGA
|
||||
POSITION(3)=10
|
||||
LENGTH(3)=30
|
||||
MESSAGE(3) = _DEBITORE,!RAGSOC,1
|
||||
|
||||
NAME(4)=DESCRIZIONE DEBITORE SEGMENTO 2
|
||||
TYPE(4)=STRINGA
|
||||
POSITION(4)=40
|
||||
LENGTH(4)=30
|
||||
MESSAGE(4) = _DEBITORE,!RAGSOC,2
|
||||
|
||||
NAME(5)=CODICE FISCALE DEBITORE SEGMENTO 3
|
||||
TYPE(5)=STRINGA
|
||||
POSITION(5)=100
|
||||
LENGTH(5)=16
|
||||
MESSAGE(5)= _DEBITORE,!CFPI
|
||||
|
||||
NAME(6)=CAMPO BLANK
|
||||
TYPE(6)=FISSO
|
||||
POSITION(6)=116
|
||||
LENGTH(6)=4
|
||||
|
||||
[RECORD 40]
|
||||
NAME(0)=CAMPO BLANK
|
||||
TYPE(0)=FISSO
|
||||
POSITION(0)=0
|
||||
LENGTH(0)=1
|
||||
|
||||
NAME(1)=TIPO RECORD
|
||||
POSITION(1)=1
|
||||
LENGTH(1)=2
|
||||
MESSAGE(1)=_FISSO,!40
|
||||
|
||||
NAME(2)=NUMERO PROGRESSIVO RIBA
|
||||
TYPE(2)=NUMERO
|
||||
POSITION(2)=3
|
||||
LENGTH(2)=7
|
||||
MESSAGE(2) = _NRIBA,!NUM
|
||||
|
||||
NAME(3)=INDIRIZZO DEBITORE: VIA,NUMERO CIVICO, NOME FRAZIONE
|
||||
TYPE(3)=STRINGA
|
||||
POSITION(3)=10
|
||||
LENGTH(3)=30
|
||||
MESSAGE(3) = _DEBITORE,!INDIRIZZO
|
||||
|
||||
NAME(4)=INDIRIZZO DEBITORE: CAP
|
||||
TYPE(4)=NUMERO
|
||||
FIELD(4)=20->CAPCF
|
||||
POSITION(4)=40
|
||||
LENGTH(4)=5
|
||||
|
||||
NAME(5)=INDIRIZZO DEBITORE: COMUNE
|
||||
TYPE(5)=STRINGA
|
||||
POSITION(5)=45
|
||||
LENGTH(5)=23
|
||||
MESSAGE(5) = _DEBITORE,!COMUNE
|
||||
|
||||
NAME(6)=INDIRIZZO DEBITORE: SIGLA PROVINCIA
|
||||
TYPE(6)=STRINGA
|
||||
POSITION(6)=68
|
||||
LENGTH(6)=2
|
||||
MESSAGE(6) = _DEBITORE,!PROV
|
||||
|
||||
NAME(7)=BANCA DOMICILIATARIA IN CHIARO (DENOMINAZIONE BANCA E SPORTELLO)
|
||||
TYPE(7)=STRINGA
|
||||
POSITION(7)=70
|
||||
LENGTH(7)=50
|
||||
MESSAGE(7) = _BANCA
|
||||
|
||||
[RECORD 50]
|
||||
NAME(0)=CAMPO BLANK
|
||||
TYPE(0)=FISSO
|
||||
POSITION(0)=0
|
||||
LENGTH(0)=1
|
||||
|
||||
NAME(1)=TIPO RECORD
|
||||
POSITION(1)=1
|
||||
LENGTH(1)=2
|
||||
MESSAGE(1)=_FISSO,!50
|
||||
|
||||
NAME(2)=NUMERO PROGRESSIVO RIBA
|
||||
TYPE(2)=NUMERO
|
||||
POSITION(2)=3
|
||||
LENGTH(2)=7
|
||||
MESSAGE(2) = _NRIBA,!NUM
|
||||
|
||||
NAME(3)=RIFERIMENTI AL DEBITO SEGMENTO 1
|
||||
TYPE(3)=STRINGA
|
||||
POSITION(3)=10
|
||||
LENGTH(3)=40
|
||||
MESSAGE(3) = _FATT,!1
|
||||
|
||||
NAME(4)=RIFERIMENTI AL DEBITO SEGMENTO 2
|
||||
TYPE(4)=STRINGA
|
||||
POSITION(4)=50
|
||||
LENGTH(4)=50
|
||||
MESSAGE(4) = _FATT,!2
|
||||
|
||||
NAME(5)=CAMPO BLANK
|
||||
TYPE(5)=FISSO
|
||||
POSITION(5)=100
|
||||
LENGTH(5)=20
|
||||
|
||||
[RECORD 70]
|
||||
NAME(0)=CAMPO BLANK
|
||||
TYPE(0)=FISSO
|
||||
POSITION(0)=0
|
||||
LENGTH(0)=1
|
||||
|
||||
NAME(1)=TIPO RECORD
|
||||
POSITION(1)=1
|
||||
LENGTH(1)=2
|
||||
MESSAGE(1)=_FISSO,!70
|
||||
|
||||
NAME(2)=NUMERO PROGRESSIVO RIBA
|
||||
TYPE(2)=NUMERO
|
||||
POSITION(2)=3
|
||||
LENGTH(2)=7
|
||||
MESSAGE(2) = _NRIBA,!NUM
|
||||
|
||||
NAME(3)=CAMPO ALTERABILE
|
||||
TYPE(3)=FISSO
|
||||
POSITION(3)=10
|
||||
LENGTH(3)=110
|
||||
|
||||
[FOOTER EF]
|
||||
NAME(0)=CAMPO BLANK
|
||||
TYPE(0)=FISSO
|
||||
POSITION(0)=0
|
||||
LENGTH(0)=1
|
||||
|
||||
NAME(1)=TIPO RECORD
|
||||
POSITION(1)=1
|
||||
LENGTH(1)=2
|
||||
MESSAGE(1)=_FISSO,!EF
|
||||
|
||||
NAME(2)=CODICE MITTENTE
|
||||
POSITION(2)=3
|
||||
LENGTH(2)=5
|
||||
MESSAGE(2)=_CODSIA
|
||||
|
||||
NAME(3)=CODICE DESTINATARIO
|
||||
FIELD(3)=31->CODABIP
|
||||
POSITION(3)=8
|
||||
LENGTH(3)=5
|
||||
|
||||
NAME(4)=DATA EMISSIONE
|
||||
TYPE(4)=DATA
|
||||
FIELD(4)=31->DATAEMISS
|
||||
POSITION(4)=13
|
||||
LENGTH(4)=6
|
||||
MESSAGE(4)=_DATA
|
||||
|
||||
NAME(5)=RAGIONE SOCIALE MITTENTE
|
||||
TYPE(5)=STRINGA
|
||||
POSITION(5)=19
|
||||
LENGTH(5)=26
|
||||
MESSAGE(5) = _DITTA,!RAGSOC,1
|
||||
|
||||
NAME(6)=NUMERO RICEVUTE NEL FLUSSO
|
||||
TYPE(6)=NUMERO
|
||||
POSITION(6)=45
|
||||
LENGTH(6)=7
|
||||
MESSAGE(6) = _NRIBA,!TOT
|
||||
|
||||
NAME(7)=ZERO FILLED
|
||||
TYPE(7)=NUMERO
|
||||
POSITION(7)=52
|
||||
LENGTH(7)=15
|
||||
|
||||
NAME(8)=IMPORTO TOTALE DEL FLUSSO
|
||||
TYPE(8)= NUMERO
|
||||
POSITION(8)=67
|
||||
LENGTH(8)=15
|
||||
PICTURE(8)= @@@@@@@@@@@@@@@
|
||||
MESSAGE(8)=_IMPORTO,!TOT
|
||||
|
||||
NAME(9)=NUMERO RECORD
|
||||
TYPE(9)= NUMERO
|
||||
POSITION(9)=82
|
||||
LENGTH(9)=7
|
||||
MESSAGE(9) = _NRIBA,!NREC
|
||||
|
||||
NAME(10)=CAMPO ALTERABILE
|
||||
TYPE(10)=FISSO
|
||||
POSITION(10)=89
|
||||
LENGTH(10)=24
|
||||
|
||||
NAME(11)=CODICE MONETA
|
||||
TYPE(11)=STRINGA
|
||||
POSITION(11)=113
|
||||
LENGTH(11)=1
|
||||
MESSAGE(11) = _CODMON
|
||||
|
||||
NAME(12)=FILLER
|
||||
TYPE(12)=FISSO
|
||||
POSITION(12)=114
|
||||
LENGTH(12)=6
|
@ -541,14 +541,13 @@ NAME(7)=ZERO FILLED
|
||||
TYPE(7)=NUMERO
|
||||
POSITION(7)=52
|
||||
LENGTH(7)=15
|
||||
PICTURE(7)= @@@@@@@@@@@@@@@
|
||||
MESSAGE(7)=_IMPORTO,!TOT
|
||||
|
||||
NAME(8)=IMPORTO TOTALE DEL FLUSSO
|
||||
TYPE(8)= NUMERO
|
||||
POSITION(8)=67
|
||||
LENGTH(8)=15
|
||||
|
||||
PICTURE(8)= @@@@@@@@@@@@@@@
|
||||
MESSAGE(8)=_IMPORTO,!TOT
|
||||
|
||||
NAME(9)=NUMERO RECORD
|
||||
TYPE(9)= NUMERO
|
||||
|
@ -696,7 +696,7 @@ TTracciato770::TTracciato770(char tipo) : _tipo(tipo)
|
||||
add_field("Stato", 'N', 673, 1);
|
||||
add_field("Situazione", 'N', 674, 1);
|
||||
|
||||
add_field("Firma del dichiarante", 'N', 761, 1, 54); // 54
|
||||
add_field("Firma del dichiarante", 'B', 761, 1, 54); // 54
|
||||
|
||||
add_field("Redazione della dichiarazione", 'N', 796, 1, 74); // 74
|
||||
add_field("Numero comunicaz. lavoro dipendente", 'N', 797, 8);
|
||||
@ -705,7 +705,7 @@ TTracciato770::TTracciato770(char tipo) : _tipo(tipo)
|
||||
add_field("Casella prospetto ST", 'N', 814, 1);
|
||||
add_field("Casella prospetto SX", 'N', 815, 1);
|
||||
|
||||
add_field("Codice fiscale", 'C',1030,16, 90); // 90
|
||||
add_field("Codice fiscale", 'C',1020,16, 90); // 90
|
||||
add_field("Denominazione (Alternativo a 91 e 92)",'A',1036,60);
|
||||
add_field("Cognome", 'A',1096,24);
|
||||
add_field("Nome", 'A',1120,20);
|
||||
@ -774,7 +774,7 @@ TTracciato770::TTracciato770(char tipo) : _tipo(tipo)
|
||||
add_field("Numero record di tipo 'G'", 'N', 43, 9); // 6
|
||||
add_field("Numero record di tipo 'H'", 'N', 52, 9);
|
||||
add_field("Numero record di tipo 'J'", 'N', 61, 9);
|
||||
add_filler(61, 1837);
|
||||
add_filler(70, 1828);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <clifo.h>
|
||||
#include <cfven.h>
|
||||
|
||||
static TString8 __codmag;
|
||||
static int __codes;
|
||||
|
||||
class TArticoli_recordset : public TISAM_recordset
|
||||
@ -27,7 +28,7 @@ protected:
|
||||
|
||||
public:
|
||||
virtual TCursor* cursor() const;
|
||||
TArticoli_recordset(const char* use, bool sottoscorta, int codes) : TISAM_recordset(use), _sottoscorta(sottoscorta) { __codes = codes; }
|
||||
TArticoli_recordset(const char* use, bool sottoscorta, int codes, const char * codmag) : TISAM_recordset(use), _sottoscorta(sottoscorta) { __codes = codes; __codmag = codmag;}
|
||||
virtual ~TArticoli_recordset() {}
|
||||
};
|
||||
|
||||
@ -37,9 +38,9 @@ bool TArticoli_recordset::filtra_sottoscorta(const TRelation* rel)
|
||||
const TString codart = rel->curr(LF_ANAMAG).get(ANAMAG_CODART);
|
||||
TArticolo_giacenza artgiac(codart);
|
||||
|
||||
const real giac = artgiac.giacenza_anno(NULL, NULL, __codes);
|
||||
const real giac = artgiac.giacenza_anno(__codmag, NULL, __codes);
|
||||
|
||||
const bool ok = giac < artgiac.scorta_minima(NULL, NULL, __codes);
|
||||
const bool ok = giac < artgiac.scorta_minima(__codmag, NULL, __codes);
|
||||
((TRelation *)rel)->restore_status();
|
||||
return ok;
|
||||
}
|
||||
@ -168,13 +169,14 @@ void TGenera_ordini_mask::update_sheet()
|
||||
}
|
||||
|
||||
|
||||
TArticoli_recordset recset(query, get_bool(F_SOTTOSCORTA), esc.date2esc(TDate(TODAY)));
|
||||
TArticoli_recordset recset(query, get_bool(F_SOTTOSCORTA), esc.date2esc(TDate(TODAY)), get(F_MAG));
|
||||
TVariant var ;
|
||||
|
||||
var = grmerc;
|
||||
recset.set_var("#GRMERC", var);
|
||||
var = user();
|
||||
recset.set_var("#USER", var);
|
||||
TString8 codes; codes.format("%04d", esc.date2esc(TDate(TODAY)));
|
||||
|
||||
int i = 0;
|
||||
|
||||
@ -211,6 +213,8 @@ void TGenera_ordini_mask::update_sheet()
|
||||
row.add(recset.get(ANAMAG_USER8).as_string(), sf.cid2index(F_USER8));
|
||||
row.add(recset.get(ANAMAG_USER9).as_string(), sf.cid2index(F_USER9));
|
||||
row.add(recset.get(ANAMAG_USER10).as_string(), sf.cid2index(F_USER10));
|
||||
const real disp = art.disponibilita(codes, get(F_MAG), NULL);
|
||||
row.add(disp.string(), sf.cid2index(F_DISPON));
|
||||
sf.check_row(i++);
|
||||
}
|
||||
}
|
||||
|
23
or/or1400a.h
23
or/or1400a.h
@ -16,7 +16,7 @@
|
||||
#define F_DESDEP 164
|
||||
#define F_PREZZO 165
|
||||
#define F_CDCT 166
|
||||
#define F_FSCT 167
|
||||
#define F_FSCT 167
|
||||
#define F_NOTE 168
|
||||
#define F_SCODART 169
|
||||
#define F_SDESART 170
|
||||
@ -41,13 +41,14 @@
|
||||
#define F_DESCRAGG 114
|
||||
#define F_GIACENZA 115
|
||||
#define F_PPCONF 116
|
||||
#define F_USER1 117
|
||||
#define F_USER2 118
|
||||
#define F_USER3 119
|
||||
#define F_USER4 120
|
||||
#define F_USER5 121
|
||||
#define F_USER6 122
|
||||
#define F_USER7 123
|
||||
#define F_USER8 124
|
||||
#define F_USER9 125
|
||||
#define F_USER10 126
|
||||
#define F_DISPON 117
|
||||
#define F_USER1 118
|
||||
#define F_USER2 119
|
||||
#define F_USER3 120
|
||||
#define F_USER4 121
|
||||
#define F_USER5 122
|
||||
#define F_USER6 123
|
||||
#define F_USER7 124
|
||||
#define F_USER8 125
|
||||
#define F_USER9 126
|
||||
#define F_USER10 127
|
||||
|
@ -35,6 +35,7 @@ BEGIN
|
||||
ITEM "Descrizione aggiuntiva@50"
|
||||
ITEM "Giacenza@15"
|
||||
ITEM "Pezzi per conf.@15"
|
||||
ITEM "Disponibilità@15"
|
||||
ITEM "Campo Aggiuntivo 1@15"
|
||||
ITEM "Campo Aggiuntivo 2@15"
|
||||
ITEM "Campo Aggiuntivo 3@15"
|
||||
@ -415,13 +416,19 @@ END
|
||||
|
||||
NUMBER F_GIACENZA 15 5
|
||||
BEGIN
|
||||
PROMPT 2 18 "Giacenza"
|
||||
PROMPT 2 16 "Giacenza"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER F_PPCONF 15
|
||||
BEGIN
|
||||
PROMPT 2 19 "Pezzi per conf. "
|
||||
PROMPT 42 16 "Pezzi per conf. "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER F_DISPON 15 5
|
||||
BEGIN
|
||||
PROMPT 2 17 "Disponibilità"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
|
16
ps/pg0214.cpp
Executable file
16
ps/pg0214.cpp
Executable file
@ -0,0 +1,16 @@
|
||||
#include <xvt.h>
|
||||
|
||||
#include "pg0214.h"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
int n = argc > 1 ? atoi(argv[1]+1) : 0;
|
||||
switch(n)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
pg0214100(argc, argv); break; //stampa certificazioni per lib. Bonomo
|
||||
}
|
||||
exit(0);
|
||||
return 0;
|
||||
}
|
1
ps/pg0214.h
Executable file
1
ps/pg0214.h
Executable file
@ -0,0 +1 @@
|
||||
int pg0214100(int argc, char* argv[]);
|
233
ps/pg0214100.cpp
Executable file
233
ps/pg0214100.cpp
Executable file
@ -0,0 +1,233 @@
|
||||
#include "pg0214100a.h"
|
||||
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <modaut.h>
|
||||
#include <progind.h>
|
||||
#include <recarray.h>
|
||||
#include <relation.h>
|
||||
#include <reprint.h>
|
||||
#include <reputils.h>
|
||||
#include <textset.h>
|
||||
|
||||
#include "../cg/cg2103.h"
|
||||
#include "../cg/cglib02.h"
|
||||
#include "../cg/cgsaldac.h"
|
||||
#include "../ve/velib.h"
|
||||
|
||||
#include "clifo.h"
|
||||
#include "comuni.h"
|
||||
|
||||
#include <causali.h>
|
||||
#include <mov.h>
|
||||
#include <pconti.h>
|
||||
#include <rmov.h>
|
||||
#include <rmoviva.h>
|
||||
|
||||
|
||||
#include "../ve/velib.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// MASCHERA
|
||||
///////////////////////////////////////////////////////////
|
||||
class TCertificazioni_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
TCertificazioni_mask();
|
||||
virtual ~TCertificazioni_mask() {}
|
||||
};
|
||||
|
||||
TCertificazioni_mask::TCertificazioni_mask() : TAutomask("pg0214100a")
|
||||
{
|
||||
}
|
||||
|
||||
bool TCertificazioni_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////
|
||||
// REPORT
|
||||
/////////////////////////////////////////////////////////////
|
||||
class TCertificazioni_report : public TReport
|
||||
{
|
||||
protected:
|
||||
virtual bool use_mask() { return false; }
|
||||
public:
|
||||
TCertificazioni_report() {}
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////
|
||||
// CSV RECORDSET
|
||||
/////////////////////////////////////////////////////////////
|
||||
|
||||
class TCertificazioni_csv_recordset : public TCSV_recordset
|
||||
{
|
||||
protected:
|
||||
public:
|
||||
TCertificazioni_csv_recordset();
|
||||
};
|
||||
|
||||
TCertificazioni_csv_recordset::TCertificazioni_csv_recordset()
|
||||
: TCSV_recordset("CSV(,)\n")
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// APPLICAZIONE
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TCertificazioni : public TSkeleton_application
|
||||
{
|
||||
|
||||
virtual bool check_autorization() const {return false;}
|
||||
virtual const char * extra_modules() const {return "cg";}
|
||||
|
||||
protected:
|
||||
void elabora(const TMask& mask) const;
|
||||
void scrivi_csv(const TRectype& prima_riga, TCertificazioni_csv_recordset& csv) const;
|
||||
void genera_righe_tributi(const TMovimentoPN& movpn) const;
|
||||
|
||||
public:
|
||||
virtual bool create();
|
||||
virtual void main_loop();
|
||||
|
||||
};
|
||||
|
||||
|
||||
//crea il documento che contiene la riga che gli viene passata,cerca la riga generata ed in base al risultato della ricerca chiama..
|
||||
//..il metodo adatto
|
||||
void TCertificazioni::scrivi_csv(const TRectype& prima_riga, TCertificazioni_csv_recordset& csv) const
|
||||
{
|
||||
long numreg = prima_riga.get_long(RMV_NUMREG);
|
||||
|
||||
TMovimentoPN movpn;
|
||||
movpn.lfile().setkey(1);
|
||||
TRectype& mov = movpn.curr();
|
||||
mov.put(MOV_NUMREG, numreg);
|
||||
if (movpn.read() == NOERR)
|
||||
{
|
||||
genera_righe_tributi(movpn);
|
||||
}
|
||||
}
|
||||
|
||||
void TCertificazioni::genera_righe_tributi(const TMovimentoPN& movpn) const
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//metodo di base per la ricerca delle righe movimento che soddisfano le condizioni
|
||||
void TCertificazioni::elabora(const TMask& mask) const
|
||||
{
|
||||
//Tanto per cominciare stabilisce il range di date...
|
||||
const TDate dataini = mask.get_date(F_DADATA);
|
||||
const TDate datafin = mask.get_date(F_ADATA);
|
||||
|
||||
//Adesso tocca al codice articolo in base alla specie CONAI
|
||||
TConfig ditta_ini(CONFIG_DITTA, "ve");
|
||||
|
||||
//Adesso prende i conti da verificare
|
||||
TSheet_field& sf = mask.sfield(F_CONTI);
|
||||
|
||||
//la query e' sulle righe movimento
|
||||
//cerca le righe con numerazione e tipo indicate nello sheet;prende sia le righe che generano CONAI (per avere il codice conai,..
|
||||
//..le quantita' etc) e le righe generate da CONAI (per avere i prezzi)
|
||||
TString query;
|
||||
query << "USE RMOV KEY 1\n";
|
||||
query << "SELECT (NUM(ANSI(23.DATAMOV))>=NUM(ANSI(#DADATA)))&&(NUM(ANSI(23.DATAMOV))<=NUM(ANSI(#ADATA)))\n";
|
||||
query << "JOIN MOV INTO NUMREG==NUMREG\n";
|
||||
query << "FROM GRUPPO=#GRUPPO CONTO=#CONTO SOTTOCONTO=#SOTTOCONTO\n";
|
||||
query << "TO GRUPPO=#GRUPPO CONTO=#CONTO SOTTOCONTO=#SOTTOCONTO\n";
|
||||
|
||||
TISAM_recordset rmov(query);
|
||||
|
||||
rmov.set_var("#DADATA", dataini);
|
||||
rmov.set_var("#ADATA", datafin);
|
||||
|
||||
//creazione del csv recordset che verra' riempito dai record del recordset rdoc
|
||||
TCertificazioni_csv_recordset* csv = new TCertificazioni_csv_recordset;
|
||||
|
||||
//quante righe dello sheet processa?
|
||||
const long tot_items = sf.items();
|
||||
|
||||
//Visto che e' possibile avere una secchiata di conti, gli tocca fare un giro per ogni conto
|
||||
FOR_EACH_SHEET_ROW(sf, r, row)
|
||||
{
|
||||
//estrazione definitiva dei record che soddisfano il casino di parametri richiesti
|
||||
rmov.set_var("#GRUPPO", TVariant(row->get(0)));
|
||||
rmov.set_var("#CONTO", TVariant(row->get(1)));
|
||||
rmov.set_var("#SOTTOCONTO", TVariant(row->get(2)));
|
||||
|
||||
//quanti record validi ha trovato?
|
||||
const long items = rmov.items();
|
||||
|
||||
//E crea pure la progind..
|
||||
TProgind pi(tot_items, TR("Generazione righe..."), true, true);
|
||||
|
||||
long last_nmov = 0;
|
||||
|
||||
//Scansione del recordset trovato
|
||||
for (bool ok = rmov.move_first(); ok; ok = rmov.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
|
||||
const long nmov = rmov.get(RMV_NUMREG).as_int();
|
||||
if (nmov != last_nmov)
|
||||
{
|
||||
scrivi_csv(rmov.cursor()->curr(), *csv);
|
||||
last_nmov = nmov;
|
||||
}
|
||||
|
||||
} //for(bool ok = rmov.move_first(..
|
||||
|
||||
} //FOR_EACH...
|
||||
|
||||
|
||||
//creazione del report di stampa
|
||||
TCertificazioni_report rep;
|
||||
bool ok = rep.load("pg0214100a");
|
||||
//setta il recordset...
|
||||
//deve settare almeno un campo manualmente perche' funzioni la mask2report
|
||||
csv->set_var("#EMAIL", TVariant("Manca la email"), true);
|
||||
rep.set_recordset(csv);
|
||||
//..e poi carica i valori sulla maschera nel report!!!!
|
||||
rep.mask2report(mask);
|
||||
|
||||
if (ok)
|
||||
{
|
||||
TReport_book book;
|
||||
ok = book.add(rep);
|
||||
if (ok)
|
||||
book.print_or_preview();
|
||||
}
|
||||
}
|
||||
|
||||
void TCertificazioni::main_loop()
|
||||
{
|
||||
TCertificazioni_mask mask;
|
||||
mask.field(F_CODDITTA).check(RUNNING_CHECK);
|
||||
while (mask.run() == K_ENTER)
|
||||
{
|
||||
elabora(mask);
|
||||
}
|
||||
}
|
||||
|
||||
bool TCertificazioni::create()
|
||||
{
|
||||
if (!has_module(DCAUT))
|
||||
return error_box(TR("Modulo non autorizzato"));
|
||||
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
int pg0214100(int argc, char* argv[])
|
||||
{
|
||||
TCertificazioni dc;
|
||||
dc.run(argc, argv, TR("Stampa certificazioni"));
|
||||
return 0;
|
||||
}
|
14
ps/pg0214100a.h
Executable file
14
ps/pg0214100a.h
Executable file
@ -0,0 +1,14 @@
|
||||
// campi della maschera
|
||||
|
||||
#define F_CODDITTA 101
|
||||
#define F_RAGSOC 102
|
||||
#define F_DADATA 103
|
||||
#define F_ADATA 104
|
||||
#define F_CONTI 105
|
||||
|
||||
// campi dello sheet
|
||||
#define F_GRUPPO 101
|
||||
#define F_CONTO 102
|
||||
#define F_SOTTOCONTO 103
|
||||
#define F_CAUSALE 104
|
||||
#define F_TRIBUTO 105
|
48
ps/pg0214100a.rep
Executable file
48
ps/pg0214100a.rep
Executable file
@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="pg0214100a" lpi="6">
|
||||
<description>Stampa certificazioni</description>
|
||||
<font face="Courier New" size="10" />
|
||||
<section type="Head">
|
||||
<field border="2" x="1" y="1" type="Testo" align="center" width="79" height="3.5" pattern="1" text="DICHIARAZIONE
|
||||
Ai sensi dell'art. 4 comma 6 ter., DPR n .....">
|
||||
<font face="Courier New" bold="1" size="14" />
|
||||
</field>
|
||||
<field x="2" y="6" type="Testo" width="10" pattern="1" text="La ditta" />
|
||||
<field x="11" y="6" type="Stringa" width="50" pattern="1">
|
||||
<source>#SYSTEM.RAGSOC</source>
|
||||
</field>
|
||||
<field x="62" y="6" type="Testo" width="15" pattern="1" text="Codice fiscale" />
|
||||
<field x="2" y="8" type="Testo" width="18" pattern="1" text="Domicilio fiscale" />
|
||||
<field x="36" y="10" type="Testo" width="10" pattern="1" text="DICHIARA">
|
||||
<font face="Courier New" bold="1" size="12" />
|
||||
</field>
|
||||
<field x="2" y="12" type="Testo" width="38" pattern="1" text="di aver corrisposto nel periodo " />
|
||||
</section>
|
||||
<section type="Head" level="1" />
|
||||
<section type="Body" />
|
||||
<section type="Body" level="1">
|
||||
<field x="1" y="1" type="Stringa" width="30" pattern="1">
|
||||
<source>A</source>
|
||||
</field>
|
||||
<field x="32" y="1" type="Prezzo" align="right" width="10" pattern="1" text="#########,@@">
|
||||
<source>B</source>
|
||||
</field>
|
||||
<field x="43" y="1" type="Prezzo" align="right" width="10" pattern="1" text="#########,@@">
|
||||
<source>C</source>
|
||||
</field>
|
||||
<field x="54" y="1" type="Prezzo" align="right" width="10" pattern="1" text="#########,@@">
|
||||
<source>D</source>
|
||||
</field>
|
||||
<field x="65" y="1" type="Numero" align="right" width="5" pattern="1" text="@@,##">
|
||||
<source>E</source>
|
||||
</field>
|
||||
<field x="71" y="1" type="Prezzo" align="right" width="10" pattern="1" text="#########,@@">
|
||||
<source>F</source>
|
||||
</field>
|
||||
<field x="82" y="1" type="Prezzo" align="right" width="10" pattern="1" text="#########,@@">
|
||||
<source>H</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" />
|
||||
<section type="Foot" level="1" />
|
||||
</report>
|
151
ps/pg0214100a.uml
Executable file
151
ps/pg0214100a.uml
Executable file
@ -0,0 +1,151 @@
|
||||
#include "pg0214100a.h"
|
||||
|
||||
TOOLBAR "" 0 -5 0 4
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -11 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Stampa certificazioni" -1 -1 78 10
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 0 "@bDitta"
|
||||
END
|
||||
|
||||
NUMBER F_CODDITTA 5
|
||||
BEGIN
|
||||
PROMPT 2 1 "Codice "
|
||||
FLAGS "GDF"
|
||||
USE LF_NDITTE
|
||||
INPUT CODDITTA F_CODDITTA
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 17 1 "Rag.Soc. "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 4
|
||||
BEGIN
|
||||
PROMPT 1 3 "@bMovimenti"
|
||||
END
|
||||
|
||||
DATE F_DADATA
|
||||
BEGIN
|
||||
PROMPT 2 4 "Data iniziale "
|
||||
FIELD #DADATA
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
DATE F_ADATA
|
||||
BEGIN
|
||||
PROMPT 2 5 "Data finale "
|
||||
FIELD #ADATA
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
SPREADSHEET F_CONTI
|
||||
BEGIN
|
||||
PROMPT 2 7 "Conti/causali/tributi"
|
||||
ITEM "Gruppo"
|
||||
ITEM "Conto"
|
||||
ITEM "Sottoconto"
|
||||
ITEM "Causale"
|
||||
ITEM "tributo"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "CONTI" 4 10 70 10
|
||||
|
||||
NUMBER F_GRUPPO 3
|
||||
BEGIN
|
||||
PROMPT 2 2 "Gruppo "
|
||||
USE LF_PCON SELECT (CONTO="")
|
||||
INPUT GRUPPO F_GRUPPO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_GRUPPO GRUPPO
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Gruppo assente"
|
||||
END
|
||||
|
||||
NUMBER F_CONTO 3
|
||||
BEGIN
|
||||
PROMPT 2 3 "Conto "
|
||||
USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="")
|
||||
INPUT GRUPPO F_GRUPPO
|
||||
INPUT CONTO F_CONTO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_GRUPPO GRUPPO
|
||||
OUTPUT F_CONTO CONTO
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Conto assente"
|
||||
END
|
||||
|
||||
NUMBER F_SOTTOCONTO 6
|
||||
BEGIN
|
||||
PROMPT 2 4 "Sottoconto "
|
||||
USE LF_PCON SELECT (SOTTOCONTO!="")
|
||||
COPY INPUT F_CONTO
|
||||
INPUT SOTTOCONTO F_SOTTOCONTO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_SOTTOCONTO SOTTOCONTO
|
||||
OUTPUT F_GRUPPO GRUPPO
|
||||
OUTPUT F_CONTO CONTO
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Sottoconto assente"
|
||||
END
|
||||
|
||||
STRING F_CAUSALE 20
|
||||
BEGIN
|
||||
PROMPT 2 5 "Causale "
|
||||
END
|
||||
|
||||
STRING F_TRIBUTO 4
|
||||
BEGIN
|
||||
PROMPT 2 6 ""
|
||||
USE %TRB //SELECT S6=="E"
|
||||
INPUT CODTAB F_TRIBUTO
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@70" S0
|
||||
OUTPUT F_TRIBUTO CODTAB
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 10 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 10 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
108
ps/pg9000.uml
Executable file
108
ps/pg9000.uml
Executable file
@ -0,0 +1,108 @@
|
||||
#include "pg9000a.h"
|
||||
|
||||
PAGE "Stampa Conferimenti" -1 -1 78 10
|
||||
|
||||
|
||||
DATE F_DADATA
|
||||
BEGIN
|
||||
PROMPT 2 1 "Movimenti Da data "
|
||||
FIELD #DADATA
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
DATE F_ADATA
|
||||
BEGIN
|
||||
PROMPT 30 1 "A data "
|
||||
FIELD #ADATA
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
|
||||
SPREADSHEET F_CONTI
|
||||
BEGIN
|
||||
PROMPT 4 5 "Tabella Codici IVA"
|
||||
ITEM "Gruppo"
|
||||
ITEM "Conto"
|
||||
ITEM "Sottoconto"
|
||||
ITEM "Causale"
|
||||
ITEM "Codice tributo"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "CONTI" 4 10 70 10
|
||||
|
||||
NUMBER F_GRUPPO 3
|
||||
BEGIN
|
||||
PROMPT 2 6 "Gruppo "
|
||||
USE LF_PCON SELECT (CONTO="")
|
||||
INPUT GRUPPO F_GRUPPO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_GRUPPO GRUPPO
|
||||
OUTPUT F_DESGRUPPO DESCR
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Gruppo assente"
|
||||
END
|
||||
|
||||
NUMBER F_CONTO 3
|
||||
BEGIN
|
||||
PROMPT 2 7 "Conto "
|
||||
USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="")
|
||||
INPUT GRUPPO F_GRUPPO
|
||||
INPUT CONTO F_CONTO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Tipo" TMCF
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_CONTO CONTO
|
||||
OUTPUT F_TIPO TMCF
|
||||
OUTPUT F_GRUPPO GRUPPO
|
||||
OUTPUT F_DESCONTO DESCR
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Conto assente"
|
||||
END
|
||||
|
||||
NUMBER F_SOTTOCONTO 6
|
||||
BEGIN
|
||||
PROMPT 2 8 "Sottoconto "
|
||||
USE LF_PCON SELECT (SOTTOCONTO!="")
|
||||
COPY INPUT F_CONTO
|
||||
INPUT SOTTOCONTO F_SOTTOCONTO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_SOTTOCONTO SOTTOCONTO
|
||||
OUTPUT F_GRUPPO GRUPPO
|
||||
OUTPUT F_CONTO CONTO
|
||||
OUTPUT F_DESSOTTOC DESCR
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Sottoconto assente"
|
||||
GROUP 1 4
|
||||
END
|
||||
|
||||
STRING F_CAUS 20
|
||||
BEGIN
|
||||
PROMPT 23 16 ""
|
||||
CHECKTYPE SEARCH
|
||||
GROUP 5
|
||||
END
|
||||
|
||||
STRING 101 4
|
||||
BEGIN
|
||||
PROMPT 1 2 ""
|
||||
USE %TRB SELECT S6=="E"
|
||||
INPUT CODTAB 101
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@70" S0
|
||||
OUTPUT 101 CODTAB
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD TRIBUTO
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
643
ps/ps0214100.cpp
Executable file
643
ps/ps0214100.cpp
Executable file
@ -0,0 +1,643 @@
|
||||
#include "tp0900a.h"
|
||||
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <modaut.h>
|
||||
#include <progind.h>
|
||||
#include <recarray.h>
|
||||
#include <relation.h>
|
||||
#include <reprint.h>
|
||||
#include <reputils.h>
|
||||
#include <textset.h>
|
||||
|
||||
#include <clifo.h>
|
||||
#include <doc.h>
|
||||
#include <rdoc.h>
|
||||
|
||||
#include "../ve/velib.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// MASCHERA
|
||||
///////////////////////////////////////////////////////////
|
||||
class TDichiarazione_CONAI_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
TDichiarazione_CONAI_mask();
|
||||
virtual ~TDichiarazione_CONAI_mask() {}
|
||||
};
|
||||
|
||||
TDichiarazione_CONAI_mask::TDichiarazione_CONAI_mask() : TAutomask("tp0900a")
|
||||
{
|
||||
}
|
||||
|
||||
bool TDichiarazione_CONAI_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
switch (o.dlg())
|
||||
{
|
||||
case F_PERIODO:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////
|
||||
// REPORT
|
||||
/////////////////////////////////////////////////////////////
|
||||
class TDichiarazione_CONAI_report : public TReport
|
||||
{
|
||||
protected:
|
||||
virtual bool use_mask() { return false; }
|
||||
public:
|
||||
TDichiarazione_CONAI_report() {}
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////
|
||||
// CSV RECORDSET
|
||||
/////////////////////////////////////////////////////////////
|
||||
|
||||
class TDichiarazione_CONAI_csv_recordset : public TCSV_recordset
|
||||
{
|
||||
protected:
|
||||
//virtual const TVariant& get(const char* field_name) const;
|
||||
public:
|
||||
TDichiarazione_CONAI_csv_recordset();
|
||||
};
|
||||
|
||||
|
||||
/*const TDichiarazione_CONAI_csv_recordset::get(const char* field_name) const
|
||||
{
|
||||
if (*field_name == '#')
|
||||
{
|
||||
if (strcmp(field_name, "#RAGSOC") == 0)
|
||||
{
|
||||
TVariant& var = get_tmp_var();
|
||||
var = mask.;
|
||||
}
|
||||
return var;
|
||||
}
|
||||
return NULL_VARIANT;
|
||||
}*/
|
||||
|
||||
|
||||
TDichiarazione_CONAI_csv_recordset::TDichiarazione_CONAI_csv_recordset()
|
||||
: TCSV_recordset("CSV(,)\n")
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// APPLICAZIONE
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TDichiarazione_CONAI : public TSkeleton_application
|
||||
{
|
||||
|
||||
protected:
|
||||
void elabora(const TMask& mask) const;
|
||||
void scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv,
|
||||
const int conai_specie, const TString& conai_codart) const;
|
||||
void scrivi_csv_doc_con_riga_generata(TDocumento& doc, const int n_riga_generata,
|
||||
TDichiarazione_CONAI_csv_recordset& csv, const int conai_specie) const;
|
||||
void scrivi_csv_doc_speciale(TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv,
|
||||
const int conai_specie, const TString& conai_codart) const;
|
||||
|
||||
public:
|
||||
virtual bool create();
|
||||
virtual void main_loop();
|
||||
|
||||
};
|
||||
|
||||
|
||||
//riempie recordset con le righe CONAI del documento che contiene una riga generata CONAI
|
||||
void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(TDocumento& doc, const int n_riga_generata, TDichiarazione_CONAI_csv_recordset& csv,
|
||||
const int conai_specie) const
|
||||
{
|
||||
//prende dalla riga i dati che gli servono per fare vari calcoli
|
||||
const TRiga_documento& riga_generata = doc[n_riga_generata];
|
||||
const TString80 conai_codart = riga_generata.get(RDOC_CODART); //questo ci serve per trovare le righe conai
|
||||
const real totale_qta_assogg = riga_generata.get_real(RDOC_QTA); //questo ci serve per le quantita' assoggetate o no
|
||||
|
||||
TGeneric_distrib agip(totale_qta_assogg, 5); //distrib per ridistribuire le % dei quantitativi assoggetati
|
||||
TArray qta_AB_conai; //array con le quantita' conai totali (A+B)
|
||||
|
||||
//scopre se il doc e' una NAC
|
||||
const bool is_nac = doc.is_nota_credito();
|
||||
|
||||
//prende la data del documento
|
||||
const TDate& datadoc = doc.data();
|
||||
|
||||
//prende il cliente ed i suoi dati
|
||||
TCli_for clifo = doc.clifor();
|
||||
const long clifo_cod = clifo.codice();
|
||||
TString16 clifo_cofi = clifo.get(CLI_COFI);
|
||||
if (clifo_cofi.empty())
|
||||
clifo_cofi = clifo.get(CLI_PAIV);
|
||||
|
||||
const int nrighe = doc.rows();
|
||||
|
||||
//ciclo di creazione del distrib con le quote conai
|
||||
for (int j = 1; j <= nrighe; j++)
|
||||
{
|
||||
const TRiga_documento& rdoc = doc[j];
|
||||
|
||||
//servono SOLO le righe CONAI!!!!!
|
||||
const TString& codagg1 = rdoc.get(RDOC_CODAGG1);
|
||||
|
||||
if (codagg1 == conai_codart)
|
||||
{
|
||||
//quantita' totale conai (A + B) sul report
|
||||
const real n = rdoc.calc_conai_qta(conai_specie);
|
||||
qta_AB_conai.add(n, j); //va calcolato con il metodo apposito
|
||||
|
||||
//quantita' assoggettata (B) sul report
|
||||
agip.add(n);
|
||||
}
|
||||
}
|
||||
|
||||
//ciclo di riempimento delle righe csv;scandisce solo l'array con i valori compilati
|
||||
FOR_EACH_ARRAY_ROW(qta_AB_conai, i, obj)
|
||||
{
|
||||
const TRiga_documento& rdoc = doc[i];
|
||||
|
||||
//servono SOLO le righe CONAI!!!!!
|
||||
const TString& codagg1 = rdoc.get(RDOC_CODAGG1);
|
||||
|
||||
if (codagg1 == conai_codart)
|
||||
{
|
||||
//se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica
|
||||
TString4 codagg2 = rdoc.get(RDOC_CODAGG2);
|
||||
if (codagg2.empty())
|
||||
codagg2 = codagg1;
|
||||
//puo' capitare che la sottocategoria sia stata troncata alla categoria
|
||||
if (codagg2 == codagg1)
|
||||
codagg2 << "99";
|
||||
|
||||
//creazione di un nuovo record da esportare
|
||||
csv.new_rec("");
|
||||
|
||||
//riempie i campi del record del csv
|
||||
//codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-codagg2-prezzo-um-conai(AB)-conai(B)-conai(A)
|
||||
//parte chiave della riga
|
||||
csv.set(0, TVariant(rdoc.get(RDOC_CODNUM)));
|
||||
csv.set(1, TVariant(rdoc.get(RDOC_ANNO)));
|
||||
csv.set(2, TVariant(rdoc.get(RDOC_NDOC)));
|
||||
csv.set(3, TVariant(datadoc));
|
||||
csv.set(4, TVariant(clifo_cod));
|
||||
csv.set(5, TVariant(clifo_cofi));
|
||||
csv.set(6, TVariant(rdoc.get(RDOC_CODART)));
|
||||
csv.set(7, TVariant(rdoc.get(RDOC_NRIGA)));
|
||||
|
||||
//codici conai
|
||||
csv.set(8, TVariant(codagg1)); //codice materiale conai (es. carta, legno...)
|
||||
csv.set(9, TVariant(codagg2)); //sottocodice materiale (es. carta imballo, busta...)
|
||||
|
||||
//prezzo
|
||||
const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata
|
||||
csv.set(10, TVariant(prezzo));
|
||||
|
||||
//um conai
|
||||
const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP
|
||||
csv.set(11, TVariant(umqta));
|
||||
|
||||
//quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato)
|
||||
real qta_tot_conai = (real&)qta_AB_conai[i];
|
||||
if (is_nac)
|
||||
qta_tot_conai = -qta_tot_conai;
|
||||
csv.set(15, TVariant(qta_tot_conai));
|
||||
|
||||
//percentuale di esenzione conai al 100%?
|
||||
const real perc = rdoc.get_real(RDOC_QTAGG2);
|
||||
|
||||
//quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato)
|
||||
real qta_assoggettata_conai = agip.get();
|
||||
|
||||
if (perc == CENTO)
|
||||
qta_assoggettata_conai = ZERO;
|
||||
|
||||
if (is_nac)
|
||||
qta_assoggettata_conai = -qta_assoggettata_conai;
|
||||
csv.set(13, TVariant(qta_assoggettata_conai));
|
||||
|
||||
//quantita' esente conai (A) sul report
|
||||
const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai;
|
||||
csv.set(12, TVariant(qta_esente_conai));
|
||||
|
||||
//valore totale contributo (BxC) sul report
|
||||
const TCurrency totale_contrib_conai = qta_assoggettata_conai * prezzo;
|
||||
csv.set(14, TVariant(totale_contrib_conai.get_num()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//riempie recordset con le righe CONAI del documento che NON ha una riga generata CONAI;trattasi di documenti..
|
||||
//..farlocchi costruiti ad arte per correggere le vaccate dei rompiscatolifici
|
||||
void TDichiarazione_CONAI::scrivi_csv_doc_speciale(TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv,
|
||||
const int conai_specie, const TString& conai_codart) const
|
||||
{
|
||||
//scopre se il doc e' una NAC
|
||||
const bool is_nac = doc.is_nota_credito();
|
||||
|
||||
//prende la data del documento
|
||||
const TDate& datadoc = doc.data();
|
||||
|
||||
//prende il cliente ed i suoi dati
|
||||
TCli_for clifo = doc.clifor();
|
||||
const long clifo_cod = clifo.codice();
|
||||
TString16 clifo_cofi = clifo.get(CLI_COFI);
|
||||
if (clifo_cofi.empty())
|
||||
clifo_cofi = clifo.get(CLI_PAIV);
|
||||
|
||||
const int nrighe = doc.rows();
|
||||
|
||||
//ciclo di riempimento delle righe csv;scandisce solo l'array con i valori compilati
|
||||
for (int i = 1; i <= nrighe; i++)
|
||||
{
|
||||
const TRiga_documento& rdoc = doc[i];
|
||||
|
||||
//servono SOLO le righe CONAI!!!!!
|
||||
const TString& codagg1 = rdoc.get(RDOC_CODAGG1);
|
||||
|
||||
if (codagg1 == conai_codart)
|
||||
{
|
||||
//se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica
|
||||
TString4 codagg2 = rdoc.get(RDOC_CODAGG2);
|
||||
if (codagg2.empty())
|
||||
codagg2 = codagg1;
|
||||
//puo' capitare che la sottocategoria sia stata troncata alla categoria
|
||||
if (codagg2 == codagg1)
|
||||
codagg2 << "99";
|
||||
|
||||
//creazione di un nuovo record da esportare
|
||||
csv.new_rec("");
|
||||
|
||||
//riempie i campi del record del csv
|
||||
//codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-codagg2-prezzo-um-conai(AB)-conai(B)-conai(A)
|
||||
//parte chiave della riga
|
||||
csv.set(0, TVariant(rdoc.get(RDOC_CODNUM)));
|
||||
csv.set(1, TVariant(rdoc.get(RDOC_ANNO)));
|
||||
csv.set(2, TVariant(rdoc.get(RDOC_NDOC)));
|
||||
csv.set(3, TVariant(datadoc));
|
||||
csv.set(4, TVariant(clifo_cod));
|
||||
csv.set(5, TVariant(clifo_cofi));
|
||||
csv.set(6, TVariant(rdoc.get(RDOC_CODART)));
|
||||
csv.set(7, TVariant(rdoc.get(RDOC_NRIGA)));
|
||||
|
||||
//codici conai
|
||||
csv.set(8, TVariant(codagg1)); //codice materiale conai (es. carta, legno...)
|
||||
csv.set(9, TVariant(codagg2)); //sottocodice materiale (es. carta imballo, busta...)
|
||||
|
||||
//prezzo
|
||||
const real prezzo = rdoc.get_real(RDOC_PREZZO); //va preso dalla riga stessa
|
||||
csv.set(10, TVariant(prezzo));
|
||||
|
||||
//um conai
|
||||
const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP
|
||||
csv.set(11, TVariant(umqta));
|
||||
|
||||
//quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato)
|
||||
real qta_tot_conai = rdoc.get_real(RDOC_QTA);
|
||||
if (is_nac)
|
||||
qta_tot_conai = -qta_tot_conai;
|
||||
csv.set(15, TVariant(qta_tot_conai));
|
||||
|
||||
//percentuale di esenzione conai al 100%?
|
||||
const real perc = rdoc.get_real(RDOC_QTAGG2);
|
||||
|
||||
//quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato)
|
||||
real qta_assoggettata_conai = qta_tot_conai;
|
||||
|
||||
if (perc == CENTO)
|
||||
qta_assoggettata_conai = ZERO;
|
||||
|
||||
if (is_nac)
|
||||
qta_assoggettata_conai = -qta_assoggettata_conai;
|
||||
csv.set(13, TVariant(qta_assoggettata_conai));
|
||||
|
||||
//quantita' esente conai (A) sul report
|
||||
const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; //deve essere sempre ZERO!
|
||||
csv.set(12, TVariant(qta_esente_conai));
|
||||
|
||||
//valore totale contributo (BxC) sul report
|
||||
const TCurrency totale_contrib_conai = qta_assoggettata_conai * prezzo;
|
||||
csv.set(14, TVariant(totale_contrib_conai.get_num()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//crea il documento che contiene la riga che gli viene passata,cerca la riga generata ed in base al risultato della ricerca chiama..
|
||||
//..il metodo adatto
|
||||
void TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv,
|
||||
const int conai_specie, const TString& conai_codart) const
|
||||
{
|
||||
//crea la testata delle righedoc per poter fare vari calcoli (e intanto il tempo se ne va...)
|
||||
const int anno = prima_riga.get_int(RDOC_ANNO);
|
||||
const TString4 codnum = prima_riga.get(RDOC_CODNUM);
|
||||
const long numdoc = prima_riga.get_long(RDOC_NDOC);
|
||||
|
||||
//documento della prima riga e quindi anche di tutte le altre righe conai
|
||||
TDocumento doc('D', anno, codnum, numdoc);
|
||||
|
||||
//cerca la riga generata (in tal caso e' un documento con righe CONAI giuste)
|
||||
const int nrighe = doc.rows();
|
||||
|
||||
int n_riga_generata = 0;
|
||||
for (int j = 1; j <= nrighe; j++)
|
||||
{
|
||||
const TRiga_documento& rdoc = doc[j];
|
||||
//c'è la riga generata con codart di tipo conai (sia automatica che manuale)?
|
||||
if (rdoc.get(RDOC_CODART) == conai_codart && (rdoc.is_spese() || rdoc.is_generata()))
|
||||
{
|
||||
n_riga_generata = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (n_riga_generata > 0)
|
||||
scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie);
|
||||
else
|
||||
scrivi_csv_doc_speciale(doc, csv, conai_specie, conai_codart);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static int compare_csv_rows_specie(const TObject** o1, const TObject** o2)
|
||||
{
|
||||
TToken_string& s1 = *(TToken_string*)*o1;
|
||||
TToken_string& s2 = *(TToken_string*)*o2;
|
||||
|
||||
//deve ordinare sul campo 8 (codagg2 = codice specie conai)
|
||||
const TString& c1 = s1.get(8);
|
||||
const TString& c2 = s2.get(8);
|
||||
|
||||
int cmp = c1.compare(c2);
|
||||
|
||||
// sotto ordinamento per codice cliente (campo 4)
|
||||
if (cmp == 0)
|
||||
{
|
||||
const TString& c1 = s1.get(4);
|
||||
const TString& c2 = s2.get(4);
|
||||
cmp = c1.compare(c2);
|
||||
|
||||
// sotto-sotto ordinamento per ndoc (campo 2)
|
||||
if (cmp == 0)
|
||||
{
|
||||
const TString& c1 = s1.get(2);
|
||||
const TString& c2 = s2.get(2);
|
||||
cmp = c1.compare(c2);
|
||||
}
|
||||
}
|
||||
|
||||
return cmp;
|
||||
}
|
||||
|
||||
static int compare_csv_rows_cofi(const TObject** o1, const TObject** o2)
|
||||
{
|
||||
TToken_string& s1 = *(TToken_string*)*o1;
|
||||
TToken_string& s2 = *(TToken_string*)*o2;
|
||||
|
||||
//deve ordinare sul campo cofi/piva
|
||||
const TString& c1 = s1.get(5);
|
||||
const TString& c2 = s2.get(5);
|
||||
int cmp = c1.compare(c2);
|
||||
|
||||
return cmp;
|
||||
}
|
||||
|
||||
//metodo di base per la ricerca delle righe documento che soddisfano i parametri dell'utonto
|
||||
void TDichiarazione_CONAI::elabora(const TMask& mask) const
|
||||
{
|
||||
//Tanto per cominciare stabilisce il range di date...
|
||||
const int anno = mask.get_int(F_ANNO);
|
||||
|
||||
TDate dataini(1, 1, anno);
|
||||
TDate datafin(31, 12, anno);
|
||||
|
||||
const int tipo_periodo = mask.get_int(F_PERIODO);
|
||||
//se il periodo scelto non e' un anno intero...
|
||||
switch (tipo_periodo)
|
||||
{
|
||||
case 2:
|
||||
{
|
||||
const int mese = mask.get_int(F_TRIMESTRE);
|
||||
dataini.set_month(mese);
|
||||
datafin = dataini;
|
||||
datafin.addmonth(2);
|
||||
datafin.set_end_month();
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
const int mese = mask.get_int(F_MESE);
|
||||
dataini.set_month(mese);
|
||||
datafin = dataini;
|
||||
datafin.set_end_month();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
//Adesso tocca al codice articolo in base alla specie CONAI
|
||||
const int specie_conai = mask.get_int(F_SPECIECONAI);
|
||||
TConfig ditta_ini(CONFIG_DITTA, "ve");
|
||||
|
||||
TVariant codart;
|
||||
TString nome_report; //report di tipo 6.1 scelto in base alla specie conai
|
||||
|
||||
switch (specie_conai)
|
||||
{
|
||||
case 0:
|
||||
codart = ditta_ini.get("CODACC"); //acciaio
|
||||
nome_report = "tp0900ac.rep";
|
||||
break;
|
||||
case 1:
|
||||
codart = ditta_ini.get("CODALL"); //alluminio
|
||||
nome_report = "tp0900al.rep";
|
||||
break;
|
||||
case 2:
|
||||
codart = ditta_ini.get("CODCAR"); //carta
|
||||
nome_report = "tp0900ca.rep";
|
||||
break;
|
||||
case 3:
|
||||
codart = ditta_ini.get("CODPLA"); //plastica
|
||||
nome_report = "tp0900pl.rep";
|
||||
break;
|
||||
case 4:
|
||||
codart = ditta_ini.get("CODLEG"); //legno
|
||||
nome_report = "tp0900le.rep";
|
||||
break;
|
||||
case 5:
|
||||
codart = ditta_ini.get("CODVET"); //vetro
|
||||
nome_report = "tp0900ve.rep";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
//In caso il tipo stampa NON sia con il modello 6.1 basato sulla specie conai ma di tipo 6.3 basato sui..
|
||||
//fornitori e le loro esenzioni, il report va rinominato perche' e' unico
|
||||
if (mask.get_int(F_TIPOSTAMPA) == 2)
|
||||
nome_report = "tp0900es.rep";
|
||||
|
||||
//Adesso prende le numerazioni e i tipi documento
|
||||
TSheet_field& sf = mask.sfield(F_TIPI);
|
||||
|
||||
//la query e' sulle righe documento
|
||||
//cerca le righe con numerazione e tipo indicate nello sheet;prende sia le righe che generano CONAI (per avere il codice conai,..
|
||||
//..le quantita' etc) e le righe generate da CONAI (per avere i prezzi)
|
||||
TString query;
|
||||
/* query << "USE RDOC KEY 5\n";
|
||||
query << "SELECT (NUM(ANSI(33.DATADOC))>=NUM(ANSI(#DADATA)))&&(NUM(ANSI(33.DATADOC))<=NUM(ANSI(#ADATA)))&&(33.TIPODOC=#TIPODOC)&&(GENERATA=\"X\")\n";
|
||||
query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n";
|
||||
query << "FROM CODART=#CODART ANNO=#ANNO CODNUM=#CODNUM PROVV=\"D\"\n";
|
||||
query << "TO CODART=#CODART ANNO=#ANNO CODNUM=#CODNUM PROVV=\"D\"\n";*/
|
||||
|
||||
query << "USE RDOC KEY 1\n";
|
||||
query << "SELECT (NUM(ANSI(33.DATADOC))>=NUM(ANSI(#DADATA)))&&(NUM(ANSI(33.DATADOC))<=NUM(ANSI(#ADATA)))&&(33.TIPODOC=#TIPODOC)&&(CODAGG1=#CODART)\n";
|
||||
query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n";
|
||||
query << "FROM CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"\n";
|
||||
query << "TO CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"\n";
|
||||
|
||||
//crea il recordset principale relativo alle righe originali CONAI ed assegna subito i valori delle variabili che restano costanti al cambio..
|
||||
//..numerazione/tipo: sono le date ed il codice articolo
|
||||
TISAM_recordset rdoc(query);
|
||||
|
||||
rdoc.set_var("#ANNO", TVariant((long)anno));
|
||||
rdoc.set_var("#DADATA", dataini);
|
||||
rdoc.set_var("#ADATA", datafin);
|
||||
rdoc.set_var("#CODART", codart);
|
||||
|
||||
//creazione del csv recordset che verra' riempito dai record del recordset rdoc
|
||||
TDichiarazione_CONAI_csv_recordset* csv = new TDichiarazione_CONAI_csv_recordset;
|
||||
|
||||
//quante righe dello sheet processa?
|
||||
const long tot_items = sf.items();
|
||||
|
||||
//Visto che e' possibile avere una secchiata di numerazioni, gli tocca fare un giro per ogni numerazione
|
||||
FOR_EACH_SHEET_ROW(sf, r, row)
|
||||
{
|
||||
//estrazione definitiva dei record che soddisfano il casino di parametri richiesti
|
||||
rdoc.set_var("#CODNUM", TVariant(row->get(0)));
|
||||
rdoc.set_var("#TIPODOC", TVariant(row->get(2)));
|
||||
|
||||
//quanti record validi ha trovato?
|
||||
const long items = rdoc.items();
|
||||
/*#ifdef DBG
|
||||
warning_box("Hai trovato %ld righe di %s! Ti sembrano abbastanza?", items, row->get(0));
|
||||
#endif*/
|
||||
|
||||
//E crea pure la progind..
|
||||
TProgind pi(tot_items, TR("Generazione righe..."), true, true);
|
||||
|
||||
long last_ndoc = 0;
|
||||
|
||||
//Scansione del recordset trovato
|
||||
for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
|
||||
const long ndoc = rdoc.get(RDOC_NDOC).as_int();
|
||||
if (ndoc != last_ndoc)
|
||||
{
|
||||
scrivi_csv(rdoc.cursor()->curr(), *csv, specie_conai, codart.as_string());
|
||||
last_ndoc = ndoc;
|
||||
}
|
||||
|
||||
} //for(bool ok = rdoc.move_first(..
|
||||
|
||||
} //FOR_EACH...
|
||||
|
||||
//riordinamento del file secondo:
|
||||
//In caso il tipo stampa sia con il modello 6.3 basato sui..
|
||||
//fornitori e le loro esenzioni...
|
||||
if (mask.get_int(F_TIPOSTAMPA) == 2)
|
||||
csv->sort(compare_csv_rows_cofi);
|
||||
else
|
||||
//specie conai, codice cliente, numero documento
|
||||
csv->sort(compare_csv_rows_specie);
|
||||
|
||||
//se richiesto il file in formato excel...
|
||||
if (mask.get_bool(F_EXCEL))
|
||||
{
|
||||
//crea la riga con le intestazioni dei campi e la mette all'inizio
|
||||
csv->insert_rec(0);
|
||||
//riempie i campi del primo record del csv in modo da avere l'intestazione
|
||||
csv->set(0, "CODNUM");
|
||||
csv->set(1, "ANNO");
|
||||
csv->set(2, "NDOC");
|
||||
csv->set(3, "DATADOC");
|
||||
csv->set(4, "CODCLI");
|
||||
csv->set(5, "COFICLI");
|
||||
csv->set(6, "CODART");
|
||||
csv->set(7, "NRIGA");
|
||||
csv->set(8, "CLASSE");
|
||||
csv->set(9, "SOTTOCL");
|
||||
csv->set(10, "PREZZO");
|
||||
csv->set(11, "UM");
|
||||
csv->set(12, "CONAI A");
|
||||
csv->set(13, "CONAI B");
|
||||
csv->set(14, "CONAI BxC");
|
||||
csv->set(15, "CONAI A+B");
|
||||
|
||||
const TString path = mask.get(F_PATH);
|
||||
csv->save_as(path, fmt_text);
|
||||
|
||||
//accoppa la riga con le intestazioni dei campi
|
||||
csv->destroy(0);
|
||||
|
||||
/*#ifdef DBG
|
||||
xvt_sys_goto_url(path, "open");
|
||||
#endif*/
|
||||
}
|
||||
|
||||
//creazione del report di stampa
|
||||
TDichiarazione_CONAI_report rep;
|
||||
bool ok = rep.load(nome_report);
|
||||
//setta il recordset...
|
||||
//deve settare almeno un campo manualmente perche' funzioni la mask2report
|
||||
csv->set_var("#EMAIL", TVariant("Manca la email"), true);
|
||||
rep.set_recordset(csv);
|
||||
//..e poi carica i valori sulla maschera nel report!!!!
|
||||
rep.mask2report(mask);
|
||||
|
||||
if (ok)
|
||||
{
|
||||
TReport_book book;
|
||||
ok = book.add(rep);
|
||||
if (ok)
|
||||
book.print_or_preview();
|
||||
}
|
||||
}
|
||||
|
||||
void TDichiarazione_CONAI::main_loop()
|
||||
{
|
||||
TDichiarazione_CONAI_mask mask;
|
||||
mask.field(F_FIRM).check(RUNNING_CHECK);
|
||||
while (mask.run() == K_ENTER)
|
||||
{
|
||||
elabora(mask);
|
||||
}
|
||||
}
|
||||
|
||||
bool TDichiarazione_CONAI::create()
|
||||
{
|
||||
if (!has_module(DCAUT))
|
||||
return error_box(TR("Modulo non autorizzato"));
|
||||
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
int tp0900(int argc, char* argv[])
|
||||
{
|
||||
TDichiarazione_CONAI dc;
|
||||
dc.run(argc, argv, TR("Dichiarazione CONAI"));
|
||||
return 0;
|
||||
}
|
@ -8,9 +8,11 @@ int main(int argc, char** argv)
|
||||
switch(n)
|
||||
{
|
||||
case 0:
|
||||
ps0544100(argc, argv); break;
|
||||
case 1:
|
||||
ps0544200(argc, argv); break;
|
||||
ps0544100(argc, argv); break;
|
||||
case 1:
|
||||
ps0544200(argc, argv); break;
|
||||
case 2:
|
||||
ps0544300(argc, argv); break;
|
||||
default:
|
||||
ps0544100(argc, argv); break;
|
||||
}
|
||||
|
@ -1,2 +1,3 @@
|
||||
int ps0544100(int argc, char* argv[]);
|
||||
int ps0544200(int argc, char* argv[]);
|
||||
int ps0544300(int argc, char* argv[]);
|
||||
|
270
ps/ps0544300.cpp
Executable file
270
ps/ps0544300.cpp
Executable file
@ -0,0 +1,270 @@
|
||||
#include <applicat.h>
|
||||
#include <assoc.h>
|
||||
#include <automask.h>
|
||||
#include <currency.h>
|
||||
#include <filetext.h>
|
||||
#include <msksheet.h>
|
||||
#include <printer.h>
|
||||
#include <recarray.h>
|
||||
#include <relation.h>
|
||||
#include <sort.h>
|
||||
|
||||
#include "..\ve\velib.h"
|
||||
|
||||
#include "ps0544.h"
|
||||
#include "ps0544300a.h"
|
||||
|
||||
class TSpics_file: public TFile_text
|
||||
{
|
||||
protected:
|
||||
virtual void validate(TCursor& cur,TRecord_text& rec, TToken_string& val, TString& str);
|
||||
|
||||
public:
|
||||
TSpics_file(const TString& file_name, const TString& config_name);
|
||||
virtual ~TSpics_file() { }
|
||||
};
|
||||
|
||||
TSpics_file::TSpics_file(const TString& file_name, const TString& config_name)
|
||||
: TFile_text(file_name, config_name)
|
||||
{
|
||||
}
|
||||
|
||||
class TSpics_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
public:
|
||||
|
||||
TSpics_mask();
|
||||
|
||||
virtual ~TSpics_mask(){};
|
||||
};
|
||||
|
||||
TSpics_mask::TSpics_mask() :TAutomask ("ps0544300a")
|
||||
{
|
||||
}
|
||||
|
||||
bool TSpics_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
class TSpics : public TSkeleton_application
|
||||
{
|
||||
TCursor* _cur;
|
||||
TSpics_mask* _msk;
|
||||
TDate _dataini, _datafin;
|
||||
TSpics_file* _trasfile;
|
||||
TConfig* _configfile;
|
||||
long _nrecords;
|
||||
TRiga_documento* _riga_doc_curr;
|
||||
|
||||
virtual const char * extra_modules() const {return "ve";}
|
||||
|
||||
protected:
|
||||
virtual bool create(void);
|
||||
virtual bool destroy(void);
|
||||
virtual void main_loop() ;
|
||||
void elabora_documenti();
|
||||
|
||||
public:
|
||||
const long nrecords() { return _nrecords;};
|
||||
const TRiga_documento& riga_doc_curr() { return *_riga_doc_curr;};
|
||||
TConfig configfile() {return *_configfile;};
|
||||
TSpics() {} ;
|
||||
virtual ~TSpics() {} ;
|
||||
};
|
||||
|
||||
// restituisce un riferimento all' applicazione
|
||||
inline TSpics& app() { return (TSpics&) main_app();}
|
||||
|
||||
// gestione dei messaggi estesi nei campi
|
||||
void TSpics_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
|
||||
{
|
||||
const TString code(s.get(0));
|
||||
TString valore;
|
||||
if (code == "_FISSO")
|
||||
{
|
||||
// gestione dei campi fissi per i record delle riba
|
||||
// sintassi: _FISSO,!<valore>
|
||||
// dove: <valore> è la stringa fissa da emettere
|
||||
TString in(s.get());
|
||||
CHECK(in[0]=='!',"Macro _FISSO senza carattere '!'");
|
||||
in.ltrim(1);
|
||||
in.trim();
|
||||
valore = in;
|
||||
}
|
||||
|
||||
else if (code == "_DARIGA")
|
||||
{
|
||||
valore = "";
|
||||
TString in(s.get());
|
||||
if (in == "QTA")
|
||||
{
|
||||
real qta = app().riga_doc_curr().quantita();
|
||||
valore = qta.string(7,2,'0');
|
||||
valore.strip(".");
|
||||
}
|
||||
else if (in=="CODART")
|
||||
{
|
||||
TString80 codart = app().riga_doc_curr().get(RDOC_CODART);
|
||||
if (codart[0]!='A' || codart.len()<=10)
|
||||
valore=codart;
|
||||
else
|
||||
valore=(codart.len()==12?valore << codart.left(10) << " " << codart.mid(11,2):valore << codart.left(10) << " " << codart.mid(11,4));
|
||||
}
|
||||
}
|
||||
else if (code == "_PARAMETRI")
|
||||
{
|
||||
TString in(s.get());
|
||||
valore = app().configfile().get(in);
|
||||
}
|
||||
else if (code == "_OGGI")
|
||||
{
|
||||
TDate data(TODAY);
|
||||
valore = data.string(brief, '-', full, full, amg_date);
|
||||
valore.strip("-");
|
||||
}
|
||||
else if (code == "_ADESSO")
|
||||
{
|
||||
char time[128];
|
||||
_strtime(time);
|
||||
valore.format("%s", time);
|
||||
valore.strip(":");
|
||||
}
|
||||
else if (code == "_NRECORDS")
|
||||
{
|
||||
valore.format("%ld", app().nrecords());
|
||||
}
|
||||
else if (code == "_UPPERCASE")
|
||||
{
|
||||
valore = str;
|
||||
valore.upper();
|
||||
}
|
||||
else NFCHECK("Macro non definita: %s", (const char *)code);
|
||||
|
||||
str = valore;
|
||||
}
|
||||
|
||||
bool TSpics::create()
|
||||
{
|
||||
open_files(LF_DOC, LF_CLIFO, 0);
|
||||
_msk = new TSpics_mask();
|
||||
_trasfile = NULL;
|
||||
_configfile = new TConfig("ps0544300a.ini", "TRASFERIMENTO");
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
bool TSpics::destroy()
|
||||
{
|
||||
if (_trasfile)
|
||||
delete _trasfile;
|
||||
if (_configfile)
|
||||
delete _configfile;
|
||||
delete _msk;
|
||||
|
||||
return TSkeleton_application::destroy();
|
||||
}
|
||||
|
||||
void TSpics::main_loop()
|
||||
{
|
||||
TFilename filename = _configfile->get("NOMEFILE");
|
||||
if (filename.exist())
|
||||
remove(filename);
|
||||
while (_msk->run()!=K_QUIT)
|
||||
{
|
||||
_trasfile = new TSpics_file(filename, "ps0544300.ini");
|
||||
_trasfile->open(filename,'w');
|
||||
_trasfile->force_record_separator(TRUE);
|
||||
|
||||
_dataini = _msk->get_date(F_DATAINI);
|
||||
_datafin = _msk->get_date(F_DATAFIN);
|
||||
elabora_documenti();
|
||||
_trasfile->close();
|
||||
delete _trasfile;
|
||||
_trasfile = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TSpics::elabora_documenti()
|
||||
{
|
||||
TSheet_field& sheet = _msk->sfield(F_SHEETDOC);
|
||||
|
||||
TRelation doc_rel(LF_DOC);
|
||||
doc_rel.add(LF_RIGHEDOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC");
|
||||
doc_rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
|
||||
TRectype da(LF_DOC);
|
||||
TRectype a(LF_DOC);
|
||||
const long items = sheet.items();
|
||||
TString filt_expr;
|
||||
|
||||
_nrecords = 0;
|
||||
if (items > 0)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
TString16 codnum;
|
||||
|
||||
da.put("DATADOC", _dataini);
|
||||
a.put("DATADOC", _datafin);
|
||||
|
||||
filt_expr << "(";
|
||||
FOR_EACH_SHEET_ROW(sheet, r, row)
|
||||
{
|
||||
codnum = row->get(0);
|
||||
if (codnum.not_empty())
|
||||
{
|
||||
filt_expr << "(CODNUM==\"";
|
||||
filt_expr << codnum << "\")||";
|
||||
}
|
||||
}
|
||||
filt_expr.rtrim(2);
|
||||
filt_expr << ")";
|
||||
|
||||
doc_rel.lfile().set_curr(new TDocumento);
|
||||
_cur = new TCursor(&doc_rel,filt_expr,3,&da,&a);
|
||||
const long cur_items = _cur ->items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato
|
||||
if (cur_items != 0)
|
||||
{
|
||||
TRecord_text rech;
|
||||
rech.set_type("OP");
|
||||
_trasfile->autoload(rech, *_cur);
|
||||
_trasfile->write(rech);
|
||||
for (*_cur = 0; _cur->pos() < cur_items; ++(*_cur))
|
||||
{
|
||||
|
||||
TRecord_text rec;
|
||||
rec.set_type("01");
|
||||
_trasfile->autoload(rec, *_cur);
|
||||
_trasfile->write(rec);
|
||||
_nrecords++;
|
||||
TDocumento documento = doc_rel.curr();
|
||||
for (int i=1;i<=documento.rows();i++)
|
||||
{
|
||||
const TRiga_documento& rec_rdoc = documento[i];
|
||||
_riga_doc_curr = new TRiga_documento(rec_rdoc);
|
||||
doc_rel.curr(LF_RIGHEDOC) = rec_rdoc;
|
||||
rec.set_type("02");
|
||||
_trasfile->autoload(rec, *_cur);
|
||||
_trasfile->write(rec);
|
||||
_nrecords++;
|
||||
delete _riga_doc_curr;
|
||||
}
|
||||
}
|
||||
TRecord_text recf;
|
||||
recf.set_type("CL");
|
||||
_trasfile->autoload(recf, *_cur);
|
||||
_trasfile->write(recf);
|
||||
}
|
||||
delete _cur;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int ps0544300(int argc, char **argv)
|
||||
{
|
||||
TSpics a;
|
||||
a.run(argc, argv, "Trasferimento a SPICS");
|
||||
return 0;
|
||||
}
|
||||
|
199
ps/ps0544300.ini
Executable file
199
ps/ps0544300.ini
Executable file
@ -0,0 +1,199 @@
|
||||
|
||||
[MAIN]
|
||||
DECSEP = ,
|
||||
FIELDSEP =
|
||||
RECORDSEP =
|
||||
RECORDSIZE = 128
|
||||
SKIPLINES = 0
|
||||
TYPEFIELD = -1
|
||||
TYPELEN = -1
|
||||
TYPEPOS = -1
|
||||
|
||||
[TYPE FISSO]
|
||||
ALIGN =
|
||||
DATA =
|
||||
DECIMAL = 0
|
||||
FILLER = ' '
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[TYPE DATA]
|
||||
ALIGN =
|
||||
DATA = D
|
||||
DECIMAL = 0
|
||||
FILLER =
|
||||
LENGTH = 6
|
||||
PICTURE = 1442
|
||||
|
||||
[TYPE NUMERO]
|
||||
ALIGN = R
|
||||
DATA = N
|
||||
DECIMAL = 0
|
||||
FILLER = '0'
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[TYPE STRINGA]
|
||||
ALIGN = L
|
||||
DATA = S
|
||||
DECIMAL = 0
|
||||
FILLER = ' '
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[TYPE IMPORTO]
|
||||
ALIGN = R
|
||||
DATA = S
|
||||
DECIMAL = 0
|
||||
FILLER = '0'
|
||||
LENGTH =
|
||||
|
||||
[HEADER OP]
|
||||
NAME(0)=IDENTIFICATIVO TESTA
|
||||
TYPE(0)=STRINGA
|
||||
LENGTH(0)=4
|
||||
POSITION(0)=0
|
||||
MESSAGE(0)=_FISSO,!OP01
|
||||
|
||||
NAME(1) = CODICE MITTENTE
|
||||
TYPE(1) = STRINGA
|
||||
LENGTH(1) = 6
|
||||
POSITION(1) = 4
|
||||
MESSAGE(1) = _PARAMETRI,CODCONCESSIONARIO
|
||||
|
||||
NAME(2) = CODICE DESTINATARIO
|
||||
TYPE(2) = STRINGA
|
||||
LENGTH(2) = 6
|
||||
POSITION(2) = 10
|
||||
MESSAGE(2) = _PARAMETRI,CODPRODUZIONE
|
||||
|
||||
NAME(3) = NOME PROCEDURA
|
||||
TYPE(3) = STRINGA
|
||||
LENGTH(3) = 6
|
||||
POSITION(3) = 16
|
||||
MESSAGE(3) = _PARAMETRI,PROCEDURA
|
||||
|
||||
NAME(4) = DATA SERVIZIO
|
||||
TYPE(4) = STRINGA
|
||||
LENGTH(4) = 6
|
||||
POSITION(4) = 22
|
||||
MESSAGE(4) = _OGGI
|
||||
|
||||
NAME(5) = ORA SERVIZIO
|
||||
TYPE(5) = STRINGA
|
||||
LENGTH(5) = 6
|
||||
POSITION(5) = 28
|
||||
MESSAGE(5) = _ADESSO
|
||||
|
||||
[RECORD 01]
|
||||
NAME(0)=TIPO RECORD
|
||||
TYPE(0)=STRINGA
|
||||
LENGTH(0)=2
|
||||
POSITION(0)=0
|
||||
MESSAGE(0)=_FISSO,!01
|
||||
|
||||
NAME(1) = NUMERO MAGAZZINO
|
||||
TYPE(1) = NUMERO
|
||||
LENGTH(1) = 2
|
||||
POSITION(1) = 2
|
||||
MESSAGE(1) = _FISSO,!30
|
||||
|
||||
NAME(2) = CODICE DEALER
|
||||
TYPE(2) = NUMERO
|
||||
LENGTH(2) = 6
|
||||
POSITION(2) = 4
|
||||
MESSAGE(2) = _PARAMETRI,CODDEALER
|
||||
|
||||
NAME(3) = NUMERO MAGAZZINO DEL DEALER
|
||||
TYPE(3) = NUMERO
|
||||
LENGTH(3) = 2
|
||||
POSITION(3) = 10
|
||||
MESSAGE(3) = _FISSO,!01
|
||||
|
||||
NAME(4) = NUMERO ORDINE
|
||||
TYPE(4) = STRINGA
|
||||
LENGTH(4) = 10
|
||||
POSITION(4) = 12
|
||||
FIELD(4) = 33->NDOC
|
||||
|
||||
NAME(5) = REFRENZA PER IL DEALER
|
||||
TYPE(5) = STRINGA
|
||||
LENGTH(5) = 25
|
||||
POSITION(5) = 22
|
||||
FIELD(5) = 20->RAGSOC[1,25]
|
||||
|
||||
NAME(6) = FILLER
|
||||
TYPE(6) = STRINGA
|
||||
LENGTH(5) = 1
|
||||
POSITION(5) = 47
|
||||
|
||||
[RECORD 02]
|
||||
NAME(0) = CODICE SEZIONE
|
||||
TYPE(0) = STRINGA
|
||||
LENGTH(0) = 1
|
||||
POSITION(0) = 0
|
||||
FIELD(0) = 34->CODART[1,1]
|
||||
|
||||
NAME(1) = CODICE RICAMBIO
|
||||
TYPE(1) = STRINGA
|
||||
LENGTH(1) = 23
|
||||
POSITION(1) = 1
|
||||
MESSAGE(1) = _DARIGA,CODART
|
||||
|
||||
NAME(2) = QUANTITà ORDINATA
|
||||
TYPE(2) = NUMERO
|
||||
LENGTH(2) = 7
|
||||
POSITION(2) = 24
|
||||
MESSAGE(2) = _DARIGA,QTA
|
||||
|
||||
NAME(3) = REFERENZA DEL CLIENTE
|
||||
TYPE(3) = STRINGA
|
||||
LENGTH(3) = 43
|
||||
POSITION(3) = 31
|
||||
|
||||
NAME(4) = OPZIONE 1
|
||||
TYPE(4) = STRINGA
|
||||
LENGTH(4) = 1
|
||||
POSITION(4) = 43
|
||||
|
||||
NAME(26) = OPZIONE 2
|
||||
TYPE(26) = STRINGA
|
||||
LENGTH(26) = 1
|
||||
POSITION(26) = 44
|
||||
|
||||
NAME(5) = OPZIONE 3
|
||||
TYPE(5) = NUMERO
|
||||
LENGTH(5) = 1
|
||||
POSITION(5) = 45
|
||||
|
||||
[FOOTER CL]
|
||||
NAME(0)=IENTIFICATIVO CODA
|
||||
TYPE(0)=STRINGA
|
||||
LENGTH(0)=4
|
||||
POSITION(0)=0
|
||||
MESSAGE(0)=_FISSO,!CL99
|
||||
|
||||
NAME(1) = CODICE MITTENTE
|
||||
TYPE(1) = STRINGA
|
||||
LENGTH(1) = 6
|
||||
POSITION(1) = 4
|
||||
MESSAGE(1) = _PARAMETRI,CODCONCESSIONARIO
|
||||
|
||||
NAME(2) = CODICE DESTINATARIO
|
||||
TYPE(2) = STRINGA
|
||||
LENGTH(2) = 6
|
||||
POSITION(2) = 10
|
||||
MESSAGE(2) = _PARAMETRI,CODPRODUZIONE
|
||||
|
||||
NAME(3) = NOME PROCEDURA
|
||||
TYPE(3) = STRINGA
|
||||
LENGTH(3) = 6
|
||||
POSITION(3) = 16
|
||||
MESSAGE(3) = _PARAMETRI,PROCEDURA
|
||||
|
||||
NAME(4) = NUMERO RECORDS PASSATI
|
||||
TYPE(4) = NUMERO
|
||||
LENGTH(4) = 6
|
||||
POSITION(4) = 38
|
||||
MESSAGE(4) = _NRECORDS
|
||||
|
8
ps/ps0544300a.h
Executable file
8
ps/ps0544300a.h
Executable file
@ -0,0 +1,8 @@
|
||||
#define F_CODDITTA 101
|
||||
#define F_RAGSOC 102
|
||||
#define F_DATAINI 103
|
||||
#define F_DATAFIN 104
|
||||
#define F_SHEETDOC 105
|
||||
// campi dello sheet
|
||||
#define F_S_CODNUM 101
|
||||
#define F_S_DESNUM 102
|
122
ps/ps0544300a.uml
Executable file
122
ps/ps0544300a.uml
Executable file
@ -0,0 +1,122 @@
|
||||
#include "ps0544300a.h"
|
||||
|
||||
TOOLBAR "" 0 -5 0 4
|
||||
|
||||
STRING 30 70 50
|
||||
BEGIN
|
||||
FLAGS "G"
|
||||
PROMPT 10 -5 "Profilo "
|
||||
PSELECT
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -11 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Trasferimento a SERVUS" -1 -1 78 18
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 0 "@bDitta"
|
||||
END
|
||||
|
||||
NUMBER F_CODDITTA 5
|
||||
BEGIN
|
||||
PROMPT 2 1 "Codice "
|
||||
FLAGS "GDF"
|
||||
USE LF_NDITTE
|
||||
INPUT CODDITTA F_CODDITTA
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 17 1 "Rag.Soc. "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 3 "@bParametri"
|
||||
END
|
||||
|
||||
DATE F_DATAINI
|
||||
BEGIN
|
||||
PROMPT 2 4 "Fatture dal "
|
||||
HELP "Data di inizio per trasferimento documenti"
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Data dal non valida"
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
DATE F_DATAFIN
|
||||
BEGIN
|
||||
PROMPT 30 4 "al "
|
||||
HELP "Data di fine per trasferimento documenti"
|
||||
CHECKTYPE REQUIRED
|
||||
VALIDATE DATE_CMP_FUNC >= F_DATAINI
|
||||
WARNING "Data di fine scadenza non valida"
|
||||
END
|
||||
|
||||
SPREADSHEET F_SHEETDOC 78 10
|
||||
BEGIN
|
||||
PROMPT 1 6 "Scelta documenti"
|
||||
ITEM "Cod. num."
|
||||
ITEM "Descrizione num.@50"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
PAGE "Scelta documenti" -1 -1 75 10
|
||||
|
||||
STRING F_S_CODNUM 4
|
||||
BEGIN
|
||||
PROMPT 2 1 "Cod. num. "
|
||||
FLAGS "U"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_S_CODNUM
|
||||
DISPLAY "Cod. Num." CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_S_CODNUM CODTAB
|
||||
OUTPUT F_S_DESNUM S0
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_S_DESNUM 50
|
||||
BEGIN
|
||||
PROMPT 20 1 ""
|
||||
HELP "Descrizione numerazione"
|
||||
USE %NUM KEY 2
|
||||
INPUT S0 F_S_DESNUM
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_S_CODNUM
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 9 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 9 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
@ -7,7 +7,8 @@ int main(int argc, char** argv)
|
||||
int n = argc > 1 ? atoi(argv[1]+1) : 0;
|
||||
switch(n)
|
||||
{
|
||||
case 0:
|
||||
case 0: ps0713100(argc, argv); break; //Trasferimento dati contabili per ATS
|
||||
case 1: ps0713200(argc, argv); break; //Trasferimento commesse
|
||||
default:
|
||||
ps0713100(argc, argv); break; //Trasferimento dati contabili per ATS
|
||||
}
|
||||
|
@ -1 +1,2 @@
|
||||
int ps0713100(int argc, char* argv[]);
|
||||
int ps0713200(int argc, char* argv[]);
|
||||
|
245
ps/ps0713200.cpp
Executable file
245
ps/ps0713200.cpp
Executable file
@ -0,0 +1,245 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <progind.h>
|
||||
#include <reputils.h>
|
||||
#include <utility.h>
|
||||
#include <relation.h>
|
||||
#include <reprint.h>
|
||||
|
||||
#include "tabutil.h"
|
||||
|
||||
#include "ps0713.h"
|
||||
#include "ps0713200a.h"
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TAutomask
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TImportaComm_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
TImportaComm_mask();
|
||||
};
|
||||
|
||||
TImportaComm_mask::TImportaComm_mask() :TAutomask ("ps0713200a")
|
||||
{
|
||||
}
|
||||
|
||||
bool TImportaComm_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
|
||||
{
|
||||
switch (f.dlg())
|
||||
{
|
||||
//giochetto per avere la lista dei files validi nella directory di trasferimento!
|
||||
case F_NAME:
|
||||
if (e == fe_button)
|
||||
{
|
||||
TArray_sheet as(-1, -1, 72, 20, TR("Selezione file"),
|
||||
"File@32");
|
||||
TFilename path = get(F_PATH);
|
||||
path.add("*.csv"); //files delle testate
|
||||
list_files(path, as.rows_array());
|
||||
TFilename name;
|
||||
FOR_EACH_ARRAY_ROW(as.rows_array(), i, row)
|
||||
{
|
||||
name = *row;
|
||||
*row = name.name();
|
||||
}
|
||||
if (as.run() == K_ENTER)
|
||||
{
|
||||
f.set(as.row(as.selected()));
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////
|
||||
// TSkeleton_application
|
||||
///////////////////////////////////////
|
||||
class TCommCSV : public TSkeleton_application
|
||||
{
|
||||
virtual bool check_autorization() const {return false;}
|
||||
virtual const char * extra_modules() const {return "cg";}
|
||||
|
||||
TImportaComm_mask* _msk;
|
||||
TConfig* _configfile;
|
||||
|
||||
public:
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
virtual void main_loop();
|
||||
virtual void ini2mask();
|
||||
virtual void mask2ini();
|
||||
bool transfer(const TFilename& file);
|
||||
|
||||
TCommCSV() {};
|
||||
};
|
||||
|
||||
TCommCSV& app() { return (TCommCSV&) main_app(); }
|
||||
|
||||
/////////////////////////////////
|
||||
// inserimento commesse
|
||||
/////////////////////////////////
|
||||
|
||||
bool TCommCSV::transfer(const TFilename& file)
|
||||
{
|
||||
TLog_report log("Inserimento Commesse");
|
||||
|
||||
TToken_string rec(50,',');
|
||||
|
||||
TScanner s(file);
|
||||
rec = s.line();
|
||||
|
||||
|
||||
TTable comm("CMS");
|
||||
|
||||
TProgind pi(fsize(file),"Inserimento Commesse in corso...",true,true);
|
||||
|
||||
while (s.ok())
|
||||
{
|
||||
if (!pi.addstatus(s.tellg()))
|
||||
break;
|
||||
|
||||
TString str = "La commessa ";
|
||||
TString codtab = rec.get(0);
|
||||
codtab.strip("\"");
|
||||
|
||||
//salto le righe vuote del file
|
||||
if (codtab.empty())
|
||||
continue;
|
||||
|
||||
comm.zero();
|
||||
comm.put("CODTAB", codtab); //setto il campo CODTAB
|
||||
|
||||
TString tmp = "IDLAVORO ";
|
||||
tmp << codtab;
|
||||
|
||||
comm.put("S0", tmp); //setto il campo descrizione (S0)
|
||||
|
||||
TString gr = rec.get(1);
|
||||
gr.strip("\"");
|
||||
TString co = rec.get(2);
|
||||
co.strip("\"");
|
||||
TString sc = rec.get(3);
|
||||
sc.strip("\"");
|
||||
|
||||
//inserisco il gruppo, il conto e il sottoconto
|
||||
//solo se esistono e/o hanno valori sensati
|
||||
if (gr == "" || gr == "?")
|
||||
gr = "0";
|
||||
|
||||
comm.put("I1", gr);
|
||||
|
||||
if (co == "" || co == "?")
|
||||
co = "0";
|
||||
|
||||
comm.put("I2", co);
|
||||
|
||||
if (sc == "" || sc == "?")
|
||||
sc = "0";
|
||||
|
||||
comm.put("I3", sc);
|
||||
|
||||
int err = comm.write();
|
||||
|
||||
if (err == NOERR)
|
||||
{
|
||||
str << codtab << " è stata inserita";
|
||||
log.log(0, str);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (err == 224)
|
||||
str << codtab << " NON è stata inserita perchè esiste già";
|
||||
else
|
||||
str << codtab << " NON è stata inserita. Errore = " << err;
|
||||
|
||||
log.log(2, str);
|
||||
}
|
||||
|
||||
rec = s.line();
|
||||
|
||||
}
|
||||
|
||||
TReport_book buc;
|
||||
buc.add(log);
|
||||
buc.preview();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void TCommCSV::mask2ini()
|
||||
{
|
||||
//carica i parametri del file di configurazione
|
||||
_configfile->set_paragraph("MAIN");
|
||||
for (int i = 0; i < _msk->fields() ; i++)
|
||||
{
|
||||
TMask_field& f = _msk->fld(i);
|
||||
const TFieldref* fr = f.field();
|
||||
if (fr != NULL)
|
||||
_configfile->set(fr->name(), f.get());
|
||||
}
|
||||
}
|
||||
|
||||
void TCommCSV::ini2mask()
|
||||
{
|
||||
//carica i parametri del file di configurazione
|
||||
_configfile->set_paragraph("MAIN");
|
||||
for (int i = 0; i < _msk->fields() ; i++)
|
||||
{
|
||||
TMask_field& f = _msk->fld(i);
|
||||
const TFieldref* fr = f.field();
|
||||
if (fr != NULL)
|
||||
f.set(_configfile->get(fr->name()));
|
||||
}
|
||||
}
|
||||
|
||||
bool TCommCSV::create()
|
||||
{
|
||||
_configfile = new TConfig("ps0713conf.ini");
|
||||
_msk = new TImportaComm_mask();
|
||||
|
||||
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
bool TCommCSV::destroy()
|
||||
{
|
||||
delete _msk;
|
||||
delete _configfile;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
void TCommCSV::main_loop()
|
||||
{
|
||||
KEY tasto;
|
||||
ini2mask();
|
||||
tasto = _msk->run();
|
||||
if (tasto == K_ENTER)
|
||||
{
|
||||
mask2ini();
|
||||
|
||||
//genero il nome del file da caricare
|
||||
TFilename name = _msk->get(F_PATH);
|
||||
name.add(_msk->get(F_NAME));
|
||||
if (transfer(name))
|
||||
{
|
||||
message_box(TR("Importazione documenti completata"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int ps0713200 (int argc, char* argv[])
|
||||
{
|
||||
TCommCSV main_app;
|
||||
main_app.run(argc, argv, TR("Importazione Commesse"));
|
||||
return true;
|
||||
}
|
6
ps/ps0713200a.h
Executable file
6
ps/ps0713200a.h
Executable file
@ -0,0 +1,6 @@
|
||||
//campi maschera ps0713200a
|
||||
|
||||
#define F_CODITTA 101
|
||||
#define F_RAGSOC 102
|
||||
#define F_PATH 103
|
||||
#define F_NAME 104
|
59
ps/ps0713200a.uml
Executable file
59
ps/ps0713200a.uml
Executable file
@ -0,0 +1,59 @@
|
||||
#include "ps0713200a.h"
|
||||
|
||||
PAGE "Importazione dati commesse da file" -1 -1 78 12
|
||||
|
||||
GROUPBOX DLG_NULL 76 3
|
||||
BEGIN
|
||||
PROMPT 2 1 "@bDitta corrente"
|
||||
END
|
||||
|
||||
NUMBER F_CODITTA 5
|
||||
BEGIN
|
||||
PROMPT 3 2 "Codice "
|
||||
FLAGS "FD"
|
||||
USE LF_NDITTE
|
||||
INPUT CODDITTA F_CODITTA
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 23 2 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
BEGIN
|
||||
PROMPT 2 4 "@bSorgente"
|
||||
END
|
||||
|
||||
STRING F_PATH 256 39
|
||||
BEGIN
|
||||
PROMPT 3 5 "Cartella "
|
||||
DSELECT
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD ComInPath
|
||||
END
|
||||
|
||||
STRING F_NAME 18
|
||||
BEGIN
|
||||
PROMPT 3 6 "File "
|
||||
FIELD ComInFile
|
||||
END
|
||||
|
||||
BUTTON DLG_ELABORA 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
PICTURE BMP_ELABORA
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
@ -1,4 +1,5 @@
|
||||
[MAIN]
|
||||
PATH =
|
||||
NAME =
|
||||
ADATA =
|
||||
CODDITTA =
|
||||
RAGSOC =
|
||||
PATH =
|
||||
NAME =
|
@ -340,7 +340,8 @@ bool TClifoCSV::transfer(const TFilename& file)
|
||||
if (s.get(6).as_string().empty()) //italiano
|
||||
{
|
||||
TString cap = s.get(9).as_string();
|
||||
pulisci_cap(cap);
|
||||
|
||||
pulisci_cap(cap);
|
||||
|
||||
TString80 comune = s.get(11).as_string(); //comune o localita'
|
||||
comune.trim();
|
||||
|
Loading…
x
Reference in New Issue
Block a user