Patch level : 12.0 380

Files correlati     : mr0.exe mr0400a.umlmr1.exe mr2.exe

Corretta la ricerca dei prezzi per gli ordini a fornitore.
resa opzionale l'uso della giacenza reale (corretta).

git-svn-id: svn://10.65.10.50/branches/R_10_00@23741 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
bonazzi 2017-04-18 13:39:28 +00:00
parent d4003bc11c
commit c9458c893f
5 changed files with 122 additions and 67 deletions

View File

@ -1,52 +1,53 @@
#ifndef __MR0400_H
#define __MR0400_H
#define F_GESTIMPIANTI 101
#define F_NTURNI 102
#define F_T1HINIZIO 103
#define F_T1MINIZIO 104
#define F_T1HDURATA 105
#define F_T1MDURATA 106
#define F_T2HINIZIO 107
#define F_T2MINIZIO 108
#define F_T2HDURATA 109
#define F_T2MDURATA 110
#define F_T3HINIZIO 111
#define F_T3MINIZIO 112
#define F_T3HDURATA 113
#define F_T3MDURATA 114
#define F_T4HINIZIO 115
#define F_T4MINIZIO 116
#define F_T4HDURATA 117
#define F_T4MDURATA 118
#define F_T5HINIZIO 119
#define F_T5MINIZIO 120
#define F_T5HDURATA 121
#define F_T5MDURATA 122
#define F_T6HINIZIO 123
#define F_T6MINIZIO 124
#define F_T6HDURATA 125
#define F_T6MDURATA 126
#define F_T7HINIZIO 127
#define F_T7MINIZIO 128
#define F_T7HDURATA 129
#define F_T7MDURATA 130
#define F_T8HINIZIO 131
#define F_T8MINIZIO 132
#define F_T8HDURATA 133
#define F_T8MDURATA 134
#define F_T1NUMPERS 135
#define F_T2NUMPERS 136
#define F_T3NUMPERS 137
#define F_T4NUMPERS 138
#define F_T5NUMPERS 139
#define F_T6NUMPERS 140
#define F_T7NUMPERS 141
#define F_T8NUMPERS 142
#define F_FORNITORE 143
#define F_RAGSOC 144
#define F_TIPONUM 145
#define F_TIPOTIP 146
#define F_GESTIMPIANTI 101
#define F_NTURNI 102
#define F_T1HINIZIO 103
#define F_T1MINIZIO 104
#define F_T1HDURATA 105
#define F_T1MDURATA 106
#define F_T2HINIZIO 107
#define F_T2MINIZIO 108
#define F_T2HDURATA 109
#define F_T2MDURATA 110
#define F_T3HINIZIO 111
#define F_T3MINIZIO 112
#define F_T3HDURATA 113
#define F_T3MDURATA 114
#define F_T4HINIZIO 115
#define F_T4MINIZIO 116
#define F_T4HDURATA 117
#define F_T4MDURATA 118
#define F_T5HINIZIO 119
#define F_T5MINIZIO 120
#define F_T5HDURATA 121
#define F_T5MDURATA 122
#define F_T6HINIZIO 123
#define F_T6MINIZIO 124
#define F_T6HDURATA 125
#define F_T6MDURATA 126
#define F_T7HINIZIO 127
#define F_T7MINIZIO 128
#define F_T7HDURATA 129
#define F_T7MDURATA 130
#define F_T8HINIZIO 131
#define F_T8MINIZIO 132
#define F_T8HDURATA 133
#define F_T8MDURATA 134
#define F_T1NUMPERS 135
#define F_T2NUMPERS 136
#define F_T3NUMPERS 137
#define F_T4NUMPERS 138
#define F_T5NUMPERS 139
#define F_T6NUMPERS 140
#define F_T7NUMPERS 141
#define F_T8NUMPERS 142
#define F_FORNITORE 143
#define F_RAGSOC 144
#define F_TIPONUM 145
#define F_TIPOTIP 146
#define F_USE_GIAC_CORRETTA 147
#define F_YEAR 201
#define F_CALENDAR 202

View File

@ -431,6 +431,12 @@ BEGIN
CHECKTYPE SEARCH
END
BOOLEAN F_USE_GIAC_CORRETTA
BEGIN
PROMPT 2 16 "Utilizza la giacenza reale"
FIELD USE_GIAC_CORRETTA
END
ENDPAGE
PAGE "Calendario" -1 -1 65 15

View File

@ -379,7 +379,8 @@ real& TMRP_line::giacenza_attuale(real &g) const
real& TMRP_line::giacenza_attuale(real &g, const TDate &d) const
{
_articolo_giac->read(articolo());
g = _articolo_giac->giacenza_anno(codmagdep(),livgiac(),d.year());
bool use_giac_corretta = ini_get_bool(CONFIG_DITTA, "MR", "USE_GIAC_CORRETTA");
g = _articolo_giac->giacenza_anno(codmagdep(),livgiac(),d.year(), use_giac_corretta);
return g;
}
@ -1179,7 +1180,11 @@ bool TMatResMask::on_field_event(TOperable_field& o, TField_event e, long jolly)
if (jolly == 5) // codice fornitore sullo sheet ordini
{
TSheet_field& so = sfield(F_ORDINI);
so.update_row(so.selected());
TToken_string &row = so.row(so.selected());
switch(e)
{
case fe_modify:
@ -1203,6 +1208,7 @@ bool TMatResMask::on_field_event(TOperable_field& o, TField_event e, long jolly)
find_price(get(F_TIPOCV),get(F_CODCONDV),get(F_CATVEN_CV),
"F", codfor, codart, qta, price);
row.add(price.string(), F_PREZZO - FIRST_FIELD);
so.force_update(so.selected());
}
break;
}
@ -2686,28 +2692,32 @@ bool TMatResPlanning::build_orders()
if (tot > 0L)
{
TProgind pi(tot, TR("Generazione righe ordini..."), false, true);
for (long a = 0; a < tot; a++)
for (long a = 0; a < tot; a++)
{
pi.addstatus(1);
const TMRP_line& line = _articles[a];
const bool prod = is_production_article(line.articolo());
long forn = 0;
long codforn = 0;
if (!prod) // Se l'articolo NON e' di produzione ...
{
TString80 key = line.codimp();
key.rpad(5);
key.rpad(5);
key << line.articolo();
// Cerco il fornitore specifico per l'impianto
forn = atol(cache().get("FIA", key, "I0"));
if (forn == 0L) // Cerco il fornitore di default in anagrafica
codforn = atol(cache().get("FIA", key, "I0"));
if (codforn == 0L) // Cerco il fornitore di default in anagrafica
{
const TRectype& anarec = cache().get(LF_ANAMAG,line.articolo());
forn = anarec.get_long("CODFORN");
codforn = anarec.get_long("CODFORN");
if (codforn == 0L) // Prendo il codice "eventualmente" proveniente dall'ordine
codforn = line.codclifor();
}
}
else
forn = line.codclifor(); // Prendo il codice "eventualmente" proveniente dall'ordine
codforn = line.codclifor(); // Prendo il codice "eventualmente" proveniente dall'ordine
for (int b = line.last_bucket(); b >= 0; b--)
{
@ -2725,13 +2735,14 @@ bool TMatResPlanning::build_orders()
m.add_order_line(forn, line, b);
else
*/
m.add_order_line(forn, line, b);
m.add_order_line(codforn, line, b);
}
}
}
const int orders=sf.items();
if (orders==0)
if (orders==0)
message_box(TR("Nessun ordine da emettere"));
real price, qta;
TCodice_articolo codart;
@ -2739,7 +2750,7 @@ bool TMatResPlanning::build_orders()
{
row->get(F_QUANTITA - FIRST_FIELD,qta);
row->get(F_ARTICOLO - FIRST_FIELD,codart);
const long codcli=row->get_long(F_FORNITORE - FIRST_FIELD);
const long codforn=row->get_long(F_FORNITORE - FIRST_FIELD);
const TRectype& rec=cache().get(LF_DIST, codart);
bool art_prod, art_acq;
@ -2751,7 +2762,7 @@ bool TMatResPlanning::build_orders()
else
{
art_prod = rec.get_bool("ARTPROD");
art_acq = rec.get_bool("ARTACQ") || codcli!=0L;
art_acq = rec.get_bool("ARTACQ") || codforn != 0L;
}
TString4 tipoord = art_prod ? "P" : "F" ;
row->add(tipoord, F_ORD_TYPE - FIRST_FIELD);
@ -2762,7 +2773,7 @@ bool TMatResPlanning::build_orders()
else
tipoord=m.get(F_TIPOCF_CONDV);
find_price(m.get(F_TIPOCV),m.get(F_CODCONDV),m.get(F_CATVEN_CV),
tipoord, codcli, codart, qta, price);
tipoord, codforn, codart, qta, price);
row->add(price.string(), F_PREZZO - FIRST_FIELD);
if (!art_prod || !art_acq)
@ -3466,6 +3477,30 @@ bool TMatResPlanning::emit_orders()
docf++;
}
testata.put(DOC_CAUSMAG, doc->tipo().caus_mov());
const TString4 tipocv = m.get(F_TIPOCV);
if (tipocv == "L" || tipocv == "C" || tipocv == "O")
{
TString cod = m.get(F_CODCONDV);
testata.put(DOC_CATVEN, m.get(F_CATVEN_CV));
if (tipocv == "L")
{
TToken_string key("F"); key.add(forn);
const TString8 codlist = cache().get(LF_CFVEN, key,CFV_CODLIST);
if (codlist.full())
cod = codlist;
testata.put(DOC_CODLIST, cod);
}
else
if (tipocv == "C")
testata.put(DOC_CODCONT, cod);
else
if (tipocv == "O")
testata.put(DOC_CODCAMP, cod);
}
docs.add(key, doc);
}
}

View File

@ -640,7 +640,7 @@ bool TPlanning_mask::carica_documenti()
if (ok)
{
const TString16 liv = livelli_giacenza().enabled() ? riga.get(RDOC_LIVELLO) : "";
const long cli = (ignore_cli && (tn & _Doc_vincoli)) ||ignore_allcli ? 0 : doc.get_long(DOC_CODCF) ;
const long clifor = (ignore_cli && (tn & _Doc_vincoli)) ||ignore_allcli ? 0 : doc.get_long(DOC_CODCF) ;
const TString8 mag = ignore_mag && (tn & _Doc_vincoli) ? "" : riga.get(RDOC_CODMAG);
const TString8 magc = ignore_mag && (tn & _Doc_vincoli) ? "" : riga.get(RDOC_CODMAGC);
const TString8 imp = ignore_imp && (tn & _Doc_vincoli) ? "" : riga.get(RDOC_IMPIANTO);
@ -678,7 +678,7 @@ bool TPlanning_mask::carica_documenti()
if (tn & _Doc_vincoli)
{
line = _constraints.find(cli, art, liv, imp, lin, mag, magc, da_rdoc_key, true);
line = _constraints.find(clifor, art, liv, imp, lin, mag, magc, da_rdoc_key, true);
line->set_mastercode_check(two_level && !distinta_master(art));
}
else
@ -686,21 +686,21 @@ bool TPlanning_mask::carica_documenti()
if (skip)
{
const long p = riga.get_long(RDOC_PRIORITY);
TMSP_constraint* linec = _constraints.find(cli, art, liv, imp, ignore_lin ? "" : lin, mag, magc, da_rdoc_key, false);
TMSP_constraint* linec = _constraints.find(clifor, art, liv, imp, ignore_lin ? "" : lin, mag, magc, da_rdoc_key, false);
if (linec != NULL)
{
if (p > linec->priority())
{
linec->priority(p);
line = _articles.find(cli, art, liv, imp, lin, mag, magc, da_rdoc_key, true);
line = _articles.find(clifor, art, liv, imp, lin, mag, magc, da_rdoc_key, true);
if (line->description().blank())
line->set_description(riga.get(RDOC_DESCR));
}
}
continue;
}
line = _articles.find(cli, art, liv, imp, lin, mag, magc, da_rdoc_key, true);
line = _articles.find(clifor, art, liv, imp, lin, mag, magc, da_rdoc_key, true);
}
if (line->description().blank())
@ -791,7 +791,7 @@ bool TPlanning_mask::carica_documenti()
}
real price;
find_price(get(F_TIPOCV),get(F_CODCONDV),get(F_CATVEN_CV),
get(F_TIPOCF), cli, art, line->qta(buck), price);
get(F_TIPOCF), clifor, art, line->qta(buck), price);
line->price(buck) = price;
}
}

View File

@ -10,6 +10,9 @@
#include <tabutil.h>
#include <reprint.h> // Advanced draw text
#include <clifo.h>
#include <cfven.h>
//***********************************
// Utility
@ -1432,10 +1435,20 @@ void find_price(const TString &tipocv, const TString &codcv, const TString &codc
case 'O':
case 'L':
{
TString8 strcodcf;
TString8 strcodcf;
TString8 cod = codcv;
if (codcf > 0)
{
strcodcf.format("%ld",codcf);
_condv->put_condv(tipocv,codcv,codcatven, tipocf, strcodcf);
if (tipocv == "L")
{
TToken_string key(tipocf); key.add(codcf);
const TString8 codlist = cache().get(LF_CFVEN, key,CFV_CODLIST);
if (codlist.full())
cod = codlist;
}
}
_condv->put_condv(tipocv,cod,codcatven, tipocf, strcodcf);
if (_condv->ricerca(codice, qta))
{
price = _condv->get_prezzo();