Patch level : 2.2 399

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Riportata la versione 2.1 598


git-svn-id: svn://10.65.10.50/trunk@13909 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2006-04-13 17:56:02 +00:00
parent d47d7a30fa
commit 21699c002e
137 changed files with 4622 additions and 1570 deletions

View File

@ -490,6 +490,7 @@ bool TStampaIscritti::user_create()
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCPDOM);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMDOM);
add_cursor(new TCursor(_rel, "", 3));
_msk = new TMask("at2600a");
TConfig config(CONFIG_STUDIO);
@ -502,7 +503,8 @@ bool TStampaIscritti::user_create()
TFilename iscrtrr = "iscritti";
iscrtrr.ext("trr");
if (iscrtrr.exist())
_fileiscr = new TExternisamfile(iscrname, iscrtrr);
_fileiscr = new TExternisamfile(iscrname, iscrtrr, false);
return TRUE;
}
@ -521,4 +523,4 @@ int at2600(int argc, char* argv[])
TStampaIscritti a;
a.run(argc, argv, "Iscritti/dimessi");
return 0;
}
}

View File

@ -1252,7 +1252,12 @@ bool TStampaPerCategorie::user_create()
_sfamiglia = new TRecord_array(LF_FAMIGLIE,FAM_PROGFAM);
add_cursor(new TSorted_cursor(_rel,"SOG_CODSEZ|SOG_CODSOT","",3));
_msk = new TMask("at2700a");
_file = new TExternisamfile("$file");
TFilename filename = "file";
filename.ext("dbf");
TFilename filetrr = "file";
filetrr.ext("trr");
filetrr.custom_path();
_file = new TExternisamfile(filename, filetrr, FALSE);
TFilename namepers("filepers");
namepers.ext("dbf");
if (namepers.exist())
@ -1294,7 +1299,7 @@ bool TStampaPerCategorie::user_destroy()
delete _msk;
if (_filepers != NULL)
delete _filepers;
delete _file;
delete _file;
delete _sfamiglia;
delete _sbenemerenze;
delete _famiglie;

View File

@ -237,7 +237,7 @@ bool TFrequenza::filter_func_freq(const TRelation* rel)
filtrato = (numdon == app()._numdon);
break;
case 'D':
filtrato = (numdon > 1 && numdon <= app()._numdon);
filtrato = (numdon >= 1 && numdon <= app()._numdon);
break;
}
}
@ -585,7 +585,6 @@ bool TFrequenza::user_create()
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
add_cursor(new TSorted_cursor(_rel, "", "", 3));
_msk = new TMask("at2900a");
_file = new TExternisamfile("$file");
_donaz = new TLocalisamfile(LF_DONAZ);
_sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON);
TConfig config(CONFIG_STUDIO);
@ -595,6 +594,13 @@ bool TFrequenza::user_create()
_form_eti = new TEti_freq_form(etformato);
_stampa80 = config.get_bool("Stampa80");
_form_let = new TEti_freq_form("ATLETTER");
TFilename freqname = "file";
freqname.ext("dbf");
TFilename freqtrr = "file";
freqtrr.ext("trr");
freqtrr.custom_path();
_file = new TExternisamfile(freqname, freqtrr, FALSE);
return TRUE;
}

12
at/file.trr Executable file
View File

@ -0,0 +1,12 @@
1001
8
CODICE|3|8|0|Codice
COGNOME|1|25|0|Cognome
NOME|1|25|0|Nome
SPOSATA|1|25|0|Cognome da sposata
INDIRIZZO|1|30|0|Indirizzo
STRADARIO|1|5|0|Stradario
PRESSO|1|30|0|Presso
LOCALITA|1|80|0|CAP, Localita, Prov.
1
CODICE|X

View File

@ -51,7 +51,7 @@ BEGIN
FLAGS "D"
END
SPREADSHEET F_FIELDS 0 10
SPREADSHEET F_FIELDS 0 13
BEGIN
PROMPT 0 2 "Fields"
ITEM "Nome@10"
@ -63,7 +63,7 @@ END
SPREADSHEET F_KEYS
BEGIN
PROMPT 0 13 "Keys"
PROMPT 0 16 "Keys"
ITEM "Espressione@65"
ITEM "Chiavi duplicate"
END

View File

@ -1401,9 +1401,13 @@ bool TAttivazione_moduli::create()
{
bool ok = ::dongle().login(TRUE);
if (!ok)
return FALSE;
return false;
ok = TApplication::test_assistance_year();
#ifdef DBG
if (ok && argc() > 2 && strcmp(argv(2), "-dninst") == 0)
ok = false;
#endif
if (!ok)
{
ok = update_assistance_year();

View File

@ -35,14 +35,14 @@ HIDDEN void encode_string(char* dninst_key, char* data)
strcpy(data, tmp);
}
HIDDEN bool build_dninst(const TFilename& name)
HIDDEN bool build_dninst()
{
ifstream inf("dninst.txt", ios::in | ios::nocreate);
if (inf.good())
{
char dninst_key[8] = "";
ofstream ouf(name, ios::out | ios::binary);
ofstream ouf("dninst.zip", ios::out | ios::binary);
char line[256];
int year = 0;
while (!inf.eof())
@ -52,9 +52,8 @@ HIDDEN bool build_dninst(const TFilename& name)
{
srand(883);
year = atoi(line);
CHECKD(year >= 2001 && year <= 3001, "Anno errato:", year);
}
CHECKD(year >= 2005 && year <= 3000, "Anno errato:", year);
}
encode_string(dninst_key, line);
ouf << line << '\n';
@ -111,6 +110,14 @@ HIDDEN int module2number(const TString& mod)
bool update_dninst(bool force)
{
#ifdef DBG
if (force && main_app().argc() > 2 && strcmp(main_app().argv(2), "-dninst") == 0)
{
build_dninst();
return true;
}
#endif
const TFilename keys_name = "dninst.zip";
if (force || !keys_name.exist())
{
@ -121,17 +128,13 @@ bool update_dninst(bool force)
remote_name.add(keys_name);
if (remote_name.exist())
fcopy(remote_name, keys_name);
#ifdef DBG
else
build_dninst(remote_name); // La cifrature del file avviene solo in DEBUG!
#endif
}
return TRUE;
return true;
}
bool update_assistance_year()
{
update_dninst(TRUE);
update_dninst(true);
const TFilename dninst = "dninst.zip";
if (dninst.exist())

View File

@ -323,6 +323,7 @@ void TReport_properties_mask::set_report(const TReport& r)
set(F_POSTSCRIPT, r.postscript());
sfield(F_PARAMS).rows_array() = r.params();
sfield(F_LINK).rows_array() = r.allegates();
}
void TReport_properties_mask::get_report(TReport& r) const
@ -351,6 +352,7 @@ void TReport_properties_mask::get_report(TReport& r) const
r.set_postscript(get(F_POSTSCRIPT));
r.set_params(sfield(F_PARAMS).rows_array());
r.set_allegates(sfield(F_LINK).rows_array());
}
///////////////////////////////////////////////////////////
@ -966,8 +968,12 @@ bool TReport_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
sht.run();
}
else
warning_box(TR("Nessuna riga risultato"));
{
if (sql.find("SELECT ") >= 0)
warning_box(TR("Nessuna riga risultato"));
}
delete rex;
}
}
break;
@ -1031,15 +1037,17 @@ TReport_mask::TReport_mask() : _tree(_report), _is_dirty(false)
switch (s)
{
case 1 : rd.set_report_section(_report.section('H', 0)); break;
default:
case 1 :
rd.set_report_section(_report.section('H', 0));
break;
default:
_curr_section = &_report.section('B', 1);
rd.set_report_section(*_curr_section);
rd.set_report_section(*_curr_section);
break;
}
}
_tree.goto_node('B',1);
_tree.goto_node('B', 1);
const int ih = _tree.image_height();
if (ih > CHARY)
albero.set_row_height(ih);
@ -1104,4 +1112,4 @@ int ba8300(int argc, char* argv[])
TReporter_app app;
app.run(argc, argv, TR("Report Generator"));
return 0;
}
}

View File

@ -108,9 +108,29 @@ END
ENDPAGE
PAGE "Allegati" -1 -1 60 16
SPREADSHEET F_LINK 0 -3
BEGIN
PROMPT 1 1 ""
ITEM "Allegato@50"
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
PAGE "Parametri" -1 -1 60 5
PAGE "Parametro" -1 -1 60 5
STRING 101 15
BEGIN
@ -137,6 +157,32 @@ BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
ENDMASK
PAGE "Allegato" -1 -1 70 5
STRING 101 256 50
BEGIN
PROMPT 1 1 "Allegato "
FSELECT ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE

View File

@ -122,4 +122,3 @@ Caption = "Preferiti"
Picture = <ba00>
Module = 0
Flags = ""

16
ba/batbdet.h Executable file
View File

@ -0,0 +1,16 @@
#define F_CODICE 101
#define F_DESC 102
#define F_TIPO 103
#define F_DESCTIPO 104
#define F_PERC 105

82
ba/batbdet.uml Executable file
View File

@ -0,0 +1,82 @@
#include "batbdet.h"
TOOLBAR "" 0 -3 0 3
#include <toolbar.h>
ENDPAGE
PAGE "@bCodici Indetrabilita'" -1 -1 78 15
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 1 "Codice Indetrabilita'"
END
STRING F_CODICE 2
BEGIN
PROMPT 2 2 ""
FIELD CODTAB
USE %DET
INPUT CODTAB F_CODICE
DISPLAY "Codice" CODTAB
DISPLAY "Percentuale" R0
DISPLAY "Descrizione@50" S0
OUTPUT F_CODICE CODTAB
OUTPUT F_DESC S0
CHECKTYPE REQUIRED
KEY 1
END
STRING F_DESC 50
BEGIN
PROMPT 10 2 "Descrizione "
FIELD S0
USE %DET KEY 2
INPUT CODTAB F_CODICE
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
DISPLAY "Percentuale" R0
COPY OUTPUT F_CODICE
KEY 2
CHECKTYPE REQUIRED
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 5 "@bPercentuale"
END
STRING F_TIPO 1
BEGIN
PROMPT 2 6 "Tipo "
SHEET "Codice|Tipo indetraibilita'@75"
INPUT F_TIPO
ITEM "1|IVA indetraibile su acquisti riferiti a ricavi esenti"
ITEM "3|IVA indicata per passaggi interni al solo fine del calcolo di ventilazione"
ITEM "9|IVA non detraibile per l'articolo 19"
OUTPUT F_TIPO
OUTPUT F_DESCTIPO
FIELD I0
CHEKCTYPE REQUIRED
END
STRING F_DESCTIPO 75 50
BEGIN
PROMPT 22 6 ""
FLAGS "D"
END
NUMBER F_PERC 3
BEGIN
PROMPT 2 7 "Indetraibilita' "
NUM_EXPR #F_PERC<=100
WARNING "Percentuale non valida"
FLAGS "U"
CHECKTYPE REQUIRED
FIELD R0
END
ENDPAGE
ENDMASK

3
ba/f155.dir Executable file
View File

@ -0,0 +1,3 @@
155
0
$multirel|0|0|96|0|Relazione molti a molti|||

9
ba/f155.trr Executable file
View File

@ -0,0 +1,9 @@
155
4
COD|1|5|0|Codice relazione
FIRST|1|20|0|Primo elemento
SECOND|1|20|0|Secondo elemento
DATA|1|50|0|Dati
2
COD+FIRST+SECOND|
COD+SECOND+FIRST|

View File

@ -14,6 +14,7 @@ int main(int argc,char** argv)
case 5: ce3600(argc,argv) ; break; // Stampa lista movimenti cespiti
case 6: ce3700(argc,argv) ; break; // Stampa elenco cespiti promisqui :-)
case 7: ce3800(argc,argv) ; break; // Stampa elenco cespiti etero :-)
case 8: ce3900(argc,argv) ; break; // Stampa sintetica cespiti (sintetica = leggibile) :-)
default: ce3100(argc,argv) ; break; // Stampa registro cespiti
}
return 0;

View File

@ -9,6 +9,7 @@ int ce3500(int argc, char* argv[]);
int ce3600(int argc, char* argv[]);
int ce3700(int argc, char* argv[]);
int ce3800(int argc, char* argv[]);
int ce3900(int argc, char* argv[]);
#endif // __CE3_H

255
ce/ce3900.cpp Executable file
View File

@ -0,0 +1,255 @@
#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <progind.h>
#include <recarray.h>
#include <recset.h>
#include <reprint.h>
#include "../cg/cglib01.h"
#include "ammce.h"
#include "movce.h"
#include "salce.h"
#include "celib.h"
#include "ce3.h"
#include "ce3900.h"
////////////////////////////////////////////////////////
// MASCHERA
////////////////////////////////////////////////////////
class TStampa_sintetica_mask : public TAutomask
{
protected:
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TStampa_sintetica_mask();
virtual ~TStampa_sintetica_mask() {}
};
bool TStampa_sintetica_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
bool ok = true;
switch (o.dlg())
{
case F_FROM_CAT:
case F_D_FROM_CAT:
case F_TO_CAT:
case F_D_TO_CAT:
{
TDitta_cespiti& dc = ditta_cespiti();
ok = dc.on_category_event(o, e, jolly);
}
break;
case F_ESERCIZIO:
case F_GRUPPO:
case F_SPECIE:
if (e == fe_init || e == fe_modify)
{
const TString& esercizio = get(F_ESERCIZIO);
const TString& gruppo = get(F_GRUPPO);
const TString& specie = get(F_SPECIE);
TString16 key; key << esercizio << gruppo << specie;
TRelation ccb("CCB");
ccb.curr().put("CODTAB", key);
if (ccb.read() == NOERR)
autoload(ccb);
}
break;
default: break;
}
return ok;
}
TStampa_sintetica_mask::TStampa_sintetica_mask()
:TAutomask("ce3900")
{}
///////////////////////////////////////////////////////////////
// RECORDSET
///////////////////////////////////////////////////////////////
class TStampa_sintetica_recordset : public TISAM_recordset
{
public:
void set_filter(const TStampa_sintetica_mask& msk);
TStampa_sintetica_recordset(const TString& sql) : TISAM_recordset(sql) { }
};
static const TStampa_sintetica_recordset* myself = NULL;
//metodo per caricare i valori nel recordset dalla maschera...fighissimo!!
void TStampa_sintetica_recordset::set_filter(const TStampa_sintetica_mask& msk)
{
const TString& dacat = msk.get(F_FROM_CAT);
const TString& acat = msk.get(F_TO_CAT);
TString query = "USE CESPI";
if (dacat.full() || acat.full())
{
query << " SELECT ";
if (dacat == acat)
{
query << "CODCAT==" << dacat;
}
else
{
if (dacat.full())
query << "(CODCAT>=" << dacat << ")";
if (acat.full())
{
if (dacat.full())
query << "&&";
query << "(CODCAT<=" << acat << ")";
}
}
}
query << "\nBY CODCAT|IDCESPITE";
set(query); //setta la nuova query nel report (che avrebbe solo USE CESPI)
}
////////////////////////////////////////////////////////
// REPORT
////////////////////////////////////////////////////////
class TStampa_sintetica_rep : public TReport
{
int _anno;
protected:
virtual bool get_usr_val(const TString& name, TVariant& var) const;
public:
void set_filter(const TStampa_sintetica_mask& msk);
};
void TStampa_sintetica_rep::set_filter(const TStampa_sintetica_mask& msk)
{
_anno = msk.get_int(F_ESERCIZIO);
((TStampa_sintetica_recordset*) recordset())->set_filter(msk);
}
//metodo per il calcolo dei campi da calcolare (ma va'!) nel report
bool TStampa_sintetica_rep::get_usr_val(const TString& name, TVariant& var) const
{
const TRecordset& recset = *recordset();
const TString& idcespite = recset.get("IDCESPITE").as_string();
if (name == "#DESCAT") //categoria (descrizione della categoria corrente)
{
const int gruppo = recset.get("CODCGRA").as_int();
const TString& specie = recset.get("CODSPA").as_string();
const int categoria = recset.get("CODCAT").as_int();
const TRectype& rec_cac = ditta_cespiti().categoria(gruppo, specie, categoria);
var = rec_cac.get("S0");
return true;
}
if (name == "#ALIENAZ") //movimenti di vendita
{
//cerca tutti i movimenti di vendita relativi al cespite corrente all'interno dell'esercizio..
//..selezionato sulla maschera;somma i loro importi in modo da ricavare l'importo complessivo..
//..di tutti
TString query;
TEsercizi_contabili esc;
const TDate& dataini = esc[_anno].inizio();
const TDate& datafine = esc[_anno].fine();
query.format("USE MOVCE KEY 2 SELECT NUM(ANSI(DTMOV)>=%ld)&&NUM(ANSI(DTMOV)<=%ld)\nFROM IDCESPITE=%s\nTO IDCESPITE=%s",
dataini.date2ansi(), datafine.date2ansi(), (const char*)idcespite, (const char*)idcespite);
TISAM_recordset isam(query);
real somma_vendite;
for (TRecnotype i = 0; isam.move_to(i); i++)
{
const real vendita = isam.get(MOVCE_IMPVEN).as_real();
somma_vendite += vendita;
}
var = somma_vendite;
return true;
}
if (name == "#COSTO") //costo
{
TToken_string key;
key = idcespite; //cespite
key.add(_anno); //esercizio
key.add(1); //tiposaldo finale
const TRectype& rec_salce = cache().get(LF_SALCE, key);
const real costo = rec_salce.get_real(SALCE_CSTO);
var = costo;
return true;
}
if (name == "#PERCAMM") //percentuale ammortamento
{
TToken_string key;
key = idcespite;
key.add(_anno);
key.add(2); //tiposaldo finale
key.add(1); //tipoamm fiscale
const TRectype& rec_ammce = cache().get(LF_AMMCE, key);
const real percamm = rec_ammce.get_real(AMMCE_PNOR) + rec_ammce.get_real(AMMCE_PACC) + rec_ammce.get_real(AMMCE_PANT);
var = percamm;
return true;
}
if (name == "#QAMM") //fondo ammortamento esercizio corrente
{
TToken_string key;
key = idcespite;
key.add(_anno);
key.add(2); //tiposaldo finale
key.add(1); //tipoamm fiscale
const TRectype& rec_ammce = cache().get(LF_AMMCE, key);
const real quotamm = rec_ammce.get_real(AMMCE_QNOR) + rec_ammce.get_real(AMMCE_QACC) + rec_ammce.get_real(AMMCE_QANT);
var = quotamm;
return true;
}
if (name == "#FAMM") //fondo ammortamento alla fine dell'esercizio precedente
{
TToken_string key;
key = idcespite;
key.add(_anno);
key.add(1); //tiposaldo iniziale
key.add(1); //tipoamm fiscale
const TRectype& rec_ammce = cache().get(LF_AMMCE, key);
const real quotamm = rec_ammce.get_real(AMMCE_QNOR) + rec_ammce.get_real(AMMCE_QACC) + rec_ammce.get_real(AMMCE_QANT);
var = quotamm;
return true;
}
return TReport::get_usr_val(name, var);
}
////////////////////////////////////////////////////////
// APPLICAZIONE
////////////////////////////////////////////////////////
class TStampa_sintetica : public TSkeleton_application
{
protected:
virtual void main_loop();
};
void TStampa_sintetica::main_loop()
{
TStampa_sintetica_mask mask;
while (mask.run() == K_ENTER)
{
//report e book dei report
TReport_book book;
TStampa_sintetica_rep rep;
rep.load("ce3900a");
rep.set_filter(mask);
book.add(rep);
book.print_or_preview(); //stampa il book dei report
}
}
int ce3900(int argc, char* argv[])
{
TStampa_sintetica a;
a.run(argc, argv, TR("Stampa sintetica cespiti"));
return 0;
}

19
ce/ce3900.h Executable file
View File

@ -0,0 +1,19 @@
//campi maschera ce3900.uml
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_ESERCIZIO 103
#define F_DATAINIZIO 104
#define F_DATAFINE 105
#define F_GRUPPO 106
#define F_SPECIE 107
#define F_D_GRUPPO 108
#define F_D_SPECIE 109
#define F_CODTAB 110
#define F_D_CODTAB 111
#define F_FROM_CAT 112
#define F_D_FROM_CAT 113
#define F_TO_CAT 114
#define F_D_TO_CAT 115
#define F_REPORT 116

151
ce/ce3900.uml Executable file
View File

@ -0,0 +1,151 @@
#include "ce3900.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -12 -11 "~Stampa"
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Lista sintetica cespiti" -1 -1 78 6
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 0 ""
FLAGS "R"
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Ditta "
FLAGS "DF"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 55
BEGIN
PROMPT 20 1 ""
FLAGS "D"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 2 2 "Esercizio "
FLAGS "Z"
USE CCE
JOIN ESC ALIAS 105 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Data inizio@15" 105@->D0
DISPLAY "Data fine@15" 105@->D1
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_DATAINIZIO 105@->D0
OUTPUT F_DATAFINE 105@->D1
CHECKTYPE REQUIRED
FIELD CODTAB[1,4]
END
DATE F_DATAINIZIO
BEGIN
PROMPT 20 2 "Data inizio "
FLAGS "D"
END
DATE F_DATAFINE
BEGIN
PROMPT 45 2 "Data fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 2 3 "Gruppo "
FLAGS "Z"
USE CCB KEY 1
JOIN %CGR ALIAS 106 INTO CODTAB==CODTAB[5,6]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Codice" CODTAB[5,6]
DISPLAY "Descrizione@60" 106@->S0
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_D_GRUPPO 106@->S0
CHECKTYPE NORMAL
FIELD CODTAB[5,6]
END
STRING F_SPECIE 4
BEGIN
PROMPT 2 4 "Specie "
FLAGS "_"
USE CCB KEY 1
JOIN %CAT ALIAS 107 INTO CODTAB[1,2]==CODTAB[5,6] CODTAB[3,6]==CODTAB[7,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO SELECT
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@60" 107@->S0
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_D_SPECIE 107@->S0
CHECKTYPE NORMAL
FIELD CODTAB[7,10]
END
STRING F_D_GRUPPO 60 55
BEGIN
PROMPT 20 3 ""
FLAGS "D"
END
STRING F_D_SPECIE 60 55
BEGIN
PROMPT 20 4 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 6 "@bSelezione categoria"
GROUP 1
END
NUMBER F_FROM_CAT 2
BEGIN
PROMPT 2 7 "Dalla "
FLAGS "BZ"
GROUP 1
END
STRING F_D_FROM_CAT 60 50
BEGIN
PROMPT 25 7 ""
FLAGS "B"
GROUP 1
END
NUMBER F_TO_CAT 2
BEGIN
PROMPT 2 8 "Alla "
FLAGS "BZ"
GROUP 1
END
STRING F_D_TO_CAT 60 50
BEGIN
PROMPT 25 8 ""
FLAGS "B"
GROUP 1
END
ENDPAGE

104
ce/ce3900a.rep Executable file
View File

@ -0,0 +1,104 @@
<report name="ce3900a" lpi="6">
<description>Lista sintetica cespiti</description>
<font face="Courier New" size="8" />
<section type="Head">
<font face="Courier New" bold="1" size="8" />
</section>
<section type="Head" level="1" height="6">
<field border="1" radius="100" x="18" y="0.5" type="Testo" valign="center" align="center" shade_offset="25" width="130" height="2.5" text="LISTA SINTETICA CESPITI">
<font face="Courier New" bold="1" size="16" />
</field>
<field border="2" y="4" type="Linea" width="176" height="0" pattern="1" />
<field x="1" y="4.5" type="Stringa" width="50" pattern="1">
<font italic="1" face="Courier New" bold="1" size="9" />
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="79" y="4.5" type="Data" width="10" pattern="1">
<source>#SYSTEM.DATE</source>
</field>
<field x="157" y="4.5" type="Numero" align="right" width="3" pattern="1">
<source>#REPORT.PAGE</source>
</field>
</section>
<section repeat="1" type="Head" level="2">
<groupby>CODCAT</groupby>
<font face="Courier New" bold="1" size="8" />
<field x="1" type="Testo" width="12" pattern="1" text="Categoria:">
<font face="Courier New" bold="1" size="9" />
</field>
<field x="16" type="Stringa" width="70" pattern="1">
<font face="Courier New" bold="1" size="9" />
<source>#DESCAT</source>
</field>
<field x="157" y="0.75" type="Testo" align="justify" width="12" height="3" pattern="1" text="Valore residuo da ammortizzare" />
<field x="24" y="1" type="Testo" align="center" width="10" pattern="1" text="Date" />
<field x="89.5" y="1" type="Testo" width="8" pattern="1" text="Valori" />
<field x="126.5" y="1" type="Testo" width="20" pattern="1" text="Fondo Ammortamento" />
<field x="1" y="2" type="Testo" width="10" pattern="1" text="Codice" />
<field x="11" y="2" type="Testo" width="11" pattern="1" text="Alienazione" />
<field x="24" y="2" type="Testo" width="10" pattern="1" text="Acquisto" />
<field x="34.5" y="2" type="Testo" width="10" pattern="1" text="Entr. Funz." />
<field x="46" y="2" type="Testo" width="30" pattern="1" text="Descrizione" />
<field x="72" y="2" type="Testo" align="right" width="12" pattern="1" text="Acquisizione" />
<field x="85" y="2" type="Testo" align="right" width="12" pattern="1" text="Alienazioni" />
<field x="98" y="2" type="Testo" align="right" width="12" pattern="1" text="Aggiornato" />
<field x="112" y="2" type="Testo" align="right" width="4" pattern="1" text="%Amm" />
<field x="118" y="2" type="Testo" align="right" width="12" pattern="1" text="Es. corrente" />
<field x="131" y="2" type="Testo" align="right" width="12" pattern="1" text="Fine es.prec" />
<field x="143" y="2" type="Testo" align="right" width="12" pattern="1" text="Totale" />
<field border="1" x="1" y="3" type="Linea" width="172" height="0" pattern="1" />
<field x="13" type="Numero" align="right" width="2" id="101" pattern="1">
<font face="Courier New" bold="1" size="9" />
<source>CODCAT</source>
</field>
</section>
<section type="Body" />
<section type="Body" level="1">
<field type="Stringa" width="10" pattern="1">
<source>IDCESPITE</source>
</field>
<field x="11.5" type="Data" width="10" pattern="1">
<source>DTALIEN</source>
</field>
<field x="23" type="Data" width="10" pattern="1">
<source>DTCOMP</source>
</field>
<field x="34.5" type="Data" width="10" pattern="1">
<source>DTFUNZ</source>
</field>
<field x="46" type="Stringa" dynamic_height="1" width="25" height="2" pattern="1">
<source>DESC</source>
</field>
<field x="112" type="Numero" align="right" width="4" pattern="1">
<source>#PERCAMM</source>
</field>
<field x="98" type="Valuta" align="right" width="12" id="101" pattern="1" text="#########,@@">
<source>#COSTO</source>
</field>
<field x="85" type="Valuta" align="right" width="12" id="102" pattern="1" text="#########,@@">
<source>#ALIENAZ</source>
</field>
<field x="72" type="Valuta" align="right" width="12" id="103" pattern="1" text="###.###.###,@@">
<source>#101-#102</source>
</field>
<field x="118" type="Numero" align="right" width="12" id="104" pattern="1">
<source>#QAMM</source>
</field>
<field x="131" type="Numero" align="right" width="12" id="105" pattern="1">
<source>#FAMM</source>
</field>
<field x="144" type="Numero" align="right" width="12" id="106" pattern="1">
<source>#104+#105</source>
</field>
<field x="157" type="Numero" align="right" width="12" id="107" pattern="1">
<source>#101-#106</source>
</field>
</section>
<section type="Foot" />
<section type="Foot" level="1" />
<section type="Foot" level="2" height="1">
<field border="1" x="1" y="0.5" type="Linea" width="196" height="0" pattern="1" />
</section>
<sql>USE CESPI KEY 2</sql>
</report>

View File

@ -105,9 +105,10 @@ Picture = <ce00>
Module = 11
Flags = ""
Item_01 = "Lista cespiti", "ce3 -4", "F"
Item_02 = "Lista movimenti", "ce3 -5", "F"
Item_03 = "Lista cespiti ad uso promiscuo", "ce3 -6", "F"
Item_04 = "Lista cespiti a fine esercizio", "ce3 -7", "F"
Item_02 = "Lista cespiti sintetica", "ce3 -8", "F"
Item_03 = "Lista movimenti", "ce3 -5", "F"
Item_04 = "Lista cespiti ad uso promiscuo", "ce3 -6", "F"
Item_05 = "Lista cespiti a fine esercizio", "ce3 -7", "F"
[CEMENU_011]
Caption = "Stampe di fine esercizio"
@ -118,6 +119,7 @@ Item_01 = "Scheda storico cespite", "ce3 -1", "F"
Item_02 = "Prospetto cespiti", "ce3 -2", "F"
Item_03 = "Prospetto rivalutazioni", "ce3 -3", "F"
Item_04 = "Registro cespiti", "ce3 -0", "F"
Item_05 = "Registro cespiti sintetico", "ce3 -8", "F"
[CEMENU_012]
Caption = "Servizi"

View File

@ -450,7 +450,7 @@ bool TPrimanota_application::force_mask_swap(const TCausale& old_caus, const TCa
// Salvo la maschera corrente in un apposito file temporaneo "cg2100.ini"
TFilename tmp; get_mask_swap_file(tmp);
TConfig ini(tmp);
mask2ini(old, ini);
TRelation_application::mask2ini(old, ini); // Non devo salvare le righe degli sheet
ini.set_paragraph("23");
ini.remove(MOV_NUMREG); // Tolgo numero di registrazione provvisorio
@ -1699,13 +1699,8 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini)
}
}
for ( ; ; i++)
{
if (ini.set_paragraph(format("%d,%d", LF_RMOV, i+1)))
ini.remove_all();
else
break;
}
for ( ; ini.set_paragraph(format("%d,%d", LF_RMOV, i+1)); i++)
ini.remove_all();
for (i = 0; i < _rel->iva_items(); i++)
{
@ -1717,13 +1712,8 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini)
ini.set(name, rec.get(name));
}
}
for ( ; ; i++)
{
if (ini.set_paragraph(format("%d,%d", LF_RMOVIVA, i+1)))
ini.remove_all();
else
break;
}
for ( ; ini.set_paragraph(format("%d,%d", LF_RMOVIVA, i+1)); i++)
ini.remove_all();
if (is_fattura())
{

View File

@ -1984,8 +1984,9 @@ bool TPrimanota_application::caus_modify_handler(TMask_field& f, KEY key)
{
if (f.to_check(key))
{
bool ok = suspended_handler(f, key);
if (!ok) return false;
if (!suspended_handler(f, key))
return false;
const TMask& m = f.mask();
const int ann = m.get_int(F_ANNOIVA);

View File

@ -393,7 +393,7 @@ END
VALUTA FFR_REGIMP(13) 18
BEGIN
PROMPT 1 38 ""
PROMPT 29 38 ""
END
VALUTA FFR_REGIVA(13) 18

View File

@ -7,7 +7,7 @@
<font face="Courier New" bold="1" size="12" />
<source>"Lista clienti privati per quadro IVA VT anno " + #ANNO</source>
</field>
<field border="3" y="2" type="Linea" width="68" height="0" pattern="1" />
<field border="3" y="2" type="Linea" width="70" height="0" pattern="1" />
</section>
<section type="Head" level="1" />
<section type="Head" level="2" height="3">
@ -43,7 +43,7 @@
<font face="Courier New" bold="1" size="12" />
<source>20.RAGSOC</source>
</field>
<field border="1" y="2" type="Linea" width="68" height="0" pattern="1" />
<field border="1" y="2" type="Linea" width="70" height="0" pattern="1" />
<field x="1" y="2.25" type="Testo" width="16" pattern="1" text="N.Operazione" />
<field x="19" y="2.25" type="Testo" align="right" width="18" pattern="1" text="Imponibile" />
<field x="41" y="2.25" type="Testo" width="6" pattern="1" text="Cod." />
@ -61,20 +61,18 @@
<field x="41" type="Stringa" width="4" pattern="1">
<source>RMOVIVA.CODIVA</source>
</field>
<field x="49" type="Valuta" align="right" width="18" pattern="1" text="###.###.###,@@">
<field x="50" type="Valuta" align="right" width="18" pattern="1" text="###.###.###,@@">
<source>RMOVIVA.IMPOSTA</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F3.102</prescript>
</field>
</section>
<section type="Foot" />
<section type="Foot" level="1">
<field border="2" x="-0.38" y="0.5" type="Linea" width="68" height="0" pattern="1" />
<field border="2" x="-0.5" y="0.75" type="Linea" width="68" height="0" pattern="1" />
<field border="2" y="0.5" type="Linea" width="70" height="0" pattern="1" />
<field border="2" y="0.75" type="Linea" width="70" height="0" pattern="1" />
<field x="2" y="1" type="Testo" width="15" pattern="1" text="Totale generale" />
<field x="18" y="1" type="Valuta" align="right" width="18" id="301" pattern="1" text="###.###.###,@@" />
<field x="50" y="1" type="Valuta" align="right" width="18" id="302" pattern="1" text="###.###.###,@@">
<prescript description="F1.302 PRESCRIPT">MESSAGE ADD,F1.302</prescript>
</field>
<field x="50" y="1" type="Valuta" align="right" width="18" id="302" pattern="1" text="###.###.###,@@" />
</section>
<section type="Foot" level="2">
<field x="2" y="1" type="Testo" width="14" pattern="1" text="Totale regione" />

View File

@ -214,15 +214,16 @@ void TInv_cont::main_loop()
break;
}
floppy = mask->get(F_FLOPPY);
floppy << ':';
num_disk = calcola_numero_dischi(*mask,floppy);
percorso = mask->get(F_PATH);
if (percorso.not_empty())
{
floppy << ":/" << percorso;
floppy.add(percorso);
if (floppy.exist())
ok = TRUE;
else
message_box("Il percorso indicato non e' corretto");
error_box("Il percorso indicato non e' corretto");
}
else
ok = TRUE; // Se scelgo il dischetto non eseguo il controllo sulla correttezza del path
@ -236,11 +237,8 @@ void TInv_cont::main_loop()
const TFilename from(_trasf); // File da splittare
TFilename work;
if (percorso.not_empty())
work << floppy << "/" << from.name();
else
work << floppy << ":/" << from.name(); // File su dischetto
TFilename work = floppy;
work.add(from.name());
FILE* i = fopen(from, "rb");
@ -250,11 +248,7 @@ void TInv_cont::main_loop()
return;
}
const char* message;
if (floppy == "A" || floppy == "B")
message = "Trasferimento su dischetti in corso... Prego attendere";
else
message = "Trasferimento in corso... Prego attendere";
const char* message = "Trasferimento in corso... Prego attendere";
TProgind w(_dim_tot, message, TRUE, TRUE, 60);
@ -292,7 +286,6 @@ void TInv_cont::main_loop()
else
if (_scelta == 'P')
{
_trasf = "";
_trasf = firm2dir(0);
_trasf << "\\trasfer";
::remove(_trasf);
@ -327,7 +320,7 @@ void TInv_cont::main_loop()
if (floppy.exist())
ok = TRUE;
else
message_box("Il percorso indicato non e' corretto");
error_box("Il percorso indicato non e' corretto");
}
else
ok = TRUE; // Se scelgo il dischetto non eseguo il controllo sulla correttezza del path
@ -351,11 +344,7 @@ void TInv_cont::main_loop()
error_box("Impossibile aprire il file '%s'", from);
return;
}
const char* message;
if (floppy == "A" || floppy == "B")
message = "Trasferimento su dischetti in corso... Prego attendere";
else
message = "Trasferimento in corso... Prego attendere";
const char* message= "Trasferimento in corso... Prego attendere";
TProgind w(_dim_tot, message, TRUE, TRUE, 60);

View File

@ -52,19 +52,9 @@ bool TInv_cont::scrivi_disco(TString& floppy, int disk, const char* work,
else
aggiorna_marker(str,34);
TString path_m;
TString path_t;
if (floppy[0] == 'A' || floppy[0] == 'B')
{
path_m << floppy << ":\\marker";
path_t << floppy << ":\\trasfer";
}
else
{
path_m << floppy << "\\marker";
path_t << floppy << "\\trasfer";
}
TFilename path_m = floppy; path_m.add("marker");
TFilename path_t = floppy; path_t.add("trasfer");
if (!fcopy(_marker,path_m)) // Copia il marker su disco
return FALSE;
@ -2054,4 +2044,3 @@ void TInv_cont::write_AS_imp(const real& importo, TString& record, int pos, int
numero.right_just(len, '0');
record.overwrite(numero, pos);
}

View File

@ -9,6 +9,7 @@
#include <rmov.h>
#include <rmoviva.h>
#include "comuni.h"
#include "cglib01.h"
///////////////////////////////////////////////////////////
@ -219,6 +220,11 @@ bool TEsercizi_contabili::code2range(int codice, TDate& dal, TDate& al) const
return ok;
}
/////////////////////////////////////////////////////////
// Simpatici metodi jolly
/////////////////////////////////////////////////////////
const char* iva2name(TipoIVA iva)
{
const char* i;
@ -238,6 +244,36 @@ const char* iva2name(TipoIVA iva)
return i;
}
const TString& cap2comune(const TString& cap, const TString& denom)
{
TString8 cappone = cap;
if (cappone[2] == '1') //e' un capoluogo di provincia
cappone.overwrite("00", 3, 2);
TRelation relcom(LF_COMUNI);
TRectype& comrec = relcom.curr();
comrec.put(COM_CAPCOM, cappone);
TCursor comuni (&relcom, "", 3, &comrec, &comrec);
const TRecnotype items = comuni.items();
comuni.freeze();
TString& codcom = get_tmp_string();
double cmp = 0.69;
for (comuni = 0L; comuni.pos() < items; ++comuni)
{
const TString& denominazione = comrec.get(COM_DENCOM);
const double fc = xvt_str_fuzzy_compare (denom, denominazione);
if (fc > cmp)
{
codcom = comrec.get(COM_COM);
cmp = fc;
}
}
return codcom;
}
///////////////////////////////////////////////////////////
// Registro
///////////////////////////////////////////////////////////
@ -1045,4 +1081,4 @@ bool TBill::is_analitico() const
return true;
}
return false;
}
}

View File

@ -77,7 +77,8 @@ enum TipoIVA
iva_generica = 9
};
const char* iva2name(TipoIVA i);
const char* iva2name(TipoIVA i);
const TString& cap2comune(const TString& cap, const TString& denom);
class TMask_field;
bool handler_data_cambio(TMask_field& f, KEY k);

View File

@ -33,15 +33,15 @@ const word P_TOOMANY = 0x0400; // troppe rate (piu' di 999)
const word P_TOTNCVAL= 0x0800; // totale importi in valuta != totale pagamento
const word P_ZEROVAL = 0x1000; // importo di una rata in valuta uguale a zero
enum TTipo_pag{_rim_dir = 1, _tratta, _ric_ban, _cessione, _paghero, _let_cred, _tratta_acc, _rid, _bonfico, _nessun_pag};
enum TTipo_pag { _rim_dir = 1, _tratta, _ric_ban, _cessione, _paghero, _let_cred, _tratta_acc, _rid, _bonfico, _nessun_pag };
class TPagamento : public TObject
{
TString _code; // codice
TString4 _code; // codice
TString _name; // descrizione
real _imponval; // imponibile da affettare
real _imposval; // imposta da affettare
real _speseval; // spese da affettare
real _imponval; // imponibile da affettare
real _imposval; // imposta da affettare
real _speseval; // spese da affettare
real _imponlit; // imponibile da affettare in lire (se imp. in valuta)
real _imposlit; // imposta da affettare in lire
real _speselit; // spese da affettare in lire
@ -130,7 +130,7 @@ public:
int scad_rata(int n) const { return _rata_ifield(n,0);}
real perc_rata(int n) const { return _rata_rfield(n,1);}
int tipo_rata(int n) const { return _rata_ifield(n,2);}
TTipo_pag tipo_rata(int n) const { return (TTipo_pag)_rata_ifield(n,2);}
TDate data_rata(int n) const { return _rata_dfield(n,3);}
real importo_rata(int n, bool v = FALSE) const
{ return v ? tval_rata(n) : tlit_rata(n); }
@ -169,10 +169,10 @@ public:
const TDate& get_inizio() const { return _inizio; }
const TDate& get_datadoc() const { return _datadoc; }
void set_datadoc(const TDate & d) { _datadoc = d;}
void set_inizio_scadenza(char v) { _inscad = v; }
void set_code(const char* c) { _code = c; }
void set_roundval(int n) { _roundval = n; }
void set_datadoc(const TDate & d) { _datadoc = d;}
void set_inizio_scadenza(char v) { _inscad = v; }
void set_code(const char* c) { _code = c; }
void set_roundval(int n) { _roundval = n; }
bool in_valuta() const { return _in_valuta; }
// const real& cambio() const { return _cambio; }

View File

@ -518,12 +518,6 @@ TYPE(17) = DATA
POSITION(17) = 72
LENGTH(17) = 8
NAME(18) = CODICE PAGAMENTO
TYPE(18) = NUMERO
POSITION(18) = 80
LENGTH(18) = 3
FIELD(18)=23->CODPAG[1,3]
NAME(19) = TIPO PAGAMENTO
TYPE(19) = STRINGA
POSITION(19) = 83

View File

@ -166,7 +166,19 @@ public:
TCache(size_t size = 0); // 883 assigned by default
virtual ~TCache();
};
/*
__ass = TAssoc_array da scandire
__obj = variabile del cazzo che serve internamente al ciclo; va nominata e dimenticata
__key = nome della variabile del record corrente dell'Assoc (primo campo)
__str = valore del record corrente dell'Assoc (secondo campo)
Es:
TAssoc_array ass;
TString str;
FOR_EACH_ASSOC_STRING(ass, ho, k, str)
{
usa in qualche modo k e str presi da ass;
}
*/
#define FOR_EACH_ASSOC_STRING(__ass, __obj, __key, __str) \
const char *__key, *__str; __ass.restart(); \
for (THash_object* __obj = __ass.get_hashobj(); \

View File

@ -37,27 +37,33 @@
#define CLI_MAIL "MAIL"
#define CLI_DATANASC "DATANASC"
#define CLI_STATONASC "STATONASC"
#define CLI_COMNASC "COMNASC"
#define CLI_CODSTAT "CODSTAT"
#define CLI_CODABI "CODABI"
#define CLI_CODCAB "CODCAB"
#define CLI_IBAN "IBAN"
#define CLI_COMNASC "COMNASC"
#define CLI_SCONTO "SCONTO"
#define CLI_CODVAL "CODVAL"
#define CLI_RAGGRB "RAGGRB"
#define CLI_RAGGFT "RAGGFT"
#define CLI_FIDO "FIDO"
#define CLI_RAGGFT "RAGGFT"
#define CLI_CODVETT1 "CODVETT1"
#define CLI_CODVETT2 "CODVETT2"
#define CLI_CODVETT3 "CODVETT3"
#define CLI_CODCFATT "CODCFATT"
#define CLI_DESTIN "DESTIN"
#define CLI_CODAG "CODAG"
#define CLI_CODPAG "CODPAG"
#define CLI_SOSPESO "SOSPESO"
#define CLI_OCCAS "OCCAS"
#define CLI_CODAG "CODAG"
#define CLI_CODZONA "CODZONA"
#define CLI_CODSTAT "CODSTAT"
#define CLI_CODABI "CODABI"
#define CLI_CODCAB "CODCAB"
#define CLI_NUMCC "NUMCC"
#define CLI_IBAN "IBAN"
#define CLI_OCCAS "OCCAS"
#define CLI_STATO "STATO"
#define CLI_CODVAL "CODVAL"
#define CLI_CODLIN "CODLIN"
#define CLI_CODZONA "CODZONA"
#define CLI_FIDO "FIDO"
#define CLI_CODPAG "CODPAG"
#define CLI_RICALT "RICALT"
#define CLI_OGGETTI "OGGETTI"
#define CLI_SOSPESO "SOSPESO"
#define CLI_DIRTY "DIRTY"
#define CLI_REFERENTE "REFERENTE"
#define CLI_VALINTRA "VALINTRA"
#endif

View File

@ -191,7 +191,14 @@ void TFile_text::set_gen_parm(TConfig& config, const TString& section)
{
_decsep = config.get_char("DECSEP",section);
_recordsize = config.get_int("RECORDSIZE",section); // solo se a lung. fissa
_fieldsep = config.get_char("FIELDSEP",section); // solo se a lung. variabile
TString tmpstring = config.get("FIELDSEP",section); // solo se a lung. variabile
if (tmpstring[0] == '\\')
{
if (tmpstring = "\t")
_fieldsep = '\t';
}
else
_fieldsep = tmpstring[0]; // solo se a lung. variabile
_recordsep = config.get("RECORDSEP",section); // solo se a lung. variabile
if (_recordsize <= 0 && _recordsep.empty()) // separatore di record standard
_recordsep = "\r\n";
@ -522,7 +529,7 @@ int TFile_text::read(TRecord_text& rec)
}
}
if (_fieldsep > ' ')
if (_fieldsep != ' ')
{
buffer.separator(_fieldsep);

View File

@ -666,7 +666,7 @@ void TGolem_window::handler(WINDOW win, EVENT* ep)
TFilename fname; // File corrente
for (int i = 0; i < num_files; i++)
{
DragQueryFile(hdrop, i, (char*)(const char*)fname, fname.size());
::DragQueryFile(hdrop, i, (char*)(const char*)fname, fname.size());
fname << '|' << fname.name() << "|X";
if (driver()->roman())
{
@ -678,7 +678,7 @@ void TGolem_window::handler(WINDOW win, EVENT* ep)
break;
}
}
DragFinish(hdrop);
::DragFinish(hdrop);
driver()->set(file_list);
#endif
on_key(K_SPACE);
@ -704,7 +704,7 @@ TGolem_window::TGolem_window(int x, int y, int dx, int dy, WINDOW parent, TGolem
#ifdef WIN32 // verificare
HWND nat = (HWND)xvt_vobj_get_attr(win(), ATTR_NATIVE_WINDOW);
DragAcceptFiles(nat, TRUE);
::DragAcceptFiles(nat, TRUE);
#endif
}
@ -712,9 +712,9 @@ TGolem_window::~TGolem_window()
{
#ifdef WIN32 // verificare
if (_last_handle)
PostMessage(HWND(_last_handle), WM_CLOSE, 0, 0);
::PostMessage(HWND(_last_handle), WM_CLOSE, 0, 0);
HWND nat = (HWND)xvt_vobj_get_attr(win(), ATTR_NATIVE_WINDOW);
DragAcceptFiles(nat, FALSE);
::DragAcceptFiles(nat, FALSE);
#endif
}

View File

@ -166,6 +166,7 @@
#define LF_RRILPROD 153
#define LF_LETINT 154
#define LF_MULTIREL 155
#define LF_PANAPDC 155

View File

@ -4617,11 +4617,6 @@ void TList_field::add_list()
csafe = _codes; _codes = "";
vsafe = _values; _values = "";
}
/*
_codes.add("01|02|03|04|05|06|07|08|09|10|11|12");
_values.add("Gennaio|Febbraio|Marzo|Aprile|Maggio|Giugno|"
"Luglio|Agosto|Settembre|Ottobre|Novembre|Dicembre");
*/
for (int i = 1; i <= 12; i++)
{
char num[4]; sprintf(num, "%02d", i);

View File

@ -130,7 +130,7 @@ class TSpreadsheet : public TControl
// @access:(INTERNAL) Private Member
// @cmember:(INTERNAL) costanti
enum {MAX_COL=64};
enum {MAX_COL=96};
static int NUMBER_WIDTH;
// @cmember:(INTERNAL) Array di TToken_strings contenenti le righe
@ -613,7 +613,7 @@ TSpreadsheet::TSpreadsheet(
memset(_default_width, 0, sizeof(_default_width));
for (i = 0; i < num; i++)
{
RCT rct; xi_get_rect(column[i], (XinRect *) &rct);
XI_RCT rct; xi_get_rect(column[i], &rct);
_default_width[i] = rct.right - rct.left;
}
}
@ -1768,6 +1768,7 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
if (next_rec >= 0)
{
dispatch_e_char(parent(), k == K_ENTER ? K_DOWN : K_UP);
refused = TRUE;
}
else
{

View File

@ -343,14 +343,14 @@ TMultiple_rectype & TMultiple_rectype::copy(const TMultiple_rectype& r)
return *this;
}
// @mfunc Copia il multiple rectype r su quello corrente
// @mfunc Ritorna il numero di righe caricate
int TMultiple_rectype::loaded_rows(int logicnum) const
{
const int index = log2ind(logicnum);
TRecord_array* r = (TRecord_array*) ((TMultiple_rectype *) this)->_files.objptr(index);
if (_changed[index] || r == NULL)
if (_changed[index] || r == NULL)
return 0;
return r->rows();
}
@ -455,8 +455,8 @@ TRectype & TMultiple_rectype::insert_row(int row, int logicnum)
TRectype & TMultiple_rectype::new_row(int logicnum)
{
TRecord_array & b = body(logicnum);
TRectype & r = b.row(-1, TRUE);
TRecord_array& b = body(logicnum);
TRectype& r = b.row(-1, true);
return r;
}

10
include/multirel.h Executable file
View File

@ -0,0 +1,10 @@
#ifndef __MULTIREL_H
#define __MULTIREL_H
#define MULTI_COD "COD"
#define MULTI_FIRST "FIRST"
#define MULTI_SECOND "SECOND"
#define MULTI_DATA "DATA"
#endif

View File

@ -1,7 +1,27 @@
#include <odbcrset.h>
#include <utility.h>
void TODBC_recordset::close()
///////////////////////////////////////////////////////////
// TODBC_connections
///////////////////////////////////////////////////////////
class TODBC_connections
{
TString _dsn, _usr;
XVT_ODBC _odbc;
protected:
void close();
public:
XVT_ODBC get(const char* dsn, const char* usr, const char* pwd, const char* dir);
TODBC_connections();
~TODBC_connections();
};
TODBC_connections _connections;
void TODBC_connections::close()
{
if (_odbc != NULL)
{
@ -10,18 +30,38 @@ void TODBC_recordset::close()
}
}
bool TODBC_recordset::connect(const char* dsn, const char* usr, const char* pwd, const char* dir)
XVT_ODBC TODBC_connections::get(const char* dsn, const char* usr, const char* pwd, const char* dir)
{
if (_odbc == NULL || _dsn != dsn || _usr != usr)
{
close();
if (dsn && *dsn)
_odbc = xvt_odbc_get_connection(_dsn = dsn, _usr = usr, pwd, dir);
}
return _odbc;
}
TODBC_connections::TODBC_connections() : _odbc(NULL)
{}
TODBC_connections::~TODBC_connections()
{
close();
_odbc = xvt_odbc_get_connection(dsn, usr, pwd, dir);
return _odbc != NULL;
}
///////////////////////////////////////////////////////////
// TODBC_recordset
///////////////////////////////////////////////////////////
XVT_ODBC TODBC_recordset::connection() const
{
if (_odbc == NULL)
((TODBC_recordset*)this)->connect("");
return _odbc;
return _connections.get(_dsn, _usr, _pwd, _dir);
}
bool TODBC_recordset::connect(const char* dsn, const char* usr, const char* pwd, const char* dir)
{
_dsn = dsn; _usr = usr; _pwd = pwd; _dir = dir;
return connection() != NULL;
}
const TString& TODBC_recordset::query_text() const
@ -136,9 +176,11 @@ TRecnotype TODBC_recordset::items() const
TRecnotype& i = (TRecnotype&)_items;
if (!_columns_loaded)
{
((TArray&)_page).destroy();
TODBC_recordset* myself = (TODBC_recordset*)this;
myself->_page.destroy();
myself->_cursor_pos = 0;
i = xvt_odbc_execute(connection(), sql, query_get_items, (void*)this);
(bool&)_columns_loaded = true;
myself->_columns_loaded = true;
}
else
i = xvt_odbc_execute(connection(), sql, NULL, NULL);
@ -150,10 +192,12 @@ unsigned int TODBC_recordset::columns() const
{
if (!_columns_loaded && _column.items() == 0)
{
TODBC_recordset* myself = (TODBC_recordset*)this;
TString sql; parsed_text(sql);
TPerformance_profiler prof("ODBC info");
myself->_cursor_pos = 0;
xvt_odbc_execute(connection(), sql, query_get_columns, (void*)this);
(bool&)_columns_loaded = true;
myself->_columns_loaded = true;
}
return _column.items();
}
@ -173,6 +217,9 @@ int TODBC_recordset::on_get_rows(int argc, char** values, char** columns)
if (_page.items() >= _pagesize)
return -1;
if (_cursor_pos++ < _first_row)
return 0; // Ignora le righe prima del LIMIT
TArray* a = new TArray;
for (int c = 0; c < argc; c++)
@ -232,15 +279,12 @@ bool TODBC_recordset::move_to(TRecnotype n)
sql.trim();
_page.destroy();
if (n >= _pagesize)
_first_row = n-_pagesize/8; // Prendo qualche riga dalla pagina precedente, per velocizzare il pagina su
_first_row = n-32; // Prendo qualche riga dalla pagina precedente, per velocizzare il pagina su
else
_first_row = n;
sql << "\nLIMIT ";
if (_first_row > 0)
sql << _first_row << ',';
sql << _pagesize << ';';
}
TPerformance_profiler prof("ODBC query");
_cursor_pos = 0;
xvt_odbc_execute(connection(), sql, query_get_rows, this);
if (!_columns_loaded)
_columns_loaded = true; // Brutto posto ma necessario
@ -315,15 +359,13 @@ void TODBC_recordset::set(const char* sql)
find_and_reset_vars();
}
TODBC_recordset::TODBC_recordset(const char* sql) : _odbc(NULL)
TODBC_recordset::TODBC_recordset(const char* sql)
{
set(sql);
}
TODBC_recordset::~TODBC_recordset()
{
close();
}
{ }
///////////////////////////////////////////////////////////
// Creazione "intelligente" del recordset appropriato in base alla query
@ -332,7 +374,7 @@ TODBC_recordset::~TODBC_recordset()
TRecordset* create_recordset(const TString& sql)
{
TRecordset* rex = NULL;
if (!sql.blank())
if (sql.full())
{
if (sql.starts_with("US", true))
rex = new TISAM_recordset(sql);

View File

@ -7,10 +7,10 @@
class TODBC_recordset : public TRecordset
{
TString _dsn, _usr, _pwd, _dir;
TString _sql;
XVT_ODBC _odbc;
TRecnotype _first_row, _pagesize, _items, _current_row;
TRecnotype _first_row, _pagesize, _items, _current_row, _cursor_pos;
TArray _page;
TArray _column;
@ -18,10 +18,7 @@ class TODBC_recordset : public TRecordset
protected:
XVT_ODBC connection() const;
void close();
void reset();
const TArray* row(TRecnotype n);
public:

View File

@ -1,54 +0,0 @@
#include <printapp.h>
#include <iostream.h>
#include <lffiles.h>
#include <stdio.h>
class MyApp : public TPrintapp
{
int counter;
public:
virtual void preprocess_page();
virtual bool create();
MyApp() : TPrintapp()
{ counter = 0; }
};
void MyApp::preprocess_page()
{
reset_row(1);
set_row(1,"%d: Ragsoc: @10S", ++counter, FLD(LF_ANAG,"RAGSOC"));
}
bool MyApp::create()
{
TPrintapp::create();
disable_sorting_menu();
disable_selection_menu();
return TRUE;
}
main(int argc, char* argv[])
{
MyApp app;
int dummy;
cout << "process is: " << getpid();
fscanf(stdin,"%d",&dummy);
TRelation tr_giu(LF_ANAG);
TCursor ttr(&tr_giu);
app.cursor(&ttr);
app.set_config_file("pr2.stp");
app.set_row(2,"-------- riga statica con codanagr: @pn --------",
FLD(LF_ANAG,"CODANAGR","@@@@@@@@@"));
app.run(argc, argv, "Trial Print Application");
}

View File

@ -1119,38 +1119,37 @@ bool TPrint_application::print_tree (link_item * head)
{
head->_cnt = 0;
if (_cur->is_first_match (head->_logicnum))
{
do
{
if (!preprocess_print (head->_logicnum, head->_cnt))
break;
do
{
// set print rows according to current file
if (_force_setpage || _cur_file != head->_logicnum
|| !_print_defined)
{
reset_print ();
set_page(head->_logicnum, head->_cnt);
_cur_file = head->_logicnum;
}
int cnt2 = 0;
do
{
if (!preprocess_page (head->_logicnum, cnt2))
break;
go = print_one (head->_logicnum);
if (go && head->_son)
go = print_tree (head->_son);
if (!preprocess_print (head->_logicnum, head->_cnt))
break;
do
{
// set print rows according to current file
if (_force_setpage || _cur_file != head->_logicnum
|| !_print_defined)
{
reset_print ();
set_page(head->_logicnum, head->_cnt);
_cur_file = head->_logicnum;
}
int cnt2 = 0;
do
{
if (!preprocess_page (head->_logicnum, cnt2))
break;
go = print_one (head->_logicnum);
if (go && head->_son)
go = print_tree (head->_son);
}
while (go && postprocess_page (head->_logicnum, cnt2++) ==
REPEAT_PAGE);
}
while (go && _cur->next_match (head->_logicnum));
}
while (go && postprocess_page (head->_logicnum, cnt2++) ==
REPEAT_PAGE);
while (go && postprocess_print (head->_logicnum, head->_cnt++) == REPEAT_PAGE);
}
while (go && _cur->next_match (head->_logicnum));
}
while (go && postprocess_print (head->_logicnum, head->_cnt++)
== REPEAT_PAGE);
}
if (!go)
break;
go = TRUE;
@ -1568,7 +1567,7 @@ bool TPrint_application::create()
dispatch_e_menu (_last_choice);
return TRUE;
}
else return FALSE;
return FALSE;
}
bool TPrint_application::destroy ()

View File

@ -1149,6 +1149,7 @@ void TPrinter::init_formlen(
_formlen = int(ph * _lines_per_inch / pvr); // Total number of lines per page
_dots_per_line = int(pvr / _lines_per_inch); // Number of point per line
_vert_offset = (int)(ph - ((long)_formlen * _dots_per_line)) >> 1;
_formwidth = int ((pw * 120) / (_ch_size * phr)); // nice guess
if (prwin != NULL_WIN)
{
@ -1157,7 +1158,7 @@ void TPrinter::init_formlen(
TString256 spc; spc.fill('m', maxcol);
_formwidth = maxcol;
int w = 0;
int w = 0;
while (mincol < maxcol )
{
w = xvt_dwin_get_text_width(prwin, (char*)(const char*)spc, _formwidth);
@ -1174,7 +1175,7 @@ void TPrinter::init_formlen(
}
else
{
_formwidth = int (pw * (_ch_size * 10 / 12) / phr);
// _formwidth = int (pw * (_ch_size * 10 / 12) / phr); / ca$$ata
_horz_offset = 0;
}
}
@ -2014,12 +2015,14 @@ HIDDEN BOOLEAN calc_font_callback(long data)
font_data& fd = *(font_data*)data;
// Create print window
WINDOW win = xvt_print_create_win(printer().get_printrcd(), "Calcolo font");
TPrinter& pr = printer();
WINDOW win = xvt_print_create_win(pr.get_printrcd(), "Calcolo font");
if (win != NULL_WIN)
{
long pw, ph, phr, pvr; // Printer width, height, horizontal and vertical resolution
xvt_app_escape (XVT_ESC_GET_PRINTER_INFO, printer().get_printrcd(), &ph, &pw, &pvr, &phr);
xvt_set_font(win, pr.fontname(), XVT_FS_NONE, pr.get_char_size());
TString test(fd._columns);
test.fill('M', fd._columns);
@ -2061,26 +2064,26 @@ int TPrinter::calc_font_size(int columns) const
HIDDEN BOOLEAN calc_cols_callback(long data)
{
int &numcols=*(int *)data;
// Create print window
WINDOW win = xvt_print_create_win(printer().get_printrcd(), "Calcolo numero colonne");
TPrinter& pr = printer();
WINDOW win = xvt_print_create_win(pr.get_printrcd(), "Calcolo numero colonne");
if (win != NULL_WIN)
{
long pw, ph, phr, pvr; // Printer width, height, horizontal and vertical resolution
xvt_app_escape (XVT_ESC_GET_PRINTER_INFO, printer().get_printrcd(), &ph, &pw, &pvr, &phr);
xvtil_set_font(win, printer().fontname(), XVT_FS_NONE, printer().get_char_size());
xvt_app_escape (XVT_ESC_GET_PRINTER_INFO, pr.get_printrcd(), &ph, &pw, &pvr, &phr);
xvtil_set_font(win, printer().fontname(), XVT_FS_NONE, pr.get_char_size());
// Compute maximum number of chars per line
int mincol = 0,maxcol=MAX_PR_WIDTH;
TString spc(maxcol,'M' );
int mincol = 1, maxcol=MAX_PR_WIDTH;
const TString spc(maxcol,'M');
numcols = maxcol;
int w;
numcols = (pw * 120) / (pr.get_char_size() * phr); // Primo guess
while (mincol < maxcol )
{
w = xvt_dwin_get_text_width(win, (char*)(const char*)spc, numcols);
const int w = xvt_dwin_get_text_width(win, spc, numcols);
if (w < pw)
mincol = numcols+1;
else
@ -2097,10 +2100,10 @@ HIDDEN BOOLEAN calc_cols_callback(long data)
// Funzione chiamata solo da sv1200, ma non si capisce perche' non usi la formwidth()
int TPrinter::calc_num_cols() const
{
int numcols;
int numcols = 80; // Default sensato
xvt_print_open();
xvt_print_start_thread(calc_cols_callback, (long)&numcols);
xvt_print_close();
return numcols;
}
}

View File

@ -59,6 +59,7 @@
#define RDOC_CODCMS "CODCMS"
#define RDOC_FASCMS "FASCMS"
#define RDOC_CODCOSTO "CODCOSTO"
#define RDOC_CODAGG1 "CODAGG1"
#define RDOC_CODAGG2 "CODAGG2"
#endif

View File

@ -69,6 +69,7 @@ void TRecord_array::set_key(TRectype* r)
{
const RecDes* recd = r->rec_des(); // Descrizione del record della testata
const KeyDes& kd = recd->Ky[0]; // Elenco dei campi della chiave 1
// Copia tutti i campi chiave, tranne l'ultimo, in tutti i records
TString val;
for (int i = kd.NkFields-2; i >= 0; i--)
@ -77,14 +78,15 @@ void TRecord_array::set_key(TRectype* r)
const RecFieldDes& rf = recd->Fd[nf];
val = r->get(rf.Name);
renum_key(rf.Name, val);
CHECKS(i > 0 || val.full(), "First key field can't be empty: ", rf.Name);
}
}
}
const TRectype& TRecord_array::key() const
{
TRectype* r = (TRectype*)_data.objptr(0);
CHECK(r, "TRecord_array lost its key");
const TRectype* r = (const TRectype*)_data.objptr(0);
CHECK(r && !r->empty(), "TRecord_array lost its key");
return *r;
}
@ -116,7 +118,7 @@ TRectype& TRecord_array::row(
if (r == NULL && create)
{
r = (TRectype*)key().dup(); // Crea nuovo record copiando la chiave
n = _data.add(r, i) + _offset; // Riassegna n se era negativo!
n = _data.add(r, i) + _offset; // Riassegna n se era negativo!
char str[16]; sprintf(str, "%d", n);
r->renum_key(_num, str); // Aggiorna campo numero riga
}

View File

@ -174,9 +174,14 @@ bool TRecordset::save_as_html(const char* path)
ofstream out(path);
out << "<html>" << endl;
out << "<body>" << endl;
out << "<table border=\"1\">" << endl;
out << " <caption><h1>" << path << "</h1></caption>" << endl;
TString qry; parsed_text(qry);
for (int i = qry.find('\n'); i > 0; i = qry.find('\n', i+1))
qry.insert("<br/>", i+1);
out << "<p><b>" << qry << "</b></p>" << endl;
out << "<table border=\"1\">" << endl;
out << " <thead>";
for (unsigned int c = 0; c < columns(); c++)
{
@ -664,17 +669,22 @@ bool list_custom_files(const char* ext, const char* classe, TString_array& files
TString_array lista;
TFilename path;
// Leggo i files in custom
if (main_app().has_module(RSAUT))
{
TFilename custom = firm2dir(-1);
custom.add("custom");
if (!custom.exist())
xvt_fsys_mkdir(custom);
path = custom;
path.add("*");
path.ext(ext);
{
TWait_cursor hourglass;
TString_array files;
// Leggo i files in custom
if (main_app().has_module(RSAUT))
{
TFilename custom = firm2dir(-1);
custom.add("custom");
if (!custom.exist())
xvt_fsys_mkdir(custom);
path = custom;
path.add("*");
path.ext(ext);
list_files(path, lista);
}
@ -682,6 +692,7 @@ bool list_custom_files(const char* ext, const char* classe, TString_array& files
list_files(path, lista);
sort_files(lista); // Ordino i files e rimuovo i doppioni
TString8 acqua;
TString stringona, desc;
@ -699,6 +710,7 @@ bool list_custom_files(const char* ext, const char* classe, TString_array& files
get_xml_attr(stringona, "class", acqua);
if (classe && *classe)
ok = acqua == classe;
if (ok)
{
@ -708,6 +720,7 @@ bool list_custom_files(const char* ext, const char* classe, TString_array& files
riga->add(acqua);
riga->add(desc);
files.add(riga);
}
}
}
@ -721,6 +734,7 @@ bool select_custom_file(TFilename& path, const char* ext, const char* library)
TString_array& files = sheet.rows_array();
bool ok = list_custom_files(ext, library, files);
if (ok)
{
TFilename name;
@ -1436,7 +1450,7 @@ bool TSQL_recordset::move_to(TRecnotype n)
sql.trim();
_page.destroy();
if (n >= _pagesize)
_first_row = n-_pagesize/8; // Prendo qualche riga dalla pagina precedente, per velocizzare il pagina su
_first_row = n-32; // Prendo qualche riga dalla pagina precedente, per velocizzare il pagina su
else
_first_row = n;
sql << "\nLIMIT " << _pagesize << " OFFSET " << _first_row << ';';
@ -2196,7 +2210,7 @@ unsigned int TISAM_recordset::columns() const
bool TISAM_recordset::move_to(TRecnotype pos)
{
TCursor* c = cursor();
bool ok = c != NULL;
bool ok = c != NULL && pos >= 0;
if (ok)
{
*c = pos;
@ -2275,4 +2289,3 @@ TRecordset_sheet::TRecordset_sheet(TRecordset& query)
: TSheet(-1, -1, -2, -4, "Query", query.sheet_head()), _query(query)
{
}

View File

@ -2124,6 +2124,17 @@ bool TReport::load(const char* fname)
}
}
}
_allegati.destroy();
const TXmlItem* all = xml.FindFirstChild("allegates");
if (all != NULL)
{
for (int i = 0; i < all->GetChildren(); i++)
{
const TXmlItem* item = all->GetChild(i);
_allegati.add(item->GetAttr("name"));
}
}
}
return ok;
}
@ -2177,6 +2188,15 @@ bool TReport::save(const char* fname) const
item << str->get();
}
}
if (_allegati.items() > 0) // Salva lista dei parametri se necessario
{
TXmlItem& all = xml.AddChild("allegates");
FOR_EACH_ARRAY_ROW(_allegati, i, str) if (str->full())
{
TXmlItem& item = all.AddChild("item");
item.SetAttr("name", *str);
}
}
xml.Save(fname);
}
@ -2290,6 +2310,14 @@ bool TReport::get_report_field(const TString& name, TVariant& var) const
var = long(_book_page);
return true;
}
else
if (strncmp(str, "ALLEGATE", 8) == 0)
{
const int index = atoi(str + 9);
if (index >= 0 && index < _allegati.items())
var = _allegati.row(index);
return true;
}
return found;
}
@ -2973,4 +3001,4 @@ TReport::TReport()
TReport::~TReport()
{
destroy();
}
}

View File

@ -464,6 +464,7 @@ class TReport : public TAlex_virtual_machine
word _rep_page, _book_page;
bool _use_printer_font;
int _orientation;
TString_array _allegati;
TReport_field* _curr_field;
protected:
@ -539,8 +540,8 @@ public:
virtual bool execute_prescript();
virtual bool execute_postscript();
const TString_array& params() const { return _params; }
void set_params(const TString_array& p) { _params = p; }
const TString_array& params() const { return _params; }
void set_libraries(const char* inc) { _include = inc; }
TToken_string& get_libraries() { return _include; }
@ -549,6 +550,9 @@ public:
void set_description(const char* d) { _description = d; }
const TString& description() const { return _description; }
void set_allegates(const TString_array& all) { _allegati = all; }
const TString_array& allegates() const { return _allegati; }
const TFilename& filename() const { return _path; }
bool save(const char* fname) const;
bool load(const char* fname);
@ -567,6 +571,7 @@ public:
void report2mask(TMask & m) const;
void mask2report(const TMask & m);
void destroy();
TReport();

View File

@ -92,6 +92,7 @@ void advanced_draw_text_line(TWindow& win, const char* text, const RCT& r, char
RCT clipper;
xvt_rect_intersect(&clipper, &orig, (RCT*)&r);
xvt_dwin_set_clip(w, (RCT*)&clipper);
}
else
xvt_dwin_set_clip(w, (RCT*)&r);
@ -734,21 +735,42 @@ TPreview_mask::TPreview_mask(TBook* book) : _book(book)
class TWindow_printer : public TWindow
{
protected:
bool is_ok() const { return win() != NULL_WIN; }
public:
bool print_doc(const TFilename& name);
TWindow_printer(PRINT_RCD* rcd);
~TWindow_printer();
};
bool TWindow_printer::print_doc(const TFilename& name)
{
bool ok = name.exist();
if (ok)
{
const bool printing = is_ok();
if (printing)
xvt_print_suspend_thread();
ok = xvt_sys_goto_url(name, "print") != 0;
if (printing)
xvt_print_restart_thread();
}
return ok;
}
TWindow_printer::TWindow_printer(PRINT_RCD* rcd)
{
WINDOW prwin = xvt_print_create_win(rcd, "Stampa");
set_win(prwin);
_pixmap = true;
}
TWindow_printer::~TWindow_printer()
{
if (win() != NULL_WIN)
if (is_ok())
{
xvt_vobj_destroy(win());
set_win(NULL_WIN);
@ -837,12 +859,20 @@ int TBook::compute_text_frame(const TString& tmp, const TReport_font& font, TRec
TPoint TBook::page_size() const
{
if (_pw <= 0 || _ph <= 0) // Valori nulli: mi invento un A4
{
TPoint pag = page_res();
pag.x *= 8; pag.y *= 11;
return pag;
}
return TPoint(_pw, _ph);
}
TPoint TBook::page_res() const
{
return TPoint(_phr, _pvr);
const int resx = _phr > 0 ? _phr : 96;
const int resy = _pvr > 0 ? _pvr : 96;
return TPoint(resx, resy);
}
bool TBook::open_page()
@ -874,8 +904,8 @@ bool TBook::close_page()
*_out << "</page number=" << page() << '>' << endl;
_pages++;
_page_is_open = false;
return true;
}
@ -1029,6 +1059,13 @@ void TBook::draw_image(const TRectangle& rect, const char* name)
*_out << "<image src=\"" << name << "\" />" << endl;
}
void TBook::add_doc(const TString& name)
{
TBook::open_page();
*_out << "<doc url=\"" << name << "\" />"<< endl;
TBook::close_page();
}
///////////////////////////////////////////////////////////
// Reading a page
///////////////////////////////////////////////////////////
@ -1070,6 +1107,46 @@ int get_xml_int(const TString& line, const char* attr, int def)
return def;
}
void TBook::print_doc(TWindow& win, const TFilename& name)
{
const bool print = win.win() == 883;
if (print)
{
TWindow_printer& wp = (TWindow_printer&)win;
wp.print_doc(name);
}
else
{
TPoint ps = page_size();
TRectangle rect(TPoint(0,0), ps);
RCT page; win.log2dev(rect, page);
advanced_draw_text(win, name, page, 'C', 'T');
const TPoint pr = page_res();
rect.deflate(pr.x/2, pr.y/2);
win.log2dev(rect, page);
TString4 ext = name.right(3); ext.lower();
if (ext == "bmp" || ext == "gif" || ext == "jpg" || ext == "peg")
{
const TImage* img = _images.image(name);
if (img != NULL)
{
const double sx = double(page.right) / double(img->width());
const double sy = double(page.bottom) / double(img->height());
const double s = sx < sy ? sx : sy;
const int w = int(s * img->width());
const int h = int(s * img->height());
RCT rct;
rct.left = (page.right+page.left-w)/2; rct.right = rct.left + w;
rct.top = (page.bottom+page.top-h)/2; rct.bottom = rct.top + h;
img->draw(win.win(), rct);
}
}
}
}
bool TBook::print_page(TWindow& win, size_t page)
{
if (page <= 0 || page > pages())
@ -1105,6 +1182,8 @@ bool TBook::print_page(TWindow& win, size_t page)
_horizontal_alignment = 'L'; // Reset text alignment
_vertical_alignment = 'T';
bool page_is_open = false; // Stato attuale della pagina della stampante
while (!ifs.eof())
{
@ -1112,6 +1191,27 @@ bool TBook::print_page(TWindow& win, size_t page)
if (str.starts_with("</page"))
break;
if (str.starts_with("<page "))
{
// Non apro ora la pagina sulla stampante perche' potrei incontrare un allegato
continue;
}
if (str.starts_with("<doc")) // Stampa il documento allegato senza aprire la pagina su carta
{
TFilename name; get_xml_string(str, "url", name);
print_doc(win, name);
continue;
}
// Per i comandi successivi serve una pagina aperta!
if (!page_is_open && !preview)
{
page_is_open = xvt_print_open_page(_rcd) != 0;
if (!page_is_open)
return false;
}
if (str.starts_with("<a "))
{
if (preview && rct.bottom >= visible.top && rct.top <= visible.bottom)
@ -1140,7 +1240,7 @@ bool TBook::print_page(TWindow& win, size_t page)
rl->set(field, stringona);
rl->add_rect(rct);
if (!stringona.blank() && rct.right > rct.left) // Possono esserci campi chiave nascosti
if (stringona.full() && rct.right > rct.left) // Possono esserci campi chiave nascosti
{
DRAW_CTOOLS dct;
xvt_dwin_get_draw_ctools(w, &dct);
@ -1153,7 +1253,8 @@ bool TBook::print_page(TWindow& win, size_t page)
win.set_color(COLOR_BLUE, dct.back_color);
advanced_draw_text_line(win, stringona, rct, _horizontal_alignment, _vertical_alignment);
win.set_color(dct.fore_color, dct.back_color);
xvt_dwin_set_font(w, oldfont);
xvt_dwin_set_font(w, oldfont);
xvt_font_destroy(newfont);
}
}
}
@ -1174,10 +1275,12 @@ bool TBook::print_page(TWindow& win, size_t page)
{
xvt_dwin_set_clip(w, &rct);
} else
if (str.starts_with("</clip"))
{
xvt_dwin_set_clip(w, NULL);
} else
if (str == "<ellipse/>")
{
xvt_dwin_draw_oval(w, &rct);
@ -1201,6 +1304,7 @@ bool TBook::print_page(TWindow& win, size_t page)
xvt_dwin_set_font(w, font.get_preview_font(win, page_res()));
else
xvt_dwin_set_font(w, font.get_xvt_font(win));
continue;
}
if (str.starts_with("<image "))
@ -1217,6 +1321,7 @@ bool TBook::print_page(TWindow& win, size_t page)
const PNT to = { rct.bottom, rct.right };
xvt_dwin_draw_set_pos(w, fr);
xvt_dwin_draw_line(w, to);
continue;
}
if (str == "<pages/>")
@ -1302,6 +1407,11 @@ bool TBook::print_page(TWindow& win, size_t page)
plinks.sort();
}
}
else
{
if (page_is_open)
xvt_print_close_page(_rcd);
}
return true;
}
@ -1482,18 +1592,10 @@ bool TBook::main_loop()
_print_aborted = false;
for (size_t c = 0; c < _copies && !_print_aborted; c++)
{
for (size_t page = _pagefrom; page <= _pageto; page++)
for (size_t page = _pagefrom; page <= _pageto && !_print_aborted; page++)
{
if (xvt_print_open_page(_rcd))
{
print_page(*_printwin, page);
xvt_print_close_page(_rcd);
}
else
{
if (!print_page(win, page))
_print_aborted = true;
break;
}
}
}
@ -1574,7 +1676,8 @@ bool TBook::print_or_preview()
TBook::TBook(const char* name)
: _out(NULL), _is_temporary(false),
_pw(0), _ph(0), _pvr(0), _phr(0),
_pages(0), _page(0), _rcd(NULL), _printwin(NULL)
_pages(0), _page(0), _rcd(NULL), _printwin(NULL), _page_is_open(false)
{
_file = name;
if (_file.blank())
@ -1853,8 +1956,8 @@ long TReport_book::print_section(TReport_section& rs)
rs.print(*this);
}
if (rs.level() > 0) // Ho stampato qualcosa che non sia lo sfondo!
_page_break_allowed = true;
if (rs.level() > 0 && (rs.type() != 'H' || rs.level() > 1)) // Ho stampato qualcosa che non sia lo sfondo!
_page_break_allowed = true;
}
if (!rs.execute_postscript())
@ -2111,6 +2214,22 @@ bool TReport_book::add(TReport& rep, bool progind)
close_page();
_report->execute_postscript();
if (!_print_aborted)
{
const TString_array& all = _report->allegates();
for (int a = 0; a < all.items(); a++)
{
TFilename name = all.row(a);
if (name.find('#') >= 0) // Se puo' essere un'espressione
{
TVariant var;
if (_report->evaluate(name, var, _alfafld))
name = var.as_string();
}
add_doc(name);
}
}
}
if (pi != NULL)
@ -2176,6 +2295,4 @@ bool TReport_book::on_link(const TReport_link& lnk)
TReport_book::TReport_book(const char* name)
: TBook(name), _report(NULL)
{
}
{ }

View File

@ -32,6 +32,7 @@ protected:
virtual bool init();
TPoint log2dev(const TPoint& ptlog) const;
public:
virtual bool open_page();
virtual bool close_page();
@ -53,7 +54,8 @@ public:
virtual void draw_book_pages(const TRectangle& r);
virtual void set_clip(long top, long bottom);
virtual int compute_text_frame(const TString& txt, const TReport_font& font, TRectangle& rect, TString_array& para) const;
virtual void add_doc(const TString& name);
TPoint page_size() const;
TPoint page_res() const;
size_t page() const { return _page; }
@ -115,4 +117,4 @@ void advanced_draw_text_line(TWindow& win, const char* text, const RCT& r, char
void advanced_draw_paragraph(TWindow& win, const TString_array& text, const RCT& r,
char halign, char valign, int default_row_height);
#endif
#endif

View File

@ -213,7 +213,6 @@ TString& TString::operator <<(const TObject& obj)
return operator <<(spark);
}
TString& TString::operator <<(const TString& str)
{ return operator <<(str._str); }
@ -230,11 +229,11 @@ TString& TString::strip(
const char& c = *s;
if (strchr(k, c) == NULL)
_str[j++] = c;
}
return cut(j);
}
bool TString::blank() const
{
for (const char* s = _str; *s; s++)
@ -243,6 +242,16 @@ bool TString::blank() const
return true;
}
bool TString::full() const
{
for (const char* s = _str; *s; s++)
if (!is_space(*s))
return true;
return false;
}
TString& TString::strip_spaces()
{
char instring = '\0';
@ -307,8 +316,7 @@ TObject* TString::dup() const
//
// @rdesc Ritorna il puntatore alla stringa duplicata
{
TString* s = new TString(_str);
return s;
return new TString(_str);
}
void TString::read_from(istream& in)
@ -352,11 +360,13 @@ int TString::find(
// Nel caso <p from> sia maggiore della lunghezza della stringa manda
// un messaggio di errore
{
CHECKD(from >= 0, "bad string index", from);
CHECK(c, "bad character to find");
int pos = -1;
if (from == 0 || from < len())
{
const char* p = strchr(_str + from, c);
if (p)
if (p != NULL)
pos = int(p - _str);
}
return pos;
@ -390,6 +400,8 @@ HIDDEN const char* strstr(const char* string1, const char* string2)
// Certified 100%
int TString::find(const char* s, int from) const
{
CHECKD(from >= 0, "bad string index", from);
CHECK(s && *s, "bad string to find");
int pos = -1;
if (from == 0 || from < len())
{
@ -405,6 +417,7 @@ bool TString::match(const char* pat, bool ignore_case) const
if (pat == NULL || *pat =='\0')
return empty();
return xvt_str_match(_str, pat, !ignore_case) != 0;
}
int TString::replace(char find_char, char replace_char)
@ -2073,4 +2086,4 @@ TToken_string& get_tmp_string(int len)
if (++next >= ararar.size())
next = 0;
return *str;
}
}

View File

@ -99,7 +99,8 @@ public:
// @cmember Controlla se la stringa e' vuota o contiene solo whitespace (true se vuota)
bool blank() const;
// @cmember Controlla se la stringa NON e' vuota o contiene solo whitespace (true se vuota)
bool full() const { return !blank(); }
bool full() const;
// @cmember Ritorna la posizione della prima occorrenza carattere char nell'oggetto TString
int find(char, int from = 0) const;
@ -760,4 +761,3 @@ const char SLASH =
#endif
#endif

6
include/user.h Executable file
View File

@ -0,0 +1,6 @@
#define USR_USERNAME "USERNAME"
#define USR_USERDESC "USERDESC"
#define USR_PASSWORD "PASSWORD"
#define USR_DATAPWD "DATAPWD"
#define USR_ISGROUP "ISGROUP"
#define USR_AUTSTR "AUTSTR"

View File

@ -243,7 +243,12 @@ TVariant& TVariant::sub(const TVariant& var)
{
switch (_type)
{
case _datefld: set(as_date() - var.as_int()); break;
case _datefld:
if (var.type() == _datefld)
set(as_date() - var.as_date());
else
set(as_date() - var.as_int());
break;
case _longfld:
if (var.type() == _longfld)
{

View File

@ -85,6 +85,19 @@ void TRectangle::merge(const TRectangle& rct)
set_bounds(l, t, r, b);
}
void TRectangle::inflate(int dx, int dy)
{
x -= dx; y -= dy;
_size.x += 2*dx;
_size.y += 2*dy;
normalize();
}
void TRectangle::deflate(int dx, int dy)
{
inflate(-dx, -dy);
}
///////////////////////////////////////////////////////////
// Utilities
///////////////////////////////////////////////////////////
@ -130,7 +143,7 @@ HIDDEN bool remove_menu_item(MENU_ITEM* menu, MENU_TAG id, bool ismbar)
HIDDEN void set_menu_item(MENU_ITEM& m, TToken_string& tt)
{
MENU_TAG tag = tt.get_int(0);
TString flag = tt.items() <= 2 ? "": tt.get(2);
TString flag = tt.items() <= 2 ? "": tt.get(2);
char* text = NULL;
if (strlen(tt.get(1)) > 0)
{

View File

@ -68,6 +68,8 @@ public:
bool contains(const TRectangle& r) const;
bool intersects(const TRectangle& r) const;
void merge(const TRectangle& r);
void inflate(int dx, int dy);
void deflate(int dx, int dy);
bool is_empty() const { return _size.x == 0 || _size.y == 0; }
// @cmember Confronta se due rettangoli sono uguali (TRUE se uguali)

View File

@ -59,12 +59,13 @@
#define ANAMAG_USER8 "USER8"
#define ANAMAG_USER9 "USER9"
#define ANAMAG_USER10 "USER10"
#define ANAMAG_NUMREG1 "NUMREG1"
#define ANAMAG_NUMREG2 "NUMREG2"
#define ANAMAG_NUMREG1 "NUMREG1"
#define ANAMAG_NUMREG2 "NUMREG2"
#define ANAMAG_CONTOINDA "CONTOINDA"
#define ANAMAG_CONTOINDV "CONTOINDV"
#define ANAMAG_DATAVDIST "DATAVDIST"
#define ANAMAG_VALDIST "VALDIST"
#define ANAMAG_VALDIST "VALDIST"
#define ANAMAG_GOLEM "GOLEM"
#define NULL_CODART "_****_"

View File

@ -47,6 +47,7 @@ class TMask_movmag : public TMask
static void sheetrighe_get(TSheet_field &fld_righe, int item);
public:
TArticolo_giacenza& curr_art();
void update_tot();
const TMagazzini & magazzini() const
{return _magazzini;}
TMask_movmag(TMov_mag * m_m);
@ -179,6 +180,22 @@ bool TMask_movmag::handle_righe(TMask_field &f, KEY k)
return TRUE;
}
void TMask_movmag::update_tot()
{
TSheet_field & ss = sfield(F_RIGHE);
const int rows = ss.items();
real tot;
for (int i = 0 ; i < rows; i++)
{
TToken_string & r = ss.row(i);
real valore = r.get(ss.cid2index(F_VALORE));
tot += valore;
}
set(F_VALORE_TOT, tot);
}
bool TMask_movmag::notify_righe(TSheet_field & ss, int r, KEY key)
{
TMask_movmag &m=(TMask_movmag &)ss.mask();
@ -195,7 +212,10 @@ bool TMask_movmag::notify_righe(TSheet_field & ss, int r, KEY key)
ss.destroy(r+1);
}
} else if (key == K_INS) { // Inserimento
} else if ( key == K_CTRL + K_DEL ) // Cancellazione
{
m.update_tot();
} else if (key == K_INS) { // Inserimento
if (r < ss.items() && *ss.cell(r,ss.cid2index( F_AUTOMATICA))==riga_automatica)
return FALSE; // cannot insert between a row and its generated one
@ -259,6 +279,8 @@ bool TMask_movmag::notify_righe(TSheet_field & ss, int r, KEY key)
}
if (m.update_rigamov(r,old_codcaus,old_codart,old_quant))
ss.select(r);
m.update_tot();
}
return TRUE;
}
@ -763,7 +785,10 @@ int TApp_movmag::read(TMask& m)
TArticolo_giacenza & art = _msk->curr_art();
art.read("");
return TRelation_application::read(m);
const int err = TRelation_application::read(m);
if (err == NOERR)
((TMask_movmag &)m).update_tot();
return err;
}
void TApp_movmag::init_query_mode(TMask& m)

View File

@ -27,6 +27,7 @@
#define F_EXANNODOC 127
#define F_INVENTORYMODE 128
#define F_INVENTORYMODE2 129
#define F_VALORE_TOT 130
#define H_NUMREG 131
#define H_DATAREG 132

View File

@ -330,7 +330,13 @@ END
TEXT F_INVENTORYMODE2
BEGIN
PROMPT 2 5 "@BModalita' di inserimento come movimento di differenza inventariale"
PROMPT 2 4 "@BModalita' di inserimento come movimento di differenza inventariale"
FLAGS "UD"
END
CURRENCY F_VALORE_TOT
BEGIN
PROMPT 2 5 "Valore totale "
FLAGS "UD"
END
@ -356,6 +362,7 @@ BEGIN
ITEM "Giacenza"
ITEM "Impianto"
ITEM "Linea"
ITEM "Valore@15"
END
ENDPAGE

View File

@ -15,7 +15,8 @@
#define F_GIAC 114
#define F_IMPIANTO 115
#define F_LINEA 116
#define F_ESPLOSA 117 // lasciare questo campo come ultimo in sheet non visualizzatpo
#define F_VALORE 117
#define F_ESPLOSA 118 // lasciare questo campo come ultimo in sheet non visualizzato
#define F_UMFC 121
// colonne non visibili dello Sheet
@ -24,7 +25,7 @@
#define H_DESMAG 152
#define H_GESTGIA 153
#define F_UBICAZD 154
#define F_VALORE 156
// #define F_VALORE 156
#define F_DESCAUSRIG 157
#define G_NOAUTO 1

View File

@ -65,25 +65,25 @@ bool TMask_openclose::handle_close(TMask_field &fld, KEY k)
TMask_openclose& mask = (TMask_openclose&)fld.mask();
if (k == K_ENTER || fld.to_check(k))
{
TEsercizi_contabili& ex = mask.exercise();
TDate d(fld.get());
const TEsercizi_contabili& ex = mask.exercise();
const TDate d(fld.get());
const int es_close = ex.date2esc(d);
mask.set(F_ESTOCLOSE, es_close);
if (es_close == 0)
return fld.error_box(TR("La data indicata non appartiene a nessun esercizio."));
if (k == K_ENTER && ex.esercizio(es_close).chiusura_mag() != TDate(NULLDATE))
return fld.error_box(FR("L'esercizio %d risulta gia' chiuso. Selezionare"
" un altro esercizio o togliere la data di chiusura."), es_close);
else
if (k == K_ENTER)
{
int pred = ex.pred(es_close);
if (k == K_ENTER && pred != 0 && ex.esercizio(pred).chiusura_mag() == TDate(NULLDATE))
return fld.error_box(TR("L'esercizio precedente a quello indicato non e' ancora stato chiuso."));
if (ex.esercizio(es_close).chiusura_mag().ok())
return fld.error_box(FR("L'esercizio %04d risulta gia' chiuso. Selezionare"
" un altro esercizio o togliere la data di chiusura."), es_close);
const int pred = ex.pred(es_close);
if (pred != 0 && !ex.esercizio(pred).chiusura_mag().ok())
return fld.error_box(FR("L'esercizio %04d non e' ancora stato chiuso."), pred);
}
}
return TRUE;
return true;
}
bool TMask_openclose::handle_open(TMask_field &fld, KEY k)

View File

@ -1,5 +1,5 @@
#include "mg3100.h"
PAGE "Stampa dati storici" -1 -1 78 20
PAGE "Stampa dati storici" -1 -1 80 20
LIST F_PREZZIVALORI 18
BEGIN
@ -58,7 +58,7 @@ BEGIN
MESSAGE " ", F_FILTRO|SHOW,F_ORDINEART|ENABLE,F_ORDINEART|HIDE,F_TOTALIDEPOSITI|"X",F_DETTAGLIODEP
MESSAGE SHOW,F_TOTALIMAGAZZINI|SHOW,F_DETTAGLIOMAG
ITEM "M|magazzini"
MESSAGE " ", F_FILTRO|"C",F_ORDINEART|K_SPACE,F_ORDINEART|SHOW,F_ORDINEART|DISABLE,F_ORDINEART|HIDE,F_ORDINEMAG|SHOW,G_CODART@|HIDE,G_DESART@
MESSAGE " ", F_FILTRO|"C",F_ORDINEART|K_SPACE,F_ORDINEART|SHOW,F_ORDINEART|DISABLE,F_ORDINEART|HIDE,F_ORDINEMAG|SHOW,G_CODART@
MESSAGE SHOW,F_TOTALIDEPOSITI|"X",F_DETTAGLIODEP
MESSAGE HIDE,F_TOTALIMAGAZZINI|HIDE,F_DETTAGLIOMAG
END
@ -68,13 +68,13 @@ BEGIN
FLAGS "G"
PROMPT 34 2 "Sotto-ordinamento "
ITEM "C|codice"
MESSAGE HIDE,G_CATMER@|HIDE,G_SCATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|HIDE,F_SALTOPAG
MESSAGE HIDE,G_CATMER@|HIDE,G_SCATMER@|ENABLE,G_CODART@|HIDE,F_SALTOPAG
ITEM "D|descrizione"
MESSAGE HIDE,G_CATMER@|HIDE,G_SCATMER@|DISABLE,G_CODART@|SHOW,G_DESART@|HIDE,F_SALTOPAG
MESSAGE HIDE,G_CATMER@|HIDE,G_SCATMER@|DISABLE,G_CODART@|HIDE,F_SALTOPAG
ITEM "M|gruppo merc./codice"
MESSAGE SHOW,G_CATMER@|HIDE,G_SCATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|SHOW,F_SALTOPAG
MESSAGE SHOW,G_CATMER@|HIDE,G_SCATMER@|ENABLE,G_CODART@|SHOW,F_SALTOPAG
ITEM "S|Sottogr.merc./codice"
MESSAGE HIDE,G_CATMER@|SHOW,G_SCATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|SHOW,F_SALTOPAG
MESSAGE HIDE,G_CATMER@|SHOW,G_SCATMER@|ENABLE,G_CODART@|SHOW,F_SALTOPAG
END
LISTBOX F_ORDINEMAG 20
@ -82,11 +82,11 @@ BEGIN
FLAGS "G"
PROMPT 34 2 "Sotto-ordinamento "
ITEM "C|codice"
MESSAGE HIDE,G_CATMER@|HIDE,G_SCATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|HIDE,F_SALTOPAG
MESSAGE HIDE,G_CATMER@|HIDE,G_SCATMER@|ENABLE,G_CODART@|HIDE,F_SALTOPAG
ITEM "M|gruppo merc./codice"
MESSAGE SHOW,G_CATMER@|HIDE,G_SCATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|SHOW,F_SALTOPAG
MESSAGE SHOW,G_CATMER@|HIDE,G_SCATMER@|ENABLE,G_CODART@|SHOW,F_SALTOPAG
ITEM "S|Sottogr.merc./codice"
MESSAGE HIDE,G_CATMER@|SHOW,G_SCATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|SHOW,F_SALTOPAG
MESSAGE HIDE,G_CATMER@|SHOW,G_SCATMER@|ENABLE,G_CODART@|SHOW,F_SALTOPAG
END
BOOLEAN F_SALTOPAG
@ -120,9 +120,19 @@ BEGIN
ITEM "T|tutto"
END
STRING F_DAART 20
TEXT DLG_NULL
BEGIN
PROMPT 2 5 "Dall'articolo "
END
TEXT DLG_NULL
BEGIN
PROMPT 2 6 " all'articolo "
END
STRING F_DAART 20
BEGIN
PROMPT 16 5 ""
FLAGS "U"
USE LF_ANAMAG
INPUT CODART F_DAART
@ -132,9 +142,22 @@ BEGIN
OUTPUT F_DADES DESCR
GROUP G_CODART
END
STRING F_DADES 50 36
BEGIN
PROMPT 40 5 ""
FLAGS "U"
USE LF_ANAMAG KEY 2
INPUT DESCR F_DADES
DISPLAY "Descr@50" DESCR
DISPLAY "Codice@20" CODART
OUTPUT F_DAART CODART
OUTPUT F_DADES DESCR
END
STRING F_AART 20
BEGIN
PROMPT 2 6 " all'articolo "
PROMPT 16 6 ""
FLAGS "U"
COPY USE F_DAART
INPUT CODART F_AART
@ -144,31 +167,17 @@ BEGIN
GROUP G_CODART
END
STRING F_DADES 50
STRING F_ADES 50 36
BEGIN
PROMPT 2 5 "Dall'articolo "
FLAGS "U"
USE LF_ANAMAG KEY 2
INPUT DESCR F_DADES
DISPLAY "Descr@50" DESCR
DISPLAY "Codice@20" CODART
OUTPUT F_DAART CODART
OUTPUT F_DADES DESCR
GROUP G_DESART
END
STRING F_ADES 50
BEGIN
PROMPT 2 6 " all'articolo "
PROMPT 40 6 ""
FLAGS "U"
COPY USE F_DADES
INPUT DESCR F_ADES
COPY DISPLAY F_DADES
OUTPUT F_ADES DESCR
OUTPUT F_AART CODART
GROUP G_DESART
END
STRING F_DAMAG 3
BEGIN
PROMPT 2 8 "Dal magazzino "

View File

@ -1,5 +1,5 @@
#include "mg3200.h"
PAGE "Stampa disponibilità" -1 -1 78 20
PAGE "Stampa disponibilità" -1 -1 80 20
LISTBOX F_ORDINE 10
BEGIN
@ -8,7 +8,7 @@ BEGIN
MESSAGE ENABLE,F_ORDINEART|HIDE,F_TOTALIDEPOSITI|"X",F_DETTAGLIODEP
MESSAGE SHOW,F_TOTALIMAGAZZINI|SHOW,F_DETTAGLIOMAG
ITEM "M|magazzini"
MESSAGE "C",F_ORDINEART|K_SPACE,F_ORDINEART|DISABLE,F_ORDINEART|SHOW,G_CODART@|HIDE,G_DESART@
MESSAGE "C",F_ORDINEART|K_SPACE,F_ORDINEART|DISABLE,F_ORDINEART|SHOW,G_CODART@
MESSAGE SHOW,F_TOTALIDEPOSITI|"X",F_DETTAGLIODEP
MESSAGE HIDE,F_TOTALIMAGAZZINI|HIDE,F_DETTAGLIOMAG
END
@ -19,11 +19,11 @@ BEGIN
FLAGS "G"
PROMPT 34 1 "sotto-ordinamento "
ITEM "C|codice"
MESSAGE HIDE,G_CATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|ENABLE,F_RAGGCODICE
MESSAGE HIDE,G_CATMER@|ENABLE,G_CODART@|ENABLE,F_RAGGCODICE
ITEM "D|descrizione"
MESSAGE HIDE,G_CATMER@|DISABLE,G_CODART@|SHOW,G_DESART@|DISABLE,F_RAGGCODICE
MESSAGE HIDE,G_CATMER@|DISABLE,G_CODART@|DISABLE,F_RAGGCODICE
ITEM "M|gruppo merc./codice"
MESSAGE SHOW,G_CATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|DISABLE,F_RAGGCODICE
MESSAGE SHOW,G_CATMER@|ENABLE,G_CODART@|DISABLE,F_RAGGCODICE
END
NUMBER F_ANNOES 4
@ -40,9 +40,19 @@ BEGIN
ADD NONE
END
STRING F_DAART 20
TEXT DLG_NULL
BEGIN
PROMPT 2 4 "Dall'articolo "
END
TEXT DLG_NULL
BEGIN
PROMPT 2 5 " all'articolo "
END
STRING F_DAART 20
BEGIN
PROMPT 16 4 ""
FLAGS "U"
USE LF_ANAMAG
INPUT CODART F_DAART
@ -53,9 +63,20 @@ BEGIN
GROUP G_CODART
END
STRING F_DADES 50 36
BEGIN
PROMPT 40 4 ""
FLAGS "U"
USE LF_ANAMAG KEY 2
INPUT DESCR F_DADES
DISPLAY "Descr@50" DESCR
DISPLAY "Codice@20" CODART
COPY OUTPUT F_DAART
END
STRING F_AART 20
BEGIN
PROMPT 2 5 " all'articolo "
PROMPT 16 5 ""
FLAGS "U"
COPY USE F_DAART
INPUT CODART F_AART
@ -65,29 +86,14 @@ BEGIN
GROUP G_CODART
END
STRING F_DADES 50
STRING F_ADES 50 36
BEGIN
PROMPT 2 4 "Dall'articolo "
FLAGS "U"
USE LF_ANAMAG KEY 2
INPUT DESCR F_DADES
DISPLAY "Descr@50" DESCR
DISPLAY "Codice@20" CODART
OUTPUT F_DADES DESCR
OUTPUT F_DAART CODART
GROUP G_DESART
END
STRING F_ADES 50
BEGIN
PROMPT 2 5 " all'articolo "
PROMPT 40 5 ""
FLAGS "U"
COPY USE F_DADES
INPUT DESCR F_ADES
COPY DISPLAY F_DADES
OUTPUT F_ADES DESCR
OUTPUT F_AART CODART
GROUP G_DESART
COPY OUTPUT F_AART
END

View File

@ -1,5 +1,5 @@
#include "mg3300.h"
PAGE "Stampa Schede di magazzino" -1 -1 78 21
PAGE "Stampa Schede di magazzino" -1 -1 80 21
LISTBOX F_SCHEDA 30
BEGIN
@ -21,7 +21,7 @@ BEGIN
MESSAGE HIDE,F_DETTAGLIOMAG|"X",F_DETTAGLIODEP
MESSAGE SHOW,F_SUDDIV_MAGAZZINI|SHOW,F_SUDDIV_DEPOSITI
ITEM "M|magazzini"
MESSAGE "C",F_ORDINEART|K_SPACE,F_ORDINEART|DISABLE,F_ORDINEART|SHOW,G_CODART@|HIDE,G_DESART@
MESSAGE "C",F_ORDINEART|K_SPACE,F_ORDINEART|DISABLE,F_ORDINEART|SHOW,G_CODART@|
MESSAGE SHOW,F_DETTAGLIOMAG|"X",F_DETTAGLIODEP
MESSAGE HIDE,F_SUDDIV_MAGAZZINI|HIDE,F_SUDDIV_DEPOSITI
@ -33,11 +33,11 @@ BEGIN
FLAGS "G"
PROMPT 42 2 "sotto-ordinamento "
ITEM "C|codice"
MESSAGE HIDE,G_CATMER@|SHOW,G_CODART@|HIDE,G_DESART@|ENABLE,G_LIVELLI@
MESSAGE HIDE,G_CATMER@|ENABLE,G_CODART@|ENABLE,G_LIVELLI@
ITEM "D|descrizione"
MESSAGE HIDE,G_CATMER@|HIDE,G_CODART@|SHOW,G_DESART@|"AC",F_ENABLER|"0",F_TOLIVELLOART|DISABLE,G_LIVELLI@
MESSAGE HIDE,G_CATMER@|DISABLE,G_CODART@|"AC",F_ENABLER|"0",F_TOLIVELLOART|DISABLE,G_LIVELLI@
ITEM "M|gruppo merc."
MESSAGE SHOW,G_CATMER@|SHOW,G_CODART@|HIDE,G_DESART@|ENABLE,G_LIVELLI@
MESSAGE SHOW,G_CATMER@|ENABLE,G_CODART@|ENABLE,G_LIVELLI@
END
NUMBER F_ANNOES 4
@ -64,60 +64,72 @@ END
DATE F_DADATA
BEGIN
PROMPT 2 5 "Dalla data "
PROMPT 2 4 "Dalla data "
END
DATE F_ADATA
BEGIN
PROMPT 2 6 " alla data "
PROMPT 29 4 " alla data "
STR_EXPR ANSI(#F_ADATA)>=ANSI(#F_DADATA)||(#F_ADATA=="")
WARNING "Il secondo estremo deve essere superiore al primo"
END
TEXT DLG_NULL
BEGIN
PROMPT 2 5 "Dall'articolo "
END
TEXT DLG_NULL
BEGIN
PROMPT 2 6 " all'articolo "
END
STRING F_DAART 20
BEGIN
PROMPT 28 5 "Dall'articolo "
PROMPT 16 5 ""
FLAGS "U"
USE LF_ANAMAG
INPUT CODART F_DAART
DISPLAY "Codice@20" CODART
DISPLAY "Descr@50" DESCR
OUTPUT F_DAART CODART
OUTPUT F_DADES DESCR
GROUP G_CODART
END
STRING F_AART 20
BEGIN
PROMPT 28 6 " all'articolo "
FLAGS "U"
COPY USE F_DAART
INPUT CODART F_AART
COPY DISPLAY F_DAART
OUTPUT F_AART CODART
GROUP G_CODART
STR_EXPR (#F_AART>=#F_DAART)||(#F_AART=="")
WARNING "Il secondo estremo deve essere superiore al primo"
END
STRING F_DADES 50 30
STRING F_DADES 50 36
BEGIN
PROMPT 28 5 "Dall'articolo "
PROMPT 40 5 ""
FLAGS "U"
USE LF_ANAMAG KEY 2
INPUT DESCR F_DADES
DISPLAY "Descr@50" DESCR
DISPLAY "Codice@20" CODART
OUTPUT F_DADES DESCR
GROUP G_DESART
COPY OUTPUT F_DAART
END
STRING F_ADES 50 30
STRING F_AART 20
BEGIN
PROMPT 28 6 " all'articolo "
PROMPT 16 6 ""
FLAGS "U"
COPY USE F_DAART
INPUT CODART F_AART
COPY DISPLAY F_DAART
OUTPUT F_AART CODART
OUTPUT F_ADES DESCR
GROUP G_CODART
STR_EXPR (#F_AART>=#F_DAART)||(#F_AART=="")
WARNING "Il secondo estremo deve essere superiore al primo"
END
STRING F_ADES 50 36
BEGIN
PROMPT 40 6 ""
FLAGS "U"
COPY USE F_DADES
INPUT DESCR F_ADES
COPY DISPLAY F_DADES
OUTPUT F_ADES DESCR
GROUP G_DESART
COPY OUTPUT F_AART
STR_EXPR (#F_ADES>=#F_DADES)||(#F_ADES=="")
WARNING "Il secondo estremo deve essere superiore al primo"
END

View File

@ -1,7 +1,37 @@
#include <applicat.h>
int mg3400(int argc, char* argv[])
#include <report.h>
#include "../ba/ba8500.h"
///////////////////////////////////////////////////////////
// TReport_mag
///////////////////////////////////////////////////////////
class TReport_mag : public TReport
{
TApplication a;
a.run(argc,argv,"?????????");
return 0;
public:
};
///////////////////////////////////////////////////////////
// TStampa_mag
///////////////////////////////////////////////////////////
class TStampa_mag : public TKlarkKent_app
{
protected:
virtual TReport* create_report(const char* name) const;
};
TReport* TStampa_mag::create_report(const char* name) const
{
TReport_mag* rep = new TReport_mag;
rep->load(name);
return rep;
}
int mg3400(int argc, char* argv[])
{
TStampa_mag app;
app.run(argc, argv, TR("Stampa Report Magazzino"));
return 0;
}

View File

@ -1,20 +1,20 @@
#include "mg3500.h"
PAGE "Stampa storico rimanenze" -1 -1 70 12
PAGE "Stampa storico rimanenze" -1 -1 80 12
LISTBOX F_ORDINE 25
BEGIN
FLAGS "G"
PROMPT 2 1 "Ordinamento "
ITEM "C|codice"
MESSAGE SHOW,G_CODART@|HIDE,G_DESART@|HIDE,G_GRMERC@|HIDE,G_SGRMERC@|HIDE,G_RAGGFIS@
MESSAGE ENABLE,G_CODART@|HIDE,G_GRMERC@|HIDE,G_SGRMERC@|HIDE,G_RAGGFIS@
ITEM "D|descrizione"
MESSAGE SHOW,G_DESART@|HIDE,G_CODART@|HIDE,G_GRMERC@|HIDE,G_SGRMERC@|HIDE,G_RAGGFIS@
MESSAGE DISABLE,G_CODART@|HIDE,G_GRMERC@|HIDE,G_SGRMERC@|HIDE,G_RAGGFIS@
ITEM "M|Gruppo merceologico"
MESSAGE SHOW,G_CODART@|HIDE,G_DESART@|SHOW,G_GRMERC@|HIDE,G_SGRMERC@|HIDE,G_RAGGFIS@
MESSAGE ENABLE,G_CODART@|SHOW,G_GRMERC@|HIDE,G_SGRMERC@|HIDE,G_RAGGFIS@
ITEM "S|Sottogruppo merceologico"
MESSAGE SHOW,G_CODART@|HIDE,G_DESART@|SHOW,G_GRMERC@|SHOW,G_SGRMERC@|HIDE,G_RAGGFIS@
MESSAGE ENABLE,G_CODART@|SHOW,G_GRMERC@|SHOW,G_SGRMERC@|HIDE,G_RAGGFIS@
ITEM "R|Raggruppamento fiscale"
MESSAGE SHOW,G_CODART@|HIDE,G_DESART@|SHOW,G_RAGGFIS@|HIDE,G_GRMERC@|HIDE,G_SGRMERC@
MESSAGE ENABLE,G_CODART@|SHOW,G_RAGGFIS@|HIDE,G_GRMERC@|HIDE,G_SGRMERC@
END
NUMBER F_ANNOES 4
@ -31,53 +31,64 @@ BEGIN
ADD NONE
END
STRING F_DAART 20
TEXT DLG_NULL
BEGIN
PROMPT 2 4 "Dall'articolo "
END
TEXT DLG_NULL
BEGIN
PROMPT 2 5 " all'articolo "
END
STRING F_DAART 20
BEGIN
PROMPT 16 4 ""
FLAGS "U"
USE LF_ANAMAG
INPUT CODART F_DAART
DISPLAY "Codice@20" CODART
DISPLAY "Descr@50" DESCR
OUTPUT F_DAART CODART
CHECKTYPE NORMAL
GROUP G_CODART
END
STRING F_AART 20
BEGIN
PROMPT 2 5 "all'articolo "
FLAGS "U"
COPY USE F_DAART
INPUT CODART F_AART
COPY DISPLAY F_DAART
OUTPUT F_AART CODART
OUTPUT F_DADES DESCR
CHECKTYPE NORMAL
GROUP G_CODART
END
STRING F_DADES 50
STRING F_DADES 50 36
BEGIN
PROMPT 2 4 "Dall'articolo "
PROMPT 40 4 ""
FLAGS "U"
USE LF_ANAMAG KEY 2
INPUT DESCR F_DADES
DISPLAY "Descr@50" DESCR
DISPLAY "Codice@20" CODART
OUTPUT F_DADES DESCR
COPY OUTPUT F_DAART
CHECKTYPE NORMAL
GROUP G_DESART
END
STRING F_ADES 50
STRING F_AART 20
BEGIN
PROMPT 2 5 "all'articolo "
PROMPT 16 5 ""
FLAGS "U"
COPY USE F_DAART
INPUT CODART F_AART
COPY DISPLAY F_DAART
OUTPUT F_AART CODART
OUTPUT F_ADES DESCR
CHECKTYPE NORMAL
GROUP G_CODART
END
STRING F_ADES 50 36
BEGIN
PROMPT 40 5 ""
FLAGS "U"
COPY USE F_DADES
INPUT DESCR F_ADES
COPY DISPLAY F_DADES
OUTPUT F_ADES DESCR
COPY OUTPUT F_AART
CHECKTYPE NORMAL
GROUP G_DESART
END
STRING F_DAGRMERC 3

View File

@ -18,3 +18,5 @@
#define F_CODCLI 123
#define F_CODFOR 124
#define F_RAGSOC 125
#define F_DADES 126
#define F_ADES 127

View File

@ -84,18 +84,42 @@ BEGIN
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_DAARTICOLO CODART
OUTPUT F_DADES DESCR
END
STRING F_DADES 50 36
BEGIN
PROMPT 40 7 ""
FLAGS "U"
USE LF_ANAMAG KEY 2
INPUT DESCR F_DADES
DISPLAY "Descr@50" DESCR
DISPLAY "Codice@20" CODART
COPY OUTPUT F_DAARTICOLO
END
STRING F_AARTICOLO 20
BEGIN
FLAGS "U"
PROMPT 42 7 "All'articolo "
PROMPT 2 8 "All'articolo "
COPY USE F_DAARTICOLO
INPUT CODART F_AARTICOLO
COPY DISPLAY F_DAARTICOLO
OUTPUT F_AARTICOLO CODART
OUTPUT F_ADES DESCR
END
STRING F_ADES 50 36
BEGIN
PROMPT 40 8 ""
FLAGS "U"
COPY USE F_DADES
INPUT DESCR F_ADES
COPY DISPLAY F_DADES
COPY OUTPUT F_AARTICOLO
END
LISTBOX F_TIPOCF 9
BEGIN
PROMPT 2 9 ""

View File

@ -30,15 +30,15 @@ BEGIN
FLAGS "G"
PROMPT 36 1 "sotto-ordinamento "
ITEM "C|codice"
MESSAGE HIDE,G_RAGFIS@|HIDE,G_SCATMER@|HIDE,G_CATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|ENABLE,F_RAGGCODICE
MESSAGE HIDE,G_RAGFIS@|HIDE,G_SCATMER@|HIDE,G_CATMER@|ENABLE,G_CODART@|ENABLE,F_RAGGCODICE
ITEM "D|descrizione"
MESSAGE SHOW,G_DESART@|HIDE,G_RAGFIS@|HIDE,G_SCATMER@|HIDE,G_CATMER@|DISABLE,G_CODART@|CLEAR,F_RAGGCODICE|K_SPACE,F_RAGGCODICE
MESSAGE HIDE,G_RAGFIS@|HIDE,G_SCATMER@|HIDE,G_CATMER@|DISABLE,G_CODART@|CLEAR,F_RAGGCODICE|K_SPACE,F_RAGGCODICE
ITEM "M|gruppo merc./codice"
MESSAGE HIDE,G_RAGFIS@|HIDE,G_SCATMER@|SHOW,G_CATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|ENABLE,F_RAGGCODICE
MESSAGE HIDE,G_RAGFIS@|HIDE,G_SCATMER@|SHOW,G_CATMER@|ENABLE,G_CODART@|ENABLE,F_RAGGCODICE
ITEM "S|sottogr. merc/codice"
MESSAGE HIDE,G_RAGFIS@|SHOW,G_SCATMER@|SHOW,G_CATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|ENABLE,F_RAGGCODICE
MESSAGE HIDE,G_RAGFIS@|SHOW,G_SCATMER@|SHOW,G_CATMER@|ENABLE,G_CODART@|ENABLE,F_RAGGCODICE
ITEM "R|raggr. fisc./codice"
MESSAGE SHOW,G_RAGFIS@|HIDE,G_SCATMER@|HIDE,G_CATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|ENABLE,F_RAGGCODICE
MESSAGE SHOW,G_RAGFIS@|HIDE,G_SCATMER@|HIDE,G_CATMER@|ENABLE,G_CODART@|ENABLE,F_RAGGCODICE
END
LISTBOX F_ORDINEMAG 20
@ -46,13 +46,13 @@ BEGIN
FLAGS "G"
PROMPT 36 1 "sotto-ordinamento "
ITEM "C|codice"
MESSAGE HIDE,G_RAGFIS@|HIDE,G_SCATMER@|HIDE,G_CATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|ENABLE,F_RAGGCODICE
MESSAGE HIDE,G_RAGFIS@|HIDE,G_SCATMER@|HIDE,G_CATMER@|ENABLE,G_CODART@|ENABLE,F_RAGGCODICE
ITEM "M|gruppo merc./codice"
MESSAGE HIDE,G_RAGFIS@|HIDE,G_SCATMER@|SHOW,G_CATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|ENABLE,F_RAGGCODICE
MESSAGE HIDE,G_RAGFIS@|HIDE,G_SCATMER@|SHOW,G_CATMER@|ENABLE,G_CODART@|ENABLE,F_RAGGCODICE
ITEM "S|sottogr. merc/codice"
MESSAGE HIDE,G_RAGFIS@|SHOW,G_SCATMER@|SHOW,G_CATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|ENABLE,F_RAGGCODICE
MESSAGE HIDE,G_RAGFIS@|SHOW,G_SCATMER@|SHOW,G_CATMER@|ENABLE,G_CODART@|ENABLE,F_RAGGCODICE
ITEM "R|raggr. fisc./codice"
MESSAGE SHOW,G_RAGFIS@|HIDE,G_SCATMER@|HIDE,G_CATMER@|ENABLE,G_CODART@|HIDE,G_DESART@|ENABLE,F_RAGGCODICE
MESSAGE SHOW,G_RAGFIS@|HIDE,G_SCATMER@|HIDE,G_CATMER@|ENABLE,G_CODART@|ENABLE,F_RAGGCODICE
END
LIST F_REALE_GIAC 12
@ -95,61 +95,71 @@ BEGIN
ITEM "T|tutti gli articoli"
END
TEXT DLG_NULL
BEGIN
PROMPT 2 4 "Dall'articolo "
END
TEXT DLG_NULL
BEGIN
PROMPT 2 5 " all'articolo "
END
STRING F_DAART 20
BEGIN
PROMPT 2 4 "Dall'articolo "
PROMPT 16 4 ""
FLAGS "U"
USE LF_ANAMAG
INPUT CODART F_DAART
DISPLAY "Codice@25" CODART
DISPLAY "Descr@50" DESCR
OUTPUT F_DAART CODART
CHECKTYPE NORMAL
GROUP G_CODART
ADD RUN ve2 -3
END
STRING F_AART 20
BEGIN
PROMPT 42 4 " a "
FLAGS "U"
COPY USE F_DAART
INPUT CODART F_AART
COPY DISPLAY F_DAART
OUTPUT F_AART CODART
OUTPUT F_DADES DESCR
CHECKTYPE NORMAL
GROUP G_CODART
ADD RUN ve2 -3
END
STRING F_DADES 50 20
STRING F_DADES 50 36
BEGIN
PROMPT 2 4 "Dall'articolo "
PROMPT 40 4 ""
FLAGS "U"
USE LF_ANAMAG KEY 2
INPUT DESCR F_DADES
DISPLAY "Descr@50" DESCR
DISPLAY "Codice@20" CODART
OUTPUT F_DADES DESCR
COPY OUTPUT F_DAART
CHECKTYPE NORMAL
GROUP G_DESART
END
STRING F_ADES 50 20
STRING F_AART 20
BEGIN
PROMPT 42 4 " a "
PROMPT 16 5 ""
FLAGS "U"
COPY USE F_DAART
INPUT CODART F_AART
COPY DISPLAY F_DAART
OUTPUT F_AART CODART
OUTPUT F_ADES DESCR
CHECKTYPE NORMAL
GROUP G_CODART
ADD RUN ve2 -3
END
STRING F_ADES 50 36
BEGIN
PROMPT 40 5 ""
FLAGS "U"
COPY USE F_DADES
INPUT DESCR F_ADES
COPY DISPLAY F_DADES
OUTPUT F_ADES DESCR
COPY OUTPUT F_AART
CHECKTYPE NORMAL
GROUP G_DESART
END
STRING F_DAMAG 3
BEGIN
PROMPT 2 5 "Dal magazzino "
PROMPT 2 6 "Dal magazzino "
FLAGS "U"
USE MAG SELECT CODTAB[4,5]==""
INPUT CODTAB F_DAMAG
@ -161,7 +171,7 @@ END
STRING F_AMAG 3
BEGIN
PROMPT 42 5 " a "
PROMPT 42 6 " a "
FLAGS "U"
COPY USE F_DAMAG
INPUT CODTAB F_AMAG
@ -172,7 +182,7 @@ END
STRING F_DACATMER 3
BEGIN
PROMPT 2 6 "Dal gruppo "
PROMPT 2 7 "Dal gruppo "
FLAGS "U"
USE GMC SELECT CODTAB[4,5]==""
INPUT CODTAB F_DACATMER
@ -185,7 +195,7 @@ END
STRING F_DASCATMER 2
BEGIN
PROMPT 23 6 ""
PROMPT 23 7 ""
FLAGS "U"
USE GMC SELECT CODTAB[4,5]!=""
INPUT CODTAB[1,3] F_DACATMER
@ -200,7 +210,7 @@ END
STRING F_ACATMER 3
BEGIN
PROMPT 42 6 " a "
PROMPT 42 7 " a "
FLAGS "U"
COPY USE F_DACATMER
INPUT CODTAB F_ACATMER
@ -212,7 +222,7 @@ END
STRING F_ASCATMER 2
BEGIN
PROMPT 51 6 ""
PROMPT 51 7 ""
FLAGS "U"
USE GMC
INPUT CODTAB[1,3] F_ACATMER
@ -227,7 +237,7 @@ END
STRING F_DARAGFIS 5
BEGIN
PROMPT 2 6 "Dal grup. fis. "
PROMPT 2 7 "Dal grup. fis. "
FLAGS "U"
USE RFA
INPUT CODTAB F_DARAGFIS
@ -240,7 +250,7 @@ END
STRING F_ARAGFIS 5
BEGIN
PROMPT 42 6 " a "
PROMPT 42 7 " a "
FLAGS "U"
USE RFA
INPUT CODTAB F_ARAGFIS
@ -253,7 +263,7 @@ END
BOOL F_TOTALIDEPOSITI
BEGIN
PROMPT 2 7 "Suddivido per depositi"
PROMPT 2 8 "Suddivido per depositi"
// MESSAGE TRUE ENABLE,F_DETTAGLIODEP
// MESSAGE FALSE CLEAR,F_DETTAGLIODEP|K_SPACE,F_DETTAGLIODEP
END
@ -261,14 +271,14 @@ END
BOOL F_DETTAGLIODEP
BEGIN
FLAGS "DH"
PROMPT 42 7 "Dettaglia i depositi"
PROMPT 42 8 "Dettaglia i depositi"
MESSAGE TRUE ENABLE,F_RAGGCODICE|ENABLE,F_RAGGLIVGIAC
MESSAGE FALSE CLEAR,F_RAGGCODICE|K_SPACE,F_RAGGCODICE|CLEAR,F_RAGGLIVGIAC|K_SPACE,F_RAGGLIVGIAC
END
BOOLEAN F_RAGGCODICE
BEGIN
PROMPT 2 8 "Stampa totali livelli di codice"
PROMPT 2 9 "Stampa totali livelli di codice"
MESSAGE FALSE CLEAR,F_FROMLIVELLOART|CLEAR,F_TOLIVELLOART|CHECK,F_TOLIVELLOART
MESSAGE TRUE ENABLE,F_FROMLIVELLOART|ENABLE,F_TOLIVELLOART|CHECK,F_TOLIVELLOART
END
@ -276,7 +286,7 @@ END
NUMBER F_FROMLIVELLOART 1
BEGIN
FLAGS "G"
PROMPT 42 8 "da "
PROMPT 42 9 "da "
USE FCA
INPUT CODTAB F_FROMLIVELLOART
DISPLAY "Num." CODTAB
@ -289,7 +299,7 @@ END
NUMBER F_TOLIVELLOART 1
BEGIN
PROMPT 52 8 "a "
PROMPT 52 9 "a "
USE FCA
INPUT CODTAB F_TOLIVELLOART
DISPLAY "Num." CODTAB
@ -302,7 +312,7 @@ END
BOOL F_RAGGLIVGIAC
BEGIN
PROMPT 2 9 "Stampa totali livelli di giacenza"
PROMPT 2 10 "Stampa totali livelli di giacenza"
MESSAGE FALSE CLEAR,F_FROMLIVELLOGIAC|CLEAR,F_TOLIVELLOGIAC|CHECK,F_TOLIVELLOGIAC
MESSAGE TRUE ENABLE,F_FROMLIVELLOGIAC|ENABLE,F_TOLIVELLOGIAC
END
@ -310,7 +320,7 @@ END
NUMBER F_FROMLIVELLOGIAC 1
BEGIN
FLAG "D"
PROMPT 42 9 "da "
PROMPT 42 10 "da "
USE FCG
INPUT CODTAB F_FROMLIVELLOGIAC
DISPLAY "Num." CODTAB
@ -325,7 +335,7 @@ END
NUMBER F_TOLIVELLOGIAC 1
BEGIN
FLAG "D"
PROMPT 52 9 "a "
PROMPT 52 10 "a "
USE FCG
INPUT CODTAB F_TOLIVELLOGIAC
DISPLAY "Num." CODTAB
@ -338,33 +348,33 @@ END
BOOL F_ALLADATA
BEGIN
PROMPT 2 10 "Calcola inventario alla data"
PROMPT 2 11 "Calcola inventario alla data"
MESSAGE TRUE ENABLE,F_DATALIM
MESSAGE CLEAR, F_DATALIM
END
DATE F_DATALIM
BEGIN
PROMPT 42 10 "Data inventario "
PROMPT 42 11 "Data inventario "
CHECKTYPE REQUIRED
FLAGS "D"
END
BOOL F_TOTALIMAGAZZINI
BEGIN
PROMPT 2 11 "Stampa i totali di magazzino"
PROMPT 2 12 "Stampa i totali di magazzino"
MESSAGE TRUE ENABLE,F_DETTAGLIOMAG
MESSAGE FALSE CLEAR,F_DETTAGLIOMAG
END
BOOL F_DETTAGLIOMAG
BEGIN
PROMPT 42 11 "Stampa i totali di deposito"
PROMPT 42 12 "Stampa i totali di deposito"
END
LIST F_VAL1 20
BEGIN
PROMPT 2 12 "Valorizz. 1 "
PROMPT 2 13 "Valorizz. 1 "
ITEM "6|Costo medio ponder."
ITEM "1|Ultimo costo"
ITEM "2|Media ultimi costi"
@ -378,7 +388,7 @@ BEGIN
END
LIST F_VAL2 20
BEGIN
PROMPT 2 13 "Valorizz. 2 "
PROMPT 2 14 "Valorizz. 2 "
ITEM "|"
ITEM "6|Costo medio ponder."
ITEM "1|Ultimo costo"
@ -393,7 +403,7 @@ BEGIN
END
LIST F_VAL3 20
BEGIN
PROMPT 2 14 "Valorizz. 3 "
PROMPT 2 15 "Valorizz. 3 "
ITEM "|"
ITEM "6|Costo medio ponder."
ITEM "1|Ultimo costo"
@ -408,7 +418,7 @@ BEGIN
END
LIST F_VAL4 20
BEGIN
PROMPT 42 12 "Valorizz. 4 "
PROMPT 42 13 "Valorizz. 4 "
ITEM "|"
ITEM "6|Costo medio ponder."
ITEM "1|Ultimo costo"
@ -423,7 +433,7 @@ BEGIN
END
LIST F_VAL5 20
BEGIN
PROMPT 42 13 "Valorizz. 5 "
PROMPT 42 14 "Valorizz. 5 "
ITEM "|"
ITEM "6|Costo medio ponder."
ITEM "1|Ultimo costo"
@ -438,7 +448,7 @@ BEGIN
END
LIST F_VAL6 20
BEGIN
PROMPT 42 14 "Valorizz. 6 "
PROMPT 42 15 "Valorizz. 6 "
ITEM "|"
ITEM "6|Costo medio ponder."
ITEM "1|Ultimo costo"

View File

@ -103,7 +103,7 @@ protected:
virtual bool on_key(KEY key);
public:
void load_prod_file(const char * nomefile, bool savefile, bool only_errors);
void load_prod_file(const char * nomefile, bool savefile, bool only_errors, TArray & warn_perc, TString_array & warning);
void display_error(TViswin & v, const char * msg, TTracciato_record & t, TRecord_text & r);
void print_record(TViswin & v, TTipo_rec t , TProduzione & r);
TRilprod_mask();
@ -219,9 +219,27 @@ bool TRilprod_mask::on_field_event(TOperable_field& o, TField_event e, long joll
if (e == fe_button)
{
TLoadfile_mask m;
TArray warn_perc;
TString_array warning;
if (m.run() == K_ENTER)
load_prod_file(m.get(F_FILE), m.get_bool(F_SAVE), m.get_bool(F_ONLY_ERRORS));
{
{
short dlg = F_PERC1;
for (int i = 0; i < 4; i++)
{
const real perc(m.get(dlg++));
warn_perc.add(perc);
const TString & s = m.get(dlg++);
warning.add(s);
}
}
load_prod_file(m.get(F_FILE), m.get_bool(F_SAVE), m.get_bool(F_ONLY_ERRORS), warn_perc, warning);
}
}
default:
break;
@ -293,7 +311,7 @@ void TRilprod_mask::print_record(TViswin & v, TTipo_rec t , TProduzione & r)
v.add_line(l);
}
void TRilprod_mask::load_prod_file(const char * nomefile, bool savefile, bool only_errors)
void TRilprod_mask::load_prod_file(const char * nomefile, bool savefile, bool only_errors, TArray & warn_perc, TString_array & warning)
{
TViswin vwin(NULL, TR("Importazione produzione"), FALSE, TRUE, TRUE);
TFile_text prod(nomefile,"mr0500a.ini"); //crea un oggetto articoli di tipo TFile_text
@ -310,7 +328,6 @@ void TRilprod_mask::load_prod_file(const char * nomefile, bool savefile, bool on
TLocalisamfile fp(LF_RILPROD);
TRectype cmp(fp.curr());
const long max = fsize(nomefile);
TProgind p(max, format(FR("Importazione produzione : file %s"), nomefile));
for (int f = 0; f < nfields; f++)
@ -450,8 +467,6 @@ void TRilprod_mask::load_prod_file(const char * nomefile, bool savefile, bool on
}
}
if (nuovo)
{
prd.zero();
@ -598,6 +613,28 @@ void TRilprod_mask::load_prod_file(const char * nomefile, bool savefile, bool on
prd.put("SCARTO", scarto);
prd.rewrite();
}
if (tipo > _start) // Controllo lo scarto solo dopo _start
{
const real tot(prd.get_real("QTA") + prd.get_real("SCARTO"));
if (tot > ZERO)
{
real perc = prd.get_real("SCARTO") * CENTO / tot;
perc.round(2);
for (int j = 3; j >= 0; j--)
{
if ((const real&)warn_perc[j] > ZERO && perc > (const real&)warn_perc[j])
{
TString warn;
warn.format("@b%s - percentuale %s", (const char *) warning.row(j), perc.string());
display_error(vwin, warn, trec, rec);
break;
}
}
}
}
}
}
prod.close();

View File

@ -71,13 +71,14 @@ NUMBER F_PROG 3
BEGIN
PROMPT 42 3 "Progressivo del giorno "
USE LF_RILPROD KEY 6
JOIN LF_ANAMAG INTO CODART==CODART
JOIN LF_ANAMAG INTO CODART==CODART
FLAGS "U"
INPUT PROVV F_PROVV
INPUT ANNO F_ANNO
INPUT CODNUM F_CODNUM
INPUT NDOC F_NDOC
INPUT NRIGA F_NRIGA
INPUT DATA F_DATA
DISPLAY "Ordine@10" NDOC
DISPLAY "Riga@7" NRIGA
DISPLAY "Data ordine" DATA

View File

@ -2,4 +2,14 @@
#define F_PROFILO 102
#define F_SAVE 103
#define F_ONLY_ERRORS 104
#define F_PERC1 105
#define F_WARN1 106
#define F_PERC2 107
#define F_WARN2 108
#define F_PERC3 109
#define F_WARN3 110
#define F_PERC4 111
#define F_WARN4 112
#define F_PERC5 113
#define F_WARN5 114

View File

@ -1,6 +1,6 @@
#include "mr0500b.h"
PAGE "Lettura terminale portatile" -1 -1 80 8
PAGE "Lettura terminale portatile" -1 -1 80 18
STRING F_FILE 128 40
BEGIN
@ -19,6 +19,56 @@ BEGIN
PROMPT 40 4 "Visualizza solo gli errori"
END
NUMBER F_PERC1 5 2
BEGIN
PROMPT 1 6 "1 livello di avviso "
END
STRING F_WARN1 70 50
BEGIN
PROMPT 28 6 ""
END
NUMBER F_PERC2 5 2
BEGIN
PROMPT 1 8 "2 livello di avviso "
END
STRING F_WARN2 70 50
BEGIN
PROMPT 28 8 ""
END
NUMBER F_PERC3 5 2
BEGIN
PROMPT 1 10 "3 livello di avviso "
END
STRING F_WARN3 70 50
BEGIN
PROMPT 28 10 ""
END
NUMBER F_PERC4 5 2
BEGIN
PROMPT 1 12 "4 livello di avviso "
END
STRING F_WARN4 70 50
BEGIN
PROMPT 28 12 ""
END
NUMBER F_PERC5 5 2
BEGIN
PROMPT 1 14 "5 livello di avviso "
END
STRING F_WARN5 70 50
BEGIN
PROMPT 28 14 ""
END
STRING F_PROFILO 70 50
BEGIN
PROMPT 1 -3 "Profilo "

View File

@ -359,6 +359,21 @@ void TMRP_line::set_imp_lin(const char* imp, const char* lin)
{
_codimp = imp;
_codlin = lin;
if (_codlin.full() && _codimp.full())
{
const TLinea_prod l(_codlin);
imp = l.codimp();
if (_codimp != imp)
{
#ifdef DBG
warning_box("Impianto '%s' incompatibile con la linea '%s':\nforzato a '%s'.",
(const char*)_codimp, (const char*) lin, imp);
#endif
_codimp = imp;
}
}
}
TMRP_line::TMRP_line(const char* art, const char* giac,
@ -367,9 +382,10 @@ TMRP_line::TMRP_line(const char* art, const char* giac,
long codcli)
: _codart(art), _livgiac(giac), _explosion_depth(0),
_codmag(mag), _codmag_coll(magc),
_codimp(imp), _codlin(lin), _codclifor(codcli),
_codclifor(codcli),
_final_product(FALSE)
{
set_imp_lin(imp, lin);
if (_articolo_giac==NULL)
_articolo_giac= new TArticolo_giacenza();
}
@ -819,7 +835,7 @@ void TLav_finder::art2magimpline(const TCodice_articolo& art,
TString& lin)
{
TLavorazione& lav = art2lav(art);
if (imp.blank() && !lin.blank())
if (imp.blank() && lin.full())
imp = _lnp.decode(lin);
lin.cut(0);
const int ll = _keep_imp ? lav.linee() : lav.linee_standard();
@ -832,7 +848,7 @@ void TLav_finder::art2magimpline(const TCodice_articolo& art,
if (goodimp)
break;
}
if (lin.not_empty())
if (lin.full())
{
const TLinea_prod lnp(lin) ;
imp = lnp.codimp();
@ -891,9 +907,9 @@ private:
bool load_planned_orders();
bool explode_articles();
bool test_codnum(const TCodice_numerazione& num, TString_array& a) const;
int test_status(const TRectype& doc, TString_array& a) const;
bool has_confirmed_status(const TRectype& doc, TToken_string & riga ) const;
bool test_codnum(const TCodice_numerazione& num, 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;
protected:
bool preprocess_cycle(); // req iniziale dai docs
@ -1312,7 +1328,7 @@ int TMatResMask::add_order_line(long forn, const TMRP_line& line, int bucket)
{
// RIGA GIA' PRESENTE
TRiga_ordine& riga = (TRiga_ordine&)a[pos];
const TString & codnum = riga.get(F_DOCCODNUM - FIRST_FIELD);
const TString4 codnum = riga.get(F_DOCCODNUM - FIRST_FIELD);
// if (!(codnum != get(F_NUM_PROD) && codnum != get(F_NUM_FORN)))
if (codnum == get(F_NUM_PROD) || codnum == get(F_NUM_FORN)) // Guy was here!
riga += *r;
@ -1331,7 +1347,7 @@ int TMatResMask::add_order_line(long forn, const TMRP_line& line, int bucket)
s.enable_cell(pos, F_DEPOSITO - FIRST_FIELD);
s.enable_cell(pos, F_CODIMP - FIRST_FIELD);
s.enable_cell(pos, F_CODLIN - FIRST_FIELD);
a.destroy(pos); // no null rows if not desired
a.destroy(pos, nref < 0); // no null rows if not desired
}
}
else
@ -1850,12 +1866,12 @@ int TRisalita_mask::add_gross_ref(const TMRP_line& line, int bucket)
///////////////////////////////////////////////////////////
bool TMatResPlanning::test_codnum(const TCodice_numerazione& num,
TString_array& a) const
const TString_array& a) const
{
TString tmp;
for (int it=0 ; it< a.items(); it++ )
{
tmp = a.row(it).get(0);
a.row(it).get(0, tmp);
if (tmp == num.codice()) return TRUE;
}
return FALSE;
@ -1863,21 +1879,20 @@ bool TMatResPlanning::test_codnum(const TCodice_numerazione& num,
return yes;
}
bool TMatResPlanning::has_confirmed_status(const TRectype& doc,
TToken_string & riga ) const
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 = riga.get_char(F_STATODEF - FIRST_FIELD);
const char state_def = ((TToken_string&)riga).get_char(F_STATODEF - FIRST_FIELD);
return (statodoc >= state_def);
}
int TMatResPlanning::test_status(const TRectype& doc,
TString_array& a) const
const TString_array& a) const
{
const TString16 tipodoc = doc.get(DOC_TIPODOC);
const TString4 tipodoc = doc.get(DOC_TIPODOC);
const char statodoc = doc.get_char(DOC_STATO);
for (int i = a.items()-1; i >= 0; i--)
{
TToken_string& riga = a.row(i);
TToken_string& riga = (TToken_string&)a.row(i);
const char* t = riga.get(0);
if (tipodoc == t)
{
@ -2092,7 +2107,7 @@ bool TMatResPlanning::explode_articles()
{
TString8 mag = line.codmagdep(), imp = line.codimp(), lin = line.codlin();
_artinfo.art2magimpline(line.articolo(), mag, imp, lin);
if (lin.not_empty())
if (lin.full())
line.set_imp_lin(imp, lin);
}
@ -2173,8 +2188,8 @@ bool TMatResPlanning::load_planned_orders()
const TRectype& curr = cur.curr();
TRectype filter_fr(curr), filter_to(curr);
TString_array& n = m.sfield(F_NUM_ORF).rows_array();
TString_array& a = m.sfield(F_TIPI_ORF).rows_array();
const TString_array& n = m.sfield(F_NUM_ORF).rows_array();
const TString_array& a = m.sfield(F_TIPI_ORF).rows_array();
TProgind pi(table_items("%NUM"), TR("Caricamento arrivi futuri..."), TRUE, TRUE);
@ -2239,14 +2254,19 @@ bool TMatResPlanning::load_planned_orders()
if (consegna > date_to)
continue;
if (load_evasi && doc_evaso)
bool padre_evaso = false;
if (load_evasi)
{
const TRectype* dariga = riga.find_original_rdoc();
if (dariga != NULL && dariga->get_bool(RDOC_RIGAEVASA))
continue;
{
const TRectype* dadoc = riga.find_original_doc();
if (dadoc != NULL)
padre_evaso = dadoc->get_bool(DOC_DOCEVASO);
}
}
const real qta = load_evasi ? riga.quantita() : riga.qtaresidua();
const real qta = load_evasi && !padre_evaso ? riga.quantita() : riga.qtaresidua();
if (qta > ZERO)
{
const TCodice_articolo art = riga.get(RDOC_CODARTMAG);
@ -2269,9 +2289,9 @@ bool TMatResPlanning::load_planned_orders()
TQuantita q(art, um, qta);
q.convert2umbase();
q.currency2umbase(prz);
TString8 codnum = doc.get(DOC_CODNUM);
long docnum = doc.get_long(DOC_NDOC);
int numriga = riga.get_int(RDOC_NRIGA);
const TString4 codnum = doc.get(DOC_CODNUM);
const long docnum = doc.get_long(DOC_NDOC);
const int numriga = riga.get_int(RDOC_NRIGA);
TMRP_docref * docref = new TMRP_docref(doc.get_int(DOC_ANNO), codnum, docnum,
numriga, um, q.val(), prz.get_num());
const TMRP_time t(consegna, 0, imp, lin);
@ -2444,6 +2464,7 @@ bool TMatResPlanning::gross2net_logic(TMRP_line &curr_article, int bucket, bool
bool TMatResPlanning::net_requirement_cycle()
{
const TMatResMask& m = *_mask;
const bool dont_use_mag = m.get_bool(F_DONT_USE_MAG);
bool ok = true;
// ordina gli articoli
@ -2462,7 +2483,7 @@ bool TMatResPlanning::net_requirement_cycle()
if (last >= 0)
{
real curgiac;
curr_article.set_on_hand(0, curr_article.giacenza_attuale(curgiac, m.get_date(F_DADATA)));
curr_article.set_on_hand(0, dont_use_mag ? ZERO : curr_article.giacenza_attuale(curgiac, m.get_date(F_DADATA)));
bool sc_used = false;
for (int bucket = 0; ok && bucket <= last; bucket = curr_article.next_bucket(bucket))

View File

@ -58,6 +58,7 @@
#define F_MAXLEVEL 254
#define F_RIFERIMENTO_MRP 255
#define F_LOAD_EVASI 256
#define F_DONT_USE_MAG 257
// campi senza default sul profilo
#define F_YEAR 301

View File

@ -207,6 +207,11 @@ BEGIN
PROMPT 2 20 "Non considerare l'evasione ordini"
END
BOOLEAN F_DONT_USE_MAG
BEGIN
PROMPT 40 20 "Non considerare la giacenza di magazzino"
END
ENDPAGE
PAGE "Genera" -1 -1 78 20
@ -446,20 +451,20 @@ END
TEXT DLG_NULL
BEGIN
GROUP G_PREPROCESS
PROMPT 32 20 "giorni lavorativi"
PROMPT 32 20 "gg.lavorativi"
END
NUMBER F_XTRA_PLTIME 2
BEGIN
GROUP G_PREPROCESS
PROMPT 2 21 "Anticipa le emissioni di "
PROMPT 42 20 "Anticipa le emissioni di "
FLAGS "U"
END
TEXT DLG_NULL
BEGIN
GROUP G_PREPROCESS
PROMPT 32 21 "giorni lavorativi"
PROMPT 72 20 "gg.lavorativi"
FLAGS "U"
END
@ -1106,7 +1111,7 @@ END
STRING F_CODLIN 5
BEGIN
PROMPT 1 11 "Linea "
FLAGS "UZ"
FLAGS "UZG"
USE LNP
INPUT CODTAB F_CODLIN
DISPLAY "Codice" CODTAB
@ -1125,7 +1130,7 @@ BEGIN
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@16" CODTAB
COPY OUTPUT F_CODLIN
CHECKTYPE NORMAL
CHECKTYPE NONE
END
NUMBER F_QUANTITA 18 5

View File

@ -130,13 +130,16 @@ bool TPlann_sub_mask::on_field_event(TOperable_field& o, TField_event e, long jo
{
switch (o.dlg())
{
case DLG_QUIT:
copy_fields_to();
save_profile();
break;
case DLG_QUIT:
copy_fields_to();
save_profile();
break;
default:
break;
}
return true;
}
///////////////////////////////////////////////////////////
// Maschera stampa
///////////////////////////////////////////////////////////
@ -361,10 +364,11 @@ int TPlanning_mask::test_codnum(const TCodice_numerazione& num) const
for (int s = 2; s > 0; s--)
{
const short id = s == _Doc_planning ? F_NUM_PLA : F_NUM_ORC;
TString_array& nums = sfield(id).rows_array();
for (int i = nums.items()-1; i >= 0; i--)
const TString_array& nums = sfield(id).rows_array();
for (int i = nums.last(); i >= 0; i--)
{
const char* t = nums.row(i).get(0);
TToken_string& str = (TToken_string&)nums.row(i);
const char* t = str.get(0);
if (num.codice() == t)
{
r|=s; break;
@ -1340,10 +1344,10 @@ void TPlanning_mask::propose_1stJIT(TMSP_logic logic, bool check_machine, bool c
{
_proposed_articles.destroy();
gross2net(_stock_break, lotsizing);
const char * msg;
msg = (level == 1) ? TR("Calcolo nuove proposte (articoli non Master)") :TR("Calcolo nuove proposte");
const int anticipomin=get_int((level == 2) ? F_ANTICIPOMIN : F_ANTICIPOMIN2);
const int anticipomax=get_int((level == 2) ? F_ANTICIPOMAX : F_ANTICIPOMAX2);
const char* msg = (level == 1) ? TR("Calcolo nuove proposte (articoli non Master)")
: TR("Calcolo nuove proposte");
const int anticipomin=get_int((level == 2) ? F_ANTICIPOMIN : F_ANTICIPOMIN2);
const int anticipomax=get_int((level == 2) ? F_ANTICIPOMAX : F_ANTICIPOMAX2);
ok = general_review(check_machine, check_human, useextralines, useextrahours,lotsizing, no_outcapacity,anticipomin,anticipomax,_stock_break, logic, msg);
if (ok)
{
@ -1379,6 +1383,7 @@ void TPlanning_mask::propose_1stJIT(TMSP_logic logic, bool check_machine, bool c
bool TPlanning_mask::general_review(bool check_machine, bool check_human, bool useextralines, bool useextrahours,bool lotsizing, bool no_outcapacity, int anticipomin,int anticipomax, TMSP_mode mode, TMSP_logic logic, const char * msg )
{
const long max_mrp_rows=_mrp_articles.items();
const bool firstfitxbucket=get_bool(F_FFBUCKET_MSP) ;
if (max_mrp_rows == 0)
return true;
@ -1468,24 +1473,25 @@ bool TPlanning_mask::general_review(bool check_machine, bool check_human, bool u
if (upper_buck>bucket)
upper_buck=bucket;
nbucket= (logic == _JIT_logic) ? upper_buck : lower_buck;
while (art_per_buck > ZERO // ho un sotto-stock da risolvere
&& nbucket>=lower_buck && nbucket <= upper_buck) // sono entro il range definito
{
int nlinea, numlinee;
int nlinea, numlinee;
if (ignore_lin || codlin.blank() )
if (ignore_lin || codlin.blank() )
{
nlinea=(attemp == 2 ? lineestd : 0 ) ;
numlinee=(attemp == 1 ? lineestd : maxlinee ) ;
} else {
nlinea= curr_labor->find_linea(codlin);
if (nlinea<0)
{
nlinea=(attemp == 2 ? lineestd : 0 ) ;
numlinee=(attemp == 1 ? lineestd : maxlinee ) ;
} else {
nlinea= curr_labor->find_linea(codlin);
if (nlinea<0)
{
error_box(FR("La linea %s non e' in grado di produrre l'articolo %s"), (const char * )codlin, (const char *) _mrp_articles[mrp_row].articolo());
break;
}
numlinee=nlinea+1;
}
error_box(FR("La linea %s non e' in grado di produrre l'articolo %s"), (const char * )codlin, (const char *) _mrp_articles[mrp_row].articolo());
break;
}
numlinee=nlinea+1;
}
while (art_per_buck > ZERO // ho un sotto-stock da risolvere
&& nlinea >= 0 && nlinea<numlinee && nbucket>=lower_buck && nbucket <= upper_buck) // sono entro il range definito
{
while (art_per_buck > ZERO && nlinea >= 0 && nlinea<numlinee && nbucket <= upper_buck)
{
// scelgo la linea
@ -1591,16 +1597,22 @@ bool TPlanning_mask::general_review(bool check_machine, bool check_human, bool u
}
} else
error_box("Articolo %s: impianto %s incompatibile con la linea %s",(const char *)mrpline.articolo(), (const char *)codimp, (const char *)linea_prod.codice());
if (logic == _uniform_logic)
if ((logic == _uniform_logic) ||
(logic == _first_fit_logic && firstfitxbucket))
nbucket++;
else
nlinea++;
} // ciclo sulle linee
if (logic == _first_fit_logic && firstfitxbucket)
nlinea++;
else
{
if (logic == _first_fit_logic)
nbucket++;
else
if (logic != _uniform_logic)
nbucket--;
nbucket++;
else
if (logic != _uniform_logic)
nbucket--;
}
}
attemp++; // altro tentativo
} // ciclo di risoluzione dei sotto-stock
@ -1612,21 +1624,27 @@ bool TPlanning_mask::general_review(bool check_machine, bool check_human, bool u
{
if (no_limits) // nessuna lavorazione da controllare o capacita' infinita
{
int nbucket, lower_buck, upper_buck;
if (logic == _uniform_logic)
int nbucket = 0, lower_buck = 0, upper_buck = 0;
switch (logic)
{
case _uniform_logic:
lower_buck = bucket - anticipomax/days_per_bucket();
upper_buck = bucket-anticipomin/days_per_bucket();
} else if (logic == _first_fit_logic) {
break;
case _first_fit_logic:
lower_buck = bucket - anticipomax/days_per_bucket();
upper_buck = lower_buck;
} else {
break;
default:
upper_buck = bucket - anticipomin/days_per_bucket();
lower_buck = upper_buck;
break;
}
if (lower_buck<1)
lower_buck=1;
if (upper_buck>bucket)
if (lower_buck < 1)
lower_buck = 1;
if (upper_buck < lower_buck) // Oppure bucket??????????????
upper_buck = lower_buck;
if (upper_buck > bucket)
upper_buck=bucket;
nbucket = lower_buck;
//if (nbucket>bucket) // sono oltre il bucket attuale ?...
@ -1661,12 +1679,9 @@ bool TPlanning_mask::general_review(bool check_machine, bool check_human, bool u
}
if (codmagdep.empty())
{
if (codmagdep.empty())
{
codmagdep = _magazzini.standardmag();
codmagdep.left_just(3);
codmagdep << _magazzini.standarddep();
}
codmagdep = _magazzini.standardmag();
codmagdep.left_just(3);
codmagdep << _magazzini.standarddep();
}
TMRP_line* new_article = find_propose(codclifor, mrpline.articolo(), mrpline.livgiac(),
mrpline.codimp() , mrpline.codlin(), codmagdep, mrpline.codmagdep_coll(), true);
@ -2032,12 +2047,13 @@ const TDate & TPlanning_mask::starting_date() const
int TPlanning_mask::days_per_bucket() const
{
return get_int(F_DAYXBUCK) * (get_int(F_BUCKETS) ? get_int(F_BUCKETS) : get_int(F_BUCKET));
const int cestini = get_int(F_BUCKETS);
return get_int(F_DAYXBUCK) * (cestini > 0 ? cestini : get_int(F_BUCKET));
}
bool TPlanning_mask::bucket_mese() const
{
return *get(F_BUCKETS) == 'M';
return get(F_BUCKETS)[0] == 'M';
}
void TPlanning_mask::clear_sheets()
@ -2307,7 +2323,7 @@ bool TPlanning_mask::pack_article_sheet(int r, int first, int last)
{
TToken_string &curr_row=sf.row(curr);
if (art_row.get_long(F_CLIENTE-FIRST_FIELD) == curr_row.get_long(F_CLIENTE-FIRST_FIELD))
if (TRiga_articolo ::order_compare(art_row, curr_row,15)==0)
if (TRiga_articolo::order_compare(art_row, curr_row,LAST_BUCKET)==0)
{
packed = true;
TToken_string work_row = curr_row;

View File

@ -25,6 +25,8 @@
#define F_ADATA 207
#define F_NOCLI_OUT 208
#define F_NOMAG_OUT 209
#define F_FFBUCKET_MSP 210
//#define F_NOIMP_OUT ?
//#define F_NOLIN_OUT ?
@ -245,25 +247,54 @@
#define F_BUCKET14_V 146
#define F_BUCKET15 147
#define F_BUCKET15_V 148
#define F_MASTERCODE 149
#define F_SORTCODIMP 150
#define F_SORTCODLIN 151
#define F_BUCKET16 149
#define F_BUCKET16_V 150
#define F_BUCKET17 151
#define F_BUCKET17_V 152
#define F_BUCKET18 153
#define F_BUCKET18_V 154
#define F_BUCKET19 155
#define F_BUCKET19_V 156
#define F_BUCKET20 157
#define F_BUCKET20_V 158
#define F_BUCKET21 159
#define F_BUCKET21_V 160
#define F_BUCKET22 161
#define F_BUCKET22_V 162
#define F_BUCKET23 163
#define F_BUCKET23_V 164
#define F_BUCKET24 165
#define F_BUCKET24_V 166
#define F_BUCKET25 167
#define F_BUCKET25_V 168
#define F_BUCKET26 169
#define F_BUCKET26_V 170
#define F_BUCKET27 171
#define F_BUCKET27_V 172
#define F_BUCKET28 173
#define F_BUCKET28_V 174
#define F_BUCKET29 175
#define F_BUCKET29_V 176
#define F_BUCKET30 177
#define F_BUCKET30_V 178
#define LAST_BUCKET 15
#define F_MASTERCODE 179
#define F_SORTCODIMP 180
#define F_SORTCODLIN 181
#define LAST_BUCKET 30
#define H_CODIMP 150
#define F_DESCCLI 151
#define F_DESCIMP 152
#define F_DESCLIN 153
#define F_DESCMAG 154
#define F_DESCMAGCOLL 155
#define F_DOCUMENTI_IN 160
#define F_DOCUMENTI_OUT 161
#define F_VINCOLI_IN 162
#define F_VINCOLI_OUT 163
#define F_RECALCLINE 170
#define H_CODIMP 180
#define F_DESCCLI 181
#define F_DESCIMP 182
#define F_DESCLIN 183
#define F_DESCMAG 184
#define F_DESCMAGCOLL 185
#define F_DOCUMENTI_IN 190
#define F_DOCUMENTI_OUT 191
#define F_VINCOLI_IN 192
#define F_VINCOLI_OUT 193
#define F_RECALCLINE 194
// sheet linee
#define F_CODIMPCRP 101

View File

@ -528,6 +528,11 @@ BEGIN
MESSAGE COPY,F_RECALC_TYPE2
END
BOOL F_FFBUCKET_MSP
BEGIN
PROMPT 60 1 "First Fit sui bucket"
END
STRING F_PRIORITY 60
BEGIN
PROMPT 2 2 "Priorita' "
@ -892,6 +897,36 @@ BEGIN
ITEM "Bucket v14"
ITEM "Bucket q15"
ITEM "Bucket v15"
ITEM "Bucket q16"
ITEM "Bucket v16"
ITEM "Bucket q17"
ITEM "Bucket v17"
ITEM "Bucket q18"
ITEM "Bucket v18"
ITEM "Bucket q19"
ITEM "Bucket v19"
ITEM "Bucket q20"
ITEM "Bucket v20"
ITEM "Bucket q21"
ITEM "Bucket v21"
ITEM "Bucket q22"
ITEM "Bucket v22"
ITEM "Bucket q23"
ITEM "Bucket v23"
ITEM "Bucket q24"
ITEM "Bucket v24"
ITEM "Bucket q25"
ITEM "Bucket v25"
ITEM "Bucket q26"
ITEM "Bucket v26"
ITEM "Bucket q27"
ITEM "Bucket v27"
ITEM "Bucket q28"
ITEM "Bucket v28"
ITEM "Bucket q29"
ITEM "Bucket v29"
ITEM "Bucket q30"
ITEM "Bucket v30"
ITEM "Master"
DEFAULT NONE
END
@ -1436,7 +1471,6 @@ ENDMASK
PAGE "Articoli" -1 -1 80 22
LIST F_TIPOCF_SHEET 1
BEGIN
PROMPT 1 0 ""
@ -1692,32 +1726,16 @@ BEGIN
FLAGS "D"
END
TEXT DLG_NULL
BEGIN
PROMPT 3 10 " Quantita' "
END
TEXT DLG_NULL
BEGIN
PROMPT 23 10 " Prezzo"
END
TEXT DLG_NULL
BEGIN
PROMPT 42 9 " Quantita' "
END
TEXT DLG_NULL
BEGIN
PROMPT 64 9 " Prezzo"
END
NUMBER F_BUCKET0 17 2
BEGIN
PROMPT 40 10 "0 "
PROMPT 1 10 "0 "
FLAGS "DU"
END
NUMBER F_BUCKET0_V 15 3
BEGIN
PROMPT 62 10 ""
PROMPT 1 110 ""
FLAGS "DU"
END
@ -1730,204 +1748,408 @@ END
NUMBER F_BUCKET1_V 15 3
BEGIN
PROMPT 22 11 ""
PROMPT 1 111 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET2 17 2
BEGIN
PROMPT 40 11 "2 "
PROMPT 1 12 "2 "
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET2_V 15 3
BEGIN
PROMPT 62 11 ""
PROMPT 1 112 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET3 17 2
BEGIN
PROMPT 1 12 "3 "
PROMPT 1 13 "3 "
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET3_V 15 3
BEGIN
PROMPT 22 12 ""
PROMPT 1 113 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET4 17 2
BEGIN
PROMPT 40 12 "4 "
PROMPT 1 14 "4 "
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET4_V 15 3
BEGIN
PROMPT 62 12 ""
PROMPT 1 114 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET5 17 2
BEGIN
PROMPT 1 13 "5 "
PROMPT 1 15 "5 "
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET5_V 15 3
BEGIN
PROMPT 22 13 ""
PROMPT 1 115 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET6 17 2
BEGIN
PROMPT 40 13 "6 "
PROMPT 1 16 "6 "
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET6_V 15 3
BEGIN
PROMPT 62 13 ""
PROMPT 1 116 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET7 17 2
BEGIN
PROMPT 1 14 "7 "
PROMPT 1 17 "7 "
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET7_V 15 3
BEGIN
PROMPT 22 14 ""
PROMPT 1 117 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET8 17 2
BEGIN
PROMPT 40 14 "8 "
PROMPT 1 18 "8 "
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET8_V 15 3
BEGIN
PROMPT 62 14 ""
PROMPT 1 118 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET9 17 2
BEGIN
PROMPT 1 15 "9 "
PROMPT 1 19 "9 "
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET9_V 15 3
BEGIN
PROMPT 22 15 ""
PROMPT 1 119 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET10 17 2
BEGIN
PROMPT 40 15 "10"
PROMPT 22 10 "10"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET10_V 15 3
BEGIN
PROMPT 62 15 ""
PROMPT 22 110 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET11 17 2
BEGIN
PROMPT 1 16 "11"
PROMPT 22 11 "11"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET11_V 15 3
BEGIN
PROMPT 22 16 ""
PROMPT 22 111 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET12 17 2
BEGIN
PROMPT 40 16 "12"
PROMPT 22 12 "12"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET12_V 15 3
BEGIN
PROMPT 62 16 ""
PROMPT 22 112 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET13 17 2
BEGIN
PROMPT 1 17 "13"
PROMPT 22 13 "13"
FLAGS "U"
END
NUMBER F_BUCKET13_V 15 3
BEGIN
PROMPT 22 17 ""
PROMPT 22 113 ""
FLAGS "U"
END
NUMBER F_BUCKET14 17 2
BEGIN
PROMPT 40 17 "14"
PROMPT 22 14 "14"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET14_V 15 3
BEGIN
PROMPT 62 17 ""
PROMPT 22 114 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET15 17 2
BEGIN
PROMPT 1 18 "15"
PROMPT 22 15 "15"
FLAGS "DU"
END
NUMBER F_BUCKET15_V 15 3
BEGIN
PROMPT 22 18 ""
PROMPT 22 115 ""
FLAGS "DU"
END
NUMBER F_BUCKET16 17 2
BEGIN
PROMPT 22 16 "16"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET16_V 15 3
BEGIN
PROMPT 22 116 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET17 17 2
BEGIN
PROMPT 22 17 "17"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET17_V 15 3
BEGIN
PROMPT 22 117 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET18 17 2
BEGIN
PROMPT 22 18 "18"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET18_V 15 3
BEGIN
PROMPT 22 118 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET19 17 2
BEGIN
PROMPT 22 19 "19"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET19_V 15 3
BEGIN
PROMPT 22 119 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET20 17 2
BEGIN
PROMPT 43 10 "20"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET20_V 15 3
BEGIN
PROMPT 43 110 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET21 17 2
BEGIN
PROMPT 43 11 "21"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET21_V 15 3
BEGIN
PROMPT 43 111 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET22 17 2
BEGIN
PROMPT 43 12 "22"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET22_V 15 3
BEGIN
PROMPT 43 112 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET23 17 2
BEGIN
PROMPT 43 13 "23"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET23_V 15 3
BEGIN
PROMPT 43 113 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET24 17 2
BEGIN
PROMPT 43 14 "24"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET24_V 15 3
BEGIN
PROMPT 43 114 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET25 17 2
BEGIN
PROMPT 43 15 "25"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET25_V 15 3
BEGIN
PROMPT 43 115 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET26 17 2
BEGIN
PROMPT 43 16 "26"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET26_V 15 3
BEGIN
PROMPT 43 116 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET27 17 2
BEGIN
PROMPT 43 17 "27"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET27_V 15 3
BEGIN
PROMPT 43 117 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET28 17 2
BEGIN
PROMPT 43 18 "28"
FLAGS "U"
END
NUMBER F_BUCKET28_V 15 3
BEGIN
PROMPT 43 118 ""
FLAGS "U"
END
NUMBER F_BUCKET29 17 2
BEGIN
PROMPT 43 19 "29"
FLAGS "U"
GROUP G_QTA
END
NUMBER F_BUCKET29_V 15 3
BEGIN
PROMPT 43 119 ""
FLAGS "U"
GROUP G_VALORI
END
NUMBER F_BUCKET30 17 2
BEGIN
PROMPT 43 20 "30"
FLAGS "DU"
END
NUMBER F_BUCKET30_V 15 3
BEGIN
PROMPT 43 120 ""
FLAGS "DU"
END
STRING F_MASTERCODE 1
BEGIN
@ -2164,8 +2386,6 @@ BEGIN
FLAGS "DU"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""

View File

@ -196,7 +196,7 @@ bool TRiga_articolo::find_block(const TSheet_field& sf, const int riga, int &fir
return TRUE;
}
int TRiga_articolo::order_compare( const TToken_string &r1 , const TToken_string &r2 , int level, bool ascending)
int TRiga_articolo::order_compare( const TToken_string &r1, const TToken_string &r2, int level, bool ascending)
{
TString80 str0, str1;
int cmp = 0;

View File

@ -229,6 +229,7 @@ public:
void set_numpers_turno(int t, int pers);
virtual int num_turni() {return get_int("I0");}
virtual real tempo_minimo() {return get_real("R1");}
virtual int inizio_turno(int t);
virtual int durata_turno(int t);
// **

View File

@ -54,17 +54,18 @@
#define F_T8MDURATA 148
#define F_T8NUMPERS 149
#define F_CODMAG 160
#define F_DESMAG 161
#define F_CODDEP 162
#define F_DESDEP 163
#define F_CODMAG 160
#define F_DESMAG 161
#define F_CODDEP 162
#define F_DESDEP 163
#define F_CODMAG_C 164
#define F_DESMAG_C 165
#define F_CODDEP_C 166
#define F_DESDEP_C 167
#define F_TMIN 168
#define F_YEAR 201
#define F_TYPE 202
#define F_CALENDAR 203
#define F_YEAR 201
#define F_TYPE 202
#define F_CALENDAR 203
#endif

View File

@ -129,12 +129,18 @@ END
BOOL F_PERSONESPEC
BEGIN
PROMPT 40 7 "Utilizza personale specializzato"
PROMPT 30 7 "Utilizza personale specializzato"
FIELD B0
MESSAGE TRUE SHOW,GPERS@|ENABLE,F_PERSONE
MESSAGE FALSE HIDE,GPERS@
END
NUMBER F_TMIN 6 2
BEGIN
PROMPT 60 7 "Tempo minimo "
FIELD R1
END
NUMBER F_PERSONE 3
BEGIN
PROMPT 26 8 "Persone su un turno "

View File

@ -144,7 +144,6 @@ const int anno = rec.get_int(PROV_ANNO);
const real importo_maturato = importo_rata - importo_pagato;
const real provvigione_maturata = provvigione_rata - provvigione_pagata;
rec.put(PROV_SALDATA, "X");
rec.put(PROV_PAGMAT, importo_maturato);
rec.put(PROV_PROVVMAT, provvigione_maturata);
@ -171,7 +170,6 @@ const int anno = rec.get_int(PROV_ANNO);
if (data_mat <= data_scad)
{
changed_record = true;
rec.put(PROV_SALDATA, "X");
rec.put(PROV_PAGMAT, importo_rata);
rec.put(PROV_PROVVMAT, provvigione_rata);
}

View File

@ -17,26 +17,16 @@
// Stampa prospetto scadenze
///////////////////////////////////////////////////////////
#define NUMERO_FASCE 5
#define LIMITI {30,60,90,120,150,30,60,90,120,150}
#define NUMERO_FASCE 6
#define LIMITI {0, 30, 60, 90, 120, 150, 180}
enum tipo_st {clienti=0, fornitori=1};
class TLineTotal : public TObject //Oggetto di base per i TAssoc_array dei totali
{
public:
real _s1;// Scaglione 1 scaduto
real _s2;// Scaglione 2 scaduto
real _s3;// Scaglione 3 scaduto
real _s4;// Scaglione 4 scaduto
real _s5;// Scaglione 5 scaduto
real _s6;// Scaglione 6 scaduto
real _ns1;// Scaglione 1 non scaduto
real _ns2;// Scaglione 2 non scaduto
real _ns3;// Scaglione 3 non scaduto
real _ns4;// Scaglione 4 non scaduto
real _ns5;// Scaglione 5 non scaduto
real _ns6;// Scaglione 6 non scaduto
real _s[6];// Scaglioni scaduto
real _ns[6];// Scaglioni a scadere
real _es; // esposto
real _sl; // saldo
@ -48,18 +38,11 @@ public:
TLineTotal & TLineTotal::copy(const TLineTotal & l)
{
_s1=l._s1;
_s2=l._s2;
_s3=l._s3;
_s4=l._s4;
_s5=l._s5;
_s6=l._s6;
_ns1=l._ns1;
_ns2=l._ns2;
_ns3=l._ns3;
_ns4=l._ns4;
_ns5=l._ns5;
_ns6=l._ns6;
for (int i = 0; i < NUMERO_FASCE; i++)
{
_s[i] = l._s[i];
_ns[i] = l._ns[i];
}
_es=l._es;
_sl=l._sl;
return *this;
@ -67,18 +50,11 @@ TLineTotal & TLineTotal::copy(const TLineTotal & l)
TLineTotal::TLineTotal()
{
_s1=ZERO;
_s2=ZERO;
_s3=ZERO;
_s4=ZERO;
_s5=ZERO;
_s6=ZERO;
_ns1=ZERO;
_ns2=ZERO;
_ns3=ZERO;
_ns4=ZERO;
_ns5=ZERO;
_ns6=ZERO;
for (int i = 0; i < NUMERO_FASCE; i++)
{
_s[i] = ZERO;
_ns[i] = ZERO;
}
_es=ZERO;
_sl=ZERO;
}
@ -117,17 +93,16 @@ public:
virtual print_action postprocess_print(int file, int counter);
virtual print_action postprocess_page(int file, int counter);
virtual void preprocess_header() {};
virtual void preprocess_footer() ;
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int);
virtual void set_page (int file, int counter);
void print_totali_rows(int nriga, bool what);
void print_totali(int& nriga);
void print_totali(int nriga);
void print_header();
int calc_last_column();
void update_totals(bool what, real& esp,
real& s1,real& s2,real& s3,real& s4,real& s5, real& s6,
real& ns1,real& ns2,real& ns3,real& ns4,real& ns5, real& ns6);
void update_totals(bool what, real& esp, real s[6], real ns[6]);
void compute_unassigned(TPartita& p);
void compute_all(TPartita& p, TBill& bill);
void print_real(TString& dest, const real& num);
@ -145,7 +120,7 @@ void TProspettoScadenze::print_real(TString& dest, const real& num)
const bool stampa_in_valuta = _stvaluta && !_codval.blank();
const TString& val = stampa_in_valuta ? _codval : EMPTY_STRING;
const TCurrency cur(num, val);
dest = cur.string(TRUE);
dest = cur.string(true);
dest.right_just(10);
}
@ -166,8 +141,8 @@ bool TProspettoScadenze::fil_function(const TRelation *r)
}
void TProspettoScadenze::update_totals(bool what, real& esp,
real& s1, real& s2, real& s3, real& s4, real& s5, real& s6,
real& ns1, real& ns2, real& ns3, real& ns4, real& ns5, real& ns6)
real s[6],
real ns[6])
{
TAssoc_array& a = (TAssoc_array&) _t[what];
TLineTotal *ll = (TLineTotal *) a.objptr(_codval);
@ -176,18 +151,11 @@ void TProspettoScadenze::update_totals(bool what, real& esp,
ll = new TLineTotal;
a.add(_codval, ll);
}
ll->_s1 += s1;
ll->_s2 += s2;
ll->_s3 += s3;
ll->_s4 += s4;
ll->_s5 += s5;
ll->_s6 += s6;
ll->_ns1 += ns1;
ll->_ns2 += ns2;
ll->_ns3 += ns3;
ll->_ns4 += ns4;
ll->_ns5 += ns5;
ll->_ns6 += ns6;
for (int i = 0; i < NUMERO_FASCE; i++)
{
ll->_s[i] += s[i];
ll->_ns[i] += ns[i];
}
ll->_es += esp;
}
@ -210,7 +178,12 @@ void TProspettoScadenze::compute_unassigned(TPartita& p)
void TProspettoScadenze::compute_all(TPartita& p, TBill& bill)
{
real residuo, s1,s2,s3,s4,s5,s6,ns1,ns2,ns3,ns4,ns5,ns6,res_pagati,esposto;
real residuo;
real s[6];
real ns[6];
real res_pagati;
real esposto;
compute_unassigned(p);
for (int r = p.last(); r > 0; r = p.pred(r)) // Browse all rows (partite)
{
@ -219,36 +192,40 @@ void TProspettoScadenze::compute_all(TPartita& p, TBill& bill)
// non deve scorrere le scadenze
const TDate data_reg(rp.get_date(PART_DATAREG));
if (data_reg > _limop) continue;
for (int n=rp.rate(); n > 0; n--) // Browse all rows (scadenze)
for (int n = rp.rate(); n > 0; n--) // Browse all rows (scadenze)
{
const TRiga_scadenze& rs = rp.rata(n);
const TDate d(rs.get_date(SCAD_DATASCAD));
const char* field = (_stvaluta && rs.in_valuta()) ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO;
const char* sfield = (_stvaluta && rs.in_valuta()) ? SCAD_IMPORTOVAL : SCAD_IMPORTO;
const char ssez = rp.sezione();
TImporto scd,pag,bf,work_imp;
scd += TImporto(ssez,rs.get_real(sfield)); // Importo in scadenza...
pag += rs.importo_pagato(_stvaluta); // Quanto e' stato pagato per questa scadenza?
// Scorre le righe di pagamento per trovare la riga corripondente alla prima data pagamento
TImporto scd(ssez,rs.get_real(sfield)); // Importo in scadenza...
TImporto pag(rs.importo_pagato(_stvaluta)); // Quanto e' stato pagato per questa scadenza?
TImporto bf;
TImporto work_imp;
// Scorre le righe di pagamento per trovare la riga corripondente alla prima data pagamento
// di questa rata. Motivo: il primo pagamento delle rata corrente, effettuato tramite effetto
// (ai fini del calcolo B.F.) deve essere considerato con la data scadenza
const int lst = rs.last();
int prima_riga_pagamento = -1;
TDate first_date;// data relativa alla prima riga di pagamento
for (int pp = rs.first(); pp <= lst; pp = rs.succ(pp))
{
const TRiga_partite& sum = p.riga(pp);
TDate current_date(sum.get_date(PART_DATAPAG));
int tipo_pag = rs.get_int(SCAD_TIPOPAG);
if (tipo_pag>=2 && tipo_pag<=7) //Incasso tramite effetto
const tipo_movimento tipomov = (tipo_movimento) sum.get_int(PART_TIPOMOV);
if (tipomov != tm_insoluto && tipo_pag >= 2 && tipo_pag <= 7) //Incasso tramite effetto
if (prima_riga_pagamento==-1 || first_date > current_date)
{
first_date = current_date;
prima_riga_pagamento = pp;
}
}
for (pp = rs.first(); pp <= lst; pp = rs.succ(pp)) // Browse all rows (pagamenti)
{
const TRectype pg = rs.row(pp);
@ -258,13 +235,13 @@ void TProspettoScadenze::compute_all(TPartita& p, TBill& bill)
// se tipomov e' 2 (Nota di credito assegnata)
// storna da scdz. In entrambi i casi si ha l'operatore +=, perche' nel TImporto e' gia'
// compresa la sezione opposta
if (tipomov==2)
if (tipomov == tm_nota_credito)
{
work_imp = TImporto(sez,pg.get_real(field));
scd += work_imp;
pag -= work_imp;
}
if ((tipomov==3 || tipomov==5) && _tipost==clienti && _gcr!=0)
if ((tipomov == tm_pagamento || tipomov == tm_pagamento_insoluto) && _tipost == clienti)
{
TDate data_pag(sum.get_date(PART_DATAPAG));
int tipo_pag = rs.get_int(SCAD_TIPOPAG);
@ -273,79 +250,76 @@ void TProspettoScadenze::compute_all(TPartita& p, TBill& bill)
if (prima_riga_pagamento > -1 && prima_riga_pagamento == pp)
data_pag = d; // Se e' il primo pagamento(in ordine di data) di questa rata
// prende la data di scadenza relativa.
if (data_pag >= _limbf) // && data_pag <= _limscad)
if (data_pag > _limbf) // && data_pag <= _limscad)
bf += TImporto(sez,pg.get_real(field));
}
}
}
char norm='D';
if (_tipost == fornitori)
norm = 'A';
pag.normalize((norm=='D') ? 'A' : 'D'); scd.normalize(norm); bf.normalize((norm=='D') ? 'A' : 'D');
real res,a,b; a = pag.valore(); b = scd.valore(); //buonf += bf.valore();
res = b - a;
const char scd_sez = (_tipost == fornitori ? 'A' : 'D');
const char pag_sez = (_tipost == fornitori ? 'D' : 'A');
scd.normalize(scd_sez);
real rscd = scd.valore();
pag -= bf;
pag.normalize(pag_sez);
real rpag = pag.valore();
real res = rscd - rpag;
if (_uns > ZERO) // Rettifica i pagamenti con i non assegnati (calcolo sul residuo: scadenza-pagamento)
{
real gap = (_uns > res ? res : _uns); // questo e' quanto manca per completare questa scadenza
a += gap;
res += gap;
_uns -= gap; // aggiorna la cache..
}
if (_unsnc > ZERO) // Rettifica le scadenze con le N.C non assegnate.
{
real gap = (_unsnc > b ? b : _unsnc);
b -= gap;
real gap = (_unsnc > rscd ? rscd : _unsnc);
rscd -= gap;
_unsnc -= gap;
}
res = b - a; // Scadenze - pagati = scaduto per questo gruppo di rate
if (b == ZERO) // Se le scadenze sono a zero, vuol dire che sono state stornate
res = rscd - rpag; // Scadenze - pagati = scaduto per questo gruppo di rate
if (rscd == ZERO) // Se le scadenze sono a zero, vuol dire che sono state stornate
res = ZERO; // da qualche nota di credito o non assegnato percio' non si ha residuo
//if (res < ZERO) // Significa che l'importo pagato e' maggiore dell'importo in scadenza
//{ // c'e' un residuo positivo, e quindi va memorizzato
// res *= -1.0; // cambia il segno
// res_pagati+= res; // Residui pagati in piu'
// res = ZERO;
// res *= -1.0;
//}
if (d > _limscad)
if (d > _limscad)
{
if (d > _limscad && d <= (TDate&)_ns_date[0])
ns1 += res;
if (d > (TDate&)_ns_date[0] && d <= (TDate&)_ns_date[1])
ns2 += res;
if (d > (TDate&)_ns_date[1] && d <= (TDate&)_ns_date[2])
ns3 += res;
if (d > (TDate&)_ns_date[2] && d <= (TDate&)_ns_date[3])
ns4 += res;
if (d > (TDate&)_ns_date[3] && d <= (TDate&)_ns_date[4])
ns5 += res;
if (d > (TDate&)_ns_date[4])
if (_nsinfasce)
{
TDate data = (TDate&) _ns_date[4];
if (data.year() != 0)
ns6 += res;
for (int i = _nsfasce + 1; i >= 0; i--)
{
const TDate & limdate = (TDate&)_ns_date[i];
if (limdate.ok() && d > limdate)
{
ns[i] += res;
break;
}
}
}
else
ns[0] += res;
}
else
{
// Detrae dal residuo scaduto eventuali pagamenti in piu' effettuati
//real gap = (res_pagati > res ? res : res_pagati);
//res -= gap;
//res_pagati -= gap;
if (_sinfasce)
{
for (int i = _sfasce + 1; i >= 0; i--)
{
const TDate & limdate = (TDate&)_s_date[i];
if (limdate.ok() && d <= limdate)
{
s[i] += res;
break;
}
}
}
else
s[0] += res;
}
if (d <= _limscad && d > (TDate&)_s_date[0])
s1 += res;
if (d <= (TDate&)_s_date[0] && d > (TDate&)_s_date[1])
s2 += res;
if (d <= (TDate&)_s_date[1] && d > (TDate&)_s_date[2])
s3 += res;
if (d <= (TDate&)_s_date[2] && d > (TDate&)_s_date[3])
s4 += res;
if (d <= (TDate&)_s_date[3] && d > (TDate&)_s_date[4])
s5 += res;
if (d <= (TDate&)_s_date[4])
s6 += res;
residuo += res;
bool sbf;
TImporto esp = rs.esposto(_stvaluta, _limscad, _limbf, sbf);
@ -354,18 +328,15 @@ void TProspettoScadenze::compute_all(TPartita& p, TBill& bill)
}
// Aggiorna i totali...
if (s1!=ZERO || s2!=ZERO || s3!=ZERO || s4!= ZERO || s5!= ZERO || s6!=ZERO ||
ns1!=ZERO || ns2!=ZERO || ns3!=ZERO || ns4!= ZERO || ns5!= ZERO || ns6!=ZERO || esposto!=ZERO)
{
update_totals(0, esposto, s1, s2, s3, s4, s5, s6, ns1, ns2, ns3, ns4, ns5, ns6); // Singolo...
update_totals(1, esposto, s1, s2, s3, s4, s5, s6, ns1, ns2, ns3, ns4, ns5, ns6); // ...Generale
}
update_totals(0, esposto, s, ns); // Singolo...
update_totals(1, esposto, s, ns); // ...Generale
}
void TProspettoScadenze::calcola_saldo()
{
TAssoc_array& a = (TAssoc_array&) _t[0];
TLineTotal *ll = (TLineTotal *) a.objptr(_codval);
TEsercizi_contabili e;
TSaldo saldo;
int g,c;
const long s = atol(_cod_pre);
@ -376,12 +347,17 @@ void TProspettoScadenze::calcola_saldo()
g = cf.get_int(0);
c = cf.get_int(1);
TToken_string key;
key.add(g); key.add(c); key.add(s);
key.add(g); key.add(c); key.add("");
const TRectype& pc = cache().get(LF_PCON, key);
int indbil_conto = pc.get_int (PCN_INDBIL);
TDate dataini = TDate(1, 1, _limop.year());
saldo.data_limite_bilancio( 1, g, c, s, dataini, _limop, indbil_conto, FALSE);
ll->_sl += saldo.saldo();
const int codes = e.date2esc(_limop);
saldo.set_annoes(codes);
TDate dataini(e.esercizio(codes).inizio());
saldo.data_limite_bilancio( 1, g, c, s, dataini, _limop, indbil_conto, false);
if (_tipost == fornitori)
ll->_sl -= saldo.saldo();
else
ll->_sl += saldo.saldo();
}
// aggiorno il totale generale
TAssoc_array& at = (TAssoc_array&) _t[1];
@ -404,9 +380,9 @@ bool TProspettoScadenze::preprocess_page(int file, int counter)
const bool checked = _m->selected(bill);
if (!checked && !_end_printed) // Se non e' stato selezionato salta al prossimo record
return FALSE;
return false;
int nriga = 1;
// int nriga = 1;
if (_tipost == clienti || _tipost == fornitori)
{
const TRectype& clifo = current_cursor()->curr(LF_CLIFO);
@ -425,51 +401,42 @@ bool TProspettoScadenze::preprocess_page(int file, int counter)
if (_cod != _cod_pre || _end_printed) // Controlla se e' cambiato il codice cli/fo/conto
{
reset_print();
if (_cod_pre != "") // stampa i totali del precedente solo se non e' la prima
{
//calcola_saldo();
TAssoc_array& sin_tot = (TAssoc_array&) _t[0];
if (sin_tot.items() > 0)
{
print_totali(nriga);
return true;
}
}
if (((TAssoc_array&) _t[0]).items() > 0)
print_totali(1);
_des.trim();
_cod_pre = _cod;
_des_pre = _des;
}
if (curr.empty()) // Attenzione: Possono succedere anche queste cose!
return FALSE;
TPartita p(curr);
if (!curr.empty())
{
TPartita p(curr);
//Pesca gli estremi dalla prima riga di fattura, che non e' necessariamente la riga #1
const int r = p.prima_fattura();
if (r <= 0)
return TRUE; // se non ci sono fatture ... salta al prossimo
//Pesca gli estremi dalla prima riga di fattura, che non e' necessariamente la riga #1
const int r = p.prima_fattura();
if (r > 0) //Skip next partita if no fatture!
{
TRiga_partite& rp = p.riga(r);
_anno = rp.get(PART_ANNO);
_anno.ltrim(2);
_numdoc = rp.get(PART_NUMDOC);
_protiva = rp.get(PART_PROTIVA);
_datadoc = (const char*) rp.get_date(PART_DATADOC);
_codval = (_stvaluta ? rp.get(PART_CODVAL): "");
if (_codval.empty()) _codval = " ";
// Now performing fulkrum...
compute_all(p, bill);
}
current_cursor()->repos(); // Very, very necessary...
if (r > 0) //Skip next partita if no fatture!
{
TRiga_partite& rp = p.riga(r);
_anno = rp.get(PART_ANNO);
_anno.ltrim(2);
_numdoc = rp.get(PART_NUMDOC);
_protiva = rp.get(PART_PROTIVA);
_datadoc = (const char*) rp.get_date(PART_DATADOC);
_codval = (_stvaluta ? rp.get(PART_CODVAL): "");
if (_codval.empty()) _codval = " ";
// Now performing fulkrum...
compute_all(p, bill);
}
current_cursor()->repos(); // Very, very necessary...
}
}
return TRUE;
return true;
}
bool TProspettoScadenze::preprocess_print(int file, int counter)
{
return TRUE;
return true;
}
print_action TProspettoScadenze::postprocess_print(int file, int counter)
@ -481,18 +448,21 @@ print_action TProspettoScadenze::postprocess_print(int file, int counter)
{
rt = REPEAT_PAGE;
_end_printed = true;
}
if (_end_printed)
{
TAssoc_array& gen_tot = (TAssoc_array&) _t[1];
if (gen_tot.items() > 0)
{
print_totali_rows(1,1);
print_one(0);
}
}
}
else
{
if (((TAssoc_array&) _t[0]).items() > 0)
{
print_totali(1);
print_one(0);
}
if (((TAssoc_array&) _t[1]).items() > 0)
{
print_totali_rows(1,1);
print_one(0);
}
}
return rt;
}
@ -517,18 +487,12 @@ bool TProspettoScadenze::user_create()
_pagsca = new TLocalisamfile(LF_PAGSCA);
_t.add(new TAssoc_array);_t.add(new TAssoc_array);
for (int i = 0; i < NUMERO_FASCE; i++)
{
_s_date.add(new TDate);
_ns_date.add(new TDate);
}
TConfig conf (CONFIG_DITTA,"cg");
_m = new TSelection_ext_mask("sc2600a");
_m->enable(F_VALUTA,conf.get_bool("GesVal"));
enable_print_menu();
return TRUE;
return true;
}
bool TProspettoScadenze::user_destroy()
@ -539,9 +503,7 @@ bool TProspettoScadenze::user_destroy()
if (_pagsca) delete _pagsca;
if (_m) delete _m;
_t.destroy();
_s_date.destroy();
_ns_date.destroy();
return TRUE;
return true;
}
void TProspettoScadenze::riempi_conti_mastro(const char cf)
@ -564,21 +526,22 @@ void TProspettoScadenze::riempi_conti_mastro(const char cf)
bool TProspettoScadenze::set_print(int)
{
const bool rt = _m->run() == K_ENTER;
if (rt)
if (_m->run() == K_ENTER)
{
reset_files();
reset_print();
printer().footerlen(5);
if (_m->get_who() == 'C')
_tipost = clienti;
else
_tipost = fornitori;
riempi_conti_mastro(_m->get_who());
if (_m->get_key() == 1)
_ordcod = TRUE;
_ordcod = true;
else
_ordcod = FALSE;
_end_printed = FALSE;
_ordcod = false;
_end_printed = false;
_gcr = _m->get_int(F_GIORNI);
_stvaluta = _m->get_bool(F_VALUTA);
_datas = (const char *)(_m->get(F_DATASTAMPA));
@ -589,6 +552,18 @@ bool TProspettoScadenze::set_print(int)
_sfasce = _m->get_int(F_SCADFASCE);
_nsinfasce = _m->get_bool(F_ASCADINFASCE);
_nsfasce = _m->get_int(F_ASCADFASCE);
_s_date.destroy();
_ns_date.destroy();
for (int i = 0; i <= NUMERO_FASCE; i++)
{
_s_date.add(new TDate);
_ns_date.add(new TDate);
}
int limiti[NUMERO_FASCE + 1] = LIMITI;
for (int j = 0; j <= _sfasce; j++)
(TDate &)_s_date[j] = _limscad - (const long) limiti[j];
for (int k = 0; k <= _nsfasce; k++)
(TDate &)_ns_date[k] = _limscad + (const long) limiti[k];
_anno.cut(0);_numdoc.cut(0);_protiva.cut(0);_datadoc.cut(0);
_codval.cut(0);_cod.cut(0); _des.cut(0); _cod_pre.cut(0);
for (int it=0; it < _t.items(); it++)
@ -597,10 +572,10 @@ bool TProspettoScadenze::set_print(int)
aa.destroy(); // Totali lineari (singolo e generale)
}
get_cursor(_cur1)->set_filterfunction(fil_function,TRUE);
get_cursor(_cur2)->set_filterfunction(fil_function,TRUE);
get_cursor(_cur3)->set_filterfunction(fil_function,TRUE);
get_cursor(_cur4)->set_filterfunction(fil_function,TRUE);
get_cursor(_cur1)->set_filterfunction(fil_function,true);
get_cursor(_cur2)->set_filterfunction(fil_function,true);
get_cursor(_cur3)->set_filterfunction(fil_function,true);
get_cursor(_cur4)->set_filterfunction(fil_function,true);
_last_game.cut(0);
TRectype filter_from(LF_PARTITE), filter_to(LF_PARTITE);
@ -627,27 +602,9 @@ bool TProspettoScadenze::set_print(int)
default: break;
} // End of inner switch
int limiti[2][NUMERO_FASCE] = LIMITI;
int row = 0;
if (_tipost == fornitori)
row = 1;
for (int j = 0; j < NUMERO_FASCE; j++)
{
long inc = (long) limiti[row][j];
TDate* d = (TDate *)_s_date.objptr(j);
if (j < _sfasce)
*d = _limscad - inc;
else
*d = NULLDATE;
TDate* dns = (TDate *)_ns_date.objptr(j);
if (j < _nsfasce)
*dns = _limscad + inc;
else
*dns = NULLDATE;
}
return true;
} // End if
return rt;
return false;
}
void TProspettoScadenze::print_totali_rows(int nriga, bool what)
@ -663,136 +620,87 @@ void TProspettoScadenze::print_totali_rows(int nriga, bool what)
{
if (!what)
calcola_saldo();
TString k(as.row(i)); // Chiave di ordinamento(valuta)
TString value;
TLineTotal& v = (TLineTotal&)xassoc[k];
real tot = ZERO;
int pos = 40;
TString rw(255);
rw = "";
if (_sinfasce)
{
if (v._s6 != ZERO)
{
print_real(value, v._s6);
rw << format("@%dg%10s", pos, (const char*) value);
}
if (_sfasce >= 5)
pos = pos + 11;
if (v._s5 != ZERO)
{
print_real(value, v._s5);
rw << format("@%dg%10s", pos, (const char*) value);
}
if (_sfasce >= 4)
pos = pos + 11;
if (v._s4 != ZERO)
{
print_real(value, v._s4);
rw << format("@%dg%10s", pos, (const char*) value);
}
if (_sfasce >= 3)
pos = pos + 11;
if (v._s3 != ZERO)
{
print_real(value, v._s3);
rw << format("@%dg%10s", pos, (const char*) value);
}
if (_sfasce >= 2)
pos = pos + 11;
if (v._s2 != ZERO)
{
print_real(value, v._s2);
rw << format("@%dg%10s", pos, (const char*) value);
}
if (_sfasce >= 1)
pos = pos + 11;
}
if (v._s1 != ZERO)
{
print_real(value, v._s1);
rw << format("@%dg%10s", pos, (const char*) value);
}
pos = pos + 11;
rw = "";
if (_sinfasce)
{
for (int i = _sfasce; i >= 0; i--)
{
if (v._s[i] != ZERO)
{
print_real(value, v._s[i]);
rw << format("@%dg%11s", pos, (const char*) value);
tot += v._s[i];
}
pos += 11;
}
}
else
{
if (v._s[0] != ZERO)
{
print_real(value, v._s[0]);
rw << format("@%dg%11s", pos, (const char*) value);
tot += v._s[0];
}
pos += 11;
}
if (_nsinfasce)
{
if (v._ns1 != ZERO)
{
print_real(value, v._ns1);
rw << format("@%dg%10s", pos, (const char*) value);
}
if (_nsfasce >= 1)
pos = pos + 11;
for (int i = 0; i <= _nsfasce; i++)
{
if (v._ns[i] != ZERO)
{
print_real(value, v._ns[i]);
rw << format("@%dg%11s", pos, (const char*) value);
tot += v._ns[i];
}
pos += 11;
}
}
else
{
if (v._ns[0] != ZERO)
{
print_real(value, v._ns[0]);
rw << format("@%dg%11s", pos, (const char*) value);
tot += v._ns[0];
}
pos += 11;
}
if (v._ns2 != ZERO)
{
print_real(value, v._ns2);
rw << format("@%dg%10s", pos, (const char*) value);
}
if (_nsfasce >= 2)
pos = pos + 11;
if (v._ns3 != ZERO)
{
print_real(value, v._ns3);
rw << format("@%dg%10s", pos, (const char*) value);
}
if (_nsfasce >= 3)
pos = pos + 11;
if (v._ns4 != ZERO)
{
print_real(value, v._ns4);
rw << format("@%dg%10s", pos, (const char*) value);
}
if (_nsfasce >= 4)
pos = pos + 11;
if (v._ns5 != ZERO)
{
print_real(value, v._ns5);
rw << format("@%dg%10s", pos, (const char*) value);
}
if (_nsfasce >= 5)
pos = pos + 11;
}
if (v._ns6 != ZERO)
{
print_real(value, v._ns6);
rw << format("@%dg%10s", pos, (const char*) value);
}
pos = pos + 11;
const real tot = v._s1+v._s2+v._s3+v._s4+v._s5+v._s6+v._ns1+v._ns2+v._ns3+v._ns4+v._ns5+v._ns6;
if (tot != ZERO)
{
print_real(value, tot);
rw << format("@%dg%10s", pos, (const char*) value);
rw << format("@%dg%11s", pos, (const char*) value);
}
pos = pos + 11;
pos += 11;
if (v._es != ZERO)
{
print_real(value, v._es);
rw << format("@%dg%10s", pos, (const char*) value);
rw << format("@%dg%11s", pos, (const char*) value);
}
pos = pos + 11;
pos += 11;
if (v._sl != ZERO)
{
print_real(value, v._sl);
rw << format("@%dg%10s", pos, (const char*) value);
rw << format("@%dg%11s", pos, (const char*) value);
}
pos = pos + 13;
pos += 11;
const real diff = v._sl + v._es - tot;
const real diff = v._sl - (tot - v._es);
if (diff != ZERO)
{
print_real(value, diff);
rw << format("@%dg%10s", pos, (const char*) value);
rw << format("@%dg%11s", pos, (const char*) value);
}
if (rw.not_empty())
@ -817,7 +725,7 @@ void TProspettoScadenze::print_totali_rows(int nriga, bool what)
xassoc.destroy(); // Distrugge il totale appena stampato
}
void TProspettoScadenze::print_totali(int& nriga)
void TProspettoScadenze::print_totali(int nriga)
{
reset_row(nriga);
print_totali_rows(nriga,0);
@ -858,53 +766,58 @@ void TProspettoScadenze::print_header()
if (_tipost==fornitori)
set_header(soh++,"@%ldg** PROSPETTO SCADENZE FORNITORI **", (last_column - 35) / 2);
set_header(soh++,"@%ldg** PREVISIONE PAGAMENTI FORNITORI **", (last_column - 37) / 2);
else
set_header(soh++,"@%ldg** PROSPETTO SCADENZE CLIENTI **", (last_column - 34) / 2);
set_header(soh++,"@%ldg** PREVISIONE INCASSI CLIENTI **", (last_column - 34) / 2);
set_header (soh++,"@%ldgAl %s - Operazioni al %s", (last_column - 40) / 2, (const char*)limscad, (const char*)limop);
meno.fill('-', last_column);
set_header(soh++,(const char *)meno);
set_header(soh,"CODICE@8gC O G N O M E E N O M E ");
int limiti[2][NUMERO_FASCE] = LIMITI;
int row = 0;
if (_tipost==fornitori)
row = 1;
int limiti[NUMERO_FASCE + 1] = LIMITI;
int pos = 40;
rw.cut(0);
if (_sinfasce)
{
for (int i = _sfasce-1; i >= 0; i--)
rw << format("@%dg >%3d gg", pos, limiti[_sfasce]);
pos += 11;
for (int i = _sfasce; i > 0; i--)
{
rw << format("@%dg%7d gg", pos, limiti[row][i] + 30);
pos = pos + 11;
rw << format("@%dg <= %3d gg", pos, limiti[i] );
pos += 11;
}
rw << format("@%dg%10s", pos, "30 gg");
set_header(soh, format("@%dg%10s", 40+((pos-40)/2), "SCADUTO"));
set_header(soh, format("@%dg%s", 40+((pos-40)/2), "SCADUTO"));
}
else
set_header(soh, format("@%dg%10s", pos, "SCADUTO"));
pos = pos + 11;
{
set_header(soh, format("@%dg%11s", pos, "SCADUTO"));
pos += 11;
}
const int pos_ascad = pos;
if (_nsinfasce)
{
for (int i = 0; i < _nsfasce; i++)
for (int i = 1; i <= _nsfasce; i++)
{
rw << format("@%dg%7d gg", pos, limiti[row][i]);
rw << format("@%dg <= %3d gg", pos, limiti[i]);
pos = pos + 11;
}
set_header(soh, format("@%dg%11s", pos_ascad+((pos-pos_ascad)/2)-5, " A SCADERE"));
rw << format("@%dg >%3d gg", pos, limiti[_nsfasce]);
pos = pos + 11;
set_header(soh, format("@%dg%s", pos_ascad+((pos-pos_ascad)/2)-5, "A SCADERE"));
}
else
set_header(soh, format("@%dg%11s", pos, " A SCADERE"));
pos = pos + 11;
set_header(soh, format("@%dg%11s", pos, " TOTALE"));
pos = pos + 11;
set_header(soh, format("@%dg%11s", pos, " ESPOSTO"));
pos = pos + 11;
set_header(soh, format("@%dg%11s", pos, " SALDO"));
pos = pos + 13;
set_header(soh, format("@%dg%11s", pos, "DIFFERENZA"));
{
set_header(soh, format("@%dg%11s", pos, "A SCADERE"));
pos += 11;
}
set_header(soh, format("@%dg%11s", pos, "TOTALE"));
pos += 11;
set_header(soh, format("@%dg%11s", pos, "ESPOSTO"));
pos += 11;
set_header(soh, format("@%dg%11s", pos, "SALDO"));
pos += 11;
set_header(soh, format("@%dg%11s", pos, " DIFFERENZA"));
set_header(++soh,(const char *)rw);
break;
}
@ -914,17 +827,23 @@ void TProspettoScadenze::print_header()
set_header(++soh, (const char *) meno);
}
void TProspettoScadenze::preprocess_footer()
{
}
int TProspettoScadenze::calc_last_column()
// Setta le righe dell'intestazione
{
int pos = 110;
if (_sinfasce)
for (int i = _sfasce-1; i >= 0; i--)
pos = pos + 11;
pos += _sfasce * 11;
else
pos += 11;
if (_nsinfasce)
for (int i = 0; i < _nsfasce; i++)
pos = pos + 11;
pos = pos + _nsfasce * 11;
else
pos += 11;
return pos;
}
@ -941,6 +860,6 @@ TProspettoScadenze::TProspettoScadenze()
int sc2600(int argc, char** argv)
{
TProspettoScadenze app;
app.run(argc, argv, "Stampa Prospetto Scadenze");
app.run(argc, argv, "Stampa Previsione Incassi/Pagamenti");
return 0;
}

View File

@ -1,6 +1,6 @@
#include "sc2600.h"
PAGE "Stampa Prospetto Scadenze" -1 -1 78 20
PAGE "Stampa Previsione Incassi/PagamentI" -1 -1 78 20
NUMBER F_CODDITTA 5
BEGIN

View File

@ -8,7 +8,8 @@ Item_02 = "Stampa scadenzario", "sc2 -1", ""
Item_03 = "Stampa scaduto", "sc2 -2", ""
Item_04 = "Stampa estratti conto", "sc2 -0", ""
Item_05 = "Stampa solleciti", "sc2 -3", ""
Item_06 = "Servizio", [SCMENU_002]
Item_06 = "Stampa Previsione Incassi/Pagamenti", "sc2 -5", ""
Item_07 = "Servizio", [SCMENU_002]
[SCMENU_002]
Caption = "Servizio"

View File

@ -476,6 +476,7 @@ const wxString& TBaseServerApp::GetConfigName() const
(wxString&)m_strIni = name.GetFullPath();
}
return m_strIni;
}
void TBaseServerApp::SetConfigString(const wxChar* key, const wxChar* val, const wxChar* app) const
@ -509,7 +510,7 @@ wxString TBaseServerApp::GetConfigString(const wxChar* key, const wxChar* def, c
int TBaseServerApp::GetConfigInt(const wxChar* key, int def, const wxChar* app) const
{
const wxString str = GetConfigString(key, "*", app);
const wxString str = GetConfigString(key, "*", app);
return str != "*" ? atoi(str) : def;
}
@ -518,7 +519,8 @@ bool TBaseServerApp::GetConfigBool(const wxChar* key, bool def, const wxChar* ap
bool val = def;
const wxString str = GetConfigString(key, "*", app);
if (str != "*")
val = (str[0u] == '1') || (str[0u] == 'X') || (str[0u] == 'Y') || (str.CmpNoCase("On")==0);
val = (str[0u] == '1') || (str[0u] == 'X') || (str[0u] == 'Y') || (str.CmpNoCase("On")==0);
return val;
}
@ -687,4 +689,3 @@ int TBaseServerApp::ParseArguments(wxString args, THashTable& hashArgs) const
}
return hashArgs.GetCount();
}

View File

@ -178,10 +178,7 @@ wxDateTime julian2date(long julian)
m = m + 2 - 12 * x;
y = 100 * (z - 49) + y + x;
wxDateTime date;
date.SetYear(y);
date.SetMonth((wxDateTime::Month)m);
date.SetDay(d);
wxDateTime date(d, wxDateTime::Month(m-1), y);
return date;
}

View File

@ -37,7 +37,7 @@ BEGIN
FLAGS "U"
USE PSV
INPUT CODTAB F_CODICE
DISPLAY "Codice" CODTAB
DISPLAY "Codice@20" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODICE CODTAB
OUTPUT F_DESCR S0
@ -55,7 +55,7 @@ BEGIN
USE PSV KEY 2
INPUT S0 F_DESCR
DISPLAY "Descrizione@60" S0
DISPLAY "Codice" CODTAB
DISPLAY "Codice@20" CODTAB
COPY OUTPUT F_CODICE
CHECKTYPE NORMAL
ADD RUN SV0 -0 PSV

View File

@ -1,3 +1,3 @@
34
0
$rdoc|21|21|473|31|Righe documenti di vendita|NDOC*3||
$rdoc|||513|31|Righe documenti di vendita|NDOC*3||

View File

@ -1,5 +1,6 @@
34
53
55
CODNUM|1|4|0|Codice Numeriazione
ANNO|2|4|0|Anno
PROVV|1|1|0|Tipo numerazione <P>rovvisoria <D>efinitiva
@ -53,7 +54,10 @@ DAIDRIGA|3|6|0|Identificatore riga originale
CODCMS|1|20|0|Codice Commessa
FASCMS|1|10|0|Fase Commessa
CODCOSTO|1|20|0|Centro di costo
CODAGG1|1|20|0|Codice aggiuntivo 1
CODAGG2|1|20|0|Codice aggiuntivo 2
7
CODNUM+ANNO+PROVV+NDOC+NRIGA|
CODNUM+ANNO+PROVV+CODART+LIVELLO+CODMAG|X
PROVV+ANNO+CODNUM+NDOC+NRIGA|X

View File

@ -26,8 +26,8 @@ class TMotore_application : public TRelation_application
// puntatore alla relazione
TRelation * _rel;
TString16 _codnum;
TString16 _tipodoc;
TString4 _codnum;
TString4 _tipodoc;
TString80 __last_key;
// Array di maschere documento

View File

@ -379,5 +379,12 @@ BEGIN
GROUP 7
END
BOOLEAN F_ESPONIESENTI
BEGIN
PROMPT 1 17 "Esponi i clienti esenti"
FIELD ESPONIESENTI
GROUP 7
END
ENDPAGE
ENDMASK

View File

@ -3,10 +3,10 @@ TIPORIGA|2|2|Tipo riga|2
CODMAG[1,3]|2|3|Mag. |3
CODMAG[4,5]|2|2|Dep.|2
CODART|2|20|Codice Articolo|20
CODG1|2|15|Codice\nLivello 1|15
CODG2|2|15|Codice\nLivello 2|15
CODG3|2|15|Codice\nLivello 3|15
CODG4|2|15|Codice\nLivello 4|15
CODG1|2|9|Codice\nLivello 1|9
CODG2|2|9|Codice\nLivello 2|9
CODG3|2|9|Codice\nLivello 3|9
CODG4|2|9|Codice\nLivello 4|9
DESCR|2|50|Descrizione|50
UMQTA|2|2|UM|2
QTA|3|1305|Quantita'|11
@ -37,15 +37,5 @@ QTAGG4|3|1305|Quantita'\nagg. 4|13
QTAGG5|3|1305|Quantita'\nagg. 5|13
IMPIANTO|2|5|Impianto|8
LINEA|2|5|Linea|5
CDC1|2|20|Centro di costo 1|20
CDC2|2|20|Centro di costo 2|20
CDC3|2|20|Centro di costo 3|20
CDC4|2|20|Centro di costo 4|20
CDC5|2|20|Centro di costo 5|20
CDC6|2|20|Centro di costo 6|20
CDC7|2|20|Centro di costo 7|20
CDC8|2|20|Centro di costo 8|20
CDC9|2|20|Centro di costo 9|20
CDC10|2|20|Centro di costo 10|20
CDC11|2|20|Centro di costo 11|20
CDC12|2|20|Centro di costo 12|20
CODCMS|2|20|Codice\ncommessa|20
FASCMS|2|10|Fase\ncommessa|10

View File

@ -3,6 +3,8 @@
//////////////////////////////////////////////////////////////
#include <applicat.h>
#include <config.h>
#include <defmask.h>
#include <postman.h>
#include <printer.h>
@ -2058,4 +2060,4 @@ int ve1100(int argc, char* argv[])
const bool riep = argc == 4 && argv[2][0] == 'L'; // Lista documenti
a.run(argc, argv, riep ? TR("Lista documenti") : TR("Stampa documenti"));
return 0;
}
}

View File

@ -14,6 +14,7 @@
#include <cfven.h>
#include <comuni.h>
#include <nditte.h>
#include <multirel.h>
///////////////////////////////////////////////////////////
// TDoc_recordset
@ -87,16 +88,12 @@ const TVariant& TDoc_recordset::get(int logic, const char* field) const
if (logic == 0 || logic == LF_DOC)
{
const TFieldref ref(field, LF_DOC);
TVariant& tmp = get_tmp_var();
tmp.set(ref.read(*_doc));
return tmp;
return get_tmp_var() = ref.read(*_doc);
} else
if (logic == LF_RIGHEDOC)
{
const TFieldref ref(field, LF_RIGHEDOC);
TVariant& tmp = get_tmp_var();
tmp.set(ref.read(riga_doc()));
return tmp;
return get_tmp_var() = ref.read(riga_doc());
}
return TISAM_recordset::get(logic, field);
}
@ -111,7 +108,7 @@ TDoc_recordset::TDoc_recordset(const TRecordset& doc, const TString& query)
for (int i = 0; i < 2; i++)
{
const char* key[] = { DOC_PROVV, DOC_ANNO, DOC_CODNUM, DOC_NDOC };
TString80 filter = (i == 1) ? "FROM " : "TO ";
TString80 filter = (i == 0) ? "FROM " : "TO ";
for (int k = 0; k < 4; k++)
{
const TString& val = doc.get(key[k]).as_string();
@ -182,7 +179,7 @@ protected:
int set_printed_status(TDocumento& doc) const;
public:
bool print(const TRecordset& doc, TReport_book& book, bool def);
bool print(const TRecordset& doc, TReport_book& book, bool def, int copies, bool alleg);
TReport_doc(const char* name);
virtual ~TReport_doc();
@ -238,19 +235,89 @@ int TReport_doc::set_printed_status(TDocumento& doc) const
return err;
}
bool TReport_doc::print(const TRecordset& doc, TReport_book& book, bool def)
bool TReport_doc::print(const TRecordset& doc, TReport_book& book, bool definitive, int copie, bool can_allegate)
{
const TString old_query = recordset()->query_text();
TDoc_recordset* rs = new TDoc_recordset(doc, old_query);
set_recordset(rs);
const bool ok = book.add(*this, false);
if (ok && def)
bool printed = false;
for (int c = 1; c <= copie; c++)
{
// Tenta di stampare gli allegati solo sull'ultima copia definitiva
if (c == copie && can_allegate)
{
const TDocumento& d = rs->doc();
const TTipo_documento& tipodoc = d.tipo();
if (tipodoc.allega_documenti())
{
const long codcf = d.get_long(CLI_CODCF);
TString_array allegati;
for (bool ok = rs->move_first(); ok; ok = rs->move_next())
{
const TString& codart = rs->get(LF_RIGHEDOC, RDOC_CODARTMAG).as_string();
const TRectype& anamag = cache().get(LF_ANAMAG, codart);
TToken_string golem(anamag.get(ANAMAG_GOLEM), '\n');
if (!golem.empty_items())
{
TToken_string key;
key.add(d.get(DOC_PROVV));
key.add(d.get(DOC_ANNO));
key.add(d.get(DOC_CODNUM));
key.add(d.get(DOC_NDOC));
TLocalisamfile alleg(LF_MULTIREL);
alleg.put(MULTI_COD, "ALLEG");
alleg.put(MULTI_FIRST, codcf);
alleg.put(MULTI_SECOND, codart);
alleg.put(MULTI_DATA, key);
bool print_alleg = alleg.write() == NOERR; // Se riesco a scrivere vuol dire che non esisteva
if (!print_alleg)
{
alleg.put(MULTI_COD, "ALLEG");
alleg.put(MULTI_FIRST, codcf);
alleg.put(MULTI_SECOND, codart);
if (alleg.read() == NOERR)
print_alleg = alleg.get(MULTI_DATA) == key;
}
if (print_alleg)
{
FOR_EACH_TOKEN(golem, allegato)
{
TToken_string a(allegato);
TFilename name = a.get();
const bool link = a.get_char(2) > ' ';
if (!link)
{
TFilename golem_path = firm2dir(prefix().get_codditta());
golem_path.add("golem");
golem_path.add(name.name());
name = golem_path;
}
if (name.exist())
allegati.add(name);
}
}
}
}
set_allegates(allegati);
}
}
printed = book.add(*this, false);
if (!printed)
break;
}
if (printed && definitive)
set_printed_status(rs->doc());
set_recordset(old_query);
return ok;
return printed;
}
TDocumentoEsteso& TReport_doc::doc()
@ -269,8 +336,8 @@ bool TReport_doc::msg_cliente(TVariant_stack& stack)
{
TReport_field& cf = *curr_field();
TCli_for& cli_for = doc().clifor();
TOccasionale& cli_occ = doc().occas();
const TCli_for& cli_for = doc().clifor();
const TOccasionale& cli_occ = doc().occas();
const bool occasionale = cli_for.occasionale();
TString in = stack.pop().as_string(); // prende la macro o il fieldref
@ -781,8 +848,8 @@ bool TReport_doc_app::print_loop(const TString& query)
return false;
bool is_definitive = false;
if (argc() >= 6) // Batch
is_definitive = *argv(6) == 'D';
if (argc() > 7) // Batch
is_definitive = *argv(7) == 'D';
else
{
const KEY k = yesnocancel_box(FR("Stampare in definitiva %d documenti?"), docs);
@ -797,19 +864,39 @@ bool TReport_doc_app::print_loop(const TString& query)
TProgind pi(docs, TR("Elaborazione documenti..."), true, true);
for (int i = 0; i < docs; i++)
{
pi.addstatus(1);
if (pi.iscancelled())
if (!pi.addstatus(1))
break;
doc.move_to(i);
const TString& tipodoc = doc.get(DOC_TIPODOC).as_string();
const TTipo_documento& tipo = _tipi_cache.tipo(tipodoc);
TFilename profilo;
if (tipo.main_print_profile(profilo) && profilo.ends_with(".rep"))
TString16 codprof(tipo.main_print_profile());
codprof.trim();
if (codprof.not_empty())
{
TReport_doc& report = reports.get(profilo);
if (!report.print(doc, book, is_definitive))
break;
TFilename profilo(codprof); profilo.ext("rep");
if (profilo.custom_path()) // Tenta di costruirsi il nome del report
{
int copies = _msk->get_int(F_NCOPIE);
if (copies <= 0 && is_definitive)
copies = tipo.ncopie();
if (copies <= 0)
copies = 1;
TReport_doc& report = reports.get(profilo);
if (!report.print(doc, book, is_definitive, copies, true))
break;
}
else
{
TString msg; msg << TR("Report inesistente") << " : " << codprof;
statbar_set_title(TASK_WIN, msg);
continue;
}
}
else
{
@ -820,13 +907,32 @@ bool TReport_doc_app::print_loop(const TString& query)
}
// Stampa eventuali allegati
if (tipo.additional_print_profile(profilo) && profilo.ends_with(".rep"))
TString16 codalleg = tipo.additional_print_profile();
codalleg.trim();
if (codalleg.not_empty())
{
TReport_doc& allegato = reports.get(profilo);
allegato.print(doc, book, is_definitive);
TFilename profilo(codalleg); profilo.ext("rep");
if (profilo.custom_path())
{
int copies = tipo.additional_ncopie();
if (copies <= 0) copies = 1;
TReport_doc& allegato = reports.get(profilo);
// Il flag di definitvo deve essere false altrimenti riaggiorna lo stato e ristampa i documenti allegati
allegato.print(doc, book, false, copies, false);
}
else
{
TString msg; msg << TR("Report allegato inesistente") << " : " << codalleg;
statbar_set_title(TASK_WIN, msg);
}
}
}
if (book.pages() > 0)
book.print_or_preview();
@ -844,16 +950,16 @@ void TReport_doc_app::print_selection()
void TReport_doc_app::main_loop()
{
if (argc() >= 6) // Stampa da riga di comando
if (argc() > 6) // Stampa da riga di comando
{
_msk->set(F_DATA_O_NUM, "N"); // Stampa per numero documento
_msk->set(F_PROVV, argv(4));
_msk->set(F_ANNO, argv(3));
_msk->set(F_CODNUM, argv(2));
_msk->set(F_DA_NDOC, argv(5));
_msk->set(F_A_NDOC, argv(5));
if (argc() >= 8)
_msk->set(F_NCOPIE, argv(7)); // Numero copie
_msk->set(F_A_NDOC, argv(6));
// argv(7) = stampa Definitiva o Provvisaoria
if (argc() > 8) _msk->set(F_NCOPIE, argv(8)); // Numero copie
print_selection();
}
else
@ -868,4 +974,4 @@ int ve1300(int argc, char* argv[])
TReport_doc_app a;
a.run(argc, argv, TR("Stampa documenti"));
return (0);
}
}

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