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:
alex 2008-03-17 22:05:14 +00:00
parent 2c18acdc65
commit ee80b6a6c0
28 changed files with 2704 additions and 34 deletions

View File

@ -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
View 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

View File

@ -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

View File

@ -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);
}
}

View File

@ -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++);
}
}

View File

@ -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

View File

@ -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
View 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
View File

@ -0,0 +1 @@
int pg0214100(int argc, char* argv[]);

233
ps/pg0214100.cpp Executable file
View 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
View 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
View 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
View 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
View 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
View 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;
}

View File

@ -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;
}

View File

@ -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
View 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
View 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
View 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
View 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

View File

@ -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
}

View File

@ -1 +1,2 @@
int ps0713100(int argc, char* argv[]);
int ps0713200(int argc, char* argv[]);

245
ps/ps0713200.cpp Executable file
View 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
View 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
View 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

View File

@ -1,4 +1,5 @@
[MAIN]
PATH =
NAME =
ADATA =
CODDITTA =
RAGSOC =
PATH =
NAME =

View File

@ -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();