Patch level : 10.0 225

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Rportata la versione 3.2 patch 1314


git-svn-id: svn://10.65.10.50/trunk@18269 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2009-02-14 17:13:09 +00:00
parent 7b4821f61e
commit 8700805497
109 changed files with 8885 additions and 1400 deletions

@ -17,6 +17,104 @@
#include "ba8301.h"
#include <bagn003.h>
///////////////////////////////////////////////////////////
// TPrinter_font_mask
///////////////////////////////////////////////////////////
class TPrinter_font_mask : public TAutomask
{
XVT_FNTID _font;
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TPrinter_font_mask(XVT_FNTID font);
};
bool TPrinter_font_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
PRINT_RCD* rcd = printer().get_printrcd();
if (rcd == NULL)
return false;
switch (o.dlg())
{
case 101:
if (e == fe_init)
{
o.set(printer().printername());
}
break;
case 102:
if (e == fe_init)
{
const int MAX_FAMILIES = 256;
char* family[MAX_FAMILIES];
const int num_families = (int)xvt_fmap_get_families(rcd, family, MAX_FAMILIES);
TToken_string fn(num_families * 16);
for (int i = 0; i < num_families; i++)
{
fn.add(family[i]);
xvt_mem_free(family[i]);
}
TList_field& fonts = (TList_field&)o;
fonts.replace_items(fn, fn);
TString80 buf;
xvt_font_get_family(_font, buf.get_buffer(), buf.size());
fonts.set(buf);
}
if (e == fe_init || e == fe_modify)
{
TList_field& lst = (TList_field&)field(103);
TString4 old_size = lst.get();
if (old_size.empty())
old_size << xvt_font_get_size(_font);
const int MAXSIZES = 8;
long sizes[MAXSIZES];
BOOLEAN scalable = FALSE;
TString80 str = o.get();
const int num_sizes = (int)xvt_fmap_get_family_sizes(rcd, str.get_buffer(), sizes, &scalable, MAXSIZES);
TToken_string pn1;
if (scalable)
{
for (int i = 4; i < 96; i++)
pn1.add(i);
}
else
{
if (num_sizes > 0)
{
for (int i = 0; i < num_sizes; i++)
pn1.add(sizes[i]);
}
else
pn1.add(printer().get_char_size()); // semper better than nothing
}
lst.replace_items(pn1, pn1);
lst.set(old_size);
lst.enable(pn1.items() > 1);
}
break;
default:
break;
}
return true;
}
TPrinter_font_mask::TPrinter_font_mask(XVT_FNTID font)
: TAutomask(TR("Selezione Font nativo"), 1, 68, 5), _font(font)
{
add_string(101, 0, PR("Stampante "), 1, 1, 256, "LG", 50);
add_list(102, 0, PR("Nome "), 1, 2, 50, "", "", "");
add_list(103, 0, PR("Dimensioni "), 1, 3, 2, "", "", "");
add_button(DLG_OK, 0, "", -12, -1, 10, 2);
add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2);
set_handlers();
}
///////////////////////////////////////////////////////////
// TReport_sheet
///////////////////////////////////////////////////////////

@ -42,6 +42,7 @@
#define F_RADIUS 148
#define F_PATTERN 149
#define F_SHADE_OFFSET 150
#define F_PRFONT_SELECT 159
#define F_LEVEL 160
#define F_GROUP_BY 161

@ -183,6 +183,11 @@ BEGIN
PROMPT 2 10 "~Font"
END
BUTTON F_PRFONT_SELECT 14 1
BEGIN
PROMPT 2 12 "Font ~Stampa"
END
ENDPAGE
PAGE "Avanzate" -1 -1 74 16

@ -170,6 +170,11 @@ BEGIN
PROMPT 2 10 "~Font"
END
BUTTON F_PRFONT_SELECT 14 1
BEGIN
PROMPT 2 12 "Font ~Stampa"
END
ENDPAGE
PAGE "Avanzate" -1 -1 50 16

@ -460,6 +460,26 @@ bool TReport_base_mask::on_field_event(TOperable_field& o, TField_event e, long
}
xvt_font_destroy(font);
}
break;
case F_PRFONT_SELECT:
if (e == fe_button)
{
XVT_FNTID font = xvt_font_create();
xvt_font_copy(font, _font.get_xvt_font(*this), XVT_FA_ALL);
xvt_font_set_size(font, _font.size());
if (choose_printer_font(font))
{
TString name;
xvt_font_get_family(font, name.get_buffer(), name.size());
const int size = xvt_font_get_size(font);
const XVT_FONT_STYLE_MASK style = xvt_font_get_style(font);
_font.create(name, size, style);
_font_changed = true;
force_update();
}
xvt_font_destroy(font);
}
break;
case F_HALIGN:
case F_VALIGN:

@ -1472,7 +1472,7 @@ void TCespite::cal_valenza(const TRectype& tmv, const TRectype& tmvam, TRectype&
const real totfondo = fondo + privato;
real ratio;
if (!totfondo.is_zero())
if (!privato.is_zero() && !totfondo.is_zero())
ratio = privato / totfondo;
real resparven = mov_val_ven(tmv) - totfondo;

@ -158,6 +158,33 @@ BEGIN
FIELD ProgQta
END
NUMBER F_CODCOOP 6
BEGIN
PROMPT 2 14 "Codice cooperativa "
FIELD CodCoop
USE LF_CLIFO
INPUT TIPOCF "C" SELECT
INPUT CODCF F_CODCOOP
DISPLAY "Codice" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_CODCOOP CODCF
OUTPUT F_RAGCOOP RAGSOC
CHECKTYPE REQUIRED
ADD RUN cg0 -1 C
END
STRING F_RAGCOOP 50 35
BEGIN
PROMPT 40 14 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "C" SELECT
INPUT RAGSOC F_RAGCOOP
DISPLAY "Ragione sociale@60" RAGSOC
DISPLAY "Codice" CODCF
COPY OUTPUT F_CODCOOP
ADD RUN cg0 -1 C
END
ENDPAGE
PAGE "Configurazione chiusure mensili" -1 -1 0 0
@ -326,6 +353,31 @@ PAGE "Configurazione chiusure mensili" -1 -1 0 0
FLAGS "D"
END
STRING F_CODELASS 8
BEGIN
PROMPT 2 12 "Cod.elab assegni "
FLAG "U"
USE %ELD SELECT I0==5
INPUT CODTAB F_CODELASS
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@55" S0
OUTPUT F_CODELASS CODTAB
OUTPUT F_DESELASS S0
CHECKTYPE REQUIRED
FIELD ElAss
WARNING "E' necessario specificare il codice elaborazione"
END
STRING F_DESELASS 50
BEGIN
PROMPT 40 12 ""
USE %ELD KEY 2 SELECT I0==5
INPUT S0 F_DESELASS
DISPLAY "Descrizione@55" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODELASS
END
ENDPAGE
ENDMASK

@ -187,7 +187,7 @@ BEGIN
CHECKTYPE NORMAL
END
NUMBER F_SPESEFACC 9 2
NUMBER F_SPESEFACC 11 4
BEGIN
PROMPT 1 10 "Spese facchinaggio (Euro/kg) "
FIELD SPESEFACC
@ -195,7 +195,7 @@ END
STRING F_CODIVAFACC 4
BEGIN
PROMPT 45 10 ""
PROMPT 47 10 ""
FIELD CODIVAFACC
USE %IVA
INPUT CODTAB F_CODIVAFACC
@ -207,9 +207,9 @@ BEGIN
CHECKTYPE NORMAL
END
STRING F_DESIVAFACC 50 30
STRING F_DESIVAFACC 50 25
BEGIN
PROMPT 52 10 ""
PROMPT 54 10 ""
USE %IVA KEY 2
INPUT S0 F_DESIVAFACC
DISPLAY "Descrizione@50" S0
@ -219,7 +219,7 @@ BEGIN
CHECKTYPE NORMAL
END
NUMBER F_SPESECASSE 9 2
NUMBER F_SPESECASSE 11 4
BEGIN
PROMPT 1 11 "Spese ricambio casse (Euro/cassa) "
FIELD SPESECASSE
@ -227,7 +227,7 @@ END
STRING F_CODIVACASS 4
BEGIN
PROMPT 45 11 ""
PROMPT 47 11 ""
FIELD CODIVACASS
USE %IVA
INPUT CODTAB F_CODIVACASS
@ -239,9 +239,9 @@ BEGIN
CHECKTYPE NORMAL
END
STRING F_DESIVACASS 50 30
STRING F_DESIVACASS 50 25
BEGIN
PROMPT 52 11 ""
PROMPT 54 11 ""
USE %IVA KEY 2
INPUT S0 F_DESIVACASS
DISPLAY "Descrizione@50" S0

@ -4,12 +4,14 @@
#include <relapp.h>
#include <pconti.h>
#include <recarray.h>
#include <tabutil.h>
#include "co0600a.h"
////////////////////////////////////////////////////////////////////////
//MASCHERA
////////////////////////////////////////////////////////////////////////
class TCoop_soci_msk : public TAutomask
{
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -93,9 +95,55 @@ bool TCoop_soci_msk::on_field_event(TOperable_field& o, TField_event e, long jol
else
m.reset(F_DATASCALIC);
}
case F_ANNO:
if (e == fe_init || e == fe_modify)
{
const long codsocio = get_long(F_CODCF);
const int year = atoi(o.get());
if (codsocio != 0L && year > 1900)
{
TTable psc("PSC");
TSheet_field & prog = sfield(F_PROGRESSIVI);
real totconf;
real totiva;
real totrit;
for (int month = 1; month <= 12; month++)
{
TToken_string & row = prog.row(month - 1);
psc.zero();
TString key;
row.add(itom(month), prog.cid2index(F_MESE));
key.format("%06ld%04d%02d", codsocio, year, month);
psc.put("CODTAB", key);
if (psc.read(_isequal) == NOERR)
{
const real conf = psc.get_real("R0");
const real iva = psc.get_real("R1");
const real rit = psc.get_real("R2");
row.add(conf.string(18,2), prog.cid2index(F_CONF));
row.add(iva.string(18,2), prog.cid2index(F_IVA));
row.add(rit.string(18,2), prog.cid2index(F_RIT));
totconf += conf;
totiva += iva;
totrit += rit;
}
}
TToken_string & row = prog.row(12);
row.add("Totali", prog.cid2index(F_MESE));
row.add(totconf.string(18,2), prog.cid2index(F_CONF));
row.add(totiva.string(18,2), prog.cid2index(F_IVA));
row.add(totrit.string(18,2), prog.cid2index(F_RIT));
prog.force_update();
}
}
}
return TRUE;
return true;
}
class TCoop_soci_application : public TRelation_application

@ -1,42 +1,42 @@
// campi per la maschera co0600a
#define F_CODSOCIO 101
#define F_DESSOCIO 102
#define F_CODCF 103
#define F_RAGSOC 104
#define F_DATAASS 105
#define F_DATAREC 106
#define F_NUMQUOTE 107
#define F_VALQUOTE 108
#define F_LIBLAVORO 109
#define F_DATAEMISS 110
#define F_COMEMISS 111
#define F_NOMEBARCA 112
#define F_TIPOPROP 113
#define F_TIPOCOMAPP 114
#define F_LICENZA 115
#define F_DATALIC 116
#define F_COMPAGNIA1 117
#define F_QUOTA1 118
#define F_COMPAGNIA2 119
#define F_QUOTA2 120
#define F_COMPAGNIA3 121
#define F_QUOTA3 122
#define F_DATANASC 123
#define F_COMNASC 124
#define F_COFISOCIO 125
#define F_DATADEL 126
#define F_DATASCALIC 127
#define F_CODSOCIO 201
#define F_DESSOCIO 202
#define F_CODCF 203
#define F_RAGSOC 204
#define F_DATAASS 205
#define F_DATAREC 206
#define F_NUMQUOTE 207
#define F_VALQUOTE 208
#define F_LIBLAVORO 209
#define F_DATAEMISS 210
#define F_COMEMISS 211
#define F_NOMEBARCA 212
#define F_TIPOPROP 213
#define F_TIPOCOMAPP 214
#define F_LICENZA 215
#define F_DATALIC 216
#define F_COMPAGNIA1 217
#define F_QUOTA1 218
#define F_COMPAGNIA2 219
#define F_QUOTA2 220
#define F_COMPAGNIA3 221
#define F_QUOTA3 222
#define F_DATANASC 223
#define F_COMNASC 224
#define F_COFISOCIO 225
#define F_DATADEL 226
#define F_DATASCALIC 227
#define F_D_COMEMISS 131
#define F_P_COMEMISS 132
#define F_D_COMPAGNIA1 133
#define F_D_COMPAGNIA2 134
#define F_D_COMPAGNIA3 135
#define F_D_COMNASC 136
#define F_P_COMNASC 137
#define F_D_COMEMISS 231
#define F_P_COMEMISS 232
#define F_D_COMPAGNIA1 233
#define F_D_COMPAGNIA2 234
#define F_D_COMPAGNIA3 235
#define F_D_COMNASC 236
#define F_P_COMNASC 237
#define F_IMBARCAZIONI 151
#define F_IMBARCAZIONI 251
#define F_I_TIPOCOMAPP 101
#define F_I_TARGA 102
@ -58,3 +58,11 @@
#define F_I_NRRUOLEQUI 118
#define F_I_SCADLICPES 119
#define F_I_SCADPAGLIC 120
#define F_ANNO 252
#define F_PROGRESSIVI 153
#define F_MESE 101
#define F_CONF 102
#define F_IVA 103
#define F_RIT 104

@ -42,6 +42,7 @@ BEGIN
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Codice fiscale@16" COFI
OUTPUT F_CODCF CODCF
OUTPUT F_CODSOCIO CODCF
OUTPUT F_RAGSOC 20->RAGSOC
OUTPUT F_COFISOCIO 20->COFI
OUTPUT F_CODSOCIO CODCF
@ -55,6 +56,7 @@ STRING F_RAGSOC 50
BEGIN
PROMPT 25 2 ""
USE LF_CLIFO KEY 2
KEY 2
INPUT TIPOCF "F" SELECT
INPUT RAGSOC F_RAGSOC
DISPLAY "Ragione sociale@60" RAGSOC
@ -382,6 +384,25 @@ END
ENDPAGE
PAGE "Progressivi" 0 -1 0 20
NUMBER F_ANNO 4
BEGIN
PROMPT 2 5 "Anno "
FLAGS "A"
END
SPREADSHEET F_PROGRESSIVI 78 13
BEGIN
PROMPT 2 7 "Progressivi annuali"
FLAGS "R"
ITEM "Mese"
ITEM "Conferimenti@18"
ITEM "IVA@18"
ITEM "Ritenute@18"
END
ENDPAGE
ENDMASK
PAGE "Imbarcazione" -1 -1 75 16
@ -543,4 +564,45 @@ ENDPAGE
ENDMASK
PAGE "Progressivi" -1 -1 75 12
STRINGA F_MESE 15
BEGIN
PROMPT 2 2 "Mese "
FLAGS "D"
END
CURRENCY F_CONF
BEGIN
PROMPT 2 4 "Conferimenti "
FLAGS "D"
END
CURRENCY F_IVA
BEGIN
PROMPT 2 6 "IVA "
FLAGS "D"
END
CURRENCY F_RIT
BEGIN
PROMPT 2 8 "Ritenute "
FLAGS "D"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
END
ENDPAGE
ENDMASK

@ -41,6 +41,7 @@ class TConferimenti_application : public TMotore_application
protected:
virtual TMask* get_mask( int mode );
virtual void on_firm_change();
virtual int read( TMask& m );
int write( const TMask& m );
int rewrite( const TMask& m );
real get_perc_socio(const long codsocio, const TString& codcomp) const;
@ -136,37 +137,106 @@ int TConferimenti_application::rewrite( const TMask& m )
{
int err = NOERR;
const TTipo_documento tipodoc(m.get(172));
TDocumento & doc = ((TConferimenti_mask & )m).doc();
if (tipodoc.tipo() == 5)
{
const long codmercato = m.get_long(343);
TDocumento & doc = ((TConferimenti_mask & )m).doc();
doc.put("SPESEUPD", false);
doc.put("RAGGR", true);
update_spese_doc(codmercato, doc);
}
const int nrows = doc.physical_rows();
if (tipodoc.tipo() == 6)
for (int r = nrows; r >= 1; r--)
{
TRiga_documento & row = doc[r];
if (row.is_spese())
{
const TSpesa_prest & s = row.spesa();
if (s.get("S11") == "D")
{
real val = row.get_real(RDOC_PREZZO);
val = -val;
row.put(RDOC_PREZZO, val);
}
}
}
err = TMotore_application::rewrite(m);
return err;
}
int TConferimenti_application::read( TMask& m )
{
int err = TMotore_application::read(m);
TDocumento & doc = ((TConferimenti_mask & )m).doc();
TSheet_field & sf = ((TConferimenti_mask & )m).sfield(F_SHEET);
const int nrows = doc.physical_rows();
const TTipo_documento tipodoc(m.get(172));
if (err == NOERR && tipodoc.tipo() == 6)
{
for (int r = nrows; r >= 1; r--)
{
TRiga_documento & row = doc[r];
if (row.is_spese())
{
const TSpesa_prest & s = row.spesa();
if (s.get("S11") == "D")
{
real val = row.get_real(RDOC_PREZZO);
val = -val;
row.put(RDOC_PREZZO, val);
row.autoload(sf);;
}
}
sf.force_update();
}
}
return err;
}
int TConferimenti_application::write( const TMask& m )
{
int err = NOERR;
TDocumento & doc = ((TConferimenti_mask & )m).doc();
const int nrows = doc.physical_rows();
bool zero_doc = true;
int r;
const TTipo_documento tipodoc(m.get(172));
for (r = nrows; zero_doc && r >= 1; r--)
for (int r = nrows; r >= 1; r--)
{
const TRiga_documento & row = doc[r];
TRiga_documento & row = doc[r];
if (row.imponibile() != ZERO)
{
zero_doc = false;
if (tipodoc.tipo() == 6 && row.is_spese())
{
const TSpesa_prest & s = row.spesa();
if (s.get("S11") == "D")
{
real val = row.get_real(RDOC_PREZZO);
val = -val;
row.put(RDOC_PREZZO, val);
}
}
}
}
if (zero_doc)
return false;
const TTipo_documento tipodoc(m.get(172));
if (tipodoc.tipo() == 5)
{
const char confda = m.get(401)[0];
@ -184,9 +254,10 @@ int TConferimenti_application::write( const TMask& m )
TDocumento& doc = ((TConferimenti_mask&) m).doc();
if (doc.physical_rows() > 0)
{
const long nfasta = m.get_long(345);
const TString8 codcomp = m.get(344);
TLista_documenti listadoc;
if (compagnia2soci(doc, codcomp, codmercato, listadoc) > 0)
if (compagnia2soci(doc, codcomp, codmercato, nfasta, listadoc) > 0)
err = listadoc.write();
}
}

5
co/co0700a.ini Executable file

@ -0,0 +1,5 @@
[Search]
Header=|Tipo Movimento
FieldList=|34->CODART

@ -159,6 +159,7 @@ BEGIN
USE LF_DOC KEY 2 SELECT (CODNUM==#F_CODNUM) && (PROVV==#F_PROVV) && (ANNO==#F_ANNO)
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
JOIN LF_SOCICOOP TO LF_CLIFO INTO CODCF==CODCF
JOIN LF_RIGHEDOC TO LF_DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC NRIGA==1
INPUT TIPOCF F_TIPOCF SELECT
INPUT CODCF F_CODCF
INPUT PROVV F_PROVV
@ -174,6 +175,7 @@ BEGIN
DISPLAY "Data\ndocumento" DATADOC
//DISPLAY "Valuta" CODVAL
DISPLAY "Totale\ndocumento@18V" G1:TOTDOC
DISPLAY "Tipo Movimento" LF_RIGHEDOC->CODART
COPY OUTPUT F_NDOC
OUTPUT F_CODCF CODCF
CHECKTYPE NORMAL

@ -172,57 +172,59 @@ void TImportazioneConf::main_loop()
const TString16 cf = trec.get(fcf);
const TDate datadoc(trec.get(fdata));
// if ((cf != last_cf) || (datadoc != last_data)) non si raggruppa piu'
// {
if (d != NULL && d->rows() > 0)
if (d != NULL && d->rows() > 0)
{
m.doc() = *d;
m.doc2mask();
m.mask2doc();
*d = m.doc();
TSheet_field& sh = m.sheet();
for (int i = 1; i <= m.doc().physical_rows(); i++)
{
m.doc() = *d;
m.doc2mask();
m.mask2doc();
*d = m.doc();
TSheet_field& sh = m.sheet();
for (int i = 1; i <= m.doc().physical_rows(); i++)
{
TRiga_documento& r = (*d)[i];
r.autosave(sh);
r.put(RDOC_SCONTO, ritprezzo);
}
update_spese_doc(codmercato, *d);
d->stato(d->tipo().stato_finale_inserimento());
d->write();
delete d;
d = NULL;
TRiga_documento& r = (*d)[i];
r.autosave(sh);
r.put(RDOC_SCONTO, ritprezzo);
}
d = new TDocumento;
d->zero();
d->set_key(*d, 'D', datadoc.year(), codnum, 0L);
clifo.put(CLI_TIPOCF, "F");
clifo.put(CLI_COFI, cf);
int err = clifo.read(_isequal);
if (err != NOERR)
error_box("Fornitore con codice fiscale %s assente errore : %d)", (const char *) cf, err);
const long codcf = clifo.get_long(CLI_CODCF);
d->put(DOC_TIPODOC, codtipo);
d->put(DOC_TIPOCF, "F");
d->put(DOC_CODCF, codcf);
d->put(DOC_DATADOC, datadoc);
d->put("MERCATO", codmercato);
for (int f = 0; f < nfields; f++)
{
const TTracciato_campo& c = rec.get(f);
const TString& name = c.name();
if (name != "CF" && name != "DATADOC")
if (name.full() && ((name.find("->") < 0) || (name.starts_with("33->"))))
d->put(name, trec.get(f));
}
last_cf = cf;
last_data = datadoc;
update_spese_doc(codmercato, *d);
d->stato(d->tipo().stato_finale_inserimento());
d->write();
delete d;
d = NULL;
}
d = new TDocumento;
d->zero();
d->set_key(*d, 'D', datadoc.year(), codnum, 0L);
clifo.put(CLI_TIPOCF, "F");
clifo.put(CLI_COFI, cf);
int err = clifo.read(_isequal);
if (err != NOERR)
error_box("Fornitore con codice fiscale %s assente errore : %d)", (const char *) cf, err);
const long codcf = clifo.get_long(CLI_CODCF);
d->put(DOC_TIPODOC, codtipo);
d->put(DOC_TIPOCF, "F");
d->put(DOC_CODCF, codcf);
d->put(DOC_DATADOC, datadoc);
d->put("MERCATO", codmercato);
for (int f = 0; f < nfields; f++)
{
const TTracciato_campo& c = rec.get(f);
const TString& name = c.name();
if (name != "CF" && name != "DATADOC")
if (name.full() && ((name.find("->") < 0) || (name.starts_with("33->"))))
d->put(name, trec.get(f));
}
last_cf = cf;
last_data = datadoc;
TRiga_documento& row = d->new_row("CO");
for (int f = 0; f < nfields; f++)
if (d->physical_rows() > 1)
message_box("Attenzione il conferimento socio (cod.%ld) del %s ha piu' di una riga", codcf, datadoc.string());
for (f = 0; f < nfields; f++)
{
const TTracciato_campo& c = rec.get(f);
TString name = c.name();
@ -241,7 +243,7 @@ void TImportazioneConf::main_loop()
else
row.put(name, val);
}
// }
}
TString80 codice = row.get(RDOC_CODART);
TString80 key;
key.format("%06ld%s", codmercato, (const char*) codice);

@ -12,9 +12,9 @@ int main(int argc, char** argv)
case 3:
co1400(argc, argv); // Fatturazione Conferimenti
break;
//case 4:
// co1500(argc, argv); // Invio mov.coop. a TeamSystem
// break;
case 4:
co1500(argc, argv); // Invio mov.coop. a TeamSystem
break;
default:
break;
}

@ -1,3 +1,3 @@
int co1300(int argc, char* argv[]);
int co1400(int argc, char* argv[]);
//int co1500(int argc, char* argv[]);
int co1500(int argc, char* argv[]);

@ -6,3 +6,5 @@
#define F_FROMCODART 106
#define F_TOCODART 107
#define F_CODNUM 108
#define F_DASOCIO 109
#define F_ASOCIO 110

@ -132,7 +132,7 @@ THEN
-1 *
#THIS !
</prescript>
<postscript description="B11.0 POSTSCRIPT">MESSAGE ADD,F1.109</postscript>
<postscript description="B11.0 POSTSCRIPT">MESSAGE COPY,F11.109</postscript>
</field>
<field x="80" y="2" type="Testo" valign="bottom" width="15" pattern="1" text="Numero casse:">
<source>N1</source>
@ -175,11 +175,11 @@ THEN
-1 *
#THIS !
</prescript>
<postscript description="B11.0 POSTSCRIPT">MESSAGE ADD,F1.110</postscript>
<postscript description="B11.0 POSTSCRIPT">MESSAGE COPY,F11.110</postscript>
</field>
<field x="75" y="3" type="Valuta" valign="bottom" align="right" width="15" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>#PARENT.NETCRED</source>
<prescript description="B11.0 PRESCRIPT">MESSAGE ADD,F1.105</prescript>
<prescript description="B11.0 PRESCRIPT">MESSAGE COPY,F11.105</prescript>
</field>
<field x="100" y="3" type="Stringa" valign="bottom" align="right" width="8" pattern="1">
<source>RDOC.CODIVA</source>
@ -205,7 +205,17 @@ THEN
<source>TRIM(20.RAGSOC[1,30])+' '+TRIM(20.RAGSOC[31,50])</source>
</field>
</section>
<section type="Foot" level="11" />
<section type="Foot" level="11">
<field x="46" type="Valuta" valign="bottom" hidden="1" align="right" width="15" id="105" pattern="1" hide_zero="1" text="###.###.###,@@">
<prescript description="F11.105 PRESCRIPT">MESSAGE ADD,F1.105</prescript>
</field>
<field x="10" type="Valuta" valign="bottom" hidden="1" align="right" width="15" id="109" pattern="1" text="###.###.###,@@">
<postscript description="F11.109 POSTSCRIPT">MESSAGE ADD,F1.109</postscript>
</field>
<field x="27" type="Valuta" valign="bottom" hidden="1" align="right" width="15" id="110" pattern="1" hide_zero="1" text="###.###.###,@@">
<postscript description="F11.110 POSTSCRIPT">MESSAGE ADD,F1.110</postscript>
</field>
</section>
<section type="Foot" />
<section type="Foot" level="1">
<field border="2" y="1" type="Linea" width="170" height="0" pattern="1" />
@ -227,7 +237,7 @@ THEN
<field x="55" y="3" type="Valuta" valign="bottom" align="right" width="15" id="110" pattern="1" hide_zero="1" text="###.###.###,@@" />
</section>
<sql>USE DOC
SELECT (BETWEEN(DATADOC,#DADATA,#ADATA))&#26;&#26;(BETWEEN(G1:MERCATO,#DAMERCATO,#AMERCATO))
SELECT (BETWEEN(DATADOC,#DADATA,#ADATA))&#26;&#26;(BETWEEN(G1:MERCATO,#DAMERCATO,#AMERCATO))&#26;&#26;(BETWEEN(CODCF,#DASOCIO,#ASOCIO))
JOIN 20 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF
FROM PROVV=D ANNO=#ANNO CODNUM=#CODNUM
TO PROVV=D ANNO=#ANNO CODNUM=#CODNUM

@ -1,24 +1,42 @@
#include "co1200a.h"
PAGE "Stampa Conferimenti" -1 -1 78 10
PAGE "Stampa Conferimenti" -1 -1 78 12
STRING F_FROMCLIENTE 6
STRING F_CODNUM 4
BEGIN
PROMPT 5 1 "Numerazione "
USE %NUM
INPUT CODTAB F_CODNUM
DISPLAY "Codice" CODTAB
DISPLAY "Descrizone@50" S0
OUTPUT F_CODNUM CODTAB
CHECKTYPE REQUIRED
FIELD #CODNUM
FLAG "U"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 5 1 "Da mercato "
PROMPT 50 1 "Anno "
FIELD #ANNO
CHECKTYPE REQUIRED
END
NUMBER F_FROMCLIENTE 6
BEGIN
PROMPT 5 2 "Da mercato "
USE LF_MERCATICOOP
JOIN LF_CLIFO INTO TIPOCF=='C' CODCF==CODCF
INPUT CODCF F_FROMCLIENTE
DISPLAY "Codice" CODCF
DISPLAY "Descrizione@50" LF_CLIFO->RAGSOC
OUTPUT F_FROMCLIENTE CODCF
FLAG "U"
CHECKTYPE NORMAL
FIELD #DAMERCATO
END
STRING F_TOCLIENTE 6
NUMBER F_TOCLIENTE 6
BEGIN
PROMPT 5 2 "A mercato "
PROMPT 5 3 "A mercato "
COPY USE F_FROMCLIENTE
INPUT CODCF F_TOCLIENTE
COPY DISPLAY F_FROMCLIENTE
@ -26,28 +44,6 @@ BEGIN
NUM_EXPR #F_TOCLIENTE>=#F_FROMCLIENTE
WARNING "Intervallo codice cliente non corretto"
FIELD #AMERCATO
GROUP 2
END
DATE F_DADATA
BEGIN
PROMPT 50 1 "Da data "
FIELD #DADATA
CHECKTYPE REQUIRED
END
DATE F_ADATA
BEGIN
PROMPT 50 2 "A data "
FIELD #ADATA
CHECKTYPE REQUIRED
END
NUMBER F_ANNO 4
BEGIN
PROMPT 50 3 "Anno "
FIELD #ANNO
CHECKTYPE REQUIRED
END
STRING F_FROMCODART 20
@ -59,7 +55,6 @@ BEGIN
DISPLAY "Articolo@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_FROMCODART CODART
GROUP G_ART G_ALL
FIELD #DACODART
END
@ -72,24 +67,53 @@ BEGIN
DISPLAY "Articolo@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_TOCODART CODART
GROUP G_ART G_ALL
STR_EXPR #F_TOCODART>=#F_FROMCODART
WARNING "Range codice articolo non corretto"
FIELD #ACODART
END
STRING F_CODNUM 4
BEGIN
PROMPT 5 6 "Numerazione "
USE %NUM
INPUT CODTAB F_CODNUM
DISPLAY "Codice" CODTAB
DISPLAY "Descrizone@50" S0
OUTPUT F_CODNUM CODTAB
CHECKTYPE REQUIRED
FIELD #CODNUM
FLAG "U"
END
NUMBER F_DASOCIO 6
BEGIN
PROMPT 5 6 "Da socio "
FIELD #DASOCIO
USE LF_CLIFO SELECT LF_SOCICOOP->CODCF!=""
JOIN LF_SOCICOOP INTO CODCF==CODCF
INPUT TIPOCF "F"
INPUT CODCF F_DASOCIO
DISPLAY "Codice" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Codice fiscale@16" COFI
OUTPUT F_DASOCIO CODCF
END
NUMBER F_ASOCIO 6
BEGIN
PROMPT 5 7 "A socio "
FIELD #ASOCIO
USE LF_CLIFO SELECT LF_SOCICOOP->CODCF!=""
JOIN LF_SOCICOOP INTO CODCF==CODCF
INPUT TIPOCF "F"
INPUT CODCF F_ASOCIO
DISPLAY "Codice" CODCF
DISPLAY "Ragione sociale@50" 20->RAGSOC
DISPLAY "Codice fiscale@16" 20->COFI
OUTPUT F_ASOCIO CODCF
STR_EXPR #F_ASOCIO>=#F_DASOCIO
WARNING "Range codice socio non corretto"
GROUP 2
END
DATE F_DADATA
BEGIN
PROMPT 50 2 "Da data "
FIELD #DADATA
END
DATE F_ADATA
BEGIN
PROMPT 50 3 "A data "
FIELD #ADATA
END
BUTTON DLG_PRINT 10 2
BEGIN
@ -99,7 +123,7 @@ END
STRING DLG_PROFILE 50
BEGIN
PROMPT 5 7 "Profilo "
PROMPT 5 9 "Profilo "
PSELECT
END

@ -3,6 +3,7 @@
#include <form.h>
#include <report.h>
#include <reprint.h>
#include <tabutil.h>
#include <textset.h>
#include "co1.h"
@ -43,12 +44,18 @@ bool TEstrattoConto_mask::on_field_event(TOperable_field& f, TField_event e, lon
if (ini.year() == fin.year() && ini.month() == fin.month() &&
ini.day() == 1 && fin.is_end_month())
{
enable(F_GENPAG);
enable(F_CHIUSURA);
}
else
{
disable(F_CHIUSURA);
reset(F_CHIUSURA);
disable(F_GENPAG);
reset(F_GENPAG);
}
}
break;
default:
@ -63,8 +70,11 @@ bool TEstrattoConto_mask::on_field_event(TOperable_field& f, TField_event e, lon
class TEstrattoConto_rep : public TDocument_report
{
TGenerazione_effetti * _el;
int _riga;
long _socio;
real _iva;
real _totconf;
real _saldocred;
real _saldodeb;
real _ritenuta;
@ -78,6 +88,8 @@ class TEstrattoConto_rep : public TDocument_report
TString _spchi;
TString _spass;
bool _chiusura;
bool _genpag;
bool _aggiorna;
protected:
virtual bool use_mask() {return false;}
@ -86,7 +98,7 @@ protected:
void chiudi_mese() ;
public:
TEstrattoConto_rep(bool chiusura);
TEstrattoConto_rep(bool genpag, bool chiusura, bool aggiorna);
};
bool TEstrattoConto_rep::incr_field(int idx, const TVariant& var)
@ -166,6 +178,8 @@ bool TEstrattoConto_rep::set_usr_val(const TString& name, const TVariant& var)
if (name == "#EC_IMPO")
{
const real val = var.as_real();
_iva -= val;
incr_field(9, var);
return true;
}
@ -175,6 +189,12 @@ bool TEstrattoConto_rep::set_usr_val(const TString& name, const TVariant& var)
_socio = var.as_int();
return true;
}
if (name == "#EC_NETC")
{
const real val = var.as_real();
_totconf += val;
return true;
}
if (name == "#EC_CRED")
{
const real val = var.as_real();
@ -233,6 +253,88 @@ void TEstrattoConto_rep::chiudi_mese()
{
const TRecordset * recset = recordset();
if (_aggiorna)
{
TRecordset* r = recordset();
const TDate datafin = r->get_var("#DATAFIN").as_date();
int year = datafin.year();
int month = datafin.month();
TString key;
TTable psc("PSC");
key.format("%06ld%04d%02d", _socio, year, month);
psc.put("CODTAB", key);
if (psc.read(_isequal, _lock) != NOERR)
{
psc.put("CODTAB", key);
psc.write();
psc.read(_isequal, _lock);
}
psc.put("R0", _totconf);
psc.put("R1", _iva);
psc.put("R2", _ritenuta);
psc.rewrite();
}
if (_genpag)
{
const TDate datadoc(TODAY);
real saldo = _saldocred - _ritenuta - _saldodeb;
if (saldo > ZERO) // assegno
{
TRecordset* r = recordset();
const TDate datachi = r->get_var("#DATAFIN").as_date();
TDocumento doc('D', datachi.year(), _numchi, 0L);
doc.set_tipo(_tipoass);
doc.stato(doc.tipo().stato_finale_inserimento());
doc.put(DOC_DATADOC, datachi);
doc.put(DOC_TIPOCF, "F");
doc.put(DOC_CODCF, _socio);
TString key;
key.format("F|%ld", _socio);
const TRectype & forn = cache().get(LF_CLIFO, key);
const TString & codpag = forn.get(CLI_CODPAG);
doc.put(DOC_CODPAG, codpag);
const TString & iban = forn.get(CLI_IBAN);
doc.put(DOC_IBAN, iban);
TString8 codabi = forn.get(CLI_CODABI);
if (codabi == "00000")
codabi = "00001";
doc.put(DOC_CODABIA, codabi);
TString8 codcab = forn.get(CLI_CODCAB);
if (codcab == "00000")
codcab = "00001";
doc.put(DOC_CODCABA, codcab);
TSpesa_prest sp(_spass);
TRiga_documento & row = doc.new_row(sp.tipo_riga());
row.put(RDOC_CODART, sp.codice());
row.put(RDOC_CHECKED, "X");
row.put(RDOC_DESCR,sp.descrizione());
row.put(RDOC_UMQTA, sp.um());
row.put(RDOC_QTA, UNO);
row.put(RDOC_PREZZO, saldo);
row.put(RDOC_CODIVA, sp.cod_iva());
TLista_documenti in;
TLista_documenti out;
in.add(doc);
_el->set_writeable(false);
_el->elabora(in, out, datadoc);
}
}
if (_chiusura)
{
TRecordset* r = recordset();
@ -273,6 +375,30 @@ void TEstrattoConto_rep::chiudi_mese()
doc.put(DOC_TIPOCF, "F");
doc.put(DOC_CODCF, _socio);
TString key;
key.format("F|%ld", _socio);
const TRectype & forn = cache().get(LF_CLIFO, key);
const TString & codpag = forn.get(CLI_CODPAG);
doc.put(DOC_CODPAG, codpag);
const TString & iban = forn.get(CLI_IBAN);
doc.put(DOC_IBAN, iban);
TString8 codabi = forn.get(CLI_CODABI);
if (codabi == "00000")
codabi = "00001";
doc.put(DOC_CODABIA, codabi);
TString8 codcab = forn.get(CLI_CODCAB);
if (codcab == "00000")
codcab = "00001";
doc.put(DOC_CODCABA, codcab);
TSpesa_prest sp(_spass);
TRiga_documento & row = doc.new_row(sp.tipo_riga());
@ -320,7 +446,6 @@ void TEstrattoConto_rep::chiudi_mese()
docap.put(DOC_TIPOCF, "F");
docap.put(DOC_CODCF, _socio);
sp.read(_spchi);
TRiga_documento & rowap = docap.new_row(sp.tipo_riga());
@ -335,12 +460,14 @@ void TEstrattoConto_rep::chiudi_mese()
}
}
_socio = 0L,
_iva = ZERO;
_totconf = ZERO;
_saldocred = ZERO;
_saldodeb = ZERO;
_ritenuta = ZERO;
}
TEstrattoConto_rep::TEstrattoConto_rep(bool chiusura) : _chiusura(chiusura), _saldocred(), _saldodeb(ZERO), _ritenuta(ZERO)
TEstrattoConto_rep::TEstrattoConto_rep(bool genpag, bool chiusura, bool aggiorna) : _genpag(genpag), _chiusura(chiusura), _aggiorna(aggiorna), _saldocred(), _saldodeb(ZERO), _ritenuta(ZERO), _iva(ZERO), _totconf(ZERO)
{
load("co1300a");
TReport_section& b11 = section('B',11);
@ -363,6 +490,7 @@ TEstrattoConto_rep::TEstrattoConto_rep(bool chiusura) : _chiusura(chiusura), _sa
rf_f1->set_postscript("");
rf_f1->set_prescript("");
rf_f1->set_field("");
rf_f1->set_groups("1");
}
y += 100;
}
@ -376,6 +504,7 @@ TEstrattoConto_rep::TEstrattoConto_rep(bool chiusura) : _chiusura(chiusura), _sa
_spchi = c.get("SpChi");
_tipoass = c.get("TipoAss");
_spass = c.get("SpAss");
_el = new TGenerazione_effetti(c.get("ElAss"));
}
@ -395,7 +524,17 @@ void TEstrattoConto::main_loop()
while (m.run() == K_ENTER)
{
TReport_book book;
TEstrattoConto_rep rep(m.get_bool(F_CHIUSURA));
bool chiudi = m.get_bool(F_CHIUSURA);
bool aggiorna = m.get_bool(F_AGGIORNA);
bool genpag = m.get_bool(F_GENPAG);
if (chiudi)
chiudi = yesno_box("Sei sicuro effettuare la chiusura mensile");
if (aggiorna)
aggiorna = yesno_box("Sei sicuro di voler\naggiornare i progressivi dei soci");
if (genpag)
genpag = yesno_box("Sei sicuro di voler\ngenerare i pagamenti dei soci");
TEstrattoConto_rep rep(genpag, chiudi, aggiorna);
const TDate dataini = m.get_date(F_DATAINI);
const TDate datafin = m.get_date(F_DATAFIN);

@ -8,3 +8,5 @@
#define F_DESDASOCIO 106
#define F_DESASOCIO 107
#define F_CHIUSURA 108
#define F_AGGIORNA 109
#define F_GENPAG 110

@ -87,9 +87,7 @@
</field>
</section>
<section type="Head" level="1">
<prescript description="H1 PRESCRIPT">0 #F1.98 !
0 #F1.107 !
0 #F1.108 !</prescript>
<prescript description="H1 PRESCRIPT">MESSAGE RESET,F1.1@</prescript>
</section>
<section type="Body" />
<section type="Body" level="1" />
@ -283,6 +281,21 @@ DUP
<font face="Courier New" size="7" />
<prescript description="B11.111 PRESCRIPT">MESSAGE _ISAMREAD,CLIFO,TIPOCF='C'!CODCF=#PARENT.MERCATO,RAGSOC</prescript>
</field>
<field x="190" type="Valuta" hidden="1" align="right" width="15" id="207" pattern="1" hide_zero="1" text="###.###.###,@@">
<font face="Courier New" size="7" />
<prescript description="B11.207 PRESCRIPT">#PARENT.CODNUM @ \ legge il tipodoc
"CONF" = IF \ controlla se &#E8; un conferimento
#PARENT.NETCRED @ \ se &#E8; un conferimento scrivo TOTMER
ELSE
0
THEN
#THIS ! \ lo scrivo effettivamente
</prescript>
<postscript description="B11.207 POSTSCRIPT">#THIS @
#EC_NETC !
</postscript>
</field>
<field x="133" type="Valuta" hidden="1" align="right" width="15" id="208" pattern="1" hide_zero="1" text="###.###.###,@@">
<font face="Courier New" size="7" />
<source>#PARENT.TOTRITACC</source>
@ -338,6 +351,7 @@ DUP
<field border="2" y="12" type="Linea" width="170" height="0" pattern="1" />
<field x="116" type="Valuta" align="right" width="15" id="98" pattern="1" hide_zero="1" text="###.###.###,@@">
<font face="Courier New" size="7" />
<groups>1</groups>
<prescript description="F1.98 PRESCRIPT">#THIS @
#108 @
+
@ -345,21 +359,27 @@ DUP
</field>
<field x="46" y="1" type="Numero" align="right" width="8" id="102" pattern="1" text="###.###,@@">
<font face="Courier New" size="7" />
<groups>1</groups>
</field>
<field x="78" y="1" type="Valuta" align="right" width="9" id="105" pattern="1" hide_zero="1" text="###.###.###,@@">
<font face="Courier New" size="7" />
<groups>1</groups>
</field>
<field x="89" y="1" type="Valuta" align="right" width="8" id="106" pattern="1" text="###.###.###,@@">
<font face="Courier New" size="7" />
<groups>1</groups>
</field>
<field x="99" y="1" type="Valuta" align="right" width="15" id="107" pattern="1" hide_zero="1" text="###.###.###,@@">
<font face="Courier New" size="7" />
<groups>1</groups>
</field>
<field x="116" y="1" type="Valuta" align="right" width="15" id="108" pattern="1" hide_zero="1" text="###.###.###,@@">
<font face="Courier New" size="7" />
<groups>1</groups>
</field>
<field x="141" y="1" type="Stringa" align="right" width="16" id="109" pattern="1">
<field x="138.5" y="1" type="Stringa" align="right" width="16" id="109" pattern="1">
<font face="Courier New" bold="1" size="8" />
<groups>1</groups>
<prescript description="F1.109 PRESCRIPT">"F1.107" @ \ leggo il contenuto del campo 107
"F1.108" @ \ leggo il contenuto del campo 108
- \ faccio la sottrazione tra i due
@ -370,8 +390,9 @@ ELSE
THEN
!</prescript>
</field>
<field x="158" y="1" type="Valuta" align="right" width="12" id="110" pattern="1" hide_zero="1" text="###.###.###,@@">
<field x="154.5" y="1" type="Valuta" align="right" width="12" id="110" pattern="1" hide_zero="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
<groups>1</groups>
<prescript description="F1.110 PRESCRIPT">"F1.107" @ \ leggo il contenuto del campo 107
"F1.108" @ \ leggo il conetnuto del campo 108
- \ faccio la sottrazione tra i due

@ -80,9 +80,19 @@ BEGIN
FIELD DATAFIN
END
BOOLEAN F_GENPAG
BEGIN
PROMPT 2 8 "Genera i pagamenti"
END
BOOLEAN F_CHIUSURA
BEGIN
PROMPT 2 8 "Genera la chiusura mensile"
PROMPT 2 10 "Genera la chiusura mensile"
END
BOOLEAN F_AGGIORNA
BEGIN
PROMPT 2 12 "Aggiorna i progressivi mensili"
END
ENDPAGE

File diff suppressed because it is too large Load Diff

@ -1,9 +1,14 @@
// invio dati mov coop. da ebc ad teamsystem
// invio fatture soci coop. ad teamsystem
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_INPATH 103
#define F_INFILEA 104
#define F_INFILEM 107
#define F_MOVIMENTI 103
#define F_INTRASTAT 104
#define F_PATH 105
#define F_FILE 106
#define F_DATA_DA 107
#define F_DATA_AL 108
#define F_CODNUM 109
#define F_DESNUM 110
#define F_CODEL 111
#define F_DESEL 112

@ -1,6 +1,6 @@
#include "co1500a.h"
PAGE "Invio mov. coop a TeamSystem" -1 -1 78 20
PAGE "Invio Fatture soci coop a TeamSystem" -1 -1 78 14
GROUPBOX DLG_NULL 76 3
BEGIN
@ -23,60 +23,106 @@ BEGIN
FLAGS "D"
END
GROUPBOX DLG_NULL 76 5
BOOLEAN F_MOVIMENTI
BEGIN
PROMPT 2 4 "Sorgenti"
PROMPT 3 5 "Fatture"
FLAGS "H"
END
STRING F_INPATH 256 39
BOOLEAN F_INTRASTAT
BEGIN
PROMPT 3 5 "Cartella "
DSELECT
CHECKTYPE REQUIRED
FIELD TSMInPath
END
STRING F_INFILEA 18
BEGIN
PROMPT 3 6 "File anagrafica "
FIELD TSMInFileA
END
STRING F_INFILEM 18
BEGIN
PROMPT 3 7 "File movimenti "
FIELD TSMInFileM
END
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 2 9 "Destinazione"
PROMPT 3 6 "Intrastat"
FLAGS "H"
END
STRING F_PATH 256 39
BEGIN
PROMPT 3 10 "Cartella "
PROMPT 2 4 "Cartella "
DSELECT
CHECKTYPE REQUIRED
FIELD TSMDestPath
FIELD TSDestPath
END
STRING F_FILE 18
BEGIN
PROMPT 3 11 "File "
FIELD TSMDestFile
PROMPT 55 4 "File"
FIELD TSDestFile
END
BUTTON DLG_OK 10 2
STRING F_CODEL 8
BEGIN
PROMPT 2 6 "Cod.Elab. "
FLAG "U"
USE %ELD SELECT I0 == 3
INPUT CODTAB F_CODEL
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@55" S0
OUTPUT F_CODEL CODTAB
OUTPUT F_DESEL S0
CHECKTYPE REQUIRED
FIELD TSCodEl
WARNING "E' necessario specificare il codice elaborazione"
END
STRING F_DESEL 50
BEGIN
PROMPT 24 6 ""
USE %ELD KEY 2 SELECT I0 == 3
INPUT S0 F_DESEL
DISPLAY "Descrizione@55" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODEL
END
STRING F_CODNUM 4
BEGIN
PROMPT 2 8 "Numeraz. "
FIELD CODNUM
HELP "Codice numerazione"
USE %NUM
INPUT CODTAB F_CODNUM
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODNUM CODTAB
OUTPUT F_DESNUM S0
CHECKTYPE FORCED
FLAG "UPA"
WARNING "Numerazione assente"
FIELD TSCodNum
END
STRING F_DESNUM 50
BEGIN
PROMPT 24 8 ""
HELP "Descrizione numerazione"
USE %NUM KEY 2
INPUT S0 F_DESNUM
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODNUM
END
DATE F_DATA_DA
BEGIN
PROMPT 2 10 "Data iniz."
END
DATE F_DATA_AL
BEGIN
PROMPT 30 10 "Data fin. "
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
ENDMASK

@ -64,7 +64,7 @@ MESSAGE RESET,F2.105</prescript>
<prescript description="B1.103 PRESCRIPT">#THIS @
"F2.103" !</prescript>
</field>
<field x="52" type="Prezzo" align="right" width="15" id="104" pattern="1" text="###.###.###,@@">
<field x="52" type="Valuta" align="right" width="15" id="104" pattern="1" text="###.###.###,@@">
<prescript description="B1.104 PRESCRIPT">"DOC.TIPODOC" @ \ leggo il tipo documento
"CONF" = IF \ controllo se &#E8; un conferimento
"DOC.NETCRED" @
@ -76,7 +76,7 @@ ELSE \ se non &#E8; un conferimento
THEN
+! \ lo sommo</prescript>
</field>
<field x="52" y="1" type="Prezzo" align="right" width="15" id="105" pattern="1" text="###.###.###,@@">
<field x="52" y="1" type="Valuta" align="right" width="15" id="105" pattern="1" text="###.###.###,@@">
<prescript description="B1.105 PRESCRIPT">"DOC.TOTRITACC" @
"F2.104" \ lo metto nella coda del gruppo
+! \ lo sommo</prescript>
@ -91,14 +91,14 @@ THEN
<section type="Foot" level="1">
<field border="2" y="1" type="Linea" width="170" height="0" pattern="1" />
<field x="55" y="2" type="Testo" width="15" pattern="1" text="TOTALI" />
<field x="75" y="2" type="Prezzo" align="right" width="17" id="101" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="94" y="2" type="Prezzo" align="right" width="17" id="102" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="75" y="2" type="Valuta" align="right" width="17" id="101" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="94" y="2" type="Valuta" align="right" width="17" id="102" pattern="1" hide_zero="1" text="###.###.###,@@" />
</section>
<section type="Foot" level="2">
<field x="3" type="Numero" align="right" width="3" id="101" pattern="1" />
<field x="7" type="Stringa" width="49" id="102" pattern="1" />
<field x="58" type="Stringa" align="right" width="15" id="103" pattern="1" />
<field x="75" type="Prezzo" align="right" width="17" id="104" pattern="1" hide_zero="1" text="###.###.###,@@">
<field x="75" type="Valuta" align="right" width="17" id="104" pattern="1" hide_zero="1" text="###.###.###,@@">
<prescript description="F2.104 PRESCRIPT">#THIS @ \ leggo il valore attuale
DUP \ lo duplico
0 &#3E;= IF \ se &#E8; maggiore di zero
@ -110,7 +110,7 @@ ELSE
THEN</prescript>
<postscript description="F2.104 POSTSCRIPT">MESSAGE ADD,F1.101</postscript>
</field>
<field x="94" type="Prezzo" align="right" width="17" id="105" pattern="1" hide_zero="1" text="###.###.###,@@">
<field x="94" type="Valuta" align="right" width="17" id="105" pattern="1" hide_zero="1" text="###.###.###,@@">
<postscript description="F2.105 POSTSCRIPT">MESSAGE ADD,F1.102</postscript>
</field>
<field x="113" type="Stringa" width="70" id="106" pattern="1" />

@ -74,12 +74,9 @@ SELECT BETWEEN(CODART,#PARENT.#DACODART,#PARENT.#ACODART)
FROM PROVV=#PARENT.PROVV ANNO=#PARENT.ANNO CODNUM=#PARENT.CODNUM NDOC=#PARENT.NDOC
TO PROVV=#PARENT.PROVV ANNO=#PARENT.ANNO CODNUM=#PARENT.CODNUM NDOC=#PARENT.NDOC
</sql>
<field x="2" type="Numero" align="right" width="3" pattern="1" hide_zero="1">
<source>NRIGA</source>
</field>
<field x="6.5" type="Stringa" width="3" pattern="1">
<field x="2" type="Stringa" width="8" pattern="1">
<font face="Courier New" bold="1" size="10" />
<source>RDOC.CODARTMAG</source>
<source>RDOC.CODART</source>
</field>
<field x="10.5" type="Stringa" width="51" pattern="1">
<font face="Courier New" bold="1" size="10" />

@ -50,7 +50,7 @@ BEGIN
OUTPUT F_ASOCIO CODCF
STR_EXPR #F_ASOCIO>=#F_DASOCIO
WARNING "Range codice socio non corretto"
CHECKTYPE REQUIRED
GROUP 2
END
STRING F_FROMCODART 8
@ -62,7 +62,6 @@ BEGIN
DISPLAY "Prestazione@20" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_FROMCODART CODTAB
GROUP G_ART G_ALL
FIELD #DACODART
END
@ -75,7 +74,6 @@ BEGIN
DISPLAY "Prestazione@20" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_TOCODART CODTAB
GROUP G_ART G_ALL
STR_EXPR #F_TOCODART>=#F_FROMCODART
WARNING "Range codice articolo non corretto"
FIELD #ACODART
@ -85,14 +83,12 @@ DATE F_DADATA
BEGIN
PROMPT 50 2 "Da data "
FIELD #DADATA
CHECKTYPE REQUIRED
END
DATE F_ADATA
BEGIN
PROMPT 50 3 "A data "
FIELD #ADATA
CHECKTYPE REQUIRED
END
BUTTON DLG_PRINT 10 2

@ -28,3 +28,9 @@
#define F_DTIPOASS 127
#define F_SPASS 128
#define F_DSPASS 129
#define F_CODCOOP 130
#define F_RAGCOOP 131
#define F_CODELASS 132
#define F_DESELASS 133

@ -141,7 +141,7 @@ void update_spese_doc(const long codmercato, TDocumento& doc)
}
// crea una lista documenti a partire da un conferimento per compagnia
int compagnia2soci(const TDocumento& doc_orig, const TString& codcomp, const long codmercato, TLista_documenti& listadoc)
int compagnia2soci(const TDocumento& doc_orig, const TString& codcomp, const long codmercato, const long nfasta, TLista_documenti& listadoc)
{
TString_array listasoci;
TRelation relsoci(LF_SOCICOOP);
@ -160,6 +160,8 @@ int compagnia2soci(const TDocumento& doc_orig, const TString& codcomp, const lon
TDocumento docnew(doc_orig);
docnew.put(DOC_CODCF, codsocio);
docnew.put(DOC_TIPOCF, "F");
docnew.put("MERCATO", codmercato);
docnew.put("NFASTA", nfasta);
listadoc.add(docnew);
}
for (int i = 1; i <= doc_orig.rows(); i++)
@ -170,7 +172,7 @@ int compagnia2soci(const TDocumento& doc_orig, const TString& codcomp, const lon
const char avalore = riga_doc.get_char(RDOC_CODAGG1);
if (avalore == 'X')
{
TGeneric_distrib prezzo_dist(riga_doc.prezzo(false, false));
TGeneric_distrib prezzo_dist(riga_doc.prezzo(false, false), 2);
for (int j = 0; j < listadoc.items(); j++)
{
long codsocio = listadoc[j].codcf();
@ -183,21 +185,34 @@ int compagnia2soci(const TDocumento& doc_orig, const TString& codcomp, const lon
listadoc[k][i].put(RDOC_PREZZO, prezzosocio);
}
}
else
TGeneric_distrib qta_dist(riga_doc.quantita(), 5);
int j;
for (j = 0; j < listadoc.items(); j++)
{
TGeneric_distrib qta_dist(riga_doc.quantita());
for (int j = 0; j < listadoc.items(); j++)
{
long codsocio = listadoc[j].codcf();
real perc = get_perc_socio(codsocio, codcomp);
qta_dist.add(perc);
}
for (int k = 0; k < listadoc.items(); k++)
{
real qtasocio = qta_dist.get();
listadoc[k][i].put(RDOC_QTA, qtasocio);
}
}
long codsocio = listadoc[j].codcf();
real perc = get_perc_socio(codsocio, codcomp);
qta_dist.add(perc);
}
for (j = 0; j < listadoc.items(); j++)
{
real qtasocio = qta_dist.get();
listadoc[j][i].put(RDOC_QTA, qtasocio);
}
TGeneric_distrib qtagg_dist(riga_doc.get_real(RDOC_QTAGG1), 5);
for (j = 0; j < listadoc.items(); j++)
{
long codsocio = listadoc[j].codcf();
real perc = get_perc_socio(codsocio, codcomp);
qtagg_dist.add(perc);
}
for (j = 0; j < listadoc.items(); j++)
{
real qtasocio = qtagg_dist.get();
listadoc[j][i].put(RDOC_QTAGG1, qtasocio);
}
}
}
for (int i = 0; i < listadoc.items(); i++)

@ -8,7 +8,7 @@
#include "../ve/velib04.h"
// crea la lista documenti per tutti i soci
int compagnia2soci(const TDocumento& doc_compagnia, const TString& codcomp, const long codmercato, TLista_documenti& docs_soci);
int compagnia2soci(const TDocumento& doc_compagnia, const TString& codcomp, const long codmercato, const long nfasta, TLista_documenti& docs_soci);
void update_spese_doc(const long codmercato, TDocumento& doc);
#endif

@ -37,6 +37,7 @@ Item_01 = "Gestione conferimenti/prestazioni", "co0 -6", "F"
Item_02 = "Importazione conferimenti", "co0 -7", "F"
Item_03 = "Aggiornamento prezzi", "co0 -8", "F"
Item_04 = "Fatturazione conferimenti", "co1 -3", "F"
Item_04 = "Contabilizzazione soci", "co1 -4", "F"
[COMENU_014]
Caption = "Stampe"

@ -1,3 +1,3 @@
160
0
$mercaticoop|0|0|53|0|Anagrafica mercati cooperative|||
$mercaticoop|0|0|57|0|Anagrafica mercati cooperative|||

@ -7,9 +7,9 @@ CODIVA1|1|4|0|1^ codice iva
DIRITTI2|4|5|2|2^ % diritti di mercato
ARROT2|1|1|0|2^ arrotondamento
CODIVA2|1|4|0|2^ codice iva
SPESEFACC|4|9|2|Spese di facchinaggio (Euro/kg)
SPESEFACC|4|11|4|Spese di facchinaggio (Euro/kg)
CODIVAFACC|1|4|0|Codice iva per spese facchinaggio
SPESECASSE|4|9|2|Spese ricambio casse (Euro/cassa)
SPESECASSE|4|11|4|Spese ricambio casse (Euro/cassa)
CODIVACASS|1|4|0|Codice iva per spese ricambio casse
1
CODCF|

72
co/rf700000.frm Executable file

@ -0,0 +1,72 @@
USE 31
JOIN 14 INTO NPROGTR==NPROGTR
JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF
JOIN 17 TO 20 INTO TIPOCF==TIPOCF CODCF==CODCF
JOIN 16 TO 17 INTO TIPOCF==TIPOCF CODCF==CODCF CODIND==CODINDEFF
JOIN 13 TO 20 ALIAS 113 INTO COM==COMCF
JOIN 13 TO 16 ALIAS 213 INTO COM==COM
JOIN %BAN ALIAS 201 INTO CODTAB[1,5]==CODABI
JOIN %BAN ALIAS 203 INTO CODTAB==CODABI+CODCAB
JOIN 13 TO 203@ ALIAS 313 INTO COM==S5
JOIN %BAN ALIAS 202 INTO CODTAB==CODABIP+CODCABP
END
DESCRIPTION
BEGIN
31->* "Effetti"
14->* "Righe effetto"
20->* "Clienti e Fornitori"
113@->* "Comuni"
213@->* "Comuni"
201@->* "Tabella banche"
202@->* "Tabella banche"
203@->* "Tabella banche"
END
GENERAL
BEGIN
OFFSET 0 0
END
SECTION BODY ODD 17
DATA 1 10
BEGIN
KEY "data scadenza"
PROMPT 36 3 ""
FIELD 31->DATASCAD
END
STRINGA 23 3
BEGIN
KEY "Codice valuta"
PROMPT 0 0 ""
FIELD 31->CODVAL
FLAGS "H"
END
VALUTA 2 18
BEGIN
KEY "importo"
PROMPT 55 3 ""
MESSAGE _IMPORTO
DRIVENBY 23
END
VALUTA 4
BEGIN
KEY "importo in lettere"
PROMPT 18 9 ""
MESSAGE _IMPORTO
DRIVENBY 23
PICTURE "(*,*)LETTERE@44"
END
VALUTA 10 18
BEGIN
KEY "importo fattura"
PROMPT 73 10 ""
MESSAGE _FATT,!IMPFATT
DRIVENBY 23
FL "D"
END
STRING 11 50
BEGIN
KEY "ragione sociale debitore"
PROMPT 20 11 ""
MESSAGE _CLI,!RAGSOC
END
END
END

@ -949,6 +949,8 @@ class TDistinta_mask : public TAutomask
{
TDistinta_tree& _tree;
TCodgiac_livelli *_livelli_giac;
TString _numdoc;
TDate _datadoc;
void set_um_rif(int row);
@ -1458,6 +1460,7 @@ bool TDistinta_mask::on_field_event(TOperable_field& o, TField_event e, long jol
sheet.force_update();
}
break;
case DLG_AGGPRZ:
case DLG_MOV:
if (e == fe_button)
{
@ -1469,92 +1472,132 @@ bool TDistinta_mask::on_field_event(TOperable_field& o, TField_event e, long jol
TMov_mask mov(get(F_CODICE), &sf);
TMagazzini m;
if (!m.gestmultimag())
if (!do_mov)
{
mov.disable(F_CODMAG);
mov.disable(F_DESMAG);
mov.disable(F_CODDEP);
mov.disable(F_DESDEP);
mov.hide(F_DATAREG);
mov.hide(F_CODCAUS);
mov.hide(F_DESCAU);
mov.hide(F_CODMAG);
mov.hide(F_DESMAG);
mov.hide(F_CODDEP);
mov.hide(F_DESDEP);
mov.hide(F_QUANT);
mov.hide(F_SCONTO);
mov.hide(F_NUMDOC);
mov.hide(F_DATADOC);
}
else
if (!m.gestdep())
{
if (!m.gestmultimag())
{
mov.disable(F_CODMAG);
mov.disable(F_DESMAG);
mov.disable(F_CODDEP);
mov.disable(F_DESDEP);
}
mov.set(F_CODMAG, m.standardmag());
mov.set(F_CODDEP, m.standarddep());
else
if (!m.gestdep())
{
mov.disable(F_CODDEP);
mov.disable(F_DESDEP);
}
mov.set(F_CODMAG, m.standardmag());
mov.set(F_CODDEP, m.standarddep());
mov.set(F_NUMDOC, _numdoc);
mov.set(F_DATADOC, _datadoc);
}
mov.set(F_PREZZOM, get(F_PREZZO));
if (mov.run() == K_ENTER)
{
TFilename name;
TAssoc_array & arts = mov.costs();
TArticolo articolo;
name.temp("", "ini");
FOR_EACH_ASSOC_OBJECT(arts, obj, key, item)
if (do_mov)
{
if (articolo.read(key, _isequal, _testandlock))
{
const real costo = * (real *)item;
articolo.put(ANAMAG_ULTCOS1, costo);
articolo.rewrite();
}
TAssoc_array & arts = mov.costs();
TArticolo articolo;
name.temp("", "ini");
_numdoc = mov.get(F_NUMDOC);
_datadoc = mov.get_date(F_DATADOC);
FOR_EACH_ASSOC_OBJECT(arts, obj, key, item)
{
const real costo = * (real *)item;
if (articolo.lock_and_prompt(key))
{
articolo.put(ANAMAG_ULTCOS1, costo);
articolo.rewrite();
}
}
{
TConfig c(name);
c.set_paragraph("Transaction");
c.set("Action", "Insert");
c.set("Mode", "");
c.set_paragraph(format("%d", LF_MOVMAG));
c.set(MOVMAG_DATAREG, mov.get(F_DATAREG));
c.set(MOVMAG_CODCAUS, mov.get(F_CODCAUS));
c.set(MOVMAG_NUMDOC, _numdoc);
c.set(MOVMAG_EXNUMDOC, _numdoc);
c.set(MOVMAG_EXDATADOC, _datadoc.string());
c.set_paragraph(format("%d,1", LF_RMOVMAG));
TString8 codmag(mov.get(F_CODMAG));
codmag.rpad(3);
codmag << mov.get(F_CODDEP);
c.set(RMOVMAG_CODMAG, codmag);
c.set(RMOVMAG_CODART, get(F_CODICE));
c.set(RMOVMAG_UM, get(F_UM));
c.set(RMOVMAG_QUANT, mov.get(F_QUANT));
c.set(RMOVMAG_PREZZO, mov.get(F_PREZZOM));
}
TExternal_app app(format("mg1 -0 -i%s", (const char *)name));
app.run();
}
else
{
TConfig c(name);
c.set_paragraph("Transaction");
c.set("Action", "Insert");
c.set("Mode", "");
c.set_paragraph(format("%d", LF_MOVMAG));
c.set(MOVMAG_DATAREG, mov.get(F_DATAREG));
c.set(MOVMAG_CODCAUS, mov.get(F_CODCAUS));
c.set(MOVMAG_NUMDOC, mov.get(F_NUMDOC));
c.set(MOVMAG_EXNUMDOC, mov.get(F_NUMDOC));
c.set(MOVMAG_EXDATADOC, mov.get(F_DATADOC));
c.set_paragraph(format("%d,1", LF_RMOVMAG));
TString8 codmag(mov.get(F_CODMAG));
codmag.rpad(3);
codmag << mov.get(F_CODDEP);
c.set(RMOVMAG_CODMAG, codmag);
c.set(RMOVMAG_CODART, get(F_CODICE));
c.set(RMOVMAG_UM, get(F_UM));
c.set(RMOVMAG_QUANT, mov.get(F_QUANT));
c.set(RMOVMAG_PREZZO, mov.get(F_PREZZOM));
TLocalisamfile art(LF_ANAMAG);
art.put(ANAMAG_CODART, get(F_CODICE));
if (art.read(_isequal, _testandlock) == NOERR)
{
const real costo(mov.get(F_PREZZOM)); // Aggiorna ultimo costo in anagrafica
art.put(ANAMAG_ULTCOS1, costo);
art.rewrite();
}
}
TExternal_app app(format("mg1 -0 -i%s", (const char *)name));
app.run();
const real prezzo(mov.get(F_PREZZOV));
TLocalisamfile umart(LF_UMART);
umart.put(UMART_CODART, get(F_CODICE));
umart.put(UMART_NRIGA, 1);
if (umart.read(_isequal, _testandlock) == NOERR)
{
umart.put(UMART_PREZZO, prezzo);
umart.put(UMART_PREZZO, prezzo); // Aggiorna prezzo di vendita
umart.rewrite();
}
set(F_CODICE, get(F_CODICE), 0x3);
TConfig c(name);
c.set_paragraph(format("%d", LF_MOVMAG));
const long movmag = c.get_long(MOVMAG_NUMREG);
if (movmag > 0L && yesno_box("Vuoi stampare le etichette"))
if (do_mov)
{
const TString8 codcaus(mov.get(F_CODCAUS));
const TString codart(get(F_CODICE));
TExternal_app etich_app(format("mg3 -5 101=%s,103=%s,106=M,109=%s,110=%ld,111=%ld",
(const char *) codart, (const char *) codart, (const char *) codcaus, movmag, movmag));
TConfig c(name);
etich_app.run();
c.set_paragraph(format("%d", LF_MOVMAG));
const long movmag = c.get_long(MOVMAG_NUMREG);
if (movmag > 0L && yesno_box("Vuoi stampare le etichette"))
{
const TString8 codcaus(mov.get(F_CODCAUS));
const TString codart(get(F_CODICE));
TExternal_app etich_app(format("mg3 -5 101=%s,103=%s,106=M,109=%s,110=%ld,111=%ld",
(const char *) codart, (const char *) codart, (const char *) codcaus, movmag, movmag));
etich_app.run();
}
}
}
}

@ -108,4 +108,5 @@
#define F_SCONTO 132
#define F_NUMDOC 133
#define F_DATADOC 134
#define DLG_AGGPRZ 135
#endif

@ -37,13 +37,13 @@ END
BOOLEAN F_GESCODART
BEGIN
PROMPT 2 4 "Gestione codice articolo a livelli"
FIELD GESLIVART
FIELD GESLIVART
GROUP 1
END
BOOLEAN F_GESLIVGIAC
BEGIN
PROMPT 2 6 "Gestione livelli di giacenza"
PROMPT 2 6 "Gestione livelli di giacenza"
FIELD GESLIVGIAC
GROUP 1
END
@ -62,7 +62,6 @@ BEGIN
GROUP 1
END
LIST F_GESUBICAZ 10
BEGIN
PROMPT 2 12 "Gestione ubicazioni "
@ -82,7 +81,7 @@ END
BOOLEAN F_GESCOMMESSE
BEGIN
FLAGS "H"
PROMPT 2 14 "Gestione commesse"
PROMPT 40 14 "Gestione commesse"
FIELD GESCOMMESSE
GROUP 1
END
@ -98,11 +97,18 @@ END
NUMBER F_GESDECIMALI 1
BEGIN
FLAGS "H"
PROMPT 2 18 "Numero di decimali"
PROMPT 40 16 "Numero di decimali"
FIELD DECIMALS
GROUP 1
END
BOOLEAN F_CHECK_GIAC
BEGIN
PROMPT 2 16 "Controllo giacenza nei movimenti"
FIELD CHECK_GIAC
GROUP 1
END
ENDPAGE
ENDMASK

@ -21,6 +21,9 @@ class TMask_movmag : public TMask
bool price_proposed;
real proposed_price(const char * codart, real quant,const char * causrig);
int _autorows;
TArray _old_qta;
bool _check_giac;
// aggiorna la riga di magazzino aggiungendo righe automatiche o esplosioni
bool update_rigamov(int r, const char * old_codcaus, const char * old_codart, const real & old_quant);
@ -28,7 +31,7 @@ class TMask_movmag : public TMask
bool add_explrows(int r);
TMagazzini _magazzini;
bool qta_inventory(real & qta);
void qta_inventory(real & qta);
static bool notify_righe(TSheet_field & fld_righe, int item, KEY k); // notify delle righe di sheet
static bool handle_righe(TMask_field &f, KEY k); // handler delle righe
@ -44,6 +47,8 @@ class TMask_movmag : public TMask
static void sheetrighe_put(TSheet_field &fld_righe, int item);
static void sheetrighe_get(TSheet_field &fld_righe, int item);
public:
TArticolo_giacenza& curr_art();
TArray & old_qta() { return _old_qta; }
void update_tot();
const TMagazzini& magazzini() const { return _magazzini; }
int autorows() const { return _autorows;}
@ -105,11 +110,11 @@ TMask_movmag::TMask_movmag(TMov_mag * m_m)
sm.field(F_LIV1+l).set_handler(codgrp_handler);
}
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
if (prassid.get_bool("GES", NULL, A_LISTINI))
field(F_CATVEN).show(prassid.get_bool("GESLISCV"));
else
field(F_CATVEN).hide();
const bool gmm = magazzini().gestmultimag();
sm.field(F_DESMAG).enable(gmm);
ss.enable_column(ss.cid2index(F_CODMAG),gmm);
@ -118,6 +123,8 @@ TMask_movmag::TMask_movmag(TMov_mag * m_m)
sm.field(F_DESDEP).enable(gd);
ss.enable_column(ss.cid2index(F_CODDEP),gd);
_autorows = prassid.get_int("AUTOROWS", "mg");
_check_giac = prassid.get_bool("CHECK_GIAC", "mg");
}
@ -186,12 +193,31 @@ void TMask_movmag::update_tot()
{
TSheet_field& ss = sfield(F_RIGHE);
const int idx_val = ss.cid2index(F_VALORE); // Posizione del valore
real valore, tot;
const int idx_qta = ss.cid2index(F_QUANT); // Posizione della quantita'
const int idx_caus = ss.cid2index(F_CAUSRIG); // Posizione della causale di riga
const bool start = !is_running();
real valore, tot, qta;
const TString8 causmov = get(F_CODCAUS);
TString8 codcaus;
if (start)
_old_qta.destroy();
FOR_EACH_SHEET_ROW(ss, i, row)
{
row->get(idx_val, valore);
tot += valore;
if (start)
{
row->get(idx_qta, qta);
row->get(idx_caus, codcaus);
if (codcaus.blank())
codcaus = causmov;
const TCausale_magazzino cau(codcaus);
if (cau.sgn(s_giac) == -1)
qta = -qta;
_old_qta.add(qta, i);
}
}
set(F_VALORE_TOT, tot);
}
@ -200,7 +226,7 @@ bool TMask_movmag::notify_righe(TSheet_field& ss, int r, KEY key)
{
static TString8 old_codcaus;
static TCodice_articolo old_codart;
static real old_quant = UNO;
static real old_quant;
static bool selecting = false;
TMask_movmag& m= (TMask_movmag&)ss.mask();
@ -213,6 +239,7 @@ bool TMask_movmag::notify_righe(TSheet_field& ss, int r, KEY key)
// autoremove automatic lines along with the original one
ss.destroy(r+1);
}
m._old_qta.destroy(r, true);
} else
if ( key == K_CTRL + K_DEL ) // Cancellazione
@ -249,6 +276,7 @@ bool TMask_movmag::notify_righe(TSheet_field& ss, int r, KEY key)
stdmag = m.magazzini().standardmag();
stddep = m.magazzini().standarddep();
}
m._old_qta.insert(new real, r);
}
if (stdmag.full())
@ -265,20 +293,17 @@ bool TMask_movmag::notify_righe(TSheet_field& ss, int r, KEY key)
old_codcaus = ss.sheet_mask().get(F_CAUSRIG);
if (old_codcaus.blank())
old_codcaus = ss.mask().get(F_CODCAUS);
if (old_quant != ss.sheet_mask().get_real(F_QUANT))
{
old_quant = ss.sheet_mask().get_real(F_QUANT);
m.qta_inventory(old_quant);
}
old_quant = ss.sheet_mask().get_real(F_QUANT);
m.qta_inventory(old_quant);
old_codart = ss.sheet_mask().get(F_CODART);
} else
if (key == K_ENTER)
{
real diff = ss.sheet_mask().get_real(F_QUANT) ;
m.qta_inventory(diff);
if (m.get_bool(F_INVENTORYMODE))
{
real diff = ss.sheet_mask().get_real(F_QUANT) ;
m.qta_inventory(diff);
if (diff != old_quant)
{
ss.sheet_mask().set(F_QUANT, diff);
@ -289,6 +314,25 @@ bool TMask_movmag::notify_righe(TSheet_field& ss, int r, KEY key)
ss.select(r);
m.update_tot();
if (m._check_giac)
{
real giac = ss.sheet_mask().get_real(F_GIAC);
real * old_qta = (real *) m._old_qta.objptr(r);
TString8 codcaus = ss.sheet_mask().get(F_CAUSRIG);
if (codcaus.blank())
codcaus = ss.mask().get(F_CODCAUS);
const TCausale_magazzino cau(codcaus);
if (cau.sgn(s_giac) == -1)
diff = -diff;
if (old_qta != NULL)
diff -= *old_qta;
giac += diff;
if (giac < ZERO)
message_box("Attenzione quantità negativa");
}
} else
if (key == K_TAB && !selecting)
{
@ -299,28 +343,30 @@ bool TMask_movmag::notify_righe(TSheet_field& ss, int r, KEY key)
return true;
}
bool TMask_movmag::qta_inventory(real & qta)
void TMask_movmag::qta_inventory(real & qta)
{
if (get_bool(F_INVENTORYMODE))
{
const TMask & sm = sfield(F_RIGHE).sheet_mask();
qta -= sm.get_real(F_GIAC);
TString8 codcau(sm.get(F_CAUSRIG));
if (codcau.blank())
codcau = get(F_CODCAUS);
if (codcau.blank())
return error_box(TR("La causale non e' indicata"));
TString8 codcau(sm.get(F_CAUSRIG));
if (codcau.blank())
codcau = get(F_CODCAUS);
if (codcau.blank())
{
error_box(TR("La causale non e' indicata"));
return;
}
const TCausale_magazzino cau(codcau);
switch (cau.sgn(s_giac))
{
case 1: break;
case -1: qta = - qta; break;
default: message_box(TR("La causale indicata non movimenta la giacenza"));
}
}
return TRUE;
const TCausale_magazzino cau(codcau);
switch (cau.sgn(s_giac))
{
case 1: break;
case -1: qta = -qta; break;
default: break;
}
}
}
// proposta soft: solo se il prezzo è non nullo (già impostato)
@ -441,6 +487,7 @@ bool TMask_movmag::handle_giacattuale(TMask_field &f, KEY k)
{
TMask & maskrighe =f.mask();
TMask_movmag &maskmov=(TMask_movmag &)maskrighe.get_sheet()->mask();
if (k==K_TAB && (!maskmov.is_running() || f.focusdirty()))
{
TString codliv;
@ -819,6 +866,7 @@ void TApp_movmag::init_insert_mode(TMask& m)
const bool inventory = m.get_bool(F_INVENTORYMODE);
TSheet_field& ss = m.sfield(F_RIGHE);
ss.sheet_mask().field(F_QUANT).check_type(inventory ? CHECK_NONE : CHECK_REQUIRED);
((TMask_movmag &)m).old_qta().destroy();
for (int i = 0; i < ((TMask_movmag &)m).autorows(); i++)
ss.insert(-1, false, true);

@ -791,6 +791,7 @@ SECTION BODY ODD 0 COLUMNWISE
FIELD LF_MAG->GIAC
PICTURE "#######@,@#"
MESSAGE ADD,147
GROUP FG_RIGAVALORI
END
NUMERO 48 12
BEGIN
@ -798,6 +799,16 @@ SECTION BODY ODD 0 COLUMNWISE
PROMPT 12 1 ""
PICTURE "#######@,@#"
MESSAGE _NUMEXPR,LF_MAG->SCORTAMIN-LF_MAG->GIAC|ADD,147
GROUP FG_RIGAVALORI
END
NUMERO 49 12
BEGIN
KEY "giac"
PROMPT 6 1 ""
FIELD LF_MAG->GIAC
PICTURE "#######@,@#"
MESSAGE ADD,141
GROUP FG_RIGAPREZZI
END
END // depositi dello stesso magazzino
END // MAGAZZ

@ -228,6 +228,7 @@ END
BEGIN
KEY "H1"
PROMPT 139 6 "Giacenza"
GROUP FG_RIGAVALORI
END
STRINGA 15 12
BEGIN
@ -790,6 +791,7 @@ SECTION BODY ODD 0 COLUMNWISE
FIELD LF_MAG->GIAC
PICTURE "#######@,@#"
MESSAGE ADD,147
GROUP FG_RIGAVALORI
END
NUMERO 48 12
BEGIN
@ -797,7 +799,17 @@ SECTION BODY ODD 0 COLUMNWISE
PROMPT 12 1 ""
PICTURE "#######@,@#"
MESSAGE _NUMEXPR,LF_MAG->SCORTAMIN-LF_MAG->GIAC|ADD,147
GROUP FG_RIGAVALORI
END
NUMERO 49 12
BEGIN
KEY "giac"
PROMPT 6 1 ""
FIELD LF_MAG->GIAC
PICTURE "#######@,@#"
MESSAGE ADD,141
GROUP FG_RIGAPREZZI
END
END // depositi dello stesso magazzino
END // MAGAZZ

@ -211,11 +211,13 @@ END
BEGIN
KEY "H1"
PROMPT 142 6 "Giac."
GROUP FG_RIGAPREZZI
END
STRINGA 15 12
BEGIN
KEY "H1"
PROMPT 140 6 "Scorta-Giac."
GROUP FG_RIGAVALORI
END
STRINGA 17 146
@ -755,6 +757,7 @@ SECTION BODY ODD 0 COLUMNWISE
PICTURE "########,@#"
FIELD LF_MAG->GIAC
MESSAGE ADD,347
GROUP FG_RIGAPREZZI
END
NUMERO 248 12
BEGIN
@ -762,6 +765,16 @@ SECTION BODY ODD 0 COLUMNWISE
PROMPT 12 1 ""
PICTURE "#######@,@#"
MESSAGE _NUMEXPR,LF_MAG->SCORTAMIN-LF_MAG->GIAC|ADD,347
GROUP FG_RIGAVALORI
END
NUMERO 249 12
BEGIN
KEY "giac"
PROMPT 6 1 ""
PICTURE "########,@#"
FIELD LF_MAG->GIAC
MESSAGE ADD,341
GROUP 2 FG_RIGAPREZZI
END
END // tot ggiac4

@ -207,6 +207,103 @@ void TStampa_etich_mov_recordset::requery()
}
}
//////////
class TStampa_etich_giac_recordset : public TISAM_recordset
{
TPointer_array _index;
TRecnotype _current_row;
public:
virtual bool move_to(TRecnotype pos);
virtual TRecnotype items() const;
virtual TRecnotype current_row() const;
void set_filter(const TStampa_etich_art_mask& msk);
TPointer_array & index() { return _index; }
virtual void requery();
TStampa_etich_giac_recordset(const TString& sql) : TISAM_recordset(sql), _current_row(0L) { }
};
//metodo per caricare i valori nel recordset dalla maschera...fighissimo!!
void TStampa_etich_giac_recordset::set_filter(const TStampa_etich_art_mask& msk)
{
TVariant var;
const int items=msk.fields();
for (short i=0; i<items; i++)
{
const TMask_field &f=msk.fld(i);
const TFieldref* fld=f.field();
if (fld != NULL)
{
TString80 fldname=fld->name();
if (!fldname.starts_with("#"))
fldname.insert("#");
var=f.get();
if (fldname == "#CODDEP")
{
TVariant codmag(get_var("#CODMAG"));
codmag += var;
set_var("#CODMAG", codmag);
}
else
set_var(fldname,var);
}
}
TCursor * c = cursor();
requery();
}
TRecnotype TStampa_etich_giac_recordset::items() const
{
return _index.items();
}
TRecnotype TStampa_etich_giac_recordset::current_row() const
{
return _current_row;
}
bool TStampa_etich_giac_recordset::move_to(TRecnotype pos)
{
_current_row = pos;
const bool valid = _current_row < items();
if (valid)
TISAM_recordset::move_to(_index.get_long(pos) - 1);
else
_current_row = 0L;
return valid;
}
bool build_index_giac(const TRelation& rel, void* pJolly)
{
TStampa_etich_mov_recordset * r = (TStampa_etich_mov_recordset *) pJolly;
int ncopie = atoi(rel.curr().get("GIAC"));
const TRecnotype pos = r->cursor()->pos();
if (ncopie > 0)
for ( int i = 0; i < ncopie; i++)
r->index().insert_long(pos + 1);
return true;
}
void TStampa_etich_giac_recordset::requery()
{
if (valid_cursor())
{
TCursor * c = cursor();
_index.destroy();
c->scan(build_index_giac, this);
}
}
////////////////////////////////////////////////////////
// REPORT
////////////////////////////////////////////////////////
@ -265,6 +362,35 @@ void TStampa_etich_mov_rep::set_filter(const TStampa_etich_art_mask& msk)
}
////////////////////////////////////////////////////////
class TStampa_etich_giac_rep : public TReport
{
protected:
virtual bool get_usr_val(const TString& name, TVariant& var) const;
virtual bool set_recordset(const TString& query);
public:
void set_filter(const TStampa_etich_art_mask& msk);
};
//metodo per il calcolo dei campi da calcolare (ma va'!) nel report
bool TStampa_etich_giac_rep::get_usr_val(const TString& name, TVariant& var) const
{
return TReport::get_usr_val(name, var);
}
bool TStampa_etich_giac_rep::set_recordset(const TString& query)
{
return TReport::set_recordset(new TStampa_etich_giac_recordset(query));
}
void TStampa_etich_giac_rep::set_filter(const TStampa_etich_art_mask& msk)
{
((TStampa_etich_giac_recordset *)recordset())->set_filter(msk);
}
////////////////////////////////////////////////////////
// APPLICAZIONE
////////////////////////////////////////////////////////
@ -306,14 +432,24 @@ void TStampa_etich_art::main_loop()
book.print_or_preview(); //stampa il book dei report
}
else
{
TStampa_etich_mov_rep rep;
if (mask.get(F_TIPOST) == "M")
{
TStampa_etich_mov_rep rep;
rep.load("mg3600b");
rep.set_filter(mask);
book.add(rep);
book.print_or_preview(); //stampa il book dei report
}
rep.load("mg3600b");
rep.set_filter(mask);
book.add(rep);
book.print_or_preview(); //stampa il book dei report
}
else
{
TStampa_etich_giac_rep rep;
rep.load("mg3600c");
rep.set_filter(mask);
book.add(rep);
book.print_or_preview(); //stampa il book dei report
}
}
}

@ -9,5 +9,11 @@
#define F_CAUS 109
#define F_DANUM 110
#define F_ANUM 111
#define F_CODMAG 112
#define F_DESMAG 113
#define F_CODDEP 114
#define F_DESDEP 115
#define F_ANNOES 116

@ -7,13 +7,15 @@ ENDPAGE
PAGE "Stampa etichette articoli" 0 0 0 0
RADIOBUTTON F_TIPOST 14
LISTBOX F_TIPOST 14
BEGIN
PROMPT 1 2 "Tipo di stampa"
PROMPT 1 2 "Tipo di stampa "
ITEM "A|Anagrafica"
MESSAGE HIDE,10@|SHOW,11@
MESSAGE HIDE,10@|SHOW,11@|HIDE,12@
ITEM "G|Giacenze"
MESSAGE HIDE,10@|HIDE,11@|SHOW,12@
ITEM "M|Movimenti"
MESSAGE SHOW,10@|HIDE,11@
MESSAGE SHOW,10@|HIDE,11@|HIDE,12@
FLAGS "P"
END
@ -68,6 +70,83 @@ BEGIN
OUTPUT F_ADESCR DESCR
END
NUMBER F_ANNOES 4
BEGIN
PROMPT 1 10 "Codice es. "
USE ESC
INPUT CODTAB F_ANNOES
DISPLAY "Esercizio" CODTAB
DISPLAY "Dal@12" D0
DISPLAY "Al@12" D1
OUTPUT F_ANNOES CODTAB
CHECKTYPE REQUIRED
ADD NONE
FLAGS "AZ"
GROUP 12
FIELD ANNOES
END
STRING F_CODMAG 3
BEGIN
PROMPT 1 12 "Magazzino "
FLAGS "U"
USE MAG SELECT CODTAB[4,5]==""
INPUT CODTAB F_CODMAG
DISPLAY "Codice " CODTAB[1,3]
DISPLAY "Denominazione mag.@50 " S0
OUTPUT F_CODMAG CODTAB[1,3]
OUTPUT F_DESMAG S0
CHECKTYPE REQUIRED
FIELD CODMAG
GROUP 12
END
STRING F_DESMAG 50
BEGIN
PROMPT 25 12 ""
USE MAG KEY 2 SELECT CODTAB[4,5]==""
INPUT S0 F_DESMAG
DISPLAY "Denominazione mag.@50" S0
DISPLAY "Cod. magazzino" CODTAB[1,3]
DISPLAY "Cod. deposito" CODTAB[4,5]
COPY OUTPUT F_CODMAG
CHECKTYPE NORMAL
GROUP 12
END
STRING F_CODDEP 2
BEGIN
PROMPT 1 14 "Deposito "
FLAGS "U"
USE MAG SELECT CODTAB[4,5]!=""
INPUT CODTAB[1,3] F_CODMAG SELECT
INPUT CODTAB[4,5] F_CODDEP
DISPLAY "Cod. magazzino" CODTAB[1,3]
DISPLAY "Cod. deposito" CODTAB[4,5]
DISPLAY "Denominazione dep.@50" S0
OUTPUT F_CODMAG CODTAB[1,3]
OUTPUT F_CODDEP CODTAB[4,5]
OUTPUT F_DESDEP S0
CHECKTYPE NORMAL
WARNING "Indicare il deposito"
FIELD CODDEP
GROUP 12
END
STRING F_DESDEP 50
BEGIN
PROMPT 25 14 ""
FLAGS "H"
USE MAG KEY 2 SELECT (CODTAB[4,5]!="")&&(CODTAB[1,3]==#F_CODMAG)
INPUT S0 F_DESDEP
COPY DISPLAY F_DESMAG
COPY OUTPUT F_CODDEP
CHECKTYPE NORMAL
MESSAGE EMPTY CHECK,F_CODDEP
GROUP 12
END
NUMBER F_QTA 3
BEGIN
PROMPT 1 10 "Quantita' "
@ -124,6 +203,7 @@ BEGIN
OUTPUT F_ANUM NUMREG
FLAGS "P"
FIELD ANUM
GROUP 10
END
STRING F_CAUS 5

38
mg/mg3600c.rep Executable file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report name="mg3600c" lpi="6">
<description>Stampa etichette articoli da magazzino</description>
<font face="Courier New" size="10" />
<section type="Head" />
<section type="Head" level="1" />
<section type="Body" />
<section type="Body" level="1" width="40" height="9">
<field x="1" y="2" type="Stringa" width="20" pattern="1">
<source>CODART</source>
</field>
<field x="1" y="3" type="Stringa" width="38" height="2" pattern="1">
<source>ANAMAG.DESCR</source>
</field>
<field x="1" y="5.75" type="Testo" width="2" pattern="1" text="&#80;" />
<field x="3" y="5.75" type="Prezzo" align="right" width="15" pattern="1" text="#########,@@">
<source>UMART.PREZZO</source>
</field>
<field x="19.12" y="5.75" type="Testo" width="4" pattern="1" text="Lit." />
<field x="24" y="5.75" type="Numero" align="right" width="15" pattern="1" text="###.###.###.###.###">
<source>UMART.PREZZO</source>
<prescript description="B1.0 PRESCRIPT">#THIS @
1936.27
*
0
ROUND
#THIS !</prescript>
</field>
</section>
<section type="Foot" />
<section type="Foot" level="1" />
<sql>USE 109 KEY 2
JOIN ANAMAG INTO CODART=CODART
JOIN UMART TO ANAMAG INTO CODART=CODART NRIGA=1
FROM ANNOES=#ANNOES CODMAG=#CODMAG CODART=#DACODART
TO ANNOES=#ANNOES CODMAG=#CODMAG CODART=#ACODART
</sql>
</report>

@ -8,3 +8,4 @@
#define F_GESVALUTA 108
#define F_GESDECIMALI 109
#define F_RIPORTA_ORD 110
#define F_CHECK_GIAC 111

@ -967,6 +967,7 @@ private:
bool explode_articles();
bool test_codnum(const TCodice_numerazione& num, const TString_array& a) const;
bool test_codnum(const TString & codnum, const TString_array& a) const;
int test_status(const TRectype& doc, const TString_array& a) const;
bool has_confirmed_status(const TRectype& doc, const TToken_string& riga) const;
@ -1956,26 +1957,29 @@ int TRisalita_mask::add_gross_ref(const TMRP_line& line, int bucket)
// TMatResPlanning
///////////////////////////////////////////////////////////
bool TMatResPlanning::test_codnum(const TCodice_numerazione& num, const TString_array& a) const
bool TMatResPlanning::test_codnum(const TString& codnum, const TString_array& a) const
{
const TString& codnum = num.codice();
TString4 tmp;
for (int it = 0 ;it < a.items(); it++ )
FOR_EACH_ARRAY_ROW(a, i, row)
{
a.row(it).get(0, tmp);
row->get(0, tmp);
if (tmp == codnum)
return true;
}
return false;
bool yes = a.find(num.codice()) >= 0; // E' questa roba a cosa serve???
return yes;
}
bool TMatResPlanning::test_codnum(const TCodice_numerazione& num, const TString_array& a) const
{
const TString& codnum = num.codice();
return test_codnum(codnum, a);
}
bool TMatResPlanning::has_confirmed_status(const TRectype& doc, const TToken_string& riga) const
{
const char statodoc = doc.get_char(DOC_STATO);
const char state_def = ((TToken_string&)riga).get_char(F_STATODEF - FIRST_FIELD);
return (statodoc >= state_def);
char statodoc = doc.get_char(DOC_STATO);
char state_def; riga.get(F_STATODEF - FIRST_FIELD, state_def);
return statodoc >= state_def;
}
int TMatResPlanning::test_status(const TRectype& doc, const TString_array& a) const
@ -3457,9 +3461,26 @@ bool TMatResPlanning::emit_orders()
if (dardoc != NULL)
{
int rifdepth = m.get_int(F_RIFERIMENTO_MRP);
// if (rifdepth == 0 && dardoc->get(RDOC_DACODNUM).full())
if (rifdepth == 0 && dardoc->get(RDOC_DACODNUM).full())
{
// rifdepth = 1;
rdoc.set_original_rdoc_key(*dardoc, rifdepth); // Imposto DAPROVV, DAANNO, DACODNUM, DANDOC, DAIDRIGA
const TString_array& n = m.sfield(F_NUM_ORC).rows_array();
while (dardoc != NULL)
{
const TString& codnum = dardoc->get(RDOC_CODNUM);
if (test_codnum(codnum, n))
break;
dardoc = ((const TRiga_documento*)dardoc)->find_original_rdoc();
}
}
if (dardoc != NULL)
rdoc.set_original_rdoc_key(*dardoc, rifdepth); // Imposto DAPROVV, DAANNO, DACODNUM, DANDOC, DAIDRIGA
else
{
TString80 msg; msg.format(FR("Riferimento non trovato: riga %d"), r+1);
xvt_statbar_set(msg);
beep();
}
}
else
{

@ -857,7 +857,7 @@ void TMSP_constraint::fill_sheet_row(TToken_string& row, const TMask & m, const
TString val(descr && *descr ? descr :description());
const TString80 da_rdoc_key(da_rdoc_key());
if (da_rdoc_key.full())
if (da_rdoc_key.full() && atoi(da_rdoc_key.smid(4,4)) > 0)
{
TDocumento d('D', atoi(da_rdoc_key.smid(4,4)), da_rdoc_key.sleft(4).trim(), atoi(da_rdoc_key.smid(9,7)));
TDate cons(d.get_date("DATAORIG"));

@ -258,34 +258,34 @@ void TGenera_ordini_mask::update_sheet()
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
TToken_string & row = sf.row(i);
const TString & codart = recset.get(ANAMAG_CODART).as_string();
const TString & codart = recset.get(LF_ANAMAG, ANAMAG_CODART).as_string();
row.add(codart, sf.cid2index(F_CODART));
art.read(codart);
const real giac = art.giacenza_anno(codmag, "", anno);
row.add(recset.get(ANAMAG_DESCR).as_string(), sf.cid2index(F_DESCR));
row.add(recset.get(LF_ANAMAG, ANAMAG_DESCR).as_string(), sf.cid2index(F_DESCR));
row.add(recset.get("UMART.UM").as_string(), sf.cid2index(F_UM));
const long codforn = recset.get(ANAMAG_CODFORN).as_int();
const long codforn = recset.get(LF_ANAMAG, ANAMAG_CODFORN).as_int();
row.add(codforn, sf.cid2index(F_FORNITORE));
row.add(recset.get("CLIFO.RAGSOC").as_string(), sf.cid2index(F_RAGSOC));
row.add(recset.get(ANAMAG_GIORNIRIOR).as_string(), sf.cid2index(F_LEADTIME));
row.add(recset.get(ANAMAG_LOTTORIOR).as_string(), sf.cid2index(F_LOTTOMIN));
row.add(recset.get(ANAMAG_DESCRAGG).as_string(), sf.cid2index(F_DESCRAGG));
row.add(recset.get(LF_ANAMAG, ANAMAG_GIORNIRIOR).as_string(), sf.cid2index(F_LEADTIME));
row.add(recset.get(LF_ANAMAG, ANAMAG_LOTTORIOR).as_string(), sf.cid2index(F_LOTTOMIN));
row.add(recset.get(LF_ANAMAG, ANAMAG_DESCRAGG).as_string(), sf.cid2index(F_DESCRAGG));
row.add(giac.string(), sf.cid2index(F_GIACENZA));
row.add(recset.get(ANAMAG_PPCONF).as_string(), sf.cid2index(F_PPCONF));
row.add(recset.get(ANAMAG_USER1).as_string(), sf.cid2index(F_USER1));
row.add(recset.get(ANAMAG_USER2).as_string(), sf.cid2index(F_USER2));
row.add(recset.get(ANAMAG_USER3).as_string(), sf.cid2index(F_USER3));
row.add(recset.get(ANAMAG_USER4).as_string(), sf.cid2index(F_USER4));
row.add(recset.get(ANAMAG_USER5).as_string(), sf.cid2index(F_USER5));
row.add(recset.get(ANAMAG_USER6).as_string(), sf.cid2index(F_USER6));
row.add(recset.get(ANAMAG_USER7).as_string(), sf.cid2index(F_USER7));
row.add(recset.get(ANAMAG_USER8).as_string(), sf.cid2index(F_USER8));
row.add(recset.get(ANAMAG_USER9).as_string(), sf.cid2index(F_USER9));
row.add(recset.get(ANAMAG_USER10).as_string(), sf.cid2index(F_USER10));
row.add(recset.get(LF_ANAMAG, ANAMAG_PPCONF).as_string(), sf.cid2index(F_PPCONF));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER1).as_string(), sf.cid2index(F_USER1));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER2).as_string(), sf.cid2index(F_USER2));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER3).as_string(), sf.cid2index(F_USER3));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER4).as_string(), sf.cid2index(F_USER4));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER5).as_string(), sf.cid2index(F_USER5));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER6).as_string(), sf.cid2index(F_USER6));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER7).as_string(), sf.cid2index(F_USER7));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER8).as_string(), sf.cid2index(F_USER8));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER9).as_string(), sf.cid2index(F_USER9));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER10).as_string(), sf.cid2index(F_USER10));
const real disp = art.disponibilita(codes, get(F_MAG), NULL);
row.add(disp.string(), sf.cid2index(F_DISPON));
sf.check_row(i);
@ -370,13 +370,13 @@ void TGenera_ordini_mask::next_page(int p)
if (_filter_changed)
{
const TSheet_field& sf = sfield(F_ARTICLES);
if (xvt_scr_get_focus_vobj() == sf.parent())
if (win() == sf.parent())
update_sheet();
}
if (_order_changed)
{
const TSheet_field& sf = sfield(F_ORDERS);
if (xvt_scr_get_focus_vobj() == sf.parent())
if (win() == sf.parent())
update_orders();
}
@ -419,7 +419,10 @@ bool TGenera_ordini_mask::on_field_event(TOperable_field& o, TField_event e, lon
break;
case F_CODNUM:
if (e == fe_modify)
{
_order_changed = true;
_filter_changed = true;
}
break;
case F_ANNO:
if (e == fe_init && o.empty())
@ -575,7 +578,7 @@ void TGenera_ordini_mask::load_user_defs()
}
TGenera_ordini_mask::TGenera_ordini_mask()
: TAutomask("or1400a"), _filter_changed(false)
: TAutomask("or1400a"), _filter_changed(false), _order_changed(false)
{
serialize(false);
load_user_defs();
@ -693,7 +696,7 @@ void TCreazione_ordini::generate_orders()
if (sf.items() > 0)
{
const TDate datadoc(TODAY);
const TDate datadoc = mask.get_date(F_DATADOC);
const TString& codnum = mask.get(F_CODNUM);
const TString& tipodoc = mask.get(F_TIPODOC);
const TTipo_documento tipo(tipodoc);

@ -29,6 +29,7 @@
#define F_DESDEPC 177
#define DLG_PRINTDOC 178
#define DLG_DELDOC 179
#define F_DATADOC 180
#define F_DASTATO 201
#define F_ASTATO 202

151
or/or1400a.rep Executable file

@ -0,0 +1,151 @@
<report name="or1400a" orientation="2" lpi="6">
<description>a</description>
<font face="Courier New" size="8" />
<section type="Head">
<field type="Stringa" width="40" pattern="1">
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="60" type="Stringa" align="center" width="30" height="1.5" pattern="1">
<font face="Times New Roman" bold="1" size="14" />
<source>"CONSUMI " +#OR14_ANNO</source>
</field>
<field x="131" type="Testo" width="8" pattern="1" text="Data:" />
<field x="139.5" type="Data" width="10.5" pattern="1">
<source>#SYSTEM.DATE</source>
</field>
<field x="156" type="Testo" width="8" pattern="1" text="Pagina:" />
<field x="164" type="Numero" align="right" width="3" pattern="1">
<source>#PAGE</source>
</field>
</section>
<section type="Head" level="1" />
<section type="Head" level="2">
<groupby>47.GRMERC[1,2]</groupby>
<field x="8" type="Stringa" width="80" pattern="1">
<font face="Courier New" bold="1" size="10" />
<prescript description="H2.0 PRESCRIPT">MESSAGE TABLEREAD,GMC,#10,S0</prescript>
</field>
<field x="1" type="Stringa" width="5" id="10" pattern="1">
<font face="Courier New" bold="1" size="10" />
<source>47.GRMERC[1,2]</source>
</field>
</section>
<section type="Head" level="3">
<groupby>47.GRMERC[1,5]</groupby>
<field x="8" type="Stringa" width="50" pattern="1">
<font face="Courier New" bold="1" size="8" />
<prescript description="H3.0 PRESCRIPT">MESSAGE TABLEREAD,GMC,#10,S0</prescript>
</field>
<field x="60.46" type="Testo" align="center" width="9" pattern="1" text="GEN" />
<field x="69.45" type="Testo" align="center" width="9" pattern="1" text="FEB" />
<field x="78.45" type="Testo" align="center" width="9" pattern="1" text="MAR" />
<field x="87.46" type="Testo" align="center" width="9" pattern="1" text="APR" />
<field x="96.46" type="Testo" align="center" width="9" pattern="1" text="MAG" />
<field x="105.46" type="Testo" align="center" width="9" pattern="1" text="GIU" />
<field x="114.46" type="Testo" align="center" width="9" pattern="1" text="LUG" />
<field x="123.46" type="Testo" align="center" width="9" pattern="1" text="AGO" />
<field x="132.46" type="Testo" align="center" width="9" pattern="1" text="SET" />
<field x="141.46" type="Testo" align="center" width="9" pattern="1" text="OTT" />
<field x="150.46" type="Testo" align="center" width="9" pattern="1" text="NOV" />
<field x="159.46" type="Testo" align="center" width="9" pattern="1" text="DIC" />
<field border="1" x="1" y="1" type="Linea" width="167" height="0" pattern="1" />
<field x="1" type="Stringa" width="5.5" id="10" pattern="1">
<font face="Courier New" bold="1" size="8" />
<source>47.GRMERC[1,5]</source>
</field>
</section>
<section type="Head" level="4">
<groupby>CODART</groupby>
<prescript description="H4 PRESCRIPT">113 1 DO
0
"F4." I +
!
LOOP</prescript>
</section>
<section type="Body" />
<section type="Body" level="1" hidden="1">
<field x="1" type="Numero" hidden="1" align="right" width="4" pattern="1">
<source>OR14_ANNO</source>
</field>
<field x="5" type="Stringa" hidden="1" width="4" pattern="1">
<source>CODNUM</source>
</field>
<field x="10" type="Stringa" width="4.5" pattern="1">
<source>DOC.TIPODOC</source>
</field>
<field x="15" type="Numero" align="right" width="7" pattern="1">
<source>NDOC</source>
</field>
<field x="23" type="Data" width="8.5" pattern="1">
<source>DOC.DATADOC</source>
</field>
<field x="32.5" type="Stringa" width="5" pattern="1">
<source>CODMAG</source>
</field>
<field x="39" type="Stringa" align="right" width="25" pattern="1">
<source>34.CODCMS</source>
</field>
<field x="67" type="Array" width="3" id="48" pattern="1">
<source>33.DATADOC[4,5]</source>
<list>
<li Value="01" Code="01" />
<li Value="02" Code="02" />
<li Value="03" Code="03" />
<li Value="04" Code="04" />
<li Value="05" Code="05" />
<li Value="06" Code="06" />
<li Value="07" Code="07" />
</list>
</field>
<field x="57" type="Stringa" hidden="1" width="2" id="49" pattern="1">
<source>IF(DOC.TIPODOC='BACQ',1,-1)</source>
</field>
<field x="83" type="Numero" align="right" width="10" id="50" pattern="1" hide_zero="1">
<source>QTA</source>
<prescript description="B1.50 PRESCRIPT">#THIS @
"F4.1"
#48 @
+
+!
</prescript>
</field>
<field x="80" type="Stringa" width="2" id="52" pattern="1">
<source>UMQTA</source>
</field>
</section>
<section type="Foot" />
<section type="Foot" level="1" />
<section type="Foot" level="2" />
<section type="Foot" level="3" height="1" />
<section type="Foot" level="4">
<field x="1" type="Stringa" width="9" pattern="1">
<source>CODART</source>
</field>
<field x="11" type="Stringa" bg_color="#FFFF80" width="45" pattern="1">
<source>47.DESCR+' '+47.DESCRAGG</source>
</field>
<field border="1" x="57.5" type="Stringa" align="center" bg_color="#C0C0C0" width="3" pattern="1">
<source>#B1.52</source>
</field>
<field border="1" x="60.5" type="Numero" align="right" width="9" id="101" pattern="1" text="###.###,@" />
<field border="1" x="69.5" type="Numero" align="right" width="9" id="102" pattern="1" text="###.###,@" />
<field border="1" x="78.5" type="Numero" align="right" width="9" id="103" pattern="1" text="###.###,@" />
<field border="1" x="87.5" type="Numero" align="right" width="9" id="104" pattern="1" text="###.###,@" />
<field border="1" x="96.5" type="Numero" align="right" width="9" id="105" pattern="1" text="###.###,@" />
<field border="1" x="105.5" type="Numero" align="right" width="9" id="106" pattern="1" text="###.###,@" />
<field border="1" x="114.5" type="Numero" align="right" width="9" id="107" pattern="1" text="###.###,@" />
<field border="1" x="123.5" type="Numero" align="right" width="9" id="108" pattern="1" text="###.###,@" />
<field border="1" x="132.5" type="Numero" align="right" width="9" id="109" pattern="1" text="###.###,@" />
<field border="1" x="141.5" type="Numero" align="right" width="9" id="110" pattern="1" text="###.###,@" />
<field border="1" x="150.5" type="Numero" align="right" width="9" id="111" pattern="1" text="###.###,@" />
<field border="1" x="159.5" type="Numero" align="right" width="9" id="112" pattern="1" text="###.###,@" />
</section>
<sql>USE 34 SELECT (CODNUM="MAG")&#26;&#26;(CODCMS=#OR14_CDCT)
BY 47.GRMERC
JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC
JOIN 47 INTO CODART==CODART
FROM CODNUM='MAG' ANNO=#OR14_ANNO
TO CODNUM='MAG' ANNO=#OR14_ANNO
</sql>
</report>

@ -34,9 +34,15 @@ ENDPAGE
PAGE "Ordini fornitori" 0 0 0 -3
DATE F_DATADOC
BEGIN
PROMPT 1 1 "Data documento "
FLAGS "A"
END
SPREADSHEET F_ARTICLES
BEGIN
PROMPT 1 1 "Articoli"
PROMPT 1 3 "Articoli"
ITEM "Codice\nArticolo@20"
ITEM "Descrizione@50"
ITEM "UM"

@ -63,6 +63,10 @@ Trasferimento a SERVUS
Trasferimento a SPICS
Esportazione documenti in formato testo formattato per Varauto verso il sistema Mercedes.
PS0001
Esportazione Salus
Esportazione prospetto scadenze Salus
PS0713 ATS
Trasferimento dati contabili
Trasferimento commesse
@ -84,6 +88,8 @@ Stampa ordini di produzione DBService
Aggiornamento IVA Documenti DBService
Pianificazione impianti DBService
PS0925 Coseaespoertaxione estratti conti su piu' ditte
PS1104
Importazione articoli da file .csv per ditta TENDER (pennari di prassiroma)

@ -12,13 +12,18 @@
#include "textset.h"
#include "clifo.h"
#include "cfven.h"
#include "comuni.h"
#include "doc.h"
#include "rdoc.h"
#include <clifo.h>
#include <cfven.h>
#include <comuni.h>
#include <doc.h>
#include <rdoc.h>
#include <causali.h>
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h>
#include "..\cg\cglib01.h"
#include "..\cg\cg2101.h"
#include "..\ve\velib.h"
@ -56,7 +61,7 @@ void TClienti_recset::add_field(const char* name, char tipo, int len, int from,
TClienti_recset::TClienti_recset(const char * query)
: TAS400_recordset(TString("AS400(2138)\n") << query)
: TAS400_recordset(TString("AS400(3002)\n") << query)
{
const char a = 'a';
const char n = 'n';
@ -68,10 +73,10 @@ TClienti_recset::TClienti_recset(const char * query)
add_field("FLD003", a, 1, 7); // stato record se A annullata
add_field(CLI_TIPOPERS, n, 1, 8); // società = 2 persona fisica = 1
add_field(CLI_RAGSOC, a, 45, 9); // Ragione sociale
add_field("FLD006", a, 30, 54); // indirizzo
add_field("FLD007", a, 25, 84); // Comune di residenza
add_field(CLI_INDCF, a, 30, 54); // indirizzo
add_field(CLI_COMCF, a, 25, 84); // Comune di residenza
add_field("FLD008", a, 2, 109); // Provincia di residenza
add_field("FLD009", a, 5, 121); // C.a.p.
add_field(CLI_CAPCF, a, 5, 121); // C.a.p.
add_field(CLI_COFI, a, 16, 126); // Codice fiscale o partita I.v.a
add_field(CLI_PAIV, a, 11, 142); // Partita I.v.a.
add_field("FLD012", a, 30, 153); // Indirizzo domicilio fiscale
@ -89,15 +94,99 @@ TClienti_recset::TClienti_recset(const char * query)
add_field("FLD024", a, 30, 312); // Indirizzo domicilio fiscale
add_field("FLD025", a, 23, 342); // Comune domicilio fiscale
add_field("FLD026", a, 5, 375); // C.a.p. domicilio fiscale
add_field(CLI_INDCF, a, 30, 394); // Indirizzo sede legale
add_field(CLI_COMCF, a, 25, 424); // comune sede legale
add_field("FLD027", a, 30, 394); // Indirizzo sede legale
add_field("FLD028", a, 25, 424); // comune sede legale
add_field("FLD029", a, 2, 449); // provincia sede legale
add_field(CLI_CAPCF, a, 5, 461); // c..a.p. sede legale
add_field("FLD030", a, 5, 461); // c..a.p. sede legale
add_field(CLI_PTEL, a, 4, 466); // prefisso telefonico sede legale
add_field(CLI_TEL, a, 10, 470); // numero telefonico sede legale
add_field("FLD033", a, 2, 480); // provincia costituzione
add_field("FLD034", n, 1, 494); // Domicilio fiscale diverso da legale se c'è 1 è diverso 0 è uguale}
add_field("FILLER", n, 1642, 495); // Domicilio fiscale diverso da legale se c'è 1 è diverso 0 è uguale}
add_field("FILLER", n, 2501, 495);
add_field(CLI_CODCF, n, 5, 2996); // codice cliente
}
///////////////////////////////////////////////////////////
// TMov_textset
///////////////////////////////////////////////////////////
class TMov_recset : public TAS400_recordset
{
TAssoc_array _index;
protected:
void add_field(const char* name = "Filler", char tipo = 'a', int len = 0, int from = -1,
const char* def = NULL);
public:
TMov_recset(const char * query);
};
void TMov_recset::add_field(const char* name, char tipo, int len, int from,
const char* def)
{
const bool required = false;
const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld;
const int pos = from - 1;
if (def && *def)
{
CHECKS(def == NULL || (int)strlen(def) <= len, "Invalid default value ", def);
TVariant var(def); var.convert_to(t);
create_field(name, pos, len, t, required, var);
}
else
create_field(name, pos, len, t, required);
}
TMov_recset::TMov_recset(const char * query)
: TAS400_recordset(TString("AS400(285)\n") << query)
{
const char a = 'a';
const char n = 'n';
const bool o = true;
const bool f = false;
add_field(MOV_NUMDOC, a, 5, 1); // NUMERO DOCUMENTO,
add_field(MOV_CODCAUS, a, 2, 6); // CAUSALE FATTURA
add_field("ANNOD", n, 4, 8); // ANNO DATA DOCUMENTO
add_field("MESED", n, 2, 12); // MEDE DATA DOCUMENTO
add_field("GIORNOD", n, 2, 14); // GIORNO DATA DOCUMENTO
add_field(MOV_CODCF, n, 4, 16); // CODICE CLIENTE ??????
add_field("Filler", n, 20, 2); // CODICE FILIALE
add_field("IMPONIBILE1", n, 15, 22); // PRIMO IMPONIBILE IVA
add_field("IMPONIBILE2", n, 15, 37); // SECONDO IMPONIBILE IVA
add_field("IMPONIBILE3", n, 15, 52); // TERZO IMPONIBILE IVA
add_field("IMPONIBILE4", n, 15, 67); // QUARTO IMPONIBILE IVA
add_field("CODIVA1", n, 2, 82); // PRIMA ALIQUOTA IVA
add_field("CODIVA2", n, 2, 84); // SECCONDA ALIQUOTA IVA,
add_field("CODIVA3", n, 2, 86); // TERZA ALIQUOTA IVA
add_field("CODIVA4", n, 3, 88); // QUARTA ALIQUOTA IVA
add_field("IMPOSTA1", n, 15, 90); // IVA SU PRIMO IMPONIBILE
add_field("IMPOSTA2", n, 15, 105); // IVA SU SECONDO IMPONIBILE
add_field("IMPOSTA3", n, 15, 120); // IVA SU TERZO IMPONIBILE
add_field("IMPOSTA4", n, 15, 135); // IVA SU QUARTO IMPONIBILE
add_field("FLD019", n, 15, 150); // TOTALE SPESE
add_field("FLD020", n, 15, 165); // TOTALE COMPETENZE ????? i conti ?
add_field("FLD021", n, 15, 180); // TOTALE ANTICIPO
add_field(MOV_RITFIS, n, 15, 195); // TOTALE RITENUTA ACCONTO
add_field("IMPOSTA", n, 15, 210); // TOTALE IVA
add_field(MOV_TOTDOC, n, 15, 225); // TOTALE FATTURA
add_field("MESEC", n, 2, 240); // MESE DI COMPETENZA
add_field("ANNOC", n, 4, 242); // ANNO DI COMPETENZA
add_field("FLSEZ", a, 1, 246); // DARE / AVERE = D o A
add_field("FLD028", a, 1, 247); // RISERVATO FLAG PAGAMENTO ???
add_field("FLD029", a, 1, 248); // RISERVATO,
add_field("FLD030", a, 1, 249); // RISERVATO TIPO FATTURAZIONE, ???
add_field(MOV_CODPAG, a, 3, 250); // CODICE PAGAMENTO
add_field("FLD032", n, 15, 252); // CDA 2% PER AVVOCATI ???
add_field("FLD033", a, 1, 267); // SOGGETTO RITENUTA ???
add_field("FLD034", a, 1, 268); // MODALITA' PAGAMENTO
add_field("FLD035", a, 1, 269); // PASSATO A COMPENSI A TERZI ???
add_field("FLD036", a, 7, 270); // RISERVATO
add_field("FLD037", n, 5, 277); // CODICE AZIENDA CONTABILITA'
add_field("FLD038", a, 1); // DELEGA ???
add_field("STATO", a, 1, 283); // STATO MOVIMENTO ???
}
// TAutomask
@ -185,6 +274,7 @@ public:
virtual bool destroy();
virtual void main_loop();
void load_cli();
void load_mov();
TPaghe2mov() {}
};
@ -239,38 +329,23 @@ void TPaghe2mov::load_cli()
if (clienti.get("FLD003").as_string() != "A")
{
bool found = false;
long codcf = clienti.get(CLI_CODCF).as_int();
clifo.zero();
clifo.put(CLI_TIPOCF, "C");
clifo.put(CLI_CODCF, codcf);
const bool found = clifo.read(_isequal) == NOERR;
if (cf.full())
{
clifo.setkey(4);
clifo.put(CLI_COFI, cf);
found = clifo.read(_isequal) == NOERR;
}
if (!found && paiv.full())
{
clifo.setkey(5);
clifo.put(CLI_PAIV, paiv);
found = clifo.read(_isequal) == NOERR;
}
clifo.setkey(1);
if (!found)
{
long codcf = 1L;
clifo.zero();
clifo.put(CLI_TIPOCF, "F");
if (clifo.read(_isgteq) == NOERR)
clifo.prev() ;
if (clifo.get(CLI_TIPOCF) == "C")
codcf += clifo.get_long(CLI_CODCF);
clifo.zero();
clifo.put(CLI_TIPOCF, "C");
clifo.put(CLI_CODCF, codcf);
cfven.zero();
cfven.put(CFV_TIPOCF, "C");
cfven.put(CFV_CODCF, codcf);
cfven.rewrite();
cfven.write();
}
else
if (!aggcli)
@ -328,6 +403,202 @@ void TPaghe2mov::load_cli()
}
}
void TPaghe2mov::load_mov()
{
TString query("SELECT * FROM ");
TFilename name = _m->get(F_INPATH);
name.add("arfat.txt");
if (name.exist())
{
TLocalisamfile movf(LF_MOV);
query << name;
TMov_recset movim(query);
TProgind pi(movim.items(), TR("Scansione movimenti"), true, true);
const TDate datareg(_m->get_date(F_DATAREG));
long numreg = 0L;
TEsercizi_contabili esc;
const int annoes = esc.date2esc(datareg);
TLocalisamfile movimenti(LF_MOV);
if (movimenti.last() == NOERR)
numreg = movimenti.get_long(MOV_NUMREG);
for (bool ok = movim.move_first(); ok; ok = movim.move_next())
{
if (!pi.addstatus(1))
break;
TMovimentoPN mov;
int cg_rows = 0;
TString8 codcaus(movim.get(MOV_CODCAUS).as_string());
codcaus.insert("0");
const TRectype & rec = cache().get(LF_CAUSALI, codcaus);
if (rec.empty())
{
TString msg("Causale ");
msg << movim.get(MOV_CODCAUS).as_string() << " assente";
_log->log(2, msg);
continue;
}
const TCausale caus(codcaus);
const TString8 codreg = rec.get(CAU_REG);
TRegistro & reg = caus.reg();
mov.lfile().put(MOV_NUMREG, ++numreg);
mov.lfile().put(MOV_ANNOES, annoes);
mov.lfile().put(MOV_DATAREG, datareg);
mov.lfile().put(MOV_ANNOIVA, datareg.year());
mov.lfile().put(MOV_TIPO, "C");
mov.lfile().put(MOV_CODCF, movim.get(MOV_CODCF).as_int());
const TDate datadoc(movim.get("GIORNOD").as_int(),
movim.get("MESED").as_int(),
movim.get("ANNOD").as_int());
mov.lfile().put(MOV_DATADOC, datadoc);
const TString16 numdoc = movim.get(MOV_NUMDOC).as_string();
mov.lfile().put(MOV_NUMDOC, numdoc);
mov.lfile().put(MOV_TIPODOC, caus.tipo_doc());
const real totdoc = movim.get(MOV_TOTDOC).as_real();
TRectype & rowtot = mov.cg(cg_rows++);
mov.lfile().put(MOV_TOTDOC, totdoc);
rowtot.put(RMV_SEZIONE, caus.sezione(1));
TBill c;
caus.bill(1, c);
rowtot.put(RMV_GRUPPO, c.gruppo());
rowtot.put(RMV_CONTO, c.conto());
rowtot.put(RMV_SOTTOCONTO, movim.get(MOV_CODCF).as_int());
rowtot.put(RMV_IMPORTO, totdoc);
rowtot.put(RMV_ROWTYPE, "T");
TRectype & rowric = mov.cg(cg_rows++);
rowric.put(RMV_SEZIONE, caus.sezione(2));
TBill r;
caus.bill(2, r);
rowric.put(RMV_GRUPPO, r.gruppo());
rowric.put(RMV_CONTO, r.conto());
rowric.put(RMV_SOTTOCONTO, r.sottoconto());
rowric.put(RMV_ROWTYPE, "I");
const real ritfis = movim.get(MOV_RITFIS).as_real();
if (ritfis != ZERO)
{
TBill c;
TRectype & row = mov.cg(cg_rows++);
mov.lfile().put(MOV_RITFIS, ritfis);
row.put(RMV_SEZIONE, caus.sezione(7));
caus.bill(7, c);
row.put(RMV_GRUPPO, c.gruppo());
row.put(RMV_CONTO, c.conto());
row.put(RMV_SOTTOCONTO, c.sottoconto());
row.put(RMV_IMPORTO, ritfis);
row.put(RMV_ROWTYPE, "F");
}
const real imposta = movim.get("IMPOSTA").as_real();
if (imposta != ZERO)
{
TBill c;
TRectype & row = mov.cg(cg_rows++);
row.put(RMV_SEZIONE, caus.sezione(3));
caus.bill(3, c);
row.put(RMV_GRUPPO, c.gruppo());
row.put(RMV_CONTO, c.conto());
row.put(RMV_SOTTOCONTO, c.sottoconto());
row.put(RMV_IMPORTO, imposta);
row.put(RMV_ROWTYPE, "D");
}
mov.lfile().put(MOV_CODCAUS, codcaus);
TString descr("Fattura n.ro ");
descr << numdoc << " del " << datadoc;
mov.lfile().put(MOV_DESCR, descr);
mov.lfile().put(MOV_REG, codreg);
int protiva = reg.protocol() + 1;
mov.lfile().put(MOV_PROTIVA, protiva);
TString8 codpag(movim.get(MOV_CODPAG).as_string());
if (codpag == "000")
codpag.cut(0);
mov.lfile().put(MOV_CODPAG, codpag);
const int annoc = movim.get("ANNOC").as_int();
const int mesec = movim.get("MESEC").as_int();
if (annoc != 0 && (annoc != datareg.year() || mesec != datareg.month()))
mov.lfile().put(MOV_DATACOMP, TDate(1, mesec, annoc));
else
mov.lfile().put(MOV_DATACOMP, datareg);
real totric;
for (int i= 1; i <= 4 ; i++)
{
TString16 fname("IMPONIBILE");
fname << i;
const real imp = movim.get(fname).as_real();
if (imp != ZERO)
{
TRectype & iva = mov.iva(i - 1);
bool swap = caus.sezione(2) == 'D';
totric += imp;
iva.put(RMI_IMPONIBILE, imp);
fname = "CODIVA";
fname << i;
iva.put(RMI_CODIVA, movim.get(fname).as_string());
fname = "IMPOSTA";
fname << i;
const real imposta = movim.get(fname).as_real();
iva.put(RMI_IMPOSTA, imposta);
iva.put(RMI_GRUPPO, r.gruppo());
iva.put(RMI_CONTO, r.conto());
iva.put(RMI_SOTTOCONTO, r.sottoconto());
iva.put(RMI_RIGAIMP, 2);
if (imposta != ZERO)
iva.put(RMI_RIGAIVA, 3);
}
}
rowric.put(RMV_IMPORTO, totric);
mov.adjust_rowtypes();
const int err = mov.write();
TString msg("Movimento n.ro ");
msg << numreg;
if (err == NOERR)
{
reg.update(protiva, datareg);
_log->log(0, msg);
}
else
{
msg << " - errore n. " << err;
_log->log(2, msg);
}
}
}
}
void TPaghe2mov::main_loop()
{
// eliminazione files delle elaborazioni precedenti
@ -338,12 +609,13 @@ void TPaghe2mov::main_loop()
FOR_EACH_ARRAY_ROW(transactions, row, name)
remove_file(*name);
// main
if (_m->run() == K_ENTER)
while (_m->run() == K_ENTER)
{
const char* const title = TR("Importazione clienti");
_log = new TLog_report(title);
load_cli();
load_mov();
TReport_book book;
book.add(*_log);
book.preview();

@ -4,3 +4,4 @@
#define F_RAGSOC 102
#define F_INPATH 103
#define F_AGGCLI 104
#define F_DATAREG 105

@ -9,7 +9,7 @@ END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 3 2 "Codice "
PROMPT 3 2 "Codice "
FLAGS "FD"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
@ -25,12 +25,12 @@ END
GROUPBOX DLG_NULL 76 3
BEGIN
PROMPT 2 4 "Sorgente"
PROMPT 2 4 "Sorgente"
END
STRING F_INPATH 256 39
BEGIN
PROMPT 3 5 "Cartella "
PROMPT 3 5 "Cartella "
DSELECT
CHECKTYPE REQUIRED
FIELD PagheInPath
@ -42,6 +42,12 @@ BEGIN
FIELD AggCli
END
DATE F_DATAREG
BEGIN
PROMPT 3 8 "Data registrazione "
FIELD DataReg
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""

77
ps/pg0099100a.rep Executable file

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report name="pg0099100a" lpi="6">
<description>Elenco versamenti da effettuare</description>
<font face="Arial" size="8" />
<section type="Head">
<font face="Arial" bold="1" size="8" />
<field type="Testo" align="right" width="7" pattern="1" text="N.Doc." />
<field x="10" type="Testo" width="10" pattern="1" text="Cliente" />
<field x="68" type="Testo" align="right" width="10" pattern="1" text="Imponibile" />
<field x="79" type="Testo" align="right" width="10" pattern="1" text="Imposta" />
<field x="90" type="Testo" align="right" width="10" pattern="1" text="Rit. Prof." />
<field x="101" type="Testo" align="right" width="10" pattern="1" text="Rit. Acc." />
<field x="112" type="Testo" align="right" width="10" pattern="1" text="Tot. Doc." />
<field border="1" x="1" y="1" type="Linea" width="130" height="0" pattern="1" />
</section>
<section type="Head" level="1">
<field border="2" radius="100" x="33" y="0.5" type="Rettangolo" width="60" height="2" pattern="1" />
<field x="33" y="1" type="Testo" align="center" width="60" height="2" pattern="1" text="Elenco versamenti da effettuare">
<font face="Arial" size="14" />
</field>
</section>
<section type="Body" />
<section type="Body" level="1">
<field x="1" type="Numero" align="right" width="6" pattern="1">
<source>NDOC</source>
</field>
<field x="9" type="Numero" align="right" width="6" pattern="1">
<source>CLIFO.CODCF</source>
</field>
<field x="16" type="Stringa" width="50" pattern="1">
<source>CLIFO.RAGSOC</source>
</field>
<field x="68" type="Valuta" align="right" width="10" pattern="1" text="#########,@@">
<source>IMPONIBILI</source>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.101</postscript>
</field>
<field x="79" type="Valuta" align="right" width="10" pattern="1" text="#########,@@">
<source>IMPOSTE</source>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.102</postscript>
</field>
<field x="90" type="Valuta" align="right" width="10" pattern="1" text="#########,@@">
<source>TOTRITSOC</source>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.103</postscript>
</field>
<field x="101" type="Valuta" align="right" width="10" pattern="1" text="#########,@@">
<source>TOTRITFIS</source>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.104</postscript>
</field>
<field x="112" type="Valuta" align="right" width="10" pattern="1" text="#########,@@">
<source>TOTDOC</source>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.105</postscript>
</field>
</section>
<section type="Foot">
<font face="Arial" bold="1" size="8" />
<field border="1" type="Linea" width="130" height="0" pattern="1" />
<field x="106" type="Testo" width="4" pattern="1" text="Pag." />
<field x="110" type="Numero" align="right" width="3" pattern="1">
<source>#REPORT.PAGE</source>
</field>
</section>
<section type="Foot" level="1">
<font face="Arial" bold="1" size="8" />
<field border="1" x="1" type="Linea" width="130" height="0" pattern="1" />
<field x="50" y="0.5" type="Testo" width="10" pattern="1" text="TOTALI" />
<field x="68" y="0.5" type="Valuta" align="right" width="10" id="101" pattern="1" text="#########,@@" />
<field x="79" y="0.5" type="Valuta" align="right" width="10" id="102" pattern="1" text="#########,@@" />
<field x="90" y="0.5" type="Valuta" align="right" width="10" id="103" pattern="1" text="#########,@@" />
<field x="101" y="0.5" type="Valuta" align="right" width="10" id="104" pattern="1" text="#########,@@" />
<field x="112" y="0.5" type="Valuta" align="right" width="10" id="105" pattern="1" text="#########,@@" />
</section>
<sql>USE DOC
SELECT BETWEEN(DATADOC,#DADATA,#ADATA)
JOIN CLIFO INTO TIPOCF=="C" CODCF==CODCF
FROM PROVV="D" ANNO=#ANNO CODNUM=#CODNUM
TO PROVV="D" ANNO=#ANNO CODNUM=#CODNUM</sql>
</report>

93
ps/pg0099100a.uml Executable file

@ -0,0 +1,93 @@
PAGE "Stampa elenco versamenti da effettuare" -1 -1 80 10
NUMBER 251 5
BEGIN
PROMPT 1 1 "Ditta "
FLAGS "FRD"
USE 9 KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA 251
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale @50" RAGSOC
OUTPUT 251 CODDITTA
OUTPUT 252 RAGSOC
END
STRING 252 50
BEGIN
PROMPT 15 1 ""
FLAGS "D"
END
GROUPBOX -1 78 5
BEGIN
PROMPT 1 3 "@bParametri documenti di vendita"
FLAGS ""
END
STRING 253 4
BEGIN
PROMPT 2 4 "Numerazione "
USE %NUM
INPUT CODTAB 253
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT 253 CODTAB
OUTPUT 254 S0
CHECKTYPE FORCED
FLAGS "UPA"
FIELD CODNUM
END
STRING 254 50
BEGIN
PROMPT 22 4 ""
USE %NUM KEY 2
INPUT S0 254
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT 253
END
NUMBER 255 4
BEGIN
PROMPT 2 5 "Anno "
USE ESC
INPUT CODTAB 255
DISPLAY "Codice Esercizio" CODTAB
DISPLAY "Data inizio esercizio" D0
DISPLAY "Data fine esercizio " D1
CHECKTYPE REQUIRED
OUTPUT 255 CODTAB
OUTPUT 256 D0
OUTPUT 257 D1
NUM_EXPR #F_ANNO>0
FLAGS "AP"
FIELD ANNO
END
DATE 256
BEGIN
PROMPT 2 6 "Da data "
FIELD DADATA
END
DATE 257
BEGIN
PROMPT 30 6 "A data "
FIELD ADATA
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

@ -528,6 +528,8 @@ void TListino_textset::add_field(const char* name, int len,
TString80 fname(name);
const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld;
if (tipo == 'r')
tipo = _realfld;
const int pos = from - 1;
if (def && *def)
{
@ -544,6 +546,7 @@ TListino_textset::TListino_textset(const char* query)
{
const char an = 'a';
const char n = 'n';
const char r = 'r';
add_field("LVALAR", 1, an, 1); // MFARLI00
add_field("LGRUPP", 2, an, 2);
@ -553,8 +556,8 @@ TListino_textset::TListino_textset(const char* query)
add_field("LCFTAB", 6, an, 33);
add_field("LCOPRI", 1, an, 39);
add_field("LDESAR", 40, an, 40);
add_field("LLISTI", 22, an, 80);
add_field("LCOSTO", 22, an, 102);
add_field("LLISTI", 22, r, 80);
add_field("LCOSTO", 22, r, 102);
add_field("LLIFVE", 22, an, 124);
add_field("LDTSCA", 19, an, 146);
add_field("LSCOD1", 22, an, 165);

@ -9,4 +9,6 @@
#define F_GI 109
#define F_CS 110
#define F_TB 111
#define F_DATALIM 112
#define F_DATAMOV 113

30
ps/ps0001.cpp Executable file

@ -0,0 +1,30 @@
#include <xvt.h>
#include "ps0001.h"
int main(int argc, char** argv)
{
const int op = argc < 2 ? 0 : argv[1][1]-'0';
switch (op)
{
case 0:
ps0001100(argc,argv);
break;
case 1:
ps0001200(argc,argv);
break;
case 2:
ps0001300(argc,argv);
break;
default:
ps0001100(argc,argv);
break;
}
exit(0);
return 0;
}

3
ps/ps0001.h Executable file

@ -0,0 +1,3 @@
int ps0001100(int argc, char* argv[]);
int ps0001200(int argc, char* argv[]);
int ps0001300(int argc, char* argv[]);

1594
ps/ps0001100.cpp Executable file

File diff suppressed because it is too large Load Diff

13
ps/ps0001100.h Executable file

@ -0,0 +1,13 @@
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_PATH 103
#define F_CL 104
#define F_FO 105
#define F_BC 106
#define F_PC 107
#define F_PF 108
#define F_SA 110
#define F_MO 111
#define F_DATALIM 112
#define F_DATAMOV 113

94
ps/ps0001100.uml Executable file

@ -0,0 +1,94 @@
#include "ps0001100.h"
PAGE "Invio dati contabilita'" -1 -1 80 14
GROUPBOX DLG_NULL 76 3
BEGIN
PROMPT 2 1 "@bDitta corrente"
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 3 2 "Codice "
FLAGS "FD"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 23 2 ""
FLAGS "D"
END
DATE F_DATALIM
BEGIN
PROMPT 2 4 "Data limite "
FIELD datalim
END
DATE F_DATAMOV
BEGIN
PROMPT 40 4 "Data movimenti "
FIELD datamov
END
BOOLEAN F_CL
BEGIN
PROMPT 2 6 "Clienti"
FIELD cl
END
BOOLEAN F_FO
BEGIN
PROMPT 14 6 "Fornitori"
FIELD fo
END
BOOLEAN F_PC
BEGIN
PROMPT 26 6 "Partite clienti"
FIELD pc
END
BOOLEAN F_PF
BEGIN
PROMPT 40 6 "Partite fornitori"
FIELD pf
END
BOOLEAN F_SA
BEGIN
PROMPT 59 6 "Saldi"
FIELD cs
END
BOOLEAN F_MO
BEGIN
PROMPT 69 6 "Movimenti"
FIELD mo
END
STRING F_PATH 256 30
BEGIN
PROMPT 2 8 "Cartella di output "
DSELECT
CHECKTYPE REQUIRED
FIELD Outth
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

1158
ps/ps0001200.cpp Executable file

File diff suppressed because it is too large Load Diff

13
ps/ps0001200.h Executable file

@ -0,0 +1,13 @@
#include "../sc/scselmsk.h"
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_DATASTAMPA 103
#define F_DATAOPERAZIONE 104
#define F_DATASCADUTO 105
#define F_GIORNI 106
#define F_VALUTA 107
#define F_SCADINFASCE 201
#define F_SCADFASCE 202
#define F_ASCADINFASCE 203
#define F_ASCADFASCE 204

240
ps/ps0001200.uml Executable file

@ -0,0 +1,240 @@
#include "ps0001200.h"
PAGE "Stampa Previsione Incassi/Pagamenti Salus" -1 -1 78 20
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Cod. "
FLAGS "DFR"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50 46
BEGIN
PROMPT 14 1 "R.S. "
FLAGS "D"
END
GROUPBOX DLG_NULL 68 7
BEGIN
PROMPT 1 2 ""
END
DATE F_DATASTAMPA
BEGIN
PROMPT 2 3 "Data di stampa "
HELP "Data di stampa"
CHECKTYPE REQUIRED
WARNING "Si deve specificare la data di stampa"
FLAGS "A"
END
DATE F_DATAOPERAZIONE
BEGIN
PROMPT 2 4 "Data limite operazione "
HELP "Data limite operazione"
CHECKTYPE REQUIRED
FLAGS "A"
END
DATE F_DATASCADUTO
BEGIN
PROMPT 2 5 "Data limite scaduto "
HELP "Data limite scaduto"
CHECKTYPE REQUIRED
WARNING "Data limite scaduto non valida"
END
NUMBER F_GIORNI 3
BEGIN
PROMPT 2 6 "Giorni per calcolo rischio "
HELP "Inserire il numero di giorni per il calcolo del rischio"
END
BOOLEAN F_VALUTA
BEGIN
PROMPT 2 7 "Stampa in valuta"
HELP "Selezionare se si vuole la stampa in valuta"
END
RADIOBUTTON SC_CLIFO 20
BEGIN
PROMPT 1 9 "Selezione"
ITEM "C|Clienti" MESSAGE ENABLE, F_GIORNI|K_SPACE,SC_SORTCF
ITEM "F|Fornitori" MESSAGE DISABLE, F_GIORNI|K_SPACE,SC_SORTCF
//ITEM "P|Conti" MESSAGE DISABLE, F_GIORNI|K_SPACE,SC_SORTCF
END
RADIOBUTTON SC_SORTCF 29
BEGIN
GROUP 1
PROMPT 23 9 "Ordinamento"
ITEM "1|Per codice/conto"
ITEM "2|Per rag.soc./descrizione"
END
BUTTON SC_SELECT 10 1
BEGIN
PROMPT 55 10 "S~elezione"
END
BUTTON SC_RESET 10 1
BEGIN
PROMPT 55 11 "A~zzera"
END
NUMBER SC_CFCODFR 6
BEGIN
PROMPT 2 14 "Da codice "
FLAGS "B"
GROUP 3
END
NUMBER SC_CFCODTO 6
BEGIN
PROMPT 37 14 "a codice "
FLAGS "B"
GROUP 3
END
STRING SC_CFDESFR 50 40
BEGIN
PROMPT 2 14 "Da ragione sociale "
GROUP 4
FLAGS "HB"
END
STRING SC_CFDESTO 50 40
BEGIN
PROMPT 2 15 "A ragione sociale "
GROUP 4
FLAGS "HB"
END
NUMBER SC_PCONCODFR1 3
BEGIN
PROMPT 2 14 "Da conto "
GROUP 5
END
NUMBER SC_PCONCODFR2 3
BEGIN
PROMPT 15 14 ""
GROUP 5
END
NUMBER SC_PCONCODFR3 6
BEGIN
PROMPT 19 14 ""
FLAGS "B"
GROUP 5
END
NUMBER SC_PCONCODTO1 3
BEGIN
PROMPT 31 14 "a conto "
GROUP 5
END
NUMBER SC_PCONCODTO2 3
BEGIN
PROMPT 43 14 ""
GROUP 5
END
NUMBER SC_PCONCODTO3 6
BEGIN
PROMPT 47 14 ""
FLAGS "B"
GROUP 5
END
STRING SC_PCONDESFR 50 40
BEGIN
PROMPT 2 14 "Da descrizione "
GROUP 6
FLAGS "HB"
END
STRING SC_PCONDESTO 50 40
BEGIN
PROMPT 2 15 "A descrizione "
GROUP 6
FLAGS "HB"
END
NUMBER SC_NSEL 3
BEGIN
PROMPT 60 13 "N. "
FLAGS "D"
END
BOOLEAN F_SCADINFASCE
BEGIN
PROMPT 2 16 "Scaduto suddiviso in fasce"
HELP "Selezionare se si vuole la stampa scaduto suddiviso in fasce"
MESSAGE TRUE ENABLE,F_SCADFASCE
MESSAGE FALSE RESET,F_SCADFASCE|DISABLE,F_SCADFASCE
END
LISTBOX F_SCADFASCE 3
BEGIN
PROMPT 35 16 "Fino alla fascia "
ITEM "0|0"
ITEM "1|30"
ITEM "2|60"
ITEM "3|90"
ITEM "4|120"
ITEM "5|150"
ITEM "6|180"
ITEM "7|210"
ITEM "8|240"
END
BOOLEAN F_ASCADINFASCE
BEGIN
PROMPT 2 17 "A scadere suddiviso in fasce"
HELP "Selezionare se si vuole la stampa a scadere suddiviso in fasce"
MESSAGE TRUE ENABLE,F_ASCADFASCE
MESSAGE FALSE RESET,F_ASCADFASCE|DISABLE,F_ASCADFASCE
END
LISTBOX F_ASCADFASCE 3
BEGIN
PROMPT 35 17 "Fino alla fascia "
ITEM "0|0"
ITEM "1|30"
ITEM "2|60"
ITEM "3|90"
ITEM "4|120"
ITEM "5|150"
ITEM "6|180"
ITEM "7|210"
ITEM "8|240"
NUM_EXPR {#F_SCADFASCE+#F_ASCADFASCE < 10}
WARNING "E' possibile selezionare massimo 9 fasce in totale"
END
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -13 -1 ""
MESSAGE EXIT,K_ENTER
END
BUTTON DLG_EDIT 10 2
BEGIN
PROMPT -23 -1 ""
PICTURE BMP_EDIT
MESSAGE EXIT,69
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
ENDMASK

66
ps/ps0001300.cpp Executable file

@ -0,0 +1,66 @@
#include <tabapp.h>
#include "ps0001.h"
#include "ps0001300.h"
class TSispac_multirel_app : public TMultirel_application
{
protected:
virtual void set_descr(TMask & m, const TString & desc);
virtual void get_mask_name(TString& tabname) const;
//magico metodo per impedire la navigazione su tabelle diverse da quella corrente del cursore
virtual bool has_filtered_cursor() const { return true; }
virtual bool user_create();
virtual void init_query_mode(TMask& m);
virtual void init_query_insert_mode(TMask& m);
public:
TSispac_multirel_app() {}
virtual ~TSispac_multirel_app() {}
};
void TSispac_multirel_app::set_descr(TMask & m, const TString & desc)
{
m.set(F_DESC, desc);
}
void TSispac_multirel_app::get_mask_name(TString& tabname) const
{
TMultirel_application::get_mask_name(tabname);
tabname.overwrite("dv", 2);
}
void TSispac_multirel_app::init_query_mode(TMask& m)
{
TMultirel_application::init_query_mode(m);
m.show(-1);
m.hide(-2);
}
void TSispac_multirel_app::init_query_insert_mode(TMask& m)
{
TMultirel_application::init_query_insert_mode(m);
m.hide(-1);
m.show(-2);
}
bool TSispac_multirel_app::user_create()
{
bool ok = TMultirel_application::user_create();
if (ok)
{
TMask & m = *get_mask();
set_search_field(F_CODTAB);
}
return ok;
}
int ps0001300(int argc, char* argv[])
{
TSispac_multirel_app a;
a.run(argc, argv, TR("Tabella"));
return 0;
}

5
ps/ps0001300.h Executable file

@ -0,0 +1,5 @@
#define F_COD 101
#define F_CODTAB 102
#define F_DESC 103
#define F_COD_CAMPO 104
#define F_CODTAB1 105

@ -9,7 +9,8 @@ int main(int argc, char** argv)
{
case 0: ps0713100(argc, argv); break; //Trasferimento dati contabili per ATS
case 1: ps0713200(argc, argv); break; //Trasferimento commesse
case 2: ps0713300(argc, argv); break; //Importazione fatture per ATS
case 2: ps0713300(argc, argv); break; //Importazione fatture di acquisto per ATS
case 3: ps0713400(argc, argv); break; //Importazione fatture di vendita per ATS
default:
ps0713100(argc, argv); break; //Trasferimento dati contabili per ATS
}

@ -1,3 +1,4 @@
int ps0713100(int argc, char* argv[]);
int ps0713200(int argc, char* argv[]);
int ps0713300(int argc, char* argv[]);
int ps0713400(int argc, char* argv[]);

377
ps/ps0713400.cpp Executable file

@ -0,0 +1,377 @@
#include <automask.h>
#include <progind.h>
#include <utility.h>
#include <textset.h>
#include "ps0713.h"
#include "ps0713400a.h"
#include "../cg/cglib01.h"
#include "../mg/anamag.h"
#include "../ve/velib.h"
#include "clifo.h"
#include "doc.h"
#include "rdoc.h"
///////////////////////////////////////////////////////////
// TAutomask
///////////////////////////////////////////////////////////
class TImportaFatVen_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TImportaFatVen_mask();
};
TImportaFatVen_mask::TImportaFatVen_mask() :TAutomask ("ps0713400a")
{
}
bool TImportaFatVen_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
{
switch (f.dlg())
{
//giochetto per avere la lista dei files validi nella directory di trasferimento!
case F_NAME:
if (e == fe_button)
{
TArray_sheet as(-1, -1, 72, 20, TR("Selezione file"),
"File@32");
TFilename path = get(F_PATH);
path.add("*.csv"); //files delle testate
list_files(path, as.rows_array());
TFilename name;
FOR_EACH_ARRAY_ROW(as.rows_array(), i, row)
{
name = *row;
*row = name.name();
}
if (as.run() == K_ENTER)
{
f.set(as.row(as.selected()));
}
}
break;
default:
break;
}
return true;
}
///////////////////////////////////////////////
//// CLASSI DERIVATE PER IMPORTAZIONE DATI ////
///////////////////////////////////////////////
/////////////////////////////////////////////////////////////
// Recordset specifici per i dati da trasferire
/////////////////////////////////////////////////////////////
class TImportaFatVen_recordset : public TCSV_recordset
{
protected:
virtual TRecnotype new_rec(const char* buf = NULL);
public:
TImportaFatVen_recordset(const char * fileName);
};
TRecnotype TImportaFatVen_recordset::new_rec(const char* buf)
{
TToken_string str(256,'\t'); //nuovo record tab separator
if(buf && *buf)
{
bool apici=false;
for (const char* c = buf; *c ; c++)
{
if (*c == '"')
{
apici = !apici;
}
else
{
if (*c == ',')
{
if (!apici)
str << str.separator();
else
str << *c;
}
else
str << *c;
}
}
}
const TRecnotype n = TText_recordset::new_rec(str);
if (n >= 0)
row(n).separator(str.separator());
return n;
}
TImportaFatVen_recordset::TImportaFatVen_recordset(const char * fileName)
: TCSV_recordset("CSV(,)")
{
load_file(fileName);
}
///////////////////////////////////////
// TSkeleton_application
///////////////////////////////////////
class TImportaFatVen_applicat : public TSkeleton_application
{
virtual bool check_autorization() const {return false;}
virtual const char * extra_modules() const {return "ve";}
TImportaFatVen_mask* _msk;
protected:
long togli_apici_numero(TImportaFatVen_recordset & s, int i);
const TString& togli_apici(TImportaFatVen_recordset & s, int i);
bool find_clifo(long& codcf, TString& paiv, long& abi, long& cab, TString& codpag);
public:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
bool transfer(const TFilename& file);
TImportaFatVen_applicat() {}
};
long TImportaFatVen_applicat::togli_apici_numero(TImportaFatVen_recordset & s, int i)
{
TString80 tmp = s.get(i).as_string();
tmp.strip("\"");
return atol(tmp);
}
const TString& TImportaFatVen_applicat::togli_apici(TImportaFatVen_recordset & s, int i)
{
TString& tmp = get_tmp_string();
tmp = s.get(i).as_string();
tmp.strip("\"");
tmp.trim();
return tmp;
}
bool TImportaFatVen_applicat::find_clifo(long& codcf, TString& paiv, long& abi, long& cab, TString& codpag)
{
if (!paiv.blank())
{
TISAM_recordset clienti("USE CLIFO KEY 5\nFROM TIPOCF='C' STATOPAIV="" PAIV=#PAIV\nTO TIPOCF='C' STATOPAIV="" PAIV=#PAIV");
clienti.set_var("#PAIV", TVariant(paiv));
if (clienti.move_first())
{
codcf = clienti.get(CLI_CODCF).as_int();
paiv = clienti.get(CLI_PAIV).as_string();
abi = clienti.get(CLI_CODABI).as_int();
cab = clienti.get(CLI_CODCAB).as_int();
codpag = clienti.get(CLI_CODPAG).as_string();
return true;
}
}
return false;
}
bool TImportaFatVen_applicat::transfer(const TFilename& file)
{
const TString4 codnum = "F01"; //??????????????????????????
const TString4 tpdoc = "F01"; //??????????????????????????
TImportaFatVen_recordset s(file);
TProgind pi(s.items(),"Importazione fatture in corso ...",true,true);
for (bool ok=s.move_first();ok;ok=s.move_next())
{
if (!pi.addstatus(1))
break;
if (s.get(0).as_string().blank())
break;
//leggo il contenuto del tracciato record
//campi documento
const long ndoc = togli_apici_numero(s,0); //ndoc
const TDate datadoc = togli_apici(s,1); //datadoc
//campi articolo 1
TString descr1 = togli_apici(s,2); //descrizione aritcolo 1
const TString80 art1 = togli_apici(s,3); //articolo 1
const real imp1 = togli_apici(s,4); //imponibile articolo 1
//campi articolo 2
const TString descr2 = togli_apici(s,5); //descrizione articolo 2
const real imp2 = togli_apici(s,6); //imponibile articolo 2
//campi articolo 3
const TString16 descr3 = togli_apici(s,7); //articolo 3
const real impives = togli_apici(s,8); //imponibile iva esente
//partita iva, mi serve per sapere se un cliente esiste già in clifo
TString16 paiv = togli_apici(s,9); //partita iva
//prendo codiva da anamag
const TRectype& anamag = cache().get(LF_ANAMAG,art1);
const TString16 codiva = anamag.get(ANAMAG_CODIVA);
//codice commessa
const TString16 codcms = togli_apici(s,17);
//cerco gli altri dati di interesse
const int anno = datadoc.year(); //anno documento
long codcf;
long abi;
long cab;
TString4 codpag;
if (!find_clifo(codcf, paiv, abi, cab, codpag))
{
//campi cliente (da utilizzare se non esiste già)
const TString80 ragsoc = togli_apici(s,10); //ragione sociale
const TString80 ind = togli_apici(s,11); //indirizzo
const TString4 nciv = togli_apici_numero(s,12); //numero civico
const long cap = togli_apici_numero(s,13); //CAP
const TString80 comune = togli_apici(s,14); //comune
const TString80 loc = togli_apici(s,15); //località
const TString4 prov = togli_apici(s,16); //provincia
const TString& codcom = cap2comune(cap, comune); //codice comune
TLocalisamfile clifo(LF_CLIFO);
//calcolo il prossimo codice cliente libero
codcf = 1L ;
if (!clifo.empty())
{
clifo.put(CLI_TIPOCF, 'F');
if (clifo.read(_isgteq) == NOERR)
clifo.prev();
else
clifo.last();
if (clifo.get_char(CLI_TIPOCF) == 'C')
codcf += clifo.get_long(CLI_CODCF);
}
//inserisco i dati di interesse
clifo.put(CLI_TIPOCF, "C");
clifo.put(CLI_CODCF, codcf);
clifo.put(CLI_RAGSOC, ragsoc);
clifo.put(CLI_PAIV, paiv);
clifo.put(CLI_INDCF, ind);
clifo.put(CLI_CIVCF, nciv);
clifo.put(CLI_CAPCF, cap);
clifo.put(CLI_COMCF, codcom);
clifo.put(CLI_LOCCF, loc);
clifo.write();
abi = 0;
cab = 0;
codpag = "";
}
TDocumento doc('D', anno, codnum, ndoc);
doc.put(DOC_TIPODOC, tpdoc);
doc.put(DOC_DATADOC, datadoc);
doc.put(DOC_TIPOCF, 'C');
doc.put(DOC_CODCF, codcf);
doc.put(DOC_CODABIA, abi);
doc.put(DOC_CODCABA, cab);
doc.put(DOC_CODPAG, codpag);
doc.put(DOC_CODCMS, codcms);
if (imp1 != 0)
{
TRiga_documento& rdoc = doc.new_row("01");
if (descr1.len() <= 50)
rdoc.put(RDOC_DESCR, descr1);
else
{
rdoc.put(RDOC_DESCR, descr1.sub(0,49));
rdoc.put(RDOC_DESCLUNGA, true);
rdoc.put(RDOC_DESCEST, descr1.sub(50));
}
rdoc.put(RDOC_PREZZO, imp1);
rdoc.put(RDOC_QTA, 1);
rdoc.put(RDOC_CODART, art1);
rdoc.put(RDOC_CODARTMAG, art1);
rdoc.put(RDOC_CHECKED, "X");
rdoc.put(RDOC_CODIVA, codiva);
}
if (imp2 != 0)
{
TRiga_documento& rdoc = doc.new_row("01");
rdoc.put(RDOC_DESCR, descr2);
rdoc.put(RDOC_PREZZO, imp2);
rdoc.put(RDOC_QTA, 1);
rdoc.put(RDOC_CODART, art1);
rdoc.put(RDOC_CODARTMAG, art1);
rdoc.put(RDOC_CHECKED, "X");
rdoc.put(RDOC_CODIVA, codiva);
}
if (impives != 0)
{
TRiga_documento& rdoc = doc.new_row("01");
rdoc.put(RDOC_PREZZO, impives);
rdoc.put(RDOC_QTA, 1);
rdoc.put(RDOC_CHECKED, "X");
rdoc.put(RDOC_CODIVA, codiva); //??????????????????????????????????
}
doc.write();
}
return true;
}
bool TImportaFatVen_applicat::create()
{
_msk = new TImportaFatVen_mask();
return TSkeleton_application::create();
}
bool TImportaFatVen_applicat::destroy()
{
delete _msk;
return TApplication::destroy();
}
void TImportaFatVen_applicat::main_loop()
{
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
//genero il nome del file da caricare
TFilename name = _msk->get(F_PATH);
name.add(_msk->get(F_NAME));
transfer(name);
}
}
TImportaFatVen_applicat& app() { return (TImportaFatVen_applicat&) main_app(); }
int ps0713400 (int argc, char* argv[])
{
TImportaFatVen_applicat main_app;
main_app.run(argc, argv, TR("Importazione Fatture"));
return true;
}

6
ps/ps0713400a.h Executable file

@ -0,0 +1,6 @@
//campi maschera ps0713400a
#define F_CODITTA 101
#define F_RAGSOC 102
#define F_PATH 103
#define F_NAME 104

71
ps/ps0713400a.uml Executable file

@ -0,0 +1,71 @@
#include "ps0713400a.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_ELABORA 10 2
BEGIN
PICTURE BMP_ELABORA
MESSAGE EXIT,K_ENTER
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
STRING DLG_PROFILE 50
BEGIN
PROMPT 9 0 "Profilo "
PSELECT
FLAGS "H"
END
ENDPAGE
PAGE "Inserimento fatture" 0 0 0 -3
GROUPBOX DLG_NULL 90 3
BEGIN
PROMPT 2 1 "@bDitta corrente"
END
NUMBER F_CODITTA 5
BEGIN
PROMPT 3 2 "Codice "
FLAGS "FD"
USE LF_NDITTE
INPUT CODDITTA F_CODITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 23 2 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 90 4
BEGIN
PROMPT 2 4 "@bSorgente"
END
STRING F_PATH 256 39
BEGIN
PROMPT 3 5 "Cartella "
DSELECT
CHECKTYPE REQUIRED
FIELD ComInPath
END
STRING F_NAME 18
BEGIN
PROMPT 3 6 "File "
FIELD ComInFile
CHECKTYPE REQUIRED
END
ENDPAGE
ENDMASK

16
ps/ps0925.cpp Executable file

@ -0,0 +1,16 @@
#include <xvt.h>
#include "ps0925.h"
int main(int argc, char** argv)
{
int n = argc > 1 ? atoi(argv[1]+1) : 0;
switch(n)
{
case 0:
default:
ps0925100(argc, argv); break; //Stampa ordini di produzione DBService
}
exit(0);
return 0;
}

1
ps/ps0925.h Executable file

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

1985
ps/ps0925100.cpp Executable file

File diff suppressed because it is too large Load Diff

25
ps/ps0925100a.h Executable file

@ -0,0 +1,25 @@
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_CODPROF 103
#define F_LINPROF 104
#define F_DESPROF 105
#define F_DATALIMOP 110
#define F_DATALIMSC 111
#define F_GIORISCH 112
#define F_STAMPCHIU 113
#define F_DATACHIU 114
#define F_LUOGOSEND 115
#define F_DATASEND 116
#define F_CLIFO 117
#define F_STAMPSALDO 118
#define F_ULTIMOEC 119
#define F_GROUPAGENT 120
#define F_FROM_AGENT 121
#define F_FROM_AGENT_D 122
#define F_TO_AGENT 123
#define F_TO_AGENT_D 124
#define F_CODDITTATO 125
#define F_RAGSOCTO 126
// basename of profile
#define BASE_EC_PROFILE "PEC"

283
ps/ps0925100a.uml Executable file

@ -0,0 +1,283 @@
#include "scselmsk.h"
#include "ps0925100a.h"
TOOLBAR "Toobar" 0 -3 0 3
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -13 -11 ""
MESSAGE EXIT,K_ENTER
END
BUTTON DLG_EDIT 10 2
BEGIN
PROMPT -23 -11 ""
PICTURE BMP_EDIT
MESSAGE EXIT,69
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -33 -11 ""
END
ENDPAGE
PAGE "Stampa estratti conto" -1 -1 70 20
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 0 "@bDitta"
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Da codice "
FLAGS "FR"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice@7" CODDITTA
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50 44
BEGIN
PROMPT 22 1 "Rag. Soc. "
FLAGS "DP"
END
NUMBER F_CODDITTATO 5
BEGIN
PROMPT 3 2 "A codice "
FLAGS "FR"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTATO
COPY DISPLAY F_CODDITTA
OUTPUT F_CODDITTATO CODDITTA
OUTPUT F_RAGSOCTO RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOCTO 44
BEGIN
PROMPT 22 2 "Rag. Soc. "
FLAGS "DP"
END
GROUPBOX DLG_NULL 78 8
BEGIN
PROMPT 1 3 ""
END
NUMBER F_CODPROF 4
BEGIN
PROMPT 2 4 "Profilo "
FLAGS "Z"
USE LF_FORM
INPUT TIPOPROF BASE_EC_PROFILE
INPUT CODPROF[1,4] F_CODPROF
INPUT CODPROF[5,5] F_LINPROF
DISPLAY "Codice" CODPROF[1,4]
DISPLAY "Lingua" CODPROF[5,5]
DISPLAY "Descrizione@50" DESC
OUTPUT F_CODPROF CODPROF[1,4]
OUTPUT F_LINPROF CODPROF[5,5]
OUTPUT F_DESPROF DESC
FIELD ANTICLEAR
WARNING "Codice profilo o lingua errato"
ADD RUN sc3 -0
END
STRING F_LINPROF 1
BEGIN
PROMPT 19 4 ""
FLAGS "U"
COPY ALL F_CODPROF
CHECKTYPE NORMAL
WARNING "Codice profilo o lingua errato"
END
STRING F_DESPROF 50
BEGIN
PROMPT 26 4 ""
FLAGS "D"
END
DATE F_DATALIMOP
BEGIN
PROMPT 2 5 "Data limite operazione "
FLAGS "A"
END
NUMBER F_ULTIMOEC 5
BEGIN
PROMPT 39 5 "Ultimo estratto conto "
END
DATE F_DATALIMSC
BEGIN
PROMPT 2 6 "Data limite scaduto "
CHECKTYPE REQUIRED
END
NUMBER F_GIORISCH 3
BEGIN
PROMPT 2 7 "Giorni calcolo rischio "
GROUP 1
END
BOOLEAN F_STAMPCHIU
BEGIN
PROMPT 2 8 "Stampa partite chiuse"
MESSAGE FALSE CLEAR,F_DATACHIU
MESSAGE TRUE ENABLE,F_DATACHIU
END
DATE F_DATACHIU
BEGIN
PROMPT 26 8 " dal "
FLAGS "D"
END
BOOLEAN F_STAMPSALDO
BEGIN
PROMPT 44 8 "Stampa saldo partita"
END
STRING F_LUOGOSEND 50 32
BEGIN
PROMPT 2 9 "Luogo d'invio "
END
DATE F_DATASEND
BEGIN
PROMPT 51 9 "data "
FLAGS "A"
CHECKTYPE REQUIRED
END
RADIOBUTTON SC_CLIFO 20
BEGIN
PROMPT 1 11 "@bSelezione"
ITEM "C|Clienti" MESSAGE ENABLE,1@
ITEM "F|Fornitori" MESSAGE CLEAR,1@
END
RADIOBUTTON SC_SORTCF 25
BEGIN
PROMPT 25 11 "@bOrdinamento"
ITEM "1|Per codice" MESSAGE HIDE,2@|SHOW,3@
ITEM "2|Per ragione sociale" MESSAGE HIDE,3@|SHOW,2@
END
BUTTON SC_SELECT 10 1
BEGIN
PROMPT 52 12 "S~elezione"
END
BUTTON SC_RESET 10 1
BEGIN
PROMPT 65 13 "A~zzera"
END
NUMBER SC_NSEL 4
BEGIN
PROMPT 52 13 "Selezionati "
FLAGS "D"
END
NUMBER SC_CFCODFR 6
BEGIN
PROMPT 2 15 "Da codice "
GROUP 3
FLAGS "B"
END
NUMBER SC_CFCODTO 6
BEGIN
PROMPT 37 15 "a codice "
GROUP 3
FLAGS "B"
END
STRING SC_CFDESFR 50
BEGIN
PROMPT 2 15 "Da ragione sociale "
GROUP 2
FLAGS "HB"
END
STRING SC_CFDESTO 50
BEGIN
PROMPT 2 16 "A ragione sociale "
GROUP 2
FLAGS "HB"
END
BOOLEAN F_GROUPAGENT
BEGIN
PROMPT 2 17 "Raggruppamento per agente"
MESSAGE FALSE HIDE,5@
MESSAGE TRUE SHOW,5@
END
STRING F_FROM_AGENT 5
BEGIN
PROMPT 2 18 "Dall'agente "
FLAGS "HZU"
USE LF_AGENTI
INPUT CODAGE F_FROM_AGENT
DISPLAY "Codice agente" CODAGE
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_FROM_AGENT CODAGE
OUTPUT F_FROM_AGENT_D RAGSOC
CHECKTYPE NORMAL
GROUP 5
END
STRING F_FROM_AGENT_D 50
BEGIN
PROMPT 22 18 ""
FLAGS "H"
USE LF_AGENTI KEY 2
INPUT RAGSOC F_FROM_AGENT_D
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice agente" CODAGE
COPY OUTPUT F_FROM_AGENT
CHECKTYPE NORMAL
GROUP 5
END
STRING F_TO_AGENT 5
BEGIN
PROMPT 2 19 "All'agente "
FLAGS "HZU"
COPY USE F_FROM_AGENT
INPUT CODAGE F_TO_AGENT
COPY DISPLAY F_FROM_AGENT
OUTPUT F_TO_AGENT CODAGE
OUTPUT F_TO_AGENT_D RAGSOC
CHECKTYPE NORMAL
GROUP 5
END
STRING F_TO_AGENT_D 50
BEGIN
PROMPT 22 19 ""
FLAGS "H"
COPY USE F_FROM_AGENT_D
INPUT RAGSOC F_TO_AGENT_D
COPY DISPLAY F_FROM_AGENT_D
COPY OUTPUT F_TO_AGENT
CHECKTYPE NORMAL
GROUP 5
END
ENDPAGE
ENDMASK

@ -1,17 +1,14 @@
#include <applicat.h>
#include <automask.h>
#include <defmask.h>
#include <progind.h>
#include <relation.h>
#include <reprint.h>
#include "../ve/velib.h"
#include <doc.h>
#include <rdoc.h>
#include "pt0003.h"
#include "pt0003100a.h"
#include <rdoc.h>
class TMaskPt00031 : public TAutomask
{
@ -156,11 +153,12 @@ void TMaskPt00031::update_sheet()
TDocumento & doc = (TDocumento &)_cur->curr();
const long items = _cur->items();
TProgind pi(items, "Caricamento fatture", true, true);
for ((*_cur) = 0L; _cur->pos() < items; ++(*_cur))
{
if (pi.iscancelled())
if (!pi.addstatus(1))
break;
if (sheet.items() > 900) // Anche troppe righe
break;
@ -176,10 +174,10 @@ void TMaskPt00031::update_sheet()
row.add(totdoc.string());
row.add(doc.get(DOC_NDOC));
row.add(doc.get(DOC_DATADOC));
pi.addstatus(1);
}
if (olditems == 0 && sheet.items == 0)
return;
if (olditems == 0 && items == 0)
return;
sheet.force_update();
}
@ -226,6 +224,7 @@ public:
void TIncassoFatture0003::main_loop()
{
open_files(LF_DOC, LF_RIGHEDOC, 0);
TMaskPt00031 m;
while (m.run() == K_ENTER)

@ -11,8 +11,8 @@ END
BUTTON DLG_SAVEREC 10 2
BEGIN
PROMPT -12 -1 "~Registra"
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
END

@ -681,6 +681,11 @@ void TProspettoScadenze::print_totali_rows(int nriga, bool what)
{
reset_print();
TAssoc_array& xassoc = (TAssoc_array&) _t[what];
if (_cod_pre.blank())
{
xassoc.destroy();
return;
}
TString_array as;
const int items = xassoc.items();
@ -799,6 +804,8 @@ void TProspettoScadenze::print_totali_rows(int nriga, bool what)
void TProspettoScadenze::export_totali_rows()
// If what is 0 prints single total... else prints also general total
{
if (_cod_pre.blank())
return;
TAssoc_array& xassoc = (TAssoc_array&) _t[0];
TString_array as;
const int items = xassoc.items();
@ -810,9 +817,16 @@ void TProspettoScadenze::export_totali_rows()
TVariant var(_cod_pre);
TString k(as.row(i)); // Chiave di ordinamento(valuta)
TLineTotal& v = (TLineTotal&)xassoc[k];
real t1;
real t2;
calcola_saldo();
for (int j = NUMERO_FASCE; j >= 0; j--)
t1 += v._s[j];
for (int jj = 0; jj <= NUMERO_FASCE; jj++)
t2 += v._ns[jj];
if (t1 == ZERO && t2 == ZERO && v._es == ZERO && v._sl == ZERO)
continue;
_recset->new_rec();
_recset->set("Cliente", var);
var = _des_pre;

@ -70,7 +70,7 @@ TSelection_mask::~TSelection_mask()
bool TSelection_mask::stop_run(KEY k)
{
const bool ok = TMask::stop_run(k);
if (ok && k == K_ENTER)
if (ok && k != K_QUIT)
update_assoc();
return ok;
}

BIN
tc/IMPPN.v2008.0.7.doc Executable file

Binary file not shown.

@ -1,8 +1,7 @@
#include "tc0.h"
#include "tc0701.h"
#include "tc0700.h"
#include "tc0700a.h"
#include <automask.h>
#include <progind.h>
#include <reprint.h>
@ -21,27 +20,6 @@
#include "../cg/cglib01.h"
#include "../cg/cg2103.h"
///////////////////////////////////////////////////////////
// TTS_mask
///////////////////////////////////////////////////////////
class TTS_mask : public TAutomask
{
clock_t _next_update;
bool _updating;
private:
bool apply_filter(const TRecordset& righe) const;
void serialize(bool bSave);
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TTS_mask();
~TTS_mask();
};
bool TTS_mask::apply_filter(const TRecordset& righe) const
{
const TDate dal = get(F_DATA_DA);
@ -87,8 +65,8 @@ void TTS_mask::serialize(bool bSave)
}
}
TTS_mask::TTS_mask()
: TAutomask("tc0700a"), _updating(false), _next_update(0)
TTS_mask::TTS_mask(const char * maskname)
: TAutomask(maskname), _updating(false), _next_update(0)
{
serialize(false);
}
@ -98,41 +76,6 @@ TTS_mask::~TTS_mask()
serialize(true);
}
///////////////////////////////////////////////////////////
// TTS_campo_sender
///////////////////////////////////////////////////////////
class TTS_campo_sender : public TTS_sender
{
TTS_mask * _mask;
TAssoc_array _caus_regolarizzazione;
protected:
virtual TRecordset & movrecset();
virtual TRecordset & rmovrecset(const TRecordset & mov);
virtual TRecordset & rivarecset(const TRecordset & mov);
virtual const TRecordset & clirecset(const char tipocf, const long codcf);
virtual TMask & get_mask();
protected:
virtual bool find_regolarizzazione(TRecordset& mov);
virtual const char * decode_causale(const TRecordset& mov);
virtual bool test_swap(const TRecordset& mov);
virtual bool swap_ritsoc(const TRecordset& mov);
virtual bool mov_regolarizzazione(const TRecordset& mov);
virtual bool mov_intra(const TRecordset& mov);
virtual bool mov_reverse_charge(const TRecordset& mov);
virtual long iva11_reverse(const TRecordset & mov);
public:
virtual void postprocess_movs(TRecordset & mov);
virtual bool create();
virtual bool destroy();
TTS_campo_sender() : TTS_sender(), _mask(NULL) {}
~TTS_campo_sender() {}
};
bool TTS_campo_sender::destroy()
{
delete _mask;
@ -263,12 +206,13 @@ TMask & TTS_campo_sender::get_mask()
{
if (_mask == NULL)
{
_mask = new TTS_mask;
_mask = new TTS_mask(mask_name());
TDate to(TODAY);
TConfig configtc(CONFIG_DITTA, "tc");
const TDate from(configtc.get("TSULTINV"));
to.addmonth(-1);
if (from.ok())
to.addmonth(-1);
to.set_end_month();
if (to <= from)
{

61
tc/tc0700.h Executable file

@ -0,0 +1,61 @@
#include <automask.h>
#include "tc0701.h"
///////////////////////////////////////////////////////////
// TTS_mask
///////////////////////////////////////////////////////////
class TTS_mask : public TAutomask
{
clock_t _next_update;
bool _updating;
private:
bool apply_filter(const TRecordset& righe) const;
void serialize(bool bSave);
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TTS_mask(const char * maskname);
~TTS_mask();
};
///////////////////////////////////////////////////////////
// TTS_campo_sender
///////////////////////////////////////////////////////////
class TTS_campo_sender : public TTS_sender
{
TTS_mask * _mask;
TAssoc_array _caus_regolarizzazione;
protected:
virtual TRecordset & movrecset();
virtual TRecordset & rmovrecset(const TRecordset & mov);
virtual TRecordset & rivarecset(const TRecordset & mov);
virtual const TRecordset & clirecset(const char tipocf, const long codcf);
virtual TMask & get_mask();
virtual const char * mask_name() const {return "tc0700a"; }
protected:
virtual bool find_regolarizzazione(TRecordset& mov);
virtual const char * decode_causale(const TRecordset& mov);
virtual bool test_swap(const TRecordset& mov);
virtual bool swap_ritsoc(const TRecordset& mov);
virtual bool mov_regolarizzazione(const TRecordset& mov);
virtual bool mov_intra(const TRecordset& mov);
virtual bool mov_reverse_charge(const TRecordset& mov);
virtual long iva11_reverse(const TRecordset & mov);
public:
virtual void postprocess_movs(TRecordset & mov);
virtual bool create();
virtual bool destroy();
TTS_campo_sender() : TTS_sender(), _mask(NULL) {}
~TTS_campo_sender() {}
};

@ -12,6 +12,7 @@
#include <rmov.h>
#include <rmoviva.h>
#include <multirel.h>
#include <pconti.h>
#include "../cg/cglib01.h"
@ -100,6 +101,8 @@ class TIVA_item : public TObject
long _codiva11;
real _imponibile;
real _imposta;
TString4 _codcomp;
public:
int & row() { return _row;}
long & conto() { return _conto;}
@ -107,7 +110,8 @@ public:
long & codiva11() { return _codiva11;}
real & imponibile() { return _imponibile;}
real & imposta() { return _imposta;}
TIVA_item(int row, long conto, long codiva, long codiva11) : _row(row), _conto(conto), _codiva(codiva), _codiva11(codiva11) {}
const TString & codcomp() { return _codcomp;}
TIVA_item(int row, long conto, long codiva, long codiva11, const char * codcomp) : _row(row), _conto(conto), _codiva(codiva), _codiva11(codiva11), _codcomp(codcomp) {}
virtual ~TIVA_item() {}
};
@ -877,7 +881,7 @@ void TTS_sender::add_conti_ricavo_costo(const TRecordset& mov)
if (item == NULL)
{
item = new TIVA_item(j++, contoricl, 0L, 0L);
item = new TIVA_item(j++, contoricl, 0L, 0L, "");
_iva.add(key, item);
}
item->imponibile() += imponibile;
@ -947,15 +951,19 @@ void TTS_sender::add_datiiva(const TRecordset& mov)
{
real imponibile = rmoviva.get(RMI_IMPONIBILE).as_real() * fattore;
real imposta = rmoviva.get(RMI_IMPOSTA).as_real() * fattore;
TCodiceIVA c(rmoviva.get(RMI_CODIVA).as_string());
bool agricolo = c.get_int("S4") == 1;
TString16 codcomp;
if (corrispettivo)
{
if (imposta == ZERO)
{
TCodiceIVA c(rmoviva.get(RMI_CODIVA).as_string());
imposta = c.scorpora(imponibile);
}
if (agricolo)
{
TString key;
key.format("%03ld|%03ld|%06ld", rmoviva.get(RMI_GRUPPO).as_int(), rmoviva.get(RMI_CONTO).as_int(), rmoviva.get(RMI_SOTTOCONTO).as_int());
const TRectype & pcon = cache().get(LF_PCON, key);
codcomp = pcon.get(PCN_IVACOMP);
}
long codiva = cod2ricl("TSIVA", rmoviva.get(RMI_CODIVA));
long codiva11 = 0L;
@ -978,7 +986,7 @@ void TTS_sender::add_datiiva(const TRecordset& mov)
if (item == NULL)
{
item = new TIVA_item(j++, 0L, codiva, codiva11);
item = new TIVA_item(j++, 0L, codiva, codiva11, codcomp);
_iva.add(key, item);
}
item->imponibile() += imponibile;
@ -1003,7 +1011,7 @@ void TTS_sender::add_datiiva(const TRecordset& mov)
field.format("TRF-ALIQ_%d", row);
set(field, item.codiva());
field.format("TRF-ALIQ_AGRICOLA_%d", row);
//set(field,field // dato non presente CHIEDERE
set(field, item.codcomp());
field.format("TRF-IVA11_%d", row);
set(field, item.codiva11());
field.format("TRF-IMPOSTA_%d", row);
@ -1052,7 +1060,7 @@ void TTS_sender::add_header(const TRecordset& mov, const bool fullhesd)
const bool send_clifo = !_riclassifica.is_key("TSNOHCLI");
if (send_clifo)
set("TRF-COD-CLIFOR", mov.get(MOV_CODCF));
set("TRF-COD-CLIFOR", mov.get(MOV_CODCF));
if (moviva)
{
@ -1092,7 +1100,8 @@ void TTS_sender::get_citta_provincia(const TRecordset& cli, TString & dencom, TS
const TString& localita = cli.get(CLI_LOCCF).as_string();
if (localita.full() && xvt_str_fuzzy_compare(localita, dencom) < 0.75)
{
dencom.insert(", ");
if (dencom.full())
dencom.insert(", ");
dencom.insert(localita);
}
}
@ -1126,8 +1135,11 @@ void TTS_sender::add_clifor(char tipocf, long codcf)
divide = ragsoc.len() + 1;
ragsoc << " " << r2;
}
const bool send_clifo = !_riclassifica.is_key("TSNOHCLI");
set("TRF-RASO", ragsoc);
if (send_clifo)
set("TRF-COD-CLIFOR", codcf);
set("TRF-RASO", ragsoc);
set("TRF-IND", indirizzo);
set("TRF-CAP", cli.get(CLI_CAPCF));
@ -1267,7 +1279,23 @@ const long TTS_sender::bill2ricl(char & t, int gr, int co, long so, const bool h
}
}
else
codricl = gr*100000+co*1000+so;
{
if (t > ' ')
{
if (header_cli)
{
if (t == 'C')
codricl = 9999999L;
else
codricl = 9999998L;
}
else
codricl = gr*100000+so;
}
else
codricl = gr*100000+co*1000+so;
}
}
return codricl;
}

@ -36,6 +36,7 @@ protected:
bool new_rec(const char* t);
void remove_last();
void set(const char* field, const TVariant& var);
void set(const char* field, const TString & str) { set(field, TVariant(str)); }
void set(const char* field, const int n) { set(field, TVariant((long)n)); }
void set(const char* field, const char* s) { set(field, TVariant(s)); }
void set(const char* field, const TDate& d) { set(field, TVariant(d)); }
@ -80,7 +81,7 @@ protected:
public:
void log(int sev, const char* msg);
virtual bool multi_activity() const { return true; }
const TString & dittamulti(const TRecordset& mov) const ;
virtual const TString & dittamulti(const TRecordset& mov) const ;
TAssoc_array & riclassifica() {return _riclassifica;}
virtual void postprocess_movs(TRecordset & mov) {}

@ -21,6 +21,7 @@
#define F_SHEET_ATTIV 130
#define F_PROFESS 131
#define F_VENT 132
#define F_STOCLI 133
#define SI_GRUPPO 101
#define SI_CONTO 102

@ -21,6 +21,14 @@
class TProgind;
#endif
#ifndef __MODAUT_H
#include <modaut.h>
#endif
#ifndef __CLIFOR_H
#include "../ve/clifor.h"
#endif
class TPack_log;
class TCache_tp;
@ -174,6 +182,7 @@ class TPack_ddt : public TPack_transfer
bool _cms_ref, _order_paper_info, _extended_discount;
TDate _data_limite;
TAssoc_array _iva; // Codici IVA PACK
TCli_for _cli;
protected:
bool signal_row_error(const char* msg);
@ -183,7 +192,7 @@ protected:
bool get_clifo(char& tipocf, long& codcf);
const TString& get_indsped() const;
const TRectype& get_articolo(TString& um, real& qta, TString& custcode);
const TString& get_codice_iva();
const TString& get_codice_iva(const TDate & datadoc);
const TString& get_customer_reference() const;
bool get_paper_from_order(TString& desc) const;

@ -317,7 +317,17 @@ bool TPack_ddt::get_clifo(char& tipocf, long& codcf)
}
if (codcf > 0 && (tipocf == 'C' || tipocf == 'F'))
{
const int err = _cli.read(tipocf, codcf);
if (err != NOERR)
{
TString msg; msg.format("Errore %d durante la lettura del %s %ld ", err, tipocf == 'C' ? "Cliente" : "Fornitore", codcf);
return log_error(msg);
}
return true;
}
return log_error(TR("Impossibile determinare il codice del cliente/fornitore"));
}
@ -333,13 +343,19 @@ void TPack_ddt::activate_customer_code(bool cc)
_cust_code = cc && !cache().get("%TRI", "14").empty();
}
const TString& TPack_ddt::get_codice_iva()
const TString& TPack_ddt::get_codice_iva(const TDate& datadoc)
{
TString4 codiva;
if (_cli.use_lettere() && _cli.read_lettera(datadoc))
{
const TString& codiva = _cli.vendite().get(CFV_ASSFIS);
if (codiva.full())
return codiva; // Codice IVA di Campo gia' decodificato!
}
TString8 codiva; // Codice IVA di PACK da decodificare!
TString qry(256);
qry << query_header();
qry << "SELECT * FROM IVA WHERE IVACode=#CODIVA";
qry << query_header() << "SELECT * FROM IVA WHERE IVACode=#CODIVA";
TODBC_recordset iva(qry);
const TString& codivani = get_str("CodIvaNI");
@ -617,7 +633,7 @@ bool TPack_ddt::trasferisci()
rdoc.put(RDOC_CHECKED, "X");
rdoc.put(RDOC_UMQTA, um);
rdoc.put(RDOC_QTA, qta);
rdoc.put(RDOC_CODIVA, get_codice_iva());
rdoc.put(RDOC_CODIVA, get_codice_iva(doc->get_date(DOC_DATADOC)));
rdoc.put(RDOC_PREZZO, get_real_str("Price"));
TString sconto = get_real_str("DiscountRowDesc");

@ -71,21 +71,27 @@ bool TCli_for::read_lettera(const TDate & data, bool extended)
{
_letint.zero();
TRelation * r = new TRelation(LF_LETINT);
TRectype from(r->curr());
TRectype to(r->curr());
from.put(LETINT_ANNO, data.year());
from.put(LETINT_CODCLI, codice());
to.put(LETINT_ANNO, data.year());
to.put(LETINT_CODCLI, codice());
TCursor c(r, "", 2 ,&from, &from);
TRectype from(to);
from.put(LETINT_ANNO, data.year() - 1);
TCursor c(r, "", 2 ,&from, &to);
const int items = c.items();
if (items > 0)
{
TDate dal;
TDate al(31, 12, data.year());
for (c = items - 1; c.pos() >= 0L; --c)
for (long pos = items - 1; pos >= 0L; pos--)
{
c = pos;
const int tipo = c.curr().get_int(LETINT_TIPOOP);
if (tipo == 3)

@ -161,6 +161,7 @@ bool TConf_vendite::preprocess_config (TMask& mask, TConfig& config)
return true;
}
bool TConf_vendite::postprocess_config (TMask& mask, TConfig& config)
{
enable_menu_item(M_FILE_NEW);

@ -172,9 +172,39 @@ BEGIN
OUTPUT F_IVASTORNO CODTAB
END
LISTBOX F_FLDVALMAT 17
BEGIN
PROMPT 2 16 "Campo per i valore dei materiali "
FIELD FldValMat
ITEM "|Nessuno"
ITEM "ULTCOS1|Ultimo Costo"
ITEM "ULTCOS2|Penultimo Costo"
ITEM "COSTSTD|Costo Standard"
ITEM "USER1|Campo Utente 1"
ITEM "USER2|Campo Utente 2"
ITEM "USER3|Campo Utente 3"
ITEM "USER4|Campo Utente 4"
ITEM "USER5|Campo Utente 5"
ITEM "USER6|Campo Utente 6"
ITEM "USER7|Campo Utente 7"
ITEM "USER8|Campo Utente 8"
ITEM "USER9|Campo Utente 9"
ITEM "USER10|Campo Utente 10"
ITEM "USER11|Campo Utente 11"
ITEM "USER12|Campo Utente 12"
ITEM "USER13|Campo Utente 13"
ITEM "USER14|Campo Utente 14"
ITEM "USER15|Campo Utente 15"
ITEM "USER16|Campo Utente 16"
ITEM "USER17|Campo Utente 17"
ITEM "USER18|Campo Utente 18"
ITEM "USER19|Campo Utente 19"
ITEM "USER20|Campo Utente 20"
END
BOOLEAN F_CHECKPREVCONT
BEGIN
PROMPT 2 16 "Controlla che i documenti precedenti siano contabilizzati"
PROMPT 2 17 "Controlla che i documenti precedenti siano contabilizzati"
FIELD CHECKPREVCONT
END

@ -716,23 +716,26 @@ size_t TReport_doc::get_usr_words(TString_array& words) const
bool TReport_doc::execute_usr_word(unsigned int opcode, TVariant_stack& stack)
{
if (opcode < _first_msg)
return TReport::execute_usr_word(opcode, stack);
opcode -= _first_msg;
switch (opcode)
bool ok = true;
if (opcode >= _first_msg)
{
case 0 : msg_cliente(stack); break;
case 1 : msg_parent_doc(stack); break;
case 2 : msg_parent_row(stack); break;
case 3 : msg_riepilogo_iva(stack); break;
case 4 : msg_scadenze(stack); break;
case 5 : msg_tot_imponibili(stack); break;
default: break;
switch (opcode - _first_msg)
{
case 0: msg_cliente(stack); break;
case 1: msg_parent_doc(stack); break;
case 2: msg_parent_row(stack); break;
case 3: msg_riepilogo_iva(stack); break;
case 4: msg_scadenze(stack); break;
case 5: msg_tot_imponibili(stack); break;
default: ok = false; break;
}
stack.reset(); // Svuota eventuali parametri variabili inutilizzati
}
else
ok = TReport::execute_usr_word(opcode, stack);
while (!stack.pop().is_null()); // Svuota eventuali parametri variabili inutilizzati
return true;
return ok;
}
void TReport_doc::include_libraries(bool reload)

@ -58,6 +58,7 @@ Item_12 = "Attrezzature", "ve0 -4 ATR", "F"
Item_13 = "Banche di presentazione", "ef0 -6 BNP", "F"
Item_14 = "Zone", "ba3 -0 ZON", "F"
Item_15 = "Fatture da emettere/ricevere", "ve0 -4 MRE", "F"
Item_16 = "Conti ricavo dei materiali", "ba3 -0 CMT", "F"
[ACQVEN_005]
Caption = "Tabelle contabili"

Some files were not shown because too many files have changed in this diff Show More