Patch level : 2.2 bopath
Files correlati : ca0, ca2 e tracciati Ricompilazione Demo : [ ] Commento : Prima versione funzionante :-) dei movimenti di contabilita' analitica Richiesto aggiornamento modulo 'include' per poter utilizzare il nuovo fantastico costruttore dei TRecord_array git-svn-id: svn://10.65.10.50/trunk@12688 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
fb861c0822
commit
08d0526d91
@ -41,3 +41,8 @@
|
|||||||
#define F_PDCI_4 136
|
#define F_PDCI_4 136
|
||||||
#define F_DESPDCI_4 137
|
#define F_DESPDCI_4 137
|
||||||
#define F_USE_PDCC 138
|
#define F_USE_PDCC 138
|
||||||
|
|
||||||
|
#define F_CDCREQ 140
|
||||||
|
#define F_CMSREQ 141
|
||||||
|
#define F_FSCREQ 142
|
||||||
|
#define F_PDCREQ 143
|
||||||
|
121
ca/ca0300a.uml
121
ca/ca0300a.uml
@ -61,24 +61,28 @@ BEGIN
|
|||||||
FIELD FathFasi
|
FIELD FathFasi
|
||||||
END
|
END
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 78 7
|
ENDPAGE
|
||||||
|
|
||||||
|
PAGE "Pagina 2" -1 -1 78 10
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 78 8
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 8 "@bCentro di costo"
|
PROMPT 1 1 "@bCentro di costo"
|
||||||
END
|
END
|
||||||
|
|
||||||
TEXT -1
|
TEXT -1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 4 9 "Formato codice"
|
PROMPT 4 2 "Formato codice"
|
||||||
END
|
END
|
||||||
|
|
||||||
TEXT -1
|
TEXT -1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 9 "Descrizione"
|
PROMPT 27 2 "Descrizione"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CDC_1 20
|
STRING F_CDC_1 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 10 "1 "
|
PROMPT 2 3 "1 "
|
||||||
MESSAGE EMPTY CLEAR,F_CDC_2|CLEAR,F_DESCDC_2|K_TAB,F_CDC_2|RESET,F_DESCDC_1
|
MESSAGE EMPTY CLEAR,F_CDC_2|CLEAR,F_DESCDC_2|K_TAB,F_CDC_2|RESET,F_DESCDC_1
|
||||||
MESSAGE ENABLE,F_CDC_2|ENABLE,F_DESCDC_2
|
MESSAGE ENABLE,F_CDC_2|ENABLE,F_DESCDC_2
|
||||||
FIELD CdC(1)
|
FIELD CdC(1)
|
||||||
@ -86,13 +90,13 @@ END
|
|||||||
|
|
||||||
STRING F_DESCDC_1 50
|
STRING F_DESCDC_1 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 10 ""
|
PROMPT 27 3 ""
|
||||||
FIELD CdCDes(1)
|
FIELD CdCDes(1)
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CDC_2 20
|
STRING F_CDC_2 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 11 "2 "
|
PROMPT 2 4 "2 "
|
||||||
MESSAGE EMPTY CLEAR,F_CDC_3|CLEAR,F_DESCDC_3|K_TAB,F_CDC_3|RESET,F_DESCDC_2
|
MESSAGE EMPTY CLEAR,F_CDC_3|CLEAR,F_DESCDC_3|K_TAB,F_CDC_3|RESET,F_DESCDC_2
|
||||||
MESSAGE ENABLE,F_CDC_3|ENABLE,F_DESCDC_3
|
MESSAGE ENABLE,F_CDC_3|ENABLE,F_DESCDC_3
|
||||||
FLAGS "G"
|
FLAGS "G"
|
||||||
@ -101,13 +105,13 @@ END
|
|||||||
|
|
||||||
STRING F_DESCDC_2 50
|
STRING F_DESCDC_2 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 11 ""
|
PROMPT 27 4 ""
|
||||||
FIELD CdCDes(2)
|
FIELD CdCDes(2)
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CDC_3 20
|
STRING F_CDC_3 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 12 "3 "
|
PROMPT 2 5 "3 "
|
||||||
MESSAGE EMPTY CLEAR,F_CDC_4|CLEAR,F_DESCDC_4|K_TAB,F_CDC_4|RESET,F_DESCDC_3
|
MESSAGE EMPTY CLEAR,F_CDC_4|CLEAR,F_DESCDC_4|K_TAB,F_CDC_4|RESET,F_DESCDC_3
|
||||||
MESSAGE ENABLE,F_CDC_4|ENABLE,F_DESCDC_4
|
MESSAGE ENABLE,F_CDC_4|ENABLE,F_DESCDC_4
|
||||||
FLAGS "G"
|
FLAGS "G"
|
||||||
@ -116,13 +120,13 @@ END
|
|||||||
|
|
||||||
STRING F_DESCDC_3 50
|
STRING F_DESCDC_3 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 12 ""
|
PROMPT 27 5 ""
|
||||||
FIELD CdCDes(3)
|
FIELD CdCDes(3)
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CDC_4 20
|
STRING F_CDC_4 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 13 "4 "
|
PROMPT 2 6 "4 "
|
||||||
MESSAGE EMPTY RESET,F_DESCDC_4
|
MESSAGE EMPTY RESET,F_DESCDC_4
|
||||||
FLAGS "G"
|
FLAGS "G"
|
||||||
FIELD CdC(4)
|
FIELD CdC(4)
|
||||||
@ -130,28 +134,34 @@ END
|
|||||||
|
|
||||||
STRING F_DESCDC_4 50
|
STRING F_DESCDC_4 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 13 ""
|
PROMPT 27 6 ""
|
||||||
FIELD CdCDes(4)
|
FIELD CdCDes(4)
|
||||||
END
|
END
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 78 7
|
BOOLEAN F_CDCREQ
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 15 "@bCommessa"
|
PROMPT 2 7 "Obbligatorio nelle righe dei movimenti"
|
||||||
|
FIELD CdcRequired
|
||||||
|
END
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 78 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 9 "@bCommessa"
|
||||||
END
|
END
|
||||||
|
|
||||||
TEXT -1
|
TEXT -1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 4 16 "Formato codice"
|
PROMPT 4 10 "Formato codice"
|
||||||
END
|
END
|
||||||
|
|
||||||
TEXT -1
|
TEXT -1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 16 "Descrizione"
|
PROMPT 27 10 "Descrizione"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_1 20
|
STRING F_CMS_1 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 17 "1 "
|
PROMPT 2 11 "1 "
|
||||||
MESSAGE EMPTY CLEAR,F_CMS_2|CLEAR,F_DESCMS_2|K_TAB,F_CMS_2|RESET,F_DESCMS_1
|
MESSAGE EMPTY CLEAR,F_CMS_2|CLEAR,F_DESCMS_2|K_TAB,F_CMS_2|RESET,F_DESCMS_1
|
||||||
MESSAGE ENABLE,F_CMS_2|ENABLE,F_DESCMS_2
|
MESSAGE ENABLE,F_CMS_2|ENABLE,F_DESCMS_2
|
||||||
FIELD Cms(1)
|
FIELD Cms(1)
|
||||||
@ -159,13 +169,13 @@ END
|
|||||||
|
|
||||||
STRING F_DESCMS_1 50
|
STRING F_DESCMS_1 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 17 ""
|
PROMPT 27 11 ""
|
||||||
FIELD CmsDes(1)
|
FIELD CmsDes(1)
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_2 20
|
STRING F_CMS_2 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 18 "2 "
|
PROMPT 2 12 "2 "
|
||||||
MESSAGE EMPTY CLEAR,F_CMS_3|CLEAR,F_DESCMS_3|K_TAB,F_CMS_3|RESET,F_DESCMS_2
|
MESSAGE EMPTY CLEAR,F_CMS_3|CLEAR,F_DESCMS_3|K_TAB,F_CMS_3|RESET,F_DESCMS_2
|
||||||
MESSAGE ENABLE,F_CMS_3|ENABLE,F_DESCMS_3
|
MESSAGE ENABLE,F_CMS_3|ENABLE,F_DESCMS_3
|
||||||
FLAGS "G"
|
FLAGS "G"
|
||||||
@ -174,13 +184,13 @@ END
|
|||||||
|
|
||||||
STRING F_DESCMS_2 50
|
STRING F_DESCMS_2 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 18 ""
|
PROMPT 27 12 ""
|
||||||
FIELD CmsDes(2)
|
FIELD CmsDes(2)
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_3 20
|
STRING F_CMS_3 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 19 "3 "
|
PROMPT 2 13 "3 "
|
||||||
MESSAGE EMPTY CLEAR,F_CMS_4|CLEAR,F_DESCMS_4|K_TAB,F_CMS_4|RESET,F_DESCMS_3
|
MESSAGE EMPTY CLEAR,F_CMS_4|CLEAR,F_DESCMS_4|K_TAB,F_CMS_4|RESET,F_DESCMS_3
|
||||||
MESSAGE ENABLE,F_CMS_4|ENABLE,F_DESCMS_4
|
MESSAGE ENABLE,F_CMS_4|ENABLE,F_DESCMS_4
|
||||||
FLAGS "G"
|
FLAGS "G"
|
||||||
@ -189,13 +199,13 @@ END
|
|||||||
|
|
||||||
STRING F_DESCMS_3 50
|
STRING F_DESCMS_3 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 19 ""
|
PROMPT 27 13 ""
|
||||||
FIELD CmsDes(3)
|
FIELD CmsDes(3)
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_4 20
|
STRING F_CMS_4 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 20 "4 "
|
PROMPT 2 14 "4 "
|
||||||
MESSAGE EMPTY RESET,F_DESCMS_4
|
MESSAGE EMPTY RESET,F_DESCMS_4
|
||||||
FLAGS "G"
|
FLAGS "G"
|
||||||
FIELD Cms(4)
|
FIELD Cms(4)
|
||||||
@ -203,15 +213,21 @@ END
|
|||||||
|
|
||||||
STRING F_DESCMS_4 50
|
STRING F_DESCMS_4 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 20 ""
|
PROMPT 27 14 ""
|
||||||
FIELD CmsDes(4)
|
FIELD CmsDes(4)
|
||||||
END
|
END
|
||||||
|
|
||||||
|
BOOLEAN F_CMSREQ
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 15 "Obbligatorio nelle righe dei movimenti"
|
||||||
|
FIELD CmsRequired
|
||||||
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
|
||||||
PAGE "Pagina 2" -1 -1 78 10
|
PAGE "Pagina 3" -1 -1 78 10
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 78 7
|
GROUPBOX DLG_NULL 78 8
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 1 "@bFase"
|
PROMPT 1 1 "@bFase"
|
||||||
END
|
END
|
||||||
@ -284,85 +300,108 @@ BEGIN
|
|||||||
FIELD FscDes(4)
|
FIELD FscDes(4)
|
||||||
END
|
END
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 78 8
|
BOOLEAN F_FSCREQ
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 8 "@bPiano dei conti industriale"
|
PROMPT 2 7 "Obbligatorio nelle righe dei movimenti"
|
||||||
|
FIELD FscRequired
|
||||||
|
END
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 78 9
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 10 "@bPiano dei conti industriale"
|
||||||
END
|
END
|
||||||
|
|
||||||
BOOLEAN F_USE_PDCC
|
BOOLEAN F_USE_PDCC
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 9 "Utilizza il piano dei conti contabile"
|
PROMPT 2 11 "Utilizza il piano dei conti contabile"
|
||||||
MESSAGE TRUE CLEAR,F_PDCI_1|CLEAR,F_DESPDCI_1
|
MESSAGE TRUE HIDE,5@
|
||||||
MESSAGE FALSE ENABLE,F_PDCI_1|ENABLE,F_DESPDCI_1
|
MESSAGE FALSE SHOW,5@
|
||||||
FIELD UsePdcc
|
FIELD UsePdcc
|
||||||
END
|
END
|
||||||
|
|
||||||
TEXT -1
|
TEXT -1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 4 10 "Formato codice"
|
PROMPT 4 12 "Formato codice"
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
TEXT -1
|
TEXT -1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 10 "Descrizione"
|
PROMPT 27 12 "Descrizione"
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_PDCI_1 20
|
STRING F_PDCI_1 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 11 "1 "
|
PROMPT 2 13 "1 "
|
||||||
MESSAGE EMPTY CLEAR,F_PDCI_2|CLEAR,F_DESPDCI_2|K_TAB,F_PDCI_2|RESET,F_DESPDCI_1
|
MESSAGE EMPTY CLEAR,F_PDCI_2|CLEAR,F_DESPDCI_2|K_TAB,F_PDCI_2|RESET,F_DESPDCI_1
|
||||||
MESSAGE ENABLE,F_PDCI_2|ENABLE,F_DESPDCI_2
|
MESSAGE ENABLE,F_PDCI_2|ENABLE,F_DESPDCI_2
|
||||||
FIELD Pdci(1)
|
FIELD Pdci(1)
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_DESPDCI_1 50
|
STRING F_DESPDCI_1 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 11 ""
|
PROMPT 27 13 ""
|
||||||
FIELD PdciDes(1)
|
FIELD PdciDes(1)
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_PDCI_2 20
|
STRING F_PDCI_2 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 12 "2 "
|
PROMPT 2 14 "2 "
|
||||||
MESSAGE EMPTY CLEAR,F_PDCI_3|CLEAR,F_DESPDCI_3|K_TAB,F_PDCI_3|RESET,F_DESPDCI_2
|
MESSAGE EMPTY CLEAR,F_PDCI_3|CLEAR,F_DESPDCI_3|K_TAB,F_PDCI_3|RESET,F_DESPDCI_2
|
||||||
MESSAGE ENABLE,F_PDCI_3|ENABLE,F_DESPDCI_3
|
MESSAGE ENABLE,F_PDCI_3|ENABLE,F_DESPDCI_3
|
||||||
FLAGS "G"
|
FLAGS "G"
|
||||||
FIELD Pdci(2)
|
FIELD Pdci(2)
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_DESPDCI_2 50
|
STRING F_DESPDCI_2 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 12 ""
|
PROMPT 27 14 ""
|
||||||
FIELD PdciDes(2)
|
FIELD PdciDes(2)
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_PDCI_3 20
|
STRING F_PDCI_3 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 13 "3 "
|
PROMPT 2 15 "3 "
|
||||||
MESSAGE EMPTY CLEAR,F_PDCI_4|CLEAR,F_DESPDCI_4|K_TAB,F_PDCI_4|RESET,F_DESPDCI_3
|
MESSAGE EMPTY CLEAR,F_PDCI_4|CLEAR,F_DESPDCI_4|K_TAB,F_PDCI_4|RESET,F_DESPDCI_3
|
||||||
MESSAGE ENABLE,F_PDCI_4|ENABLE,F_DESPDCI_4
|
MESSAGE ENABLE,F_PDCI_4|ENABLE,F_DESPDCI_4
|
||||||
FLAGS "G"
|
FLAGS "G"
|
||||||
FIELD Pdci(3)
|
FIELD Pdci(3)
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_DESPDCI_3 50
|
STRING F_DESPDCI_3 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 13 ""
|
PROMPT 27 15 ""
|
||||||
FIELD PdciDes(3)
|
FIELD PdciDes(3)
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_PDCI_4 20
|
STRING F_PDCI_4 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 14 "4 "
|
PROMPT 2 16 "4 "
|
||||||
MESSAGE EMPTY RESET,F_DESPDCI_4
|
MESSAGE EMPTY RESET,F_DESPDCI_4
|
||||||
FLAGS "G"
|
FLAGS "G"
|
||||||
FIELD Pdci(4)
|
FIELD Pdci(4)
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_DESPDCI_4 50
|
STRING F_DESPDCI_4 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 14 ""
|
PROMPT 27 16 ""
|
||||||
FIELD PdciDes(4)
|
FIELD PdciDes(4)
|
||||||
|
GROUP 5
|
||||||
|
END
|
||||||
|
|
||||||
|
BOOLEAN F_PDCREQ
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 17 "Obbligatorio nelle righe dei movimenti"
|
||||||
|
FIELD PdciRequired
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
@ -32,10 +32,10 @@ BEGIN
|
|||||||
USE LF_RIP
|
USE LF_RIP
|
||||||
INPUT TIPO F_TIPO SELECT
|
INPUT TIPO F_TIPO SELECT
|
||||||
INPUT CODICE F_CODICE_I
|
INPUT CODICE F_CODICE_I
|
||||||
DISPLAY "Codice " CODICE
|
DISPLAY "Codice@8" CODICE
|
||||||
DISPLAY "Gruppo" GRUPPO
|
DISPLAY "Gruppo" GRUPPO
|
||||||
DISPLAY "Conto" CONTO
|
DISPLAY "Conto" CONTO
|
||||||
DISPLAY "Sottoconto" CONTO
|
DISPLAY "Sottoconto" SOTTOCONTO
|
||||||
DISPLAY "Descrizione@50" DESCRIZ
|
DISPLAY "Descrizione@50" DESCRIZ
|
||||||
OUTPUT F_CODICE_I CODICE
|
OUTPUT F_CODICE_I CODICE
|
||||||
OUTPUT F_DESCRIZ_I DESCRIZ
|
OUTPUT F_DESCRIZ_I DESCRIZ
|
||||||
|
607
ca/ca2100.cpp
607
ca/ca2100.cpp
@ -1,7 +1,9 @@
|
|||||||
#include <automask.h>
|
#include <automask.h>
|
||||||
#include <defmask.h>
|
#include <defmask.h>
|
||||||
#include <recarray.h>
|
#include <recarray.h>
|
||||||
|
#include <recset.h>
|
||||||
#include <relapp.h>
|
#include <relapp.h>
|
||||||
|
#include <statbar.h>
|
||||||
|
|
||||||
#include "ca2.h"
|
#include "ca2.h"
|
||||||
#include "ca2100a.h"
|
#include "ca2100a.h"
|
||||||
@ -9,24 +11,80 @@
|
|||||||
|
|
||||||
#include "../cg/cglib01.h"
|
#include "../cg/cglib01.h"
|
||||||
|
|
||||||
|
#include <mov.h>
|
||||||
|
#include <rmov.h>
|
||||||
|
|
||||||
#include "movana.h"
|
#include "movana.h"
|
||||||
#include "rmovana.h"
|
#include "rmovana.h"
|
||||||
|
#include "saldana.h"
|
||||||
|
|
||||||
|
|
||||||
class TMovanal_msk : public TAutomask
|
class TMovanal_msk : public TAutomask
|
||||||
{
|
{
|
||||||
|
TAssoc_array _saldi;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly);
|
virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly);
|
||||||
virtual bool can_be_closed() const;
|
virtual bool can_be_closed() const;
|
||||||
virtual bool on_key(KEY key);
|
virtual bool on_key(KEY key);
|
||||||
|
|
||||||
|
const TToken_string& rec2key(const TRectype& rec) const;
|
||||||
|
void aggiorna_saldo_riga(int r);
|
||||||
|
const TString& somma_campi(TToken_string& row, int first) const;
|
||||||
|
|
||||||
|
// Lettura movimento contabile
|
||||||
|
TToken_string& get_rip_row(const TRectype& rrip);
|
||||||
|
void split_cg_row(const TRectype& row, const TRecord_array& rrip);
|
||||||
|
void load_cg_row(const TRectype& row);
|
||||||
|
void load_cg_mov();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void reset_saldi();
|
||||||
|
TImporto& saldo(const TRectype& row);
|
||||||
void show_locked_buttons();
|
void show_locked_buttons();
|
||||||
|
bool row2rec(int row, TRectype& rec) const;
|
||||||
|
|
||||||
|
void row2imp(const TToken_string& row, TImporto& imp) const;
|
||||||
|
bool row2imp(int r, TImporto& imp) const;
|
||||||
|
void imp2row(const TImporto& imp, TToken_string& row) const;
|
||||||
|
|
||||||
|
void spezza_campo(const TString& str, TToken_string& row, int first) const;
|
||||||
|
|
||||||
TMovanal_msk();
|
TMovanal_msk();
|
||||||
virtual ~TMovanal_msk() { }
|
virtual ~TMovanal_msk() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TMovanal_app : public TRelation_application
|
||||||
|
{
|
||||||
|
TRelation* _rel;
|
||||||
|
TMovanal_msk* _msk;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool user_create();
|
||||||
|
virtual bool user_destroy();
|
||||||
|
virtual TMask* get_mask(int);
|
||||||
|
virtual TRelation* get_relation() const;
|
||||||
|
virtual bool get_next_key(TToken_string& key);
|
||||||
|
|
||||||
|
void write_rows(const TMask& m);
|
||||||
|
void read_rows(const TMask& m);
|
||||||
|
|
||||||
|
virtual bool protected_record(TRectype& rec);
|
||||||
|
virtual int write(const TMask& m);
|
||||||
|
virtual int rewrite(const TMask& m);
|
||||||
|
virtual int read(TMask& m);
|
||||||
|
|
||||||
|
virtual void init_query_mode(TMask& m);
|
||||||
|
virtual void init_insert_mode(TMask& m);
|
||||||
|
virtual void init_modify_mode(TMask& m);
|
||||||
|
};
|
||||||
|
|
||||||
|
static TMovanal_app& app() { return (TMovanal_app&)main_app(); }
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TMovanal_msk
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
bool TMovanal_msk::can_be_closed() const
|
bool TMovanal_msk::can_be_closed() const
|
||||||
{
|
{
|
||||||
return mode() != MODE_MOD || !get_bool(F_BLOCCATO);
|
return mode() != MODE_MOD || !get_bool(F_BLOCCATO);
|
||||||
@ -46,11 +104,147 @@ void TMovanal_msk::show_locked_buttons()
|
|||||||
{
|
{
|
||||||
const bool editmode = mode() == MODE_MOD;
|
const bool editmode = mode() == MODE_MOD;
|
||||||
const bool unlocked = can_be_closed();
|
const bool unlocked = can_be_closed();
|
||||||
|
const bool is_trans = app().is_transaction();
|
||||||
show (F_BLOCCATO, editmode);
|
show (F_BLOCCATO, editmode);
|
||||||
enable(F_BLOCCATO, unlocked);
|
enable(F_BLOCCATO, unlocked);
|
||||||
enable(DLG_SAVEREC, unlocked && edit_mode()); // Abilito il "Registra" solo in modo modifica
|
enable(DLG_SAVEREC, unlocked && (editmode || mode() == MODE_INS));
|
||||||
enable(DLG_DELREC, unlocked && editmode);
|
enable(DLG_DELREC, unlocked && editmode);
|
||||||
enable(DLG_QUIT, unlocked);
|
enable(DLG_QUIT, unlocked && !is_trans);
|
||||||
|
enable(DLG_CANCEL, mode() == MODE_QUERY || !is_trans);
|
||||||
|
enable(F_RESET, unlocked);
|
||||||
|
}
|
||||||
|
|
||||||
|
TToken_string& TMovanal_msk::get_rip_row(const TRectype& rrip)
|
||||||
|
{
|
||||||
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
|
const int pos_cdc = sheet.cid2index(S_CDC1);
|
||||||
|
const int pos_cms = sheet.cid2index(S_CMS1);
|
||||||
|
const int pos_fas = sheet.cid2index(S_FAS1);
|
||||||
|
const int pos_con = sheet.cid2index(S_CON1);
|
||||||
|
|
||||||
|
TToken_string keyrip, keyrow;
|
||||||
|
keyrip.add(rrip.get("CODCOSTO"));
|
||||||
|
keyrip.add(rrip.get("CODCMS"));
|
||||||
|
keyrip.add(rrip.get("CODFASE"));
|
||||||
|
keyrip.add(rrip.get("CODCONTO"));
|
||||||
|
|
||||||
|
if (sheet.items() > 0)
|
||||||
|
{
|
||||||
|
FOR_EACH_SHEET_ROW(sheet, i, row)
|
||||||
|
{
|
||||||
|
keyrow = somma_campi(*row, pos_cdc);
|
||||||
|
keyrow.add(somma_campi(*row, pos_cms));
|
||||||
|
keyrow.add(somma_campi(*row, pos_fas));
|
||||||
|
keyrow.add(somma_campi(*row, pos_con));
|
||||||
|
if (keyrow == keyrip)
|
||||||
|
return *row;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TToken_string& row = sheet.row(-1);
|
||||||
|
spezza_campo(keyrip.get(0), row, pos_cdc);
|
||||||
|
spezza_campo(keyrip.get(1), row, pos_cms);
|
||||||
|
spezza_campo(keyrip.get(2), row, pos_fas);
|
||||||
|
spezza_campo(keyrip.get(3), row, pos_con);
|
||||||
|
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMovanal_msk::split_cg_row(const TRectype& row, const TRecord_array& rrip)
|
||||||
|
{
|
||||||
|
// Importo totale da distribuire arrotondato ai decimali della valuta di conto
|
||||||
|
TGeneric_distrib distrib(row.get_real(RMV_IMPORTO), TCurrency::get_firm_dec());
|
||||||
|
|
||||||
|
// Calcolo tutte le percentuali da ripartire
|
||||||
|
int i;
|
||||||
|
for (i = 1; i <= rrip.rows(); i++)
|
||||||
|
distrib.add(rrip[i].get_real("RIPARTO"));
|
||||||
|
|
||||||
|
for (i = 1; i <= rrip.rows(); i++)
|
||||||
|
{
|
||||||
|
TToken_string& riga = get_rip_row(rrip[i]); // Cerca o crea la riga cui sommare la quota
|
||||||
|
TImporto impriga; row2imp(riga, impriga); // Legge l'importo della riga
|
||||||
|
const TImporto imp(row.get_char(RMV_SEZIONE), distrib.get()); // Legge la quota da distribuire
|
||||||
|
impriga += imp; impriga.normalize(); // Incrementa l'importo della riga e lo normalizza
|
||||||
|
imp2row(impriga, riga); // Aggiorna la riga
|
||||||
|
|
||||||
|
TString80 desc; riga.get(2); // Legge descrizione riga corrente
|
||||||
|
if (desc.blank()) // Se e' vuota allora ...
|
||||||
|
riga.add(row.get(RMV_DESCR), 2); // ... ci copio la descrizione della riga contabile
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMovanal_msk::load_cg_row(const TRectype& row)
|
||||||
|
{
|
||||||
|
// Cerco la ripartizione del sottoconto, se non la trovo uso quella del conto o del gruppo
|
||||||
|
for (int i = 3; i > 0; i--)
|
||||||
|
{
|
||||||
|
TString query = "USE RIP SELECT";
|
||||||
|
query << " (GRUPPO=" << row.get(RMV_GRUPPO) << ')'; // Il gruppo c'e' sempre
|
||||||
|
if (i > 1)
|
||||||
|
query << "&&(CONTO=" << row.get(RMV_CONTO) << ')'; // Il conto c'e' per i = 2 o 3
|
||||||
|
if (i > 2)
|
||||||
|
query << "&&(SOTTOCONTO=" << row.get(RMV_SOTTOCONTO) << ')'; // Il sottoconto c'e' per i = 3
|
||||||
|
query << "\nFROM TIPO='I'\nTO TIPO='I'";
|
||||||
|
TISAM_recordset rs(query);
|
||||||
|
if (rs.items() > 0) // Ho trovato la ripartizione: evviva!
|
||||||
|
{
|
||||||
|
TString16 codice = rs.get("CODICE").as_string();
|
||||||
|
codice.insert("I|");
|
||||||
|
TRecord_array rrip(codice, LF_RRIP); // Carico le righe di ripartizione
|
||||||
|
if (rrip.rows() > 0)
|
||||||
|
{
|
||||||
|
split_cg_row(row, rrip);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i == 0) // Non ho trovato nessuno schema di riaprtizione valido
|
||||||
|
{
|
||||||
|
// Creo una riga nuova
|
||||||
|
TToken_string& riga = sfield(F_RIGHE).row(-1);
|
||||||
|
const TImporto imp(row.get_char(RMV_SEZIONE), row.get_real(RMV_IMPORTO));
|
||||||
|
imp2row(imp, riga); // Ci copio l'importo
|
||||||
|
riga.add(row.get(RMV_DESCR), 2); // e la descrizione della riga contabile
|
||||||
|
}
|
||||||
|
|
||||||
|
statbar_set_title(TASK_WIN, NULL); // Restore mask mode deleted by query stats
|
||||||
|
}
|
||||||
|
|
||||||
|
// A partire dal movimento contabile calcola il totale documento ed eventualmente prepara lo sheet
|
||||||
|
void TMovanal_msk::load_cg_mov()
|
||||||
|
{
|
||||||
|
const TString& numregcg = get(F_NUMREGCG);
|
||||||
|
const TRectype& mov = cache().get(LF_MOV, numregcg);
|
||||||
|
set(F_DATAREG, mov.get(MOV_DATAREG));
|
||||||
|
if (mode() == MODE_INS)
|
||||||
|
{
|
||||||
|
set(F_DATACOMP, mov.get(MOV_DATACOMP));
|
||||||
|
set(F_DESCR, mov.get(MOV_DESCR));
|
||||||
|
}
|
||||||
|
set(F_CODCAUS, mov.get(MOV_CODCAUS), 0x2);
|
||||||
|
set(F_NUMDOC, mov.get(MOV_NUMDOC));
|
||||||
|
set(F_DATADOC, mov.get(MOV_DATADOC));
|
||||||
|
set(F_TIPODOC, mov.get(MOV_TIPODOC));
|
||||||
|
|
||||||
|
TImporto totdoc;
|
||||||
|
TRecord_array cg(numregcg, LF_RMOV);
|
||||||
|
const bool autoinsert = sfield(F_RIGHE).items() == 0;
|
||||||
|
for (int i = 1; i <= cg.rows(); i++)
|
||||||
|
{
|
||||||
|
const TRectype& row = cg.row(i);
|
||||||
|
const TBill zio(row);
|
||||||
|
if (zio.is_analitico())
|
||||||
|
{
|
||||||
|
const TImporto imp(row.get_char(RMV_SEZIONE), row.get_real(RMV_IMPORTO));
|
||||||
|
totdoc += imp;
|
||||||
|
if (autoinsert)
|
||||||
|
load_cg_row(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set(F_TOTDOC, totdoc.valore());
|
||||||
|
const char sez[2] = { totdoc.sezione(), '\0' };
|
||||||
|
set(F_SEZIONE, sez);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
@ -91,42 +285,246 @@ bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly
|
|||||||
return error_box(FR("La data di competenza deve appartenere all'esercizio in corso o al precedente"));
|
return error_box(FR("La data di competenza deve appartenere all'esercizio in corso o al precedente"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case F_TOTDOC:
|
case F_RIGHE:
|
||||||
|
if (e == se_enter)
|
||||||
|
{
|
||||||
|
const int r = int(jolly);
|
||||||
|
aggiorna_saldo_riga(r);
|
||||||
|
}
|
||||||
if (e == fe_close)
|
if (e == fe_close)
|
||||||
{
|
{
|
||||||
const real imp = o.get();
|
const TImporto totdoc(get(F_SEZIONE)[0], get_real(F_TOTDOC));
|
||||||
const char sez = get(F_SEZIONE)[0];
|
|
||||||
const TImporto totdoc(sez, imp);
|
|
||||||
TImporto totrig;
|
TImporto totrig;
|
||||||
TSheet_field& sf = sfield(F_RIGHE);
|
TSheet_field& sf = sfield(F_RIGHE);
|
||||||
FOR_EACH_SHEET_ROW(sf, i, row)
|
FOR_EACH_SHEET_ROW(sf, i, row)
|
||||||
{
|
{
|
||||||
const real dare = row->get(0);
|
TImporto imp; row2imp(*row, imp);
|
||||||
const real avere = row->get();
|
|
||||||
TImporto imp;
|
|
||||||
if (dare.is_zero())
|
|
||||||
imp.set('A', avere);
|
|
||||||
else
|
|
||||||
imp.set('D', dare);
|
|
||||||
totrig += imp;
|
totrig += imp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (totrig != totdoc)
|
if (totrig != totdoc)
|
||||||
return error_box(FR("Il totale delle righe e' %s %s"),
|
return error_box(FR("Il totale delle righe e' %s %s, mentre il totale documento e' %s %s"),
|
||||||
totrig.valore().string(),
|
totrig.valore().string(), totrig.sezione() == 'D' ? TR("Dare") : TR("Avere"),
|
||||||
totrig.sezione() == 'D' ? TR("Dare") : TR("Avere"));
|
totdoc.valore().string(), totdoc.sezione() == 'D' ? TR("Dare") : TR("Avere"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case S_DARE:
|
||||||
|
case S_AVERE:
|
||||||
|
if (e == fe_modify)
|
||||||
|
{
|
||||||
|
TSheet_field& sf = sfield(F_RIGHE);
|
||||||
|
if (!o.empty())
|
||||||
|
o.mask().reset(o.dlg() == S_DARE ? S_AVERE : S_DARE);
|
||||||
|
const int r = sfield(F_RIGHE).selected();
|
||||||
|
sf.update_row(r);
|
||||||
|
aggiorna_saldo_riga(r);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case F_NUMREGCG:
|
||||||
|
if (e == fe_init)
|
||||||
|
{
|
||||||
|
const bool vuoto = o.empty();
|
||||||
|
enable(-5, vuoto);
|
||||||
|
if (!vuoto)
|
||||||
|
load_cg_mov();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case F_BLOCCATO:
|
case F_BLOCCATO:
|
||||||
if (e == fe_modify)
|
if (e == fe_modify)
|
||||||
show_locked_buttons();
|
{
|
||||||
|
enable(DLG_SAVEREC); // Altrimenti non riesco a registrare la variazione di stato
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case F_RESET:
|
||||||
|
if (e == fe_button)
|
||||||
|
{
|
||||||
|
TSheet_field& sf = sfield(F_RIGHE);
|
||||||
|
sf.destroy();
|
||||||
|
load_cg_mov();
|
||||||
|
sf.force_update();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
if (e == fe_modify && o.dlg() >= S_CDC1 && o.dlg() <= S_CON4)
|
||||||
|
{
|
||||||
|
TSheet_field& sf = sfield(F_RIGHE);
|
||||||
|
const int r = sf.selected();
|
||||||
|
sf.update_row(r);
|
||||||
|
aggiorna_saldo_riga(r);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const TString& TMovanal_msk::somma_campi(TToken_string& row, int first) const
|
||||||
|
{
|
||||||
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
|
TMask& m = sheet.sheet_mask();
|
||||||
|
|
||||||
|
const short id = S_DARE + 100 + first;
|
||||||
|
TString& str = get_tmp_string(20);
|
||||||
|
TString80 token;
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
if (m.id2pos(id+i) < 0)
|
||||||
|
break;
|
||||||
|
const TEdit_field& fld = m.efield(id+i);
|
||||||
|
token = row.get(first+i);
|
||||||
|
token.left_just(fld.size());
|
||||||
|
str << token;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMovanal_msk::spezza_campo(const TString& str, TToken_string& row, int first) const
|
||||||
|
{
|
||||||
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
|
TMask& m = sheet.sheet_mask();
|
||||||
|
TString80 token;
|
||||||
|
|
||||||
|
const short id = 201 + first;
|
||||||
|
int start = 0;
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
if (m.id2pos(id+i) < 0)
|
||||||
|
break;
|
||||||
|
const TEdit_field& fld = m.efield(id+i);
|
||||||
|
const int len = fld.size();
|
||||||
|
token = str.mid(start, len); token.trim();
|
||||||
|
row.add(token, first+i);
|
||||||
|
start += len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prende dalla riga r dello sheet i dati da scrivere nel record rec dei movimenti analitici
|
||||||
|
bool TMovanal_msk::row2rec(int r, TRectype& rec) const
|
||||||
|
{
|
||||||
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
|
if (r < 0 || r >= sheet.items())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TToken_string& row = sheet.row(r);
|
||||||
|
rec.put(RMOVANA_ANNOES, get(F_ANNOES));
|
||||||
|
rec.put(RMOVANA_DATAREG, get(F_DATAREG));
|
||||||
|
rec.put(RMOVANA_DESCR, row.get(sheet.cid2index(S_DESCR)));
|
||||||
|
|
||||||
|
const real dare = row.get(sheet.cid2index(S_DARE)), avere = row.get();
|
||||||
|
if (dare.is_zero())
|
||||||
|
{
|
||||||
|
rec.put(RMOVANA_SEZIONE, 'A');
|
||||||
|
rec.put(RMOVANA_IMPORTO, avere);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rec.put(RMOVANA_SEZIONE, 'D');
|
||||||
|
rec.put(RMOVANA_IMPORTO, dare);
|
||||||
|
}
|
||||||
|
rec.put(RMOVANA_CODCCOSTO, somma_campi(row, sheet.cid2index(S_CDC1)));
|
||||||
|
rec.put(RMOVANA_CODCMS, somma_campi(row, sheet.cid2index(S_CMS1)));
|
||||||
|
rec.put(RMOVANA_CODFASE, somma_campi(row, sheet.cid2index(S_FAS1)));
|
||||||
|
rec.put(RMOVANA_CODCONTO, somma_campi(row, sheet.cid2index(S_CON1)));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMovanal_msk::imp2row(const TImporto& imp, TToken_string& row) const
|
||||||
|
{
|
||||||
|
row.add(imp.sezione() == 'D' ? imp.valore().string() : "", 0);
|
||||||
|
row.add(imp.sezione() == 'A' ? imp.valore().string() : "", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TMovanal_msk::row2imp(const TToken_string& row, TImporto& imp) const
|
||||||
|
{
|
||||||
|
real dare; row.get(0, dare);
|
||||||
|
real avere; row.get(1, avere);
|
||||||
|
if (dare.is_zero())
|
||||||
|
imp.set('A', avere);
|
||||||
|
else
|
||||||
|
imp.set('D', dare);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TMovanal_msk::row2imp(int r, TImporto& imp) const
|
||||||
|
{
|
||||||
|
TSheet_field& sf = sfield(F_RIGHE);
|
||||||
|
if (r >= 0 && r < sf.items())
|
||||||
|
{
|
||||||
|
const TToken_string& row = sf.row(r);
|
||||||
|
row2imp(row, imp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
imp.set('D', ZERO);
|
||||||
|
return !imp.is_zero();
|
||||||
|
}
|
||||||
|
|
||||||
|
const TToken_string& TMovanal_msk::rec2key(const TRectype& rec) const
|
||||||
|
{
|
||||||
|
TToken_string& key = get_tmp_string();
|
||||||
|
key = get(F_TIPO);
|
||||||
|
key.add(rec.get(RMOVANA_ANNOES));
|
||||||
|
key.add(rec.get(RMOVANA_CODCCOSTO));
|
||||||
|
key.add(rec.get(RMOVANA_CODCMS));
|
||||||
|
key.add(rec.get(RMOVANA_CODFASE));
|
||||||
|
key.add(rec.get(RMOVANA_CODCONTO));
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMovanal_msk::reset_saldi()
|
||||||
|
{
|
||||||
|
_saldi.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
TImporto& TMovanal_msk::saldo(const TRectype& rec)
|
||||||
|
{
|
||||||
|
const TToken_string& key = rec2key(rec);
|
||||||
|
TImporto* imp = (TImporto*)_saldi.objptr(key);
|
||||||
|
if (imp == NULL)
|
||||||
|
{
|
||||||
|
const TRectype& saldo = cache().get(LF_SALDANA, key);
|
||||||
|
const char* fld_sez = NULL;
|
||||||
|
const char* fld_val = NULL;
|
||||||
|
switch (get(F_TIPO)[0])
|
||||||
|
{
|
||||||
|
case 'P': fld_sez = SALDANA_SEZIONEP; fld_val = SALDANA_SALDOP; break;
|
||||||
|
case 'V': fld_sez = SALDANA_SEZIONEV; fld_val = SALDANA_SALDOV; break;
|
||||||
|
default : fld_sez = SALDANA_SEZIONE; fld_val = SALDANA_SALDO; break;
|
||||||
|
}
|
||||||
|
imp = new TImporto(saldo.get_char(fld_sez), saldo.get_real(fld_val));
|
||||||
|
_saldi.add(key, imp);
|
||||||
|
}
|
||||||
|
return *imp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMovanal_msk::aggiorna_saldo_riga(int r)
|
||||||
|
{
|
||||||
|
TRectype rec(LF_RMOVANA);
|
||||||
|
row2rec(r, rec);
|
||||||
|
const TToken_string& key = rec2key(rec);
|
||||||
|
|
||||||
|
TImporto sld = saldo(rec);
|
||||||
|
|
||||||
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
|
FOR_EACH_SHEET_ROW(sheet, i, row)
|
||||||
|
{
|
||||||
|
row2rec(i, rec);
|
||||||
|
const TToken_string& k = rec2key(rec);
|
||||||
|
if (k == key)
|
||||||
|
{
|
||||||
|
real dare; row->get(0, dare);
|
||||||
|
real avere; row->get(1, avere);
|
||||||
|
if (dare.is_zero())
|
||||||
|
sld += TImporto('A', avere);
|
||||||
|
else
|
||||||
|
sld += TImporto('D', dare);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sld.normalize();
|
||||||
|
set(F_DARE, sld.sezione() == 'D' ? sld.valore() : ZERO);
|
||||||
|
set(F_AVERE, sld.sezione() == 'A' ? sld.valore() : ZERO);
|
||||||
|
}
|
||||||
|
|
||||||
TMovanal_msk::TMovanal_msk() : TAutomask("ca2100a")
|
TMovanal_msk::TMovanal_msk() : TAutomask("ca2100a")
|
||||||
{
|
{
|
||||||
TSheet_field& sf = sfield(F_RIGHE);
|
TSheet_field& sf = sfield(F_RIGHE);
|
||||||
@ -157,6 +555,36 @@ TMovanal_msk::TMovanal_msk() : TAutomask("ca2100a")
|
|||||||
sf.set_column_header(id, prompt);
|
sf.set_column_header(id, prompt);
|
||||||
sf.set_column_justify(id, f.is_kind_of(CLASS_REAL_FIELD));
|
sf.set_column_justify(id, f.is_kind_of(CLASS_REAL_FIELD));
|
||||||
sf.set_column_width(id, (max(3+size, prompt.len()+1)) * CHARX);
|
sf.set_column_width(id, (max(3+size, prompt.len()+1)) * CHARX);
|
||||||
|
|
||||||
|
switch (100+(f.dlg()%100))
|
||||||
|
{
|
||||||
|
case S_CDC1:
|
||||||
|
case S_CDC2:
|
||||||
|
case S_CDC3:
|
||||||
|
case S_CDC4:
|
||||||
|
f.check_type(ini.get_bool("CdcRequired") ? CHECK_REQUIRED : CHECK_NORMAL);
|
||||||
|
break;
|
||||||
|
case S_CMS1:
|
||||||
|
case S_CMS2:
|
||||||
|
case S_CMS3:
|
||||||
|
case S_CMS4:
|
||||||
|
f.check_type(ini.get_bool("CmsRequired") ? CHECK_REQUIRED : CHECK_NORMAL);
|
||||||
|
break;
|
||||||
|
case S_FAS1:
|
||||||
|
case S_FAS2:
|
||||||
|
case S_FAS3:
|
||||||
|
case S_FAS4:
|
||||||
|
f.check_type(ini.get_bool("FscRequired") ? CHECK_REQUIRED : CHECK_NORMAL);
|
||||||
|
break;
|
||||||
|
case S_CON1:
|
||||||
|
case S_CON2:
|
||||||
|
case S_CON3:
|
||||||
|
case S_CON4:
|
||||||
|
f.check_type(ini.get_bool("PdciRequired") ? CHECK_REQUIRED : CHECK_NORMAL);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -165,31 +593,9 @@ TMovanal_msk::TMovanal_msk() : TAutomask("ca2100a")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TMovanal_app : public TRelation_application
|
///////////////////////////////////////////////////////////
|
||||||
{
|
// TMovanal_app
|
||||||
TRelation* _rel;
|
///////////////////////////////////////////////////////////
|
||||||
TMovanal_msk* _msk;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual bool user_create();
|
|
||||||
virtual bool user_destroy();
|
|
||||||
virtual TMask* get_mask(int);
|
|
||||||
virtual TRelation* get_relation() const;
|
|
||||||
|
|
||||||
const TString& somma_campi(TToken_string& row, int first) const;
|
|
||||||
void spezza_campo(const TString& str, TToken_string& row, int first) const;
|
|
||||||
int write_rows(const TMask& m);
|
|
||||||
void read_rows(const TMask& m);
|
|
||||||
|
|
||||||
virtual bool protected_record(TRectype& rec);
|
|
||||||
virtual int write(const TMask& m);
|
|
||||||
virtual int rewrite(const TMask& m);
|
|
||||||
virtual int read(TMask& m);
|
|
||||||
|
|
||||||
virtual void init_query_mode(TMask& m);
|
|
||||||
virtual void init_insert_mode(TMask& m);
|
|
||||||
virtual void init_modify_mode(TMask& m);
|
|
||||||
};
|
|
||||||
|
|
||||||
TMask* TMovanal_app::get_mask(int)
|
TMask* TMovanal_app::get_mask(int)
|
||||||
{
|
{
|
||||||
@ -201,82 +607,31 @@ TRelation* TMovanal_app::get_relation() const
|
|||||||
return _rel;
|
return _rel;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TString& TMovanal_app::somma_campi(TToken_string& row, int first) const
|
bool TMovanal_app::get_next_key(TToken_string& key)
|
||||||
{
|
{
|
||||||
TSheet_field& sheet = _msk->sfield(F_RIGHE);
|
long num = 1;
|
||||||
TMask& m = sheet.sheet_mask();
|
TLocalisamfile movana(LF_MOVANA);
|
||||||
|
if (movana.last() == NOERR)
|
||||||
const short id = 201 + first;
|
num += movana.get_long(MOVANA_NUMREG);
|
||||||
TString& str = get_tmp_string(20);
|
key.format("%d|%ld", F_NUMREG, num);
|
||||||
for (int i = 0; i < 4; i++)
|
return true;
|
||||||
{
|
|
||||||
TString80 token = row.get(first+i);
|
|
||||||
if (m.id2pos(id+i) < 0)
|
|
||||||
break;
|
|
||||||
const TEdit_field& fld = m.efield(id+i);
|
|
||||||
token.left_just(fld.size());
|
|
||||||
str << token;
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int TMovanal_app::write_rows(const TMask& m)
|
void TMovanal_app::write_rows(const TMask& m)
|
||||||
{
|
{
|
||||||
TAnal_mov& mov = (TAnal_mov&)_rel->curr();
|
TAnal_mov& mov = (TAnal_mov&)_rel->curr();
|
||||||
mov.destroy_rows();
|
mov.destroy_rows();
|
||||||
|
|
||||||
TSheet_field& sheet = _msk->sfield(F_RIGHE);
|
|
||||||
|
|
||||||
// Calcola le posizioni dei campi multilivello generati
|
|
||||||
const int pos_cdc = sheet.cid2index(S_CDC1);
|
|
||||||
const int pos_cms = sheet.cid2index(S_CMS1);
|
|
||||||
const int pos_fas = sheet.cid2index(S_FAS1);
|
|
||||||
const int pos_con = sheet.cid2index(S_CON1);
|
|
||||||
|
|
||||||
// Scandisce lo sheet e riempie il recarray
|
// Scandisce lo sheet e riempie il recarray
|
||||||
|
TSheet_field& sheet = _msk->sfield(F_RIGHE);
|
||||||
FOR_EACH_SHEET_ROW(sheet, i, row)
|
FOR_EACH_SHEET_ROW(sheet, i, row)
|
||||||
{
|
{
|
||||||
TRectype& rec = mov.new_row(); // Crea una riga nuova
|
|
||||||
rec.put(RMOVANA_ANNOES, m.get(F_ANNOES));
|
|
||||||
rec.put(RMOVANA_DATAREG, m.get(F_DATAREG));
|
|
||||||
rec.put(RMOVANA_DESCR, row->get(sheet.cid2index(S_DESCR)));
|
|
||||||
|
|
||||||
const real dare = row->get(0), avere = row->get();
|
const real dare = row->get(0), avere = row->get();
|
||||||
if (!avere.is_zero())
|
if (dare.is_zero() && avere.is_zero()) // Scarta righe vuote
|
||||||
{
|
continue;
|
||||||
rec.put(RMOVANA_SEZIONE, 'A');
|
|
||||||
rec.put(RMOVANA_IMPORTO, avere);
|
TRectype& rec = mov.new_row(); // Crea una riga nuova
|
||||||
}
|
_msk->row2rec(i, rec);
|
||||||
else
|
|
||||||
{
|
|
||||||
rec.put(RMOVANA_SEZIONE, 'D');
|
|
||||||
rec.put(RMOVANA_IMPORTO, dare);
|
|
||||||
}
|
|
||||||
rec.put(RMOVANA_CODCCOSTO, somma_campi(*row, pos_cdc));
|
|
||||||
rec.put(RMOVANA_CODCMS, somma_campi(*row, pos_cms));
|
|
||||||
rec.put(RMOVANA_CODFASE, somma_campi(*row, pos_fas));
|
|
||||||
rec.put(RMOVANA_CODCONTO, somma_campi(*row, pos_con));
|
|
||||||
}
|
|
||||||
return NOERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TMovanal_app::spezza_campo(const TString& str, TToken_string& row, int first) const
|
|
||||||
{
|
|
||||||
TSheet_field& sheet = _msk->sfield(F_RIGHE);
|
|
||||||
TMask& m = sheet.sheet_mask();
|
|
||||||
TString80 token;
|
|
||||||
|
|
||||||
const short id = 201 + first;
|
|
||||||
int start = 0;
|
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
if (m.id2pos(id+i) < 0)
|
|
||||||
break;
|
|
||||||
const TEdit_field& fld = m.efield(id+i);
|
|
||||||
const int len = fld.size();
|
|
||||||
token = str.mid(start, len); token.trim();
|
|
||||||
row.add(token, first+i);
|
|
||||||
start += len;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,14 +642,13 @@ void TMovanal_app::read_rows(const TMask& m)
|
|||||||
|
|
||||||
TSheet_field& sheet = m.sfield(F_RIGHE);
|
TSheet_field& sheet = m.sfield(F_RIGHE);
|
||||||
sheet.destroy();
|
sheet.destroy();
|
||||||
|
_msk->reset_saldi();
|
||||||
for (int i = 1; i <= a.rows(); i++)
|
for (int i = 1; i <= a.rows(); i++)
|
||||||
{
|
{
|
||||||
const TRectype& rec = a.row(i);
|
const TRectype& rec = a.row(i);
|
||||||
TToken_string& row = sheet.row(i-1);
|
TToken_string& row = sheet.row(i-1);
|
||||||
const char sez = rec.get_char(RMOVANA_SEZIONE);
|
const TImporto imp(rec.get_char(RMOVANA_SEZIONE), rec.get_real(RMOVANA_IMPORTO));
|
||||||
const real imp = rec.get(RMOVANA_IMPORTO);
|
_msk->imp2row(imp, row);
|
||||||
row.add(sez == 'D' ? imp.string() : "");
|
|
||||||
row.add(sez == 'A' ? imp.string() : "");
|
|
||||||
row.add(rec.get(RMOVANA_DESCR));
|
row.add(rec.get(RMOVANA_DESCR));
|
||||||
|
|
||||||
// Calcola le posizioni dei campi multilivello generati
|
// Calcola le posizioni dei campi multilivello generati
|
||||||
@ -302,10 +656,13 @@ void TMovanal_app::read_rows(const TMask& m)
|
|||||||
const int pos_cms = sheet.cid2index(S_CMS1);
|
const int pos_cms = sheet.cid2index(S_CMS1);
|
||||||
const int pos_fas = sheet.cid2index(S_FAS1);
|
const int pos_fas = sheet.cid2index(S_FAS1);
|
||||||
const int pos_con = sheet.cid2index(S_CON1);
|
const int pos_con = sheet.cid2index(S_CON1);
|
||||||
spezza_campo(rec.get(RMOVANA_CODCCOSTO), row, pos_cdc);
|
_msk->spezza_campo(rec.get(RMOVANA_CODCCOSTO), row, pos_cdc);
|
||||||
spezza_campo(rec.get(RMOVANA_CODCMS), row, pos_cms);
|
_msk->spezza_campo(rec.get(RMOVANA_CODCMS), row, pos_cms);
|
||||||
spezza_campo(rec.get(RMOVANA_CODFASE), row, pos_fas);
|
_msk->spezza_campo(rec.get(RMOVANA_CODFASE), row, pos_fas);
|
||||||
spezza_campo(rec.get(RMOVANA_CODCONTO), row, pos_con);
|
_msk->spezza_campo(rec.get(RMOVANA_CODCONTO), row, pos_con);
|
||||||
|
|
||||||
|
TImporto& sld = _msk->saldo(rec);
|
||||||
|
sld -= imp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -316,24 +673,14 @@ bool TMovanal_app::protected_record(TRectype& rec)
|
|||||||
|
|
||||||
int TMovanal_app::write(const TMask& m)
|
int TMovanal_app::write(const TMask& m)
|
||||||
{
|
{
|
||||||
int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR;
|
write_rows(m);
|
||||||
if (err == NOERR)
|
return TRelation_application::write(m);
|
||||||
{
|
|
||||||
write_rows(m);
|
|
||||||
err = TRelation_application::write(m);
|
|
||||||
}
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int TMovanal_app::rewrite(const TMask& m)
|
int TMovanal_app::rewrite(const TMask& m)
|
||||||
{
|
{
|
||||||
int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR;
|
write_rows(m);
|
||||||
if (err == NOERR)
|
return TRelation_application::rewrite(m);
|
||||||
{
|
|
||||||
write_rows(m);
|
|
||||||
err = TRelation_application::rewrite(m);
|
|
||||||
}
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int TMovanal_app::read(TMask& m)
|
int TMovanal_app::read(TMask& m)
|
||||||
|
48
ca/ca2100a.h
48
ca/ca2100a.h
@ -1,27 +1,29 @@
|
|||||||
#define F_NUMREG 101
|
#define F_NUMREG 201
|
||||||
#define F_ANNOES 102
|
#define F_ANNOES 202
|
||||||
#define F_DESCR 103
|
#define F_DESCR 203
|
||||||
#define F_DATAREG 104
|
#define F_DATAREG 204
|
||||||
#define F_DATACOMP 105
|
#define F_DATACOMP 205
|
||||||
#define F_DATADOC 106
|
#define F_DATADOC 206
|
||||||
#define F_CODDITTA 107
|
#define F_CODDITTA 207
|
||||||
#define F_RAGSOC 108
|
#define F_RAGSOC 208
|
||||||
#define F_TIPODOC 109
|
#define F_TIPODOC 209
|
||||||
#define F_SEZIONE 110
|
#define F_SEZIONE 210
|
||||||
#define F_TOTDOC 111
|
#define F_TOTDOC 211
|
||||||
#define F_NUMREGCG 112
|
#define F_NUMREGCG 212
|
||||||
#define F_CODCAUS 113
|
#define F_CODCAUS 213
|
||||||
#define F_DESCAUS 114
|
#define F_DESCAUS 214
|
||||||
#define F_DARE 115
|
#define F_DARE 215
|
||||||
#define F_AVERE 116
|
#define F_AVERE 216
|
||||||
#define F_BLOCCATO 117
|
#define F_BLOCCATO 217
|
||||||
#define F_TIPO 118
|
#define F_TIPO 218
|
||||||
|
#define F_NUMDOC 219
|
||||||
|
#define F_RESET 220
|
||||||
|
|
||||||
#define F_NUMREG2 201
|
#define F_NUMREG2 301
|
||||||
#define F_ANNOES2 202
|
#define F_ANNOES2 302
|
||||||
#define F_DATAREG2 203
|
#define F_DATAREG2 303
|
||||||
#define F_DESCR2 204
|
#define F_DESCR2 304
|
||||||
#define F_RIGHE 300
|
#define F_RIGHE 400
|
||||||
|
|
||||||
#define S_DARE 101
|
#define S_DARE 101
|
||||||
#define S_AVERE 102
|
#define S_AVERE 102
|
||||||
|
121
ca/ca2100a.uml
121
ca/ca2100a.uml
@ -15,9 +15,9 @@ END
|
|||||||
|
|
||||||
NUMBER F_CODDITTA 5
|
NUMBER F_CODDITTA 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 3 2 "Codice "
|
PROMPT 2 2 ""
|
||||||
FLAGS "DFR"
|
FLAGS "DFR"
|
||||||
USE LF_NDITTE KEY 1
|
USE LF_NDITTE
|
||||||
INPUT CODDITTA F_CODDITTA
|
INPUT CODDITTA F_CODDITTA
|
||||||
OUTPUT F_RAGSOC RAGSOC
|
OUTPUT F_RAGSOC RAGSOC
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
@ -25,7 +25,7 @@ END
|
|||||||
|
|
||||||
STRING F_RAGSOC 50 52
|
STRING F_RAGSOC 50 52
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 17 2 ""
|
PROMPT 9 2 "Ragione sociale "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
@ -34,25 +34,37 @@ BEGIN
|
|||||||
PROMPT 1 4 "@bTestata"
|
PROMPT 1 4 "@bTestata"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
LIST F_TIPO 1 25
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 5 "Tipo movimento "
|
||||||
|
ITEM " |Normale"
|
||||||
|
ITEM "P|Preventivo"
|
||||||
|
ITEM "V|Variazione preventivo"
|
||||||
|
FIELD TIPOMOV
|
||||||
|
END
|
||||||
|
|
||||||
DATE F_DATAREG
|
DATE F_DATAREG
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 5 "Data di registrazione "
|
PROMPT 2 6 "Data di registrazione "
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
MESSAGE COPY,F_DATAREG2
|
MESSAGE COPY,F_DATAREG2
|
||||||
FIELD DATAREG
|
FIELD DATAREG
|
||||||
FLAGS "A"
|
FLAGS "A"
|
||||||
WARNING "La data di registrazione non appartiene ad un esercizio valido"
|
WARNING "La data di registrazione non appartiene ad un esercizio valido"
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_NUMREG 7
|
NUMBER F_NUMREG 7
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 52 5 "Movimento n. "
|
PROMPT 52 6 "Movimento n. "
|
||||||
USE LF_MOVANA
|
USE LF_MOVANA
|
||||||
INPUT NUMREG F_NUMREG
|
INPUT NUMREG F_NUMREG
|
||||||
DISPLAY "Numero@7" NUMREG
|
DISPLAY "Numero@7" NUMREG
|
||||||
|
DISPLAY "Tipo" TIPOMOV
|
||||||
DISPLAY "Data reg.@10" DATAREG
|
DISPLAY "Data reg.@10" DATAREG
|
||||||
DISPLAY "Data comp.@10" DATACOMP
|
DISPLAY "Data comp.@10" DATACOMP
|
||||||
DISPLAY "Eser." ANNOES
|
DISPLAY "Eser." ANNOES
|
||||||
|
DISPLAY "P. nota" NUMREGCG
|
||||||
DISPLAY "Descrizione@50" DESCR
|
DISPLAY "Descrizione@50" DESCR
|
||||||
OUTPUT F_NUMREG NUMREG
|
OUTPUT F_NUMREG NUMREG
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
@ -63,37 +75,19 @@ END
|
|||||||
|
|
||||||
DATE F_DATACOMP
|
DATE F_DATACOMP
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 6 "Data di competenza "
|
PROMPT 2 7 "Data di competenza "
|
||||||
FIELD DATACOMP
|
FIELD DATACOMP
|
||||||
WARNING "La data di competenza non appartiene ad un esercizio valido"
|
WARNING "La data di competenza non appartiene ad un esercizio valido"
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_ANNOES 4
|
NUMBER F_ANNOES 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 52 6 "Esercizio "
|
PROMPT 52 7 "Esercizio "
|
||||||
FIELD ANNOES
|
FIELD ANNOES
|
||||||
MESSAGE COPY,F_ANNOES2
|
MESSAGE COPY,F_ANNOES2
|
||||||
FLAGS "DG"
|
FLAGS "DG"
|
||||||
END
|
END
|
||||||
|
|
||||||
DATE F_DATADOC
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 7 "Data del documento "
|
|
||||||
FIELD DATADOC
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_TIPODOC 2
|
|
||||||
BEGIN
|
|
||||||
PROMPT 42 7 "Tipo documento "
|
|
||||||
USE %TPD
|
|
||||||
INPUT CODTAB F_TIPODOC
|
|
||||||
DISPLAY "Codice" CODTAB
|
|
||||||
DISPLAY "Descrizione@60" S0
|
|
||||||
OUTPUT F_TIPODOC CODTAB
|
|
||||||
CHECKTYPE NORMAL
|
|
||||||
FIELD TIPODOC
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_DESCR 50
|
STRING F_DESCR 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 8 "Descrizione "
|
PROMPT 2 8 "Descrizione "
|
||||||
@ -109,14 +103,16 @@ END
|
|||||||
NUMBER F_NUMREGCG 7
|
NUMBER F_NUMREGCG 7
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 11 "Numero "
|
PROMPT 2 11 "Numero "
|
||||||
FLAGS "D"
|
FLAGS "DG"
|
||||||
FIELD NUMREGCG
|
FIELD NUMREGCG
|
||||||
|
MESSAGE EMPTY ENABLE,F_TIPO|HIDE,F_RESET
|
||||||
|
MESSAGE DISABLE,F_TIPO|SHOW,F_RESET
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGA F_CODCAUS 3
|
STRINGA F_CODCAUS 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 19 11 "Causale "
|
PROMPT 19 11 "Causale "
|
||||||
USE LF_CAUSALI
|
USE LF_CAUSALI SELECT MOVIND!=''
|
||||||
INPUT CODCAUS F_CODCAUS
|
INPUT CODCAUS F_CODCAUS
|
||||||
DISPLAY "Codice" CODCAUS
|
DISPLAY "Codice" CODCAUS
|
||||||
DISPLAY "Descrizione@50" DESCR
|
DISPLAY "Descrizione@50" DESCR
|
||||||
@ -124,17 +120,47 @@ BEGIN
|
|||||||
OUTPUT F_DESCAUS DESCR
|
OUTPUT F_DESCAUS DESCR
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
FIELD CODCAUS
|
FIELD CODCAUS
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGA F_DESCAUS 50 40
|
STRINGA F_DESCAUS 50 40
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 34 11 ""
|
PROMPT 34 11 ""
|
||||||
USE LF_CAUSALI KEY 2
|
USE LF_CAUSALI KEY 2 SELECT MOVIND!=''
|
||||||
INPUT DESCR F_DESCAUS
|
INPUT DESCR F_DESCAUS
|
||||||
DISPLAY "Descrizione@50" DESCR
|
DISPLAY "Descrizione@50" DESCR
|
||||||
DISPLAY "Codice" CODCAUS
|
DISPLAY "Codice" CODCAUS
|
||||||
COPY OUTPUT F_CODCAUS
|
COPY OUTPUT F_CODCAUS
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
|
GROUP 5
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_TIPODOC 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 12 "Documento: Tipo "
|
||||||
|
USE %TPD
|
||||||
|
INPUT CODTAB F_TIPODOC
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@60" S0
|
||||||
|
OUTPUT F_TIPODOC CODTAB
|
||||||
|
CHECKTYPE NORMAL
|
||||||
|
FIELD TIPODOC
|
||||||
|
GROUP 5
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_NUMDOC 5
|
||||||
|
BEGIN
|
||||||
|
PROMPT 27 12 "Numero "
|
||||||
|
CHECKTYPE NORMAL
|
||||||
|
FIELD NUMDOC
|
||||||
|
GROUP 5
|
||||||
|
END
|
||||||
|
|
||||||
|
DATE F_DATADOC
|
||||||
|
BEGIN
|
||||||
|
PROMPT 48 12 "Data "
|
||||||
|
FIELD DATADOC
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 78 4
|
GROUPBOX DLG_NULL 78 4
|
||||||
@ -142,27 +168,20 @@ BEGIN
|
|||||||
PROMPT 1 14 "@bMovimento"
|
PROMPT 1 14 "@bMovimento"
|
||||||
END
|
END
|
||||||
|
|
||||||
LIST F_TIPO 1 25
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 15 "Tipo "
|
|
||||||
ITEM " |Normale"
|
|
||||||
ITEM "P|Preventivo"
|
|
||||||
ITEM "V|Variazione preventivo"
|
|
||||||
FIELD TIPOMOV
|
|
||||||
END
|
|
||||||
|
|
||||||
CURRENCY F_TOTDOC 18
|
CURRENCY F_TOTDOC 18
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 16 "Totale documento "
|
PROMPT 2 15 "Totale documento "
|
||||||
FIELD TOTDOC
|
FIELD TOTDOC
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
LISTBOX F_SEZIONE 1 5
|
LISTBOX F_SEZIONE 1 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 39 16 ""
|
PROMPT 39 15 ""
|
||||||
ITEM "D|Dare"
|
ITEM "D|Dare"
|
||||||
ITEM "A|Avere"
|
ITEM "A|Avere"
|
||||||
FIELD SEZIONE
|
FIELD SEZIONE
|
||||||
|
GROUP 5
|
||||||
END
|
END
|
||||||
|
|
||||||
BOOLEAN F_BLOCCATO
|
BOOLEAN F_BLOCCATO
|
||||||
@ -177,48 +196,48 @@ PAGE "Righe" -1 -1 80 20
|
|||||||
|
|
||||||
GROUPBOX DLG_NULL 78 4
|
GROUPBOX DLG_NULL 78 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 1 "@bMovimento"
|
PROMPT 1 0 "@bMovimento"
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_NUMREG2 7
|
NUMBER F_NUMREG2 7
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 2 "Numero "
|
PROMPT 2 1 "Numero "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_DATAREG2 7
|
NUMBER F_DATAREG2 7
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 22 2 "Data registrazione "
|
PROMPT 22 1 "Data registrazione "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_ANNOES2 7
|
NUMBER F_ANNOES2 7
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 59 2 "Esercizio "
|
PROMPT 59 1 "Esercizio "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_DESCR2 50
|
STRING F_DESCR2 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 3 "Descrizione "
|
PROMPT 2 2 "Descrizione "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
CURRENCY F_DARE 18
|
CURRENCY F_DARE 18
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 5 "Saldo riga corrente: Dare "
|
PROMPT 2 4 "Saldo riga corrente: Dare "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
CURRENCY F_AVERE 18
|
CURRENCY F_AVERE 18
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 41 5 "Avere "
|
PROMPT 52 4 "Avere "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
SPREADSHEET F_RIGHE
|
SPREADSHEET F_RIGHE -1 -2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 0 6 ""
|
PROMPT 0 5 ""
|
||||||
ITEM "Dare@15"
|
ITEM "Dare@15"
|
||||||
ITEM "Avere@15"
|
ITEM "Avere@15"
|
||||||
ITEM "Descrizione@30"
|
ITEM "Descrizione@30"
|
||||||
@ -240,6 +259,12 @@ BEGIN
|
|||||||
ITEM "Con 4"
|
ITEM "Con 4"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
BUTTON F_RESET 78 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -11 -1 "Rigenera le righe in base alle tabelle di ripartizione"
|
||||||
|
FLAGS "H"
|
||||||
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
|
||||||
ENDMASK
|
ENDMASK
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
#include "calib01.h"
|
#include <currency.h>
|
||||||
#include "calibmsk.h"
|
|
||||||
|
|
||||||
#include <tree.h>
|
#include <tree.h>
|
||||||
#include <pconti.h>
|
#include <pconti.h>
|
||||||
|
|
||||||
|
#include "calib01.h"
|
||||||
|
#include "calibmsk.h"
|
||||||
|
|
||||||
#include "movana.h"
|
#include "movana.h"
|
||||||
#include "rmovana.h"
|
#include "rmovana.h"
|
||||||
#include "saldana.h"
|
#include "saldana.h"
|
||||||
@ -959,6 +960,7 @@ void TAnal_mov::load_saldi(bool reset)
|
|||||||
if (reset)
|
if (reset)
|
||||||
_saldi.destroy();
|
_saldi.destroy();
|
||||||
|
|
||||||
|
const int dec = TCurrency::get_firm_dec();
|
||||||
const TRecord_array& a = body(LF_RMOVANA);
|
const TRecord_array& a = body(LF_RMOVANA);
|
||||||
for (int i = a.last_row(); i > 0; i--)
|
for (int i = a.last_row(); i > 0; i--)
|
||||||
{
|
{
|
||||||
@ -969,6 +971,7 @@ void TAnal_mov::load_saldi(bool reset)
|
|||||||
sld -= imp;
|
sld -= imp;
|
||||||
else
|
else
|
||||||
sld += imp;
|
sld += imp;
|
||||||
|
sld.valore().round(dec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -985,12 +988,12 @@ void TAnal_mov::update_saldi(bool kill)
|
|||||||
load_saldi(true);
|
load_saldi(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TAnal_mov::save_saldi()
|
bool TAnal_mov::save_saldi()
|
||||||
{
|
{
|
||||||
TLocalisamfile saldi(LF_SALDANA);
|
TLocalisamfile saldi(LF_SALDANA);
|
||||||
FOR_EACH_ASSOC_OBJECT(_saldi, h, k, o)
|
FOR_EACH_ASSOC_OBJECT(_saldi, h, k, o)
|
||||||
{
|
{
|
||||||
const TImporto& imp = (const TImporto&)o;
|
const TImporto& imp = *(const TImporto*)o;
|
||||||
if (!imp.is_zero())
|
if (!imp.is_zero())
|
||||||
{
|
{
|
||||||
TToken_string key = k;
|
TToken_string key = k;
|
||||||
@ -1009,26 +1012,33 @@ void TAnal_mov::save_saldi()
|
|||||||
saldi.put(SALDANA_COMMESSA, key.get());
|
saldi.put(SALDANA_COMMESSA, key.get());
|
||||||
saldi.put(SALDANA_FASE, key.get());
|
saldi.put(SALDANA_FASE, key.get());
|
||||||
saldi.put(SALDANA_CONTO, key.get());
|
saldi.put(SALDANA_CONTO, key.get());
|
||||||
saldi.write();
|
err = saldi.write();
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* fld_sez = NULL;
|
if (err == NOERR)
|
||||||
const char* fld_val = NULL;
|
|
||||||
switch (tipo)
|
|
||||||
{
|
{
|
||||||
case 'P': fld_sez = SALDANA_SEZIONEP; fld_val = SALDANA_SEZIONEP; break;
|
const char* fld_sez = NULL;
|
||||||
case 'V': fld_sez = SALDANA_SEZIONEV; fld_val = SALDANA_SEZIONEV; break;
|
const char* fld_val = NULL;
|
||||||
default : fld_sez = SALDANA_SEZIONE; fld_val = SALDANA_SEZIONE; break;
|
switch (tipo)
|
||||||
}
|
{
|
||||||
TImporto saldo(saldi.get_char(fld_sez), saldi.get_real(fld_val));
|
case 'P': fld_sez = SALDANA_SEZIONEP; fld_val = SALDANA_SALDOP; break;
|
||||||
saldo += imp;
|
case 'V': fld_sez = SALDANA_SEZIONEV; fld_val = SALDANA_SALDOV; break;
|
||||||
saldo.normalize();
|
default : fld_sez = SALDANA_SEZIONE; fld_val = SALDANA_SALDO; break;
|
||||||
|
}
|
||||||
|
TImporto saldo(saldi.get_char(fld_sez), saldi.get_real(fld_val));
|
||||||
|
saldo += imp;
|
||||||
|
saldo.normalize();
|
||||||
|
|
||||||
saldi.put(fld_sez, saldo.sezione());
|
saldi.put(fld_sez, saldo.sezione());
|
||||||
saldi.put(fld_val, saldo.valore());
|
saldi.put(fld_val, saldo.valore());
|
||||||
saldi.rewrite();
|
err = saldi.rewrite();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err != NOERR)
|
||||||
|
return error_box(TR("Impossibile aggiornare i saldi"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TAnal_mov::readat(TBaseisamfile& f, TRecnotype nrec, word lockop)
|
int TAnal_mov::readat(TBaseisamfile& f, TRecnotype nrec, word lockop)
|
||||||
@ -1059,9 +1069,7 @@ int TAnal_mov::rewrite(TBaseisamfile& f) const
|
|||||||
{
|
{
|
||||||
const int err = TMultiple_rectype::rewrite(f);
|
const int err = TMultiple_rectype::rewrite(f);
|
||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
{
|
|
||||||
((TAnal_mov*)this)->update_saldi(false);
|
((TAnal_mov*)this)->update_saldi(false);
|
||||||
}
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1081,7 +1089,7 @@ int TAnal_mov::read(long numreg, word lock)
|
|||||||
|
|
||||||
TAnal_mov::TAnal_mov(long numreg) : TMultiple_rectype(LF_MOVANA)
|
TAnal_mov::TAnal_mov(long numreg) : TMultiple_rectype(LF_MOVANA)
|
||||||
{
|
{
|
||||||
add_file(LF_RMOVANA, "NUMRIG");
|
add_file(LF_RMOVANA, RMOVANA_NUMRIG);
|
||||||
if (numreg > 0)
|
if (numreg > 0)
|
||||||
read(numreg);
|
read(numreg);
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ protected:
|
|||||||
TImporto& saldo(const TRectype& rec);
|
TImporto& saldo(const TRectype& rec);
|
||||||
void load_saldi(bool reset);
|
void load_saldi(bool reset);
|
||||||
void update_saldi(bool kill);
|
void update_saldi(bool kill);
|
||||||
void save_saldi();
|
bool save_saldi();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual int readat(TBaseisamfile& f, TRecnotype nrec, word lockop);
|
virtual int readat(TBaseisamfile& f, TRecnotype nrec, word lockop);
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
107
|
107
|
||||||
0
|
0
|
||||||
$movana|1|1|152|0|Movimenti di Analitica|||
|
$movana|1|2|152|0|Movimenti di Analitica|||
|
||||||
|
@ -17,6 +17,7 @@ CAMBIO|4|15|6|Cambio della valuta
|
|||||||
TOTDOC|4|18|3|Totale documento
|
TOTDOC|4|18|3|Totale documento
|
||||||
SEZIONE|1|1|0|Sezione del totale documento
|
SEZIONE|1|1|0|Sezione del totale documento
|
||||||
BLOCCATO|8|1|0|Movimento bloccato
|
BLOCCATO|8|1|0|Movimento bloccato
|
||||||
2
|
3
|
||||||
NUMREG|
|
NUMREG|
|
||||||
DATAREG+NUMREG|X
|
DATAREG+NUMREG|X
|
||||||
|
NUMREGCG|
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
#define __SALDANA_H
|
#define __SALDANA_H
|
||||||
|
|
||||||
#define SALDANA_ANNO "ANNO"
|
#define SALDANA_ANNO "ANNO"
|
||||||
#define SALDANA_COSTO "CODCCOSTO"
|
#define SALDANA_COSTO "COSTO"
|
||||||
#define SALDANA_COMMESSA "CODCMS"
|
#define SALDANA_COMMESSA "COMMESSA"
|
||||||
#define SALDANA_FASE "CODFASE"
|
#define SALDANA_FASE "FASE"
|
||||||
#define SALDANA_CONTO "CODCONTO"
|
#define SALDANA_CONTO "CONTO"
|
||||||
|
|
||||||
#define SALDANA_SEZIONE "SEZIONE"
|
#define SALDANA_SEZIONE "SEZIONE"
|
||||||
#define SALDANA_SALDO "SALDO"
|
#define SALDANA_SALDO "SALDO"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user