Patch level : 2.0 492

Files correlati     : or1.exe or1100a.msk or1100b.frm or1200a.frm or1200a.msk
Ricompilazione Demo : [ ]
Commento            :

GF20030
La stampa ordini per cliente-fornitore/agente/articolo restituisce il
messaggio d'errore:"FATAL ERROR can't find item with id 10 RUN TIME ERROR."

GF20031
La stampa ordini col dettaglio articoli per data di consegna oltre a
mostrare gli ordini col dettaglio del o degli articoli con data consegna
indicata in fase di interrogazione mostra anche la testata (e non il
dettaglio degli articoli giustamente) anche di quegli ordini con data di
consegna non rientrante nel range inserito in fase di interrogazione.
Esempio inserire due ordini uno con data consegna documento e righe
documento 20/05/03 e l'altro con data di consegna documento 20/05/03 e un
articolo con data di consegna 30/06/06, fare  l'interrogazione con dettaglio
righe e data di consegna dal 30/06/03 al 30/06/03.

GF20032
La stampa disponibilità articoli non evidenzia nulla.


git-svn-id: svn://10.65.10.50/trunk@11224 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2003-06-10 08:26:39 +00:00
parent bd723d8fbe
commit 464c276099
7 changed files with 164 additions and 93 deletions

View File

@ -54,6 +54,8 @@ class TStampa_ordini : public TSkeleton_application
protected: protected:
static bool stato_handler(TMask_field& f, KEY k); static bool stato_handler(TMask_field& f, KEY k);
static bool detail_handler(TMask_field& f, KEY k); static bool detail_handler(TMask_field& f, KEY k);
static bool datacons_filter(const TRelation* rel);
virtual bool create(); virtual bool create();
virtual bool destroy(); virtual bool destroy();
virtual void main_loop(); virtual void main_loop();
@ -61,6 +63,8 @@ protected:
void filter_for_number(); void filter_for_number();
void filter_for_clifo_agent(); void filter_for_clifo_agent();
void filter_for_articolo(); void filter_for_articolo();
void show_body_field(short id, bool on); // Attiva un campo del body (sole se esiste!)
public: public:
TStampa_ordini() {}; TStampa_ordini() {};
virtual ~TStampa_ordini() {}; virtual ~TStampa_ordini() {};
@ -176,6 +180,27 @@ void TStampa_ordini::set_totvaluta_items()
} }
} }
bool TStampa_ordini::datacons_filter(const TRelation* rel)
{
const TRectype& doc = rel->curr(LF_DOC);
TRectype rdoc(LF_RIGHEDOC);
rdoc.put(RDOC_PROVV, doc.get(DOC_PROVV));
rdoc.put(RDOC_ANNO, doc.get(DOC_ANNO));
rdoc.put(RDOC_CODNUM, doc.get(DOC_CODNUM));
rdoc.put(RDOC_NDOC, doc.get(DOC_NDOC));
TRecord_array righe(LF_RIGHEDOC, RDOC_NRIGA);
righe.read(rdoc);
const TDate fc = app()._from_cons;
const TDate tc = app()._to_cons;
for (int r = righe.rows(); r > 0; r--)
{
const TDate datacons = righe.row(r).get(RDOC_DATACONS);
if (datacons >= fc && datacons <= tc)
return TRUE;
}
return FALSE;
}
void TStampa_ordini::filter_for_number() void TStampa_ordini::filter_for_number()
{ {
CHECK(_frm, "Form non valido"); CHECK(_frm, "Form non valido");
@ -187,7 +212,6 @@ void TStampa_ordini::filter_for_number()
TRectype f(LF_DOC), t(LF_DOC); TRectype f(LF_DOC), t(LF_DOC);
TString filter_expr,s, lev_str, mag_str; TString filter_expr,s, lev_str, mag_str;
filter_expr << "(TIPOCF==\"" << _tipocf << "\")";
if (_order == num_doc) if (_order == num_doc)
{ {
f.put(DOC_PROVV, _provv); f.put(DOC_PROVV, _provv);
@ -201,10 +225,10 @@ void TStampa_ordini::filter_for_number()
{ {
f.put(DOC_DATADOC, _from_date); f.put(DOC_DATADOC, _from_date);
t.put(DOC_DATADOC, _to_date); t.put(DOC_DATADOC, _to_date);
filter_expr << " && (PROVV==\"" << _provv << "\")"; filter_expr << "&&(PROVV==\"" << _provv << "\")";
if (_anno != 0) if (_anno != 0)
filter_expr << " && (ANNO==\"" << _anno << "\")"; filter_expr << "&&(ANNO==\"" << _anno << "\")";
filter_expr << " && (CODNUM==\"" << _codnum << "\")"; filter_expr << "&&(CODNUM==\"" << _codnum << "\")";
} }
cur->setregion(f,t); cur->setregion(f,t);
@ -226,7 +250,7 @@ void TStampa_ordini::filter_for_number()
s << lev_str << "|"; s << lev_str << "|";
if (mag_str.not_empty()) if (mag_str.not_empty())
s << mag_str << "|"; s << mag_str << "|";
s << "DATACONS"; s << RDOC_DATACONS;
TSortedfile *rdoc = new TSortedfile(LF_RIGHEDOC,NULL,s,"",1); TSortedfile *rdoc = new TSortedfile(LF_RIGHEDOC,NULL,s,"",1);
cur->relation()->replace(rdoc,1,"CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC"); cur->relation()->replace(rdoc,1,"CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC");
@ -242,10 +266,10 @@ void TStampa_ordini::filter_for_number()
} }
if (_TEA_ord == 'E') if (_TEA_ord == 'E')
filter_expr << " && (DOCEVASO==\"X\")"; filter_expr << "&&(DOCEVASO==\"X\")";
else else
if (_TEA_ord == 'A') if (_TEA_ord == 'A')
filter_expr << " && (DOCEVASO!=\"X\")"; filter_expr << "&&(DOCEVASO!=\"X\")";
if (!_detail_rows) if (!_detail_rows)
{ {
@ -266,8 +290,15 @@ void TStampa_ordini::filter_for_number()
filter_expr << s; filter_expr << s;
} }
} }
if (filter_expr.starts_with("&&"))
filter_expr.ltrim(2);
cur->setfilter(filter_expr); cur->setfilter(filter_expr);
// Filtro aggiuntivo per eliminare testate di documenti in cui tutte
// le righe hanno data di consegna fuori range
if (_detail_rows && _detail_doc)
cur->set_filterfunction(datacons_filter);
if (_detail_rows) if (_detail_rows)
{ {
@ -424,6 +455,13 @@ void TStampa_ordini::filter_for_number()
ssec.printsection().find_field(BODY_COL_12 + id).show(_opz_giacenza); ssec.printsection().find_field(BODY_COL_12 + id).show(_opz_giacenza);
} }
void TStampa_ordini::show_body_field(short id, bool on)
{
TForm_item* i = _frm->exist_field('B', odd_page, id);
if (i != NULL)
i->enable(on);
}
void TStampa_ordini::filter_for_clifo_agent() void TStampa_ordini::filter_for_clifo_agent()
{ {
CHECK(_frm, "Form non valido"); CHECK(_frm, "Form non valido");
@ -716,11 +754,11 @@ void TStampa_ordini::filter_for_clifo_agent()
} }
} }
// Abilitazione intestazioni di colonna // Abilitazione intestazioni di colonna
_frm->find_field('B', odd_page, BODY_COL_5).show(_opz_valore); show_body_field(BODY_COL_5, _opz_valore);
_frm->find_field('B', odd_page, BODY_COL_6).show(_opz_valore); show_body_field(BODY_COL_6, _opz_valore);
_frm->find_field('B', odd_page, BODY_COL_10).show(_opz_prezzo); show_body_field(BODY_COL_10, _opz_prezzo);
_frm->find_field('B', odd_page, BODY_COL_11).show(_opz_residuo); show_body_field(BODY_COL_11, _opz_residuo);
_frm->find_field('B', odd_page, BODY_COL_12).show(_opz_giacenza); show_body_field(BODY_COL_12, _opz_giacenza);
set_totvaluta_items(); set_totvaluta_items();
} }
@ -744,7 +782,7 @@ void TStampa_ordini::filter_for_articolo()
s << lev_str << "|"; s << lev_str << "|";
if (mag_str.not_empty()) if (mag_str.not_empty())
s << mag_str << "|"; s << mag_str << "|";
s << "ANNO|NDOC|DATACONS"; // MODIFICARO DA CRISTINA AGGIUNTO ANNO + NDOC s << "ANNO|NDOC|DATACONS"; // MODIFICATO DA CRISTINA AGGIUNTO ANNO + NDOC
cur->change_order(s); // Setta l'ordine cur->change_order(s); // Setta l'ordine
@ -879,11 +917,11 @@ void TStampa_ordini::filter_for_articolo()
_frm->find_field('B',odd_page,id).enable(); _frm->find_field('B',odd_page,id).enable();
// Abilitazione intestazioni di colonna // Abilitazione intestazioni di colonna
_frm->find_field('B', odd_page, BODY_COL_5).show(_opz_valore); show_body_field(BODY_COL_5,_opz_valore);
_frm->find_field('B', odd_page, BODY_COL_6).show(_opz_valore); show_body_field(BODY_COL_6,_opz_valore);
_frm->find_field('B', odd_page, BODY_COL_10).show(_opz_prezzo); show_body_field(BODY_COL_10,_opz_prezzo);
_frm->find_field('B', odd_page, BODY_COL_11).show(_opz_residuo); show_body_field(BODY_COL_11,_opz_residuo);
_frm->find_field('B', odd_page, BODY_COL_12).show(_opz_giacenza); show_body_field(BODY_COL_12,_opz_giacenza);
// Abilitazione intestazioni di riga // Abilitazione intestazioni di riga
TForm_subsection& asec = (TForm_subsection&)_frm->find_field('B', odd_page, "ARTMAIN"); // Sottosezione padre TForm_subsection& asec = (TForm_subsection&)_frm->find_field('B', odd_page, "ARTMAIN"); // Sottosezione padre

View File

@ -129,7 +129,7 @@ BEGIN
PROMPT 3 8 "Tipo C/F " PROMPT 3 8 "Tipo C/F "
ITEM "C|Clienti" ITEM "C|Clienti"
ITEM "F|Fornitori" ITEM "F|Fornitori"
GROUP GR_CLIFO GROUP GR_TUTTI GR_CLIFO
END END
NUMBER F_CFFROM 6 NUMBER F_CFFROM 6

View File

@ -54,7 +54,7 @@ END //HEADER
SECTION BODY ODD 4 COLUMNWISE SECTION BODY ODD 4 COLUMNWISE
NUMBER 1 10 NUMERO 1 10
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "Codice" "Codice" SPECIAL STRINGA INTESTAZIONE "Codice" "Codice"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -66,7 +66,7 @@ BEGIN
PICTURE "########" PICTURE "########"
END END
STRING 2 40 STRINGA 2 40
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "Descrizione" "Descrizione" SPECIAL STRINGA INTESTAZIONE "Descrizione" "Descrizione"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -166,14 +166,14 @@ END
// Raggruppamento righe documenti per lo stesso cli/fo // Raggruppamento righe documenti per lo stesso cli/fo
SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+LF_DOC->OCFPI SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+LF_DOC->OCFPI
NUMBER 101 10 NUMERO 101 10
BEGIN BEGIN
PROMPT 1 1 "" PROMPT 1 1 ""
FLAGS "H" FLAGS "H"
MESSAGE RESET,G_TOTALEART@ MESSAGE RESET,G_TOTALEART@
END END
STRING 102 40 2 STRINGA 102 40 2
BEGIN BEGIN
KEY "Descrizione documento" KEY "Descrizione documento"
PROMPT 2 1 "" PROMPT 2 1 ""
@ -181,7 +181,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
FLAGS "D" FLAGS "D"
END END
STRING 103 4 STRINGA 103 4
BEGIN BEGIN
KEY "Codice Valuta" KEY "Codice Valuta"
PROMPT 3 1 "" PROMPT 3 1 ""
@ -223,17 +223,17 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
SECTION RIGHEDOC 2 1 1 FILE LF_RIGHEDOC GROUP ANNO+NDOC // changes into CODART grouping SECTION RIGHEDOC 2 1 1 FILE LF_RIGHEDOC GROUP ANNO+NDOC // changes into CODART grouping
FLAGS "D" // Da abilitare solo su dettaglio righe FLAGS "D" // Da abilitare solo su dettaglio righe
NUMBER 201 10 NUMERO 201 10
BEGIN BEGIN
PROMPT 1 1 "" PROMPT 1 1 ""
END END
STRING 202 40 2 STRINGA 202 40 2
BEGIN BEGIN
KEY "Descrizione articolo" KEY "Descrizione articolo"
PROMPT 2 1 "" PROMPT 2 1 ""
MESSAGE _STREXPR,"**Art. "+LF_RIGHEDOC->CODART+" "+LF_ANAMAG->DESCR MESSAGE _STREXPR,"**Art. "+LF_RIGHEDOC->CODART+" "+LF_ANAMAG->DESCR
END END
STRING 203 4 STRINGA 203 4
BEGIN BEGIN
KEY "Codice Valuta" KEY "Codice Valuta"
PROMPT 3 1 "" PROMPT 3 1 ""
@ -264,7 +264,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
PROMPT 7 1 "" PROMPT 7 1 ""
FIELD LF_RIGHEDOC->UMQTA FIELD LF_RIGHEDOC->UMQTA
END END
NUMBER 208 13 NUMERO 208 13
BEGIN BEGIN
KEY "Q.ta Ordinata" KEY "Q.ta Ordinata"
PROMPT 8 1 "" PROMPT 8 1 ""
@ -272,7 +272,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
PICTURE "#@,@@@" PICTURE "#@,@@@"
END END
NUMBER 209 13 NUMERO 209 13
BEGIN BEGIN
KEY "Q.ta Evasa" KEY "Q.ta Evasa"
PROMPT 9 1 "" PROMPT 9 1 ""
@ -287,13 +287,13 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
DRIVENBY 203 DRIVENBY 203
FLAGS "U" FLAGS "U"
END END
NUMBER 211 15 NUMERO 211 15
BEGIN BEGIN
PROMPT 11 1 "" // Residuo PROMPT 11 1 "" // Residuo
PICTURE "########@,@@@@@" PICTURE "########@,@@@@@"
MESSAGE _ORDINE,RESIDUO MESSAGE _ORDINE,RESIDUO
END END
NUMBER 212 15 NUMERO 212 15
BEGIN BEGIN
PROMPT 12 1 "" // Giacenza attuale PROMPT 12 1 "" // Giacenza attuale
PICTURE "########@,@@@@@" PICTURE "########@,@@@@@"
@ -305,19 +305,19 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
SECTION RIGHEART 1 0 0 FILE LF_RIGHEDOC GROUP CODVAL+CODART+DATACONS SECTION RIGHEART 1 0 0 FILE LF_RIGHEDOC GROUP CODVAL+CODART+DATACONS
FLAGS "D" FLAGS "D"
NUMBER 301 10 NUMERO 301 10
BEGIN BEGIN
PROMPT 1 1 "" PROMPT 1 1 ""
FLAGS "H" FLAGS "H"
END END
STRING 302 40 2 STRINGA 302 40 2
BEGIN BEGIN
KEY "Descrizione" KEY "Descrizione"
PROMPT 2 1 "" PROMPT 2 1 ""
MESSAGE _ORDINE,DESCRIZIONE|COPY,402 MESSAGE _ORDINE,DESCRIZIONE|COPY,402
FLAGS "H" FLAGS "H"
END END
STRING 303 4 STRINGA 303 4
BEGIN BEGIN
KEY "Codice Valuta" KEY "Codice Valuta"
PROMPT 3 1 "" PROMPT 3 1 ""
@ -359,14 +359,14 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
MESSAGE _ORDINE,SELECTUM|COPY,407 MESSAGE _ORDINE,SELECTUM|COPY,407
FLAGS "H" FLAGS "H"
END END
NUMBER 308 13 NUMERO 308 13
BEGIN BEGIN
KEY "Q.ta Ordinata" KEY "Q.ta Ordinata"
PROMPT 8 1 "" PROMPT 8 1 ""
MESSAGE _ORDINE,QTA|_ORDINE,CONVUM|ADD,408 MESSAGE _ORDINE,QTA|_ORDINE,CONVUM|ADD,408
FLAGS "H" FLAGS "H"
END END
NUMBER 309 13 NUMERO 309 13
BEGIN BEGIN
KEY "Q.ta Evasa" KEY "Q.ta Evasa"
PROMPT 9 1 "" PROMPT 9 1 ""
@ -381,14 +381,14 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
DRIVENBY 303 DRIVENBY 303
FLAGS "HU" FLAGS "HU"
END END
NUMBER 311 15 NUMERO 311 15
BEGIN BEGIN
KEY " Residuo" KEY " Residuo"
PROMPT 11 1 "" PROMPT 11 1 ""
MESSAGE _ORDINE,RESIDUO|_ORDINE,CONVUM|ADD,411 MESSAGE _ORDINE,RESIDUO|_ORDINE,CONVUM|ADD,411
FLAGS "H" FLAGS "H"
END END
NUMBER 312 15 NUMERO 312 15
BEGIN BEGIN
KEY "Giacenza attuale" KEY "Giacenza attuale"
PROMPT 12 1 "" PROMPT 12 1 ""
@ -398,7 +398,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
END // END SECTION RIGHEART END // END SECTION RIGHEART
// Totalizers for previous section // Totalizers for previous section
NUMBER 401 10 NUMERO 401 10
BEGIN BEGIN
PROMPT 1 1 "" PROMPT 1 1 ""
FLAGS "D" FLAGS "D"
@ -444,7 +444,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
FLAGS "D" FLAGS "D"
GROUP G_TOTALEART GROUP G_TOTALEART
END END
NUMBER 408 13 NUMERO 408 13
BEGIN BEGIN
KEY "Q.ta Ordinata" KEY "Q.ta Ordinata"
PROMPT 8 1 "" PROMPT 8 1 ""
@ -452,7 +452,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
FLAGS "D" FLAGS "D"
GROUP G_TOTALEART GROUP G_TOTALEART
END END
NUMBER 409 13 NUMERO 409 13
BEGIN BEGIN
KEY "Q.ta Evasa" KEY "Q.ta Evasa"
PROMPT 9 1 "" PROMPT 9 1 ""
@ -468,7 +468,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
FLAGS "DU" FLAGS "DU"
GROUP G_TOTALEART GROUP G_TOTALEART
END END
NUMBER 411 15 NUMERO 411 15
BEGIN BEGIN
KEY "Residuo" KEY "Residuo"
PROMPT 11 1 "" PROMPT 11 1 ""
@ -476,7 +476,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+
FLAGS "D" FLAGS "D"
GROUP G_TOTALEART GROUP G_TOTALEART
END END
NUMBER 412 15 NUMERO 412 15
BEGIN BEGIN
KEY "Giac. attuale" KEY "Giac. attuale"
PROMPT 12 1 "" PROMPT 12 1 ""
@ -491,12 +491,12 @@ END // END SECTION DOCUMENTI
SECTION TOTVAL1 3 0 1 GROUP SECTION TOTVAL1 3 0 1 GROUP
FLAGS "D" FLAGS "D"
NUMBER 51 10 NUMERO 51 10
BEGIN BEGIN
PROMPT 1 1 "" PROMPT 1 1 ""
END END
STRING 52 40 STRINGA 52 40
BEGIN BEGIN
PROMPT 2 1 "" PROMPT 2 1 ""
END END
@ -530,12 +530,12 @@ END // Fine sezione totale in valuta #1
SECTION TOTVAL2 1 0 1 GROUP SECTION TOTVAL2 1 0 1 GROUP
FLAGS "D" FLAGS "D"
NUMBER 61 10 NUMERO 61 10
BEGIN BEGIN
PROMPT 1 1 "" PROMPT 1 1 ""
END END
STRING 62 40 STRINGA 62 40
BEGIN BEGIN
PROMPT 2 1 "" PROMPT 2 1 ""
END END
@ -569,12 +569,12 @@ END // Fine sezione totale in valuta #2
SECTION TOTVAL3 1 0 1 GROUP SECTION TOTVAL3 1 0 1 GROUP
FLAGS "D" FLAGS "D"
NUMBER 71 10 NUMERO 71 10
BEGIN BEGIN
PROMPT 1 1 "" PROMPT 1 1 ""
END END
STRING 72 40 STRINGA 72 40
BEGIN BEGIN
PROMPT 2 1 "" PROMPT 2 1 ""
END END
@ -607,12 +607,12 @@ END // Fine sezione totale in valuta #3
SECTION TOTVAL4 1 0 1 GROUP SECTION TOTVAL4 1 0 1 GROUP
FLAGS "D" FLAGS "D"
NUMBER 81 10 NUMERO 81 10
BEGIN BEGIN
PROMPT 1 1 "" PROMPT 1 1 ""
END END
STRING 82 40 STRINGA 82 40
BEGIN BEGIN
PROMPT 2 1 "" PROMPT 2 1 ""
END END
@ -645,3 +645,4 @@ END // Fine sezione totale in valuta #4
END // End of Body END // End of Body
END // End of Form

View File

@ -120,9 +120,9 @@ void TStampa_dettaglio_articoli::set_date_array()
} }
} }
void TStampa_dettaglio_articoli::set_form() void TStampa_dettaglio_articoli::set_form()
{ {
CHECK(_frm,"Invalid form"); CHECK(_frm,"Invalid form");
_frm->set_options(_detail_level, _detail_mag, _detail_dep, _giac_eff, _val_comp, &_date_array); _frm->set_options(_detail_level, _detail_mag, _detail_dep, _giac_eff, _val_comp, &_date_array);
@ -130,9 +130,9 @@ void TStampa_dettaglio_articoli::set_form()
TString lev_str, mag_str, s, filter_expr; TString lev_str, mag_str, s, filter_expr;
TSorted_cursor* cur = (TSorted_cursor*)_frm->cursor(); TSorted_cursor* cur = (TSorted_cursor*)_frm->cursor();
TDocumento *doc = new TDocumento; // Don't delete it // TDocumento *doc = new TDocumento; // Don't delete it
cur->file().set_curr(doc); // cur->file(LF_DOC).set_curr(doc); // File collegato
cur->file(LF_RIGHEDOC).set_curr(new TRiga_documento(doc)); // cur->file(LF_RIGHEDOC).set_curr(new TRiga_documento(doc)); // File principale
if (_detail_level > 0) if (_detail_level > 0)
lev_str.format("LIVELLO[1,%d]",_codgiac->packed_length(_detail_level)); lev_str.format("LIVELLO[1,%d]",_codgiac->packed_length(_detail_level));
@ -165,15 +165,17 @@ void TStampa_dettaglio_articoli::set_form()
t.put(DOC_CODNUM, _tocodnum); t.put(DOC_CODNUM, _tocodnum);
cur->setregion(f,t); // Cursor region cur->setregion(f,t); // Cursor region
// TDate oggi(TODAY);
// Considera solo i documenti con data consegna compresa tra oggi e la data di osservazione // Considera solo i documenti con data consegna compresa tra oggi e la data di osservazione
s.format("(ANSI(%d->DATACONS)>=\"%s\")", LF_RIGHEDOC, s.format("(ANSI(%d->DATACONS)>=\"%s\")", LF_RIGHEDOC,
(const char*)_data_inizio.string(ANSI)); (const char*)_data_inizio.string(ANSI));
filter_expr << s; filter_expr << s;
s.format("&& (ANSI(%d->DATACONS)<=\"%s\")", LF_RIGHEDOC,
(const char*)_data_oss.string(ANSI)); if (_data_oss.ok())
filter_expr << s; {
s.format("&& (ANSI(%d->DATACONS)<=\"%s\")", LF_RIGHEDOC,
(const char*)_data_oss.string(ANSI));
filter_expr << s;
}
// Setta i range per il codice articolo // Setta i range per il codice articolo
if (_from_art.not_empty()) if (_from_art.not_empty())
@ -239,8 +241,8 @@ void TStampa_dettaglio_articoli::set_form()
// Disabilita le colonne in base al numero di periodi da suddividere // Disabilita le colonne in base al numero di periodi da suddividere
for (short id = 4+_periods*2; id <= 15; id++) for (short id = 4+_periods*2; id <= 15; id++)
{ {
_frm->find_field('B',odd_page,id).disable(); _frm->find_field('B',odd_page,id).disable();
_frm->find_field('B',odd_page,id+50).disable(); _frm->find_field('B',odd_page,id+50).disable();
} }
@ -267,6 +269,23 @@ void TStampa_dettaglio_articoli::main_loop()
_anno = _m->get_int(F_ANNO); _anno = _m->get_int(F_ANNO);
_data_inizio = _m->get_date(F_DATE_H); _data_inizio = _m->get_date(F_DATE_H);
_data_oss = _m->get_date(F_DATAOSS); _data_oss = _m->get_date(F_DATAOSS);
if (!_data_oss.ok())
{
_data_oss = _data_inizio;
_data_oss.set_month(12);
_data_oss.set_day(31);
int anno = _anno;
if (anno <= 0)
{
TEsercizi_contabili ec;
const int codes = ec.last();
if (codes > 0)
anno = ec[codes].fine().year();
}
if (anno > _data_oss.year())
_data_oss.set_year(anno);
}
_from_mag = _m->get(F_MAGFROM); _from_mag = _m->get(F_MAGFROM);
_to_mag = _m->get(F_MAGTO); _to_mag = _m->get(F_MAGTO);
_from_dep = _m->get(F_DEPFROM); _from_dep = _m->get(F_DEPFROM);
@ -302,7 +321,17 @@ void TStampa_dettaglio_articoli::main_loop()
set_form(); set_form();
if (_frm->cursor()->items() > 0) if (_frm->cursor()->items() > 0)
{
TCursor* cur = _frm->cursor();
TDocumento *doc = new TDocumento; // Don't delete it
cur->file(LF_DOC).set_curr(doc); // File collegato
cur->file(LF_RIGHEDOC).set_curr(new TRiga_documento(doc)); // File principale
_frm->print(); _frm->print();
cur->file(LF_DOC).set_curr(new TRectype(LF_DOC));
cur->file(LF_RIGHEDOC).set_curr(new TRectype(LF_RIGHEDOC));
}
// Reset mask // Reset mask
_m->reset(); _m->reset();

View File

@ -19,7 +19,7 @@ END
SECTION HEADER ODD 7 SECTION HEADER ODD 7
STRINGA 1 40 1 STRINGA 1 50
BEGIN BEGIN
KEY "nome ditta" KEY "nome ditta"
PROMPT 1 1 "Ditta " PROMPT 1 1 "Ditta "
@ -29,14 +29,14 @@ END
STRINGA 2 10 STRINGA 2 10
BEGIN BEGIN
KEY "Data" KEY "Data"
PROMPT 106 1 "Data " PROMPT 100 1 "Data "
MESSAGE _TODAY MESSAGE _TODAY
END END
NUMERO 3 7 NUMERO 3
BEGIN BEGIN
KEY "Nr. pagina" KEY "Nr. pagina"
PROMPT 122 1 "Pagina " PROMPT 122 1 "Pag. "
MESSAGE _PAGENO MESSAGE _PAGENO
END END

View File

@ -1,22 +1,22 @@
#include "or1200a.h" #include "or1200a.h"
TOOLBAR "" 0 19 0 4 TOOLBAR "" 0 -3 0 3
BUTTON DLG_PRINT 10 2 BUTTON DLG_PRINT 10 2
BEGIN BEGIN
PROMPT -12 -1 "" PROMPT -12 -11 ""
END END
BUTTON DLG_QUIT 10 2 BUTTON DLG_QUIT 10 2
BEGIN BEGIN
PROMPT -22 -1 "" PROMPT -22 -11 ""
END END
ENDPAGE ENDPAGE
PAGE "Disponibilita' articoli" -1 -1 70 16 PAGE "Disponibilita' articoli" -1 -1 70 16
GROUPBOX DLG_NULL 40 7 GROUPBOX DLG_NULL 41 7
BEGIN BEGIN
PROMPT 1 1 "Ordine" PROMPT 1 1 "Ordine"
END END
@ -50,8 +50,8 @@ END
DATE F_DATE_H DATE F_DATE_H
BEGIN BEGIN
FLAGS "A"
PROMTP 2 4 "Data iniziale " PROMTP 2 4 "Data iniziale "
FLAGS "A"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
@ -103,7 +103,7 @@ BEGIN
ITEM "O|Non evase" ITEM "O|Non evase"
END END
GROUPBOX DLG_NULL 30 4 GROUPBOX DLG_NULL 31 4
BEGIN BEGIN
PROMPT 1 10 "Articolo" PROMPT 1 10 "Articolo"
END END
@ -144,7 +144,7 @@ BEGIN
PROMPT 36 12 "Valorizza componenti" PROMPT 36 12 "Valorizza componenti"
END END
GROUPBOX DLG_NULL 30 4 GROUPBOX DLG_NULL 31 4
BEGIN BEGIN
PROMPT 1 15 "Magazzino" PROMPT 1 15 "Magazzino"
END END

View File

@ -23,8 +23,7 @@ TOrdine_form::~TOrdine_form()
const int TOrdine_form::find_period(const TDate& dc) const int TOrdine_form::find_period(const TDate& dc)
{ {
CHECK(_date_array, "Invalid date array in TOrdine_form"); CHECK(_date_array, "Invalid date array in TOrdine_form");
const int items = _date_array->items(); for (int i = _date_array->last(); i >= 0; i--) // ciuccialo alla rovescia... ehehe ;)
for (int i = items-1; i >= 0; i--) // ciuccialo alla rovescia... ehehe ;)
{ {
TDate& dt = (TDate&)*_date_array->objptr(i); TDate& dt = (TDate&)*_date_array->objptr(i);
if (dc > dt) if (dc > dt)
@ -123,8 +122,8 @@ bool TOrdine_form::validate(TForm_item &cf, TToken_string &s)
else else
if (action == "SELECTUM") if (action == "SELECTUM")
{ {
TString um(rdoc.get(RDOC_UMQTA)); const TString8 um(rdoc.get(RDOC_UMQTA));
TString cur_um(cf.find_field("407").get()); const TString8 cur_um(cf.find_field("407").get());
if (cur_um.empty()) // Se l'unita' di misura non e' ancora stata settata prende quella principale if (cur_um.empty()) // Se l'unita' di misura non e' ancora stata settata prende quella principale
cf.set(um); cf.set(um);
@ -132,9 +131,6 @@ bool TOrdine_form::validate(TForm_item &cf, TToken_string &s)
if (cur_um != um) // Se c'e' ma e' diversa dalla prec. allora setta l'unita' di misura su quella principale if (cur_um != um) // Se c'e' ma e' diversa dalla prec. allora setta l'unita' di misura su quella principale
if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR) if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR)
{ {
// Converte i totali q.ta evasa e ordinata nella unita' di misura principale
const int index_um = _art_giac->find_um(cur_um);
const real fc = _art_giac->um().row(index_um > 0 ? index_um : 1).get("FC");
TForm_item& qo = cf.find_field("408"); TForm_item& qo = cf.find_field("408");
TForm_item& qe = cf.find_field("409"); TForm_item& qe = cf.find_field("409");
TForm_item& qr = cf.find_field("411"); TForm_item& qr = cf.find_field("411");
@ -142,9 +138,16 @@ bool TOrdine_form::validate(TForm_item &cf, TToken_string &s)
real qtaev(qe.get()); real qtaev(qe.get());
real qtare(qr.get()); real qtare(qr.get());
qtaor *= fc; // Converte i totali q.ta evasa e ordinata nella unita' di misura principale
qtaev *= fc; // const int index_um = _art_giac->find_um(cur_um);
qtare *= fc; // const real fc = _art_giac->um().row(index_um > 0 ? index_um : 1).get("FC");
// qtaor *= fc;
// qtaev *= fc;
// qtare *= fc;
qtaor = _art_giac->convert_to_um(qtaor, "", cur_um, TRUE);
qtaev = _art_giac->convert_to_um(qtaev, "", cur_um, TRUE);
qtare = _art_giac->convert_to_um(qtare, "", cur_um, TRUE);
qo.set(qtaor.string()); qo.set(qtaor.string());
qe.set(qtaev.string()); qe.set(qtaev.string());
qr.set(qtare.string()); qr.set(qtare.string());
@ -265,24 +268,24 @@ bool TOrdine_form::validate(TForm_item &cf, TToken_string &s)
} }
// Reperisce fattore di conversione per UM principale, // Reperisce fattore di conversione per UM principale,
// la quantita residua // la quantita residua
real fc = 1.00; // Se non esiste in anagrafica non effettua nessuna conversione real qtares = rdoc.qtaresidua(); // ZIO PERA! ag völ la riga dal document
real qtares = rdoc.qtaresidua(); // ZIO PERA! ag völ la riga dal document qtares = _art_giac->convert_to_um(qtares, "", um, TRUE);
//if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR)
fc = _art_giac->um().row(_art_giac->find_um(um)).get_real("FC");
qtares *= fc; // Convertito in UM principale...
qtares *= segno; // mette a posto il segno... qtares *= segno; // mette a posto il segno...
// Trova il periodo giusto // Trova il periodo giusto
const int index = find_period(datacons); const int index = find_period(datacons);
if (index >= _totdisp.items())
_totdisp.add(ZERO, index); // Added by Guy! Should never happen :-)
real& rv = (real&) _totdisp[index]; real& rv = (real&) _totdisp[index];
rv += qtares; rv += qtares;
} }
else else
if (command == "PRNUM") // Stampa l'unita' di misura principale if (command == "PRNUM") // Stampa l'unita' di misura principale
{ {
//if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR) const TRecord_array& um = _art_giac->um();
cf.set(_art_giac->um().row(1).get("UM")); // UM principale if (um.rows() > 0) // Controlla che ci sia almeno una unita' di misura
//else cf.set(um.row(1).get("UM")); // UM principale
// cf.set("#ERR"); //uhmmm else
cf.set("");
} }
else else
{ {