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:
parent
929e9ececd
commit
ac4d0ed9e4
ba
ce
cg
cg0500.cppcg0500.hcg0500b.umlcg1500a.umlcg2100.cppcg2100.hcg2102.cppcg2102.hcg2103.cppcg3200.cppcg4305.cppcglib01.cppcglib02.cppcglib02.hcglib04.cppcgprassi.men
in
bastint.umlbastird.umlbatbint.rptbatbint.umlbatbird.hbatbird.rptbatbird.umlf134.trrf135.trrin0.cppin0100.cppin0200.cppin0200a.umlin0500.cppin0500a.umlin0600.cppin0600a.umlin0700.cppin0700a.hin0700a.umlinlib01.cppinlib01.h
include
isam.cppisam.hmask.cppmask.hmsksheet.cppos_win16.cppprefix.cpprelapp.cppsheet.cpptabutil.cpptabutil.hvalidate.cpp
m770
ve
@ -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
|
||||
|
16
in/batbird.h
16
in/batbird.h
@ -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]
|
||||
|
10
in/in0.cpp
10
in/in0.cpp
@ -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)
|
||||
|
109
in/in0200.cpp
109
in/in0200.cpp
@ -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;
|
||||
|
||||
|
188
include/isam.cpp
188
include/isam.cpp
@ -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
|
||||
|
180
m770/770200.cpp
180
m770/770200.cpp
@ -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");
|
||||
|
12
ve/batbprs.h
12
ve/batbprs.h
@ -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
|
||||
|
133
ve/batbprs.uml
133
ve/batbprs.uml
@ -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);
|
||||
}
|
||||
|
12
ve/ve2400.h
12
ve/ve2400.h
@ -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
|
||||
|
107
ve/ve2400.uml
107
ve/ve2400.uml
@ -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
|
||||
|
||||
|
102
ve/ve7100.cpp
102
ve/ve7100.cpp
@ -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"
|
||||
|
10
ve/velib.h
10
ve/velib.h
@ -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
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
123
ve/velib04b.cpp
123
ve/velib04b.cpp
@ -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);
|
||||
|
662
ve/velib06.cpp
662
ve/velib06.cpp
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user