diff --git a/src/ve/velib.h b/src/ve/velib.h index 318faa582..948ef1135 100755 --- a/src/ve/velib.h +++ b/src/ve/velib.h @@ -740,7 +740,7 @@ public: const TDate get_property_date(const char * paragraph, const char * property_name, const char * defval = "", int idx = -1) const; const real get_property_real(const char * paragraph, const char * property_name, const char * defval = "", int idx = -1) const; - const TString & retrieve_original_row_field(); + const TString & retrieve_original_row_field(const TString & rif_fld); TRiga_documento(TDocumento* doc, const char* tipo = NULL); TRiga_documento(const TRiga_documento & row); diff --git a/src/ve/velib02.cpp b/src/ve/velib02.cpp index 603fefc10..90a83e49f 100755 --- a/src/ve/velib02.cpp +++ b/src/ve/velib02.cpp @@ -1896,7 +1896,7 @@ const real TRiga_documento::get_property_real(const char * paragraph, const char return r; } -const TString & TRiga_documento::retrieve_original_row_field() +const TString & TRiga_documento::retrieve_original_row_field(const TString & rif_fld) { TString & val = get_tmp_string(4096); @@ -1914,7 +1914,6 @@ const TString & TRiga_documento::retrieve_original_row_field() FOR_EACH_ARRAY_ROW(row_refs, r, row_ref) { const TRectype& orig_row = cache().get(LF_RIGHEDOC, *row_ref); // ORC | 2020 | D | 3 | 8 - const TString & rif_fld = get_property_str("", RIF_FLD_ROW); TRecfield riffld((TRectype &)orig_row, rif_fld); const TString rifval = (const char *)riffld; diff --git a/src/ve/velib03.cpp b/src/ve/velib03.cpp index cd78f0506..2b551d370 100755 --- a/src/ve/velib03.cpp +++ b/src/ve/velib03.cpp @@ -1580,9 +1580,16 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const } FOR_EACH_SELF_PHYSICAL_RDOC(i, rdoc) { - const TString & row_field = rdoc->get_property_str("", RIF_FLD_UPDATE_ROW); - if (row_field.full()) - rdoc->put(row_field, rdoc->retrieve_original_row_field()); + TToken_string row_fields = rdoc->get_property_str("", RIF_FLD_UPDATE_ROW); + TToken_string rif_fields = rdoc->get_property_str("", RIF_FLD_ROW); + + if (row_fields.full()) + FOR_EACH_TOKEN(row_fields, f) + { + const TString rif_fld = rif_fields.get(); + + rdoc->put(f, rdoc->retrieve_original_row_field(rif_fld)); + } } err = TMultiple_rectype::write_rewrite(f, re); diff --git a/src/ve/velib06a.cpp b/src/ve/velib06a.cpp index 2f155901b..0d348e2a8 100755 --- a/src/ve/velib06a.cpp +++ b/src/ve/velib06a.cpp @@ -3671,7 +3671,15 @@ bool multi_row_rif_handler(TMask_field& f, KEY key) const int current_doc_row = sh.selected() + 1; TRiga_documento & row = mask.doc()[current_doc_row]; - f.set(row.retrieve_original_row_field()); + const TToken_string rif_fields = row.get_property_str("", RIF_FLD_ROW); + int nfield = rif_fields.find(f.field()->name()); + + if (nfield >= 0) + { + const TString rif_fld = rif_fields.get(nfield); + + f.set(row.retrieve_original_row_field(rif_fld)); + } } return true; } \ No newline at end of file