Patch level : 4.0 451
Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 650 git-svn-id: svn://10.65.10.50/trunk@14160 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									ab43b2cf08
								
							
						
					
					
						commit
						53330f618f
					
				
							
								
								
									
										988
									
								
								ve/velib.h
									
									
									
									
									
								
							
							
						
						
									
										988
									
								
								ve/velib.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -47,29 +47,6 @@ bool TOriginal_row_mask::on_key(KEY key)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TOriginal_row_mask : public TAutomask
 | 
					 | 
				
			||||||
{ 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
protected:
 | 
					 | 
				
			||||||
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
					 | 
				
			||||||
	virtual bool on_key(KEY key);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
  TOriginal_row_mask() : TAutomask("ve0100c") { }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool TOriginal_row_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool TOriginal_row_mask::on_key(KEY key)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (key == K_SHIFT + K_F12)
 | 
					 | 
				
			||||||
		enable(-1);
 | 
					 | 
				
			||||||
	return TAutomask::on_key(key);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TDocumento_mask::TDocumento_mask(const char* td)
 | 
					TDocumento_mask::TDocumento_mask(const char* td)
 | 
				
			||||||
							 : TVariable_mask(), _progs_page(-1),
 | 
												 : TVariable_mask(), _progs_page(-1),
 | 
				
			||||||
								 _condv(NULL), _smartcard(NULL),
 | 
													 _condv(NULL), _smartcard(NULL),
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										337
									
								
								ve/velib06a.cpp
									
									
									
									
									
								
							
							
						
						
									
										337
									
								
								ve/velib06a.cpp
									
									
									
									
									
								
							@ -348,7 +348,6 @@ bool data_hndl( TMask_field& field, KEY key )
 | 
				
			|||||||
				return field.error_box("Data documento inferiore alla data del documento precedente");
 | 
									return field.error_box("Data documento inferiore alla data del documento precedente");
 | 
				
			||||||
		} 
 | 
							} 
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -709,342 +708,6 @@ bool pricerange_handler(TMask_field& f, KEY key )
 | 
				
			|||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
static bool __in_handler = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int sort_sheet(const TObject** a, const TObject** b)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	TToken_string * t1 = (TToken_string *) *a;
 | 
					 | 
				
			||||||
	TToken_string * t2 = (TToken_string *) *b;
 | 
					 | 
				
			||||||
	const char * a1 = t1->get(1);
 | 
					 | 
				
			||||||
	const char * a2 = t2->get(1);
 | 
					 | 
				
			||||||
	int cmp = strcmp(a1, a2);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (cmp == 0)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		TDate d1(t1->get(2));
 | 
					 | 
				
			||||||
		TDate d2(t2->get(2));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		cmp = d2 - d1;
 | 
					 | 
				
			||||||
		if (cmp == 0)
 | 
					 | 
				
			||||||
			return t2->get_int(8) - t1->get_int(8);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return cmp;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void search_price(TMask_field& f, KEY key )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	TMask& row_mask = f.mask();   
 | 
					 | 
				
			||||||
  TSheet_field& sh = *row_mask.get_sheet();
 | 
					 | 
				
			||||||
  TDocumento_mask& mask = (TDocumento_mask &)sh.mask();
 | 
					 | 
				
			||||||
	TArray_sheet sheet(0, 3, -1, 16, "Ricerca Prezzi", 
 | 
					 | 
				
			||||||
										 "N.ro doc.|Codice articolo@20|Data@10|Prezzo@18P|Quantità|Sconto@10|Numerazione@18|Tipo Documento@18", 0, 1);
 | 
					 | 
				
			||||||
	TString_array & el = sheet.rows_array();
 | 
					 | 
				
			||||||
	TString form;
 | 
					 | 
				
			||||||
	TRelation * rel = new TRelation(LF_DOC);
 | 
					 | 
				
			||||||
	TRectype from(rel->curr());
 | 
					 | 
				
			||||||
	TRectype to(rel->curr());
 | 
					 | 
				
			||||||
	TDate datadoc = mask.get_date(F_DATADOC);
 | 
					 | 
				
			||||||
	const long codcf = mask.get_long(F_CODCF);
 | 
					 | 
				
			||||||
	const TString16 numdoc(mask.get(F_NDOC));
 | 
					 | 
				
			||||||
	const int last_anno = mask.get_int(F_ANNO);
 | 
					 | 
				
			||||||
	const int current_doc_row = sh.selected() + 1;
 | 
					 | 
				
			||||||
	const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
 | 
					 | 
				
			||||||
	TToken_string nums(((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_nums());
 | 
					 | 
				
			||||||
	const TString& tipocf = mask.get(F_TIPOCF);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	from.put(DOC_TIPOCF, tipocf);
 | 
					 | 
				
			||||||
	to.put(DOC_TIPOCF, tipocf);
 | 
					 | 
				
			||||||
	from.put(DOC_CODCF, codcf);
 | 
					 | 
				
			||||||
	to.put(DOC_CODCF, codcf);
 | 
					 | 
				
			||||||
	from.put(DOC_PROVV, "D");
 | 
					 | 
				
			||||||
	to.put(DOC_PROVV, "D");
 | 
					 | 
				
			||||||
	from.put(DOC_ANNO, first_anno);
 | 
					 | 
				
			||||||
	to.put(DOC_ANNO, last_anno);
 | 
					 | 
				
			||||||
	to.put(DOC_DATADOC, datadoc);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (nums.empty())
 | 
					 | 
				
			||||||
		nums =  mask.get(F_CODNUM);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	TString8 first_num(nums.get(0));
 | 
					 | 
				
			||||||
	TString8 last_num(first_num);;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	form << "((CODNUM==\"" << first_num << "\")";
 | 
					 | 
				
			||||||
	for (const char * s = nums.get(); s && *s; s = nums.get()) 
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (first_num > s)
 | 
					 | 
				
			||||||
			first_num = s;
 | 
					 | 
				
			||||||
		if (last_num < s)
 | 
					 | 
				
			||||||
			last_num = s;
 | 
					 | 
				
			||||||
		form << "||(CODNUM==\"" << s << "\")";
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	form << ")";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	TCursor cur(rel, form, 2, &from, &to);
 | 
					 | 
				
			||||||
	const int items = cur.items();
 | 
					 | 
				
			||||||
	cur.freeze();
 | 
					 | 
				
			||||||
	TRecord_array r(LF_RIGHEDOC, RDOC_NRIGA);
 | 
					 | 
				
			||||||
	TRectype rec(LF_RIGHEDOC);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for(cur = 0L; cur.pos() < items; ++cur)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		const TString16 data(cur.curr().get(DOC_DATADOC));
 | 
					 | 
				
			||||||
		const TString80	num(cache().get("%NUM", cur.curr().get(DOC_CODNUM), "S0"));
 | 
					 | 
				
			||||||
		const TString80	tipo(cache().get("%TIP", cur.curr().get(DOC_TIPODOC), "S0"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		rec.zero();
 | 
					 | 
				
			||||||
		rec.put(RDOC_PROVV, cur.curr().get(DOC_PROVV));
 | 
					 | 
				
			||||||
		rec.put(RDOC_ANNO, cur.curr().get(DOC_ANNO));
 | 
					 | 
				
			||||||
		rec.put(RDOC_CODNUM, cur.curr().get(DOC_CODNUM));
 | 
					 | 
				
			||||||
		rec.put(RDOC_NDOC, cur.curr().get(DOC_NDOC));
 | 
					 | 
				
			||||||
		r.read(rec);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		int last_row = r.last_row();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		for (int i = r.first_row(); i <= last_row; i = r.succ_row(i))
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			const TRectype & rdoc = r.row(i);
 | 
					 | 
				
			||||||
			const TString & codart = rdoc.get(RDOC_CODART);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (codart.not_empty())
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				TToken_string row;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				row.add(rdoc.get(RDOC_NDOC));
 | 
					 | 
				
			||||||
				row.add(codart);
 | 
					 | 
				
			||||||
				row.add(data);
 | 
					 | 
				
			||||||
				row.add(rdoc.get(RDOC_PREZZO));
 | 
					 | 
				
			||||||
				row.add(rdoc.get(RDOC_QTA));
 | 
					 | 
				
			||||||
				row.add(rdoc.get(RDOC_SCONTO));
 | 
					 | 
				
			||||||
				row.add(num);
 | 
					 | 
				
			||||||
				row.add(tipo);
 | 
					 | 
				
			||||||
				row.add(rdoc.get(RDOC_NRIGA));
 | 
					 | 
				
			||||||
				el.add(row);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	el.TArray::sort(sort_sheet);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const int max_rows = ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).max_rows_art();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (max_rows > 0)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		const int items = el.items();
 | 
					 | 
				
			||||||
		TString80 last_cod;
 | 
					 | 
				
			||||||
		long last_doc = 0L;
 | 
					 | 
				
			||||||
		real last_price(ZERO);
 | 
					 | 
				
			||||||
		int count = 0;
 | 
					 | 
				
			||||||
		for (int i = 0 ; i < items; i++)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			const TString & codart = el.row(i).get(1);
 | 
					 | 
				
			||||||
			long ndoc = el.row(i).get_long(0);
 | 
					 | 
				
			||||||
			real price(el.row(i).get(3));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (codart != last_cod)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				last_cod = codart;
 | 
					 | 
				
			||||||
				last_doc = ndoc;
 | 
					 | 
				
			||||||
				last_price = price;
 | 
					 | 
				
			||||||
				count = 1;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				if (ndoc == last_doc && price == last_price)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					el.destroy(i);
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				else
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					last_doc = ndoc;
 | 
					 | 
				
			||||||
					last_price = price;
 | 
					 | 
				
			||||||
					count++;
 | 
					 | 
				
			||||||
					if (count > max_rows)
 | 
					 | 
				
			||||||
						el.destroy(i);
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		el.pack();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (sheet.run() == K_ENTER)
 | 
					 | 
				
			||||||
	{              
 | 
					 | 
				
			||||||
		__in_handler = true;
 | 
					 | 
				
			||||||
		const TString & xx = sheet.row(-1).get(3);
 | 
					 | 
				
			||||||
		row_mask.set(FR_PREZZO, xx);
 | 
					 | 
				
			||||||
		const TString & codart_sel = sheet.row(-1).get(1);
 | 
					 | 
				
			||||||
		row_mask.set(FR_CODART, codart_sel, 3);
 | 
					 | 
				
			||||||
		row_mask.field(FR_CODART).set_dirty(false);
 | 
					 | 
				
			||||||
		const TString & prezzo = sheet.row(-1).get(3);
 | 
					 | 
				
			||||||
		row_mask.set(FR_PREZZO, prezzo);
 | 
					 | 
				
			||||||
		const TString & sconto = sheet.row(-1).get(5);
 | 
					 | 
				
			||||||
		row_mask.set(FR_SCONTO, sconto);
 | 
					 | 
				
			||||||
		__in_handler = false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void search_price_article(TMask_field& f, KEY key )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	TMask& row_mask = f.mask();   
 | 
					 | 
				
			||||||
  TSheet_field& sh = *row_mask.get_sheet();
 | 
					 | 
				
			||||||
  TDocumento_mask& mask = (TDocumento_mask &)sh.mask();
 | 
					 | 
				
			||||||
	const int current_doc_row = sh.selected() + 1;      
 | 
					 | 
				
			||||||
	const TString16 numdoc(mask.get(F_NDOC));
 | 
					 | 
				
			||||||
	const TString80 codart(row_mask.get(FR_CODART));
 | 
					 | 
				
			||||||
	TDate datadoc = mask.get_date(F_DATADOC);
 | 
					 | 
				
			||||||
	const char tipocf = mask.get(F_TIPOCF)[0];
 | 
					 | 
				
			||||||
	const TString16 codcf = mask.get(F_CODCF);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	TToken_string nums(((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_nums());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (nums.empty())
 | 
					 | 
				
			||||||
		nums =  mask.get(F_CODNUM);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	TString8 first_num(nums.get(0));
 | 
					 | 
				
			||||||
	TString8 last_num(first_num);;
 | 
					 | 
				
			||||||
	TString form;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	form << "(33->TIPOCF==\"" << tipocf << "\")&&(33->CODCF==\"" << (const char *)codcf << "\")&&(ANSI(33->DATADOC)<=\"" << datadoc.string(ANSI) << "\")" << "&&((CODNUM==\"" << first_num << "\")";
 | 
					 | 
				
			||||||
	for (const char * s = nums.get(); s && *s; s = nums.get()) 
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (first_num > s)
 | 
					 | 
				
			||||||
			first_num = s;
 | 
					 | 
				
			||||||
		if (last_num < s)
 | 
					 | 
				
			||||||
			last_num = s;
 | 
					 | 
				
			||||||
		form << "||(CODNUM==\"" << s << "\")";
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	form << ")";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	TRelation rel(LF_RIGHEDOC);
 | 
					 | 
				
			||||||
	TRectype from(rel.curr());
 | 
					 | 
				
			||||||
	TRectype to(rel.curr());
 | 
					 | 
				
			||||||
	rel.add(LF_DOC, "PROVV==PROVV|ANNO=ANNO|CODNUM==CODNUM|NDOC==NDOC");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const int last_anno = mask.get_int(F_ANNO);
 | 
					 | 
				
			||||||
	const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	from.put(RDOC_CODART, codart);
 | 
					 | 
				
			||||||
	from.put(RDOC_CODNUM, first_num);
 | 
					 | 
				
			||||||
	from.put(RDOC_ANNO, first_anno);
 | 
					 | 
				
			||||||
	from.put(RDOC_PROVV, "D");
 | 
					 | 
				
			||||||
	to.put(RDOC_CODART, codart);
 | 
					 | 
				
			||||||
	to.put(RDOC_CODNUM, last_num);
 | 
					 | 
				
			||||||
	to.put(RDOC_ANNO, last_anno);
 | 
					 | 
				
			||||||
	to.put(RDOC_PROVV, "D");
 | 
					 | 
				
			||||||
	TSorted_cursor cur(&rel, "33->DATADOC-|CODNUM|NDOC-", form, 5, &from, &to);
 | 
					 | 
				
			||||||
	cur.items();
 | 
					 | 
				
			||||||
	cur.freeze();
 | 
					 | 
				
			||||||
	cur.relation()->add("%NUM", "CODTAB==CODNUM", 1, 0, 201);
 | 
					 | 
				
			||||||
	cur.relation()->add("%TIP", "CODTAB==TIPODOC", 1, LF_DOC, 202);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	TCursor_sheet sheet(&cur, "NDOC|CODART|33->DATADOC|PREZZO|QTA|SCONTO|-201->S0|-202->S0",
 | 
					 | 
				
			||||||
											"Ricerca Prezzi",
 | 
					 | 
				
			||||||
											"N.ro doc.|Codice articolo@20|Data@10|Prezzo@18P|Quantità|Sconto@10|Numerazione@18|Tipo Documento@18",
 | 
					 | 
				
			||||||
											0, 4);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	sheet.add_string (101, 0, "Codice Articolo ", 2, 1, 20, "D");
 | 
					 | 
				
			||||||
	sheet.add_string (102, 0, "Descrizione     ", 2, 3, 50, "D");
 | 
					 | 
				
			||||||
	sheet.set(101, codart);
 | 
					 | 
				
			||||||
	sheet.set(102, cache().get(LF_ANAMAG, codart, "DESCR"));
 | 
					 | 
				
			||||||
	if (sheet.run() == K_ENTER)
 | 
					 | 
				
			||||||
	{              
 | 
					 | 
				
			||||||
		__in_handler = true;
 | 
					 | 
				
			||||||
		row_mask.set(FR_CODART, codart, 3);
 | 
					 | 
				
			||||||
		row_mask.field(FR_CODART).set_dirty(false);
 | 
					 | 
				
			||||||
		__in_handler = false;
 | 
					 | 
				
			||||||
		const TString & prezzo = sheet.row(-1).get(3);
 | 
					 | 
				
			||||||
		row_mask.set(FR_PREZZO, prezzo);
 | 
					 | 
				
			||||||
		const TString & sconto = sheet.row(-1).get(5);
 | 
					 | 
				
			||||||
		row_mask.set(FR_SCONTO, sconto);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool search_price_handler(TMask_field& f, KEY key )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	TMask& row_mask = f.mask();   
 | 
					 | 
				
			||||||
	TSheet_field& sh = *row_mask.get_sheet();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (key == K_F8 && !sh.sheet_mask().is_running())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		const TString & codart = row_mask.get(FR_CODART);
 | 
					 | 
				
			||||||
		if (codart.empty())
 | 
					 | 
				
			||||||
			search_price(f, key);
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			search_price_article(f,key);
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		if ((key == K_TAB && f.focusdirty()))
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		  TDocumento_mask& mask = (TDocumento_mask &)sh.mask();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			const TString80 codart(row_mask.get(FR_CODART));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (!__in_handler && codart.not_empty() && row_mask.get(FR_PREZZO).empty())
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				TDate datadoc = mask.get_date(F_DATADOC);
 | 
					 | 
				
			||||||
				const char tipocf = mask.get(F_TIPOCF)[0];
 | 
					 | 
				
			||||||
				const TString16 codcf = mask.get(F_CODCF);
 | 
					 | 
				
			||||||
				const int current_doc_row = sh.selected() + 1;      
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
				TToken_string nums(((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_nums());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				if (nums.empty())
 | 
					 | 
				
			||||||
					nums =  mask.get(F_CODNUM);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				TString8 first_num(nums.get(0));
 | 
					 | 
				
			||||||
				TString8 last_num(first_num);;
 | 
					 | 
				
			||||||
				
 | 
					 | 
				
			||||||
				TString form;
 | 
					 | 
				
			||||||
				form << "(33->TIPOCF==\"" << tipocf << "\")&&(33->CODCF==\"" << (const char *)codcf << "\")&&(ANSI(33->DATADOC)<=\"" << datadoc.string(ANSI) << "\")" << "&&((CODNUM==\"" << first_num << "\")";
 | 
					 | 
				
			||||||
				for (const char * s = nums.get(); s && *s; s = nums.get()) 
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					if (first_num > s)
 | 
					 | 
				
			||||||
						first_num = s;
 | 
					 | 
				
			||||||
					if (last_num < s)
 | 
					 | 
				
			||||||
						last_num = s;
 | 
					 | 
				
			||||||
					form << "||(CODNUM==\"" << s << "\")";
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				form << ")";
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
				TRelation rel(LF_RIGHEDOC);
 | 
					 | 
				
			||||||
				TRectype from(rel.curr());
 | 
					 | 
				
			||||||
				TRectype to(rel.curr());
 | 
					 | 
				
			||||||
				rel.add(LF_DOC, "PROVV==PROVV|ANNO=ANNO|CODNUM==CODNUM|NDOC==NDOC");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				const int last_anno = mask.get_int(F_ANNO);
 | 
					 | 
				
			||||||
				const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				from.put(RDOC_CODART, codart);
 | 
					 | 
				
			||||||
				from.put(RDOC_CODNUM, first_num);
 | 
					 | 
				
			||||||
				from.put(RDOC_ANNO, first_anno);
 | 
					 | 
				
			||||||
				from.put(RDOC_PROVV, "D");
 | 
					 | 
				
			||||||
				to.put(RDOC_CODART, codart);
 | 
					 | 
				
			||||||
				to.put(RDOC_CODNUM, last_num);
 | 
					 | 
				
			||||||
				to.put(RDOC_ANNO, last_anno);
 | 
					 | 
				
			||||||
				to.put(RDOC_PROVV, "D");
 | 
					 | 
				
			||||||
				
 | 
					 | 
				
			||||||
				TSorted_cursor cur(&rel, "33->DATADOC-|CODNUM|NDOC-", "", 5, &from, &to);
 | 
					 | 
				
			||||||
				cur.setfilter(form, true);
 | 
					 | 
				
			||||||
				if (cur.items() > 0L)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					cur = 0L;
 | 
					 | 
				
			||||||
					__in_handler = true;
 | 
					 | 
				
			||||||
					row_mask.set(FR_CODART, codart, 3);
 | 
					 | 
				
			||||||
					row_mask.field(FR_CODART).set_dirty(false);
 | 
					 | 
				
			||||||
					__in_handler = false;
 | 
					 | 
				
			||||||
					const TString & prezzo = cur.curr().get(RDOC_PREZZO);
 | 
					 | 
				
			||||||
					row_mask.set(FR_PREZZO, prezzo);
 | 
					 | 
				
			||||||
					const TString & sconto = cur.curr().get(RDOC_SCONTO);
 | 
					 | 
				
			||||||
					row_mask.set(FR_SCONTO, sconto);
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	return codart_handler( f, key);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static bool __in_handler = false;
 | 
					static bool __in_handler = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int sort_sheet(const TObject** a, const TObject** b)
 | 
					int sort_sheet(const TObject** a, const TObject** b)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user