Patch level : XX 272

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Riportata la versione AGA 1.7 patch 272 sul main trunk


git-svn-id: svn://10.65.10.50/trunk@10283 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2002-05-31 10:35:40 +00:00
parent 929e9ececd
commit ac4d0ed9e4
83 changed files with 2806 additions and 1096 deletions

@ -12,6 +12,7 @@
#define F_INIZIO8 108
#define F_INIZIO9 109
#define F_INIZIO10 110
#define F_FINE0 200
#define F_FINE1 201
#define F_FINE2 202
#define F_FINE3 203

@ -120,7 +120,7 @@ END
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 0 4 "Anagrafica"
PROMPT 0 4 "@bAnagrafica"
END
LIST FLD_GD1_TIPOA 11
@ -170,7 +170,7 @@ END
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 0 8 "Attivita' prevalente"
PROMPT 0 8 "@bAttività prevalente"
END
STRING FLD_GD1_CODATTPREV 5
@ -204,7 +204,7 @@ END
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 0 12 "Telefoni"
PROMPT 0 12 "@bTelefoni"
END
STRING FLD_GD1_PTEL 10
@ -512,7 +512,7 @@ END
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 0 10 "Codici statistici"
PROMPT 0 10 "@bCodici statistici"
END
STRING FLD_GD2_CODSTAT1 7
@ -793,7 +793,7 @@ END
GROUPBOX DLG_NULL 76 7
BEGIN
PROMPT 1 4 "Soggetto Obbligato INTRA"
PROMPT 1 4 "@bSoggetto Obbligato INTRA"
FLAGS "R"
END
@ -829,19 +829,21 @@ END
BOOLEAN CHK_IN_NONOBBSTAT
BEGIN
PROMPT 2 9 "Soggetto non obbligato alla dei valori statistico, consegna e trasporto"
PROMPT 2 9 "Non obbligato a compilare: valore stat., modalità consegna e trasporto"
FIELD NONOBBSTAT
END
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 1 11 "Soggetto Delegato INTRA"
PROMPT 1 11 "@bSoggetto Delegato INTRA"
FLAGS "R"
END
LIST LST_IN_TIPOSOGDEL 1 10
BEGIN
PROMPT 1 12 "Tipo persona "
PROMPT 2 12 "Tipo persona "
ITEM "F|Fisica"
ITEM "G|Giuridica"
FIELD TIPOSOGDEL
@ -865,7 +867,7 @@ END
STRING FLD_IN_DESSOGDEL 50
BEGIN
PROMPT 1 13 "Denominazione "
PROMPT 2 13 "Denominazione "
USE LF_ANAG KEY 2
INPUT TIPOA LST_IN_TIPOSOGDEL SELECT
INPUT RAGSOC FLD_IN_DESSOGDEL
@ -879,4 +881,4 @@ END
ENDPAGE
ENDMASK
ENDMASK

@ -7,7 +7,6 @@ Item_01 = "Anagrafiche di base", [PRASSI_001]
Item_02 = "Amministrazione", <cgarea.men>
Item_03 = "Acquisti e vendite", <vearea.men>
Item_04 = "Magazzino e Produzione", <mgarea.men>
Item_11 = "Comunicazione", [PRASSI_019]
Item_11 = "Manutenzione", [PRASSI_015]
[PRASSI_001]
@ -98,15 +97,6 @@ Item_06 = "Creazione dischi di installazione", "ba1 -5", ""
Item_07 = "Backup", "ba2 -1", ""
Item_08 = "Conversione all'Euro", [PRASSI_883]
[PRASSI_019]
Caption = "Comunicazione"
Picture = <ba05.bmp>
Module = 0
Item_01 = "EasyDoc", "c:\EasyDoc\EasyDoc.exe", ""
Item_02 = "Gestione Fax", "bafax -s", ""
Item_03 = "Archivio fax spediti e ricevuti", disabled
Item_04 = "Archivio contatti telefonici", disabled
[PRASSI_883]
Caption = "Conversione all'Euro"
Picture = <ba00.bmp>

@ -6,7 +6,7 @@ TOOLBAR "" 0 20 0 2
ENDPAGE
PAGE "Tabella Modalita' di consegna" -1 -1 78 8
PAGE "Modalità di consegna" -1 -1 78 8
GROUPBOX DLG_NULL 75 7
BEGIN

@ -142,11 +142,11 @@ void TLM_app::main_loop()
TDate fromdate = m.get(F_FROM_DATE), todate = m.get(F_TO_DATE);
TString filter;
if (fromdate.ok())
filter << "(ANSI(" << MOVCE_DTMOV << ")>=" << fromdate.string(ANSI) << ')';
filter << "(ANSI(" << MOVCE_DTMOV << ")>=\"" << fromdate.string(ANSI) << "\")";
if (todate.ok())
{
if (filter.not_empty()) filter << "&&";
filter << "(ANSI(" << MOVCE_DTMOV << ")<=" << todate.string(ANSI) << ')';
filter << "(ANSI(" << MOVCE_DTMOV << ")<=\"" << todate.string(ANSI) << "\")";
}
if (codmov.not_empty())
{

@ -6,7 +6,6 @@
#include <recarray.h>
#include <relapp.h>
#include <tabutil.h>
#include <utility.h>
#include <causali.h>
#include <rcausali.h>
@ -452,26 +451,22 @@ bool TCaus_app::cod_reg_hndl (TMask_field& f, KEY k)
// controllo di consistenza tra codice (tipo) registro e tipo documento
if (k == K_ENTER)
{
// bool ok = TRUE;
const TString16 tpd = f.mask().get(F_TIPO_DOC);
const TString16 codreg = f.mask().get(F_COD_REG);
const TMask& m = f.mask();
const TString& tpd = m.get(F_TIPO_DOC);
if (tpd.not_empty())
{
TipoIVA i = nessuna_iva;
TRegistro grog(codreg, app().anno_iva());
TTable tabtpd("%TPD");
tabtpd.put("CODTAB", tpd);
if (tabtpd.read() == NOERR)
const TRectype& tabtpd = cache().get("%TPD", tpd);
if (!tabtpd.empty())
{
i = (TipoIVA)tabtpd.get_int("I0"); // IVA acquisti, vendite, generica
const TipoIVA ri = grog.iva();
if (i == iva_generica) i = ri;
if (i != ri)
const TipoIVA i = (TipoIVA)tabtpd.get_int("I0"); // IVA acquisti, vendite, generica
if (i != iva_generica) // iva_generica = 9
{
return f.warning_box("Tipo documento incompatibile con tipo registro");
i = iva_errata;
}
const TString& codreg = m.get(F_COD_REG);
const TRegistro grog(codreg, app().anno_iva());
const TipoIVA ri = grog.iva();
if (i != ri)
return f.error_box("Tipo documento incompatibile con tipo registro");
}
}
}
}

@ -31,8 +31,8 @@
#define F_DES_DOC 128
#define F_DES_REG 129
#define F_MOVIND 130
#define F_SOLAIVA 131
#define F_SOLAIVA 131
#define SS_SEZIONE 102
#define SS_TIPOCF 103
#define SS_GRUPPO 104
@ -40,3 +40,4 @@
#define SS_SOTTOCONTO 106
#define SS_DESCAGG 108
#define SS_DESCRIPTION 109
#define SS_AZZERA 200

@ -249,9 +249,9 @@ BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_NULL 9 2
BUTTON SS_AZZERA 9 2
BEGIN
PROMPT -33 -1 "Azzera"
PROMPT -33 -1 "A~zzera"
MESSAGE RESET,1@
MESSAGE EXIT,K_ENTER
END

@ -259,6 +259,7 @@ END
RADIOBUTTON F_STAMPAC 36
BEGIN
PROMPT 34 1 "@bTipo stampa"
ITEM "1|Conti movimentati"
ITEM "2|Conti con saldo diverso da zero"
END
@ -301,4 +302,4 @@ END
ENDPAGE
ENDMASK
ENDMASK

@ -1,4 +1,4 @@
#include <config.h>
#include <config.h>
#include <execp.h>
#include <mailbox.h>
#include <modaut.h>
@ -494,8 +494,7 @@ void TPrimanota_application::init_mask(TMask& m)
}
m.show(-1, clig);
m.show(-2, forg);
if (corrisp)
m.hide(F_STATOPAIV);
if (corrisp) m.hide(F_STATOPAIV);
// Show/Hide campi valuta: F_VALUTAINTRA, F_CAMBIOINTRA, F_CORRISPETTIVO, F_CORRVAL (GROUP 4)
m.show(-4, causale().valintra());
@ -1749,6 +1748,7 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action)
str.format("%d", LF_INTRA);
intro.set_paragraph(str);
intro.set("NUMREG", m.get(F_NUMREG));
intro.set("DATAREG", m.get(F_DATAREG));
if (m.field(F_CLIENTE).shown())
{
@ -1762,16 +1762,19 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action)
intro.set("TIPOCF", "F");
intro.set("CODCF", m.get(F_FORNITORE));
}
const TString& codval = m.get(F_VALUTAINTRA);
intro.set("CODVAL", codval);
intro.set("CAMBIO", m.get(F_CAMBIOINTRA));
intro.set("DATAREG", m.get(F_DATAREG));
// Controlla flag sulla causale
const bool valintra = causale().valintra();
if (valintra)
{
intro.set("CODVAL", m.get(F_VALUTAINTRA));
intro.set("CAMBIO", m.get(F_CAMBIOINTRA));
}
// Inserisci il totale documento solo in inserimento!
if (action == "Insert")
{
real totdoc = m.get(codval.empty() ? F_IMPONIBILI : F_CORRISPETTIVO);
real totdoc = m.get(valintra ? F_CORRISPETTIVO : F_IMPONIBILI);
if (test_swap(FALSE))
totdoc = -totdoc;
intro.set("TOTDOC", totdoc.string());

@ -1,4 +1,4 @@
#ifndef __CG2100_H
#ifndef __CG2100_H
#define __CG2100_H
#define F_CODDITTA 101

@ -1,4 +1,4 @@
#include <colors.h>
#include <colors.h>
#include <currency.h>
#include <msksheet.h>
#include <progind.h>
@ -198,28 +198,22 @@ int TPrimanota_application::bill2pos(const TBill& conto, char tipo)
int TPrimanota_application::clint2pos(const TClinton& conto, char tipo)
{
int r = bill2pos(conto, tipo);
if (r >= 0 && conto.commessa().not_empty())
TSheet_field& cg = app().cgs();
FOR_EACH_SHEET_ROW(cg, i, s)
{
TString_array& cg = app().cgs().rows_array();
const int num_rows = cg.items();
for (int i = r ; i < num_rows; i++)
const char t = row_type(*s);
if (t == tipo)
{
TToken_string& s = cg.row(i);
const char t = row_type(s);
if (t == tipo)
{
const TClinton c(s, FALSE);
if (c == conto)
return i;
}
const TClinton c(*s, FALSE);
if (c == conto)
return i;
}
r = -1;
}
return r;
return -1;
}
// Trova nelle righe contabili un conto di contropartita per il conto dato
int TPrimanota_application::bill2contr(const TBill& conto, char sezione) const
{
@ -704,6 +698,7 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
if (errato && a._as400 && speso.is_zero())
errato = FALSE;
if (nota && errato && speso.is_zero())
{
const int annorif = m.get_int(F_ANNORIF);
@ -715,6 +710,7 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
errato = !a.crea_partita(bill, annorif, numrif, currig, importo);
}
}
if (errato)
{
@ -741,7 +737,17 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
{
saldaconto += importo;
if (in_valuta)
saldaconto_val += a.partite().importo_speso(numreg, i+1, TRUE, 0x1);
{
if (tipo == 'G') // Le spese non si trovano sul saldaconto
{
const TExchange cam(m.get(SK_VALUTA), m.get_real(SK_CAMBIO));
TCurrency spe(importo.valore()); spe.change_value(cam);
const TImporto imp_spe(importo.sezione(), spe.get_num());
saldaconto_val += imp_spe;
} else
if (tipo == 'K')
saldaconto_val += a.partite().importo_speso(numreg, i+1, TRUE, 0x1);
}
}
}
}
@ -1840,6 +1846,7 @@ bool TPrimanota_application::caus_query_handler(TMask_field& f, KEY key)
f.set_focusdirty(FALSE);
return f.mask().stop_run(K_INS); // Entra in modo inserimento
} */
}
else
{
@ -2294,7 +2301,7 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
cp.on_hit(); // lo ricopia eventualmente a pag.3
}
}
if (cf == 'F')
if (cf == 'F' && app().causale().valintra())
{
const TString16 valintra(clifo.get("VALINTRA"));
if (!valintra.empty())
@ -2341,7 +2348,7 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
const bool occas = clifo.get_bool(CLI_OCCAS);
m.show(F_OCCASEDIT, occas); // Bottone Dati anagrafici
m.show(F_STATOPAIV, !occas); // Stato partita IVA
if (!occas)
if (!occas)
m.set(F_STATOPAIV, clifo.get(CLI_STATOPAIV));
m.show(cf == 'C' ? F_PIVACLIENTE : F_PIVAFORNITORE, !occas); // Partita IVA
m.show(cf == 'C' ? F_COFICLIENTE : F_COFIFORNITORE, !occas); // Codice Fiscale
@ -2849,4 +2856,3 @@ bool TPrimanota_application::solaiva_handler(TMask_field& f, KEY key)
return TRUE;
}

@ -1,4 +1,4 @@
#ifndef __CG2102_H
#ifndef __CG2102_H
#define __CG2102_H
#ifndef __RELAPP_H

@ -1,3 +1,5 @@
#include <stdlib.h>
#include <prefix.h>
#include <recarray.h>
#include <tabutil.h>

@ -135,6 +135,7 @@ class TMastrini_application : public TPrintapp
TString _cdc;
real _totale_commessa_dare, _totale_commessa_avere, _saldo_commessa;
TConfig* _collins;
@ -913,9 +914,7 @@ void TMastrini_application::fai_stampa132()
set_row (_rw,"@11g$[b]#7ld$[n]", &_numreg);
else
if (_stampanum == 2)
{
set_row (_rw,"@11g#7ld", &_numgio);
}
set_row (_rw,"@19g#t", &_datadocs);
set_row (_rw,"@30g#7t", &_numdoc);
@ -1005,14 +1004,28 @@ void TMastrini_application::fai_stampa198()
set_row (_rw,"@42g#3t", &_codcaus);
// Stampa saldo movimenti / Descrizione contropartita
const TRectype& rmov = current_cursor()->curr(LF_RMOV);
_gruppocontr = rmov.get_int(RMV_GRUPPOC);
_contocontr = rmov.get_int(RMV_CONTOC);
_sottocontocontr = rmov.get_long(RMV_SOTTOCONTOC);
_g_contr = rmov.get(RMV_GRUPPOC);
_c_contr = rmov.get(RMV_CONTOC);
_s_contr = rmov.get(RMV_SOTTOCONTOC);
if (_stampa_des_contro)
{
TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr);
_descrcontr.cut(0);
_descrcontr << _g_contr << ' ' << _c_contr << ' ' << _s_contr << ' ' << tc.descrizione();
_descrcontr.cut(47);
set_row (_rw,"@135g#t", &_descrcontr);
{
if (_sottocontocontr > 0)
{
TBill tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr);
_descrcontr.cut(0);
_descrcontr << _g_contr << ' ' << _c_contr << ' ' << _s_contr << ' ' << tc.descrizione();
_descrcontr.cut(47);
set_row (_rw,"@135g%-48s", (const char*)_descrcontr);
}
else
{
_descrcontr.cut(0);
}
}
else
{
@ -1591,8 +1604,8 @@ bool TMastrini_application::preprocess_page(int file, int counter)
_numreg = rmov.get_long(RMV_NUMREG);
_numrig = rmov.get_int(RMV_NUMRIG);
_gruppocontr = rmov.get_int (RMV_GRUPPOC);
_contocontr = rmov.get_int (RMV_CONTOC);
_gruppocontr = rmov.get_int(RMV_GRUPPOC);
_contocontr = rmov.get_int(RMV_CONTOC);
_sottocontocontr = rmov.get_long(RMV_SOTTOCONTOC);
_g_contr = rmov.get(RMV_GRUPPOC);
_c_contr = rmov.get(RMV_CONTOC);
@ -1739,7 +1752,7 @@ bool TMastrini_application::preprocess_page(int file, int counter)
}
}
else if (_descrizione == "")
if (_descrizionemov != "")
if (_descrizionemov.not_empty())
{
//set_row (1,"@46g%.23s", (const char*) _descrcaus);
//set_row (1,"@70g%.30s", (const char*) _descrizionemov);
@ -1749,19 +1762,18 @@ bool TMastrini_application::preprocess_page(int file, int counter)
set_row (_rw,"@70g#a", _d30);
}
else
if (_descrizionemov == "")
{
conto(_gruppocontr,_contocontr,FALSE);
TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr);
_descrcontr = tc.descrizione();
*_d22 = (const char*) _descrcaus;
set_row (_rw,"@46g#a", _d22);
if (_descrcontr != "Sconosciuto")
{
conto(_gruppocontr,_contocontr,FALSE);
TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr);
_descrcontr = tc.descrizione();
*_d22 = (const char*) _descrcaus;
set_row (_rw,"@46g#a", _d22);
if (_descrcontr != "Sconosciuto")
{
*_d30 = (const char*)_descrcontr;
set_row (_rw,"@70g#a", _d30);
}
*_d30 = (const char*)_descrcontr;
set_row (_rw,"@70g#a", _d30);
}
}
}
} //if (_nummast == 1 || _nummast == 3)
@ -2028,6 +2040,7 @@ bool TMastrini_application::preprocess_page(int file, int counter)
_riporto_parziale_dare += _importo;
_totale_commessa_dare += _importo;
if (_numcarat == 1) // Stampa 132 caratteri
set_row (_rw,"@83g%s", (const char*) _importo_str);
else
@ -2044,6 +2057,7 @@ bool TMastrini_application::preprocess_page(int file, int counter)
_riporto_parziale_avere += _importo;
_totale_commessa_avere += _importo;
if (_numcarat == 1) // Stampa 132 caratteri
set_row (_rw,"@100g%s", (const char*) _importo_str);
else
@ -2202,8 +2216,9 @@ print_action TMastrini_application::postprocess_page(int file, int counter)
reset_print();
if (_numcarat == 1)
stampa_totali132();
else
else if (_numcarat == 2)
stampa_totali198();
if (_stampatotiva)
stampa_totaliiva();
}
@ -2227,9 +2242,10 @@ print_action TMastrini_application::postprocess_page(int file, int counter)
{
if (_numcarat == 1)
stampa_totali132();
else
else if (_numcarat == 2)
stampa_totali198();
}
if (_stampatotiva)
stampa_totaliiva();
}
@ -2306,7 +2322,7 @@ print_action TMastrini_application::postprocess_page(int file, int counter)
print_action TMastrini_application::postprocess_print(int file, int counter)
{
if (file == LF_SALDI)
if (file == LF_SALDI)
{
reset_print();
stampa_totali_commessa();
@ -2314,6 +2330,7 @@ print_action TMastrini_application::postprocess_print(int file, int counter)
_msk->reset(-9);
}
return NEXT_PAGE;
}
// Stampa dei totali documenti iva se richiesta
@ -2571,6 +2588,7 @@ bool TMastrini_application::set_print(int)
_cdc.cut(0);
print();
}
}
return FALSE;
}

@ -447,7 +447,7 @@ bool TLiquidazione_app::recalc_acconto(real& inf, real& ina)
real cre_pre = 0.0;
real acq_intr = 0.0;
const bool isdifferita = is_differita(); // MI3262...
bool error = FALSE;
int error = FALSE;
TString16 tipo_acc;

@ -906,11 +906,8 @@ const TString& TBill::descrizione() const
if (!myself.find())
myself.set_description("Sconosciuto");
}
if (_descrizione == NULL)
// myself._descrizione = new TString;
return EMPTY_STRING;
return *_descrizione;
return _descrizione ? *_descrizione : (const TString&) EMPTY_STRING;
}
int TBill::tipo_cr() const

@ -6,6 +6,7 @@
/////////////////////////////////////////////////////////////////////////////
#include <relation.h>
#include <tabutil.h>
#include <utility.h>
#include <xvtility.h>
@ -840,4 +841,3 @@ void TSaldo_agg::registra()
}
}

@ -110,6 +110,7 @@ public:
bool ultima_immissione_verifica(int anno,int g,int c,long s,int indbil,int prov);
bool data_limite_bilancio(int,int,int,long,const TDate&,const TDate&,int,int, const char* = NULL);
bool ricerca_progr_prec(int, int, int, long);
real saldofin_esprec(int,int,int,long,bool saldo_chiusura = FALSE, bool provvisori = FALSE);
@ -194,4 +195,3 @@ public:
};
#endif

@ -649,7 +649,7 @@ long TTransfer_file::rec(int i)
int TTransfer_file::num(char sigla)
{
int items = _index.items();
const int items = _index.items();
TString16 dep;
for (int i = 0; i < items; i++)

@ -64,6 +64,8 @@ Item_05 = "Clienti/Fornitori", "cg0 -1", "F"
Item_06 = "Agenti", "pr0 -4", ""
Item_07 = "Cambi giornalieri", "ba3 -0 cam", ""
Item_08 = "Esercizi", "cg0 -5 esc", "F"
Item_09 = "Commesse", "ba3 -0 cms", ""
Item_10 = "Fasi commesse", "ba3 -0 fsc", ""
[PRASSICG_008]
Caption = "Stampa tabelle ditta"

@ -2,9 +2,10 @@
PAGE "Stampa Natura Transazione" -1 -1 50 8
NUMBER F_INIZIO1 1
STRING F_INIZIO1 1
BEGIN
PROMPT 4 1 "Da codice "
FLAGS "U"
USE %INT
INPUT CODTAB F_INIZIO1
DISPLAY "Codice" CODTAB
@ -14,13 +15,13 @@ BEGIN
GROUP 1
END
NUMBER F_FINE1 1
STRING F_FINE1 1
BEGIN
PROMPT 4 3 "A codice "
FLAGS "U"
COPY USE F_INIZIO1
INPUT CODTAB F_FINE1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
COPY DISPLAY F_INIZIO1
OUTPUT F_FINE1 CODTAB
FIELD CODTAB
GROUP 2

@ -2,51 +2,77 @@
PAGE "Stampa Dati Riassuntivi" -1 -1 60 8
LIST F_INIZIO0 1 8
BEGIN
PROMPT 4 1 "Tipo "
ITEM "A|Acquisti"
MESSAGE COPY,F_FINE0
ITEM "C|Cessioni"
MESSAGE COPY,F_FINE0
FIELD CODTAB[1,1]
GROUP 1
END
NUMBER F_INIZIO1 4
BEGIN
PROMPT 4 1 "Da anno "
PROMPT 4 3 "Da anno "
FLAGS "AZ"
USE IRD
INPUT CODTAB[1,4] F_INIZIO1
INPUT CODTAB[5,6] F_INIZIO2
DISPLAY "Anno@15" CODTAB[1,4]
DISPLAY "Mese@10" CODTAB[5,6]
INPUT CODTAB[1,1] F_INIZIO0 SELECT
INPUT CODTAB[2,5] F_INIZIO1
INPUT CODTAB[6,7] F_INIZIO2
DISPLAY "Tipo" CODTAB[1,1]
DISPLAY "Anno@15" CODTAB[2,5]
DISPLAY "Mese@10" CODTAB[6,7]
DISPLAY "N.dischetto@10" I0
DISPLAY "Pagine@10" I1
DISPLAY "Righe@10" I2
DISPLAY "Ammontare compl.@18" R0
OUTPUT F_INIZIO1 CODTAB[1,4]
OUTPUT F_INIZIO2 CODTAB[5,6]
OUTPUT F_INIZIO1 CODTAB[2,5]
OUTPUT F_INIZIO2 CODTAB[6,7]
CHECKTYPE REQUIRED
FIELD CODTAB[1,4]
FIELD CODTAB[2,5]
GROUP 1
END
LIST F_INIZIO2 20
BEGIN
PROMPT 21 1 "Da mese "
FIELD CODTAB[5,6]
PROMPT 21 3 "Da mese "
FIELD CODTAB[6,7]
FLAGS "MZ"
GROUP 1
END
LIST F_FINE0 1 8
BEGIN
PROMPT 4 4 "Tipo "
FLAGS "H"
ITEM "A|Acquisti"
ITEM "C|Cessioni"
FIELD CODTAB[1,1]
GROUP 2
END
NUMBER F_FINE1 4
BEGIN
PROMPT 4 3 "A anno "
PROMPT 4 5 "Ad anno "
FLAGS "AZ"
COPY USE F_INIZIO1
INPUT CODTAB[1,4] F_FINE1
INPUT CODTAB[5,6] F_FINE2
INPUT CODTAB[1,1] F_FINE0 SELECT
INPUT CODTAB[2,5] F_FINE1
INPUT CODTAB[6,7] F_FINE2
COPY DISPLAY F_INIZIO1
OUTPUT F_FINE1 CODTAB[1,4]
OUTPUT F_FINE2 CODTAB[5,6]
OUTPUT F_FINE1 CODTAB[2,5]
OUTPUT F_FINE2 CODTAB[6,7]
CHECKTYPE REQUIRED
FIELD CODTAB[1,4]
FIELD CODTAB[2,5]
GROUP 2
END
LIST F_FINE2 20
BEGIN
PROMPT 21 3 "A mese "
FIELD CODTAB[5,6]
PROMPT 21 5 "A mese "
FIELD CODTAB[6,7]
FLAGS "MZ"
GROUP 2
END

@ -3,9 +3,7 @@
Tabella Natura Transazione
1|@3g%s|Codice
1|@10g%s|Denominazione
1|@62g%s|Op.Triangolari
[Rows]
1|CODTAB|@3g@4,ls
1|S0|@10g@50,ls
1|S7|@62g@1,ls

@ -13,9 +13,10 @@ BEGIN
PROMPT 1 1 "@bNatura Transazione"
END
NUMBER F_CODICE 1
STRING F_CODICE 1
BEGIN
PROMPT 2 3 "Codice "
FLAGS "U"
USE %INT
INPUT CODTAB F_CODICE
DISPLAY "Codice" CODTAB
@ -33,20 +34,13 @@ BEGIN
USE %INT KEY 2
INPUT S0 F_DESCR
DISPLAY "Descrizione@70" S0
DISPLAY "Codice@8" CODTAB
DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODICE
CHECKTYPE REQUIRED
FIELD S0
KEY 2
END
STRING F_TRIANG 1
BEGIN
PROMPT 2 8 "Operazioni triangolari "
FLAGS "U"
FILED S7
END
ENDPAGE
ENDMASK

@ -1,6 +1,10 @@
#define F_ANNO 101
#define F_MESE 102
#define F_NDKT 103
#define F_PAGINE 104
#define F_RIGHE 105
#define F_AMM_COMP 106
#define F_TIPO 101
#define F_ANNO 102
#define F_MESE 103
#define F_NDKT 104
#define F_PAGINE 105
#define F_RIGHE 106
#define F_RETT 107
#define F_AMM_COMP 108
#define F_AMM_RETT 109

@ -1,18 +1,21 @@
[Headers]
80
Tabella Dati Riassuntivi
1|@3g%s|Anno
1|@10g%s|Mese
1|@15g%s|N.ro Disc.
1|@28g%s|Pagine
1|@38g%s|Righe
1|@45g%s|Ammontare complessivo
1|@1g%s|Tipo
1|@8g%s|Anno
1|@13g%s|Mese
1|@18g%s|Disco
1|@24g%s|Righe riep.
1|@36g%s|Amm. riepil.
1|@49g%s|Righe rett.
1|@62g%s|Amm. rettif.
[Rows]
1|CODTAB[1,4]|@3g@4,rs
1|CODTAB[5,6]|@10g@2,rs
1|I0|@21g@4,rn
1|I1|@27g@7,rn
1|I2|@36g@7,rn
1|R0|@48g@18,rpn|.2
1|CODTAB[1,1]|@4g@1,rs
1|CODTAB[2,5]|@8g@4,rs
1|CODTAB[6,7]|@13g@2,rs
1|I0|@19g@4,rn
1|I2|@30g@5,rn
1|R0|@36g@12,rpn|#########,@@
1|I3|@55g@5,rn
1|R1|@62g@12,rpn|#########,@@

@ -13,30 +13,42 @@ BEGIN
PROMPT 1 1 "@bDati Riassuntivi"
END
LIST F_MESE 20
LIST F_TIPO 1 8
BEGIN
PROMPT 2 2 "Mese "
FLAGS "MZ"
FIELD CODTAB[5,6]
PROMPT 2 2 "Tipo "
ITEM "A|Acquisti"
ITEM "C|Cessioni"
FIELD CODTAB[1,1]
KEY 1
END
NUMBER F_ANNO 4
BEGIN
PROMPT 46 2 "Anno "
USE IRD
INPUT CODTAB[1,4] F_ANNO
INPUT CODTAB[5,6] F_MESE
DISPLAY "Anno@15" CODTAB[1,4]
DISPLAY "Mese@10" CODTAB[5,6]
PROMPT 35 2 "Anno "
FLAGS "AZ"
USE IRD
INPUT CODTAB[1,1] F_TIPO SELECT
INPUT CODTAB[2,5] F_ANNO
INPUT CODTAB[6,7] F_MESE
DISPLAY "Tipo" CODTAB[1,1]
DISPLAY "Anno@15" CODTAB[2,5]
DISPLAY "Periodo@10" CODTAB[6,7]
DISPLAY "N.dischetto@10" I0
DISPLAY "Pagine@10" I1
DISPLAY "Righe@10" I2
DISPLAY "Ammontare compl.@18" R0
OUTPUT F_ANNO CODTAB[1,4]
OUTPUT F_MESE CODTAB[5,6]
DISPLAY "Riepiloghi@10" I2
DISPLAY "Rettifiche@10" I3
OUTPUT F_ANNO CODTAB[2,5]
OUTPUT F_MESE CODTAB[6,7]
CHECKTYPE REQUIRED
FIELD CODTAB[1,4]
FIELD CODTAB[2,5]
KEY 1
END
NUMBER F_MESE 2
BEGIN
PROMPT 56 2 "Periodo "
FLAGS "Z"
COPY ALL F_ANNO
FIELD CODTAB[6,7]
KEY 1
END
@ -46,24 +58,31 @@ BEGIN
FIELD I0
END
NUMBER F_PAGINE 7
BEGIN
PROMPT 2 6 "Pagine "
FIELD I1
END
NUMBER F_RIGHE 7
BEGIN
PROMPT 2 8 "Righe "
PROMPT 2 6 "Righe riepilogo "
FIELD I2
END
NUMBER F_RETT 7
BEGIN
PROMPT 2 7 "Righe rettifica "
FIELD I3
END
CURRENCY F_AMM_COMP 18
BEGIN
PROMPT 2 10 "Ammontare Compl. "
PROMPT 36 6 "Ammontare Riepiloghi "
FIELD R0
END
CURRENCY F_AMM_RETT 18
BEGIN
PROMPT 36 7 "Ammontare Rettifiche "
FIELD R1
END
ENDPAGE
ENDMASK

@ -4,7 +4,7 @@ NUMREG|3|7|0|Numero registrazione
NUMRIG|2|3|0|Numero di riga
AMMLIRE|4|18|2|Ammontare in lire
AMMVALUTA|4|18|2|Ammontare in valuta
NATURA|2|1|0|Natura della transazione
NATURA|1|1|0|Natura della transazione
CONSEGNA|1|3|0|Condizioni di consegna
TRASPORTO|6|1|0|Tipo di trasporto
NOMENCL|1|8|0|Nomenclatura

@ -6,7 +6,7 @@ PERIODO|9|2|0|Periodo (Mese[1,12] / Trimestre[1,4] / Anno [1.,1])
NUMRIG|3|7|0|Numero riga
STATO|1|2|0|Codice ISO dello Stato CEE
PIVA|1|13|0|Partita IVA Cliente/Fornitore
NATURA|7|1|0|Natura della transazione
NATURA|1|1|0|Natura della transazione
NOMENCL|1|8|0|Nomenclatura combinata
CONSEGNA|1|3|0|Condizioni di consegna
TRASPORTO|2|1|0|Tipo di trasporto [1,9]

@ -7,11 +7,11 @@ int main(int argc, char** argv)
const int n = (argc > 1) ? (argv[1][1]-'0') : 0;
switch (n)
{
case 0 : in0100(argc, argv); break; // stampa
case 1 : in0200(argc, argv); break; // dischetti
case 5 : in0600(argc, argv); break; // riepiloghi
case 6 : in0700(argc, argv); break; // rettifiche
default: in0500(argc, argv); break; // movimenti
case 0 : in0100(argc, argv); break; // stampa riepiloghi
case 1 : in0200(argc, argv); break; // generazione dischetti
case 5 : in0600(argc, argv); break; // gestione riepiloghi
case 6 : in0700(argc, argv); break; // gestione rettifiche
default: in0500(argc, argv); break; // gestione movimenti
}
exit(0);
return 0;

@ -29,11 +29,15 @@ class TStampaIntra_form : public TForm
real _riportoprec1, _riportoprec2; // Riporto pagina prec. per sezioni 1 e 2
real _totaleprog1, _totaleprog2; // Totale progressivo per pagina, sezioni 1 e 2
int _decimals;
protected:
void print_page(const pagetype p);
const bool good() const;
virtual bool validate(TForm_item& fld, TToken_string& val);
real amm_euro(const TRectype& rec) const; // Ammontare arrotondato
public:
void print();
TStampaIntra_form (const char* name, char t, char f, int p, int a);
@ -46,10 +50,8 @@ bool TStampaIntra_form::validate(TForm_item& fld, TToken_string& val)
if (code== "_IMP")
{
real num(fld.get());
const int ndec = TCurrency::get_firm_dec() > 0 ? 0 : -3;
num.round(ndec);
real num = fld.get();
num.round(_decimals);
fld.set(num.string());
return TRUE;
}
@ -58,7 +60,6 @@ bool TStampaIntra_form::validate(TForm_item& fld, TToken_string& val)
{
real num(fld.get());
const int ndec = val.get_int();
num.round(ndec);
fld.set(num.string());
return TRUE;
@ -82,6 +83,8 @@ TStampaIntra_form::TStampaIntra_form(const char* name, char t, char f, int p, in
t++;
dep.put("TIPO", t);
_rettifiche = new TRecord_array(dep, "NUMRIG");
_decimals = is_euro_value(NULL) ? 0 : -3; // Arrotonda all'Euro o alle 1000 Lire
}
TStampaIntra_form::~TStampaIntra_form()
@ -97,6 +100,14 @@ const bool TStampaIntra_form::good() const
return _index1 <= _riepiloghi->rows() || _index2 <= _rettifiche->rows();
}
// Ricava l'ammontare in Euro arrotondato da un record
real TStampaIntra_form::amm_euro(const TRectype& rec) const
{
real amm = rec.get("AMMLIRE"); // Nome obsoleto
amm.round(_decimals);
return amm;
}
void TStampaIntra_form::print_page(const pagetype p)
{
TString16 ws;
@ -137,8 +148,11 @@ void TStampaIntra_form::print_page(const pagetype p)
case 'H': // Testate...
{
if (p == first_page || (not_first && index <= max))
{
ps->find_field(_frequenza == "M" ? 1 : 2).set(_periodo);
{
if (_frequenza[0] == 'M')
ps->find_field(1).set(_periodo); else
if (_frequenza[0] == 'T')
ps->find_field(2).set(_periodo);
ps->find_field(3).set(_anno);
if (p == first_page)
ps->find_field(4).set(_frequenza);
@ -158,21 +172,41 @@ void TStampaIntra_form::print_page(const pagetype p)
ps->find_field(4).set(ws);
ws.format("%d", _totrow2);
ps->find_field(5).set(ws);
ps->find_field(6).set(_tot2.string());
ws = _tot2.string();
ps->find_field(6).set(ws);
ps->update();
}
else // Footers ODD/EVEN
{
real & rrip = is_odd_page ? _riportoprec1 : _riportoprec2;
real & rtot = is_odd_page ? _totaleprog1 : _totaleprog2;
real& rrip = is_odd_page ? _riportoprec1 : _riportoprec2;
real& rtot = is_odd_page ? _totaleprog1 : _totaleprog2;
int& pgn = is_odd_page ? _pageno1 : _pageno2;
int& totpgn = is_odd_page ? _totpag1 : _totpag2;
if (pgn <= totpgn)
{
ws = rrip.string();
if (!is_odd_page) // Gestione segno riporto rettifiche
{
const bool neg = ws[0] == '-';
ps->find_field(4).set(rrip.is_zero() ? "" : (neg ? "-" : "+"));
if (neg)
ws.ltrim(1);
}
ps->find_field(1).set(ws);
ws = rtot.string();
if (!is_odd_page) // Gestione segno totale rettifiche
{
const bool neg = ws[0] == '-';
ps->find_field(7).set(rtot.is_zero() ? "" : (neg ? "-" : "+"));
if (neg)
ws.ltrim(1);
}
ps->find_field(2).set(ws);
ws.format("%d", pgn);
ps->find_field(1).set(rrip.string());
ps->find_field(2).set(rtot.string());
ps->find_field(3).set(ws);
pgn++;
ps->update();
@ -189,9 +223,25 @@ void TStampaIntra_form::print_page(const pagetype p)
if (index <= max)
{
const TRectype& rec = ra->row(index);
relation()->lfile(LF_RIEPRETT).curr() = rec;
real & rtot = is_odd_page ? _totaleprog1 : _totaleprog2;
rtot += rec.get_real("AMMLIRE");
relation()->curr(LF_RIEPRETT) = rec;
real ammontare = amm_euro(rec);
if (!is_odd_page) // Rettifiche
{
const TString8 mese = _frequenza[0] == 'M' ? rec.get("PERETT") : "0";
const TString8 trim = _frequenza[0] == 'T' ? rec.get("PERETT") : "0";
ps->find_field(2).set(mese);
ps->find_field(3).set(trim);
// Controlla il segno delle rettifiche
if (rec.get_char("SEGNORETT") == '-')
ammontare = -ammontare;
}
// Incrementa progressivi
real& rtot = is_odd_page ? _totaleprog1 : _totaleprog2;
rtot += ammontare;
index++;
ps->update();
}
@ -237,15 +287,15 @@ void TStampaIntra_form::print()
}
for (int i = 1; i <= _totrow1; i++)
_tot1 += _riepiloghi->row(i).get_real("AMMLIRE");
_tot1 += amm_euro(_riepiloghi->row(i));
for (i = 1; i <= _totrow2; i++)
{
const TRectype& rec = _rettifiche->row(i);
if (rec.get_char("SEGNORETT") == '-')
_tot2 -= rec.get_real("AMMLIRE");
_tot2 -= amm_euro(rec);
else
_tot2 += rec.get_real("AMMLIRE");
_tot2 += amm_euro(rec);
}
//Posiziona la relazione principale (ditta corrente)

@ -129,9 +129,8 @@ void TRecord_intra::reset(const TIntra_context& ic)
spaces();
put("EUROA", 1, 5);
const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm());
TString16 cod;
cod << ditta.get_char(NDT_TIPOA) << '|';
cod << ditta.get(NDT_CODANAGR);
TString16 cod;
cod.format("%c|%ld", ditta.get_char(NDT_TIPOA), ditta.get_long(NDT_CODANAGR));
const TRectype& anagr = cache().get(LF_ANAG, cod);
put(anagr.get(ANA_PAIV), 6, 11);
put(ic._progr, 17, 6);
@ -167,7 +166,7 @@ void TRecord_intra::genera_testata(const TIntra_context& ic)
cod.cut(0);
cod << ditta.get_char("TIPOSOGDEL") << '|';
cod << ditta.get("CODSOGDEL");
if (cod.len() > 8)
if (cod.len() >= 3)
{
const TRectype& sogdel = cache().get(LF_ANAG, cod);
put(sogdel.get(ANA_PAIV), 48, 11);
@ -197,7 +196,7 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 56, 13);
put(rec.get_char("NATURA"), 69);
put(rec.get("NOMENCL"), 70, 8, "RZ");
put(rec.get("NOMENCL"), 70, 8, "Z");
if (ic._freq == 'M')
{
put(rec.get_real("MASSAKG"), 78, 10, 0);
@ -230,7 +229,7 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
put(rec.get_real("AMMLIRE"), 49, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 62, 13);
put(rec.get_char("NATURA"), 75);
put(rec.get("NOMENCL"), 76, 8, "RZ");
put(rec.get("NOMENCL"), 76, 8, "Z");
if (ic._freq == 'M')
put(rec.get_real("VALSTAT"), 84, 13, _ndec);
else
@ -243,7 +242,7 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_char("NATURA"), 56);
put(rec.get("NOMENCL"), 57, 8, "RZ");
put(rec.get("NOMENCL"), 57, 8, "Z");
if (ic._freq == 'M')
{
put(rec.get_real("MASSAKG"), 65, 10);
@ -274,7 +273,7 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
put(rec.get("SEGNORETT"), 48, 1);
put(rec.get_real("AMMLIRE"), 49, 13, _ndec);
put(rec.get("NATURA"), 62, 1);
put(rec.get("NOMENCL"), 63, 8, "RZ");
put(rec.get("NOMENCL"), 63, 8, "Z");
if (ic._freq == 'M')
put(rec.get_real("VALSTAT"), 71, 13, _ndec);
else
@ -319,23 +318,28 @@ protected:
void proponi_numero();
public:
void genera_dischetto();
void genera_dischetto(char tip, int mode = 0);
TDischetto_mask();
};
void TDischetto_mask::proponi_numero()
{
const char tip = tipo();
int a = anno(), p = periodo();
long d = 0;
TTable ird("IRD");
if (ird.last() == NOERR)
int err = ird.last();
while (err == NOERR)
{
const TString& str = ird.get("CODTAB");
a = atoi(str.mid(0,4));
p = atoi(str.mid(4,2));
const TString16 str = ird.get("CODTAB");
a = atoi(str.mid(1,4));
p = atoi(str.mid(5,2));
d = ird.get_long("I0");
if (tip == 'T' || tip == str[0])
break;
err = ird.prev();
}
if (anno() > a || periodo() > p)
@ -351,8 +355,24 @@ bool TDischetto_mask::on_field_event(TOperable_field& o, TField_event e, long jo
{
case F_ANNO:
if (e == fe_init || e == fe_modify)
proponi_numero();
{
const int anno = atoi(o.get());
const char fa = frequenza(anno, 'A');
const char fc = frequenza(anno, 'C');
TList_field& list = (TList_field&)field(type_field());
TToken_string codes = "A|C";
TToken_string descr = "Acquisti|Cessioni";
if (fa == fc)
{
codes.add("T");
descr.add("Tutti");
}
list.replace_items(codes, descr);
proponi_numero();
}
break;
case F_TIPO:
case F_PERIODO_M:
case F_PERIODO_T:
case F_PERIODO_A:
@ -360,8 +380,17 @@ bool TDischetto_mask::on_field_event(TOperable_field& o, TField_event e, long jo
proponi_numero();
break;
case F_RIEPILOGHI:
if (e == fe_button)
::genera_riepiloghi(tipo(), anno(), periodo());
if (e == fe_button)
{
const char tip = tipo();
if (tip == 'T')
{
::genera_riepiloghi('A', anno(), periodo());
::genera_riepiloghi('C', anno(), periodo());
}
else
::genera_riepiloghi(tip, anno(), periodo());
}
break;
default:break;
}
@ -420,23 +449,29 @@ bool TDischetto_mask::write_record(ofstream& out, const TRecord_intra& rec, TInt
return good;
}
void TDischetto_mask::genera_dischetto()
// mode 0 = ask; 1 = append; 2 = remove
void TDischetto_mask::genera_dischetto(char tip, int mode)
{
TIntra_context ic;
ic._tipo = tipo();
ic._tipo = tip;
ic._anno = anno();
ic._freq = frequenza(ic._anno);
ic._periodo = periodo();
ic._progr = get_long(F_NUMERO);
TString16 codtab; codtab.format("%04d%02d", ic._anno, ic._periodo);
TString16 codtab; codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo);
TTable ird("IRD");
ird.put("CODTAB", codtab);
const bool exist = ird.read() == NOERR;
if (exist && !yesno_box("Il periodo indicato è già stato generato:\nsi desidera proseguire"))
return;
if (exist)
{
const char* ac = tip == 'A' ? "agli acquisti" : "alle cessioni";
if (!yesno_box("Il dischetto relativo %s del periodo indicato è già stato generato:\n"
"Si desidera proseguire ugualmente?", ac))
return;
}
TRelation rel(LF_RIEPRETT);
TRectype filter(LF_RIEPRETT);
@ -459,8 +494,15 @@ void TDischetto_mask::genera_dischetto()
if (name.exist())
{
if (yesno_box("Il file %s, esiste gia': si desiderla eliminarlo?",
(const char*)name))
bool do_remove = (mode == 2);
if (mode == 0)
{
do_remove = yesno_box("Il file %s, esiste gia': si desiderla eliminarlo?\n"
"Rispondendo SI i dati sul dischetto verranno azzerati.\n"
"Rispondendo NO i dati verranno accodati a quelli già presenti",
(const char*)name);
}
if (do_remove)
::remove(name);
}
@ -500,13 +542,17 @@ void TDischetto_mask::genera_dischetto()
return;
}
codtab.format("%04d%02d", ic._anno, ic._periodo);
codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo);
ird.put("CODTAB", codtab);
ird.put("I0", ic._progr); // Numero progressivo dischetto
// ird.put("I1", ??? );
ird.put("I2", total);
ird.put("R0", ic._totale_riep + ic._totale_rett);
ird.put("I2", ic._righe_riep);
ird.put("I3", ic._righe_rett);
ird.put("R0", ic._totale_riep);
ird.put("R1", ic._totale_rett);
if (exist)
ird.rewrite();
else
@ -533,7 +579,16 @@ void TDischetto_app::main_loop()
LF_INTRA, LF_RINTRA, LF_RIEPRETT, 0);
TDischetto_mask m;
while (m.run() == K_ENTER)
m.genera_dischetto();
{
const char tip = m.tipo();
if (tip == 'T')
{
m.genera_dischetto('A', 2);
m.genera_dischetto('C', 1);
}
else
m.genera_dischetto(tip);
}
}
int in0200(int argc, char* argv[])

@ -5,8 +5,8 @@ PAGE "Generazione Dischetti INTRA" -1 -1 40 9
LIST F_TIPO 1 10
BEGIN
PROMPT 1 1 "Tipo riepilogo "
ITEM "C|Cessioni"
ITEM "A|Acquisti"
ITEM "C|Cessioni"
END
NUMBER F_ANNO 4

@ -17,6 +17,9 @@
class TImmissione_mask : public TIntra_mask
{
private:
bool _caus_valintra;
protected:
virtual short type_field() const { return F_TIPO_MOV; }
virtual int anno() const { return get_date(F_DATA_REG).year(); }
@ -26,6 +29,8 @@ protected:
bool on_sheet_event(TSheet_field& s, TField_event e, int row);
bool on_sheet_field_event(TOperable_field& o, TField_event e, long jolly);
void enable_valuta();
public:
TImmissione_mask();
virtual ~TImmissione_mask() { }
@ -57,6 +62,13 @@ TImmissione_intra& app() { return (TImmissione_intra&)main_app(); }
// TImmissione_mask
///////////////////////////////////////////////////////////
void TImmissione_mask::enable_valuta()
{
const bool gestval = _caus_valintra || tipo() == 'A';
enable(F_VALUTA, gestval);
enable(F_CAMBIO, gestval);
}
bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
const short id = o.dlg();
@ -64,7 +76,8 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
{
case F_NUM_REG:
if (e == fe_modify || e == fe_init)
{
{
_caus_valintra = TRUE; // Default value
if (app().has_module(CGAUT, CHK_DONGLE))
{
const TString& numreg = o.get();
@ -86,12 +99,11 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
if (!c.intra())
return error_box("La causale %s del movimento contabile %s non e' intracomunitaria",
(const char*)caus, (const char*)numreg);
const bool gestval = c.valintra();
enable(F_VALUTA, gestval);
enable(F_CAMBIO, gestval);
_caus_valintra = c.valintra();
}
}
}
enable_valuta();
}
break;
case F_TIPO_MOV:
@ -103,18 +115,25 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
m.show(-GR_ACQUISTI, acq); // Mostra i gruppi di campi
m.show(-GR_CESSIONI, !acq); // consoni al tipo movimento
s.enable_column(F_PAESE_ORIG, acq);
s.set_column_header(F_PAESE, acq ? "Paese\nProv." : "Paese\nDest.") ;
s.set_column_header(F_PROV, acq ? "Provincia\nDest." : "Provincia\nOrig.") ;
s.set_column_header(F_PAESE, acq ? "Paese\nProv." : "Paese\nDest.");
s.set_column_header(F_PROV, acq ? "Provincia\nDest." : "Provincia\nOrig.");
TString key ; key << main_app().get_firm();
const bool req = frequenza(anno()) == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
m.field(F_VALORE_STAT).check_type(chk);
m.field(F_CONSEGNA).check_type(chk);
m.field(F_TRASPORTO).check_type(chk);
chk = frequenza(anno()) == 'M' ? CHECK_REQUIRED : CHECK_NORMAL;
m.field(F_PAESE).check_type(chk);
m.field(F_PAESE_ORIG).check_type(chk);
m.field(F_PROV).check_type(chk);
s.force_update();
if (e == fe_modify)
enable_valuta();
}
break;
case F_CLIFO:
@ -258,10 +277,13 @@ bool TImmissione_mask::on_sheet_field_event(TOperable_field& o, TField_event e,
case F_NOMENCLATURA3:
if (e == fe_close)
{
TMask& m = o.mask();
TString16 key; key << m.get(F_NOMENCLATURA1) << m.get(F_NOMENCLATURA2) << m.get(F_NOMENCLATURA3);
if (key.empty())
return error_box("La nomenclatura combinata e' obbligatoria");
if (frequenza() != 'A')
{
TMask& m = o.mask();
TString16 key; key << m.get(F_NOMENCLATURA1) << m.get(F_NOMENCLATURA2) << m.get(F_NOMENCLATURA3);
if (key.empty())
return error_box("La nomenclatura combinata e' obbligatoria");
}
}
else
if (e == fe_modify)
@ -279,9 +301,11 @@ bool TImmissione_mask::on_sheet_field_event(TOperable_field& o, TField_event e,
{
const char obb = nom.get_char("S4");
req = obb == 'E' || obb == tipo();
}
m.field(F_UMS).check_type(req ? CHECK_REQUIRED : CHECK_NORMAL);
m.field(F_MASSA_UMS).check_type(req ? CHECK_REQUIRED : CHECK_NORMAL);
}
const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
m.field(F_MASSA_KG).check_type(chk);
m.field(F_UMS).check_type(chk);
m.field(F_MASSA_UMS).check_type(chk);
}
else
{
@ -311,7 +335,7 @@ bool TImmissione_intra::protected_record(TRectype & rec)
const int periodo = _msk->date2periodo(d);
bool prot = is_riepilogo(tipo, d.year(), periodo) &&
!yesno_box("Attenzione il movimento appartiene ad un riepilogo\nesistente, vuoi poterlo modificare ugualmente");
!yesno_box("Attenzione: il movimento appartiene ad un riepilogo esistente,:\nSi desidera poterlo modificare ugualmente?");
_msk->enable(DLG_SAVEREC, !prot);
return prot;
}

@ -141,9 +141,7 @@ BEGIN
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
COPY OUTPUT F_CLIFO
// VALIDATE PI_FUNC F_STATO
CHECKTYPE REQUIRED
// WARNING "Lunghezza partita IVA errata"
END
CURRENCY F_TOT_DOC 18
@ -225,14 +223,16 @@ BEGIN
CHECKTYPE REQUIRED
END
NUMBER F_NATURA_TRANS 1
STRING F_NATURA_TRANS 1
BEGIN
PROMPT 1 3 "Natura transazione "
PROMPT 1 3 "Natura transazione "
FLAGS "U"
USE %INT
INPUT CODTAB F_NATURA_TRANS
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@70" S0
OUTPUT F_NATURA_TRANS CODTAB
CHECKTYPE NORMAL
FIELD NATURA
END
@ -363,8 +363,9 @@ BEGIN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_PAESE CODTAB
CHECKTYPE REQUIRED
FIELD PAESE
CHECKTYPE NORMAL
FIELD PAESE
WARNING "Inserire il codice di un paese CEE valido"
END
STRING F_PAESE_ORIG 2
@ -376,10 +377,11 @@ BEGIN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_PAESE_ORIG CODTAB
CHECKTYPE REQUIRED
CHECKTYPE NORMAL
FIELD PAESEORIG
GROUP GR_ACQUISTI
END
WARNING "Inserire il codice di un paese CEE valido"
ENEND
STRING F_PAESE_DUMMY 2
BEGIN
@ -404,7 +406,7 @@ STRING F_PROV 2
BEGIN
PROMPT 64 7 ""
FLAGS "U"
CHECKTYPE REQUIRED
CHECKTYPE NORMAL
WARNING "Provincia assente"
FIELD PROV
END

@ -30,15 +30,33 @@ bool TRiepiloghi_mask::on_field_event(TOperable_field& o, TField_event e, long j
{
switch (o.dlg())
{
case F_TIPO:
{
TString key ; key << main_app().get_firm();
const bool req = frequenza() == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
field(F_VALORE_STAT).check_type(chk);
field(F_CONSEGNA).check_type(chk);
field(F_TRASPORTO).check_type(chk);
chk = frequenza() == 'M' ? CHECK_REQUIRED : CHECK_NORMAL;
field(F_PAESE).check_type(chk);
field(F_PAESE_ORIG).check_type(chk);
field(F_PROV).check_type(chk);
}
break;
case F_NOMENCLATURA1:
case F_NOMENCLATURA2:
case F_NOMENCLATURA3:
if (e == fe_close && !query_mode())
{
TString16 key; key << get(F_NOMENCLATURA1) << get(F_NOMENCLATURA2) << get(F_NOMENCLATURA3);
if (key.empty())
return error_box("La nomenclatura combinata e' obbligatoria");
{
if (frequenza() != 'A')
{
TString16 key; key << get(F_NOMENCLATURA1) << get(F_NOMENCLATURA2) << get(F_NOMENCLATURA3);
if (key.empty())
return error_box("La nomenclatura combinata e' obbligatoria");
}
}
else
if (e == fe_init || e == fe_modify)
@ -46,7 +64,7 @@ bool TRiepiloghi_mask::on_field_event(TOperable_field& o, TField_event e, long j
TString16 key; key << get(F_NOMENCLATURA1) << get(F_NOMENCLATURA2) << get(F_NOMENCLATURA3);
const TRectype& nom = cache().get("%NOC", key);
set(F_UMS, nom.get("S5"));
bool req = frequenza(anno()) == 'M';
bool req = frequenza() == 'M';
if (req) // Solo la frequenza mensile puo' obbligare
{
const char obb = nom.get_char("S4");
@ -58,7 +76,7 @@ bool TRiepiloghi_mask::on_field_event(TOperable_field& o, TField_event e, long j
case F_VALORE_STAT:
if (e == fe_init)
{
bool req = frequenza(anno()) == 'M';
bool req = frequenza() == 'M';
if (req)
{
TString16 key ; key << main_app().get_firm();
@ -184,6 +202,7 @@ void TRiepiloghi_intra::init_insert_mode(TMask& m)
void TRiepiloghi_intra::init_modify_mode(TMask& m)
{
check_existent_disk(m);
m.enable(F_VALUTA);
}
int TRiepiloghi_intra::write(const TMask& m)
@ -223,9 +242,10 @@ void TRiepiloghi_intra::check_existent_disk(const TMask& m)
else
if (m.field(F_PERIODO_A).shown())
periodo = m.get_int(F_PERIODO_A);
char tipo = m.get(F_TIPO)[0];
TString str;
str.format("%4d%02d",anno,periodo);
str.format("%c%4d%02d",tipo,anno,periodo);
const TRectype& ird = cache().get("IRD",str);
if (!ird.empty())

@ -190,9 +190,10 @@ BEGIN
END
NUMBER F_NATURA_TRANS 1
STRING F_NATURA_TRANS 1
BEGIN
PROMPT 1 8 "Natura transazione "
FLAGS "U"
USE %INT
INPUT CODTAB F_NATURA_TRANS
DISPLAY "Codice" CODTAB

@ -31,32 +31,18 @@ void TRettifiche_mask::inventa_cambio_intra()
const TString& codval = get(F_VALUTA);
if (is_true_value(codval))
{
TTable cam("CAM");
cam.put("CODTAB", codval);
const int err = cam.read(_isgteq);
bool yes = err != NOERR;
if (!yes)
TCurrency eur; get_currency(F_AMMONTARE, eur);
TCurrency val; get_currency(F_AMM_VALUTA, val);
if (eur.is_zero() && !val.is_zero())
{
TString16 v = cam.get("CODTAB");
v.cut(3).rtrim();
yes = v != codval;
}
if (yes)
val.change_to_firm_val();
set(F_AMMONTARE, val);
} else
if (val.is_zero() && !eur.is_zero())
{
TCurrency eur; get_currency(F_AMMONTARE, eur);
TCurrency val; get_currency(F_AMM_VALUTA, val);
if (eur.is_zero())
{
val.change_to_firm_val();
set(F_AMMONTARE, val);
}
if (val.is_zero())
{
const real cambio = cache().get("%VAL", codval, "S4");
const TExchange exc(codval, cambio);
eur.change_value(exc);
set(F_AMM_VALUTA, eur);
}
const TExchange exc(codval);
eur.change_value(exc);
set(F_AMM_VALUTA, eur);
}
}
}
@ -82,7 +68,6 @@ bool TRettifiche_mask::on_field_event(TOperable_field& o, TField_event e, long j
TString key ; key << main_app().get_firm();
const bool req = frequenza(anno()) == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
m.field(F_VALORE_STAT).check_type(chk);
}
break;
@ -93,24 +78,47 @@ bool TRettifiche_mask::on_field_event(TOperable_field& o, TField_event e, long j
ef.check();
TCursor& cur = *ef.browse()->cursor();
bool ok = cur.ok();
enable(-GR_ORIGINAL, !ok);
if (e == fe_modify && insert_mode())
{
for (short dlg = O_STATO; dlg <= O_NOMENCLATURA3; dlg++)
{
const int pos = id2pos(dlg);
if (pos >= 0)
set(dlg + F_STATO - O_STATO, fld(pos).get());
switch (dlg)
{
case O_NUM_RIG: // Non riportare il nmumero riga!
break;
default:
const int pos = id2pos(dlg);
if (pos >= 0)
set(dlg + F_STATO - O_STATO, fld(pos).get());
break;
}
}
}
}
break;
case O_AMM_VALUTA:
if (e == fe_close && o.empty())
{
const TString& codval = get(O_VALUTA);
if (is_true_value(codval))
return error_box("Inserire l'ammontare in valuta %s", (const char*)codval);
}
break;
case F_AMMONTARE:
if (e == fe_modify && !o.empty() && field(F_AMM_VALUTA).empty())
inventa_cambio_intra();
break;
case F_VALUTA:
if (e == fe_init || e == fe_modify)
{
const bool tv = is_true_value(o.get());
if (!tv)
reset(F_AMM_VALUTA);
enable(F_AMM_VALUTA, tv);
}
break;
case F_AMM_VALUTA:
if (e == fe_modify && !o.empty() && field(F_AMMONTARE).empty())
if (e == fe_modify && !field(F_VALUTA).empty() && field(F_AMMONTARE).empty())
inventa_cambio_intra();
break;
default:
@ -175,7 +183,6 @@ void TRettifiche_intra::init_mask(TMask& m, bool keyon)
m.enable(O_PERIODO_T, keyon);
m.enable(O_PERIODO_A, keyon);
m.enable(O_NUM_RIG, keyon);
m.enable(-GR_ORIGINAL, keyon);
}
void TRettifiche_intra::init_query_mode(TMask& m)

@ -40,5 +40,3 @@
#define F_VALORE_STAT 226
#define F_NOMENCLATURA2 227
#define F_NOMENCLATURA3 228
#define GR_ORIGINAL 3

@ -67,13 +67,9 @@ LIST O_PERIODO_T 2 16
BEGIN
PROMPT 33 4 "Periodo "
ITEM "01|Gennaio-Marzo"
MESSAGE COPY,O_PERIODO_M
ITEM "02|Aprile-Giugno"
MESSAGE COPY,O_PERIODO_M
ITEM "03|Luglio-Settembre"
MESSAGE COPY,O_PERIODO_M
ITEM "04|Ottobre-Dicembre"
MESSAGE COPY,O_PERIODO_M
FIELD PERETT
NUM_EXPR (#O_ANNO<#F_ANNO)||((#O_ANNO=#F_ANNO)&&(#O_PERIODO_T<#F_PERIODO_T))
WARINIG "Si possono rettificare solo i periodi precedenti"
@ -83,7 +79,6 @@ LIST O_PERIODO_A 2 16
BEGIN
PROMPT 33 4 "Periodo "
ITEM "01|Annuale"
MESSAGE COPY,O_PERIODO_M
END
NUBER O_NUM_RIG 7
@ -121,19 +116,13 @@ BEGIN
OUTPUT O_VALORE_STAT VALSTAT
CHECKTYPE SEARCH
FIELD NUMRETT
ADD RUN IN0 -5
END
STRING O_STATO 2
BEGIN
PROMPT 2 5 "Stato CEE "
FLAGS "U"
USE %SCE
INPUT CODTAB O_STATO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT O_STATO CODTAB
CHECKTYPE NORMAL
GROUP GR_ORIGINAL
FLAGS "DU"
END
LIST O_TIPO_CF 1 10
@ -147,6 +136,7 @@ END
STRING O_PARTITA_IVA 12
BEGIN
PROMPT 51 5 "Partita IVA "
FLAGS "D"
USE LF_CLIFO KEY 5
INPUT TIPOCF O_TIPO_CF SELECT
INPUT STATOPAIV O_STATO
@ -158,10 +148,8 @@ BEGIN
OUTPUT O_STATO STATOPAIV
OUTPUT O_PARTITA_IVA PAIV
OUTPUT O_PARTITA_DESC RAGSOC
// VALIDATE PI_FUNC O_STATO
CHECKTYPE REQUIRED
WARNING "Lunghezza partita IVA errata"
GROUP GR_ORIGINAL
END
STRING O_PARTITA_DESC 50
@ -170,85 +158,53 @@ BEGIN
FLAGS "D"
END
NUMBER O_NATURA_TRANS 1
STRING O_NATURA_TRANS 1
BEGIN
PROMPT 2 7 "Natura transazione "
USE %INT
INPUT CODTAB O_NATURA_TRANS
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@70" S0
OUTPUT O_NATURA_TRANS CODTAB
GROUP GR_ORIGINAL
FLAGS "DU"
END
NUMBER O_NOMENCLATURA1 4
BEGIN
PROMPT 28 7 "Nomenclatura combinata "
FLAGS "Z"
USE %NOC
INPUT CODTAB[1,4] O_NOMENCLATURA1
INPUT CODTAB[5,6] O_NOMENCLATURA2
INPUT CODTAB[7,8] O_NOMENCLATURA3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "@3" CODTAB[5,6]
DISPLAY "@3" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT O_NOMENCLATURA1 CODTAB[1,4]
OUTPUT O_NOMENCLATURA2 CODTAB[5,6]
OUTPUT O_NOMENCLATURA3 CODTAB[7,8]
MESSAGE DIRTY,O_NOMENCLATURA3
VALIDATE REQIF_FUNC 1 O_NOMENCLATURA2
GROUP GR_ORIGINAL
WARNING "Nomenclatura combinata assente"
FLAGS "DZ"
END
NUMBER O_NOMENCLATURA2 2
BEGIN
PROMPT 58 7 ""
FLAGS "Z"
COPY ALL O_NOMENCLATURA1
MESSAGE DIRTY,O_NOMENCLATURA3
VALIDATE REQIF_FUNC 1 O_NOMENCLATURA3
GROUP GR_ORIGINAL
WARNING "Nomenclatura combinata assente"
FLAGS "DZ"
END
NUMBER O_NOMENCLATURA3 2
BEGIN
PROMPT 63 7 ""
FLAGS "Z"
COPY ALL O_NOMENCLATURA1
CHECKTYPE NORMAL
GROUP GR_ORIGINAL
WARNING "Nomenclatura combinata assente"
FLAGS "DZ"
END
CURRENCY O_AMMONTARE 18
BEGIN
PROMPT 2 8 "Ammontare "
CHECKTYPE REQUIRED
GROUP GR_ORIGINAL
FLAGS "D"
END
STRING O_VALUTA 3
BEGIN
PROMPT 43 8 "in valuta "
FLAGS "D"
FIELD CODVAL
END
CURRENCY O_AMM_VALUTA 18
BEGIN
PROMPT 59 8 ""
DRIVENBY O_VALUTA
CHECKTYPE REQUIRED
GROUP GR_ORIGINAL
FLAGS "D"
END
CURRENCY O_VALORE_STAT 18
BEGIN
PROMPT 2 9 "Valore statistico "
GROUP GR_ORIGINAL
FLAGS "D"
END
GROUPBOX DLG_NULL 78 8
@ -278,7 +234,7 @@ END
LIST F_PERIODO_M 2 16
BEGIN
PROMPT 33 12 "Periodo "
FLAGS "AM"
FLAGS "M"
FIELD PERIODO
KEY 1
END
@ -287,13 +243,9 @@ LIST F_PERIODO_T 2 16
BEGIN
PROMPT 33 12 "Periodo "
ITEM "01|Gennaio-Marzo"
MESSAGE COPY,O_PERIODO_M
ITEM "02|Aprile-Giugno"
MESSAGE COPY,O_PERIODO_M
ITEM "03|Luglio-Settembre"
MESSAGE COPY,O_PERIODO_M
ITEM "04|Ottobre-Dicembre"
MESSAGE COPY,O_PERIODO_M
FIELD PERIODO
END
@ -301,7 +253,6 @@ LIST F_PERIODO_A 2 16
BEGIN
PROMPT 33 12 "Periodo "
ITEM "01|Annuale"
MESSAGE COPY,O_PERIODO_M
END
NUBER F_NUM_RIG 7
@ -320,7 +271,6 @@ BEGIN
DISPLAY "Periodo rett." PERETT
DISPLAY "Numero rett." NUMRETT
OUTPUT F_PERIODO_M PERIODO
OUTPUT F_PERIODO_T PERIODO
OUTPUT F_NUM_RIG NUMRIG
CHECKTYPE REQUIRED
FIELD NUMRIG
@ -374,9 +324,10 @@ BEGIN
FLAGS "D"
END
NUMBER F_NATURA_TRANS 1
STRING F_NATURA_TRANS 1
BEGIN
PROMPT 2 15 "Natura transazione "
FLAGS "U"
USE %INT
INPUT CODTAB F_NATURA_TRANS
DISPLAY "Codice" CODTAB
@ -444,7 +395,13 @@ END
STRING F_VALUTA 3
BEGIN
PROMPT 43 16 "in valuta "
FLAGS "D"
FLAGS "U"
USE %VAL
INPUT CODTAB F_VALUTA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_VALUTA CODTAB
CHECKTYPE NORMAL
FIELD CODVAL
END
@ -463,4 +420,4 @@ END
ENDPAGE
ENDMASK
ENDMASK

@ -41,18 +41,32 @@ char TIntra_mask::tipo() const
return t;
}
char TIntra_mask::frequenza(const int anno) const
char TIntra_mask::frequenza(int a, char t) const
{
const char t = tipo();
TDate d(TODAY);
if (anno < d.year())
const TDate d(TODAY);
if (a <= 0)
{
a = anno();
if (a <= 0)
a = d.year();
}
switch (t)
{
case 'B': t = 'A'; break; // Rettifiche su Acquisti
case 'D': t = 'C'; break; // Rettifiche su Cessioni
default : t = tipo(); break;
}
if (a < d.year())
{
TLocalisamfile riep(LF_RIEPRETT);
riep.put("TIPO", (char)t);
riep.put("ANNO", anno);
riep.put("ANNO", a);
if (riep.read(_isgteq) == NOERR)
{
if (riep.get_char("TIPO") == t && riep.get_int("ANNO") == anno)
if (riep.get_char("TIPO") == t && riep.get_int("ANNO") == a)
{
const char freq = riep.get_char("FREQUENZA");
@ -62,7 +76,7 @@ char TIntra_mask::frequenza(const int anno) const
}
}
return (t == 'A' || t == 'B') ? _freq_acq : _freq_ces;
return (t == 'A') ? _freq_acq : _freq_ces;
}
int TIntra_mask::date2periodo(const TDate & d)

@ -20,7 +20,7 @@ protected:
public:
int date2periodo(const TDate & d);
char tipo() const;
char frequenza(const int anno) const;
char frequenza(int anno = 0, char tipo = '\0') const;
int periodo() const;
const char* periodo_str() const;

@ -23,6 +23,8 @@
#include <varrec.h>
#include <codeb.h>
#include <lffiles.h>
#include <tabutil.h>
#ifdef DBG
#define JOURNAL
@ -284,6 +286,97 @@ void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
}
}
struct TCallbackFileinfo
{
TString16 _var;
TFilename _app;
};
HIDDEN int find_relapp(TConfig& cfg, void* jolly)
{
TCallbackFileinfo& info = *((TCallbackFileinfo*)jolly);
if (cfg.exist(info._var))
{
info._app = cfg.get(info._var);
return info._app.not_empty();
}
return FALSE;
}
bool get_relapp(int logicnum, TString& app)
{
TConfig ini("install.ini");
TCallbackFileinfo fi;
fi._var.format("Edit_%d", logicnum);
ini.for_each_paragraph(find_relapp, &fi);
if (fi._app.not_empty())
app = fi._app;
return fi._app.not_empty();
}
struct TCallbackTableinfo
{
TString16 _var1, _var2, _var3;
TString4 _module;
TFilename _tabapp, _relapp;
};
HIDDEN int find_tabapp(TConfig& cfg, void* jolly)
{
TCallbackTableinfo& info = *((TCallbackTableinfo*)jolly);
if (cfg.exist(info._var1))
{
info._tabapp = cfg.get(info._var1);
if (info._tabapp.not_empty())
return 1;
}
if (cfg.get_paragraph().compare(info._module, 2, TRUE) == 0)
{
if (cfg.exist(info._var2))
{
info._relapp = cfg.get(info._var2);
if (info._relapp.not_empty())
return 2;
}
if (cfg.exist(info._var3))
{
info._relapp = cfg.get(info._var3);
if (info._relapp.not_empty())
return 3;
}
}
return 0;
}
bool get_tabapp(const char * tabname, TString& app)
{
TConfig ini("install.ini");
TCallbackTableinfo fi;
TTable t(tabname);
fi._var1.format("Edit_%s", t.name());
fi._var2.format("Edit_%d", t.num());
fi._var2.format("Edit_%d", t.num() == LF_TABCOM ? LF_TAB : LF_TABCOM);
fi._module = t.module();
ini.for_each_paragraph(find_tabapp, &fi);
app = fi._tabapp;
if (app.empty())
app = fi._relapp;
if (app.empty())
{
app = "ba3 -0";
if (fi._module.compare("ba", 2, TRUE) != 0)
{
TConfig c(CONFIG_STUDIO, fi._module);
if (c.exist("TabPrg"))
app = c.get("TabPrg");
}
}
app << ' ' << tabname;
return tabname && *tabname > ' ';
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// Funzioni implementate per la gestione file dati tramite Codebase
////////////////////////////////////////////////////////////////////////////////////////////////////
@ -1302,32 +1395,9 @@ int TBaseisamfile::is_valid()
return err;
}
struct TCallbackFileinfo
{
TString16 _var;
TFilename _app;
};
HIDDEN int find_relapp(TConfig& cfg, void* jolly)
{
TCallbackFileinfo& info = *((TCallbackFileinfo*)jolly);
if (cfg.exist(info._var))
{
info._app = cfg.get(info._var);
return info._app.not_empty();
}
return FALSE;
}
bool TBaseisamfile::get_relapp(TString& app) const
{
TConfig ini("install.ini");
TCallbackFileinfo fi;
fi._var.format("Edit_%d", num());
ini.for_each_paragraph(find_relapp, &fi);
if (fi._app.not_empty())
app = fi._app;
return app.not_empty();
return curr().get_relapp(app);
}
@ -3391,6 +3461,74 @@ bool TRectype::send_mail(const char* action) const
return ok;
}
bool TRectype::get_relapp(TString& app) const
{
if (*_tab)
{
TString8 cod(_tab);
if (num() == LF_TABCOM)
cod.insert("%");
else
if (num() == LF_TABGEN)
cod.insert("#");
return ::get_tabapp(cod, app);
}
else
return ::get_relapp(num(), app);
}
void TRectype::edit(int logicnum, const char * alternate_key_fields) const
{
if (logicnum <= 0)
logicnum = num();
TToken_string key_labels;
TRectype r(logicnum);
if (*_tab)
r.settab(_tab);
const RecDes* recd = r.rec_des(); // Descrizione del record della testata
const KeyDes& kd = recd->Ky[0]; // Elenco dei campi della chiave 1
for (int i = 0; i < kd.NkFields; i++)
{
const int nf = kd.FieldSeq[i] % MaxFields;
const RecFieldDes& rf = recd->Fd[nf];
key_labels.add(rf.Name);
}
TToken_string key_fields(alternate_key_fields);
if (key_fields.empty_items())
key_fields = key_labels;
TFilename ininame; ininame.temp();
{
TConfig ini(ininame, "Transaction");
ini.set("Action", "MODIFY");
TString16 p; p << logicnum;
ini.set_paragraph(p);
FOR_EACH_TOKEN(key_labels, tok)
{
const TString16 name(tok);
const TString& value = get(key_fields.get());
ini.set(name, value);
}
}
TString app;
if (r.get_relapp(app))
{
app << " -i" << ininame;
TExternal_app a(app);
a.run();
}
}
///////////////////////////////////////////////////////////
// TRecfield (campo/sottocampo di un record)
///////////////////////////////////////////////////////////
@ -3576,4 +3714,4 @@ TRecnotype TRecfield::ptr() const
while(wp-- > (unsigned char*) _p)
r = (r << 8) + *wp;
return n ? -r : r;
}
}

@ -265,7 +265,11 @@ public:
// Gestione posta elettronica
virtual void fill_transaction(TConfig& cfg, int row = 0) const;
bool send_mail(const char* action = "MODIFY") const;
// @cmember Ritorna la relapp che gestisce il file
virtual bool get_relapp(TString& app) const;
virtual void edit(int logicnum = 0, const char * alternate_key_fields = NULL) const;
// @cmember Inizializza un record staccato da un file.
void init(int logicnum);
// @cmember Costruttore Costruisce un record staccato da un file.

@ -1130,6 +1130,23 @@ const TString& TMask::get(short fld_id) const
return s;
}
const TString& TMask::get(const char * fld_id) const
{
const TString * s = &EMPTY_STRING;
for (int i = 0 ; i < fields(); i++)
{
TMask_field& f = fld(i);
const TFieldref * campo = f.field();
if (campo != NULL && campo->name() == fld_id)
{
s= &f.get();
if (f.active())
break;
}
}
return *s;
}
long TMask::get_long(short fld_id) const
{
// const TString& s = field(fld_id).get();
@ -1196,6 +1213,25 @@ void TMask::set(
}
}
void TMask::set(
const char * fld_id, // @parm FIELD del campo da settare
const char* str, // @parm Stringa da assegnare al campo
bool hit) // @parm Indica se occorre rifare i controlli una volta settato il campo
// con il nuovo valore (default FALSE)
// @parm long | n | Numero da asegnare al campo
// @syntax set(short fld_id, const char *s, bool hit);
// @syntax set(short fld_id, long n, bool hit);
{
for (int i = 0 ; i < fields(); i++)
{
TMask_field& f = fld(i);
const TFieldref * campo = f.field();
if (campo != NULL && campo->name() == fld_id)
set(f.dlg(), str, hit);
}
}
void TMask::set(short fld_id, long n, bool hit)
{
char s[16];
@ -2040,7 +2076,7 @@ int TMask::save_profile(int num, const char* desc) const
return num;
}
int TMask::load_profile(int num)
int TMask::load_profile(int num, bool reset)
{
TFilename prof;
make_profile_name(prof);
@ -2060,16 +2096,19 @@ int TMask::load_profile(int num)
if (f.is_loadable() && f.get_default().empty())
{
name.format("F_%d", f.dlg());
if (f.is_sheet())
if (reset || var.objptr(name) != NULL)
{
TSheet_field& sf = (TSheet_field&)f;
sf.destroy();
for (int r = 0; ini.exist(name,r); r++)
sf.row(r) = ini.get(name, NULL, r);
sf.force_update();
if (f.is_sheet())
{
TSheet_field& sf = (TSheet_field&)f;
sf.destroy();
for (int r = 0; ini.exist(name,r); r++)
sf.row(r) = ini.get(name, NULL, r);
sf.force_update();
}
else
f.set(ini.get(name));
}
else
f.set(ini.get(name));
}
}

@ -274,7 +274,10 @@ public:
void set(short fld_id, long num, bool hit=FALSE);
// @cmember Setta il campo con un currency
void set(short fld_id, const TCurrency& num, bool hit=FALSE);
// @cmember Setta una tutti i campi che hanno come FIELD <p fld_id>
void set(const char * fld_id, const char * str, bool hit=FALSE);
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di stringa
virtual const TString& get(short fld_id) const;
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di long
long get_long(short fld_id) const;
@ -291,6 +294,8 @@ public:
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di currency
TCurrency& get_currency(short fld_id, TCurrency& curr) const;
// @cmember Ritorna il contenuto del primo campo attivo campo che ha come FIELD <p fld_id>
const TString& get(const char * fld_id) const;
// @cmember Indica quale campo deve ricevere per primo il focus nella maschera
int first_focus(short id);
@ -353,6 +358,8 @@ public:
// @cmember Azzera il campo
void reset(short fld_id = 0);
// @cmember Azzera il campo
void reset(const char * fld_id) {set(fld_id, "");}
// @cmember Legge, dalla relazione <p Trelation>, i valori del campo con specifica FIELD
void autoload(const TRelation& r);
@ -380,7 +387,7 @@ public:
// @cmember Salva il profilo <p num>
int save_profile(int num = 0, const char* desc = NULL) const;
// @cmember Carica il profilo <p num>
int load_profile(int num = 0);
int load_profile(int num = 0, bool reset = TRUE);
// @cmember Ritorna il primo campo dirty
short dirty() const;

@ -1166,19 +1166,22 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
break;
const int oldrec = _cur_rec;
const int record = set_pos(xiev->v.select.xi_obj->v.row, 1);
const int record = set_pos(xiev->v.select.xi_obj->v.row, _cur_col);
if (oldrec != _cur_rec)
{
_row_dirty = _cell_dirty = FALSE;
str2mask(_cur_rec);
on_idle(); // Forces update delayed by str2mask
_cur_rec = record; // Forces correct record (may be changed by on_idle!)
notify(_cur_rec, K_TAB);
set_pos(xiev->v.select.xi_obj->v.row, find_enabled_column(_cur_rec, 1, +1));
}
if (xiev->v.select.column > 0)
{
TOperable_field* f = col2field(xiev->v.select.column);
if (f && f->active())
{
notify_change();
if (f->get().empty())
@ -1188,14 +1191,15 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
f->on_key(K_SPACE);
mask2str(_cur_rec);
on_idle();
}
}
else
{
const int button_pos = sheet_mask().id2pos(FIRST_FIELD-1);
TMask & sm = owner().sheet_mask();
const int button_pos = sm.id2pos(FIRST_FIELD-1);
if (button_pos >= 0)
{
TMask & sm = owner().sheet_mask();
TMask_field& button = sm.fld(button_pos);
if (button.active())
{
@ -1892,14 +1896,7 @@ void TSpreadsheet::set_back_and_fore_color(COLOR back, COLOR fore, int row, int
{
TRow_property* prop = get_property(r, crea);
if (prop)
{
//qui 01
prop->set(col, back, fore);
/* if (back != COLOR_INVALID)
prop->_back = back;
if (fore != COLOR_INVALID)
prop->_fore = fore; */
}
}
}
}
@ -3111,4 +3108,3 @@ void TSheet_field::set_userput(SHEET_USERGETPUT handler)
{
_userput = handler;
}

@ -682,11 +682,10 @@ bool os_test_network_version()
{
const char* VREDIRNAME = "vredir.vxd";
DWORD handle;
BYTE infoBuffer[512];
DWORD dwSize = GetFileVersionInfoSize(VREDIRNAME,&handle);
const DWORD dwSize = GetFileVersionInfoSize(VREDIRNAME,&handle);
if (dwSize)
{
BYTE infoBuffer[512];
GetFileVersionInfo(VREDIRNAME,handle,dwSize,infoBuffer);
long *language;
void * lpBuffer;

@ -923,6 +923,7 @@ void TPrefix::set(
return;
if (!force && !test(name))
return;
if (_prefix != ".")
{
_manager.close_all();
@ -1266,4 +1267,3 @@ bool TPrefix::build_firm_data(long codditta, bool flagcom)
return TRUE;
}

@ -480,7 +480,9 @@ void TRelation_application::insert_mode()
// ....possibilmente spostare questa chiamata .....
if (_curr_transaction == TRANSACTION_INSERT)
ini2insert_mask();
ini2insert_mask();
_mask->load_profile(0, FALSE);
}
bool TRelation_application::modify_mode()

@ -153,6 +153,10 @@ TSheet_control::TSheet_control(
}
if (wi.find('R') >= 0)
_type[i] = 'R'; else
if (wi.find('V') >= 0)
_type[i] = 'V'; else
if (wi.find('P') >= 0)
_type[i] = 'P'; else
if (wi.find('M') >= 0)
_type[i] = 'M'; else
if (wi.find('C') >= 0)
@ -233,7 +237,7 @@ TSheet_control::TSheet_control(
long attr = XI_ATR_VISIBLE | XI_ATR_ENABLED | XI_ATR_AUTOSCROLL | XI_ATR_READONLY;
if (_type[i] == 'C')
attr |= XI_ATR_SELECTABLE;
if (_type[i] == 'R')
if (_type[i] == 'R' || _type[i] == 'V' || _type[i] == 'P') // Right, Currency, Price
attr |= XI_ATR_RJUST;
coldef = xi_add_column_def(listdef, FIRST_FIELD+i+1000, attr, i+1,
v_width[i] * XI_FU_MULTIPLE, m_width[i], (char*)h);
@ -743,6 +747,20 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
case 'M': // Set value for "roman" cell
src = itor(atoi(row(rec).get(col)));
break;
case 'V': // Set value for "value" cell
{
const real r = row(rec).get(col);
TCurrency c(r);
src = c.string(TRUE);
}
break;
case 'P': // Set value for "price" cell
{
const real r = row(rec).get(col);
TPrice c(r);
src = c.string(TRUE);
}
break;
default: // Set value for "normal" cell
src = row(rec).get(col);
break;
@ -1132,25 +1150,25 @@ bool TSheet::on_key(KEY key)
stop_run(K_ENTER);
break;
default:
key -= K_CTRL;
if (key >= 'A' && key <= 'Z')
{
for (int i = fields()-1; i >= 0; i--)
{
TMask_field& f = fld(i);
if (f.active() && f.is_kind_of(CLASS_BUTTON_FIELD))
{
TButton_field& b = (TButton_field&)f;
if (b.virtual_key() == key)
{
f.on_key(K_SPACE);
if (b.exit_key() > 0)
stop_run(b.exit_key());
return TRUE;
}
}
}
}
key -= K_CTRL;
if (key >= 'A' && key <= 'Z')
{
for (int i = fields()-1; i >= 0; i--)
{
TMask_field& f = fld(i);
if (f.active() && f.is_kind_of(CLASS_BUTTON_FIELD))
{
TButton_field& b = (TButton_field&)f;
if (b.virtual_key() == key)
{
f.on_key(K_SPACE);
if (b.exit_key() > 0)
stop_run(b.exit_key());
return TRUE;
}
}
}
}
break;
}

@ -205,68 +205,3 @@ const char* TTable::description()
return _description;
}
struct TCallbackTableinfo
{
TString16 _var1, _var2, _var3;
TString4 _module;
TFilename _tabapp, _relapp;
};
HIDDEN int find_relapp(TConfig& cfg, void* jolly)
{
TCallbackTableinfo& info = *((TCallbackTableinfo*)jolly);
if (cfg.exist(info._var1))
{
info._tabapp = cfg.get(info._var1);
if (info._tabapp.not_empty())
return 1;
}
if (cfg.get_paragraph().compare(info._module, 2, TRUE) == 0)
{
if (cfg.exist(info._var2))
{
info._relapp = cfg.get(info._var2);
if (info._relapp.not_empty())
return 2;
}
if (cfg.exist(info._var3))
{
info._relapp = cfg.get(info._var3);
if (info._relapp.not_empty())
return 3;
}
}
return 0;
}
bool TTable::get_relapp(TString& app) const
{
TConfig ini("install.ini");
TCallbackTableinfo fi;
fi._var1.format("Edit_%s", (const char*)_tabname);
fi._var2.format("Edit_%d", num());
fi._var3.format("Edit_%d", num() == LF_TAB ? LF_TABCOM : LF_TAB);
fi._module = ((TTable*)this)->module();
ini.for_each_paragraph(find_relapp, &fi);
app = fi._tabapp;
if (app.empty())
app = fi._relapp;
if (app.empty())
{
app = "ba3 -0";
if (fi._module.compare("ba", 2, TRUE) != 0)
{
TConfig c(CONFIG_STUDIO, fi._module);
if (c.exist("TabPrg"))
app = c.get("TabPrg");
}
}
app << ' ';
if (num() == LF_TABCOM)
app << '%';
app << _tabname;
return app.not_empty();
}

@ -55,9 +55,10 @@ public:
// @cmember Ritorna la relapp che gestisce la tabella
virtual bool get_relapp(TString& app) const;
// @cmember Ritorna il numero logico della tabella <p tabname>
static int name2log(const char* tabname);
};
#endif // __TABUTIL_H
#endif // __TABUTIL_H

@ -159,19 +159,16 @@ HIDDEN bool _pi_val(TMask_field& f, KEY)
const TString& stato = m.get(atoi(get_val_param(0)));
const TString& pi = f.get();
bool ok = pi_check (stato, pi);
bool ok = pi_check(stato, pi);
if (!ok)
{
if (f.dirty())
{
bool len_error = TRUE;
if (stato.blank() || stato == "IT")
len_error = pi.len() != 11;
const char* msg = len_error ? "Lunghezza p" : "P";
ok = f.yesno_box("%sartita IVA errata, la accetto ugualmente?", msg);
ok = f.yesno_box("Partita IVA errata, la accetto ugualmente?");
if (ok) f.set_dirty(FALSE);
}
else ok = TRUE; // Era gia' errata e la ho accettata
else
ok = TRUE; // Era gia' errata e la ho accettata
}
return ok;
}

@ -782,8 +782,6 @@ bool TSchedaPercipienti::check_competenza(TMask_field& f, KEY k)
//
bool TSchedaPercipienti::check_handler(TMask_field& f, KEY k)
{
const int fdec = TCurrency::get_firm_dec();
if (k == K_ENTER)
{
TMask& m = f.mask();
@ -828,11 +826,13 @@ bool TSchedaPercipienti::check_handler(TMask_field& f, KEY k)
for (i = 0; i < rver.items(); i++)
{
TToken_string& row = (TToken_string&)rver[i];
if (app().my_empty_items(row, TRUE)) continue;
real versato (row.get(7));
if (app().my_empty_items(row, TRUE))
continue;
real versato (row.get(7));
app()._tot_vers += versato;
}
const int fdec = TCurrency::get_firm_dec();
app()._tot_rit.round(fdec);
app()._tot_vers.round(fdec);
@ -840,17 +840,21 @@ bool TSchedaPercipienti::check_handler(TMask_field& f, KEY k)
m.set(F_RITOPE, app()._tot_rit);
m.set(F_RITVER, app()._tot_vers);
const real THRESOLD = 500.00;
const real diff = app()._tot_vers - app()._tot_rit;
const real diff = abs(app()._tot_vers - app()._tot_rit);
if (app()._tot_vers != ZERO && diff > ZERO)
if (diff > THRESOLD)
{
const bool in_euro = is_euro_value("");
const real THRESOLD = in_euro ? 0.50 : 500.0;
const bool war = in_euro ? (diff >= THRESOLD) : (diff > THRESOLD);
if (war)
{
f.warning_box ("La differenza tra il totale dei versamenti "
"e il totale delle ritenute non puo' superare "
"le %s lire", THRESOLD.string());
f.warning_box("La differenza tra il totale dei versamenti "
"ed il totale delle ritenute non puo' superare %s %s",
THRESOLD.string(), in_euro ? "Euro" : "Lire");
return forzatura;
}
}
}
return TRUE;
}
@ -889,7 +893,6 @@ void TSchedaPercipienti::mask2rel(const TMask& m)
_rel->destroy_rows(); // Destroy all records
pag_pack(); // Destroy all null rows
// salva pagamenti
TArray& rows = pags().rows_array();
for (int i = 0; i < rows.items(); i++)
@ -984,10 +987,10 @@ void TSchedaPercipienti::mask2rel(const TMask& m)
const char luogo = row.get_char(2);
const char tipo = row.get_char(3);
TString16 serie(row.get(4));
TString numero(row.get(5));
const TString16 serie(row.get(4));
const TString16 numero(row.get(5));
const long ProgBanca(row.get_long(6));
real ritenuta (row.get(7));
const real ritenuta (row.get(7));
const int numvers (row.get_int(8));
r.put("VERS1015",vers1015);

@ -143,8 +143,8 @@ BEGIN
DISPLAY "N°docum." NUMDOC
DISPLAY "Quadro" %CA7->S1
DISPLAY "Caus." CAUSQUA
DISPLAY "Rit.operate@15r" RITOPE
DISPLAY "Rit.versate@15r" RITVER
DISPLAY "Rit.operate@15V" RITOPE
DISPLAY "Rit.versate@15V" RITVER
OUTPUT F_TIPOA TIPOA
OUTPUT F_CODANAGR CODANAGR
OUTPUT F_NPROG NPROG

@ -13,7 +13,7 @@
#include "77lib.h"
#include "770200a.h"
class TVersa_rit : public TApplication
class TVersa_rit : public TSkeleton_application
{
private:
TLink770 _coll;
@ -44,7 +44,7 @@ class TVersa_rit : public TApplication
protected:
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG m);
virtual void main_loop();
int split_rpag(const long codditta,char tipoa,
const long codanagr, const int nprog,
@ -54,10 +54,10 @@ class TVersa_rit : public TApplication
const long codanagr, const int nprog,
const int nriga, const long new_vers);
long add_new_vers(const long codditta, char tipoa,
const long codanagr, const int nprog,
real& versato);
const long codanagr, const int nprog,
const real& versato);
void attach_pag_vers(TToken_string& r, real& versato, const bool last=FALSE);
void attach_pag_vers(TToken_string& r, real& versato, bool last);
real ritenuta_versata(const long codditta,const long numvers);
bool ha_pagamenti_non_versati(const long codditta,
@ -84,8 +84,6 @@ TCursor* TVersa_rit::meik_curs(TRelation* rel)
bool TVersa_rit::create()
{
TApplication::create();
// simulo una chiamata da contabilità
// (lo lascio per eventuali prove)
// real totdocla = ZERO;
@ -115,10 +113,10 @@ bool TVersa_rit::create()
TMessage* msg = m.next_s("LINK770");
// Questo programma si richiama solo dalla contabilita'
if (!msg) return FALSE;
if (!msg)
return FALSE;
if ( !_coll.read(msg->body()) )
return warning_box("Errore nei parametri passati");
_perc = new TLocalisamfile(LF_PERC);
_scperc = new TLocalisamfile(LF_SCPERC);
_rpag = new TLocalisamfile(LF_RPAG);
@ -147,11 +145,11 @@ bool TVersa_rit::create()
"@1|T|Codice|Scheda n.|Data@10|Ragione@50");
_pagam = new TArray_sheet(3, 3, -3, -3,
"Selezione ritenute da versare",
"@1|T|Codice|Scheda n.|Riga n.|Ritenuta@18R");
"@1|T|Codice|Scheda n.|Riga n.|Ritenuta@18V");
_apags.destroy();
dispatch_e_menu (BAR_ITEM(1));
return TRUE;
return TSkeleton_application::create();
}
bool TVersa_rit::destroy()
@ -232,15 +230,15 @@ bool TVersa_rit::abicab_hndl(TMask_field& f, KEY k)
{
if (f.to_check(k))
{
TString16 park(f.get());
TMask& m = f.mask();
char tipo = m.get(F_TIPO)[0];
TMask& m = f.mask();
const char tipo = m.get(F_TIPO)[0];
// ABI/CAB solo se tipo e' B
if (tipo != 'B')
return TRUE;
for (int i=0; i<park.len(); i++)
const TString& park = f.get();
for (int i=0; park[i]; i++)
if (!isdigit(park[i]))
return f.warning_box("Il codice ABI/CAB deve essere numerico");
}
@ -334,7 +332,8 @@ bool TVersa_rit::ha_pagamenti_non_versati(const long codditta,char tipoa,const l
rpag.next();
}
if (found) add(codditta,tipoa,codanagr,nprog,rriga);
if (found)
add(codditta,tipoa,codanagr,nprog,rriga);
return found;
}
@ -360,16 +359,14 @@ void TVersa_rit::build_pagam_sheet(const long codditta)
while ( (nriga = tpag->get_int()) != 0 ) // le righe partono da 1
{
const real da_versare = tpag->get(); // leggo importo rimasto da versare
const TCurrency k(da_versare);
TToken_string rr(100);
rr.add(" "); // Spazio per selezionare
rr.add(tipoa);
rr.add(codanagr);
// rr.add(ragsoc);
rr.add(nprog);
rr.add(nriga);
rr.add(k.string(TRUE));
rr.add(da_versare.string()); // Importo senza punti e virgole !!!!!!!!!!!!!
_pagam->add(rr);
}
}
@ -424,11 +421,11 @@ void TVersa_rit::build_schede_sheet(const long codditta)
bool TVersa_rit::do_all()
{
KEY kp;
long items = 0L;
// esecuzione prima maschera: richiesta estremi versamento
kp = _msk->run();
KEY kp = _msk->run();
if (kp != K_ENTER)
return FALSE;
@ -463,15 +460,15 @@ bool TVersa_rit::do_all()
}
kp = _sheet_perc->run();
if (kp == K_ENTER)
if (kp == K_ENTER)
{
if (!_sheet_perc->one_checked())
{
warning_box("Nessun percipiente selezionato");
continue;
}
if (kp == K_ESC)
}
else
return FALSE;
const long selected = _sheet_perc->selected();
@ -488,15 +485,15 @@ bool TVersa_rit::do_all()
}
kp = _schede->run();
if (kp == K_ENTER)
if (kp == K_ENTER)
{
if (!_schede->one_checked())
{
warning_box("Nessuna scheda selezionata");
continue;
}
if (kp == K_ESC)
}
else
continue;
build_pagam_sheet(codditta);
@ -518,75 +515,43 @@ bool TVersa_rit::do_all()
// Distribuisce _versato sui pagamenti selezionati creando la riga di
// versamento se occorre
long chk = 0L;
for (int i=0; i < _pagam->items(); i++)
if (_pagam->checked(i))
const long totchk = _pagam->checked();
if (totchk > 0)
{
long chk = 0L;
for (int i=0; i < _pagam->items() && _versato > ZERO; i++) if (_pagam->checked(i))
{
chk++;
if (_versato == ZERO) break;
// Sull'ultimo pagamento metto tutto il versamento rimasto
const bool last_checked = chk == _pagam->checked();
const bool is_last_checked = (chk == totchk);
TToken_string& r = _pagam->row(i);
real da_versare(r.get(5));
attach_pag_vers(r, _versato, last_checked);
if (da_versare > _versato)
_versato = ZERO;
else
_versato -= da_versare;
attach_pag_vers(r, _versato, is_last_checked);
}
return warning_box("Creazione versamenti terminata");
return warning_box("Creazione di %d versamenti terminata", chk);
}
} // while (TRUE)
return TRUE;
}
void TVersa_rit::attach_pag_vers(TToken_string& r, real& versato, const bool last)
void TVersa_rit::attach_pag_vers(TToken_string& r, real& disponibile, bool is_last)
{
char tipoa = r.get_char(1);
const long codditta = get_firm();
const char tipoa = r.get_char(1);
const long codanagr = r.get_long(2);
const int nprog = r.get_int(3);
const int nriga = r.get_int(4);
const long codditta = get_firm();
real da_versare(r.get(5)); // importo ancora "scoperto" in questo pag.
const real da_versare = r.get(5); // importo ancora "scoperto" in questo pag.
/*************************************************************************
TLocalisamfile rpag(LF_RPAG);
rpag.setkey(1);
rpag.zero();
rpag.put("CODDITTA", (long)codditta);
rpag.put("TIPOA", tipoa);
rpag.put("CODANAGR", (long)codanagr);
rpag.put("NPROG", nprog);
rpag.put("NRIGA", nriga);
if (rpag.read() != NOERR) return; // Non dovrebbe succedere mai
// Decido l'importo da attribuire al nuovo versamento
real ritenuta = rpag.get_real("RITENUTA");
*************************************************************************/
real vers_corr = ZERO;
// Se e' l'ultimo pagamento metto tutto l'importo del versamento
if (last)
vers_corr = versato;
real vers_corr;
// Se e' l'ultimo pagamento metto tutto l'importo del versamento
if (is_last)
vers_corr = disponibile;
else
vers_corr = versato > da_versare ? da_versare : versato;
vers_corr = (disponibile > da_versare) ? da_versare : disponibile;
disponibile -= vers_corr; // Scalo versamento corrente
// const long numvers = rpag.get_long("NUMVERS");
const long new_vers = add_new_vers(codditta,tipoa,codanagr,nprog,vers_corr);
// Se il pagamento era gia' collegato ad un versamento lo divido in due
// pagamenti: uno lo lascio collegato al precedente versamento, l'altro
// collegato al nuovo.
// Ogni pagamento puo' essere collegato A UNO E UNO SOLO versamento
/******
if (numvers > 0)
split_rpag(codditta,tipoa,codanagr,nprog,nriga,versato,da_versare,new_vers);
else
*****/
attach_rpag(codditta,tipoa,codanagr,nprog,nriga,new_vers);
attach_rpag(codditta,tipoa,codanagr,nprog,nriga,new_vers);
}
int TVersa_rit::split_rpag(const long codditta,char tipoa,
@ -638,7 +603,7 @@ int TVersa_rit::split_rpag(const long codditta,char tipoa,
// Leggo ritenuta del vecchio record e il suo versamento eventuale
// La parte che era stata gia' versata resta con il vecchio record
// La parte versata ora viene registrata nel nuovo.
real ritenuta = rpag.get_real("RITENUTA");
real ritenuta = rpag.get("RITENUTA");
real parte_versata = ritenuta - da_versare;
TRectype salvo(rpag.curr());
@ -673,25 +638,25 @@ int TVersa_rit::attach_rpag(const long codditta, char tipoa,
const int nriga, const long new_vers)
{
TLocalisamfile rpag(LF_RPAG);
int ret_code = 0;
rpag.zero();
rpag.put("CODDITTA", (long)codditta);
rpag.put("CODDITTA", codditta);
rpag.put("TIPOA", tipoa);
rpag.put("CODANAGR", (long)codanagr);
rpag.put("CODANAGR", codanagr);
rpag.put("NPROG", nprog);
rpag.put("NRIGA", nriga);
if ((ret_code = rpag.read()) != NOERR)
int ret_code = rpag.read();
if (ret_code != NOERR)
{
warning_box("Pagamento non trovato. Codice %d", ret_code);
error_box("Pagamento non trovato. Errore %d", ret_code);
return ret_code;
}
rpag.put("NUMVERS", (long)new_vers);
rpag.put("NUMVERS", new_vers);
if ((ret_code = rpag.rewrite()) != NOERR)
ret_code = rpag.rewrite();
if (ret_code != NOERR)
{
warning_box("Pagamento non modificato. Codice %d", ret_code);
error_box("Pagamento non modificato. Errore %d", ret_code);
return ret_code;
}
@ -700,7 +665,7 @@ int TVersa_rit::attach_rpag(const long codditta, char tipoa,
long TVersa_rit::add_new_vers(const long codditta, char tipoa,
const long codanagr, const int nprog,
real& versata)
const real& versata)
{
TLocalisamfile rver(LF_RVER);
int nriga = 0;
@ -723,9 +688,9 @@ long TVersa_rit::add_new_vers(const long codditta, char tipoa,
// Scrivo il nuovo record
rver.zero();
rver.put("CODDITTA", (long)codditta);
rver.put("CODDITTA", codditta);
rver.put("TIPOA", tipoa);
rver.put("CODANAGR", (long)codanagr);
rver.put("CODANAGR", codanagr);
rver.put("NPROG", nprog);
rver.put("NRIGA", nriga);
// rver.put("NUMVERS", (long)nriga);
@ -738,23 +703,32 @@ long TVersa_rit::add_new_vers(const long codditta, char tipoa,
if (rver.write() != NOERR)
{
warning_box("Fallita creazione versamento. Codice %d", rver.status());
error_box("Fallita creazione versamento. Errore %d", rver.status());
return 0L;
}
TLocalisamfile scperc(LF_SCPERC);
scperc.zero();
scperc.put("CODDITTA", codditta);
scperc.put("TIPOA", tipoa);
scperc.put("CODANAGR", codanagr);
scperc.put("NPROG", nprog);
if (scperc.read() == NOERR)
{
real ritver = scperc.get("RITVER");
ritver += versata;
scperc.put("RITVER", ritver);
scperc.rewrite();
}
return nriga;
}
bool TVersa_rit::menu(MENU_TAG m)
void TVersa_rit::main_loop()
{
if (m == BAR_ITEM(1))
return do_all();
return FALSE;
do_all();
}
int collega_vers_rit(int argc, char* argv[])
{
TVersa_rit a;

@ -44,14 +44,12 @@ BEGIN
PROMPT 2 5 "Data "
CHECKTYPE REQUIRED
WARNING "Inserire la data del versamento"
HELP "Inserire la data del versamento"
GROUP 1
END
STRING F_LUOGO 1
BEGIN
PROMPT 21 5 "Luogo "
HELP "Indicare il luogo del versamento"
SHEET "Cod.|Descrizione@30"
INPUT F_LUOGO
ITEM " |Nessuno"
@ -61,7 +59,6 @@ BEGIN
OUTPUT 71
FLAGS "U"
WARNING "Manca il luogo del versamento"
HELP "Inserire il luogo del versamento"
VALIDATE NOT_EMPTY_FUNC
GROUP 1
END
@ -114,7 +111,6 @@ BEGIN
OUTPUT F_TIPO
OUTPUT 70
GROUP 1
HELP "Inserire il tipo di versamento"
WARNING "Manca il tipo di versamento"
FLAGS "U"
VALIDATE NOT_EMPTY_FUNC
@ -148,7 +144,6 @@ BEGIN
CHECKTYPE REQUIRED
FLAGS "G"
WARNING "Inserire il numero di serie"
HELP "Inserire la serie"
GROUP 1 2 4
END
@ -157,7 +152,6 @@ BEGIN
PROMPT 39 7 ""
VALIDATE REQIF_FUNC 2 103 104
WARNING "Inserire il numero/quietanza"
HELP "Inserire il numero"
FLAGS "G"
GROUP 1 2 3 4 5
END
@ -165,8 +159,6 @@ END
CURRENCY F_VERSATO 15
BEGIN
PROMPT 2 10 "Importo versato "
PICTURE "."
HELP "Inserire l'importo versato"
WARNING "Manca l'importo versato"
CHECKTYPE REQUIRED
END

@ -70,9 +70,9 @@ protected:
virtual void postclose_print();
public:
TRectype& look_causali(int);
TRectype& look_schperc(long,char,long,int);
TDate look_vers(TSchedaP& sch, long numvers);
const TRectype& look_causali(int);
const TRectype& look_schperc(long,char,long,int);
TDate look_vers(const TSchedaP& sch, long numvers);
void crea_sort();
void init_sort();
void leggi_sort();
@ -89,12 +89,12 @@ public:
HIDDEN inline TSt_vers& app() { return (TSt_vers&)main_app(); }
const real& round_mille_lire(real& n)
{
{
// Arrotonda alle mille lire se siamo in lire, altrimenti non arrotondare!
const int dec = TCurrency::get_firm_dec();
if (dec == 0)
n.round(-3); // 1000 Lire
else
n.round(0); // Un Euro
return n;
}
@ -115,25 +115,22 @@ bool TSt_vers::codditta_hnd(TMask_field& f, KEY k)
bool filter_func (const TRelation* rel)
{
long codditta = rel->lfile(LF_RPAG).get_long(PAG_CODDITTA);
//const TRectype& rec = rel->lfile(LF_RVER).curr();
const TRectype& rpag = rel->curr(LF_RPAG);
const long codditta = rpag.get_long(PAG_CODDITTA);
if (codditta != app()._codditta)
return FALSE;
TDate datapag = rel->lfile(LF_RPAG).get(PAG_DATAPAG);
const TDate datapag = rpag.get(PAG_DATAPAG);
if (datapag.ok() && datapag <= app()._datamsk)
{
long numvers = rel->lfile(LF_RPAG).get_long(PAG_NUMVERS);
const long numvers = rpag.get_long(PAG_NUMVERS);
if (numvers <= 0)
return TRUE;
const long codanagr = rel->lfile(LF_RPAG).get_long(PAG_CODANAGR);
const char tipoa = rel->lfile(LF_RPAG).get_char(PAG_TIPOA);
const int nprog = rel->lfile(LF_RPAG).get_int(PAG_NPROG);
const long codanagr = rpag.get_long(PAG_CODANAGR);
const char tipoa = rpag.get_char(PAG_TIPOA);
const int nprog = rpag.get_int(PAG_NPROG);
TSchedaP sch(codditta, tipoa, codanagr, nprog);
//TDate datavers = rel->lfile(LF_RVER).get(VER_DATAVERS);
TDate datavers = app().look_vers(sch, numvers);
if (!datavers.ok())
return TRUE;
@ -141,7 +138,7 @@ bool filter_func (const TRelation* rel)
return FALSE;
}
TDate TSt_vers::look_vers(TSchedaP& scheda, long num)
TDate TSt_vers::look_vers(const TSchedaP& scheda, long num)
{
TLocalisamfile vers(LF_RVER);
vers.zero();
@ -157,9 +154,9 @@ TDate TSt_vers::look_vers(TSchedaP& scheda, long num)
return vers.get_date(VER_DATAVERS);
}
TRectype& TSt_vers::look_schperc (long cod, char t, long codan, int np)
const TRectype& TSt_vers::look_schperc (long cod, char t, long codan, int np)
{
TLocalisamfile schede(LF_SCPERC);
TLocalisamfile& schede = *_scperc;
schede.zero();
schede.put(SPR_CODDITTA, cod);
schede.put(SPR_TIPOA, t);
@ -172,7 +169,7 @@ TRectype& TSt_vers::look_schperc (long cod, char t, long codan, int np)
return schede.curr();
}
TRectype& TSt_vers::look_causali(int cod)
const TRectype& TSt_vers::look_causali(int cod)
{
TString16 dep;
@ -221,12 +218,12 @@ void TSt_vers::crea_sort()
mese = datapag.month();
anno = datapag.year();
TRectype dep = look_schperc(_codditta, tipoa, codan, nprog);
const TRectype dep = look_schperc(_codditta, tipoa, codan, nprog);
codc = dep.get_int(SPR_CODCAUS);
datadoc = dep.get_date(SPR_DATADOC);
numdoc = dep.get(SPR_NUMDOC);
TRectype cau = look_causali(codc);
const TRectype& cau = look_causali(codc);
TString descr = cau.get("S0");
int codtrib = cau.get_int("I0");

@ -120,7 +120,9 @@ class TTrasferimentoDylog : public TObject
TFilename _name;
ifstream* _in_stream;
ofstream* _out_stream;
TString16 _defname;
public:
bool open(const char* path = "", char mode = 'r');
bool close();
@ -130,7 +132,7 @@ public:
virtual bool ok() const;
const char* default_name() const { return "TRA701"; }
const TString& default_name();
TTrasferimentoDylog& operator<<(const TRecordDylog& rec)
{ write(rec); return *this; }
@ -530,6 +532,16 @@ TRecordDylog::~TRecordDylog()
// TTrasferimentoDylog
///////////////////////////////////////////////////////////
const TString& TTrasferimentoDylog::default_name()
{
if (_defname.empty())
{
const TDate today(TODAY);
_defname.format("TRA7%02d", today.year() % 100);
}
return _defname;
}
bool TTrasferimentoDylog::open(const char* path, char mode)
{
CHECK(mode == 'r' || mode == 'w', "Invalid open mode");

@ -19,7 +19,11 @@
#define F_DESCRCONTOA 119
#define F_CAMPI 120
#define F_QTA 121
#define F_GRUPPOPCI 122
#define F_CONTOPCI 123
#define F_SOTTOPCI 124
#define F_DESCRCONTOPCI 125
#define F_GRUPPOPCIA 122
#define F_CONTOPCIA 123
#define F_SOTTOPCIA 124
#define F_DESCRCONTOPCIA 125
#define F_GRUPPOPCIV 126
#define F_CONTOPCIV 127
#define F_SOTTOPCIV 128
#define F_DESCRCONTOPCIV 129

@ -96,7 +96,7 @@ END
LISTBOX F_CAMPI 15
BEGIN
PROMPT 2 10 "Campo default "
PROMPT 2 9 "Campo default "
FIELD S6
ITEM "Q|Qta prezzo "
MESSAGE SHOW,1@|ENABLE,2@|HIDE,3@|RESET,3@
@ -108,7 +108,7 @@ END
CURRENCY F_PREZZO 15
BEGIN
PROMPT 2 12 "Prezzo "
PROMPT 2 10 "Prezzo "
FIELD R0
FLAGS "U"
GROUP 1
@ -116,14 +116,14 @@ END
NUMBER F_QTA 13 5
BEGIN
PROMPT 35 12 "Quantita' "
PROMPT 35 10 "Quantita' "
FIELD R1
GROUP 1 2
END
STRING F_UM 2
BEGIN
PROMPT 63 12 "U.M. "
PROMPT 63 10 "U.M. "
FIELD S7
FLAGS "U"
USE %UMS
@ -137,14 +137,14 @@ END
NUMBER F_PERCENTUALE 5 2
BEGIN
PROMPT 2 11 "Percentuale "
PROMPT 49 9 "Percentuale "
FIELD R2
GROUP 3
END
STRING F_NCAMPOCAL 10
BEGIN
PROMPT 2 12 "Formula Doc. "
PROMPT 2 10 "Formula Doc. "
FIELD S5
FLAG "U"
USE %FRD
@ -159,7 +159,7 @@ END
STRING F_NCAMPOCAL1 50
BEGIN
PROMPT 17 13 ""
PROMPT 17 10 ""
USE %FRD KEY 2
INPUT S0 F_NCAMPOCAL1
DISPLAY "Descrizione@50" S0
@ -172,14 +172,14 @@ END
NUMBER F_GRUPPOV 3
BEGIN
PROMPT 2 14 "Conto vendita "
PROMPT 2 11 "Conto vendita "
FIELD I0
CHECKTYPE NORMAL
END
NUMBER F_CONTOV 3
BEGIN
PROMPT 22 14 ""
PROMPT 22 11 ""
FIELD I1
USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO=="")
INPUT GRUPPO F_GRUPPOV
@ -196,7 +196,7 @@ BEGIN
NUMBER F_SOTTOV 6
BEGIN
PROMPT 30 14 ""
PROMPT 30 11 ""
FIELD I2
USE LF_PCON SELECT SOTTOCONTO!=""
JOIN LF_PCON ALIAS 500 INTO GRUPPO==GRUPPO CONTO==CONTO
@ -218,7 +218,7 @@ END
STRING F_DESCRCONTOV 50
BEGIN
PROMPT 17 15 ""
PROMPT 17 12 ""
FLAG "U"
USE LF_PCON KEY 2 SELECT (SOTTOCONTO!="")
JOIN LF_PCON ALIAS 500 INTO GRUPPO==GRUPPO CONTO==CONTO
@ -235,14 +235,14 @@ END
NUMBER F_GRUPPOA 3
BEGIN
PROMPT 2 16 "Conto acquisti "
PROMPT 2 13 "Conto acquisti "
FIELD I3
CHECKTYPE NORMAL
END
NUMBER F_CONTOA 3
BEGIN
PROMPT 22 16 ""
PROMPT 22 13 ""
FIELD I4
COPY USE F_CONTOV
INPUT GRUPPO F_GRUPPOA
@ -259,7 +259,7 @@ BEGIN
NUMBER F_SOTTOA 6
BEGIN
PROMPT 30 16 ""
PROMPT 30 13 ""
FIELD I5
COPY USE F_SOTTOV
INPUT GRUPPO F_GRUPPOA
@ -277,7 +277,7 @@ END
STRING F_DESCRCONTOA 50
BEGIN
PROMPT 17 17 ""
PROMPT 17 14 ""
FLAG "U"
COPY USE F_DESCRCONTOV
INPUT DESCR F_DESCRCONTOA
@ -288,64 +288,119 @@ BEGIN
ADD RUN CG0 -0
END
NUMBER F_GRUPPOPCI 3
NUMBER F_GRUPPOPCIA 3
BEGIN
PROMPT 2 18 "Conto industr. "
PROMPT 2 15 "Conto industr. "
FIELD I6
CHECKTYPE NORMAL
END
NUMBER F_CONTOPCI 3
NUMBER F_CONTOPCIA 3
BEGIN
PROMPT 22 18 ""
PROMPT 22 15 ""
FIELD I7
USE PCI SELECT (CODTAB[4,6]!="") && (CODTAB[7,12]=="")
INPUT CODTAB[1,3] F_GRUPPOPCI
INPUT CODTAB[4,6] F_CONTOPCI
INPUT CODTAB[1,3] F_GRUPPOPCIA
INPUT CODTAB[4,6] F_CONTOPCIA
DISPLAY "Gruppo" CODTAB[1,3]
DISPLAY "Conto" CODTAB[4,6]
DISPLAY "Descrizione@50" S0
OUTPUT F_GRUPPOPCI CODTAB[1,3]
OUTPUT F_CONTOPCI CODTAB[4,6]
OUTPUT F_GRUPPOPCIA CODTAB[1,3]
OUTPUT F_CONTOPCIA CODTAB[4,6]
CHECKTYPE NORMAL
ADD RUN BA3 -0 PCI
WARNING "Codice piano dei conti industriale assente"
END
NUMBER F_SOTTOPCI 6
NUMBER F_SOTTOPCIA 6
BEGIN
PROMPT 30 18 ""
PROMPT 30 15 ""
FIELD I8
USE PCI SELECT CODTAB[7,12]!=""
INPUT CODTAB[1,3] F_GRUPPOPCI
INPUT CODTAB[4,6] F_CONTOPCI
INPUT CODTAB[7,12] F_SOTTOPCI
INPUT CODTAB[1,3] F_GRUPPOPCIA
INPUT CODTAB[4,6] F_CONTOPCIA
INPUT CODTAB[7,12] F_SOTTOPCIA
DISPLAY "Gruppo" CODTAB[1,3]
DISPLAY "Conto" CODTAB[4,6]
DISPLAY "Sottoconto" CODTAB[7,12]
DISPLAY "Descrizione@50" S0
OUTPUT F_GRUPPOPCI CODTAB[1,3]
OUTPUT F_CONTOPCI CODTAB[4,6]
OUTPUT F_SOTTOPCI CODTAB[7,12]
OUTPUT F_DESCRCONTOPCI S0
OUTPUT F_GRUPPOPCIA CODTAB[1,3]
OUTPUT F_CONTOPCIA CODTAB[4,6]
OUTPUT F_SOTTOPCIA CODTAB[7,12]
OUTPUT F_DESCRCONTOPCIA S0
CHECKTYPE NORMAL
WARNING "Sottoconto errato"
ADD RUN BA3 -0 PCI
END
STRING F_DESCRCONTOPCI 50
STRING F_DESCRCONTOPCIA 50
BEGIN
PROMPT 17 19 ""
PROMPT 2 16 "acquisti "
FLAG "U"
USE PCI KEY 2 SELECT (CODTAB[7,12]!="")
INPUT S0 F_DESCRCONTOPCI
INPUT S0 F_DESCRCONTOPCIA
DISPLAY "Descrizione@50" S0
DISPLAY "Gruppo" CODTAB[1,3]
DISPLAY "Conto" CODTAB[4,6]
DISPLAY "Sottoconto" CODTAB[7,12]
COPY OUTPUT F_SOTTOPCI
COPY OUTPUT F_SOTTOPCIA
CHECKTYPE NORMAL
ADD RUN BA0 -3 PCI
END
NUMBER F_GRUPPOPCIV 3
BEGIN
PROMPT 2 17 "Conto industr. "
FIELD I9
CHECKTYPE NORMAL
END
NUMBER F_CONTOPCIV 3
BEGIN
PROMPT 22 17 ""
FIELD I10
USE PCI SELECT (CODTAB[4,6]!="") && (CODTAB[7,12]=="")
INPUT CODTAB[1,3] F_GRUPPOPCIV
INPUT CODTAB[4,6] F_CONTOPCIV
DISPLAY "Gruppo" CODTAB[1,3]
DISPLAY "Conto" CODTAB[4,6]
DISPLAY "Descrizione@50" S0
OUTPUT F_GRUPPOPCIV CODTAB[1,3]
OUTPUT F_CONTOPCIV CODTAB[4,6]
CHECKTYPE NORMAL
ADD RUN BA3 -0 PCI
END
NUMBER F_SOTTOPCIV 6
BEGIN
PROMPT 30 17 ""
FIELD I11
USE PCI SELECT CODTAB[7,12]!=""
INPUT CODTAB[1,3] F_GRUPPOPCIV
INPUT CODTAB[4,6] F_CONTOPCIV
INPUT CODTAB[7,12] F_SOTTOPCIV
DISPLAY "Gruppo" CODTAB[1,3]
DISPLAY "Conto" CODTAB[4,6]
DISPLAY "Sottoconto" CODTAB[7,12]
DISPLAY "Descrizione@50" S0
OUTPUT F_GRUPPOPCIV CODTAB[1,3]
OUTPUT F_CONTOPCIV CODTAB[4,6]
OUTPUT F_SOTTOPCIV CODTAB[7,12]
OUTPUT F_DESCRCONTOPCIV S0
CHECKTYPE NORMAL
ADD RUN BA3 -0 PCI
END
STRING F_DESCRCONTOPCIV 50
BEGIN
PROMPT 2 18 "vendita "
FLAG "U"
USE PCI KEY 2 SELECT (CODTAB[7,12]!="")
INPUT S0 F_DESCRCONTOPCIV
DISPLAY "Descrizione@50" S0
DISPLAY "Gruppo" CODTAB[1,3]
DISPLAY "Conto" CODTAB[4,6]
DISPLAY "Sottoconto" CODTAB[7,12]
COPY OUTPUT F_SOTTOPCIV
CHECKTYPE NORMAL
WARNING "Codice piano conti industriale assente"
ADD RUN BA0 -3 PCI
END

@ -281,23 +281,16 @@ BEGIN
FIELD B6
END
NUMBER F_NATURA 1
STRING F_NATURA 1
BEGIN
PROMPT 44 18 "Natura transazione "
SHEET "Cod.|Descrizione@66"
INPUT F_NATURA
ITEM "|"
ITEM "1|Acquisto o vendita (compreso il baratto)"
ITEM "2|Restituzione o sostituzione di merci"
ITEM "3|Aiuti gernativi, privati o finanziati dalla comunita' europea"
ITEM "4|Operazione in vista di una lavorazione per conto terzi o di una riparazione"
ITEM "5|Operazione successiva ad una lavorazione per conto terzi o di una riparazione"
ITEM "6|Movimento di merci senza trasferimento di proprieta' (per noleggio, leasing operativo, ecc.)"
ITEM "7|Operazione a titolo di un programma comune di difesa o di un altro programma intergovernativo di fabbricazione coordinata"
ITEM "8|Fornitura di materiali e macchinari nel quadro di un contratto generale di costruzione o di genio civile"
ITEM "9|Altre transazioni"
OUTPUT F_NATURA
FIELD I2
FLAGS "U"
USE %INT
INPUT CODTAB F_NATURA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_NATURA CODTAB
FIELD S3[4,4]
END
ENDPAGE

@ -1,3 +1,3 @@
47
0
$anamag|0|0|757|0|Anagrafica di magazzino|NART||
$anamag|0|0|775|0|Anagrafica di magazzino|NART||

@ -55,8 +55,8 @@ CONCAR|4|15|5|Peso Carta (Kg) per CONAI
CONPLA|4|15|5|Peso Plastica (Kg) per CONAI
CONLEG|4|15|5|Peso Legno (Kg) per CONAI
CONVET|4|15|5|Peso Vetro (Kg) per CONAI
COLLTYPE|1|1|0|Tipo di collegamento per movimenti con distinta <> Nessuno, dalla riga <M>ovimento della causale collegata, dal <F>ornitore, dall'<A>rticolo
CODMAG|1|5|0|Codice magazzino alternativo per movimenti con distinta
CONTOINDA|1|12|0|Codice piano dei conti industriale (GrCoSo) Acquisti
CONTOINDV|1|12|0|Codice piano dei conti industriale (GrCoSo) Vendite
USER1|1|20|0|Campo libero 1
USER2|1|20|0|Campo libero 2
USER3|1|20|0|Campo libero 3

@ -363,7 +363,6 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query)
else
{
TSheet_field& f = msk.sfield(F_SHEET);
f.destroy();
TTipo_riga_documento tr;
@ -374,7 +373,10 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query)
for (int i = 1; ini.set_paragraph(format("%d,%d", LF_RIGHEDOC, i)); i++)
{
if (i == 1) // Se trovo almeno una riga allora cancello tutto, poi aggiungo le righe
{
f.destroy();
doc().destroy_rows();
}
// Considera solo i tipi riga validi
const TString16 tipo = ini.get(RDOC_TIPORIGA);

@ -1,32 +1,50 @@
#include "ve0100b1.h"
PAGE "Elaborazioni " -1 -1 78 17
TOOLBAR "" 0 -2 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Elaborazioni " -1 -1 78 19
BOOLEAN F_TYPE
BEGIN
PROMPT 2 1 "Aggiungi al documento attuale"
MESSAGE FALSE SHOW,F_GROUP_D|HIDE,F_GROUP_S
MESSAGE TRUE SHOW,F_GROUP_S|HIDE,F_GROUP_D
PROMPT 1 0 "Aggiungere al doc. attuale"
MESSAGE FALSE SHOW,F_GROUP_D|HIDE,F_GROUP_S|CLEAR,F_UPDATE_HEADER
MESSAGE TRUE SHOW,F_GROUP_S|HIDE,F_GROUP_D|ENABLE,F_UPDATE_HEADER
END
LISTBOX F_ELAB 3 50
LISTBOX F_ELAB 50 30
BEGIN
PROMPT 2 3 "Elaborazione "
PROMPT 31 0 "@bElaborazione "
END
GROUPBOX F_GROUP_D 77 11
GROUPBOX F_GROUP_D 77 9
BEGIN
PROMPT 1 4 "Destinazione"
PROMPT 1 1 "@bDestinazione"
END
GROUPBOX F_GROUP_S 77 11
GROUPBOX F_GROUP_S 77 9
BEGIN
PROMPT 1 4 "Sorgente"
PROMPT 1 1 "@bSorgente"
END
STRING F_TIPODOC_ELAB 4
BEGIN
PROMPT 2 5 "Tipo documento "
PROMPT 2 2 "Tipo documento "
HELP "Codice tipo documento"
USE %TIP
INPUT CODTAB F_TIPODOC_ELAB
@ -41,7 +59,7 @@ END
STRING F_DESTIPODOC_ELAB 50
BEGIN
PROMPT 24 5 ""
PROMPT 24 2 ""
HELP "Descrizione tipo documento"
USE %TIP KEY 2
INPUT S0 F_DESTIPODOC_ELAB
@ -54,7 +72,7 @@ END
STRING F_STATODOC_ELAB 1
BEGIN
PROMPT 2 7 "Stato "
PROMPT 2 3 "Stato "
USE %STD
CHECKTYPE NORMAL
INPUT CODTAB F_STATODOC_ELAB
@ -68,7 +86,7 @@ END
STRING F_DESSTATODOC_ELAB 50
BEGIN
PROMPT 24 7 ""
PROMPT 24 3 ""
HELP "Descrizione stato documento"
USE %STD KEY 2
INPUT S0 F_DESSTATODOC_ELAB
@ -81,7 +99,7 @@ END
STRING F_CODNUM_ELAB 4
BEGIN
PROMPT 2 9 "Cod. num. "
PROMPT 2 4 "Cod. num. "
HELP "Codice numerazione"
USE %NUM
INPUT CODTAB F_CODNUM_ELAB
@ -97,7 +115,7 @@ END
STRING F_DESNUM_ELAB 50
BEGIN
PROMPT 24 9 ""
PROMPT 24 4 ""
HELP "Descrizione numerazione"
USE %NUM KEY 2
INPUT S0 F_DESNUM_ELAB
@ -109,13 +127,13 @@ END
NUMBER F_ANNO_ELAB 4
BEGIN
PROMPT 2 11 "Esercizio "
PROMPT 2 5 "Esercizio "
CHECKTYPE REQUIRED
END
LIST F_TIPOCF_ELAB 1 11
BEGIN
PROMPT 2 15 ""
PROMPT 2 9 ""
FLAGS "H"
HELP "Indicare se cliente oppure fornitore"
ITEM "C|Clienti"
@ -124,10 +142,11 @@ END
NUMBER F_CODCF_ELAB 6
BEGIN
PROMPT 10 15 ""
PROMPT 10 9 ""
FLAGS "HR"
END
STRING F_CODVAL_ELAB 4
STRING F_CODVAL_ELAB 3
BEGIN
PROMPT 10 25 ""
FLAGS "HR"
@ -135,11 +154,14 @@ END
NUMBER F_NDOC_ELAB 6
BEGIN
PROMPT 24 11 "Numero doc. "
USE LF_DOC
PROMPT 24 5 "Numero doc. "
USE LF_DOC KEY 2
JOIN LF_CLIFO TO LF_DOC INTO TIPOCF==TIPOCF CODCF==CODCF
INPUT TIPOCF F_TIPOCF_ELAB SELECT
INPUT CODCF F_CODCF_ELAB SELECT
INPUT PROVV F_PROVV_ELAB SELECT
INPUT ANNO F_ANNO_ELAB SELECT
INPUT ANNO F_ANNO_ELAB SELECT
INPUT DATADOC F_DATADOC_ELAB
INPUT CODNUM F_CODNUM_ELAB
INPUT NDOC F_NDOC_ELAB
DISPLAY "Num." CODNUM
@ -147,14 +169,15 @@ BEGIN
DISPLAY "Provv" PROVV
DISPLAY "Tipo" TIPODOC
DISPLAY "N.Doc. " NDOC
DISPLAY "Stato" STATO
DISPLAY "Data\ndocumento" DATADOC
DISPLAY "C/F" TIPOCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
OUTPUT F_NDOC_ELAB NDOC
OUTPUT F_DATADOC_ELAB DATADOC
OUTPUT F_CODNUM_ELAB CODNUM
OUTPUT F_NDOC_ELAB NDOC
CHECKTYPE NORMAL
FLAG "R"
WARNING "Documento inesistente o incompatibile"
ADD RUN ve0 -1
MESSAGE EMPTY SHOW,F_DATADOC_ELAB
@ -163,33 +186,33 @@ END
LISTBOX F_PROVV_ELAB 14
BEGIN
PROMPT 46 11 "Tipo "
PROMPT 52 5 "Tipo "
ITEM "D|Definitiva "
ITEM "P|Provvisoria"
KEY 1
FLAGS "P"
END
STRING F_NUMDOCRIF 7
STRING F_NUMDOCRIF_ELAB 7
BEGIN
PROMPT 2 12 "Documento di riferimento "
PROMPT 2 6 "Documento di riferimento "
FLAGS "B"
END
DATE F_DATADOC_ELAB
BEGIN
PROMPT 2 13 "Data documento "
PROMPT 2 7 "Data documento "
FLAGS "A"
END
BOOLEAN F_UPDATE_HEADER
BEGIN
PROMPT 41 13 "Aggiorna testata"
PROMPT 41 7 "Aggiorna testata"
END
STRING F_CODART 20
BEGIN
PROMPT 2 15 "Articolo "
PROMPT 2 8 "Articolo "
USE LF_ANAMAG
INPUT CODART F_CODART
DISPLAY "Codice@20" CODART
@ -203,7 +226,7 @@ END
STRING F_UMQTA 2
BEGIN
PROMPT 41 15 "U.M. "
PROMPT 41 8 "U.M. "
USE LF_UMART KEY 2
JOIN %UMS INTO CODTAB=UM
INPUT CODART F_CODART SELECT
@ -220,19 +243,15 @@ END
NUMBER F_QTA 13 5
BEGIN
PROMPT 51 15 "Qta' "
PROMPT 51 8 "Qta' "
GROUP GRP_ART
END
BUTTON DLG_OK 9 2
TREE F_ROWS -3 -1
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -22 -1 ""
PROMPT 0 10 ""
END
ENDPAGE
ENDMASK

@ -1,24 +1,44 @@
#define F_TYPE 101
#define F_ELAB 102
#define F_TIPODOC_ELAB 103
#define F_STATODOC_ELAB 104
#define F_DESTIPODOC_ELAB 105
#define F_DESSTATODOC_ELAB 106
#define F_GROUP_D 107
#define F_GROUP_S 108
#define F_CODNUM_ELAB 109
#define F_DESNUM_ELAB 110
#define F_ANNO_ELAB 111
#define F_NDOC_ELAB 112
#define F_PROVV_ELAB 113
#define F_TIPOCF_ELAB 114
#define F_CODCF_ELAB 115
#define F_DATADOC_ELAB 116
#define F_UPDATE_HEADER 117
#define F_CODART 118
#define F_UMQTA 119
#define F_QTA 120
#define F_NUMDOCRIF 127
#define F_CODVAL_ELAB 128
#define F_TYPE 201
#define F_ELAB 202
#define F_TIPODOC_ELAB 203
#define F_STATODOC_ELAB 204
#define F_DESTIPODOC_ELAB 205
#define F_DESSTATODOC_ELAB 206
#define F_GROUP_D 207
#define F_GROUP_S 208
#define F_CODNUM_ELAB 209
#define F_DESNUM_ELAB 210
#define F_ANNO_ELAB 211
#define F_NDOC_ELAB 212
#define F_PROVV_ELAB 213
#define F_TIPOCF_ELAB 214
#define F_CODCF_ELAB 215
#define F_DATADOC_ELAB 216
#define F_UPDATE_HEADER 217
#define F_CODART 218
#define F_UMQTA 219
#define F_QTA 220
#define F_NUMDOCRIF_ELAB 227
#define F_CODVAL_ELAB 228
#define F_ROWS 229
#define GRP_ART 2
#define GRP_ART 2
#define S_RIGACONSEGNATA 101
#define S_QTARESIDUA 102
#define S_QTADAEVADERE 103
#define S_RIGAEVASA 104
#define S_CODMAG 105
#define S_CODDEP 106
#define S_CODART 107
#define S_LIVGIAC1 108
#define S_LIVGIAC2 109
#define S_LIVGIAC3 110
#define S_LIVGIAC4 111
#define S_DATACONS 112
#define S_PREZZO 113
#define S_DESCR 114
#define S_TIPORIGA 115
#define S_NUMRIGA 116

@ -1462,7 +1462,9 @@ bool TAnagrafica_magazzino::handle_copia(TMask_field &fld, KEY k)
m.sfield(F_SHEETGIAC).destroy();
m.sfield(F_SHEETSTOMAG).destroy();
m.load_profile(0, FALSE);
m.set_mode(MODE_INS);
xvt_statbar_set("Inserimento", TRUE);
}

@ -26,10 +26,14 @@
#define F_CONTOV 136
#define F_SOTTOCV 137
#define F_DESCRV 138
#define F_GRUPPOPCI 110
#define F_CONTOPCI 111
#define F_SOTTOPCI 112
#define F_DESCRCONTOPCI 113
#define F_GRUPPOPCIA 110
#define F_CONTOPCIA 111
#define F_SOTTOPCIA 112
#define F_DESCRCONTOPCIA 113
#define F_GRUPPOPCIV 114
#define F_CONTOPCIV 115
#define F_SOTTOPCIV 116
#define F_DESCRCONTOPCIV 117
#define F_UMP 139
#define F_PESO 140
#define F_CLASSDOG1 141

@ -479,70 +479,111 @@ BEGIN
WARNING "Conto assente"
END
NUMBER F_GRUPPOPCI 3
NUMBER F_GRUPPOPCIA 3
BEGIN
PROMPT 1 12 "Conto industr. "
FIELD I6
PROMPT 1 12 "C. ind. acquisti "
FIELD LF_ANAMAG->CONTOINDA[1,3]
CHECKTYPE NORMAL
END
NUMBER F_CONTOPCI 3
NUMBER F_CONTOPCIA 3
BEGIN
PROMPT 22 12 ""
FIELD I7
//USE PCI SELECT (CODTAB[4,6]!="") && (CODTAB[7,12]=="")
//INPUT CODTAB[1,3] F_GRUPPOPCI
//INPUT CODTAB[4,6] F_CONTOPCI
//DISPLAY "Gruppo" CODTAB[1,3]
//DISPLAY "Conto" CODTAB[4,6]
//DISPLAY "Descrizione@50" S0
//OUTPUT F_GRUPPOPCI CODTAB[1,3]
//OUTPUT F_CONTOPCI CODTAB[4,6]
FIELD LF_ANAMAG->CONTOINDA[4,6]
CHECKTYPE NORMAL
ADD RUN BA3 -0 PCI
WARNING "Codice piano dei conti industriale assente"
END
NUMBER F_SOTTOPCI 6
NUMBER F_SOTTOPCIA 6
BEGIN
PROMPT 26 12 ""
FIELD I8
FIELD LF_ANAMAG->CONTOINDA[7,12]
USE PCI SELECT CODTAB[7,12]!=""
INPUT CODTAB[1,3] F_GRUPPOPCI
INPUT CODTAB[4,6] F_CONTOPCI
INPUT CODTAB[7,12] F_SOTTOPCI
INPUT CODTAB[1,3] F_GRUPPOPCIA
INPUT CODTAB[4,6] F_CONTOPCIA
INPUT CODTAB[7,12] F_SOTTOPCIA
DISPLAY "Gruppo" CODTAB[1,3]
DISPLAY "Conto" CODTAB[4,6]
DISPLAY "Sottoconto" CODTAB[7,12]
DISPLAY "Descrizione@50" S0
OUTPUT F_GRUPPOPCI CODTAB[1,3]
OUTPUT F_CONTOPCI CODTAB[4,6]
OUTPUT F_SOTTOPCI CODTAB[7,12]
OUTPUT F_DESCRCONTOPCI S0
OUTPUT F_GRUPPOPCIA CODTAB[1,3]
OUTPUT F_CONTOPCIA CODTAB[4,6]
OUTPUT F_SOTTOPCIA CODTAB[7,12]
OUTPUT F_DESCRCONTOPCIA S0
CHECKTYPE NORMAL
WARNING "Sottoconto errato"
ADD RUN BA3 -0 PCI
END
STRING F_DESCRCONTOPCI 50
STRING F_DESCRCONTOPCIA 50
BEGIN
PROMPT 36 12 ""
FLAG "U"
USE PCI KEY 2 SELECT (CODTAB[7,12]!="")
INPUT S0 F_DESCRCONTOPCI
INPUT S0 F_DESCRCONTOPCIA
DISPLAY "Descrizione@50" S0
DISPLAY "Gruppo" CODTAB[1,3]
DISPLAY "Conto" CODTAB[4,6]
DISPLAY "Sottoconto" CODTAB[7,12]
COPY OUTPUT F_SOTTOPCI
COPY OUTPUT F_SOTTOPCIA
CHECKTYPE NORMAL
WARNING "Codice piano conti industriale assente"
ADD RUN BA0 -3 PCI
END
NUMBER F_GRUPPOPCIV 3
BEGIN
PROMPT 1 13 "C. ind. vendite "
FIELD LF_ANAMAG->CONTOINDV[1,3]
CHECKTYPE NORMAL
END
NUMBER F_CONTOPCIV 3
BEGIN
PROMPT 22 13 ""
FIELD LF_ANAMAG->CONTOINDV[4,6]
CHECKTYPE NORMAL
END
NUMBER F_SOTTOPCIV 6
BEGIN
PROMPT 26 13 ""
FIELD LF_ANAMAG->CONTOINDV[7,12]
USE PCI SELECT CODTAB[7,12]!=""
INPUT CODTAB[1,3] F_GRUPPOPCIV
INPUT CODTAB[4,6] F_CONTOPCIV
INPUT CODTAB[7,12] F_SOTTOPCIV
DISPLAY "Gruppo" CODTAB[1,3]
DISPLAY "Conto" CODTAB[4,6]
DISPLAY "Sottoconto" CODTAB[7,12]
DISPLAY "Descrizione@50" S0
OUTPUT F_GRUPPOPCIV CODTAB[1,3]
OUTPUT F_CONTOPCIV CODTAB[4,6]
OUTPUT F_SOTTOPCIV CODTAB[7,12]
OUTPUT F_DESCRCONTOPCIV S0
CHECKTYPE NORMAL
WARNING "Sottoconto errato"
ADD RUN BA3 -0 PCI
END
STRING F_DESCRCONTOPCIV 50
BEGIN
PROMPT 36 13 ""
FLAG "U"
USE PCI KEY 2 SELECT (CODTAB[7,12]!="")
INPUT S0 F_DESCRCONTOPCIV
DISPLAY "Descrizione@50" S0
DISPLAY "Gruppo" CODTAB[1,3]
DISPLAY "Conto" CODTAB[4,6]
DISPLAY "Sottoconto" CODTAB[7,12]
COPY OUTPUT F_SOTTOPCIV
CHECKTYPE NORMAL
WARNING "Codice piano conti industriale assente"
ADD RUN BA0 -3 PCI
END
BOOLEAN F_ARTFIS
BEGIN
PROMPT 1 13 "Articolo fiscale"
PROMPT 1 14 "Articolo fiscale"
FIELD LF_ANAMAG->ARTFIS
MESSAGE TRUE ENABLE,G_RAGGFISC@
MESSAGE FALSE DISABLE,G_RAGGFISC@
@ -550,7 +591,7 @@ END
STRING F_RAGGFIS 5
BEGIN
PROMPT 1 14 "Raggrupp. fiscale "
PROMPT 1 15 "Raggrupp. fiscale "
FIELD LF_ANAMAG->RAGGFIS
FLAGS "UD"
USE RFA
@ -567,13 +608,13 @@ END
STRING F_RAGGFIS1 40
BEGIN
PROMPT 31 14 ""
PROMPT 31 15 ""
FLAG "D"
END
STRING H_CLASSEFIS 2
BEGIN
PROMPT 1 15 ""
PROMPT 1 16 ""
FLAG "HG"
MESSAGE DISABLE,F_CLASSEFIS|COPY,F_CLASSEFIS
MESSAGE EMPTY ENABLE,F_CLASSEFIS
@ -581,7 +622,7 @@ END
STRING F_CLASSEFIS 2
BEGIN
PROMPT 1 15 "Classe fiscale "
PROMPT 1 16 "Classe fiscale "
FIELD LF_ANAMAG->CLASSEFIS
FLAGS "UD"
USE %ASF
@ -597,7 +638,7 @@ END
STRING F_CLASSEFISD 40
BEGIN
PROMPT 31 15 ""
PROMPT 31 16 ""
FLAG "D"
END

@ -273,8 +273,106 @@ error_type TContabil_tsys::write_all(TDocumento& doc, TMovimentoPN_VE & moviment
row << work;
format_num(ZERO, 2, work);
row << work;
}
check_len("Filler", row, 46);
}
if (row.len() != 4248)
{
error_box("Documento %s - lunghezza record %d errata", (const char *)doc.get(DOC_NDOC), row.len());
return generic_error;
}
else
*_output_file << ((const char *) row);
format_num(real(_conf->get("CodDitta")), 5, row);
row << "11" ;
check_len("Dati intra", row, 7, TRUE);
format_signed(ZERO, 14, work);
row << zeros.sleft(7) << spaces.sleft(3) << work;
check_len("Dati intra", row, 24);
for (i = 0 ; i < 20 ; i++)
{
row << spaces.sleft(8);
format_signed(ZERO, 12, work);
row << work << work << spaces.sleft(1) << work << work << work;
check_len("Dati intra", row, 69);
row << spaces.sleft(2) << zeros.sleft(9) << spaces.sleft(4) ;
check_len("Dati intra", row, 15);
}
row << zeros.sleft(12) << zeros.sleft(3) << zeros.sleft(22) << zeros.sleft(4) << spaces.sleft(8) << zeros.sleft(24);
check_len("770", row, 73);
row << spaces.sleft(28) << zeros.sleft(10);
check_len("770", row, 38);
int len = row.len();
TRectype cp = cache().get("%CPG", doc.get("CODPAG"));
TString16 codpag(cp.get("I9"));
if (codpag.empty())
codpag = doc.get("CODPAG");
codpag = codpag.sleft(3).lpad(3);
row << codpag;
work = doc.get("CODABIA").sleft(5).rpad(5);
work << doc.get("CODCABA").sleft(5).rpad(5);
const TRectype & ban = cache().get("BAN", work);
row << work << ban.get("S0").sleft(30).rpad(30) << zeros.sleft(6);
check_len("Riba", row, 49);
TPagamento & pag = doc.pagamento();
const int nrate = pag.n_rate();
format_num(nrate, 2, work);
row << work;
format_signed(head.get_real(MOV_TOTDOC) * molt, 12, work);
row << work;
check_len("Riba", row, 14);
TDate data_inizio = doc.get_date(DOC_DATAINSC);
if (!data_inizio.ok())
data_inizio = doc.get_date(DOC_DATADOC);
pag.set_inizio(data_inizio);
pag.set_total(head.get_real(MOV_TOTDOC), ZERO, ZERO);
for (i = 0 ; i < 12 ; i++)
{
if (i < nrate)
{
format_num(i, 2, work);
row << work;
TDate dsc = pag.data_rata(i);
work = dsc.string(brief);
row << work.left(2);
row << work.mid(3, 2);
row << work.mid(6);
const int tipo = pag.tipo_rata(i);
row << rata_types[tipo];
check_len("Riba", row, 9);
real imprata = pag.importo_rata(i);
format_signed(imprata * molt, 12, work);
if (work[11] == '-')
work[11] == '+';
row << work;
format_signed(doc.bolli(imprata, AUTO_DECIMALS, _netto) * molt, 12, work);
if (work[11] == '-')
work[11] == '+';
row << work;
check_len("Riba", row, 24);
static char tipocf = doc.get_char(DOC_TIPOCF);
bool avere = (tipocf == 'C' && imprata >= ZERO) || (tipocf == 'F' && imprata < ZERO);
row << (avere ? "A" : "D") << "0";
check_len("Riba", row, 2);
}
else
{
row << "000000000";
format_signed(ZERO, 12, work);
row << work << work << " 0";
check_len("Riba", row, 35);
}
}
len = row.len();
row << spaces.left(1943);
if (row.len() != 4248)
{
error_box("Documento %s - lunghezza record %d errata", (const char *)doc.get(DOC_NDOC), row.len());
@ -626,4 +724,4 @@ int ve7100 (int argc, char **argv)
TContabil_tsys_app a;
a.run(argc,argv,"Trasferimento documenti a Team System");
return TRUE;
}
}

@ -68,6 +68,8 @@ Item_09 = "Lingue", "ba3 -0 %LNG", ""
Item_10 = "Divise", "ba3 -0 %VAL", ""
Item_11 = "Cambi giornalieri", "ba3 -0 CAM", "F"
Item_12 = "Esercizi", "cg0 -5 esc", "F"
Item_13 = "Commesse", "ba3 -0 cms", "F"
Item_14 = "Fasi commesse", "ba3 -0 fsc", "F"
[ACQVEN_006]
Caption = "Tabelle magazzino"

@ -281,7 +281,7 @@ public:
const char * field_prezzo() const { return _field_prezzo; }
const TString & descrizione() const { return get("S0"); }
const TString & riferimento() const { return get("S1"); }
const TString & riferimento(const TDocumento & doc) const ;
const TString & imponibile() const { return _imponibile;}
const TString & imposta() const { return _imposta;}
const TString & totale_doc() const { return _totale;}
@ -607,7 +607,8 @@ public:
TCli_for & clifor() const;
TOccasionale & occas() const;
const TAgente & agente() const;
const TString & riferimento() const { return tipo().riferimento(*this); }
virtual TRecord_array& body(int logicnum = 0) const;
virtual TDocumento & operator =(const TDocumento & d) {return copy(d);}
virtual TRectype & operator =(const TRectype & r);
@ -787,6 +788,7 @@ public:
const TString& stdmag() const { return _std_mag; }
const TString& stddep() const { return _std_dep; }
TSheet_field& sheet() const { return *_sheet; }
TCodgiac_livelli& livelli() const { return *_livelli_giac; }
static bool num_handler( TMask_field& f, KEY key );
@ -1129,9 +1131,9 @@ class TContabilizzazione : public TElaborazione // velib04b
*_cco; // tabella categorie contabili
TRelation *_clifo; // relazione dei clienti e fornitori + cfven
TViswin* _viswin; // Visualizzazione log di elaborazione
TBill _conto_errato;
TBill _conto_errato; // Conto da visualizzare in messaggio d'errore
bool _check_prev_cont; // Controllare se il documento precedente e' stato contabilizzato
protected:
// Carica i parametri dalla configurazione
bool load_parameters();

@ -15,7 +15,6 @@
#include "../mg/mglib.h"
#include "../mg/movmag.h"
#include "../pr/prlib.h"
#include "sconti.h"
#include "../sv/svlib01.h"
#include "../db/dblib.h"
@ -395,6 +394,7 @@ bool TTipo_documento::scarica_residuo() const
return get_bool("B4");
}
/////////////////////////////////////////////////////////////
// TRiepilogo IVA
/////////////////////////////////////////////////////////////
@ -444,6 +444,7 @@ public:
HIDDEN TAgenti_cache _agenti;
/*
///////////////////////////////////////////////////////////
// Espressione documento
///////////////////////////////////////////////////////////
@ -878,6 +879,7 @@ TFormula_documento::TFormula_documento(const TRectype& rec)
_expr = new TExpr_documento(expr_string(), et);
}
TFormula_documento::~TFormula_documento()
{
if (_expr) delete _expr;
@ -919,6 +921,7 @@ int TFormula_documento::read(const char* codice, const char * expr, bool numexpr
}
return err;
}
*/
///////////////////////////////////////////////////////////
// Documento per vendite
@ -1804,6 +1807,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
r.put(RDOC_CODCMS, codcms);
if (r.get(RDOC_FASCMS).empty())
r.put(RDOC_FASCMS, fascms);
}
if (is_ordine())
((TDocumento *)this)->put(DOC_DOCEVASO, docevaso); // Tutte le righe evase -> doc evaso
@ -1944,7 +1948,7 @@ TProvvigioni_agente& TDocumento::calc_provvigioni(const bool generata)
TDate datadoc(data());
while (_provv_agente->read(agente, anno,codnum,ndoc) == _islocked) // Legge le provvigioni per questo documento
if (!yesno_box("Dati agente %s in uso da un altro utente. Riprovo?", (const char*) agente))
if (!yesno_box("Dati agente %s in uso da un altro utente. Riprovare?", (const char*) agente))
return *_provv_agente;
const TString16 codval(TDocumento::valuta());
@ -2115,16 +2119,13 @@ TProvvigioni_agente& TDocumento::calc_provvigioni(const bool generata)
bool TDocumento::in_valuta() const
{
const TString& val = valuta();
if (val.empty())
return FALSE;
return val != TCurrency::get_firm_val();
return is_true_value(val);
}
TCodgiac_livelli & TDocumento::livelli() const
{
if (_livelli == NULL) _livelli = new TCodgiac_livelli();
if (_livelli == NULL)
_livelli = new TCodgiac_livelli();
return *_livelli;
}
@ -3151,4 +3152,4 @@ const TRiga_documento* TDocumento::get_row_id(long id) const
return &row;
}
return NULL;
}
}

831
ve/velib03a.cpp Executable file

@ -0,0 +1,831 @@
#include <tabutil.h>
#include "velib.h"
#include "vepriv.h"
///////////////////////////////////////////////////////////
// Tipo documento
///////////////////////////////////////////////////////////
TAssoc_array TTipo_documento::_formule_documento;
TTipo_documento::TTipo_documento(const char* tipodoc)
: TRectype(LF_TABCOM), _tipocf('\0')
{
settab("TIP");
if (tipodoc && *tipodoc)
read(tipodoc);
}
TTipo_documento::TTipo_documento(const TRectype& rec)
: TRectype(rec), _tipocf('\0')
{
read_formule();
}
TTipo_documento::~TTipo_documento()
{
}
int TTipo_documento::read(const char* tipodoc)
{
*this = cache().get("%TIP", tipodoc);
int err = empty() ? _iskeynotfound : NOERR;
_formule.cut(0);
if (err == NOERR)
read_formule();
else
yesnofatal_box("Tipo documento errato: %s", tipodoc);
return err;
}
const char TTipo_documento::tipocf()
{
if (_tipocf == '\0')
{
TFilename pn = profile_name();
pn.ext("ini");
TConfig prof(pn);
_tipocf = prof.get_char("TIPOCF", "MAIN");
}
return _tipocf;
}
const TString & TTipo_documento::riferimento(const TDocumento & doc) const
{
static TString __rif;
__rif = get("S1");
int p = __rif.find('[');
while (p >= 0)
{
const int last = __rif.find(']');
const TString16 field_name(__rif.sub(p + 1, last));
const TFieldref field(field_name, LF_DOC);
if (last < 0)
__rif.cut(p);
else
{
const int len = __rif.len() - last;
for (int i = 0; i <= len; i++)
__rif[p + i] = __rif[last + i + 1];
}
if (field.file() == LF_DOC)
__rif.insert(field.read(doc), p);
else
{
TString16 key(doc.get(DOC_TIPOCF));
key << "|" << doc.get(DOC_CODCF);
const TRectype rec = cache().get(field.file(), key);
__rif.insert(field.read(rec), p);
}
p = __rif.find('[');
}
return __rif;
}
const TString_array& TTipo_documento::keys_descrs()
{
if (_keys_descrs.items() == 0)
{
TString16 var, tiporiga;
TFilename pn(profile_name());
pn.ext("ini");
TConfig prof(pn);
const int numtr = prof.get_int( "NTIPIRIGA", "RIGHE" );
TTipo_riga_documento tr;
_keys_descrs.add("");
_keys_descrs.add("");
TToken_string& k = (TToken_string&)_keys_descrs[0];
TToken_string& d = (TToken_string&)_keys_descrs[1];
if (numtr > 0)
{
for ( int i = 1; i <= numtr; i ++ )
{
var.format("%d", i);
tiporiga = prof.get(var, "RIGHE");
tr.read(tiporiga);
k.add(tr.codice());
d.add(tr.descrizione());
}
}
else
{
TTable tri("%TRI");
for (int err = tri.first(); err == NOERR; err = tri.next())
{
k.add(tri.get("CODTAB"));
d.add(tri.get("S0"));
}
}
}
return _keys_descrs;
}
const TString_array& TTipo_documento::sheet_columns()
{
if (_sheet_columns.items() == 0)
{
TString16 col;
TFilename pn(profile_name());
pn.ext("ini");
TConfig prof(pn, "SHEET");
int ncols = prof.get_int( "NCOLS", "SHEET" );
for (int i = 1; i <= ncols; i++)
{
col.format( "%d", i );
_sheet_columns.add(prof.get(col, "SHEET"));
}
}
return _sheet_columns;
}
const TString_array& TTipo_documento::handlers()
{
if (_handlers.items() == 0)
{
TString16 chiave;
TFilename pn = profile_name();
pn.ext("ini");
TConfig prof(pn);
int numhandler = prof.get_int( "NHANDLER", "HANDLERS" ); // prof
for (int i = 1; i <= numhandler; i ++ )
{
chiave.format("%d", i);
_handlers.add(prof.get(chiave, "HANDLERS"));
}
}
return _handlers;
}
void TTipo_documento::set_defaults(TMask& m)
{
const int items = _defaults.items();
if (items == 0) // Carica lo string_array con i defaults
{
TString16 chiave;
TFilename pn(profile_name());
pn.ext("ini");
TConfig prof(pn, "DEFAULT");
const int ndefaults = prof.get_int("NDEFAULTS");
for(int i = 1; i <= ndefaults; i++)
{
chiave.format("%d", i);
_defaults.add(prof.get(chiave));
}
}
for (int i = 0; i < items; i++) // Setta i campi della maschera
{
TToken_string& tt = (TToken_string&)_defaults[i];
const int ncampo = tt.get_int(0);
m.set(ncampo, tt.get(1), TRUE );
}
}
void TTipo_documento::read_formule()
{
TFilename profile(profile_name());
profile.ext("ini");
TConfig prof(profile, "MAIN");
prof.write_protect(); // Altrimenti non si distrugge!!!
_formule = prof.get("CAMPICALC", "MAIN");
const TString & calcoli = prof.get("CALCOLI", "MAIN");
if (calcoli == "*")
{
TTable frd("%FRD");
for (int err = frd.first(); err == NOERR; err = frd.next())
{
const TString & formula = frd.get("CODTAB");
if (_formule.find(formula) < 0)
_formule.add(formula);
}
}
else
_formule.add(calcoli);
_totale = prof.get("TOTALE", "MAIN");
if (_totale.empty())
_totale = "TOTDOC";
const TRectype& for_tot = cache().get("%FRD", _totale);
if (for_tot.empty())
_formule_documento.add(_totale, new TFormula_documento(_documento, _totale, "IMPONIBILI()+IMPOSTE()"), TRUE);
if (_formule.find(_totale) < 0)
_formule.add(_totale);
_totale_netto = "_";
_totale_netto << _totale;
_basesconto = prof.get("BASESCONTO");
if (_basesconto.empty())
_basesconto = "BASESCONTO";
const TRectype& for_bas = cache().get("%FRD", _basesconto);
if (for_bas.empty())
_formule_documento.add(_basesconto, new TFormula_documento(_documento, _basesconto, "SOMMA(\"IMPONIBILE()\", \"(TIPO() != 'S') && (TIPO() != 'C')\")"), TRUE);
if (_formule.find(_basesconto) < 0)
_formule.add(_basesconto);
_spese = prof.get("SPESE");
if (_spese.empty())
_spese = "SPESE";
const TRectype& for_spe = cache().get("%FRD", _spese);
if (for_spe.empty())
_formule_documento.add(_spese, new TFormula_documento(_documento, _spese, "SOMMA(\"IMPONIBILE()\", \"TIPO() == 'S'\")"), TRUE);
if (_formule.find(_spese) < 0)
_formule.add(_spese);
_totvalres = prof.get("TOTVALRES");
if (_totvalres.empty())
_totvalres = "TOTVALRES";
_totvalore = prof.get("TOTVALORE");
if (_totvalore.empty())
_totvalore = "TOTVALORE";
const TRectype& for_tvr = cache().get("%FRD", _totvalres);
if (for_tvr.empty())
_formule_documento.add(_totvalres, new TFormula_documento(_documento, _totvalres, "VALDOC(0)"), TRUE);
if (_formule.find(_totvalres) < 0)
_formule.add(_totvalres);
const TRectype& for_tva = cache().get("%FRD", _totvalore);
if (for_tva.empty())
_formule_documento.add(_totvalore, new TFormula_documento(_documento, _totvalore, "VALDOC(1)"), TRUE);
if (_formule.find(_totvalore) < 0)
_formule.add(_totvalore);
if (provvigioni())
{
TString80 campo(prof.get("TOTPROVV"));
if (campo.empty())
campo = "TOTPROVV";
const TRectype& frd = cache().get("%FRD", campo);
_totprovv = "_";
_totprovv << campo;
TString80 expr(frd.get("S1"));
if (expr.empty())
expr = "SOMMA(\"PROVV()\")";
_formule_documento.add(_totprovv, new TFormula_documento(_documento, _totprovv, expr, TRUE));
if (_formule.find(campo) < 0)
_formule.add(campo);
_formule.add(_totprovv);
_formule_documento.add(campo, new TFormula_documento(_documento, campo, "TOTPROVV()"), TRUE);
}
_totale_cont = prof.get("TOTALECONT", "MAIN");
_cnt_prezzi = prof.get_bool("CONTROLLO_PREZZI", "MAIN");
_field_prezzo = prof.get("PREZZO", "MAIN");
}
bool TTipo_documento::stato_with_mov_mag(const char stato) const
{
if (!mov_mag())
return FALSE;
const char stato_finale(stato_mov_finale());
if (stato_finale > ' ' && stato > stato_finale)
return FALSE;
const char stato_iniziale(stato_mov_iniziale());
return stato >= stato_iniziale;
}
TFormula_documento * TTipo_documento::succ_formula(bool restart)
{
if (restart)
_formule.restart();
TString formula = _formule.get();
while (formula.not_empty())
{
if (formula.blank())
formula = _formule.get();
else
break;
}
if (formula.not_empty())
{
char *expr = NULL;
const int p = formula.find('=');
if (p > 0)
{
expr = (char *) (const char *) formula + p;
*expr = '\0'; expr++;
}
TFormula_documento * o = (TFormula_documento*)_formule_documento.objptr(formula);
if (o == NULL)
{
o = new TFormula_documento(_documento, formula, expr);
_formule_documento.add(formula, o);
}
return o;
}
return NULL;
}
bool TTipo_documento::scarica_residuo() const
{
if (is_ordine() && !riporta_ordinato())
return TRUE;
return get_bool("B4");
}
///////////////////////////////////////////////////////////
// Espressione documento
///////////////////////////////////////////////////////////
TExpr_documento::TExpr_documento(const char* expression, TTypeexp type,
TDocumento * doc, TRiga_documento * row)
: TExpression(type), _doc(doc), _row(row)
{
if (!set(expression, type))
error_box("Wrong expression : '%s'", expression);
}
int TExpr_documento::parse_user_func(const char * name, int nparms) const
{
if (strcmp(name, "SOMMA") == 0)
return nparms > 0 || nparms < 3 ? _somma : -1;
if (strcmp(name, "BOLLI") == 0)
return nparms > 0 || nparms < 4 ? _bolli : -1;
if (strcmp(name, "_BOLLI") == 0)
return nparms > 0 || nparms < 3 ? _bolli_int : -1;
if (strcmp(name, "SPESEINC") == 0)
return nparms > 0 || nparms < 4 ? _spinc : -1;
if (strcmp(name, "PREZZO") == 0)
return nparms < 4 ? _prezzo : -1;
if (strcmp(name, "IMPORTO") == 0)
return nparms < 4 ? _importo : -1;
if (strcmp(name, "SCONTO") == 0)
return nparms < 2 ? _sconto : -1;
if (strcmp(name, "IMPONIBILE") == 0)
return nparms == 0 ? _imponibile : -1;
if (strcmp(name, "IVA") == 0)
return nparms == 0 ? _iva : -1;
if (strcmp(name, "PROVV") == 0)
return nparms < 2 ? _provv : -1;
if (strcmp(name, "QTARES") == 0)
return nparms < 2 ? _qtares : -1;
if (strcmp(name, "VALDOC") == 0)
return nparms < 3 ? _valdoc : -1;
if (strcmp(name, "TIPO") == 0)
return nparms == 0 ? _tipo : -1;
if (strcmp(name, "IMPONIBILI") == 0)
return nparms < 3 ? _imponibili : -1;
if (strcmp(name, "IMPOSTE") == 0)
return nparms < 3 ? _imposte : -1;
if (strcmp(name, "TOTPROVV") == 0)
return nparms < 3 ? _totprovv : -1;
if (strcmp(name, "PSCONTOT") == 0)
return nparms < 1 ? _pscontot : -1;
if (strcmp(name, "RITENUTA") == 0)
return nparms < 3 ? _ritenuta : -1;
if (strcmp(name, "TIPORIT") == 0)
return nparms < 1 ? _tipo_ritenuta : -1;
return -1;
}
void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & stack, TTypeexp type) const
{
switch (index)
{
case _somma:
{
const TString cond(nparms == 2 ? stack.pop_string() : "STR(1)");
const TString & field = stack.pop_string();
real somma;
if (_doc != NULL)
{
TExpr_documento cond_expr(cond, _strexpr, _doc);
const int cond_nvars = cond_expr.numvar();
TExpr_documento expr(field, _numexpr, _doc);
const int nvars = expr.numvar();
const int nrows = _doc->rows();
for (int i = nrows; i > 0; i--)
{
TRiga_documento & riga = (TRiga_documento &) (*_doc)[i];
for (int j = cond_nvars - 1; j >= 0; j--)
{
const char* s = cond_expr.varname(j);
TFieldref f(s,0);
cond_expr.setvar(j, f.read(riga));
}
cond_expr.set_row(&riga);
if ((bool)cond_expr)
{
for (j = nvars - 1; j >= 0; j--)
{
const char* s = expr.varname(j);
TFieldref f(s,0);
expr.setvar(j, f.read(riga));
}
expr.set_row(&riga);
somma += expr.as_real();
}
}
}
stack.push(somma);
}
break;
case _spinc:
{
int ndec = AUTO_DECIMALS;
bool netto = FALSE;
if (nparms > 2)
ndec = (int) stack.pop_real().integer();
if (nparms > 1)
netto = !stack.pop_real().is_zero();
real & r = stack.peek_real();
if (_doc)
r = _doc->spese_incasso(r, ndec, netto ? _netto : _lordo);
else
r = ZERO;
}
break;
case _bolli:
{
int ndec = AUTO_DECIMALS;
bool netto = FALSE;
if (nparms > 2)
ndec = (int) stack.pop_real().integer();
if (nparms > 1)
netto = !stack.pop_real().is_zero();
real & r = stack.peek_real();
if (_doc)
{
r += _doc->spese_incasso(r, ndec);
r = _doc->bolli(r, ndec, netto ? _netto : _lordo);
}
else
r = ZERO;
}
break;
case _bolli_int:
{
int ndec = AUTO_DECIMALS;
if (nparms > 2)
ndec = (int) stack.pop_real().integer();
real & r = stack.peek_real();
if (_doc)
{
real r1 = _doc->spese_incasso(r, ndec);
r += r1;
r1 += _doc->bolli(r, ndec);
r = r1;
}
else
r = ZERO;
}
break;
case _prezzo:
{
int ndec = AUTO_DECIMALS;
bool lordo = FALSE;
bool scontato = FALSE;
if (nparms > 2)
ndec = (int) stack.pop_real().integer();
if (nparms > 1)
lordo = !stack.pop_real().is_zero();
if (nparms > 0)
scontato = !stack.peek_real().is_zero();
else
stack.push(ZERO);
real & val = stack.peek_real();
if (_row)
val = _row->prezzo(scontato, lordo, ndec);
else
val = ZERO;
}
break;
case _importo:
{
int ndec = AUTO_DECIMALS;
bool lordo = FALSE;
bool scontato = FALSE;
if (nparms > 2)
ndec = (int) stack.pop_real().integer();
if (nparms > 1)
lordo = !stack.pop_real().is_zero();
if (nparms > 0)
scontato = !stack.peek_real().is_zero();
else
stack.push(ZERO);
real & val = stack.peek_real();
if (_row)
val = _row->importo(scontato, lordo, ndec);
else
val = ZERO;
}
break;
case _imponibile:
{
real r;
if (_row)
r = _row->imponibile();
stack.push(r);
}
break;
case _sconto:
{
int ndec = AUTO_DECIMALS;
if (nparms > 0)
ndec = (int) stack.peek_real().integer();
else
stack.push(ZERO);
real & val = stack.peek_real();
if (_row)
{
if (_row->is_sconto())
val = -_row->importo(FALSE, FALSE, ndec);
else
val = _row->importo(FALSE, FALSE, ndec) - _row->importo(TRUE, FALSE, ndec);
}
else
val = ZERO;
}
break;
case _iva:
{
real r;
if (_row)
r = _row->imposta();
stack.push(r);
}
break;
case _provv:
{
int ndec = AUTO_DECIMALS;
if (nparms > 0)
ndec = (int) stack.peek_real().integer();
else
stack.push(ZERO);
real & val = stack.peek_real();
if (_row)
val = _row->provvigione(ndec);
else
val = ZERO;
}
break;
case _qtares:
{
int ndec = AUTO_DECIMALS;
if (nparms > 0)
ndec = (int) stack.peek_real().integer();
else
stack.push(ZERO);
real & val = stack.peek_real();
if (_row)
val = _row->qtaresidua();
else
val = ZERO;
}
break;
case _valdoc:
{
int ndec = AUTO_DECIMALS;
bool totale = TRUE; // Totale o residuo per documento
if (nparms > 1)
ndec = (int)stack.pop_real().integer();
if (nparms > 0)
totale = !stack.peek_real().is_zero();
else
stack.push(ZERO);
real & r = stack.peek_real();
if (_doc)
r = _doc->valore(totale, ndec);
else
r = ZERO;
}
break;
case _tipo:
{
TString s;
if (_row)
s << _row->tipo().tipo();
stack.push(s);
}
break;
case _imponibili:
{
int ndec = AUTO_DECIMALS;
bool spese = FALSE;
if (nparms > 1)
ndec = (int) stack.pop_real().integer();
if (nparms > 0)
spese = !stack.peek_real().is_zero();
else
stack.push(ZERO);
real & val = stack.peek_real();
val = _doc->imponibile(spese, ndec);
}
break;
case _imposte:
{
int ndec = AUTO_DECIMALS;
bool spese = FALSE;
if (nparms > 1)
ndec = (int) stack.pop_real().integer();
if (nparms > 0)
spese = !stack.peek_real().is_zero();
else
stack.push(ZERO);
real & val = stack.peek_real();
val = _doc->imposta(spese, ndec);
}
break;
case _totprovv:
{
int ndec = AUTO_DECIMALS;
if (nparms > 0)
ndec = (int) stack.peek_real().integer();
else
stack.push(ZERO);
real & val = stack.peek_real();
val = _doc->provvigione(ndec);
}
break;
case _pscontot:
{
real val;
TString80 s;
if (_doc && scontoexpr2perc(_doc->get(DOC_SCONTOPERC), FALSE, s, val) && val != ZERO)
val = 1 - val;
stack.push(val);
}
break;
case _ritenuta:
{
int ndec = AUTO_DECIMALS;
bool lordo = FALSE;
if (nparms > 1)
ndec = (int) stack.pop_real().integer();
if (nparms > 0)
lordo = !stack.peek_real().is_zero();
else
stack.push(ZERO);
real & val = stack.peek_real();
const bool spesa = _row->tipo().tipo() == 'S';
if (spesa)
{
const bool tipo_rit = _row->spesa().tipo_ritenuta();
if (tipo_rit != '\0')
{
((TSpesa_prest &)_row->spesa()).zero("S9");
_row->dirty_fields();
val = _row->importo(TRUE, lordo, ndec);
_row->dirty_fields();
((TSpesa_prest &)_row->spesa()).put("S9", (char)tipo_rit);
}
else
val = ZERO;
}
else
val = ZERO;
}
break;
case _tipo_ritenuta:
{
TString s;
if (_row && _row->tipo().tipo() == 'S')
s << _row->spesa().tipo_ritenuta();
stack.push(s);
}
break;
default:
TExpression::evaluate_user_func(index, nparms, stack, type);
break;
}
}
TObject* TExpr_documento::dup() const
{
TExpr_documento* o = new TExpr_documento(*this);
return o;
}
///////////////////////////////////////////////////////////
// Formula documento
///////////////////////////////////////////////////////////
TFormula_documento::TFormula_documento(TTipo_formula tipo, const char* codice, const char * expr, bool numexpr)
: TRectype(LF_TABCOM), _expr(NULL)
{
_tab = tipo == _documento ? "FRD" : "FRR";
settab(_tab);
_tab.insert("%");
if (codice && *codice)
read(codice, expr, numexpr);
}
TFormula_documento::TFormula_documento(const TRectype& rec)
: TRectype(rec), _expr(NULL)
{
_tab = "%";
_tab << rec.get("COD");
const TTypeexp et = expr_type();
_expr = new TExpr_documento(expr_string(), et);
}
TFormula_documento::~TFormula_documento()
{
if (_expr) delete _expr;
}
int TFormula_documento::read(const char* codice, const char * expr, bool numexpr)
{
if (_expr != NULL)
{
delete _expr;
_expr = NULL;
}
put("CODTAB", codice);
int err = NOERR;
if (expr && *expr)
{
put("S1", expr);
put("B0", numexpr ? "X" : "");
}
else
{
TTable t(_tab);
err = TRectype::read(t);
}
if (err == NOERR)
{
const TTypeexp et = expr_type();
const TString e = expr_string(); // Copio espressione proveniente da record
_expr = new TExpr_documento(e, et);
}
else
{
zero();
put("CODTAB", codice);
}
return err;
}

@ -1,15 +1,9 @@
#include "velib.h"
#include <clifo.h>
#ifndef __EXECP_H
#include <execp.h>
#endif
#ifndef __TABUTIL_H
#include <tabutil.h>
#endif
#include "velib.h"
#include <clifo.h>
///////////////////////////////////////////////////////////
// Lista di documenti
@ -568,4 +562,4 @@ TLista_elaborazioni::~TLista_elaborazioni()
{
if (_elab)
delete _elab;
}
}

@ -71,7 +71,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
// Costruisce la stringa di riferimento
TString riferimento(80);
riferimento = doc_in.tipo().riferimento();
riferimento = doc_in.riferimento();
if (riferimento.empty())
riferimento = doc_in.tipo().descrizione();
if (usa_doc_rif() && doc_in.get(DOC_NUMDOCRIF).not_empty())
@ -277,4 +277,4 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
return ok;
}

@ -12,6 +12,7 @@
#include <rmoviva.h>
#include <clifo.h>
#include <cfven.h>
#include <comuni.h>
#include <occas.h>
#include <scadenze.h>
#include <doc.h>
@ -363,8 +364,7 @@ bool TMovimentoPN_VE::movement_ok()
tot_imp.valore() = 0.0;
if (_caus != NULL && _caus->intra())
{
real totdoc = curr().get(MOV_TOTDOC);
const TString& totdoc = curr().get(MOV_TOTDOC);
curr().put(MOV_CORRLIRE, totdoc);
}
}
@ -587,6 +587,17 @@ error_type TIVA_array::add(const TRiga_documento & r, const TBill& conto, const
{
detr = t.detraibilita();
pind = t.perc_indetraibilita();
if (codcms.not_empty())
{
const TRectype & rec = cache().get("CMS", codcms);
if (rec.get("S7") == "NR")
{
detr = 9;
pind = 100.0;
}
}
}
real impres = (impon * pind) / 100.0;
@ -678,6 +689,7 @@ error_type TIVA_array::add(const TRiga_documento & r, const TBill& conto, const
return no_error;
}
TContabilizzazione::TContabilizzazione(const char* cod)
: TElaborazione(cod), _auto_data(FALSE), _nump_iva(2)
{
@ -710,6 +722,7 @@ TContabilizzazione::TContabilizzazione(const char* cod)
_clifo->add(LF_CFVEN,"TIPOCF=TIPOCF|CODCF=CODCF");
_righe_iva = new TIVA_array;
_can_write = TRUE;
_error = no_error;
@ -967,7 +980,7 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
// per reperire il tipo documento ed il tipo movimento
// reperisce la descrizione dal tipo documento e la completa con la data documento ed il
// numero documento
TString80 descr(tipo.riferimento());
TString80 descr(doc.riferimento());
if (descr.empty()) descr = tipo.descrizione();
const TString16 rif = doc.get(DOC_NUMDOCRIF);
@ -2671,14 +2684,14 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
const real cambioi = rm.get_real(MOV_CAMBIOI);
const TRectype& por_rec = cchh.get("%POR", doc.get(DOC_CODPORTO));
const TString16 consegna(por_rec.get("S3")); // condizioni di consegna
const int trasporto = por_rec.get_int("I0"); // tipo di trasporto...
const int natura = doc.tipo().get_int("I2"); // natura della transazione, valida per tutte le righe del documento
const long numreg = rm.get_long(MOV_NUMREG);
TString16 nomenclatura, paeseorig, provincia, paese, codmag, commag;
real totale_righe;
const int trasporto = por_rec.get_int("I0"); // tipo di trasporto...
const char natura = doc.tipo().get("S3")[3]; // natura della transazione, valida per tutte le righe del documento
const long numreg = rm.get_long(MOV_NUMREG);
TString16 nomenclatura, ums, paeseorig, provincia, paese, codmag, commag;
real totale_righe, massanun, unsuppun;
const real cambio = doc.cambio();
const bool is_val = doc.in_valuta();
const bool is_cessione = rm.get(MOV_TIPO)=="C";
const bool is_cessione = rm.get_char(MOV_TIPO)=='C';
paese = _clifo->lfile().get(CLI_STATOPAIV); // Paese del cliente/fornitore...
@ -2692,17 +2705,28 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
const TRiga_documento& rr = doc[i];
if (rr.is_articolo())
{
key = "";
codmag = rr.get(RDOC_CODMAG);
const TRectype& rec_anamag = cchh.get(LF_ANAMAG, rr.get(RDOC_CODARTMAG));
commag = cchh.get("MAG", codmag, "S5"); // Comune del magazzino
nomenclatura = rec_anamag.get(ANAMAG_CLASSDOG);
ums = cchh.get("%NOC", nomenclatura, "S5");
massanun = rec_anamag.get_real(ANAMAG_MASSANUN); // Massa KG
unsuppun = rec_anamag.get_real(ANAMAG_UNSUPPUN); // Massa UMS
paeseorig = !is_cessione ? rec_anamag.get(ANAMAG_PAESE) : EMPTY_STRING; // Campo solo per Acquisti
provincia = is_cessione ? rec_anamag.get(ANAMAG_PROV) : cchh.get(LF_COMUNI, commag, "PROVCOM");
provincia = is_cessione ? rec_anamag.get(ANAMAG_PROV) : cchh.get(LF_COMUNI, commag, COM_PROVCOM);
if (nomenclatura.blank() || unsuppun.is_zero() || massanun.is_zero())
{
TString msg;
msg << "--- L'articolo " << rec_anamag.get(ANAMAG_CODART) << " non riporta tutti i dati necessari per il movimento intracomunitario:";
_viswin->add_line(msg);
_viswin->add_line(" Verificare i seguenti valori: nomenclatura combinata, unità di misura supplementare, massa netta unitaria.");
}
key.cut(0);
key.add(nomenclatura);
key.add(paeseorig);
key.add(provincia);
TRectype* rc = (TRectype*) righe.objptr(key);
if (rc == NULL)
{
@ -2712,7 +2736,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
rc->put("NATURA", natura);
rc->put("CONSEGNA", consegna);
rc->put("TRASPORTO", trasporto);
rc->put("UMS", cchh.get("%NOC", nomenclatura, "S5"));
rc->put("UMS", ums);
rc->put("NOMENCL", nomenclatura);
rc->put("PAESE", paese);
rc->put("PAESEORIG", paeseorig);
@ -2723,16 +2747,16 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
TCurrency_documento imp_val(rr.exist("VALINTRA") ? rr.get_real("VALINTRA") :rr.importo(TRUE, FALSE), doc);
TCurrency_documento imp(imp_val); imp.change_to_firm_val();
imp_val.change_value(codvali, cambioi);
real ammlire = rc->get_real("AMMLIRE");
real ammvaluta = rc->get_real("AMMVALUTA");
real massakg = rc->get_real("MASSAKG");
real massaums = rc->get_real("MASSAUMS");
real valstat = rc->get_real("VALSTAT");
real ammlire = rc->get("AMMLIRE");
real ammvaluta = rc->get("AMMVALUTA");
real massakg = rc->get("MASSAKG");
real massaums = rc->get("MASSAUMS");
real valstat = rc->get("VALSTAT");
ammlire += imp.get_num();
ammvaluta += is_val ? imp_val.get_num() : ZERO;
massakg += qta * rec_anamag.get_real(ANAMAG_MASSANUN);
massaums += qta * rec_anamag.get_real(ANAMAG_UNSUPPUN);
massakg += qta * massanun;
massaums += qta * unsuppun;
if (rr.exist("VALSTAT"))
{
@ -2752,30 +2776,38 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
totale_righe += is_val ? imp_val.get_num() : imp.get_num();
}
}
// Copia il contenuto dell'assoc nel record array
TRectype* rc = new TRectype(LF_RINTRA);
rc->put("NUMREG", numreg);
rintra.set_key(rc);
for(rc = (TRectype*) righe.first_item(); rc != NULL; rc = (TRectype*) righe.succ_item())
rintra.add_row(rc);
// Testa (de coccio...)
intra.zero();
intra.put("NUMREG", numreg);
intra.put("DATAREG", rm.get_date(MOV_DATAREG));
intra.put("TIPOMOV", is_cessione ? 'C' : 'A'); // 'C' cessione 'A' acquisto
intra.put("TIPOCF", rm.get(MOV_TIPO));
intra.put("CODCF", rm.get_long(MOV_CODCF));
intra.put("TOTDOC", rm.get_real(MOV_TOTDOC));
intra.put("TOTDOCIMM", totale_righe);
intra.put("CODVAL", codvali);
intra.put("CAMBIO", cambioi);
if (intra.write() == _isdupkey) // Sebbene non debba succedere, si effettua una riscrittura
intra.rewrite();
// righe!
if (intra.status() != NOERR || rintra.write(TRUE) != NOERR) // Forza la riscrittura se necessario
_error = intra_mov_error;
if (_error == no_error)
{
// Copia il contenuto dell'assoc nel record array
TRectype* rc = new TRectype(LF_RINTRA);
rc->put("NUMREG", numreg);
rintra.set_key(rc);
for(rc = (TRectype*) righe.first_item(); rc != NULL; rc = (TRectype*) righe.succ_item())
rintra.add_row(rc);
// Testa (de coccio...)
intra.zero();
intra.put("NUMREG", numreg);
intra.put("DATAREG", rm.get_date(MOV_DATAREG));
intra.put("TIPOMOV", is_cessione ? 'C' : 'A'); // 'C' cessione 'A' acquisto
intra.put("TIPOCF", rm.get(MOV_TIPO));
intra.put("CODCF", rm.get_long(MOV_CODCF));
intra.put("TOTDOC", rm.get_real(MOV_TOTDOC));
intra.put("TOTDOCIMM", totale_righe);
intra.put("CODVAL", codvali);
intra.put("CAMBIO", cambioi);
if (intra.write() == _isdupkey) // Sebbene non debba succedere, si effettua una riscrittura
intra.rewrite();
if (intra.status() == NOERR)
{
// righe!
if (rintra.write(TRUE) != NOERR) // Forza la riscrittura se necessario
_error = intra_mov_error;
}
else
_error = intra_mov_error;
}
return _error;
}
@ -3114,6 +3146,7 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& /*
if (good() && _can_write)
write_all(doc, *_movimento); // Se la scrittura e' andata ok...
if (!good())
{
display_error(doc);

@ -1,10 +1,11 @@
#include <applicat.h>
#include <automask.h>
#include <defmask.h>
#include <dongle.h>
#include <modaut.h>
#include <sheet.h>
#include <tabutil.h>
#include <utility.h>
#include <tree.h>
#include <postman.h>
#include "velib.h"
@ -20,6 +21,9 @@
#include "sconti.h"
#include "doc.h"
#include "rdoc.h"
TDocumento_mask::TDocumento_mask(const char* td)
: TVariable_mask(), _progs_page(-1), _last_prog(-1),
_condv(NULL)
@ -121,7 +125,6 @@ TDocumento_mask::TDocumento_mask(const char* td)
const bool gesval = cfg.get_bool("GESVAL");
const bool gescambi = cfg.get_bool("GESVALAC");
if (gesval)
{
const bool enable_controeuro = cfg.get_bool("CONTROEURO");
@ -600,7 +603,10 @@ void TDocumento_mask::sconto_testa2mask()
else
cod = " ";
if( ditta.get_bool("SCOKEY", "ve", 3))
cod << format("%-2s", (const char *)ven_rec.get(CFV_CODZONA));
{
TString8 cz; cz.format("%-2s", (const char*)ven_rec.get(CFV_CODZONA));
cod << cz;
}
else
cod << " ";
if( ditta.get_bool("SCOKEY", "ve", 4))
@ -723,8 +729,7 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga)
for( int i = 1; i <= numhandler; i ++ )
{
TString16 chiave;
chiave.format( "%d", i );
TString8 chiave; chiave.format("%d", i );
TToken_string riga = pro.get( chiave, "HANDLERS" );
row_set_handler( *m, riga.get_int( 0 ), riga.get_int( 1 ) );
}
@ -816,6 +821,7 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga)
if (close_filter) filter << ')';
browse.set_filter(filter);
}
m->set_handler(DLG_USER, link_handler);
}
}
@ -978,8 +984,10 @@ bool TDocumento_mask::ss_notify( TSheet_field& ss, int r, KEY key )
else
if ( key == K_TAB ) // ingresso nella riga
{
set_curr_um(ss.sheet_mask());
TMask & sm = ss.sheet_mask();
set_curr_um(sm);
m.update_giacenza();
sm.enable(DLG_USER, doc[r + 1].get(RDOC_DACODNUM).not_empty());
}
return TRUE;
@ -1091,42 +1099,369 @@ bool TDocumento_mask::clifo_handler( TMask_field& f, KEY key )
return TRUE;
}
///////////////////////////////////////////////////////////
// TDocument_tree
///////////////////////////////////////////////////////////
class TDocument_tree : public TBidirectional_tree
{
TRelation* _relation;
TCursor* _cursor;
TToken_string _curnode;
protected:
virtual void node2id(const TObject* node, TString& id) const;
bool on_head() const;
bool on_row() const;
public:
virtual bool goto_root();
virtual bool goto_firstson();
virtual bool goto_rbrother();
virtual bool goto_node(const TString &id);
virtual bool has_son() const;
virtual bool has_rbrother() const;
virtual bool has_father() const;
virtual bool has_lbrother() const;
virtual bool goto_father();
virtual bool goto_lbrother();
virtual TObject* curr_node() const { return &(TToken_string&)_curnode; }
virtual bool get_description(TString& str) const;
const TRectype& testata() const;
const TRectype& riga() const;
const TRectype& record() const;
void set_cursor(char tipocf, long codcf, int anno, const char* filter, FILTERFUNCTION ff = NULL);
TCursor* get_cursor() { return _cursor; }
TDocument_tree();
~TDocument_tree();
};
const TRectype& TDocument_tree::testata() const
{
TDocument_tree& me = (TDocument_tree&)*this;
const TRecnotype pos = me._curnode.get_long(0);
if (_cursor->pos() != pos)
*me._cursor = pos;
return _relation->curr();
}
const TRectype& TDocument_tree::riga() const
{
TDocument_tree& me = (TDocument_tree&)*this;
const TRectype& rec = _relation->curr(LF_RIGHEDOC);
const TRecnotype pos = me._curnode.get_long(0);
const int nriga = me._curnode.get_int(1);
if (_cursor->pos() != pos || rec.get_int(RDOC_NRIGA) > nriga)
*me._cursor = pos;
for (int i = rec.get_int(RDOC_NRIGA); i < nriga; i++)
_relation->next_match(LF_RIGHEDOC);
return rec;
}
const TRectype& TDocument_tree::record() const
{
return on_row() ? riga() : testata();
}
void TDocument_tree::node2id(const TObject* node, TString& id) const
{
id = *(TString*)node;
}
bool TDocument_tree::on_head() const
{
TDocument_tree& me = (TDocument_tree&)*this;
return me._curnode.get_int(1) == 0;
}
bool TDocument_tree::on_row() const
{
TDocument_tree& me = (TDocument_tree&)*this;
return me._curnode.get_int(1) > 0;
}
bool TDocument_tree::goto_root()
{
bool ok = _cursor != NULL && _cursor->items()>0;
_curnode = ok ? "0" : "";
return ok;
}
bool TDocument_tree::goto_firstson()
{
bool ok = has_son();
if (ok)
_curnode.add(1,1);
return ok;
}
bool TDocument_tree::goto_rbrother()
{
bool ok = has_rbrother();
if (ok)
{
if (on_head())
{
const long pos = _curnode.get_long(0);
_curnode.add(pos+1, 0);
}
else
{
const int nriga = _curnode.get_int(1);
_curnode.add(nriga+1, 1);
}
}
return ok;
}
bool TDocument_tree::goto_node(const TString &id)
{
_curnode = id;
return TRUE;
}
bool TDocument_tree::has_son() const
{
bool ok = on_head();
if (ok)
{
testata();
const TRectype& rec = _relation->curr(LF_RIGHEDOC);
ok = rec.get_int(RDOC_NRIGA) > 0;
}
return ok;
}
bool TDocument_tree::has_rbrother() const
{
bool ok = FALSE;
if (on_head())
{
TDocument_tree& me = (TDocument_tree&)*this;
const long pos = me._curnode.get_long(0);
ok = pos < _cursor->items()-1;
}
else
{
riga(); // Posizionati sulla riga corrente
ok = _relation->next_match(LF_RIGHEDOC);
}
return ok;
}
bool TDocument_tree::has_father() const
{
return on_row();
}
bool TDocument_tree::has_lbrother() const
{
bool ok = FALSE;
TDocument_tree& me = (TDocument_tree&)*this;
if (on_head())
{
const long pos = me._curnode.get_long(0);
ok = pos > 0L;
}
else
{
const int nriga = me._curnode.get_int(1);
ok = nriga > 1;
}
return ok;
}
bool TDocument_tree::goto_father()
{
bool ok = on_row();
if (ok)
_curnode.add(0, 1);
return ok;
}
bool TDocument_tree::goto_lbrother()
{
bool ok = has_lbrother();
if (ok)
{
if (on_head())
{
const long pos = _curnode.get_long(0);
_curnode.add(pos-1, 0);
}
else
{
const int nriga = _curnode.get_int(1);
_curnode.add(nriga-1, 1);
}
}
return ok;
}
bool TDocument_tree::get_description(TString& str) const
{
TDocument_tree& me = (TDocument_tree&)*this;
if (on_head())
{
const TRectype& rec = testata();
TString16 tmp;
str = rec.get(DOC_ANNO);
str << ' ' << rec.get(DOC_CODNUM);
tmp.format("%6ld", rec.get_long(DOC_NDOC));
str << ' ' << tmp << ' ' << rec.get(DOC_DATADOC);
const char tipocf = rec.get_char(DOC_TIPOCF);
const long codcf = rec.get_long(DOC_CODCF);
tmp.format(" %c%6ld ", tipocf, codcf);
str << tmp;
tmp.format("%c|%6ld", tipocf, codcf);
str << cache().get(LF_CLIFO, tmp, CLI_RAGSOC);
}
else
{
const TRectype& rec = riga();
str.format("%4d: ", rec.get_int(RDOC_NRIGA));
const TString80 codart = rec.get(RDOC_CODART);
if (codart.not_empty())
{
str << rec.get_real(RDOC_QTA).string("#.###.##@,@@@@@");
str << ' ' << codart << ' ';
}
str << rec.get(RDOC_DESCR);
}
return TRUE;
}
void TDocument_tree::set_cursor(char tipocf, long codcf, int anno, const char* filter, FILTERFUNCTION ff)
{
if (_relation == NULL)
{
_relation = new TRelation(LF_DOC);
_relation->add(LF_RIGHEDOC, "PROVV==PROVV|ANNO==ANNO|CODNUM==CODNUM|NDOC==NDOC");
}
if (_cursor == NULL)
{
_cursor = new TCursor(_relation, "", 2);
}
TRectype& rec = _relation->curr();
rec.zero();
rec.put(DOC_TIPOCF, tipocf);
rec.put(DOC_CODCF, codcf);
rec.put(DOC_PROVV, "D");
rec.put(DOC_ANNO, anno);
_cursor->freeze(FALSE);
_cursor->setfilter(filter);
_cursor->setregion(rec, rec);
const long items = _cursor->items();
_cursor->freeze(TRUE);
goto_root();
if (items <= 3)
expand_all();
}
TDocument_tree::TDocument_tree()
: _relation(NULL), _cursor(NULL)
{
}
TDocument_tree::~TDocument_tree()
{
if (_cursor)
delete _cursor;
if (_relation)
delete _relation;
}
///////////////////////////////////////////////////////////
// TElabora_mask
///////////////////////////////////////////////////////////
class TElabora_mask : public TMask
class TElabora_mask : public TAutomask
{
TDocumento_mask* _main;
TLista_elaborazioni _elab;
TDocument_tree _tree;
// @access Protected Member
protected:
TString _art_filter, _liv_filter;
static TElabora_mask* _myself;
static bool article_filter(const TRelation* rel);
void add_valuta_filter(TString& filter) const;
void docrif_search();
void update_list();
void update_ndoc_filter(bool is_tipo_elaborazione = FALSE);
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
// @access Public Member
public:
void update_list();
void update_ndoc_filter(bool is_tipo_elaborazione = FALSE);
bool elabora();
TElaborazione * curr_elab();
static bool tipo_elaborazione_handler( TMask_field& f, KEY key );
static bool tipo_documento_handler( TMask_field& f, KEY key );
static bool codnum_handler( TMask_field& f, KEY key );
static bool codart_handler( TMask_field& f, KEY key );
static bool list_elab_handler( TMask_field& f, KEY key );
static bool docrif_handler( TMask_field& f, KEY key );
TElaborazione* curr_elab();
// @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk)
TElabora_mask(TDocumento_mask * main_mask);
TElabora_mask(TDocumento_mask& main_mask);
// @cmember Distruttore
virtual ~TElabora_mask() {}
};
TElabora_mask* TElabora_mask::_myself = NULL;
bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_CODART:
case F_CODNUM_ELAB:
if (e == fe_modify)
update_ndoc_filter();
break;
case F_TYPE:
if (e == fe_init || e == fe_modify)
{
update_list();
update_ndoc_filter(TRUE);
}
break;
case F_STATODOC_ELAB:
case F_TIPODOC_ELAB:
if (e == fe_modify)
{
update_list();
update_ndoc_filter();
}
break;
case F_ELAB:
if (e == fe_modify)
update_ndoc_filter(TRUE);
break;
case F_NUMDOCRIF_ELAB:
if (e == fe_button)
docrif_search();
break;
case F_ROWS:
if (e == fe_modify && is_running())
{
TCursor* c = _tree.get_cursor();
if (c != NULL && c->items() > 0)
{
const TRectype& head = _tree.testata();
set(F_DATADOC_ELAB, head.get(DOC_DATADOC)); // Anch'essa nella chiave 2!
set(F_NDOC_ELAB, head.get(DOC_NDOC));
}
}
break;
default:
break;
}
return TRUE;
}
void TElabora_mask::update_list()
{
TString_array elabs;
@ -1148,7 +1483,6 @@ void TElabora_mask::update_list()
set(F_UPDATE_HEADER, agg_test ? "X" : "");
const bool ok = items > 0;
enable(DLG_OK, ok);
enable(F_ELAB, ok);
@ -1156,12 +1490,12 @@ void TElabora_mask::update_list()
TToken_string codes;
TToken_string descrs;
if (ok)
for (int i = 0; i < items; i++)
{
codes.add(format("%s", (const char *)_elab[elabs.row(i)].codice()));
descrs.add((const char *)_elab[elabs.row(i)].descrizione());
}
for (int i = 0; i < items; i++)
{
const TElaborazione& e = _elab[elabs.row(i)];
codes.add(e.codice());
descrs.add(e.descrizione());
}
if (codes != f.get_codes())
f.replace_items(codes, descrs);
const TElaborazione * e = curr_elab();
@ -1174,16 +1508,13 @@ void TElabora_mask::update_list()
}
}
/* TLista_elaborazioni TElabora_mask::_elab; */
bool TElabora_mask::elabora()
{
bool update_mask = FALSE;
TLista_documenti in;
TLista_documenti out;
TDocumento & app_doc = ((TDocumento_mask *)_main)->doc();
TDocumento& app_doc = ((TDocumento_mask *)_main)->doc();
long numdoc = get_long(F_NDOC_ELAB);
bool update_header = get_bool(F_UPDATE_HEADER);
@ -1278,7 +1609,7 @@ bool TElabora_mask::elabora()
set(F_CODNUM_ELAB, num_in);
set(F_NDOC_ELAB, "");
set(F_NUMDOCRIF, "");
set(F_NUMDOCRIF_ELAB, "");
}
if (e->tipo() == _consegna_ordini)
{
@ -1338,16 +1669,37 @@ bool TElabora_mask::article_filter(const TRelation* rel)
return yes;
}
void TElabora_mask::add_valuta_filter(TString& filter) const
{
TString16 valuta = get(F_CODVAL_ELAB);
if (::is_firm_value(valuta))
{
filter << "((CODVAL==\"" << valuta << "\")";
if (valuta.empty())
valuta = TCurrency::get_firm_val();
else
valuta.cut(0);
filter << "||(CODVAL==\"" << valuta << "\"))";
}
else
filter << "(CODVAL==\"" << valuta << "\")";
}
void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
{
TString filter(80);
filter.format("(TIPOCF==\"%s\")&&(CODCF==\"%s\")&&(CODVAL==\"%s\")", (const char *)get(F_TIPOCF_ELAB), (const char *)get(F_CODCF_ELAB), (const char *)get(F_CODVAL_ELAB));
// Ora è nella maschera
// filter.format("(TIPOCF==\"%s\")&&(CODCF==\"%s\")&&", (const char *)get(F_TIPOCF_ELAB), (const char *)get(F_CODCF_ELAB));
add_valuta_filter(filter);
const TString16 tipo(get(F_TIPODOC_ELAB));
TElaborazione * e = curr_elab();
const bool to_elab = get_bool(F_TYPE);
if (!field(F_CODNUM_ELAB).empty())
filter << format("&&(CODNUM==\"%s\")", (const char*)get(F_CODNUM_ELAB));
{
TString80 cn; cn.format("&&(CODNUM==\"%s\")", (const char*)get(F_CODNUM_ELAB));
filter << cn;
}
enable(-1, to_elab /*&& e != NULL*/);
@ -1357,16 +1709,16 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
{
if (to_elab)
{
TString8 num_in(e->codice_numerazione_iniziale());
// TString8 tipo_in1;
// char stato_in1;
const TString8 num_in = e->codice_numerazione_iniziale();
if (tipo.not_empty())
{
filter << format("&&(TIPODOC==\"%s\")", (const char *)tipo);
const char* stato = get(F_STATODOC_ELAB);
if (stato != 0)
filter << format("&&(STATO==\"%s\")", stato);
{
TString80 td; td.format("&&(TIPODOC==\"%s\")", (const char *)tipo);
filter << td;
const TString& stato = get(F_STATODOC_ELAB);
if (stato.not_empty())
{
filter << "&&(STATO==\"" << stato << "\")";
}
else
{
bool almost_one = FALSE;
@ -1384,17 +1736,16 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
filter << "&&(";
almost_one = TRUE;
filter << format("(STATO==\"%c\")", stato_in);
filter << "(STATO==\"" << stato_in << "\")";
}
if (i==0)
{
// tipo_in1=tipo_in;
// stato_in1=stato_in;
set(F_CODNUM_ELAB, num_in);
field(F_CODNUM_ELAB).check();
set(F_TIPODOC_ELAB , tipo_in);
field(F_TIPODOC_ELAB).check();
set(F_STATODOC_ELAB, format("%c",stato_in));
TString8 si; si << stato_in;
set(F_STATODOC_ELAB, si);
field(F_STATODOC_ELAB).check();
}
}
@ -1417,22 +1768,19 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
else
filter << "&&(";
almost_one = TRUE;
filter << format("((TIPODOC==\"%s\")", (const char *)tipo_in);
filter << "((TIPODOC==\"" << tipo_in << "\")";
const char stato_in = e->stato_iniziale(i);
if (stato_in > '0')
filter << format("&&(STATO==\"%c\")", stato_in);
const char stato_in[2] = { e->stato_iniziale(i), '\0' };
if (stato_in[0] > '0')
filter << "&&(STATO==\"" << stato_in << "\")";
filter << ')';
if (i==0)
{
// tipo_in1=tipo_in;
// stato_in1=stato_in;
set(F_CODNUM_ELAB, num_in);
field(F_CODNUM_ELAB).check();
set(F_TIPODOC_ELAB , tipo_in);
field(F_TIPODOC_ELAB).check();
set(F_STATODOC_ELAB, format("%c",stato_in));
set(F_STATODOC_ELAB, stato_in);
field(F_STATODOC_ELAB).check();
}
}
@ -1442,20 +1790,20 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
}
}
else
{
const TString16 tipo_fin(e->tipo_finale());
const TString16 stato_fin(e->stato_finale());
filter << "&&";
if (stato_fin != "0")
filter << '(';
filter << "(TIPODOC==\"" << tipo_fin << "\")";
if (stato_fin != "0")
filter << "&&(STATO==\"" << stato_fin << "\"))";
if (is_tipo_elaborazione)
{
const TString16 tipo_fin(e->tipo_finale());
const TString16 stato_fin(e->stato_finale());
filter << "&&";
if (stato_fin != "0")
filter << '(';
filter << format("(TIPODOC==\"%s\")", (const char *)tipo_fin);
if (stato_fin != "0")
filter << format("&&(STATO==\"%s\"))", (const char *)stato_fin);
const TString16 num_fin(e->codice_numerazione_finale());
set(F_CODNUM_ELAB, num_fin);
field(F_CODNUM_ELAB).check();
set(F_TIPODOC_ELAB, tipo_fin);
@ -1463,6 +1811,7 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
set(F_STATODOC_ELAB, stato_fin);
field(F_STATODOC_ELAB).check();
}
}
}
else
reset(-1);
@ -1471,126 +1820,77 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
brew.set_filter(filter);
_art_filter = get(F_CODART);
TCursor* cursor = brew.cursor();
if (_art_filter.not_empty() && to_elab)
brew.cursor()->set_filterfunction(article_filter);
cursor->set_filterfunction(article_filter);
else
brew.cursor()->set_filterfunction(NULL);
cursor->set_filterfunction(NULL);
TTree_field& tf = tfield(F_ROWS);
if (tipo.not_empty())
{
tf.set_tree(&_tree);
if (_art_filter.not_empty() && to_elab)
_tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter, article_filter);
else
_tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter);
}
else
tf.set_tree(NULL);
tf.win().force_update();
}
bool TElabora_mask::tipo_elaborazione_handler( TMask_field& f, KEY key )
{
if (key == K_SPACE)
{
TElabora_mask & m = (TElabora_mask &) f.mask();
m.update_list();
m.update_ndoc_filter(TRUE);
}
return TRUE;
}
bool TElabora_mask::tipo_documento_handler( TMask_field& f, KEY key )
{
if (key != K_ENTER && f.to_check(key, TRUE))
{
TElabora_mask & m = (TElabora_mask &) f.mask();
m.update_list();
m.update_ndoc_filter();
}
return TRUE;
}
bool TElabora_mask::codnum_handler( TMask_field& f, KEY key )
{
if (key != K_ENTER && f.to_check(key, TRUE))
{
TElabora_mask & m = (TElabora_mask &) f.mask();
m.update_ndoc_filter();
}
return TRUE;
}
bool TElabora_mask::codart_handler( TMask_field& f, KEY key )
{
if (key != K_ENTER && f.to_check(key, TRUE))
{
TElabora_mask & m = (TElabora_mask &) f.mask();
m.update_ndoc_filter();
}
return TRUE;
}
bool TElabora_mask::list_elab_handler( TMask_field& f, KEY key )
{
if (key == K_SPACE)
{
TElabora_mask & m = (TElabora_mask &) f.mask();
m.update_ndoc_filter(TRUE);
}
return TRUE;
}
bool TElabora_mask::docrif_handler( TMask_field& f, KEY key )
void TElabora_mask::docrif_search()
{
if (key == K_F9)
{
TElabora_mask& m = (TElabora_mask&)f.mask();
TRectype filtrec(LF_DOC);
filtrec.put(DOC_TIPOCF, m.get(F_TIPOCF_ELAB));
filtrec.put(DOC_CODCF, m.get(F_CODCF_ELAB));
filtrec.put(DOC_PROVV, m.get(F_PROVV_ELAB));
filtrec.put(DOC_ANNO, m.get(F_ANNO_ELAB));
TRectype filtrec(LF_DOC);
filtrec.put(DOC_TIPOCF, get(F_TIPOCF_ELAB));
filtrec.put(DOC_CODCF, get(F_CODCF_ELAB));
filtrec.put(DOC_PROVV, get(F_PROVV_ELAB));
filtrec.put(DOC_ANNO, get(F_ANNO_ELAB));
TRelation rel(LF_DOC);
rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec);
TString80 flt;
if (!m.field(F_CODNUM_ELAB).empty())
flt << format("(CODNUM==\"%s\")&&", (const char*)m.get(F_CODNUM_ELAB));
if (!m.field(F_TIPODOC_ELAB).empty())
flt << format("(TIPODOC==\"%s\")&&", (const char*)m.get(F_TIPODOC_ELAB));
flt << "(STATO==\"" << m.get(F_STATODOC_ELAB) << "\")";
if (!f.empty())
flt << "&&(NUMDOCRIF==\"" << f.get() << "\")";
cur.setfilter(flt);
TToken_string fields = "ANNO|CODNUM|TIPODOC|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|20->RAGSOC";
TCursor_sheet sheet(&cur, fields,
"Documento di riferimento",
"Anno|Num.|Tipo|Docum.Rif.|Data@10|Docum.Rif.1|Docum.Rif.2|Docum.Rif.3|Documento|Ragione Sociale@50",
0, 1);
if (sheet.run() == K_ENTER)
{
const int nrifpos = fields.get_pos("NUMDOCRIF");
const TString16 nrif = sheet.row(-1).get(nrifpos);
f.set(nrif);
const int ndocpos = fields.get_pos("NDOC");
const TString16 ndoc = sheet.row(-1).get(ndocpos);
m.set(F_NDOC_ELAB, ndoc);
const int codnumpos = fields.get_pos("CODNUM");
const TString16 codnum = sheet.row(-1).get(codnumpos);
m.set(F_CODNUM_ELAB, codnum, TRUE);
}
TRelation rel(LF_DOC);
rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec);
TString flt(256);
if (!field(F_CODNUM_ELAB).empty())
flt << "(CODNUM==\"" << get(F_CODNUM_ELAB) << "\")&&";
if (!field(F_TIPODOC_ELAB).empty())
flt << "(TIPODOC==\"" << get(F_TIPODOC_ELAB) << "\")&&";
if (!field(F_STATODOC_ELAB).empty())
flt << "(STATO==\"" << get(F_STATODOC_ELAB) << "\")&&";
add_valuta_filter(flt); flt << "&&";
TEdit_field& f = efield(F_NUMDOCRIF_ELAB);
if (!f.empty())
flt << "(NUMDOCRIF==\"" << f.get() << "\")&&";
flt.rtrim(2); // Togli gli ultimi &&
cur.setfilter(flt);
TToken_string fields = "ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|20->RAGSOC";
TCursor_sheet sheet(&cur, fields,
"Documento di riferimento",
"Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Docum.Rif.1|Docum.Rif.2|Docum.Rif.3|Documento|Ragione Sociale@50",
0, 1);
if (sheet.run() == K_ENTER)
{
const int nrifpos = fields.get_pos("NUMDOCRIF");
const TString16 nrif = sheet.row(-1).get(nrifpos);
f.set(nrif);
const int ndocpos = fields.get_pos("NDOC");
const TString16 ndoc = sheet.row(-1).get(ndocpos);
set(F_NDOC_ELAB, ndoc);
const int codnumpos = fields.get_pos("CODNUM");
const TString16 codnum = sheet.row(-1).get(codnumpos);
set(F_CODNUM_ELAB, codnum, TRUE);
}
return TRUE;
}
TElabora_mask::TElabora_mask(TDocumento_mask * main_mask)
: TMask("ve0100b"), _main(main_mask)
TElabora_mask::TElabora_mask(TDocumento_mask& main_mask)
: TAutomask("ve0100b"), _main(&main_mask)
{
_myself = this;
set_handler(F_TYPE, tipo_elaborazione_handler);
set_handler(F_TIPODOC_ELAB, tipo_documento_handler);
set_handler(F_STATODOC_ELAB, tipo_documento_handler);
set_handler(F_CODNUM_ELAB, codnum_handler);
set_handler(F_CODART, codart_handler);
set_handler(F_ELAB, list_elab_handler);
set_handler(F_NUMDOCRIF, docrif_handler);
set(F_ANNO_ELAB, _main->get(F_ANNO));
set(F_TIPOCF_ELAB, _main->get(F_TIPOCF));
set(F_CODCF_ELAB, _main->get(F_CODCF));
@ -1605,7 +1905,7 @@ bool TDocumento_mask::elabora_handler( TMask_field& f, KEY key )
m.update_progs();
if (m.check_fields()) // Check values
{
TElabora_mask* selection = new TElabora_mask(&m); // No woman no stack
TElabora_mask* selection = new TElabora_mask(m); // No woman no stack
bool update_mask = FALSE;
const char stato_iniziale = m.doc().stato();
@ -1645,6 +1945,10 @@ bool TDocumento_mask::elabora_handler( TMask_field& f, KEY key )
return TRUE;
}
///////////////////////////////////////////////////////////
// TDocumento_mask
///////////////////////////////////////////////////////////
bool TDocumento_mask::print_handler( TMask_field& f, KEY key )
{
if (key == K_SPACE)
@ -1789,22 +2093,6 @@ bool TDocumento_mask::codcamp_handler( TMask_field& f, KEY key )
return TRUE;
}
/*
bool TDocumento_mask::controeuro_handler( TMask_field& f, KEY key )
{
TMask & m = f.mask();
if (m.is_running() && key == K_SPACE)
{
const real cambio_euro = TCurrency::get_euro_change();
const real val = cambio_euro / m.get_real(F_CAMBIO);
m.set(F_CAMBIO, val);
}
return TRUE;
}
*/
bool TDocumento_mask::codval_handler( TMask_field& f, KEY key )
{
if (key == K_TAB && f.focusdirty())

@ -1205,4 +1205,19 @@ bool TDocumento_mask::datadocrif_handler(TMask_field& f, KEY key)
}
}
return TRUE;
}
}
bool link_handler( TMask_field& f, KEY key )
{
if (key == K_SPACE)
{
const TSheet_field & sf = *f.mask().get_sheet();
const TDocumento_mask & m = (const TDocumento_mask & )sf.mask();
const TDocumento & d = m.doc();
const int nrow = sf.selected() + 1;
const TRiga_documento & r = d[nrow];
r.edit(LF_DOC, "DAPROVV|DAANNO|DACODNUM|DANDOC");
}
return TRUE;
}

@ -24,5 +24,6 @@ bool qta_handler(TMask_field& f, KEY key);
bool qta_evasa_handler(TMask_field& f, KEY key);
bool causmag_handler(TMask_field& f, KEY key);
bool pricerange_handler(TMask_field& f, KEY key );
bool link_handler( TMask_field& f, KEY key );
bool numdocrif_hndl(TMask_field& field, KEY key);