2015 Jul 28 9:44 AM
hi,
there ara so many strange abap errors when i created abap ALV report in 4.6C. I can not find reason for them . I copied a simple program's code which is existing in 4.6C and is active , then i pasted the code into a new abap program,and i clicked "check". then abap error was happened. there are two examples. This program is actually syntactically correct !!!
what's reason for them?
Regards,
hiphone
2015 Jul 28 10:05 AM
Hi Hiphone,
There might be some unicode characers or 2-bytes spaces(eg. Chinese spaces) in your code.
You can try to use English type method again.
Or you can attach your code here, so we can help to check.
2015 Jul 29 1:32 AM
Hi Hongtao,
The code is existing in 4.6C system and is active with no error. when I used the same code to create a new program ,strange abap error happened. I will attach it here.
*&----------------------------------------------------------------------**& Report ZFI005*&----------------------------------------------------------------------**&*-----------------------------------------------------------------------*
REPORT zfi005.
TABLES:ekko,ekpo,ekbe.TYPE-POOLS:slis.
*---------------------------------------------------------------------** 定义用于ALV显示的全局变量 **---------------------------------------------------------------------*DATA: ls_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gs_layout TYPE slis_layout_alv,
git_listheader TYPE slis_t_listheader, "ALV 表头
git_events TYPE slis_t_event, "ALV 事件
g_repid LIKE sy-repid.DATA: g_title TYPE lvc_title, "ALV title
v_stru_disvar TYPE disvariant. "ALV 显示格式
*---------------------------------------------------------------------** 表结构&内表&变量 **---------------------------------------------------------------------*TYPES: BEGIN OF ty_alv, "输出用内表
werks TYPE ekpo-werks, "工厂
budat TYPE ekbe-budat, "过账日期
ebeln TYPE ekko-ebeln, "采购订单号
ebelp TYPE ekpo-ebelp, "项目号
belnr TYPE ekbe-belnr, "物料凭证编号
gjahr TYPE ekbe-gjahr, "物料凭证年度
matnr TYPE ekpo-matnr, "物料
maktx TYPE makt-maktx, "物料描述
scbs TYPE char8,
wwbs TYPE char8,
meins TYPE mara-meins, "计量单位
menge TYPE ekbe-menge, "收货数量
dmbtr TYPE mseg-dmbtr, "库存金额
dmbtr1 TYPE ekbe-dmbtr, "按本位币金额
kbetr TYPE konp-kbetr, "采购信息记录价格
knumh TYPE a017-knumh,
bzdj TYPE p DECIMALS 5, "标准单价
cgdj TYPE p DECIMALS 5, "采购单价
cydj TYPE p DECIMALS 5, "差异单价
bfbi TYPE p DECIMALS 5, "差异百分比
lifnr TYPE ekko-lifnr, "供应商
name1 TYPE lfa1-name1, "供应商名称
wrbtr TYPE ekbe-wrbtr, "凭证货币金额
waers TYPE ekbe-waers, "货币码
ernam TYPE ekko-ernam, "创建者
shkzg TYPE ekbe-shkzg, "借贷标识
vgabe TYPE ekbe-vgabe, "交易/事件类型
bwart TYPE ekbe-bwart, "移动类型
END OF ty_alv.
TYPES: BEGIN OF ty_ekko,
ebeln TYPE ekko-ebeln, "采购订单号
bukrs TYPE ekko-bukrs, "公司代码
aedat TYPE ekko-aedat, "记录的创建日期
lifnr TYPE ekko-lifnr, "供应商
ekorg TYPE ekko-ekorg, "采购组织
ekgrp TYPE ekko-ekgrp, "采购组
bedat TYPE ekko-bedat, "采购凭证日期
ernam TYPE ekko-ernam, "创建者
END OF ty_ekko.
TYPES: BEGIN OF ty_ekpo,
ebeln TYPE ekpo-ebeln, "采购凭证号
ebelp TYPE ekpo-ebelp, "采购凭证的项目编号
bukrs TYPE ekpo-bukrs, "公司代码
werks TYPE ekpo-werks, "工厂
matnr TYPE ekpo-matnr, "物料
knttp TYPE ekpo-knttp, "科目分配类别
pstyp TYPE ekpo-pstyp, "采购凭证的项目类别
END OF ty_ekpo.
TYPES: BEGIN OF ty_ekbe,
ebeln TYPE ekbe-ebeln, "采购凭证号
ebelp TYPE ekbe-ebelp, "采购凭证的项目编号
vgabe TYPE ekbe-vgabe, "业务处理/事件类型
gjahr TYPE ekbe-gjahr, "物料凭证年度
belnr TYPE ekbe-belnr, "物料凭证编号
buzei TYPE ekbe-buzei, "物料凭证中的项目
werks TYPE ekbe-werks, "工厂
budat TYPE ekbe-budat, "过账日期
menge TYPE ekbe-menge, "收货数量
shkzg TYPE ekbe-shkzg, "借贷标识
wrbtr TYPE ekbe-wrbtr, "凭证货币金额
waers TYPE ekbe-waers, "货币码
dmbtr TYPE ekbe-dmbtr, "按本位币金额
bwart TYPE ekbe-bwart, "移动类型
END OF ty_ekbe.
TYPES: BEGIN OF ty_lfa1,
lifnr TYPE lfa1-lifnr, "供应商
land1 TYPE lfa1-land1, "国家代码
name1 TYPE lfa1-name1, "供应商名称
pfach TYPE lfa1-pfach, "邮政信箱
regio TYPE lfa1-regio, "地区
stras TYPE lfa1-stras, "住宅号及街道
END OF ty_lfa1.
TYPES: BEGIN OF ty_makt,
matnr TYPE makt-matnr, "物料
spras TYPE makt-spras, "语言代码
maktx TYPE makt-maktx, "物料描述
END OF ty_makt.
TYPES: BEGIN OF ty_mara,
matnr TYPE mara-matnr, "物料
meins TYPE mara-meins, "计量单位
lvorm TYPE mara-lvorm, "删除标识
END OF ty_mara.
TYPES: BEGIN OF ty_mseg,
mblnr TYPE mseg-mblnr, "物料凭证编号
mjahr TYPE mseg-mjahr, "物料凭证年度
zeile TYPE mseg-zeile, "物料凭证中的项目
dmbtr TYPE mseg-dmbtr, "库存金额
ebeln TYPE mseg-ebeln, "采购凭证号
ebelp TYPE mseg-ebelp, "采购凭证的项目编号
vprsv TYPE mseg-vprsv, "价格控制指示符
END OF ty_mseg.
DATA: it_alv TYPE TABLE OF ty_alv,
wa_alv TYPE ty_alv.DATA: it_ekko TYPE TABLE OF ty_ekko,
wa_ekko TYPE ty_ekko.DATA: it_ekpo TYPE TABLE OF ty_ekpo,
wa_ekpo TYPE ty_ekpo.DATA: it_ekbe TYPE TABLE OF ty_ekbe,
wa_ekbe TYPE ty_ekbe.DATA: it_lfa1 TYPE TABLE OF ty_lfa1,
wa_lfa1 TYPE ty_lfa1.DATA: it_makt TYPE TABLE OF ty_makt,
wa_makt TYPE ty_makt.DATA: it_mara TYPE TABLE OF ty_mara,
wa_mara TYPE ty_mara.DATA: it_mseg TYPE TABLE OF ty_mseg,
wa_mseg TYPE ty_mseg.************************************************************************* PARAMETERS AND SELECTION OPTIONS*************************************************************************---------------------------------------------------------------------** 屏幕选择 **---------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE text-001.SELECT-OPTIONS s_werks FOR ekpo-werks.SELECT-OPTIONS s_budat FOR ekbe-budat.SELECT-OPTIONS s_ekorg FOR ekko-ekorg NO INTERVALS.SELECT-OPTIONS s_ekgrp FOR ekko-ekgrp NO INTERVALS.SELECT-OPTIONS s_matnr FOR ekpo-matnr.SELECT-OPTIONS s_ebeln FOR ekko-ebeln.SELECT-OPTIONS s_lifnr FOR ekko-lifnr.SELECTION-SCREEN END OF BLOCK blk.
************************************************************************* INITIALIZATION************************************************************************INITIALIZATION.
************************************************************************* AT SELECTION SCREEN************************************************************************AT SELECTION-SCREEN.
************************************************************************* EVENT TOP OF PAGE************************************************************************TOP-OF-PAGE.
************************************************************************* EVENT START OF SELECTION************************************************************************START-OF-SELECTION.
*************************************************************************EVENT END-OF SELECTION************************************************************************END-OF-SELECTION.* PERFORM check_werkss(zauth_check) IF FOUND TABLES s_werks. "检查工厂 PERFORM frm_fetch_data. "取数
IF it_alv[] IS INITIAL. "如果没有取到数据
MESSAGE s002(wusl).
ELSE.
PERFORM init_layout. "设置输出格式
PERFORM init_fieldcat. "设置输出字段
PERFORM frm_output. "输出ALV
ENDIF.
*&---------------------------------------------------------------------**& Form frm_fetch_data*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM frm_fetch_data.
DATA: l_bzdj TYPE p DECIMALS 5, "标准单价
l_cgdj TYPE p DECIMALS 5, "采购单价
l_cydj TYPE p DECIMALS 5, "差异单价
l_bfbi TYPE p DECIMALS 5, "差异百分比
p1 TYPE char6.
SELECT ebeln bukrs aedat lifnr ekorg ekgrp bedat ernam
INTO CORRESPONDING FIELDS OF TABLE it_ekko
FROM ekko
WHERE ebeln IN s_ebeln
AND lifnr IN s_lifnr
AND ekorg IN s_ekorg
AND ekgrp IN s_ekgrp.
IF it_ekko[] IS NOT INITIAL.
SELECT ebeln ebelp bukrs werks netwr matnr knttp pstyp
INTO CORRESPONDING FIELDS OF TABLE it_ekpo
FROM ekpo
FOR ALL ENTRIES IN it_ekko
WHERE ebeln = it_ekko-ebeln
AND matnr IN s_matnr
AND werks IN s_werks
AND knttp = ''.
SELECT lifnr land1 name1 pfach regio stras
INTO CORRESPONDING FIELDS OF TABLE it_lfa1
FROM lfa1
FOR ALL ENTRIES IN it_ekko
WHERE lifnr = it_ekko-lifnr.
IF it_ekpo[] IS NOT INITIAL.
SELECT ebeln ebelp zekkn vgabe gjahr belnr buzei
shkzg dmbtr werks menge wrbtr waers budat bwart
INTO CORRESPONDING FIELDS OF TABLE it_ekbe
FROM ekbe
FOR ALL ENTRIES IN it_ekpo
WHERE ebeln = it_ekpo-ebeln
AND ebelp = it_ekpo-ebelp
AND budat IN s_budat
AND vgabe = '1'
AND bwart NOT IN ('103','104').
IF it_ekbe[] IS NOT INITIAL.
SELECT mblnr mjahr zeile dmbtr ebeln ebelp vprsv
INTO CORRESPONDING FIELDS OF TABLE it_mseg
FROM mseg
FOR ALL ENTRIES IN it_ekbe
WHERE ebeln = it_ekbe-ebeln
AND ebelp = it_ekbe-ebelp
AND mblnr = it_ekbe-belnr
AND mjahr = it_ekbe-gjahr
AND zeile = it_ekbe-buzei
AND vprsv = 'S'.
ENDIF.
SELECT matnr spras maktx
INTO CORRESPONDING FIELDS OF TABLE it_makt
FROM makt
FOR ALL ENTRIES IN it_ekpo
WHERE matnr = it_ekpo-matnr
AND spras = sy-langu.
SELECT matnr meins lvorm
INTO CORRESPONDING FIELDS OF TABLE it_mara
FROM mara
FOR ALL ENTRIES IN it_ekpo
WHERE matnr = it_ekpo-matnr.
ENDIF.
ENDIF.
SORT : it_ekko,it_ekpo,it_ekbe,it_lfa1,it_makt,it_mara,it_mseg.
LOOP AT it_ekbe INTO wa_ekbe.
MOVE-CORRESPONDING wa_ekbe TO wa_alv.
wa_alv-dmbtr1 = wa_ekbe-dmbtr.
READ TABLE it_mseg INTO wa_mseg WITH KEY ebeln = wa_ekbe-ebeln
ebelp = wa_ekbe-ebelp
mblnr = wa_ekbe-belnr
mjahr = wa_ekbe-gjahr
zeile = wa_ekbe-buzei.
IF sy-subrc = 0.* MOVE-CORRESPONDING wa_bseg TO wa_alv.
wa_alv-dmbtr = wa_mseg-dmbtr.
ELSE.
CONTINUE.
ENDIF.
READ TABLE it_ekpo INTO wa_ekpo WITH KEY ebeln = wa_ekbe-ebeln
ebelp = wa_ekbe-ebelp BINARY SEARCH.
IF sy-subrc = 0.
IF wa_ekpo-pstyp = '3'.
wa_alv-wwbs = '是'.
ELSE.
wa_alv-wwbs = '否'.
ENDIF.
MOVE-CORRESPONDING wa_ekpo TO wa_alv.
READ TABLE it_makt INTO wa_makt WITH KEY matnr = wa_ekpo-matnr BINARY SEARCH.
IF sy-subrc = 0.
wa_alv-maktx = wa_makt-maktx.
ENDIF.
READ TABLE it_mara INTO wa_mara WITH KEY matnr = wa_ekpo-matnr BINARY SEARCH.
IF sy-subrc = 0.
wa_alv-meins = wa_mara-meins.
IF wa_mara-lvorm = 'X'.
wa_alv-scbs = '是'.
ELSE.
wa_mara-lvorm = ''.
wa_alv-scbs = '否'.
ENDIF.
ENDIF.
READ TABLE it_ekko INTO wa_ekko WITH KEY ebeln = wa_ekpo-ebeln BINARY SEARCH.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_ekko TO wa_alv.
READ TABLE it_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_ekko-lifnr BINARY SEARCH.
IF sy-subrc = 0.
wa_alv-name1 = wa_lfa1-name1.
ENDIF.
ENDIF.
ENDIF.
SELECT SINGLE knumh
INTO wa_alv-knumh
FROM a017
WHERE a017~lifnr = wa_ekko-lifnr
AND a017~matnr = wa_ekpo-matnr
AND a017~werks = wa_ekpo-werks
AND a017~ekorg = wa_ekko-ekorg
AND a017~datbi IN ('20991231','99991231').
SELECT SINGLE kbetr
INTO wa_alv-kbetr
FROM konp
WHERE knumh = wa_alv-knumh.
IF wa_ekbe-menge = 0.
wa_alv-bzdj = 0.
wa_alv-cgdj = 0.
wa_alv-cydj = 0.
wa_alv-bfbi = 0.
ELSE.
wa_alv-bzdj = wa_mseg-dmbtr / wa_ekbe-menge.
wa_alv-cgdj = wa_ekbe-dmbtr / wa_ekbe-menge.
wa_alv-cydj = wa_alv-cgdj - wa_alv-bzdj.
IF wa_mseg-dmbtr = 0.
wa_alv-bfbi = 0.
ELSE.
wa_alv-bfbi = wa_alv-cydj / wa_alv-bzdj * 100.* p1 = wa_alv-cydj / wa_alv-bzdj * 100.* wa_alv-bfbi = p1.* CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'.* CONDENSE p1.* CONCATENATE p1 '%' INTO wa_alv-bfbi.
ENDIF.
ENDIF.
CASE wa_ekbe-shkzg.
WHEN 'S'.
wa_alv-menge = wa_ekbe-menge.
wa_alv-dmbtr = wa_mseg-dmbtr.
wa_alv-dmbtr1 = wa_ekbe-dmbtr.
wa_alv-wrbtr = wa_ekbe-wrbtr.
WHEN 'H'.
wa_alv-menge = wa_ekbe-menge * -1.
wa_alv-dmbtr = wa_mseg-dmbtr * -1.
wa_alv-dmbtr1 = wa_ekbe-dmbtr * -1.
wa_alv-wrbtr = wa_ekbe-wrbtr * -1.
ENDCASE.
APPEND wa_alv TO it_alv.
CLEAR wa_alv.
ENDLOOP.ENDFORM. "frm_fetch_data
*&---------------------------------------------------------------------**& Form init_layout*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM init_layout. "设置输出格式
gs_layout-zebra = 'X'.
gs_layout-detail_popup = 'X'.
gs_layout-colwidth_optimize = 'X'.ENDFORM. "init_layout
*&---------------------------------------------------------------------**& Form init_fieldcat*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM init_fieldcat. "设置输出字段
DATA: ls_fcat TYPE slis_fieldcat_alv.
CLEAR: ls_fieldcat[].
DEFINE build_fieldcat.
ls_fcat-fieldname = &1.
ls_fcat-seltext_s = &2.
ls_fcat-seltext_m = &2.
ls_fcat-seltext_l = &2.
ls_fcat-outputlen = &3.
append ls_fcat to ls_fieldcat.
clear ls_fcat.
END-OF-DEFINITION.
build_fieldcat 'WERKS ' '工厂' 4.
build_fieldcat 'BUDAT ' '过账日期' 8.
build_fieldcat 'EBELN ' '采购订单号' 10.
build_fieldcat 'EBELP ' '项目号' 5.
build_fieldcat 'BELNR ' '物料凭证编号' 10.
build_fieldcat 'GJAHR ' '物料凭证年度' 4.
build_fieldcat 'MATNR ' '物料' 18.
build_fieldcat 'MAKTX ' '物料描述' 40.
build_fieldcat 'MEINS ' '计量单位' 3.
build_fieldcat 'MENGE ' '收货数量' 13.
build_fieldcat 'DMBTR ' '库存金额' 13.
build_fieldcat 'DMBTR1' '按本位币金额' 13.
build_fieldcat 'KBETR' '采购信息记录价格' 13.
build_fieldcat 'BZDJ ' '标准单价' 12.
build_fieldcat 'CGDJ ' '采购单价' 12.
build_fieldcat 'CYDJ ' '差异单价' 12.
build_fieldcat 'BFBI ' '差异百分比(%)' 12.
build_fieldcat 'LIFNR ' '供应商' 10.
build_fieldcat 'NAME1 ' '供应商名称' 35.
build_fieldcat 'WRBTR ' '凭证货币金额' 13.
build_fieldcat 'WAERS ' '货币码' 5.
build_fieldcat 'ERNAM ' '创建者' 12.
build_fieldcat 'SHKZG ' '借贷标识' 1.
build_fieldcat 'VGABE ' '交易/事件类型' 2.
build_fieldcat 'BWART ' '移动类型' 3.
build_fieldcat 'SCBS ' '物料是否删除' 3.
build_fieldcat 'WWBS ' '物料是否委外' 3.
ENDFORM. "init_fieldcat
*&---------------------------------------------------------------------**& Form frm_output*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM frm_output. "输出ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid* i_callback_pf_status_set = 'MENU_SET'* i_callback_user_command = 'FRM_USER_COMMAND'
is_layout = gs_layout
it_fieldcat = ls_fieldcat[]
i_save = 'A'
it_events = git_events[]
TABLES
t_outtab = it_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.ENDFORM. "frm_output
2015 Jul 29 2:27 AM
Hiphone,
Can you put your code on TXT file and attach here? It will be easier to read
Thanks,
Raphael Pacheco.
2015 Jul 29 2:47 AM
Hi Raphael Pacheco,
The code on TXT file and attach here.
thanks,
hiphone.
2015 Jul 29 3:32 AM
Hi Hiphone,
Weired thing, I pasted your code into my system, which is ECC6, but there is no syntax errors.
As said in my previous reply, there must be some 2-bytes spaces or characters in your code which cuased this error to come out.
You can try to check from the beginning of your code....
2015 Jul 29 4:13 AM
Hiphone,
You can open "PERFORM check_werkss(zauth_check) IF FOUND TABLES s_werks" on the new program correctly?
BR,
Raphael Pacheco.
2015 Jul 29 5:19 AM
hi Raphael Pacheco,
you can comment this line,then check code again.
thanks.
2015 Jul 29 5:50 AM
Hi hiphone xu
At the begininnig I have gotten an error,
please check your spelling, but after copying the code from TXT file, I got no error,
there is no error with me,
could you please create a new program and try again.
Regards
Ibrahim
2015 Jul 29 5:54 AM
Hi Hiphone,
Your code is working fine with me.
Could you paste the screen shot of the errors you are getting.
Pls follow the below hints,
1) In settings make the changes to get the line numbers in your abap editor.
2) From the syntax error, Pls check the row number where the error occurs.
3) copy the program from the actually developed editor and paste it in your new version editor with different prog name and check.
2015 Jul 29 6:44 AM
hi Ibrahim,
at first, you would not get a clear meaning of mine. for example , the program < ZMM025 > is existing in my 4.6C system (4.6C is key point) , and it is active with several warnings.
then i copy the ZMM025's code to create a new program ( ZFI005 ). Error will happen. and other errors is list at the begin of question.
when i copied other active code to this new program , strange error will happen again. the code on TXT file and attach here.
2015 Jul 29 6:52 AM
Hiphone,
as can see from the 2nd screen shot, it saying 5 is not defined. so, is there a possibility that the comma after ZFI005 is a 2-bytes character? let's say, you used chinese input method typed that comma?
I worked on Japanese development works before, this kind of issue happend to me too, and when I find the root cause, all were becuase I typed using wrong input method....
2015 Jul 29 9:49 AM
hi hongtao,
the code which i used to created program THREE MONTH AGO, it can be actived and is working fine. and NOW i used THE SAME CODE to created program , there will be so many strange errors. IS there any change for sap system or abap editor ? and what is the change ?
thanks,
hiphone.
2015 Jul 29 6:01 AM
Hi,
This is not strange. when you copy your code sometimes the special characters( like ; : " ' . , * & etc) you have used would create some problem. All you have to do is just delete and retype those special characters that's all.
Thanks!!
Suvarna