Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法打印sap abap中do循环内的变量_Abap - Fatal编程技术网

无法打印sap abap中do循环内的变量

无法打印sap abap中do循环内的变量,abap,Abap,我正在编写一个简单的程序,作为sap abap workbench中的任务 使用do enddo循环生成表。 在那里,我在do循环中使用了变量m,它被声明为m type I value 1。 但是它没有被打印出来,请帮忙 *&---------------------------------------------------------------------* *& Report Z_BASIC_OUTPUT_PATTERN *& *&-----------

我正在编写一个简单的程序,作为sap abap workbench中的任务 使用
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,则会绘制出不正确的表格。是的,但这可以确定问题。额外的换行不是解决方案,而是检查结果的一种可能性。