Patch level : 10.0 732

Files correlati     : pr1.exe pr1300a.msk
Ricompilazione Demo : [ ]
Commento            :
0001607: 002422 - stampa schede
Descrizione	 il bottone di esportazione excell non produce risultati;
da impostazione stampante, scelgo di stampare su file, chiede il nome del file (che è già impostato)


git-svn-id: svn://10.65.10.50/trunk@20432 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2010-05-06 13:29:43 +00:00
parent 0e70489f6b
commit e8e526e6f1
2 changed files with 203 additions and 141 deletions

View File

@ -1,4 +1,6 @@
#include <applicat.h>
#include <automask.h>
#include <defmask.h>
#include <printer.h>
#include <progind.h>
@ -6,6 +8,10 @@
#include "pr1300a.h"
#include "..\ve\velib.h"
///////////////////////////////////////////////////////////
// TStampa_schedeprovv_form
///////////////////////////////////////////////////////////
class TStampa_schedeprovv_form : public TForm
{
TString _basecalcolo;
@ -25,7 +31,7 @@ TStampa_schedeprovv_form::TStampa_schedeprovv_form(const char* name) : TForm(nam
bool TStampa_schedeprovv_form::validate(TForm_item &cf, TToken_string &s)
{
const TString code = s.get(0);
const TFixed_string code(s.get(0));
if (code == "_BASECALCOLO")
{
real valore;
@ -59,12 +65,41 @@ bool TStampa_schedeprovv_form::validate(TForm_item &cf, TToken_string &s)
return TForm::validate(cf, s);
}
///////////////////////////////////////////////////////////
// TStampa_schedeprovv_mask
///////////////////////////////////////////////////////////
class TStampa_schedeprovv_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TStampa_schedeprovv_mask() : TAutomask("pr1300a") {}
};
bool TStampa_schedeprovv_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
if (e == fe_button && o.dlg() == DLG_PREVIEW) // Anteprima
{ stop_run('A'); }
return true;
}
///////////////////////////////////////////////////////////
// TStampa_schedeprovv
///////////////////////////////////////////////////////////
class TStampa_schedeprovv : public TSkeleton_application
{
TMask * _m;
void riporta_pagamenti(TCursor &cur);
protected:
void riporta_pagamenti(TCursor &cur);
void print_or_preview(bool paper);
virtual void print() { print_or_preview(true); }
virtual void preview() { print_or_preview(false); }
public:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
@ -77,7 +112,7 @@ bool TStampa_schedeprovv::create()
LF_OCCAS, LF_PCON, LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP,
LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0);
_m= new TMask ("pr1300a");
_m = new TStampa_schedeprovv_mask;
return TSkeleton_application::create();
}
@ -119,117 +154,134 @@ void TStampa_schedeprovv::riporta_pagamenti(TCursor &cur)
}
}
void TStampa_schedeprovv::print_or_preview(bool paper)
{
const TPrtype pt = printer().printtype(); // save printer mode
if (paper == (pt == screenvis))
{
if (paper)
printer().set_printtype(winprinter);
else
printer().set_printtype(screenvis);
}
TStampa_schedeprovv_form frm("pr1300a");
const int hh = 7;
const int fh = 1;
const int fl = printer().formlen();
int rows[4]; // Righe orizzontali
rows[0] = hh-3;
rows[1] = hh;
rows[2] = fl-1;
rows[3] = 0;
frm.genera_intestazioni(odd_page, hh-2);
frm.genera_fincatura(odd_page, hh-3, fl-1, rows);
// filtro e regione
TString filter;
if (_m->get(F_FILTRO).full())
{
filter = PROV_SALDATA;
if (_m->get(F_FILTRO)[0]=='P')
filter << "==\"X\"" ;
else
filter << "!=\"X\"" ;
}
if (_m->get_bool(F_NOZERO))
{
bool not_empty = filter.not_empty();
if (not_empty)
{
filter.insert("(");
filter << ") && (";
}
filter << "(" << PROV_IMPPRDOC << "!= 0)";
if (not_empty)
filter << ")";
}
if (_m->get(F_DADATA).not_empty() || _m->get(F_ADATA).not_empty())
{
TDate datam;
bool not_empty = filter.not_empty();
if (not_empty)
{
filter.insert("(");
filter << ") && (";
}
if (_m->get(F_DADATA).not_empty())
{
datam = _m->get_date(F_DADATA);
filter << "(ANSI(" << PROV_DATADOC << ")>=\"" << datam.string(ANSI) << "\")";
if (_m->get(F_ADATA).not_empty())
filter << " && ";
}
if (_m->get(F_ADATA).not_empty())
{
datam = _m->get_date(F_ADATA);
filter << "(ANSI(" << PROV_DATADOC << ")<=\"" << datam.string(ANSI) << "\")";
}
if (not_empty)
filter << ")";
}
// aggiungo comunque il file alla relazione perche' mi serve avere il documento sempre
frm.cursor()->relation()->add(LF_DOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==\"D\"|NDOC==NDOC");
const TString& tipodoc = _m->get(F_TIPODOC);
if (tipodoc.full())
{
//frm.cursor()->relation()->add(LF_DOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==\"D\"|NDOC==NDOC");
bool not_empty = filter.full();
if (not_empty)
{
filter.insert("(");
filter << ") && (";
}
filter << LF_DOC << "->TIPODOC == \"" << tipodoc << "\"";
if (not_empty)
filter << ")";
frm.cursor()->setfilter(filter, TRUE);
}
else
frm.cursor()->setfilter(filter);
TRectype start(LF_PROVV),end(LF_PROVV);
if (_m->get(F_DAAGE).not_empty())
start.put(PROV_CODAGE,_m->get(F_DAAGE));
if (_m->get(F_AAGE).not_empty())
end.put(PROV_CODAGE,_m->get(F_AAGE));
frm.cursor()->setregion(start,end);
frm.set_basecalcolo(_m->get(F_FORMULA));
// abilita le sezioni dei totali
frm.find_field('B',odd_page,"CLIENTI").show(!_m->get_bool(F_RAGGCLI));
frm.find_field('B',odd_page,"HCLIENTI").show(!_m->get_bool(F_RAGGDOC));
frm.find_field('B',odd_page,"DOCUMENTI").show(!_m->get_bool(F_RAGGDOC));
frm.find_field('B',odd_page,"HDOCUMENTI").show(!_m->get_bool(F_RAGGRATE));
frm.find_field('B',odd_page,"RATEDOC").show(!_m->get_bool(F_RAGGRATE));
frm.print();
if (_m->get(F_DEFINITIVA)[0]=='D')
{
riporta_pagamenti(*frm.cursor());
}
printer().set_printtype(pt); // Restore printer mode
}
void TStampa_schedeprovv::main_loop()
{
while (_m->run()!=K_QUIT)
KEY k;
while ((k = _m->run()) != K_QUIT)
{
TStampa_schedeprovv_form frm("pr1300a");
const int hh = 7;
const int fh = 1;
const int fl = printer().formlen();
int rows[4]; // Righe orizzontali
rows[0] = hh-3;
rows[1] = hh;
rows[2] = fl-1;
rows[3] = 0;
frm.genera_intestazioni(odd_page, hh-2);
frm.genera_fincatura(odd_page, hh-3, fl-1, rows);
// filtro e regione
TString filter;
if (_m->get(F_FILTRO).not_empty())
{
filter = PROV_SALDATA;
if (_m->get(F_FILTRO)[0]=='P')
filter << "==\"X\"" ;
else
filter << "!=\"X\"" ;
}
if (_m->get_bool(F_NOZERO))
{
bool not_empty = filter.not_empty();
if (not_empty)
{
filter.insert("(");
filter << ") && (";
}
filter << "(" << PROV_IMPPRDOC << "!= 0)";
if (not_empty)
filter << ")";
}
if (_m->get(F_DADATA).not_empty() || _m->get(F_ADATA).not_empty())
{
TDate datam;
bool not_empty = filter.not_empty();
if (not_empty)
{
filter.insert("(");
filter << ") && (";
}
if (_m->get(F_DADATA).not_empty())
{
datam = _m->get_date(F_DADATA);
filter << "(ANSI(" << PROV_DATADOC << ")>=\"" << datam.string(ANSI) << "\")";
if (_m->get(F_ADATA).not_empty())
filter << " && ";
}
if (_m->get(F_ADATA).not_empty())
{
datam = _m->get_date(F_ADATA);
filter << "(ANSI(" << PROV_DATADOC << ")<=\"" << datam.string(ANSI) << "\")";
}
if (not_empty)
filter << ")";
}
// aggiungo comunque il file alla relazione perche' mi serve avere il documento sempre
frm.cursor()->relation()->add(LF_DOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==\"D\"|NDOC==NDOC");
const TString & tipodoc = _m->get(F_TIPODOC);
if (tipodoc.not_empty())
{
//frm.cursor()->relation()->add(LF_DOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==\"D\"|NDOC==NDOC");
bool not_empty = filter.not_empty();
if (not_empty)
{
filter.insert("(");
filter << ") && (";
}
filter << LF_DOC << "->TIPODOC == \"" << tipodoc << "\"";
if (not_empty)
filter << ")";
frm.cursor()->setfilter(filter, TRUE);
}
else
frm.cursor()->setfilter(filter);
TRectype start(LF_PROVV),end(LF_PROVV);
if (_m->get(F_DAAGE).not_empty())
start.put(PROV_CODAGE,_m->get(F_DAAGE));
if (_m->get(F_AAGE).not_empty())
end.put(PROV_CODAGE,_m->get(F_AAGE));
frm.cursor()->setregion(start,end);
frm.set_basecalcolo(_m->get(F_FORMULA));
// abilita le sezioni dei totali
frm.find_field('B',odd_page,"CLIENTI").show(!_m->get_bool(F_RAGGCLI));
frm.find_field('B',odd_page,"HCLIENTI").show(!_m->get_bool(F_RAGGDOC));
frm.find_field('B',odd_page,"DOCUMENTI").show(!_m->get_bool(F_RAGGDOC));
frm.find_field('B',odd_page,"HDOCUMENTI").show(!_m->get_bool(F_RAGGRATE));
frm.find_field('B',odd_page,"RATEDOC").show(!_m->get_bool(F_RAGGRATE));
frm.print();
if (_m->get(F_DEFINITIVA)[0]=='D')
{
riporta_pagamenti(*frm.cursor());
}
print_or_preview(k == K_ENTER);
}
}

View File

@ -1,14 +1,19 @@
#include "pr1300a.h"
TOOLBAR "topbar" 0 0 0 2
#include <printbar.h>
#include <aprintbar.h>
ENDPAGE
PAGE "Stampa schede di provvigione" 0 2 0 0
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 1 "@bIntervallo"
END
STRING F_DAAGE 5
BEGIN
PROMPT 2 1 "Da agente "
PROMPT 2 2 "Da agente "
FLAGS "UZ"
USE LF_AGENTI
INPUT CODAGE F_DAAGE
@ -20,7 +25,7 @@ END
STRING F_AAGE 5
BEGIN
PROMPT 34 1 "Ad agente "
PROMPT 2 3 "Ad agente "
FLAGS "UZ"
COPY USE F_DAAGE
INPUT CODAGE F_AAGE
@ -29,51 +34,66 @@ BEGIN
GROUP G_CODAGE
END
DATE F_DADATA
BEGIN
PROMPT 34 2 "Da data "
END
DATE F_ADATA
BEGIN
PROMPT 34 3 "A data "
END
GROUPBOX DLG_NULL 78 8
BEGIN
PROMPT 1 5 "@bParametri e filtri"
END
LIST F_DEFINITIVA 15
BEGIN
PROMPT 2 3 "Stampa "
PROMPT 2 6 "Stampa "
ITEM "P|provvisoria"
MESSAGE ENABLE,F_FILTRO
ITEM "D|definitiva"
MESSAGE "D",F_FILTRO|DISABLE,F_FILTRO
END
LIST F_FILTRO 30
LIST F_FILTRO 1 30
BEGIN
PROMPT 34 3 "Seleziona "
ITEM "|tutte le provvigioni"
ITEM "D|solo le provv. da pagare"
ITEM "P|solo le provv. gia' pagate"
PROMPT 34 6 "Selezione "
ITEM "|Tutte le provvigioni"
ITEM "D|Solo da pagare"
ITEM "P|Solo gia' pagate"
END
BOOL F_RAGGCLI
BEGIN
PROMPT 2 5 "Raggruppa i clienti"
MESSAGE TRUE "X",F_RAGGDOC|DISABLE,F_RAGGDOC
PROMPT 2 7 "Raggruppamento clienti"
MESSAGE FALSE ENABLE,F_RAGGDOC
MESSAGE TRUE "X",F_RAGGDOC|DISABLE,F_RAGGDOC
END
BOOL F_RAGGDOC
BEGIN
PROMPT 35 5 "Raggruppa i documenti"
MESSAGE TRUE "X",F_RAGGRATE|DISABLE,F_RAGGRATE|"",F_TIPODOC|DISABLE, F_TIPODOC
PROMPT 34 7 "Raggruppamento documenti"
MESSAGE FALSE ENABLE,F_RAGGRATE|ENABLE,F_TIPODOC
MESSAGE TRUE "X",F_RAGGRATE|DISABLE,F_RAGGRATE|"",F_TIPODOC|DISABLE, F_TIPODOC
END
BOOL F_RAGGRATE
BEGIN
PROMPT 2 7 "Raggruppa le rate"
PROMPT 2 8 "Raggruppamento rate"
END
BOOL F_NOZERO
BEGIN
PROMPT 35 7 "Non stampare doc. con provvigione nulla"
PROMPT 34 8 "Non stampare documenti senza provvigioni"
END
STRING F_TIPODOC 4
BEGIN
PROMPT 2 9 "Tipo doc. "
HELP "Codice tipo documento"
PROMPT 2 9 "Tipo documento "
HELP "Selezionare il tipo documento da stampare"
USE %TIP SELECT B3=="X"
INPUT CODTAB F_TIPODOC
DISPLAY "Codice" CODTAB
@ -83,19 +103,9 @@ BEGIN
FLAG "UP"
END
DATE F_DADATA
BEGIN
PROMPT 2 11 "Da data "
END
DATE F_ADATA
BEGIN
PROMPT 35 11 "A data "
END
STRING F_FORMULA 10
BEGIN
PROMPT 2 13 "Stampa "
PROMPT 2 11 "Stampa "
USE %FRD
FLAG "U"
CHECKTYPE NORMAL
@ -108,13 +118,13 @@ END
STRING F_D_FORMULA 50
BEGIN
PROMPT 25 13 ""
PROMPT 26 11 ""
FLAG "D"
END
STRING F_PROFILO 50
BEGIN
PROMPT 2 15 "Profilo "
PROMPT 2 -1 "Profilo "
PSELECT
//MESSAGE K_SPACE,F_ORDINAMENTO|K_SPACE,F_VAL2PRINT
END