Добрый день!
BW 3.5
Есть следующая проблема.
Признак объявлен как цель данных, в него через гибкое обновление загружаются данные.
Часть показателей/признаков в цели данных должна обновляться только по условию, т.е. если условие не срабатывает, то в признаке должно остаться прежнее значение. Т.о. метод SKIP_RECORDS (и его ABAP-аналоги) не применим.
Пытался сделать следующее. Режим обновления - перезапись, для каждого условно-обновляемого показателя обновление по подпрограмме типа:
Code:
PROGRAM UPDATE_ROUTINE.
*$*$ begin of global - insert your declaration only below this line *-*
* TABLES: ...
* DATA: ...
*$*$ end of global - insert your declaration only before this line *-*
*
………………
*$*$ begin of routine - insert your code only below this line *-*
* fill the internal table "MONITOR", to make monitor entries
if FLAG = 0.
RETURNCODE = 1.
exit.
else.
RESULT = COMM_STRUCTURE-/BIC/ZDUMMY.
RETURNCODE = 0.
endif.
* if the returncode is not equal zero, the result will not be updated
* RETURNCODE = 0.
* if abort is not equal zero, the update process will be canceled
ABORT = 0.
*$*$ end of routine - insert your code only before this line *-*
*
При запуске загрузки вылетает с сообщением:
Code:
В подпрогр. обновления в перезаписанном реж. КОД ВОЗВРАТА<> 0 недопуст.
№ сообщения RSAU492
Diagnosis
The return code was set to <> 0 in routine 'XXXXXXXXXX', but the corresponding data field is updated with MOVE. You therefore can not prevent the update of a single data field for certain key values.
Вобщем, по отдельности поля обновлять не хочет

Подскажите, можно ли реализовать желаемое каким-либо еще способом.
Остались еще экстремальные варианты (типа перед обновлением считать текущее значение в ЦД), но хотелось бы обойтись без них...