This commit was manufactured by cvs2svn to create branch 'R_10_00'.

git-svn-id: svn://10.65.10.50/branches/R_10_00@21308 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
(no author) 2010-12-15 10:09:40 +00:00
parent 3336074cde
commit a9ae94d684
11 changed files with 1233 additions and 0 deletions

72
cg/cg2105.h Executable file
View File

@ -0,0 +1,72 @@
#ifndef __CG2105_H__
#define __CG2105_H__
#ifndef __CGSALDAC_H__
#include "../cg/cgsaldac.h"
#endif
#ifndef __AUTOMASK_H__
#include <automask.h>
#endif
class TNew_mask : public TAutomask
{
bool _allow_fatt;
protected:
virtual bool on_field_event(TOperable_field& f, TField_event e, long jolly);
public:
void init(char tipocf, bool fatt, bool edit);
TNew_mask(char tipocf, bool fatt, bool edit);
};
class TGame_mask;
class TPay_mask : public TMask
{
TDate _datadoc, _datarat;
real _da_pagare, _pagabile;
#ifndef __EXTRA__
const TGame_mask* _parent;
#endif
tipo_movimento _tipomov;
bool _assigned;
bool _can_solder;
bool _swap_ritsoc;
protected:
static bool importo_handler(TMask_field& f, KEY k);
static bool importolire_handler(TMask_field& f, KEY k);
static bool saldo_handler(TMask_field& f, KEY k);
static bool datapag_handler(TMask_field& f, KEY k);
static bool conto_handler(TMask_field& f, KEY k);
static bool descr_handler(TMask_field& f, KEY k);
void gioca_cambi(int force = 0x0);
#ifdef __EXTRA__
static bool datareg_handler(TMask_field& f, KEY k);
static bool datadoc_handler(TMask_field& f, KEY k);
static bool numdoc_handler(TMask_field& f, KEY k);
static bool sezione_handler(TMask_field& f, KEY k);
#endif
public:
void set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, const TImporto& importo);
void get_pag(TRectype& oldpag, TRectype& somma) const;
bool assigned() const { return _assigned; }
bool unassigned() const { return !_assigned; }
tipo_movimento tipo() const { return _tipomov; }
void attiva_valuta(bool on);
void init(const TGame_mask* parent, int mode);
TPay_mask(const TGame_mask* parent, int mode);
virtual ~TPay_mask();
};
#endif

16
ps/ps1002.cpp Executable file
View File

@ -0,0 +1,16 @@
#include <xvt.h>
#include "ps1002.h"
int main(int argc, char** argv)
{
int n = argc > 1 ? atoi(argv[1]+1) : 0;
switch(n)
{
case 0: ps1002100(argc, argv); break; //gestione rapida(?) delle righe documento Euroforesi
default:
ps1002100(argc, argv); break;
}
exit(0);
return 0;
}

1
ps/ps1002.h Executable file
View File

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

450
ps/ps1002100.cpp Executable file
View File

@ -0,0 +1,450 @@
#include <applicat.h>
#include <automask.h>
#include <defmask.h>
#include <progind.h>
#include <recarray.h>
#include <recset.h>
#include "../ve/condv.h"
#include "../ve/rcondv.h"
#include "../ve/velib.h"
#include "ps1002.h"
#include "ps1002100a.h"
class TDoc_cache : public TCache
{
TString4 _codnum, _tipodoc;
int _anno;
long _codcf;
TDate _data;
protected:
virtual void discarding(const THash_object* obj);
virtual TObject* key2obj(const char* key);
public:
TDocumento& doc(const TToken_string& kdoc);
TDoc_cache(const char* codnum, const char* tipodoc, const TDate& datadoc, const long codcf);
};
//DISCARDING: salva un documento sul disco prima di eliminarlo dalla cache
void TDoc_cache::discarding(const THash_object* obj)
{
TDocumento& doc = (TDocumento&)obj->obj();
int err = doc.rewrite();
}
//KEY2OBJ:sceglie il documento giusto da disco in modo da poterlo continuare, o lo crea se non c'è
TObject* TDoc_cache::key2obj(const char* key)
{
TDocumento* doc = NULL;
TToken_string chiave(key);
const char provv = chiave.get(0)[0];
const int anno = chiave.get_int(1);
const TString& codnum = chiave.get(2);
const long ndoc = chiave.get_long(3);
doc = new TDocumento(provv, anno, codnum, ndoc);
if (ndoc <= 0)
{
doc->put(DOC_PROVV, 'D');
doc->put(DOC_ANNO, _anno);
doc->put(DOC_CODNUM, _codnum);
doc->put(DOC_NDOC, 0);
doc->put(DOC_TIPODOC, _tipodoc);
doc->put(DOC_STATO, 1);
doc->put(DOC_DATADOC, _data);
doc->put(DOC_TIPOCF, 'C');
doc->put(DOC_CODCF, _codcf);
}
return doc;
}
//DOC: restituisce un puntatore ad un documento identificato dalla chiave documento completa
TDocumento& TDoc_cache::doc(const TToken_string& kdoc)
{
return *(TDocumento*)objptr(kdoc);
}
//metodo costruttore di una cache di 20 elementi
TDoc_cache::TDoc_cache(const char* codnum, const char* tipodoc, const TDate& datadoc, const long codcf) : TCache(13)
{
_codnum = codnum;
_tipodoc = tipodoc;
_anno = datadoc.year();
_data = datadoc;
_codcf = codcf;
}
///////////////////////////////////////////////////////////
// TAutomask
///////////////////////////////////////////////////////////
class TEdit_rdocs_mask : public TAutomask
{
int _pos_art, _pos_desc, _pos_um, _pos_qta, _pos_qtaev, _pos_prz, _pos_iva, _pos_lav, _pos_col,
_pos_dtprd, _pos_qtaprd, _pos_num, _pos_anno, _pos_provv, _pos_ndoc, _pos_nrig, _pos_desiva;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void fill_sheet();
void save_sheet();
const TString4 find_um(const TString& codart) const;
real find_prezzo_articolo(const TString& codart) const;
public:
TEdit_rdocs_mask();
~TEdit_rdocs_mask() {};
};
TEdit_rdocs_mask::TEdit_rdocs_mask() : TAutomask ("ps1002100a")
{
//assegna le posizioni delle colonne dello sheet
TSheet_field& sf_righe = sfield(F_RIGHE);
_pos_art = sf_righe.cid2index(S_CODART);
_pos_desc = sf_righe.cid2index(S_DESCR);
_pos_um = sf_righe.cid2index(S_UM);
_pos_qta = sf_righe.cid2index(S_QTA);
_pos_qtaev = sf_righe.cid2index(S_QTAEVASA);
_pos_prz = sf_righe.cid2index(S_PREZZO);
_pos_iva = sf_righe.cid2index(S_CODIVA);
_pos_lav = sf_righe.cid2index(S_LAV);
_pos_col = sf_righe.cid2index(S_COLORE);
_pos_dtprd = sf_righe.cid2index(S_DATAPROD);
_pos_qtaprd = sf_righe.cid2index(S_QTAPROD);
_pos_num = sf_righe.cid2index(S_CODNUM);
_pos_anno = sf_righe.cid2index(S_ANNO);
_pos_provv = sf_righe.cid2index(S_PROVV);
_pos_ndoc = sf_righe.cid2index(S_NDOC);
_pos_nrig = sf_righe.cid2index(S_NRIGA);
_pos_desiva = sf_righe.cid2index(S_DESIVA);
}
bool TEdit_rdocs_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
//maschera principale
case F_RIGHE:
if (e == se_notify_add) //righe aggiunte
{
TToken_string& riga_sheet = sfield(o.dlg()).row(jolly); //riga nuova dello sheet
const TString& codnum = get(F_CODNUM);
riga_sheet.add(codnum, _pos_num);
const int anno = get_int(F_ANNO);
riga_sheet.add(anno, _pos_anno);
riga_sheet.add('D', _pos_provv);
}
if (e == se_query_del) //righe da eliminare
{
//solo le righe senza NDOC ed NRIGA possono essere eliminate!
TToken_string& riga_sheet = sfield(o.dlg()).row(jolly);
const long ndoc = riga_sheet.get_long(_pos_ndoc);
const int nriga = riga_sheet.get_int(_pos_nrig);
return ndoc == 0L || nriga == 0;
}
break;
//maschera di sheet
case S_CODART:
if (e == fe_modify)
{
//al cambio articolo deve proporre il codiva, la um, il prezzo
const TString& codart = o.get();
const TString& um = find_um(codart);
o.mask().set(S_UM, um);
const TString& codiva = cache().get(LF_ANAMAG, codart, ANAMAG_CODIVA);
o.mask().set(S_CODIVA, codiva);
const real prezzo = find_prezzo_articolo(codart);
o.mask().set(S_PREZZO, prezzo);
}
break;
//bottoni
case DLG_SELECT: //carica i record nello sheet in base al filtro di testata
if (e == fe_button)
{
if (check_fields())
{
disable(-1);
enable(-2);
fill_sheet();
}
}
break;
case DLG_CANCEL:
if (e == fe_button && jolly == 0)
{
disable(-2);
enable(-1);
sfield(F_RIGHE).destroy();
return false;
}
break;
case DLG_SAVEREC:
if (e == fe_button)
{
save_sheet();
fill_sheet();
}
break;
default:
break;
}
return true;
}
//cerca la um standard del codart
const TString4 TEdit_rdocs_mask::find_um(const TString& codart) const
{
TToken_string key_umart;
key_umart.add(codart);
key_umart.add(1);
const TRectype& rec_umart = cache().get(LF_UMART, key_umart);
const TString4 um = rec_umart.get(UMART_UM);
return um;
}
//cerca prezzo in: contratto->listino->anamag
real TEdit_rdocs_mask::find_prezzo_articolo(const TString& codart) const
{
const long codcf = get_long(F_CODCF);
const TDate data_new_doc = get_date(F_DATADOC);
real prezzo = ZERO;
//0) anagrafica articolo (umart): mal che vada proporrà questa; va vergognosamente messa all'inizio e non alla fine..
//..perchè serve unità di misura un pò dappertutto
TToken_string key_umart;
key_umart.add(codart);
key_umart.add(1);
const TRectype& rec_umart = cache().get(LF_UMART, key_umart);
const TString4 um = rec_umart.get(UMART_UM);
const real umart_prezzo = rec_umart.get_real(UMART_PREZZO);
//1) contratto
//CONTRATTI: tipo=C|catven=|tipocf=C|codcf=codcf|cod=codcontr|tiporiga=A|codriga=codart|um=um
TString query_contr;
query_contr << "USE CONDV";
query_contr << "\nFROM TIPO=C TIPOCF=C CODCF=#CODCF";
query_contr << "\nTO TIPO=C TIPOCF=C CODCF=#CODCF";
TISAM_recordset recset_contr(query_contr);
recset_contr.set_var("#CODCF", codcf);
const long recset_contr_items = recset_contr.items();
//deve cercare un contratto in essere per la data del documento (in teoria ce ne dovrebbe essere 1 solo, oppure nessuno)
for (bool ok = recset_contr.move_first(); ok; ok = recset_contr.move_next())
{
const TDate dataini_c = recset_contr.get(CONDV_VALIN).as_date();
TDate datafin_c = recset_contr.get(CONDV_VALFIN).as_date();
if (!datafin_c.ok())
datafin_c = data_new_doc;
if (dataini_c <= data_new_doc && datafin_c >= data_new_doc)
{
TString4 codcontr = recset_contr.get(CONDV_COD).as_string();
//per um è necessario se il contratto scelto ha la gestione delle um accesa (tanto per complicarsi la vita)
const bool gestum_contr = recset_contr.get(CONDV_GESTUM).as_string() == "X";
TToken_string key_contr;
key_contr.add("C");
key_contr.add("");
key_contr.add("C");
key_contr.add(codcf);
key_contr.add("A");
key_contr.add(codart);
if (gestum_contr)
key_contr.add(um);
const TRectype& rec_contratto = cache().get(LF_RCONDV, key_contr);
const real contratto_prezzo = rec_contratto.get_real(RCONDV_PREZZO);
if (!contratto_prezzo.is_zero())
{
prezzo = contratto_prezzo;
break;
}
} //if (dataini_c <= data_new_doc...
} //for (bool ok = recset_contr.move_first()...
//se non ha trovato il prezzo sul contratto -> passa ai listini
//2) listino
//LISTINI: tipo=L|catven=catven|tipocf=|codcf=|cod=codlis|tiporiga=A|codriga=codart|um=um
if (prezzo.is_zero())
{
TString query_list;
query_list << "USE CONDV";
query_list << "\nFROM TIPO=L";
query_list << "\nTO TIPO=L";
TISAM_recordset recset_list(query_list);
const long recset_list_items = recset_list.items();
for (bool ok = recset_list.move_first(); ok; ok = recset_list.move_next())
{
const TDate dataini_l = recset_list.get(CONDV_VALIN).as_date();
TDate datafin_l = recset_list.get(CONDV_VALFIN).as_date();
if (!datafin_l.ok())
datafin_l = data_new_doc;
if (dataini_l <= data_new_doc && datafin_l >= data_new_doc)
{
TString4 codlist = recset_list.get(CONDV_COD).as_string();
const bool gestum_list = recset_list.get(CONDV_GESTUM).as_string() == "X";
TToken_string key_list;
key_list.add("L");
//la catven se c'è è del cliente
TToken_string key_cfven;
key_cfven.add("C");
key_cfven.add(codcf);
const TString& catven = cache().get(LF_CFVEN, key_cfven, CFV_CATVEN);
key_list.add(catven);
key_list.add("");
key_list.add("");
key_list.add(codlist);
key_list.add("A");
key_list.add(codart);
if (gestum_list)
key_list.add(um);
const TRectype& rec_listino = cache().get(LF_RCONDV, key_list);
const real listino_prezzo = rec_listino.get_real(RCONDV_PREZZO);
if (!listino_prezzo.is_zero())
{
prezzo = listino_prezzo;
break;
}
} //if (dataini_l <= data_new_doc...
} //for (bool ok = recset_list.move_first()...
} //if (prezzo.is_zero())...
//3) umart
if (prezzo.is_zero())
prezzo = umart_prezzo; //mal che vada sarà il prezzo di umart
return prezzo;
}
//riempie lo sheet in base ai parametri di testata
void TEdit_rdocs_mask::fill_sheet()
{
//recordset con tutti i documenti non evasi nell'anno per il cliente selezionato
TString query;
query << "USE DOC KEY 2";
query << "\nSELECT (CODNUM=#CODNUM)&&(DOCEVASO!=\"X\")";
query << "\nFROM TIPOCF=C CODCF=#CODCF PROVV=D ANNO=#ANNO";
query << "\nTO TIPOCF=C CODCF=#CODCF PROVV=D ANNO=#ANNO";
TISAM_recordset recset(query);
recset.set_var("#CODCF", get_long(F_CODCF));
recset.set_var("#CODNUM", get(F_CODNUM));
recset.set_var("#ANNO", get(F_ANNO));
const long items = recset.items();
const TRectype& rec = recset.cursor()->curr();
TSheet_field& sf_righe = sfield(F_RIGHE);
sf_righe.destroy();
TProgind pi(items, TR("Caricamento documenti in corso..."), true, true);
int k = 0;
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
if (!pi.addstatus(1))
break;
//per ogni documento prende le sole righe non evase e le carica sullo sheet
TDocumento doc(rec);
FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc)
{
if (!rdoc->is_evasa() && rdoc->is_evadibile())
{
sf_righe.autoload_line(++k, *rdoc); //aggiunge una riga nuova riempiendola con tutti i campi che hanno FIELD nella maschera
}
}
}
sf_righe.force_update();
}
//salva losheet con eventuali modifiche e nuove righe
void TEdit_rdocs_mask::save_sheet()
{
const TString& codnum = get(F_CODNUM);
const TString& tipodoc = get(F_TIPODOC);
const TDate datadoc = get_date(F_DATADOC);
const long codcf = get_long(F_CODCF);
TDoc_cache doc_cache(codnum, tipodoc, datadoc, codcf);
TSheet_field& sf_righe = sfield(F_RIGHE);
FOR_EACH_SHEET_ROW(sf_righe, r, row)
{
TToken_string key;
key.add(row->get(_pos_provv));
key.add(row->get(_pos_anno));
key.add(row->get(_pos_num));
key.add(row->get(_pos_ndoc));
int nriga = row->get_int(_pos_nrig);
TDocumento& curr_doc = doc_cache.doc(key);
if (nriga <= 0)
{
const TRiga_documento& rdoc = curr_doc.new_row("01"); //solo righe merce sono aggiungibili
nriga = rdoc.get_int(RDOC_NRIGA);
row->add(curr_doc.get_long(DOC_NDOC), _pos_ndoc);
row->add(nriga, _pos_nrig);
}
sf_righe.autosave_line(r + 1, curr_doc[nriga]); //salva maggicamente la riga nuova
}
doc_cache.destroy();
}
///////////////////////////////////////
// TSkeleton_application
///////////////////////////////////////
class TEdit_rdocs : public TSkeleton_application
{
protected:
virtual bool check_autorization() const { return false; }
virtual const char* extra_modules() const { return "ve"; }
virtual void main_loop();
virtual bool create();
};
void TEdit_rdocs::main_loop()
{
TEdit_rdocs_mask mask;
mask.run();
}
bool TEdit_rdocs::create()
{
open_files(LF_DOC, LF_RIGHEDOC, 0);
return TSkeleton_application::create();
}
int ps1002100 (int argc, char* argv[])
{
TEdit_rdocs main_app;
main_app.run(argc, argv, TR("Gestione righe per cliente"));
return true;
}

33
ps/ps1002100a.h Executable file
View File

@ -0,0 +1,33 @@
//campi maschera normale
#define F_CODCF 201
#define F_RAGSOC 202
#define F_CODNUM 203
#define F_DESNUM 204
#define F_ANNO 205
#define F_TIPODOC 206
#define F_DESTIPO 207
#define F_DATADOC 208
#define F_RIGHE 220
//campi sheet F_RIGHE
#define S_NDOC 101
#define S_NRIGA 102
#define S_CODART 103
#define S_DESCR 104
#define S_UM 105
#define S_QTA 106
#define S_QTAEVASA 107
#define S_PREZZO 108
#define S_CODIVA 109
#define S_LAV 110
#define S_COLORE 111
#define S_DATAPROD 112
#define S_QTAPROD 113
#define S_CODNUM 114
#define S_ANNO 115
#define S_PROVV 116
#define S_DESIVA 207

336
ps/ps1002100a.uml Executable file
View File

@ -0,0 +1,336 @@
#include "ps1002100a.h"
TOOLBAR "" 0 0 0 2
BUTTON DLG_SELECT 2 2
BEGIN
PROMPT 1 1 "~Carica"
PICTURE TOOL_MULTISEL
GROUP 1
END
BUTTON DLG_SAVEREC 2 2
BEGIN
PROMPT 2 2 "~Salva"
PICTURE TOOL_SAVEREC
GROUP 2
END
#include <cancelbar.h>
ENDPAGE
PAGE "Produttivita' giornaliera" 0 2 0 0
GROUPBOX DLG_NULL 76 7
BEGIN
PROMPT 0 0 "@bParametri documenti"
END
NUMBER F_CODCF 6
BEGIN
PROMPT 1 1 "Cliente "
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_CODCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Partita IVA@12" PAIV
DISPLAY "Sospeso" SOSPESO
OUTPUT F_CODCF CODCF
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
FLAGS "R"
WARNING "Cliente assente"
GROUP 1
END
STRING F_RAGSOC 50
BEGIN
PROMPT 23 1 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOC
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Partita IVA@12" PAIV
DISPLAY "Sospeso" SOSPESO
COPY OUTPUT F_CODCF
CHECKTYPE NORMAL
GROUP 1
END
STRING F_CODNUM 4
BEGIN
PROMPT 1 2 "Numerazione "
USE %NUM
INPUT CODTAB F_CODNUM
DISPLAY "Codice@8" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODNUM CODTAB
OUTPUT F_DESNUM S0
CHECKTYPE REQUIRED
FLAGS "U"
GROUP 1
END
STRING F_DESNUM 50
BEGIN
PROMPT 23 2 ""
USE %NUM KEY 2
INPUT S0 F_DESNUM
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@8" CODTAB
COPY OUTPUT F_CODNUM
CHECKTYPE NORMAL
GROUP 1
END
NUMBER F_ANNO 4
BEGIN
PROMPT 1 3 "Anno "
FLAGS "A"
CHECKTYPE REQUIRED
GROUP 1
END
TEXT DLG_NULL
BEGIN
PROMPT 1 4 "Parametri degli eventuali documenti da creare"
END
STRING F_TIPODOC 4
BEGIN
PROMPT 1 5 "Tipo doc. "
USE %TIP
INPUT CODTAB F_TIPODOC
DISPLAY "Codice@8" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_TIPODOC CODTAB
OUTPUT F_DESTIPO S0
CHECKTYPE REQUIRED
FLAGS "UP"
GROUP 1
END
STRING F_DESTIPO 50 33
BEGIN
PROMPT 23 5 ""
USE %TIP KEY 2
INPUT S0 F_DESTIPO
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@8" CODTAB
COPY OUTPUT F_TIPODOC
CHECKTYPE NORMAL
GROUP 1
END
DATA F_DATADOC
BEGIN
PROMPT 59 5 "Data "
FLAGS "A"
END
SPREADSHEET F_RIGHE
BEGIN
PROMPT 1 8 "Righe documento"
ITEM "N. doc."
ITEM "N. riga"
ITEM "Codice articolo@20"
ITEM "Descrizione articolo@50"
ITEM "UM"
ITEM "Quantita@15"
ITEM "Qta evasa@13"
ITEM "Prezzo@18"
ITEM "IVA@4"
ITEM "Lav@3"
ITEM "Colore"
ITEM "Data Prod."
ITEM "Qta prod.@15"
ITEM "Num."
ITEM "Anno"
ITEM "P/D"
GROUP 2
END
ENDPAGE
ENDMASK
//---------------------------------------------------
//maschera di riga dello sheet (righe documenti)
PAGE "Riga" -1 -1 78 14
STRING S_CODART 20
BEGIN
PROMPT 1 1 "Articolo "
USE LF_ANAMAG
INPUT CODART S_CODART
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT S_CODART CODART
OUTPUT S_DESCR DESCR
WARNING "Articolo assente"
FLAGS "U"
CHECKTYPE REQUIRED
FIELD CODART
END
STRING S_DESCR 50 40
BEGIN
PROMPT 35 1 ""
USE LF_ANAMAG KEY 2
INPUT DESCR S_DESCR
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@20" CODART
COPY OUTPUT S_CODART
CHECKTYPE NORMAL
FIELD DESCR
END
STRING S_UM 2
BEGIN
PROMPT 1 2 "U.M. "
USE LF_UMART KEY 2
JOIN %UMS INTO CODTAB=UM
INPUT CODART S_CODART SELECT
INPUT UM S_UM
DISPLAY "Codice@20" UM
DISPLAY "Descrizione@50" %UMS->S0
OUTPUT S_UM UM
FLAGS "U"
CHECKTYPE REQUIRED
FIELD UMQTA
END
NUMBER S_QTA 15 5
BEGIN
PROMPT 1 3 "Quantita "
FIELD QTA
END
NUMBER S_QTAEVASA 13 5
BEGIN
PROMPT 1 4 "Qta evasa "
FIELD QTAEVASA
END
CURRENCY S_PREZZO
BEGIN
PROMPT 1 5 "Prezzo "
FLAGS "U"
FIELD PREZZO
END
STRING S_CODIVA 4
BEGIN
PROMPT 1 6 "Cod. IVA "
USE %IVA
INPUT CODTAB S_CODIVA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT S_CODIVA CODTAB
OUTPUT S_DESIVA S0
CHECKTYPE REQUIRED
FIELD CODIVA
END
STRING S_DESIVA 50
BEGIN
PROMPT 20 6 ""
USE %IVA KEY 2
INPUT S0 S_DESIVA
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT S_CODIVA
CHECKTYPE NORMAL
END
STRING S_LAV 20
BEGIN
PROMPT 1 7 "Lavoraz. "
FIELD CODCMS
END
STRING S_COLORE 20
BEGIN
PROMPT 1 8 "Colore "
FIELD FASCMS
END
DATA S_DATAPROD
BEGIN
PROMPT 1 9 "Data prod "
FIELD DATACONS
END
NUMBER S_QTAPROD 13 5
BEGIN
PROMPT 1 10 "Qta prod "
FIELD QTAGG1
END
GROUPBOX DLG_NULL 76 3
BEGIN
PROMPT 1 11 "@bChiave riga"
END
STRING S_CODNUM 4
BEGIN
PROMPT 2 12 "Num. "
FLAGS "D"
FIELD CODNUM
END
NUMBER S_ANNO 4
BEGIN
PROMPT 13 12 "Anno "
FLAGS "D"
FIELD ANNO
END
STRING S_PROVV 1
BEGIN
PROMPT 24 12 "P "
FLAGS "D"
FIELD PROVV
END
NUMBER S_NDOC 7
BEGIN
PROMPT 29 12 "N.doc. "
FLAGS "D"
FIELD NDOC
END
NUMBER S_NRIGA 3
BEGIN
PROMPT 46 12 "N.Riga "
FLAGS "D"
FIELD NRIGA
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_DELREC 2 2
BEGIN
PROMPT 2 1 ""
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 3 1 ""
END
ENDPAGE
ENDMASK

7
ps/ps1002_prod_gca.h Executable file
View File

@ -0,0 +1,7 @@
//campi maschera report ps1002_prod_gca
#define F_CODNUM 201
#define F_DESNUM 202
#define F_ANNO 203
#define F_DADATA 204
#define F_ADATA 205

98
ps/ps1002_prod_gca.rep Executable file
View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report name="ps1002_prod_gca" lpi="6">
<description>Produzione giorno-cliente-articolo</description>
<font face="Arial" size="8" />
<section type="Head" pattern="1">
<font italic="1" face="Arial" bold="1" size="8" />
<field x="1" y="0.25" type="Testo" bg_color="#000000" txt_color="#FFFFFF" width="6" pattern="2" text="Data" />
<field x="1" y="1.5" type="Testo" align="right" width="6" pattern="1" text="Cliente" />
<field x="65" y="1.5" type="Testo" align="right" width="6" height="2" pattern="1" text="Qta Prod." />
<field x="3" y="2.5" type="Testo" width="10" pattern="1" text="Articolo" />
<field x="56" y="2.5" type="Testo" align="right" width="6" pattern="1" text="Prezzo" />
<field x="76" y="2.5" type="Testo" align="right" width="6" pattern="1" text="Valore" />
<field border="2" x="1" y="3.5" type="Linea" width="100" height="0" pattern="1" />
</section>
<section type="Head" level="1" pattern="1">
<prescript description="H1 PRESCRIPT">MESSAGE RESET,F1.104
MESSAGE RESET,F1.105</prescript>
<field border="2" radius="100" x="15" y="0.5" type="Testo" valign="center" align="center" shade_offset="50" width="60" height="2" pattern="2" text="PRODUTTIVITA' GIORNALIERA">
<font face="Arial" bold="1" size="14" />
</field>
</section>
<section type="Head" level="2" page_break="1" pattern="1">
<groupby>DATACONS</groupby>
<font italic="1" face="Arial" bold="1" size="8" />
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2.104
MESSAGE RESET,F2.105</prescript>
<field x="1" y="0.25" type="Data" bg_color="#000000" txt_color="#FFFFFF" width="10" id="101" pattern="2">
<source>DATACONS</source>
<postscript description="H2.101 POSTSCRIPT">MESSAGE COPY,F2.101</postscript>
</field>
</section>
<section type="Head" level="3" pattern="1">
<groupby>DOC.TIPOCF+DOC.CODCF</groupby>
<font face="Arial" bold="1" size="8" />
<prescript description="H3 PRESCRIPT">MESSAGE RESET,F3.104
MESSAGE RESET,F3.105</prescript>
<field x="1" type="Numero" align="right" width="6" pattern="1">
<source>33.CODCF</source>
</field>
<field x="8" type="Stringa" width="50" pattern="1">
<prescript description="H3.0 PRESCRIPT">MESSAGE ISAMREAD,20,TIPOCF=33.TIPOCF!CODCF=33.CODCF,RAGSOC</prescript>
</field>
</section>
<section type="Body" pattern="1" />
<section type="Body" level="1" pattern="1">
<field x="3" type="Stringa" width="20" pattern="1">
<source>CODART</source>
</field>
<field x="23" type="Stringa" width="30" pattern="1">
<font face="Arial Narrow" size="7" />
<source>DESCR</source>
</field>
<field x="54" type="Prezzo" align="right" width="8" id="103" pattern="1" text="#########,@@">
<font face="Arial Narrow" size="8" />
<source>PREZZO</source>
</field>
<field x="65" type="Numero" align="right" width="6" id="104" pattern="1">
<source>QTAGG1</source>
<prescript description="B1.104 PRESCRIPT">MESSAGE ADD,F3.104
MESSAGE ADD,F2.104
MESSAGE ADD,F1.104</prescript>
</field>
<field x="72" type="Prezzo" align="right" width="10" id="105" pattern="1" text="#########,@@">
<source>#103*#104</source>
<prescript description="B1.105 PRESCRIPT">MESSAGE ADD,F3.105
MESSAGE ADD,F2.105
MESSAGE ADD,F1.105</prescript>
</field>
</section>
<section type="Foot" pattern="1" />
<section type="Foot" level="1" pattern="1">
<font face="Arial" bold="1" size="8" />
<field border="2" x="1" y="1" type="Linea" width="100" height="0" pattern="1" />
<field x="1" y="1.25" type="Testo" bg_color="#C0C0C0" width="63" pattern="2" text="TOTALE NEL PERIODO SELEZIONATO" />
<field x="64" y="1.25" type="Numero" align="right" bg_color="#C0C0C0" width="7" id="104" pattern="2" />
<field x="71" y="1.25" type="Prezzo" align="right" bg_color="#C0C0C0" width="11" id="105" pattern="2" text="#########,@@" />
</section>
<section type="Foot" level="2" pattern="1">
<font italic="1" face="Arial" bold="1" size="8" />
<field border="2" y="0.25" type="Linea" width="100" height="0" pattern="1" />
<field x="1" y="0.5" type="Testo" bg_color="#000000" txt_color="#FFFFFF" width="15" pattern="2" text="Totale in data" />
<field x="16" y="0.5" type="Data" bg_color="#000000" txt_color="#FFFFFF" width="10" id="101" pattern="2" />
<field x="64" y="0.75" type="Numero" align="right" width="7" id="104" pattern="1" />
<field x="71" y="0.75" type="Prezzo" align="right" width="11" id="105" pattern="1" text="#########,@@" />
</section>
<section type="Foot" level="3" pattern="1">
<font face="Arial" bold="1" size="8" />
<field border="1" x="1" y="0.25" type="Linea" width="100" height="0" pattern="1" />
<field x="64" y="0.5" type="Numero" align="right" width="7" id="104" pattern="1" />
<field x="71" y="0.5" type="Prezzo" align="right" width="11" id="105" pattern="1" text="#########,@@" />
</section>
<sql>USE RDOC
SELECT (BETWEEN(DATACONS,#DADATA,#ADATA))&#26;&#26;(33.TIPOCF="C")
BY DATACONS 33.CODCF CODART
JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC
FROM CODNUM=#CODNUM ANNO=#ANNO PROVV=D
TO CODNUM=#CODNUM ANNO=#ANNO PROVV=D</sql>
</report>

60
ps/ps1002_prod_gca.uml Executable file
View File

@ -0,0 +1,60 @@
#include "ps1002_prod_gca.h"
PAGE "Produzione giornaliera" -1 -1 78 5
STRING F_CODNUM 4
BEGIN
PROMPT 1 1 "Numerazione "
USE %NUM
INPUT CODTAB F_CODNUM
DISPLAY "Codice@8" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODNUM CODTAB
OUTPUT F_DESNUM S0
CHECKTYPE REQUIRED
FLAGS "U"
FIELD #CODNUM
END
STRING F_DESNUM 50
BEGIN
PROMPT 23 1 ""
USE %NUM KEY 2
INPUT S0 F_DESNUM
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@8" CODTAB
COPY OUTPUT F_CODNUM
CHECKTYPE NORMAL
END
NUMBER F_ANNO 4
BEGIN
PROMPT 1 2 "Anno "
FLAGS "A"
CHECKTYPE REQUIRED
FIELD #ANNO
END
DATA F_DADATA
BEGIN
PROMPT 1 3 "Dalla data "
FLAGS "A"
CHECKTYPE REQUIRED
FIELD DADATA
END
DATA F_ADATA
BEGIN
PROMPT 30 3 "Alla data "
FLAGS "A"
CHECKTYPE REQUIRED
FIELD ADATA
END
ENDPAGE
TOOLBAR "" 0 0 0 2
#include <printbar.h>
ENDPAGE
ENDMASK

5
sc/sc0200b.h Executable file
View File

@ -0,0 +1,5 @@
#include "sc0100a.h"
#define F_TUTTE 201
#define F_CODVAL 202
#define F_PARTITE 203

155
sc/sc0200b.uml Executable file
View File

@ -0,0 +1,155 @@
#include "sc0200b.h"
TOOLBAR "" 0 0 0 2
BUTTON DLG_EDIT 2 2
BEGIN
PROMPT 1 1 "Modifica"
PICTURE TOOL_EDIT
END
BUTTON DLG_NEWREC 2 2
BEGIN
PROMPT 2 1 "Nuovo"
PICTURE TOOL_NEWREC
END
#include <helpbar.h>
ENDPAGE
PAGE "Gestione partite" 0 0 0 0
LIST F_TIPO 1 10
BEGIN
PROMPT 1 0 "Tipo conto "
ITEM "|Conto"
MESSAGE SHOW,1@|HIDE,2@|HIDE,3@
ITEM "C|Cliente"
MESSAGE HIDE,1@|SHOW,2@|HIDE,3@
ITEM "F|Fornitore"
MESSAGE HIDE,1@|HIDE,2@|SHOW,3@
FLAGS "DG"
END
NUMBER F_GRUPPO 3
BEGIN
PROMPT 27 0 "Gruppo "
FLAGS "D"
END
NUMBER F_CONTO 3
BEGIN
PROMPT 41 0 "Conto "
FLAGS "D"
END
NUMBER F_SOTTOCONTO 6
BEGIN
PROMPT 54 0 "Sottoconto "
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_GRUPPO
INPUT CONTO F_CONTO
INPUT SOTTOCONTO F_SOTTOCONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GRUPPO GRUPPO
OUTPUT F_CONTO CONTO
OUTPUT F_SOTTOCONTO SOTTOCONTO
OUTPUT F_DESCR DESCR
GROUP 1
CHECKTYPE REQUIRED
FLAGS "D"
END
NUMBER F_CLIENTE 6
BEGIN
PROMPT 54 0 "Cliente "
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_CLIENTE
DISPLAY "Cliente" CODCF
DISPLAY "Descrizione@50" RAGSOC
OUTPUT F_CLIENTE CODCF
OUTPUT F_DESCRCLI RAGSOC
ADD RUN cg0 -1 C
GROUP 2
CHECKTYPE REQUIRED
FLAGS "D"
END
NUMBER F_FORNITORE 6
BEGIN
PROMPT 54 0 "Fornitore "
USE LF_CLIFO
INPUT TIPOCF "F"
INPUT CODCF F_FORNITORE
DISPLAY "Fornitore" CODCF
DISPLAY "Descrizione@50" RAGSOC
OUTPUT F_FORNITORE CODCF
OUTPUT F_DESCRFOR RAGSOC
ADD RUN cg0 -1 F
GROUP 3
CHECKTYPE REQUIRED
FLAGS "D"
END
STRING F_DESCR 50 58
BEGIN
PROMPT 1 1 "Descrizione "
GROUP 1
FLAGS "D"
END
STRING F_DESCRCLI 50 58
BEGIN
PROMPT 1 1 "Descrizione "
GROUP 2
FLAGS "D"
END
STRING F_DESCRFOR 50 58
BEGIN
PROMPT 1 1 "Descrizione "
GROUP 3
FLAGS "D"
END
RADIOBUTTON F_TUTTE 1 38
BEGIN
PROMPT 1 2 "Mostra partite"
ITEM "1|Aperte"
ITEM "2|Chiuse"
ITEM "3|Tutte"
FLAGS "Z"
END
STRING F_CODVAL 4
BEGIN
PROMPT 60 3 "Valuta "
USE %VAL
INPUT CODTAB F_CODVAL
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODVAL CODTAB
CHECKTYPE NORMAL
END
TLIST F_PARTITE -3 -1
BEGIN
PROMPT 0 5 ""
DISPLAY "Partita@35" DESCR
DISPLAY "Docum.@8" NUMDOC
DISPLAY "Data@10R" DATADOC
DISPLAY "Dare@15R" DARE
DISPLAY "Avere@15R" AVERE
DISPLAY "Abbuoni@15R" ABBUONI
DISPLAY "Diff. Cambio@15R" DIFFCAM
DISPLAY "Ritenute fiscali@15R" RITENUTE
DISPLAY "Ritenute sociali@15R" RITSOC
DISPLAY "P.N." NREG
END
ENDMASK