Несколько слов об отладке ABAP программ
Небольшой userhack, который может пригодиться при отладке ABAP программ.
Ах, отладка, бессердечная ты сука, хочется, порой сказать, пародируя почти такую же фразу, сказанную применительно к другой области, но точно описывающей суть происходящего хаоса, который может быть вокруг нас. Ну да хватит лирики.
Описание ситуации
В процессе отладки ABAP программ функциональный консультант, по моему субъективному мнению, чаще всего будет сталкиваться с попыткой разобраться, какие значения были считаны из настроечной таблицы, для последующего сравнения этих значений с другими, которые, в свою очередь, лежат в других настроечных таблицах (или, как нередко встречается, прописаны в коде программы).
Приведу пример из своего опыта. У вас есть Excel файл, который содержит какие-то данные для загрузки в систему SAP. В коде программы выполняется проверка на то, какие значения содержатся в определенном столбце этого файла. Если значение столбца Excel файла соответствует значению, прописанному в коде программы (опять же, хардкод), то выполняется соответствующий кусок программы, иначе - вызывается сообщение об ошибке, либо выполняется другой логический блок программы.
Запускаю программу, и сталкиваюсь с какой-то ошибочной ситуацией. Запускаю отладку, нахожу место, в котором происходит считывание данных из столбца Excel файла с последующим сравнением со значением, прописанным непосредственно в коде программы (безусловно, ABAP программисты будут говорить, что это некорректно, и писать код таким образом нельзя, но, к сожалению, ABAP программы не выбирают, и чаще всего приходится работать с тем, что уже было реализовано).
Значение, считанное из столбца Excel файла, как мне кажется, соответствует значению, указанному в коде программы, но все равно что-то идет не так.
Пример
Для демонстрации представленной выше ситуации, я приведу простенькую программу
REPORT zprog1.
DATA: v1 TYPE c VALUE 'A1',
v2 TYPE c VALUE 'А1'.
IF v1 EQ v2.
WRITE 'true'.
ELSE.
WRITE 'false'.
ENDIF.
Как видите, двум переменным присвоено одно и то же значение. В коде программы выполняется проверка этих значений, и, если они равны, в программе должно быть выведено на экран true, иначе - false. Проверяю
Результат не такой, как ожидалось.
Отладка
Чтобы понять, а действительно ли значения переменных одинаковые, необходимо, находясь в режиме отладки, обращать внимание на их шестнадцатеричное значение.
Как видите, в режиме отладки значение переменных в шестнадцатеричном представлении отличаются, хотя на первый взгляд, переменные равны. То есть в моем примере, значения набраны при помощи различных раскладок клавиатуры.
Будьте внимательны.