2016-03-16 3 views
0

Я пишу простую программу, заданную как назначение в workbench sap abap для генерации таблицы с использованием цикла do enddo. Там я использовал переменную m внутри цикла do, которая объявлена ​​как m type i value 1. , но его не печататься, пожалуйста, помогите.Невозможно напечатать переменную внутри do loop в sap abap

*&---------------------------------------------------------------------* 
*& Report Z_BASIC_OUTPUT_PATTERN 
*& 
*&---------------------------------------------------------------------* 
*& 
*& 
*&---------------------------------------------------------------------* 

REPORT z_basic_output_pattern NO STANDARD PAGE HEADING LINE-COUNT 
100(4). 
DATA m TYPE i VALUE 1 . 
. 
WRITE 40'student marksheet'. 
WRITE 73'date:'. 
WRITE /73'time:'. 
SKIP 3 . 
WRITE 10'student information :-'. 
ULINE /10(19). 
WRITE /10'student roll no.:'. 
WRITE /10'student class :'. 
WRITE /10'student section :'. 
WRITE /10'student name :'. 
SKIP 2. 
ULINE 10(33). 
WRITE /10'|'. 
WRITE'subject details'. 
WRITE 42'|'. 
ULINE /10(33). 
WRITE /10'|'. 
WRITE'sno.'. 
WRITE 15'|'. 
WRITE'subject'. 
WRITE 24'|'. 
WRITE'marks'. 
WRITE 30'|'. 
WRITE'grade'. 
WRITE 42'|'. 
ULINE /10(33). 
DO 3 TIMES . 
    WRITE /10 '|'. 
    WRITE : m . 
    WRITE 15'|'. 
    IF sy-index = '1' . 
    WRITE 'maths'. 
    ELSEIF sy-index = '2'. 
    WRITE 'science'. 
    ELSE. 
    WRITE 'english'. 
    ENDIF. 
    WRITE 24 '|'. 
    WRITE 30 '|'. 
    WRITE 42'|'. 
    ULINE /10(33). 
    m = m + 1. 
ENDDO. 

ниже выводится (output of the program)

output of the program

ответ

0

Давайте шаг за шагом смотреть то, что вы делаете:

WRITE /10 '|'. 

Написать бар в положении 10 ,.

WRITE : m . 

m. m - целое число, а выход длиной 10 символов (возможно, я ошибаюсь, но длиннее 5 символов). Номер выравнивается вправо. Итак, на позиции 21 теперь число.

WRITE 15'|'. 

Нет, вы возвращаетесь в позицию 15 и начинаете новый выход. Следующая команда write перезаписывает ваш номер.

Возможное решение: ограничить длину выхода:

WRITE : (4) m . 

Как было рекомендовано в комментариях: Если заменить WRITE 15 '|'. с WRITE /15 '|'. вы получите следующий результат:

enter image description here

Вы получаете новую строку после распечатки номера, и вы видите, что номер находится на том же месте, что и текст предмета. Другими словами: без новой строки объект перезаписывает номер.

Если ограничить место для числа с WRITE : (4) m . вы получите желаемое решение:

enter image description here


Вместо того чтобы писать и изменить всегда позицию я woudl рекомендую писать элементы один за другое и каждое поле получает его собственную длину вывода.

Пример:

DATA: subject TYPE string. 
DO 3 TIMES . 
* Get the variable text 
    CASE sy-index. 
    WHEN '1'. 
     subject = 'maths'. 
    WHEN '2'. 
     subject = 'science'. 
    WHEN OTHERS. 
     subject = 'english'. 
    ENDCASE. 
* And now the central output part: 
    WRITE: /10 '|' NO-GAP, 
     (3) m, '|', 
     (6) subject, '|', 
     (3) space, '|', 
     (9) space, '|'. 
    ULINE /10(33). 
    m = m + 1. 
ENDDO. 

Примечание: space просто пустой заполнитель, пока вы не реальные данные для столбцов.

+0

спасибо, но это не работает. – pari

+1

Можете вы заменить 'WRITE 15 '|' .' с' WRITE/15 '|' .'? Затем вы можете увидеть, напечатан ли номер, и если есть другой текст в том же месте. – knut

+0

, если мы заменим 15 на/15, тогда сломанная таблица будет вычеркнута, будет неправильно. – pari

0

Изменить петлю так:

DO 3 TIMES . 
WRITE /10 '|'. 
    WRITE 4: m . 
    WRITE 15'|'. 
    IF sy-index = '1' . 
    WRITE 'maths'. 
    ELSEIF sy-index = '2'. 
    WRITE 'science'. 
    ELSE. 
    WRITE 'english'. 
    ENDIF. 
    WRITE 10 '|'. 
    WRITE 24 '|'. 
    WRITE 30 '|'. 
    WRITE 42'|'. 
    ULINE /10(33). 
    m = m + 1. 
ENDDO. 

Видимо одна линия перекрывает переменную m.

0

Вы должны увеличить пространство для m; если вы пишете целое число, SAP резервирует 10 пробелов для переменной и записывает ее правомерно. Это означает, что переменная m заменяется словом science/math/english.

Смежные вопросы