Patch level : 10.0
Files correlati : lv0.exe Ricompilazione Demo : [ ] Commento : Implemetata generazione prossimo codice per tutte le tabelle con codice numerico Semplificarta lettura scrittura tabella passaggi planning git-svn-id: svn://10.65.10.50/trunk@17228 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d2c61a322c
commit
7702fd3969
@ -30,6 +30,7 @@ class TLV_table_app : public TTable_module_application
|
|||||||
{
|
{
|
||||||
protected: // TRelation_application
|
protected: // TRelation_application
|
||||||
virtual TMask* user_create_mask();
|
virtual TMask* user_create_mask();
|
||||||
|
virtual bool get_next_key(TToken_string& key);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
};
|
};
|
||||||
@ -45,6 +46,24 @@ TMask* TLV_table_app::user_create_mask()
|
|||||||
return TTable_module_application::user_create_mask();
|
return TTable_module_application::user_create_mask();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cerca di generare automaticamente la prossima chiave numerica di una tabella
|
||||||
|
bool TLV_table_app::get_next_key(TToken_string& key)
|
||||||
|
{
|
||||||
|
// Controlla se il campo COTDAB e' numerico
|
||||||
|
TMask& msk = curr_mask();
|
||||||
|
TMask_field* keyfield = msk.find_by_fieldname("CODTAB");
|
||||||
|
if (keyfield != NULL && keyfield->is_kind_of(CLASS_REAL_FIELD))
|
||||||
|
{
|
||||||
|
long num = 1;
|
||||||
|
TLocalisamfile& tab = get_relation()->lfile();
|
||||||
|
if (tab.last() == NOERR) // Cerca l'eventuale ultimo record della tabella
|
||||||
|
num += tab.get_long("CODTAB");
|
||||||
|
// Costrusci la chiave formattata alla giusta lunghezza del campo, es: "101|0003"
|
||||||
|
key.format("%d|%0*ld", keyfield->dlg(), keyfield->size(), num);
|
||||||
|
}
|
||||||
|
return key.full(); // Ritorna true se la procedura e' riuscita
|
||||||
|
}
|
||||||
|
|
||||||
int lv0100(int argc, char* argv[])
|
int lv0100(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
TLV_table_app a;
|
TLV_table_app a;
|
||||||
|
265
lv/lv0500.cpp
265
lv/lv0500.cpp
@ -1,4 +1,5 @@
|
|||||||
#include <automask.h>
|
#include <automask.h>
|
||||||
|
#include <recarray.h>
|
||||||
#include <relapp.h>
|
#include <relapp.h>
|
||||||
#include <progind.h>
|
#include <progind.h>
|
||||||
#include <reputils.h>
|
#include <reputils.h>
|
||||||
@ -18,7 +19,6 @@ class TPass_plan_contr_mask : public TAutomask
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
void proponi_orario();
|
void proponi_orario();
|
||||||
void nuovo_persosp();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||||
@ -35,40 +35,6 @@ void TPass_plan_contr_mask::proponi_orario()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//questa funzione viene richiamata ogni volta che si aggiunge una riga allo sheet dei periodi di sospensione...
|
|
||||||
//...e propone il codice del periodo in automatico
|
|
||||||
void TPass_plan_contr_mask::nuovo_persosp()
|
|
||||||
{
|
|
||||||
//recupero il codcf e il codcont dalla maschera
|
|
||||||
const long codcli = get_long(F_CODCF);
|
|
||||||
const long codcont = get_long(F_CODCONT);
|
|
||||||
int codper; //codice periodo di sospensione
|
|
||||||
|
|
||||||
//variabili per lavorare sullo sheet
|
|
||||||
TSheet_field& sheet = sfield(F_PERSOSP);
|
|
||||||
TToken_string& rigamodificata = sheet.row(sheet.items()-1);
|
|
||||||
|
|
||||||
//se è la prima riga che inserisco, cerco l'ultimo CODPER per la coppia...
|
|
||||||
//...cliente - contratto sulla tabella, e lo incremento di 1
|
|
||||||
if (sheet.items()==1)
|
|
||||||
{
|
|
||||||
TISAM_recordset psosp("USE LVPERISOSP\n FROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT");
|
|
||||||
psosp.set_var("#CODCF",codcli);
|
|
||||||
psosp.set_var("#CODCONT",codcont);
|
|
||||||
|
|
||||||
psosp.move_last();
|
|
||||||
codper = psosp.get("LVPERISOSP_CODPER").as_int()+1;
|
|
||||||
}
|
|
||||||
else //se esistono già altre righe, prendo il codice dalla riga precedente, e lo incremento di 1
|
|
||||||
{
|
|
||||||
TToken_string& rigaprecedente = sheet.row(sheet.items()-2);
|
|
||||||
codper = rigaprecedente.get_int(sheet.cid2index(F_S_CODPER))+1;
|
|
||||||
}
|
|
||||||
rigamodificata.add(codper,sheet.cid2index(F_S_CODPER)); //metto in codper nella posizione giusta sulla TToken_string
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TPass_plan_contr_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
bool TPass_plan_contr_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
{
|
{
|
||||||
switch (o.dlg())
|
switch (o.dlg())
|
||||||
@ -78,20 +44,13 @@ bool TPass_plan_contr_mask::on_field_event(TOperable_field& o, TField_event e, l
|
|||||||
{
|
{
|
||||||
case se_notify_add:
|
case se_notify_add:
|
||||||
proponi_orario();
|
proponi_orario();
|
||||||
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
case F_PERSOSP:
|
|
||||||
switch (e)
|
|
||||||
{
|
|
||||||
case se_notify_add: //se si aggiunge una riga nuova allo sheet
|
|
||||||
nuovo_persosp();
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,16 +70,9 @@ class TPass_plan_contr : public TRelation_application
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void fill_pasplan(const long codcli, const long codcont); //riempie i passaggi planning per contratto
|
void fill_pasplan(const long codcli, const long codcont); //riempie i passaggi planning per contratto
|
||||||
void fill_persosp(const long codcli, const long codcont); //riempie i periodi di sospensione
|
|
||||||
|
|
||||||
int find_pass(TSheet_field& s,const int ggcons, const int coditi) const; //controlla se esiste una passaggio
|
int find_pass(TSheet_field& s,const int ggcons, const int coditi) const; //controlla se esiste una passaggio
|
||||||
int find_sosp(TSheet_field& s,const int codper) const; //controlla se esiste un periodo di sospensione
|
|
||||||
|
|
||||||
int write_pasplan(TSheet_field& pasplan, const long codcli, const long codcont); //scrive i passaggi planning per contratto
|
int write_pasplan(TSheet_field& pasplan, const long codcli, const long codcont); //scrive i passaggi planning per contratto
|
||||||
int write_persosp(TSheet_field& persosp, const long codcli, const long codcont); //scrive i periodi di sospensione
|
int remove_pasplan(const long codcli, const long codcont); //cancella i passaggi planning per contratto
|
||||||
|
|
||||||
int remove_pasplan(TSheet_field& pasplan, const long codcli, const long codcont); //cancella i passaggi planning per contratto
|
|
||||||
int remove_persosp(TSheet_field& persosp, const long codcli, const long codcont); //cancella i periodi di sospensionE
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void init_query_mode(TMask& m);
|
virtual void init_query_mode(TMask& m);
|
||||||
@ -194,56 +146,21 @@ void TPass_plan_contr::fill_pasplan(const long codcli,const long codcont)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//FILL_PERSOSP: questa funzione riempie lo sheet dei periodi di sospensione, recuperando eventualmente i dati già inseriti...
|
|
||||||
//...nella tabella dei periodi di sospensione (LVPERISOSP) per la coppia cliente - contratto selezionata
|
|
||||||
void TPass_plan_contr::fill_persosp(const long codcli,const long codcont)
|
|
||||||
{
|
|
||||||
//preparo il recordset su LVPERISOSP
|
|
||||||
TISAM_recordset psosp("USE LVPERISOSP\n FROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT");
|
|
||||||
psosp.set_var("#CODCF",codcli);
|
|
||||||
psosp.set_var("#CODCONT",codcont);
|
|
||||||
|
|
||||||
TProgind pi(psosp.items(), TR("Elaborazione dati periodi di sospensione in corso..."), true, true);
|
|
||||||
|
|
||||||
TSheet_field& sheet = _mask->sfield(F_PERSOSP);
|
|
||||||
TMask& sheetmask = sheet.sheet_mask();
|
|
||||||
TRelation& rel = *psosp.cursor()->relation(); //accesso al file delle righe
|
|
||||||
|
|
||||||
sheet.destroy();
|
|
||||||
|
|
||||||
for (bool ok = psosp.move_first(); ok; ok = psosp.move_next())
|
|
||||||
{
|
|
||||||
if (!pi.addstatus(1))
|
|
||||||
break;
|
|
||||||
|
|
||||||
TToken_string& row = sheet.row(-1); //crea una nuova riga dello sheet
|
|
||||||
|
|
||||||
//scandisco nella maschera tutti i campi che hanno un field
|
|
||||||
FOR_EACH_MASK_FIELD(sheetmask,i,f)
|
|
||||||
{
|
|
||||||
const TFieldref* fr = f->field(); //leggo il valore dalla relation
|
|
||||||
if (fr != NULL)
|
|
||||||
row.add(fr->read(rel),sheet.cid2index(f->dlg())); //metto il valore letto nella posizione corretta nella TToken_string
|
|
||||||
}
|
|
||||||
sheet.check_row(sheet.items()-1); //fa fare alla maschera la decodifica dei codici e aggiorna la TToken_string
|
|
||||||
}
|
|
||||||
sheet.force_update(); //forza l'update dello sheet, in modo da rendere visibili i cambiamneti fatti
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//READ: ridefinizione metodo read() delle TRelation
|
//READ: ridefinizione metodo read() delle TRelation
|
||||||
int TPass_plan_contr::read(TMask& m)
|
int TPass_plan_contr::read(TMask& m)
|
||||||
{
|
{
|
||||||
//i due campi di testata DEVONO essere pieni tutte e due
|
//i due campi di testata DEVONO essere pieni tutte e due
|
||||||
if (_mask->field(F_CODCF).empty() || _mask->field(F_CODCONT).empty())
|
if (m.field(F_CODCF).empty() || m.field(F_CODCONT).empty())
|
||||||
return !NOERR;
|
return !NOERR;
|
||||||
|
|
||||||
//recupero i dati della testata
|
//recupero i dati della testata
|
||||||
const long codcli = _mask->get_long(F_CODCF);
|
const long codcli = m.get_long(F_CODCF);
|
||||||
const long codcont = _mask->get_long(F_CODCONT);
|
const long codcont = m.get_long(F_CODCONT);
|
||||||
|
|
||||||
fill_pasplan(codcli,codcont);
|
fill_pasplan(codcli,codcont);
|
||||||
fill_persosp(codcli,codcont);
|
|
||||||
|
TSheet_field& ps = m.sfield(F_PERSOSP);
|
||||||
|
ps.record()->read(*ps.putkey(*_rel));
|
||||||
|
ps.autoload(*_rel);
|
||||||
|
|
||||||
return NOERR;
|
return NOERR;
|
||||||
}
|
}
|
||||||
@ -272,24 +189,6 @@ int TPass_plan_contr::find_pass(TSheet_field& s,const int ggcons, const int codi
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIND_SOSP: questa funziona controlla se un periodo di sospensione che esiste sul file,
|
|
||||||
//esiste ancora sullo sheet (se non esiste è stato cancellato)
|
|
||||||
int TPass_plan_contr::find_sosp(TSheet_field& s,const int codper) const
|
|
||||||
{
|
|
||||||
int r=-1;
|
|
||||||
|
|
||||||
//per ogni riga dello sheet, leggi codice del periodo di sospensione,
|
|
||||||
//e se esiste interrompi restituendo un valore positivo,
|
|
||||||
//se no arriva fino in fondo e resituisci -1
|
|
||||||
for (r=s.items()-1;r>=0;r--)
|
|
||||||
{
|
|
||||||
const int cp = s.row(r).get_int(s.cid2index(F_S_CODPER));
|
|
||||||
|
|
||||||
if (codper == cp)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
//WRITE_PASPLAN: questa funzione scrive i dati sul file 164 (LVPASPLAN)
|
//WRITE_PASPLAN: questa funzione scrive i dati sul file 164 (LVPASPLAN)
|
||||||
int TPass_plan_contr::write_pasplan(TSheet_field& pasplan, const long codcli, const long codcont)
|
int TPass_plan_contr::write_pasplan(TSheet_field& pasplan, const long codcli, const long codcont)
|
||||||
@ -352,123 +251,50 @@ int TPass_plan_contr::write_pasplan(TSheet_field& pasplan, const long codcli, co
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
//WRITE_PERSOSP: questa funzione scrive i dati sul file 165 (LVPERISOSP)
|
|
||||||
int TPass_plan_contr::write_persosp(TSheet_field& persosp, const long codcli, const long codcont)
|
|
||||||
{
|
|
||||||
if (_mask->field(F_CODCF).empty() || _mask->field(F_CODCONT).empty())
|
|
||||||
return !NOERR;
|
|
||||||
|
|
||||||
//instanzio un TISAM_recordset
|
|
||||||
TISAM_recordset psosp("USE LVPERISOSP\n FROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT");
|
|
||||||
psosp.set_var("#CODCF",codcli);
|
|
||||||
psosp.set_var("#CODCONT",codcont);
|
|
||||||
|
|
||||||
int err = NOERR;
|
|
||||||
|
|
||||||
//instanzio un TLocalisamfile
|
|
||||||
TLocalisamfile& file = psosp.cursor()->file();
|
|
||||||
|
|
||||||
//per ogni riga del recordset
|
|
||||||
for (bool ok=psosp.move_first(); ok; ok=psosp.move_next())
|
|
||||||
{
|
|
||||||
//leggo il codice del periodo di sospensione
|
|
||||||
const int sosp = psosp.get(LVPERISOSP_CODPER).as_int();
|
|
||||||
|
|
||||||
//tutte le righe del TISAM_recordset che NON SONO nel TRecord_array vanno eliminate dal file
|
|
||||||
if (find_sosp(persosp,sosp) < 0)
|
|
||||||
file.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
//creo un TRectype
|
|
||||||
TRectype& rec = file.curr();
|
|
||||||
|
|
||||||
//Maschera di sheet
|
|
||||||
TMask& msk = persosp.sheet_mask();
|
|
||||||
|
|
||||||
//per ogni riga dello sheet
|
|
||||||
FOR_EACH_SHEET_ROW(persosp,r,row)
|
|
||||||
{
|
|
||||||
//azzero il record
|
|
||||||
rec.zero();
|
|
||||||
//putto nel record codcli e codcont (sempre gli stessi)
|
|
||||||
rec.put(LVPERISOSP_CODCF,codcli);
|
|
||||||
rec.put(LVPERISOSP_CODCONT,codcont);
|
|
||||||
|
|
||||||
//per ogni campo della mashera di sheet
|
|
||||||
FOR_EACH_MASK_FIELD(msk,i,f)
|
|
||||||
{
|
|
||||||
//prendo il FIELD a cui si riferiscono
|
|
||||||
const TFieldref* fr = f->field();
|
|
||||||
|
|
||||||
//se efftivamente il campo ha un field di riferimento
|
|
||||||
if (fr!= NULL)
|
|
||||||
{
|
|
||||||
const char* field = fr->name(); //salvo il nome del campo
|
|
||||||
const int pos = persosp.cid2index(f->dlg()); //salvo la sua posizione all'inetrno dello sheet
|
|
||||||
rec.put(field,row->get(pos)); //putto il suo valore nel record che sto costruendo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//setto le informazioni di creazione e/o aggiornamento del record
|
|
||||||
if (_mask->edit_mode())
|
|
||||||
lv_set_update_info(rec);
|
|
||||||
else
|
|
||||||
lv_set_creation_info(rec);
|
|
||||||
|
|
||||||
err = file.rewrite_write(); //o faccio la rewrite, o faccio la write
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
//WRITE: ridefinizione metodo write delle TRelation
|
//WRITE: ridefinizione metodo write delle TRelation
|
||||||
int TPass_plan_contr::write(const TMask& m)
|
int TPass_plan_contr::write(const TMask& m)
|
||||||
{
|
{
|
||||||
if (_mask->field(F_CODCF).empty() || _mask->field(F_CODCONT).empty())
|
if (_mask->field(F_CODCF).empty() || _mask->field(F_CODCONT).empty())
|
||||||
return !NOERR;
|
return _isnocurkey;
|
||||||
|
|
||||||
const long codcli = _mask->get_long(F_CODCF);
|
const long codcli = _mask->get_long(F_CODCF);
|
||||||
const long codcont = _mask->get_long(F_CODCONT);
|
const long codcont = _mask->get_long(F_CODCONT);
|
||||||
|
|
||||||
int err_1;
|
int err_1 = NOERR;
|
||||||
int err_2;
|
|
||||||
|
|
||||||
//variabili per lavorare sugli sheet
|
//variabili per lavorare sugli sheet
|
||||||
TSheet_field& pasplan = _mask->sfield(F_PASPLAN);
|
TSheet_field& pasplan = _mask->sfield(F_PASPLAN);
|
||||||
TSheet_field& persosp = _mask->sfield(F_PERSOSP);
|
|
||||||
|
|
||||||
if (pasplan.items() > 0)
|
if (pasplan.items() > 0)
|
||||||
err_1 = write_pasplan(pasplan,codcli,codcont);
|
err_1 = write_pasplan(pasplan,codcli,codcont);
|
||||||
|
|
||||||
if (persosp.items() > 0)
|
TSheet_field& ps = m.sfield(F_PERSOSP);
|
||||||
err_2 = write_persosp(persosp,codcli,codcont);
|
ps.autosave(*get_relation());
|
||||||
|
ps.record()->write(false);
|
||||||
|
|
||||||
return err_1 && err_2;
|
return err_1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//ridefinizione metodo rewrite delle TRelation
|
//ridefinizione metodo rewrite delle TRelation
|
||||||
int TPass_plan_contr::rewrite(const TMask& m)
|
int TPass_plan_contr::rewrite(const TMask& m)
|
||||||
{
|
{
|
||||||
if (_mask->field(F_CODCF).empty() || _mask->field(F_CODCONT).empty())
|
if (_mask->field(F_CODCF).empty() || _mask->field(F_CODCONT).empty())
|
||||||
return !NOERR;
|
return _isnocurkey;
|
||||||
|
|
||||||
const long codcli = _mask->get_long(F_CODCF);
|
const long codcli = _mask->get_long(F_CODCF);
|
||||||
const long codcont = _mask->get_long(F_CODCONT);
|
const long codcont = _mask->get_long(F_CODCONT);
|
||||||
|
|
||||||
int err_1;
|
int err_1 = NOERR;
|
||||||
int err_2;
|
|
||||||
|
|
||||||
//variabili per lavorare sugli sheet
|
//variabili per lavorare sugli sheet
|
||||||
TSheet_field& pasplan = _mask->sfield(F_PASPLAN);
|
TSheet_field& pasplan = _mask->sfield(F_PASPLAN);
|
||||||
TSheet_field& persosp = _mask->sfield(F_PERSOSP);
|
|
||||||
|
|
||||||
if (pasplan.items() > 0)
|
if (pasplan.items() > 0)
|
||||||
err_1 = write_pasplan(pasplan,codcli,codcont);
|
err_1 = write_pasplan(pasplan,codcli,codcont);
|
||||||
|
|
||||||
if (persosp.items() > 0)
|
TSheet_field& ps = m.sfield(F_PERSOSP);
|
||||||
err_2 = write_persosp(persosp,codcli,codcont);
|
ps.autosave(*_rel);
|
||||||
|
ps.record()->write(true);
|
||||||
|
|
||||||
return err_1 && err_2;
|
return err_1;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
@ -476,7 +302,7 @@ int TPass_plan_contr::rewrite(const TMask& m)
|
|||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
|
|
||||||
//REMOVE_PASPLAN: elimina tutte le righe dei passaggi per la coppia cliente - contratto selezionata
|
//REMOVE_PASPLAN: elimina tutte le righe dei passaggi per la coppia cliente - contratto selezionata
|
||||||
int TPass_plan_contr::remove_pasplan(TSheet_field& pasplan, const long codcli, const long codcont)
|
int TPass_plan_contr::remove_pasplan(const long codcli, const long codcont)
|
||||||
{
|
{
|
||||||
//instanzio un TISAM_recordset
|
//instanzio un TISAM_recordset
|
||||||
TISAM_recordset pplan("USE LVPASPLAN\n FROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT");
|
TISAM_recordset pplan("USE LVPASPLAN\n FROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT");
|
||||||
@ -489,54 +315,23 @@ int TPass_plan_contr::remove_pasplan(TSheet_field& pasplan, const long codcli, c
|
|||||||
|
|
||||||
//instanzio un TLocalisamfile
|
//instanzio un TLocalisamfile
|
||||||
TLocalisamfile& file = pplan.cursor()->file();
|
TLocalisamfile& file = pplan.cursor()->file();
|
||||||
|
|
||||||
//per ogni riga del recordset
|
//per ogni riga del recordset
|
||||||
for (bool ok=pplan.move_first(); ok; ok=pplan.move_next())
|
for (bool ok=pplan.move_first(); ok && err == NOERR; ok=pplan.move_next())
|
||||||
{
|
|
||||||
err = file.remove();
|
err = file.remove();
|
||||||
}
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
//REMOVE_PERSOSP: elimina tutte le righe dei periodi di sospensione per la coppia cliente - contratto selezionata
|
|
||||||
int TPass_plan_contr::remove_persosp(TSheet_field& persosp, const long codcli, const long codcont)
|
|
||||||
{
|
|
||||||
//instanzio un TISAM_recordset
|
|
||||||
TISAM_recordset psosp("USE LVPERISOSP\n FROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT");
|
|
||||||
psosp.set_var("#CODCF",codcli);
|
|
||||||
psosp.set_var("#CODCONT",codcont);
|
|
||||||
|
|
||||||
int err = NOERR;
|
|
||||||
|
|
||||||
//instanzio un TLocalisamfile
|
|
||||||
TLocalisamfile& file = psosp.cursor()->file();
|
|
||||||
|
|
||||||
//per ogni riga del recordset
|
|
||||||
for (bool ok=psosp.move_first(); ok; ok=psosp.move_next())
|
|
||||||
{
|
|
||||||
err = file.remove();
|
|
||||||
}
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
//REMOVE: ridefinizione del metodo remove delle TRelation
|
//REMOVE: ridefinizione del metodo remove delle TRelation
|
||||||
bool TPass_plan_contr::remove()
|
bool TPass_plan_contr::remove()
|
||||||
{
|
{
|
||||||
if (_mask->field(F_CODCF).empty() || _mask->field(F_CODCONT).empty())
|
TSheet_field& ps = _mask->sfield(F_PERSOSP);
|
||||||
return !NOERR;
|
ps.autosave(*_rel);
|
||||||
|
ps.record()->remove();
|
||||||
|
|
||||||
//valori recuperati dalla testata
|
//valori recuperati dalla testata
|
||||||
const long codcli = _mask->get_long(F_CODCF);
|
const long codcli = _rel->curr().get_long(LVPASPLAN_CODCF);
|
||||||
const long codcont = _mask->get_long(F_CODCONT);
|
const long codcont = _rel->curr().get_long(LVPASPLAN_CODCONT);
|
||||||
|
return remove_pasplan(codcli,codcont) == NOERR;
|
||||||
//variabili per lavorare sugli sheet
|
|
||||||
TSheet_field& pasplan = _mask->sfield(F_PASPLAN);
|
|
||||||
TSheet_field& persosp = _mask->sfield(F_PERSOSP);
|
|
||||||
|
|
||||||
int err_1 = remove_pasplan(pasplan,codcli,codcont);
|
|
||||||
int err_2 = remove_persosp(persosp,codcli,codcont);
|
|
||||||
|
|
||||||
return err_1 && err_2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
|
15
lv/lv0500a.h
15
lv/lv0500a.h
@ -25,15 +25,14 @@
|
|||||||
#define F_S_DATAUA 997
|
#define F_S_DATAUA 997
|
||||||
#define F_S_ORAUA 998
|
#define F_S_ORAUA 998
|
||||||
//campi sheet dei periodi di sospensione
|
//campi sheet dei periodi di sospensione
|
||||||
#define F_S_CODPER 101
|
#define F_S_TPSOSP 101
|
||||||
#define F_S_TPSOSP 102
|
|
||||||
#define F_S_DTPSOSP 999
|
#define F_S_DTPSOSP 999
|
||||||
#define F_S_DADATA 103
|
#define F_S_DADATA 102
|
||||||
#define F_S_ADATA 104
|
#define F_S_ADATA 103
|
||||||
#define F_S_FLFAT 105
|
#define F_S_FLFAT 104
|
||||||
#define F_S_IMPFAT 106
|
#define F_S_IMPFAT 105
|
||||||
#define F_S_PERFAT 107
|
#define F_S_PERFAT 106
|
||||||
#define F_S_NOTEPS 108
|
#define F_S_NOTEPS 107
|
||||||
#define F_S_UTENTEC 993
|
#define F_S_UTENTEC 993
|
||||||
#define F_S_DATAC 994
|
#define F_S_DATAC 994
|
||||||
#define F_S_ORAC 995
|
#define F_S_ORAC 995
|
||||||
|
@ -81,14 +81,18 @@ END
|
|||||||
SPREADSHEET F_PERSOSP 0 7
|
SPREADSHEET F_PERSOSP 0 7
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 0 13 "Periodi di sospensione"
|
PROMPT 0 13 "Periodi di sospensione"
|
||||||
ITEM "Codice"
|
ITEM "Tipo"
|
||||||
ITEM "Tipo\nsospensione"
|
|
||||||
ITEM "Data\ninizio"
|
ITEM "Data\ninizio"
|
||||||
ITEM "Data\nfine"
|
ITEM "Data\nfine"
|
||||||
ITEM "Fattura"
|
ITEM "Fattura"
|
||||||
ITEM "Importo da\nfatturare"
|
ITEM "Importo da\nfatturare"
|
||||||
ITEM "Percentuale da\nfatturare"
|
ITEM "Percentuale da\nfatturare"
|
||||||
ITEM "Note@50"
|
ITEM "Note@50"
|
||||||
|
|
||||||
|
USE LF_LVPERISOSP KEY CODPER
|
||||||
|
INPUT CODCF F_CODCF
|
||||||
|
INPUT CODCONT F_CODCONT
|
||||||
|
FLAGS "A"
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
@ -282,13 +286,6 @@ BEGIN
|
|||||||
PROMPT 1 0 "@bDati periodo di sospensione"
|
PROMPT 1 0 "@bDati periodo di sospensione"
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_S_CODPER 6
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 1 "Codice "
|
|
||||||
FLAGS "ZDR"
|
|
||||||
FIELD CODPER
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_S_TPSOSP 3
|
STRING F_S_TPSOSP 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 2 "Tipo "
|
PROMPT 2 2 "Tipo "
|
||||||
|
Loading…
x
Reference in New Issue
Block a user