无法打印sap abap中do循环内的变量
我正在编写一个简单的程序,作为sap abap workbench中的任务 使用无法打印sap abap中do循环内的变量,abap,Abap,我正在编写一个简单的程序,作为sap abap workbench中的任务 使用do enddo循环生成表。 在那里,我在do循环中使用了变量m,它被声明为m type I value 1。 但是它没有被打印出来,请帮忙 *&---------------------------------------------------------------------* *& Report Z_BASIC_OUTPUT_PATTERN *& *&-----------
do enddo
循环生成表。
在那里,我在do循环中使用了变量m,它被声明为m type I value 1
。
但是它没有被打印出来,请帮忙
*&---------------------------------------------------------------------*
*& 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.
下面是输出()
让我们一步一步地看看你在做什么:
WRITE /10 '|'.
在位置10处写一条线
WRITE : m .
写入m
m
是一个整数,输出长度为10个字符(可能我错了,但它比5个字符长)。数字向右对齐。因此,位置21现在是一个数字
WRITE 15'|'.
不,您返回位置15并开始新的输出。下一个write
命令将覆盖您的号码
一种可能的解决方案:限制输出的长度:
WRITE : (4) m .
按照注释中的建议:如果将
WRITE 15'|'。
替换为WRITE/15'|'。
将得到以下结果:
在打印出数字后,您会看到一行新行,数字与主题文本位于同一位置。换句话说:如果没有新行,主体将覆盖数字
如果您使用WRITE:(4)m.限制号码的位置,您将得到想要的解决方案:
我建议不要总是写和更改位置,而是一个接一个地写元素,每个字段都有自己的输出长度
例如:
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.
备注:空格
只是一个空占位符,直到您获得列的真实数据。修改循环如下:
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
变量。必须增加m的空间;如果您写入一个整数,SAP将为变量保留10个空格,并将其右对齐写入。这意味着m变量被science/math/english单词覆盖。能否将WRITE 15'|'。
替换为WRITE/15'|'。
?然后,您可以查看是否打印了号码以及同一位置上是否有其他文字。如果我们将15替换为/15,则会绘制出不正确的表格。是的,但这可以确定问题。额外的换行不是解决方案,而是检查结果的一种可能性。