Как отлаживать ABAP в трансформациях

Трансформации в SAP BW представляют собой сгенерированные системой программы. Вы, как разработчик, используете стрелочки, если необходимо передать данные без изменений, и пишите небольшие програмы (рутины) для преобразования данных при передаче их от инфопровайдера-источника к инфопровайдру-цели. При активации трансформации система создает программу (уникальную для данной системы) , в которой указана вся логика преобразований. В этой программе система автоматически пропишет все необходимые проверки, учтет разбиение данных по пакетам, сама сформирует типы данных и переменные, которые ей необходимы для работы, отдельно пропишет всю мета-информацию, чтобы вы могли далее импортировать трансформацию в другие системы и т.д. За основу система берет программу RSTRAN_MASTER_TMPL, и подставляет туда нужные значения, например указывает тип исходной таблицы (source_package) и тип целеавой таблицы (result_package). При вызове DTP (Data Transfer Process) произойдет вызов этой программы. SAP дает возможность разработчику внедрить свою логику при обработке информации, например, подготовить данные на входе, изменить данные в момент передачи, удалить лишнее у результата преобразований. Т.к. все это происходит в программе, вам, как разработчику, необходимо понимать, насколько корректно она работает, как она отреагирует на возможные ошибки, все ли случаи были вами учтены. Для отладки программ используется отладчик. Читать далее «Как отлаживать ABAP в трансформациях»

Как создать тестовые данные в исходной системе (SAP ERP)

Для изучения возможностей ABAP компания SAP подготовила пакет разработок S_NWDEMO_BASIS, который поставляется с Netweaver и входит в компонент SAP_BASIS.
Это означает, что вероятнее всего в вашей системе так же есть данный пакет и вы можете проводить свое обучение непосредственно в системе на тех же объектах, что описаны здесь.

Читать далее «Как создать тестовые данные в исходной системе (SAP ERP)»

LOOP AT itab GROUP BY group

В трансформации удобно использовать конструкцию, если нужно прочитать содержимое в пределах семантической группы.

LOOP AT itab GROUP BY 
( comp_code = result_fields-comp_code
  busentity = result_fields-busentity
  rebuilding = result_fields-rebuilding )
REFERENCE INTO DATA (group_ref).
     LOOP AT group_ref ASSIGNING <result_fields>.
     <…>
     ENDLOOP
ENDLOOP.
Если есть записи:
comp_code busentity rebuilding cha1 cha2
1000            1001       1003          abc   xyz
1000            1001       1003          qwe  rty
1000            1001       1003          asd   dfg
1000            1001       1004          zxc   vbn
1000            1001       1004          yui   opp
То в первом цикле мы упакуем в группу group_ref первые три записи, и пройдемся по ним, 
во втором цикле упакуем следующие две записи и пройдемся по ним.

Ошибка при активации DSO

В исходной ERP системе была одна запись из трех миллионов, в котором одно поле было, видимо, null. 
При инициализации дельты эти три миллиона записей из PSA передавались в DSO и активировались там около 3х часов. В итоге на одной записи активация падала со словами что-то вроде «Can’not generate SID for object ‘iOBJ’ value »». Соответственно даже зная объект, отловить эту некорректную запись было не возможно. 
Коллега подсказал такой кусок кода в rule routine к этому объекту:
data: lv_char(60) type c.
lv_char = source_fields-iobj(60).
replace all occurrences of regex ‘[[:cntrl:]]’ in lv_char with ».
result = lv_char.
Что такое ‘[[:cntrl:]]’ мне не понятно, но кривого значения как небывало.