Ho spezzato il file 77stq.cpp creando i file 77stq.h - 77stqab.h - 77stqab.cpp

77stqc.h - 77stqc.cpp


git-svn-id: svn://10.65.10.50/trunk@3567 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
ale 1996-09-12 08:41:01 +00:00
parent 041a533510
commit 9657425c9e
7 changed files with 1887 additions and 1835 deletions

View File

@ -1,396 +1,396 @@
USE 61 USE 61
JOIN %CA7 TO 61 ALIAS 14 INTO CODTAB=CODCAUS JOIN %CA7 TO 61 ALIAS 14 INTO CODTAB=CODCAUS
JOIN 9 INTO CODDITTA=CODDITTA JOIN 9 INTO CODDITTA=CODDITTA
JOIN 6 TO 9 ALIAS 116 INTO TIPOA=TIPOA CODANAGR=CODANAGR JOIN 6 TO 9 ALIAS 116 INTO TIPOA=TIPOA CODANAGR=CODANAGR
JOIN 8 TO 6 ALIAS 118 INTO CODANAGR=CODANAGR JOIN 8 TO 6 ALIAS 118 INTO CODANAGR=CODANAGR
JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC
JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES)
JOIN 6 TO 61 ALIAS 216 INTO TIPOA=TIPOA CODANAGR=CODANAGR JOIN 6 TO 61 ALIAS 216 INTO TIPOA=TIPOA CODANAGR=CODANAGR
JOIN 8 TO 216@ ALIAS 218 INTO CODANAGR=CODANAGR JOIN 8 TO 216@ ALIAS 218 INTO CODANAGR=CODANAGR
JOIN 13 TO 218@ ALIAS 313 INTO COM=COMNASC JOIN 13 TO 218@ ALIAS 313 INTO COM=COMNASC
JOIN 13 TO 216@ ALIAS 413 INTO COM=COMRF(COMRES) JOIN 13 TO 216@ ALIAS 413 INTO COM=COMRF(COMRES)
JOIN %STA TO 216@ ALIAS 24 INTO CODTAB=STATORES JOIN %STA TO 216@ ALIAS 24 INTO CODTAB=STATORES
END END
DESCRIPTION DESCRIPTION
BEGIN BEGIN
61->* "Quadro C 770" 61->* "Quadro C 770"
9->* "Ditte" 9->* "Ditte"
6->* "Anagrafica persone fisiche e giuridiche" 6->* "Anagrafica persone fisiche e giuridiche"
8->* "Anagrafica persone fisiche" 8->* "Anagrafica persone fisiche"
113@->* "Comuni" 113@->* "Comuni"
213@->* "Comuni" 213@->* "Comuni"
216@->* "Anagrafica persone fisiche e giuridiche" 216@->* "Anagrafica persone fisiche e giuridiche"
218@->* "Anagrafica persone giuridiche" 218@->* "Anagrafica persone giuridiche"
313@->* "Comuni" 313@->* "Comuni"
413@->* "Comuni" 413@->* "Comuni"
END END
GENERAL GENERAL
BEGIN BEGIN
OFFSET 0 0 OFFSET 0 0
FONT "Courier 17cpi" FONT "Courier 17cpi"
SIZE 11 SIZE 11
CA "X" CA "X"
IN 3 2 IN 3 2
FI 131 FI 131
END END
SECTION HEADER FIRST 22 SECTION HEADER FIRST 22
LISTA 9 LISTA 9
BEGIN BEGIN
KEY "Tipo anagrafica" KEY "Tipo anagrafica"
FLAGS "H" FLAGS "H"
FIELD 116@->TIPOA FIELD 116@->TIPOA
ITEM "F|Fisica" MESSAGE SHOW,1@|HIDE,2@ ITEM "F|Fisica" MESSAGE SHOW,1@|HIDE,2@
ITEM "G|Giuridica" MESSAGE SHOW,2@|HIDE,1@ ITEM "G|Giuridica" MESSAGE SHOW,2@|HIDE,1@
END END
STRINGA 1 STRINGA 1
BEGIN BEGIN
KEY "CODICE FISCALE" KEY "CODICE FISCALE"
PROMPT 3 11 "" PROMPT 3 11 ""
FIELD 116@->COFI FIELD 116@->COFI
END END
STRINGA 2 STRINGA 2
BEGIN BEGIN
KEY "RAGIONE SOCIALE" KEY "RAGIONE SOCIALE"
PROMPT 39 11 "" PROMPT 39 11 ""
FIELD 116@->RAGSOC FIELD 116@->RAGSOC
GROUP 2 GROUP 2
END END
STRINGA 3 STRINGA 3
BEGIN BEGIN
KEY "COGNOME" KEY "COGNOME"
PROMPT 39 11 "" PROMPT 39 11 ""
FIELD 116@->RAGSOC[1,30] FIELD 116@->RAGSOC[1,30]
GROUP 1 GROUP 1
END END
STRINGA 4 STRINGA 4
BEGIN BEGIN
KEY "NOME" KEY "NOME"
PROMPT 17 13 "" PROMPT 17 13 ""
FIELD 116@->RAGSOC[31,50] FIELD 116@->RAGSOC[31,50]
GROUP 1 GROUP 1
END END
STRINGA 5 STRINGA 5
BEGIN BEGIN
KEY "SESSO" KEY "SESSO"
PROMPT 56 13 "" PROMPT 59 13 ""
FIELD 118@->SESSO FIELD 118@->SESSO
GROUP 1 GROUP 1
END END
STRINGA 6 STRINGA 6
BEGIN BEGIN
KEY "DATA DI NASCITA" KEY "DATA DI NASCITA"
PROMPT 63 13 "" PROMPT 63 13 ""
FIELD 118@->DATANASC FIELD 118@->DATANASC
GROUP 1 GROUP 1
END END
STRINGA 7 STRINGA 7
BEGIN BEGIN
KEY "COMUNE DI NASCITA" KEY "COMUNE DI NASCITA"
PROMPT 83 13 "" PROMPT 83 13 ""
FIELD 113@->DENCOM FIELD 113@->DENCOM
GROUP 1 GROUP 1
END END
STRINGA 8 STRINGA 8
BEGIN BEGIN
KEY "PROV. DI NASCITA" KEY "PROV. DI NASCITA"
PROMPT 122 13 "" PROMPT 125 13 ""
FIELD 113@->PROVCOM FIELD 113@->PROVCOM
GROUP 1 GROUP 1
END END
STRINGA 10 STRINGA 10
BEGIN BEGIN
KEY "COMUNE DI RES.FISCALE" KEY "COMUNE DI RES.FISCALE"
PROMPT 17 15 "" PROMPT 17 15 ""
FIELD 213@->DENCOM FIELD 213@->DENCOM
END END
STRINGA 11 STRINGA 11
BEGIN BEGIN
KEY "PROV DI RES.FISCALE" KEY "PROV DI RES.FISCALE"
PROMPT 56 15 "" PROMPT 59 15 ""
FIELD 213@->PROVCOM FIELD 213@->PROVCOM
END END
STRINGA 12 STRINGA 12
BEGIN BEGIN
KEY "VIA di RES." KEY "VIA di RES."
PROMPT 67 15 "" PROMPT 67 15 ""
FIELD 116@->INDRF FIELD 116@->INDRF
FLAGS "H" FLAGS "H"
MESSAGE COPY,17 MESSAGE COPY,17
END END
STRINGA 15 STRINGA 15
BEGIN BEGIN
KEY "NUM. CIVICO di RES." KEY "NUM. CIVICO di RES."
PROMPT 103 15 "" PROMPT 103 15 ""
FIELD 116@->CIVRF FIELD 116@->CIVRF
FLAGS "H" FLAGS "H"
MESSAGE APPEND,17 MESSAGE APPEND,17
END END
STRINGA 17 STRINGA 17
BEGIN BEGIN
KEY "VIA + NUM CIV. DI RES." KEY "VIA + NUM CIV. DI RES."
PROMPT 67 15 "" PROMPT 67 15 ""
END END
STRINGA 16 STRINGA 16
BEGIN BEGIN
KEY "CAP" KEY "CAP"
PROMPT 124 15 "" PROMPT 124 15 ""
FIELD 116@->CAPRF FIELD 116@->CAPRF
END END
STRINGA 13 STRINGA 13
BEGIN BEGIN
KEY "CODICE FISCALE DICHIARANTE" KEY "CODICE FISCALE DICHIARANTE"
PROMPT 105 18 "" PROMPT 105 18 ""
END END
NUMBER 14 NUMBER 14
BEGIN BEGIN
KEY "NUM. FOGLIO" KEY "NUM. FOGLIO"
PROMPT 125 21 "" PROMPT 125 21 ""
END END
END END
SECTION BODY ODD 6 SECTION BODY ODD 6
LISTA 100 LISTA 100
BEGIN BEGIN
KEY "Tipo anagrafica" KEY "Tipo anagrafica"
FIELD 216@->TIPOA FIELD 216@->TIPOA
ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@ ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@
ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@ ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@
END END
STRINGA 1 STRINGA 1
BEGIN BEGIN
KEY "COD.FIS" KEY "COD.FIS"
PROMPT 10 1 "" PROMPT 10 1 ""
FIELD 216@->COFI FIELD 216@->COFI
END END
STRING 2 STRING 2
BEGIN BEGIN
KEY "COGNOME" KEY "COGNOME"
PROMPT 42 1 "" PROMPT 42 1 ""
FIELD 216@->RAGSOC[1,30] FIELD 216@->RAGSOC[1,30]
GROUP 1 GROUP 1
END END
STRING 3 STRING 3
BEGIN BEGIN
KEY "NOME" KEY "NOME"
PROMPT 81 1 "" PROMPT 81 1 ""
FIELD 216@->RAGSOC[31,50] FIELD 216@->RAGSOC[31,50]
GROUP 1 GROUP 1
END END
STRING 4 STRING 4
BEGIN BEGIN
KEY "DATA NASCITA" KEY "DATA NASCITA"
PROMPT 114 1 "" PROMPT 114 1 ""
FIELD 218@->DATANASC FIELD 218@->DATANASC
END END
STRING 5 STRING 5
BEGIN BEGIN
KEY "SESSO" KEY "SESSO"
PROMPT 129 1 "" PROMPT 129 1 ""
FIELD 218@->SESSO FIELD 218@->SESSO
END END
STRING 6 STRING 6
BEGIN BEGIN
KEY "COMUNE DI NASCITA" KEY "COMUNE DI NASCITA"
PROMPT 10 3 "" PROMPT 10 3 ""
FIELD 313@->DENCOM FIELD 313@->DENCOM
GROUP 1 GROUP 1
END END
STRING 7 STRING 7
BEGIN BEGIN
KEY "PROV DI NASCITA" KEY "PROV DI NASCITA"
PROMPT 47 3 "" PROMPT 47 3 ""
FIELD 313@->PROVCOM FIELD 313@->PROVCOM
GROUP 1 GROUP 1
END END
STRING 8 STRING 8
BEGIN BEGIN
KEY "COMUNE DI RESIDENZA" KEY "COMUNE DI RESIDENZA"
PROMPT 53 3 "" PROMPT 53 3 ""
FIELD 413@->DENCOM FIELD 413@->DENCOM
GROUP 1 GROUP 1
END END
STRING 9 STRING 9
BEGIN BEGIN
KEY "PROV. RESIDENZA" KEY "PROV. RESIDENZA"
PROMPT 88 3 "" PROMPT 88 3 ""
FIELD 413@->PROVCOM FIELD 413@->PROVCOM
END END
STRING 101 STRING 101
BEGIN BEGIN
KEY "VIA RES." KEY "VIA RES."
PROMPT 94 3 "" PROMPT 94 3 ""
FIELD 216@->INDRES[1,20] FIELD 216@->INDRES[1,20]
FLAGS "H" FLAGS "H"
MESSAGE COPY,10 MESSAGE COPY,10
END END
STRING 102 STRING 102
BEGIN BEGIN
KEY "NUM.CIV" KEY "NUM.CIV"
PROMPT 93 3 "" PROMPT 93 3 ""
FLAGS "H" FLAGS "H"
FIELD 216@->CIVRES FIELD 216@->CIVRES
MESSAGE APPEND,10 MESSAGE APPEND,10
END END
STRING 10 STRING 10
BEGIN BEGIN
KEY "VIA RES. + numcivres" KEY "VIA RES. + numcivres"
PROMPT 95 3 "" PROMPT 95 3 ""
GROUP 1 GROUP 1
END END
STRING 11 STRING 11
BEGIN BEGIN
KEY "DESCR. CAUSALE" KEY "DESCR. CAUSALE"
PROMPT 10 5 "" PROMPT 10 5 ""
FIELD 14@->S0[1,20] FIELD 14@->S0[1,20]
END END
STRING 12 STRING 12
BEGIN BEGIN
KEY "FLAG C.T." KEY "FLAG C.T."
PROMPT 34 5 "" PROMPT 34 5 ""
FIELD 14@->B2 FIELD 14@->B2
END END
STRING 13 STRING 13
BEGIN BEGIN
KEY "FLAG T.S." KEY "FLAG T.S."
PROMPT 39 5 "" PROMPT 39 5 ""
FIELD 14@->B3 FIELD 14@->B3
END END
NUMBER 14 NUMBER 14
BEGIN BEGIN
KEY "AMMONTARE CORRISPOSTO" KEY "AMMONTARE CORRISPOSTO"
PROMPT 45 5 "" PROMPT 45 5 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
MESSAGE ADD,FL->14 MESSAGE ADD,FL->14
// FIELD 61->TOTALE // FIELD 61->TOTALE
END END
NUMBER 15 NUMBER 15
BEGIN BEGIN
KEY "CONTRIBUTI S.S.N." KEY "CONTRIBUTI S.S.N."
PROMPT 60 5 "" PROMPT 60 5 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
MESSAGE ADD,FL->15 MESSAGE ADD,FL->15
// FIELD 61->CONTSSN // FIELD 61->CONTSSN
END END
NUMBER 16 NUMBER 16
BEGIN BEGIN
KEY "SOMME NON SOGGETTE A RITENUTA" KEY "SOMME NON SOGGETTE A RITENUTA"
PROMPT 76 5 "" PROMPT 76 5 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
MESSAGE ADD,FL->16 MESSAGE ADD,FL->16
// FIELD 61->SOMME // FIELD 61->SOMME
END END
NUMBER 17 NUMBER 17
BEGIN BEGIN
KEY "IMPONIBILE" KEY "IMPONIBILE"
PROMPT 91 5 "" PROMPT 91 5 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
MESSAGE ADD,FL->17 MESSAGE ADD,FL->17
FIELD 61->IMPONIBILE FIELD 61->IMPONIBILE
END END
NUMBER 18 NUMBER 18
BEGIN BEGIN
KEY "RITENUTE OPERATE" KEY "RITENUTE OPERATE"
PROMPT 105 5 "" PROMPT 105 5 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
MESSAGE ADD,FL->18 MESSAGE ADD,FL->18
FIELD 61->RITENUTE FIELD 61->RITENUTE
END END
NUMBER 19 NUMBER 19
BEGIN BEGIN
KEY "NETTO CORRISPOSTO" KEY "NETTO CORRISPOSTO"
PROMPT 120 5 "" PROMPT 120 5 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
MESSAGE ADD,FL->19 MESSAGE ADD,FL->19
FIELD 61->NETTO FIELD 61->NETTO
END END
END END
SECTION FOOTER LAST 2 SECTION FOOTER LAST 2
NUMBER 14 NUMBER 14
BEGIN BEGIN
KEY "TOTALE AMMONTARE CORRISPOSTO" KEY "TOTALE AMMONTARE CORRISPOSTO"
PROMPT 45 1 "" PROMPT 45 1 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 15 NUMBER 15
BEGIN BEGIN
KEY "TOTALE CONTRIBUTI S.S.N." KEY "TOTALE CONTRIBUTI S.S.N."
PROMPT 61 1 "" PROMPT 61 1 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 16 NUMBER 16
BEGIN BEGIN
KEY "TOTALE SOMME NON SOGGETTE A RITENUTA" KEY "TOTALE SOMME NON SOGGETTE A RITENUTA"
PROMPT 76 1 "" PROMPT 76 1 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 17 NUMBER 17
BEGIN BEGIN
KEY "TOTALE IMPONIBILE" KEY "TOTALE IMPONIBILE"
PROMPT 91 1 "" PROMPT 91 1 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 18 NUMBER 18
BEGIN BEGIN
KEY "TOTALE RITENUTE OPERATE" KEY "TOTALE RITENUTE OPERATE"
PROMPT 105 1 "" PROMPT 105 1 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 19 NUMBER 19
BEGIN BEGIN
KEY "TOTALE NETTO CORRISPOSTO" KEY "TOTALE NETTO CORRISPOSTO"
PROMPT 120 1 "" PROMPT 120 1 ""
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
END END

File diff suppressed because it is too large Load Diff

275
m770/77stq.h Executable file
View File

@ -0,0 +1,275 @@
#ifndef __77STQ_H
#define __77STQ_H
#include <xvt.h>
#include <applicat.h>
#include <relation.h>
#include <config.h>
#include <mask.h>
#include <form.h>
#include <printer.h>
#include <progind.h>
#include "base.h"
#include <urldefid.h>
#include <nditte.h>
#include <anagr.h>
#include "quadroc.h"
#include "quadrod.h"
#include "quadrod1.h"
#include "quadrogd.h"
#include "quadrif.h"
#include "77stqd.h"
#include "77lib.h"
// Chincaglieria che serve per posiziona()
typedef long HWND;
HIDDEN const int MAX_LEN = 300;
extern "C" {
BOOLEAN PrintLineNow( char *pData, word cbBytes, HWND hInst );
};
HIDDEN TString16 __dep16;
HIDDEN TString80 __dep80;
// Vega-Key di Modulaser
HIDDEN const char* VK_STARTDOC = "<VK>&MA796&0&1";
HIDDEN const char* VK_ENDDOC = "<VK>!0";
typedef enum { STARTDOC, STARTDITTA, STARTPAGE, ENDDOC } ModulaserKey;
// Campi form
#define TOT_TOTALE 1
#define TOT_SNSRIT 2
#define TOT_IMPON 3
#define TOT_IMPOR 4
#define TOT_NETTO 5
#define D_TOTALE 16
#define D_SNSRIT 17
#define D_IMPONIBILE 18
#define D_IMPORTO 20
#define D_NETTO 21
#define D1_TOTALE 12
#define D1_QUOTAPRO 13
#define D1_SPESEANT 14
#define D1_IMPONIBILE 15
#define D1_IMPORTO 17
#define D1_NETTO 18
#define C_TOTALE 14
#define C_CONTSSN 15
#define C_SOMME 16
#define C_IMPONIBILE 17
#define C_RITENUTE 18
#define C_NETTO 19
#define H_COFI_DIC 13
#define H_NUM_FOGLIO 14
// Quadro D
HIDDEN const int QD_FORMLEN_PRIMA = 70; // 72 - 3 (3 e' la posizione della X di posiz.)
HIDDEN const int QD_FORMLEN = 72;
HIDDEN const int POS_DITTA = 120; // Colonna del codice ditta a pie' di modulo
HIDDEN const int QD_PAGINE = 4;
HIDDEN const int QD_RIGHE_PRIMA = 4;
HIDDEN const int QD_RIGHE_SECONDA = 7;
HIDDEN const int QD_RIGHE_TERZA = 7;
HIDDEN const int QD_RIGHE_QUARTA = 7;
HIDDEN const int QD1_RIGHE_PRIMA = 6;
HIDDEN const int QD1_RIGHE_SECONDA = 9;
HIDDEN const int QD1_RIGHE_TERZA = 9;
HIDDEN const int QD1_RIGHE_QUARTA = 8;
HIDDEN const int HEADER_SECONDA = 8;
HIDDEN const int HEADER_TERZA = 8; // Sarebbero 9 col righello...
HIDDEN const int HEADER_QUARTA = 13; // 15 col righello...
HIDDEN const int HEADER_D1_SECONDA = 8;
HIDDEN const int HEADER_D1_TERZA = 8;
HIDDEN const int HEADER_D1_QUARTA = 14;
typedef enum { PRIMA=1, SECONDA, TERZA, QUARTA } PaginaQuadro;
typedef enum { fisiche, nofisiche } TipoPagina;
class TDicForm : public TForm
{
private:
real _f_tot_totale, _f_tot_snsrit, _f_tot_impon, _f_tot_impor, _f_tot_netto;
real _nf_tot_totale, _nf_tot_snsrit, _nf_tot_impon, _nf_tot_impor, _nf_tot_netto;
TCursor* _cur;
protected:
long _Items; // numero di record che hanno passato il filtro
PaginaQuadro _PaginaCorrente;
void set_curr_page(PaginaQuadro pagina) { _PaginaCorrente = pagina; }
virtual int dic_form_len() const;
virtual void inc_curr_page();
virtual void next_page(TPrinter& pr);
bool _modulaser; // se stampa per modulaser
bool _posiziona; // se deve fare posizionamento
TipoDitta _tipo_ditta; // tipo ditta: normale, estinto, dichiarante
int _num_foglio; // numero foglio
TString _cofi_dic; // cod.fis. dichiarante
bool _can_print_tot_fis, _can_print_tot_nofis;
bool _finite_fis, _finite_nofis, _LastDitta, _EndPrintDitta;
bool _GiaStampatiFis, _GiaStampatiNoFis, _PaginaPosizionamento;
bool _GiaPosizionato, _GiaMessoStartDoc, _GiaMessoStartPage[QD_PAGINE]; // flag per modulaser
int _CtrNoFisStampati, _CtrFisStampati; // contatori p.f. e p.g. stampate
long _codditta, _codditta_dic; // cod.ditta e cod.ditta dichiarante
int _RigaCorr; // contatore riga corrente
TString16 _quadro; // codice quadro in stampa
void stampa_testata(TPrinter& pr);
virtual bool ultima_pagina() const { return _PaginaCorrente==QUARTA; }
virtual void stampa_totali(TPrinter& pr);
// virtual void aggiorna_totali(const char tipo);
virtual void set_body(TPrinter& pr, const char tipo);
void StampaPagina(PaginaQuadro PaginaCorrente, const bool StampaTotali, const long Fis, const long NoFis);
void posiziona();
void fill_page(TPrinter& pr, const int righe);
void jump_to_line(TPrinter& pr, const int riga);
const char* BuildModulaserStartPage();
void put_modulaser(TPrintrow& row, ModulaserKey key, int page=0);
void ClearFlagModulaser();
bool PaginaPosizionamento() const;
virtual bool InitPrint(const long codditta);
public:
virtual TCursor* cursor() const { return _cur; }
virtual TRelation* relation() const { return _cur->relation(); }
virtual long filtra(const long codditta);
TProgind* _prog; // progind usata in print()
long codditta() const { return _codditta; }
void set_codditta(const long ditta) { _codditta = ditta; }
void set_posiziona(const bool posiz) { _posiziona = posiz; _GiaPosizionato = FALSE; }
void can_print_tot_fis(const bool canpr) { _can_print_tot_fis = canpr; }
void can_print_tot_nofis(const bool canpr) { _can_print_tot_nofis = canpr; }
void set_last_ditta(const bool last) { _LastDitta = last; }
bool last_ditta() const { return _LastDitta; }
bool EndJob() const { return _LastDitta && _EndPrintDitta; }
bool ultima_fis();
bool ultima_nofis();
TString& cofi_dic() { return _cofi_dic; }
void set_cofi_dic(const char* cofi);
TipoDitta tipo_ditta() const { return _tipo_ditta; }
void set_tipo_ditta(TipoDitta tipo) { _tipo_ditta = tipo; }
bool modulaser() const { return _modulaser; }
void set_modulaser(const bool modul) { _modulaser = modul; }
void set_num_foglio(const int foglio) { _num_foglio = foglio; }
int num_foglio() const { return _num_foglio; }
virtual void azzera_totali();
PaginaQuadro curr_page() const { return _PaginaCorrente; }
TCursor& cur();
void set_progind(TProgind* prog) { _prog = prog; }
TProgind* progind() { return _prog; }
bool usa_progind() const { return _prog != NULL; }
virtual void set_cursor(TCursor* cur);
virtual void close_print();
virtual bool print(const long codditta, const long NumFis, const long NumNoFis);
const TString& quadro() const { return _quadro; }
TDicForm(const char* form, const char* quadro);
virtual ~TDicForm() {}
};
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
//
// TStDicArray
//
// Array delle ditte da stampare. Contiene una riga per ogni ditta che si vuole stampare
// Il formato della riga e':
// codditta|estinti|numfis|numnofis|ultimafis|ultimanofis
//
/////////////////////////////////////////////////////////////////////////////////////////////
class TStDicArray : public TObject
{
private:
TString_array _store;
public:
TToken_string& operator[](int i) const;
int curr_index() const { return _store.last(); }
void set(const int index, const TipoDitta tipo=normale, const int num_fis=0, const int num_nofis=0,
bool ultima_con_fis=FALSE, bool ultima_con_nofis=FALSE, const char* cofidic=NULL);
void set_tipo(const int index, const TipoDitta tipo);
void set_ultima_con_fis(const int index, const bool ultima_fis);
void set_ultima_con_nofis(const int index, const bool ultima_nofis);
void set_flag_tipi(const int index, const bool ultima_fis, const bool ultima_nofis);
void set_ctr_tipi(const int index, const int num_fis, const int num_nofis);
void add(const long codditta, const TipoDitta tipo=normale, const int num_fis=0, const int num_nofis=0,
bool ultima_con_fis=FALSE, bool ultima_con_nofis=FALSE, const char* cofidic=NULL);
int items() const { return _store.items(); }
void destroy() { _store.destroy(); }
};
/////////////////////////////////////////////////////////////////////////////////////////////
//
// STAMPA QUADRO
//
/////////////////////////////////////////////////////////////////////////////////////////////
class TStampaQuadro : public TApplication
{
TMask* _m; // Maschera di stampa
TConfig* _cnf; // Configurazione
TString16 _section; // Paragrafo del config
long _codditta;
int _anno_dic;
TString _quadro;
char _livello; // "S" studio, "D" singola ditta
TString _title;
TStDicArray _ditte;
protected: // TApplication
virtual bool menu(MENU_TAG);
virtual void on_config_change();
virtual bool create();
virtual bool destroy();
protected:
virtual bool user_create() pure;
virtual bool user_destroy() pure;
virtual TDicForm* get_form() const pure;
virtual TCursor* get_cursor() const pure;
virtual const char* mask_name() const;
virtual const char* form_name() const;
virtual bool conta_tipi_per() const { return TRUE; }
void fill_estinti(const long CodDic);
const TStDicArray& ditte() const { return _ditte; }
virtual bool print_quadro(const int OffsetDitta, const bool modulaser);
virtual void print(const bool modulaser);
bool singola_ditta() const { return _livello == 'D'; }
const TString& quadro() const { return _quadro; }
void set_taitol(const char* t) { _title = t; }
TStampaQuadro(const char* quad, char liv);
public:
const TString& taitol() const { return _title; }
virtual ~TStampaQuadro() { }
};
#endif

642
m770/77stqab.cpp Executable file
View File

@ -0,0 +1,642 @@
///////////////////////////////////////////////////////////
// Quadro 770/A
///////////////////////////////////////////////////////////
#include "77stqab.h"
TDipendente::TDipendente(const TCursor& cur)
{
_pos = ((TCursor&)cur).pos();
const TRectype& rec = cur.curr();
const TRectype& dip = cur.curr(LF_DIPEND);
_codice_ditta = rec.get_long("CODDITTA");
_ragsoc = dip.get("COGNOME"); _ragsoc << ' ' << dip.get("NOME");
_codice_deceduto = dip.get_long("CODDIPDEC");
_codice_dipendente = rec.get_long("CODDIP");
if (rec.num() == LF_QUAA)
{
_fine_rapporto = rec.get("DATAFR");
_lavoro_precedente = rec.get("CFDLPREC").not_empty();
_causa = toupper(rec.get_char("CAUSA"));
_rettifica_conguaglio = toupper(rec.get_char("RETCON"));
_numero_progressivo = rec.get_int("NPROG");
}
else
{
_fine_rapporto = rec.get("DATAFIN");
_lavoro_precedente = FALSE;
_causa = ' ';
_rettifica_conguaglio = ' ';
_numero_progressivo = rec.get_int("NPROG");
}
if (_rettifica_conguaglio == 'B' || !_fine_rapporto.ok())
_fine_rapporto = eotime;
}
int TDipendente::compare(const TSortable& s) const
{
const TDipendente& rec = (const TDipendente&)s;
if (_codice_ditta != rec._codice_ditta)
return _codice_ditta > rec._codice_ditta ? +1 : -1;
const int diff = _ragsoc.compare(rec._ragsoc, -1, TRUE);
if (diff != 0)
return diff;
if (_codice_dipendente != rec._codice_dipendente)
return _codice_dipendente > rec._codice_dipendente ? +1 : -1;
if (_fine_rapporto != rec._fine_rapporto)
return _fine_rapporto > rec._fine_rapporto ? +1 : -1;
if (_lavoro_precedente != rec._lavoro_precedente)
return _lavoro_precedente ? +1 : -1;
if (_causa != rec._causa)
return _causa > rec._causa ? +1 : -1;
if (_rettifica_conguaglio != rec._rettifica_conguaglio)
return _rettifica_conguaglio > rec._rettifica_conguaglio ? +1 : -1;
return _numero_progressivo - rec._numero_progressivo;
}
int TDipendenti::find(long cod) const
{
for (int i = _data.last(); i >= 0; i--)
if (dip(i).codice() == cod)
break;
return i;
}
int TDipendenti::fill(TCursor& cur)
{
for (cur = 0; cur.ok(); ++cur)
{
TDipendente* n = new TDipendente(cur);
if (n->pos() >= 0)
_data.add(n);
else
delete n;
}
const int i = _data.items();
if (i > 0)
{
_data.sort();
for (int d = i-1; d >= 0; d--)
{
const long coddec = dip(d).codice_deceduto();
if (coddec > 0) // E' un erede!
{
const int posdec = find(coddec);
if (posdec >= 0 && posdec != d-1) // Il deceduto esiste
{
TDipendente* dipen = (TDipendente*)_data.remove(d, TRUE);
dipen->reset_deceduto(); // Non e' piu' un erede
_data.insert(dipen, posdec+1); // Attaccalo dietro al deceduto
}
}
}
}
return i;
}
void TQuadroA::azzera_totali()
{
TPrint_section& totali = section('F', last_page);
totali.reset(); // Azzera le righe
for (int i = totali.fields()-1; i >= 0; i--)
totali.field(i).set(""); // Azzera i campi
}
void TQuadroA::preprocess_corpo(const TRectype& rec)
{
if (rec.num() == LF_QUAA)
{
const bool lav_prec = rec.get("CFDLPREC").not_empty();
const char rett_con = toupper(rec.get_char("RETCON"));
const bool add = !lav_prec && rett_con != 'B';
enable_message_add(add);
// Nasconde i dati anagrafici quando rett_con = B
TPrint_section& body = section('B', odd_page);
for (int i = 2; i <= 12; i++)
{
TForm_item& f = body.field(i);
f.enable(rett_con != 'B');
}
// Stampa solo le date di fine rapporto del 95
TForm_item& datafr = body.field(16);
const TDate dfr = rec.get("DATAFR");
datafr.enable(dfr.year() == 1995);
}
}
void TQuadroA::stampa_corpo(TPrinter& pr)
{
TPrint_section& body = section('B', odd_page);
body.reset();
body.update();
const int body_righe = body.height();
for (int i = 0; i < body_righe; i++)
{
pr.print(body.row(i));
_RigaCorr++;
}
if (usa_progind())
progind()->addstatus(1);
}
void TQuadroA::stampa_totali(TPrinter& pr)
{
TPrint_section& totali = section('F', last_page);
totali.update();
for (int i = 0; i < totali.items(); i++)
{
pr.print(totali.row(i));
_RigaCorr++;
}
}
void TQuadroA::stampa_firma(TPrinter& pr)
{
TPrint_section& totali = section('F', last_page);
totali.update();
TForm_item& signature = totali.find_field(2);
const int lasty = signature.y();
TPrintrow empty;
for (int i = 0; i < totali.items(); i++)
{
if (i < lasty)
pr.print(empty);
else
pr.print(totali.row(i));
_RigaCorr++;
}
}
void TQuadroA::next_page(TPrinter& pr)
{
fill_page(pr, -1); // formfeed "adattato"
inc_curr_page();
}
int TQuadroA::elementi_pagina(PaginaQuadro p) const
{
const int n[4] = { 1, 3, 3, 2 };
return n[p - PRIMA];
}
int TQuadroA::prima_riga(PaginaQuadro p) const
{
return p == PRIMA ? 45 : 5;
}
int TQuadroA::riga_totali(PaginaQuadro p) const
{
const int h = ((TQuadroA*)this)->section('B', odd_page).height();
return prima_riga(p) + elementi_pagina(p) * h;
}
bool TQuadroA::init(long codditta)
{
azzera_totali();
return InitPrint(codditta);
}
bool TQuadroA::print(const long codditta, const long NumFis, const long NumNoFis)
{
TCursor& cur = *cursor();
TPrinter& pr = printer();
if (!init(codditta))
return FALSE;
pr.formlen(QA_FORMLEN);
int elementi = 0; // Numero di elementi stampati in questa pagina
bool stampato_ultimo = FALSE;
bool stampati_totali = FALSE;
int pos = 0;
TDipendenti indice;
if (quadro() == "A" || quadro() == "B")
{
const int i = indice.fill(cur);
if (i > 0)
{
if (usa_progind())
progind()->addstatus(cur.items()-i); // Segna come elaborati tutti gli ignorati
cur = indice[0].pos();
}
else
return FALSE;
}
else
cur = 0;
while (!stampati_totali)
{
bool stampero_ultimo = (stampato_ultimo == FALSE);
if (stampero_ultimo)
{
if (indice.items() > 0) // Usa indice alternativo
stampero_ultimo &= pos == indice.items()-1;
else // Usa indice del cursore
stampero_ultimo &= cur.pos() == cur.items()-1;
}
// Usato per stampare la VK_ENDDOC in fill_page()
_EndPrintDitta=stampato_ultimo;
if (!stampato_ultimo)
preprocess_corpo(cur.curr());
switch(_PaginaCorrente)
{
case PRIMA:
if (_modulaser)
ClearFlagModulaser();
if (elementi == 0)
{
stampa_testata(pr);
jump_to_line(pr, prima_riga(PRIMA));
}
if (!stampato_ultimo)
{
stampa_corpo(pr);
stampato_ultimo = stampero_ultimo;
}
elementi++;
if (elementi >= elementi_pagina(PRIMA))
{
next_page(pr);
elementi = 0;
}
break;
case SECONDA:
case TERZA:
if (!stampato_ultimo)
{
if (elementi == 0)
jump_to_line(pr, prima_riga(_PaginaCorrente));
stampa_corpo(pr);
stampato_ultimo = stampero_ultimo;
}
elementi++;
if (elementi >= elementi_pagina(_PaginaCorrente))
{
next_page(pr);
elementi = 0;
}
break;
case QUARTA:
if (!stampato_ultimo)
{
if (elementi == 0)
jump_to_line(pr, prima_riga(QUARTA));
stampa_corpo(pr);
stampato_ultimo = stampero_ultimo;
}
elementi++;
if (elementi >= elementi_pagina(QUARTA))
{
jump_to_line(pr, riga_totali(QUARTA));
if (stampato_ultimo)
{
stampa_totali(pr);
stampati_totali = TRUE;
}
else
stampa_firma(pr);
next_page(pr);
elementi = 0;
}
break;
default:
CHECK(0, "Invalid Quadro A page");
break;
}
if (!stampato_ultimo)
{
if (indice.items() > 0)
cur = indice[++pos].pos();
else
++cur;
}
}
close_print();
return TRUE;
}
bool TStampaQuadroA::user_create()
{
_form = new TQuadroA("77QA", quadro());
TString sortkey(80);
sortkey.format("CODDITTA|%d->COGNOME|%d->NOME|CODDIP", LF_DIPEND, LF_DIPEND);
_cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
return TRUE;
}
bool TStampaQuadroA::user_destroy()
{
if (_cur)
delete _cur;
if (_form)
delete _form;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////////
// Quadro A1
/////////////////////////////////////////////////////////////////////////////////
int TQuadroA1::elementi_pagina(PaginaQuadro p) const
{
const int n[4] = { 3, 6, 6, 5 };
return n[p-PRIMA];
}
int TQuadroA1::prima_riga(PaginaQuadro p) const
{
return p == PRIMA ? 32 : 4;
}
long TQuadroA1::filtra(const long codditta)
{
TString filtr(32);
filtr.format("CODDITTA=%ld|ANNORIF=1995", codditta);
cursor()->setfilter(filtr, TRUE);
const long items = cursor()->items();
return items;
}
void TQuadroA1::preprocess_corpo(const TRectype& rec)
{
if (rec.num() == LF_QUAA1)
{
// Stampa solo le date di ricezione del 95
const TDate dr = rec.get("DATARIC26");
TForm_item& dataric = find_field('B', odd_page, 26);
dataric.enable(dr.year() == 1995);
}
}
bool TStampaQuadroA1::user_create()
{
_form = new TQuadroA1("77QA1", quadro());
TString sortkey(80);
sortkey.format("CODDITTA|%d->COGNOME|%d->NOME|CODDIP|MESERIF|NPROG", LF_DIPEND, LF_DIPEND);
_cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////////
// Quadro A2
/////////////////////////////////////////////////////////////////////////////////
int TQuadroA2::elementi_pagina(PaginaQuadro p) const
{
const int n[4] = { 3, 6, 6, 5 };
return n[p-PRIMA];
}
int TQuadroA2::prima_riga(PaginaQuadro p) const
{
return p == PRIMA ? 32 : 4;
}
void TQuadroA2::preprocess_corpo(const TRectype& rec)
{
if (rec.num() == LF_QUAA2)
{
const char ret_con = toupper(rec.get_char("RETCON"));
const bool add = ret_con != 'B';
enable_message_add(add);
// Nasconde i dati anagrafici quando rett_con = B
TPrint_section& body = section('B', odd_page);
for (int i = 2; i <= 7; i++)
{
TForm_item& f = body.field(i);
f.enable(add);
}
}
}
bool TStampaQuadroA2::user_create()
{
_form = new TQuadroA2("77QA2", quadro());
TString sortkey(80);
sortkey.format("CODDITTA|%d->COGNOME|%d->NOME|CODDIP|RETCON|NPROG", LF_DIPEND, LF_DIPEND);
_cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////////
// Quadro A3
/////////////////////////////////////////////////////////////////////////////////
int TQuadroA3::elementi_pagina(PaginaQuadro p) const
{
const int n[4] = { 6, 10, 10, 9 };
return n[p-PRIMA];
}
int TQuadroA3::prima_riga(PaginaQuadro p) const
{
return p == PRIMA ? 32 : 4;
}
bool TStampaQuadroA3::user_create()
{
_form = new TQuadroA3("77QA3", quadro());
TString sortkey(80);
sortkey.format("CODDITTA|NPROG|%d->COGNOME|%d->NOME|CODDIP", LF_DIPEND, LF_DIPEND);
_cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
return TRUE;
}
/////////////////////////////////////////////////////////////////
// QUADRO B
/////////////////////////////////////////////////////////////////
int TQuadroB::elementi_pagina(PaginaQuadro p) const
{
const int n[4] = { 3, 5, 5, 3 };
return n[p-PRIMA];
}
int TQuadroB::prima_riga(PaginaQuadro p) const
{
return p == PRIMA ? 32 : 6;
}
bool TStampaQuadroB::user_create()
{
_form = new TQuadroB("77QB", quadro());
TString sortkey(80);
sortkey.format("CODDITTA|%d->COGNOME|%d->NOME|CODDIP|DATAINI|NPROG", LF_DIPEND, LF_DIPEND);
_cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
return TRUE;
}
//////////////////////////////////////////////////////////////
// QUADRO H
//////////////////////////////////////////////////////////////
void TQuadroH::inc_curr_page()
{
if (_PaginaCorrente == PRIMA)
_PaginaCorrente = SECONDA;
else
if (_PaginaCorrente == SECONDA)
_PaginaCorrente = PRIMA;
}
int TQuadroH::elementi_pagina(PaginaQuadro p) const
{
const int n[2] = { 21, 27 };
return n[p-PRIMA];
}
int TQuadroH::prima_riga(PaginaQuadro p) const
{
return p == PRIMA ? 24 : 9;
}
bool TQuadroH::print(const long codditta, const long NumFis, const long NumNoFis)
{
TCursor& cur = *cursor();
TPrinter& pr = printer();
if (!InitPrint(codditta))
return FALSE;
pr.formlen(QH_FORMLEN);
int elementi = 0; // Numero di elementi stampati in questa pagina
bool stampato_ultimo = FALSE;
bool stampati_totali = FALSE;
cur = 0;
while (!stampati_totali)
{
bool stampero_ultimo = stampato_ultimo == FALSE;
if (stampero_ultimo)
stampero_ultimo &= cur.pos() == cur.items()-1;
switch(_PaginaCorrente)
{
case PRIMA:
if (_modulaser)
ClearFlagModulaser();
if (elementi == 0)
{
stampa_testata(pr);
jump_to_line(pr, prima_riga(PRIMA));
}
if (!stampato_ultimo)
{
stampa_corpo(pr);
stampato_ultimo = stampero_ultimo;
}
_EndPrintDitta=stampato_ultimo;
elementi++;
if (elementi >= elementi_pagina(PRIMA))
{
next_page(pr);
elementi = 0;
}
break;
case SECONDA:
if (!stampato_ultimo)
{
if (elementi == 0)
jump_to_line(pr, prima_riga(SECONDA));
stampa_corpo(pr);
stampato_ultimo = stampero_ultimo;
}
_EndPrintDitta=stampato_ultimo;
elementi++;
if (elementi >= elementi_pagina(SECONDA))
{
if (stampato_ultimo)
{
jump_to_line(pr, riga_totali(SECONDA));
stampa_totali(pr);
stampati_totali = TRUE;
}
next_page(pr);
elementi = 0;
}
break;
default:
CHECK(0, "Invalid Quadro A page");
break;
}
if (!stampato_ultimo)
++cur;
}
close_print();
return TRUE;
}
bool TStampaQuadroH::user_create()
{
_form = new TQuadroH("77QH", quadro());
TString sortkey(80);
sortkey.format("CODDITTA|H1ANNO|H1ENTE", LF_QUAH, LF_QUAH);
_cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
return TRUE;
}

242
m770/77stqab.h Executable file
View File

@ -0,0 +1,242 @@
#ifndef __77STQAB_H
#define __77STQAB_H
#include "77stq.h"
//////////////////////////////////////
// QUADRO A
//////////////////////////////////////
class TDipendente : public TSortable
{
TRecnotype _pos;
long _codice_ditta;
TString _ragsoc;
long _codice_dipendente;
long _codice_deceduto;
TDate _fine_rapporto;
bool _lavoro_precedente;
char _causa;
char _rettifica_conguaglio;
int _numero_progressivo;
public:
virtual int compare(const TSortable& s) const;
TRecnotype pos() const { return _pos; }
long codice_deceduto() const { return _codice_deceduto; }
void reset_deceduto() { _codice_deceduto = -_codice_deceduto; }
long codice() const { return _codice_dipendente; }
int anno_fine_rapporto() const { return _fine_rapporto.year(); }
bool lavoro_precedente() const { return _lavoro_precedente; }
char rettifica_conguaglio() const { return _rettifica_conguaglio; }
TDipendente(const TCursor& cur);
virtual ~TDipendente() { }
};
class TDipendenti : public TObject
{
TArray _data;
protected:
const TDipendente& dip(int i) const { return (const TDipendente&)_data[i]; }
public:
const TDipendente& operator[](int i) const { return dip(i); }
int fill(TCursor& cur);
int items() const { return _data.items(); }
int find(long d) const;
TDipendenti() { }
virtual ~TDipendenti() { }
};
class TQuadroA : public TDicForm
{
enum { QA_FORMLEN = 72 };
protected:
virtual void next_page(TPrinter& pr);
virtual bool print(const long codditta, const long NumFis, const long NumNoFis);
virtual void azzera_totali();
virtual void aggiorna_totali(const char) { }
virtual int elementi_pagina(PaginaQuadro p) const;
virtual int prima_riga(PaginaQuadro p) const;
virtual int riga_totali(PaginaQuadro p) const;
bool init(long codditta);
virtual void preprocess_corpo(const TRectype& rec);
void stampa_corpo(TPrinter& pr);
void stampa_totali(TPrinter& pr);
void stampa_firma(TPrinter& pr);
public:
TQuadroA(const char* form, const char* quadro) : TDicForm(form, quadro) {}
virtual ~TQuadroA() {}
};
class TStampaQuadroA : public TStampaQuadro
{
protected:
TDicForm* _form;
TCursor* _cur;
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool conta_tipi_per() const { return FALSE; }
virtual TDicForm* get_form() const { return _form; }
virtual TCursor* get_cursor() const { return _cur; }
public:
TStampaQuadroA(const char* quadro, char livel) : TStampaQuadro(quadro, livel) { }
virtual ~TStampaQuadroA() { }
};
///////////////////////////////////////////////
// QUADRO A1
///////////////////////////////////////////////
class TQuadroA1 : public TQuadroA
{
protected:
virtual int elementi_pagina(PaginaQuadro p) const;
virtual int prima_riga(PaginaQuadro p) const;
virtual long filtra(const long codditta);
virtual void preprocess_corpo(const TRectype& rec);
public:
TQuadroA1(const char* form, const char* quadro) : TQuadroA(form, quadro) { }
virtual ~TQuadroA1() { }
};
class TStampaQuadroA1 : public TStampaQuadroA
{
protected:
virtual bool user_create();
public:
TStampaQuadroA1(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { }
virtual ~TStampaQuadroA1() { }
};
///////////////////////////////////////////////
// QUADRO A2
///////////////////////////////////////////////
class TQuadroA2 : public TQuadroA
{
protected:
virtual int elementi_pagina(PaginaQuadro p) const;
virtual int prima_riga(PaginaQuadro p) const;
virtual void preprocess_corpo(const TRectype& rec);
public:
TQuadroA2(const char* form, const char* quadro) : TQuadroA(form, quadro) { }
virtual ~TQuadroA2() { }
};
class TStampaQuadroA2 : public TStampaQuadroA
{
protected:
virtual bool user_create();
public:
TStampaQuadroA2(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { }
virtual ~TStampaQuadroA2() { }
};
/////////////////////////////////////////////////
// QUADRO A3
/////////////////////////////////////////////////
class TQuadroA3 : public TQuadroA
{
protected:
virtual int elementi_pagina(PaginaQuadro p) const;
virtual int prima_riga(PaginaQuadro p) const;
public:
TQuadroA3(const char* form, const char* quadro) : TQuadroA(form, quadro) { }
virtual ~TQuadroA3() { }
};
class TStampaQuadroA3 : public TStampaQuadroA
{
protected:
virtual bool user_create();
public:
TStampaQuadroA3(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { }
virtual ~TStampaQuadroA3() { }
};
///////////////////////////////////////////////////////
// QUADRO B
///////////////////////////////////////////////////////
class TQuadroB : public TQuadroA
{
protected:
virtual int elementi_pagina(PaginaQuadro p) const;
virtual int prima_riga(PaginaQuadro p) const;
public:
TQuadroB(const char* form, const char* quadro) : TQuadroA(form, quadro) { }
virtual ~TQuadroB() { }
};
class TStampaQuadroB : public TStampaQuadroA
{
protected:
virtual bool user_create();
public:
TStampaQuadroB(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { }
virtual ~TStampaQuadroB() { }
};
///////////////////////////////////////////////////////////////////////////////////////////
//
// Quadro H
//
///////////////////////////////////////////////////////////////////////////////////////////
class TQuadroH : public TQuadroA
{
enum { QH_FORMLEN = 72 };
protected:
virtual bool ultima_pagina() const { return _PaginaCorrente==SECONDA; }
virtual int elementi_pagina(PaginaQuadro p) const;
virtual int prima_riga(PaginaQuadro p) const;
virtual bool print(const long codditta, const long NumFis, const long NumNoFis);
virtual void inc_curr_page();
public:
TQuadroH(const char* form, const char* quadro) : TQuadroA(form, quadro) { }
virtual ~TQuadroH() { }
};
class TStampaQuadroH : public TStampaQuadroA
{
protected:
virtual bool user_create();
public:
TStampaQuadroH(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) {}
virtual ~TStampaQuadroH() {}
};
#endif

286
m770/77stqc.cpp Executable file
View File

@ -0,0 +1,286 @@
///////////////////////////////////////////////////////////
// Quadro 770/C
///////////////////////////////////////////////////////////
#include "77stqc.h"
/////////////////////////////////////////////////////////////////////////////////
// Quadro C
/////////////////////////////////////////////////////////////////////////////////
bool TQuadroC::controlla_percentuale(TCursor& cur, const real& perc_p)
{
bool stampa = TRUE;
if (perc_p == ZERO)
{
long ditta_p = cur.curr().get_long(QUC_CODDITTA);
char tipo_p = cur.curr().get_char(QUC_TIPOA);
long codana_p = cur.curr().get_long(QUC_CODANAGR);
TString codcaus_p = cur.curr().get (QUC_CODCAUS);
++(cur);
long ditta = cur.curr().get_long(QUC_CODDITTA);
char tipo = cur.curr().get_char(QUC_TIPOA);
long codana = cur.curr().get_long(QUC_CODANAGR);
TString codcaus = cur.curr().get (QUC_CODCAUS);
real perc = cur.curr().get_real(QUC_PERC);
if (ditta == ditta_p && tipo == tipo_p &&
codana == codana_p && codcaus == codcaus_p)
{
if (perc != ZERO)
{
stampa = FALSE;
_devo_sommare = TRUE;
}
}
--(cur);
}
return stampa;
}
void TQuadroC::leggi_importi()
{
TCursor* cur = cursor();
_totale = cur->curr().get_real(QUC_TOTALE);
_contssn = cur->curr().get_real(QUC_CONTSSN);
_somme = cur->curr().get_real(QUC_SOMME);
_imponibile = cur->curr().get_real(QUC_IMPONIBILE);
_ritenute = cur->curr().get_real(QUC_RITENUTE);
_netto = cur->curr().get_real(QUC_NETTO);
}
void TQuadroC::setta_importi(TPrint_section& body)
{
TCursor* cur = cursor();
real totale = cur->curr().get_real(QUC_TOTALE);
real contssn = cur->curr().get_real(QUC_CONTSSN);
real somme = cur->curr().get_real(QUC_SOMME);
real imponibile = cur->curr().get_real(QUC_IMPONIBILE);
real ritenute = cur->curr().get_real(QUC_RITENUTE);
real netto = cur->curr().get_real(QUC_NETTO);
if (_devo_sommare)
{
totale += _totale;
contssn += _contssn;
somme += _somme;
imponibile += _imponibile;
ritenute += _ritenute;
netto += _netto;
_devo_sommare = FALSE;
}
TForm_item& ftotale = body.find_field(C_TOTALE);
TForm_item& fcontssn = body.find_field(C_CONTSSN);
TForm_item& fsomme = body.find_field(C_SOMME);
TForm_item& fimponibile = body.find_field(C_IMPONIBILE);
TForm_item& fritenute = body.find_field(C_RITENUTE);
TForm_item& fnetto = body.find_field(C_NETTO);
TString stotale (totale.string());
TString scontssn (contssn.string());
TString ssomme (somme.string());
TString simponibile(imponibile.string());
TString sritenute (ritenute.string());
TString snetto (netto.string());
// Setta i campi
ftotale.set(stotale);
fcontssn.set(scontssn);
fsomme.set(ssomme);
fimponibile.set(simponibile);
fritenute.set(sritenute);
fnetto.set(snetto);
}
void TQuadroC::stampa_corpo(TPrinter& pr)
{
TPrint_section& body = section('B', odd_page);
body.reset();
// body.update();
setta_importi(body);
body.update();
const int body_righe = body.height();
for (int i=0; i < body_righe; i++)
{
pr.print(body.row(i));
_RigaCorr++;
}
body.reset();
if (usa_progind())
progind()->addstatus(1);
}
int TQuadroC::elementi_pagina(PaginaQuadro p) const
{
const int n[4] = { 6, 10, 10, 9 };
return n[p-PRIMA];
}
int TQuadroC::prima_riga(PaginaQuadro p) const
{
return p == PRIMA ? 27 : 8;
}
bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis)
{
TCursor& cur = *cursor();
TPrinter& pr = printer();
bool stampa = TRUE;
if (!InitPrint(codditta))
return FALSE;
pr.formlen(QA_FORMLEN);
int elementi = 0; // Numero di elementi stampati in questa pagina
bool stampato_ultimo = FALSE;
bool stampati_totali = FALSE;
int pos = 0;
TDipendenti indice;
if (quadro() == "A" || quadro() == "B")
{
const int i = indice.fill(cur);
if (i > 0)
{
if (usa_progind())
progind()->addstatus(cur.items()-i); // Segna come elaborati tutti gli ignorati
cur = indice[0].pos();
}
else
return FALSE;
}
else
cur = 0;
while (!stampati_totali)
{
bool stampa = TRUE;
bool stampero_ultimo = stampato_ultimo == FALSE;
if (stampero_ultimo)
{
if (indice.items() > 0) // Usa indice alternativo
stampero_ultimo &= pos == indice.items()-1;
else // Usa indice del cursore
stampero_ultimo &= cur.pos() == cur.items()-1;
}
_EndPrintDitta=stampato_ultimo;
switch(_PaginaCorrente)
{
case PRIMA:
if (_modulaser)
ClearFlagModulaser();
if (elementi == 0)
{
stampa_testata(pr);
jump_to_line(pr, prima_riga(PRIMA));
}
if (!stampato_ultimo)
{
real perc_p = cur.curr().get_real(QUC_PERC);
stampa = controlla_percentuale(cur,perc_p);
if (stampa)
stampa_corpo(pr);
else
leggi_importi();
stampato_ultimo = stampero_ultimo;
}
elementi++;
if (elementi >= elementi_pagina(PRIMA))
{
next_page(pr);
elementi = 0;
}
break;
case SECONDA:
case TERZA:
if (!stampato_ultimo)
{
if (elementi == 0)
jump_to_line(pr, prima_riga(_PaginaCorrente));
real perc_p = cur.curr().get_real(QUC_PERC);
stampa = controlla_percentuale(cur,perc_p);
if (stampa)
stampa_corpo(pr);
else
leggi_importi();
stampato_ultimo = stampero_ultimo;
}
elementi++;
if (elementi >= elementi_pagina(_PaginaCorrente))
{
next_page(pr);
elementi = 0;
}
break;
case QUARTA:
if (!stampato_ultimo)
{
if (elementi == 0)
jump_to_line(pr, prima_riga(QUARTA));
real perc_p = cur.curr().get_real(QUC_PERC);
stampa = controlla_percentuale(cur,perc_p);
if (stampa)
stampa_corpo(pr);
else
leggi_importi();
stampato_ultimo = stampero_ultimo;
}
elementi++;
if (elementi >= elementi_pagina(QUARTA))
{
if (stampato_ultimo)
{
jump_to_line(pr, riga_totali(QUARTA));
stampa_totali(pr);
stampati_totali = TRUE;
}
next_page(pr);
elementi = 0;
}
break;
default:
CHECK(0, "Invalid Quadro A page");
break;
}
if (!stampato_ultimo)
{
if (indice.items() > 0)
cur = indice[++pos].pos();
else
++cur;
}
}
close_print();
return TRUE;
}
bool TStampaQuadroC::user_create()
{
_form = new TQuadroC("77QC", quadro());
TString sortkey(80);
sortkey.format("CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC", LF_QUAC, LF_QUAC);
_cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
return TRUE;
}

39
m770/77stqc.h Executable file
View File

@ -0,0 +1,39 @@
#ifndef __77STQC_H
#define __77STQC_H
#include "77stq.h"
#include "77stqab.h"
class TQuadroC : public TQuadroA
{
enum { QA_FORMLEN = 72 };
real _totale, _contssn, _somme, _imponibile, _ritenute, _netto;
bool _devo_sommare;
protected:
virtual int elementi_pagina(PaginaQuadro p) const;
virtual int prima_riga(PaginaQuadro p) const;
virtual bool print(const long codditta, const long NumFis, const long NumNoFis);
public:
bool controlla_percentuale(TCursor& cur, const real& perc_p);
void stampa_corpo(TPrinter& pr);
void setta_importi(TPrint_section& body);
void leggi_importi();
TQuadroC(const char* form, const char* quadro) : TQuadroA(form, quadro) { }
virtual ~TQuadroC() { }
};
class TStampaQuadroC : public TStampaQuadroA
{
protected:
virtual bool user_create();
public:
TStampaQuadroC(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { }
virtual ~TStampaQuadroC() { }
};
#endif