*&---------------------------------------------------------------------*
*& Report ZDEMO_TX
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zdemo_tx.
TABLES vbap.
DATA:BEGIN OF itab OCCURS 0,
vbeln LIKE vbap-vbeln,
posnr LIKE vbap-posnr,
cuobj LIKE vbap-cuobj,
atinn LIKE cabn-atinn,
atnam LIKE cabn-atnam,
atbez LIKE cabnt-atbez,
atwrt LIKE ibsymbol-atwrt,
atwtb LIKE cawnt-atwtb,
symbol_id LIKE ibinvalues-symbol_id,
msehi LIKE cabn-msehi,
END OF itab.
DATA lt_vbap LIKE TABLE OF itab WITH HEADER LINE.
DATA itabs LIKE TABLE OF itab WITH HEADER LINE.
DATA:BEGIN OF lt_compare OCCURS 0,
vbelns LIKE vbap-vbeln,
posnrs LIKE vbap-posnr,
vbelnf LIKE vbap-vbeln,
posnrf LIKE vbap-posnr,
atinns LIKE cabn-atinn,
atinnf LIKE cabn-atinn,
atnams LIKE cabn-atnam,
atnamf LIKE cabn-atnam,
atbezs LIKE cabnt-atbez,
atbezf LIKE cabnt-atbez,
atwrts LIKE ibsymbol-atwrt,
atwrtf LIKE ibsymbol-atwrt,
atwtbs LIKE cawnt-atwtb,
atwtbf LIKE cawnt-atwtb,
END OF lt_compare.
DATA:configuration LIKE TABLE OF conf_out WITH HEADER LINE.
DATA:lt_cabnt LIKE TABLE OF cabnt WITH HEADER LINE.
DATA:lt_cawnt LIKE TABLE OF cawnt WITH HEADER LINE.
DATA:lt_ibsymbol LIKE TABLE OF ibsymbol WITH HEADER LINE.
SELECT-OPTIONS s_vbeln FOR vbap-vbeln.
SELECT-OPTIONS s_posnr FOR vbap-posnr.
PARAMETERS hs RADIOBUTTON GROUP r DEFAULT 'X' USER-COMMAND rclk.
PARAMETERS sjk RADIOBUTTON GROUP r .
PARAMETERS compare RADIOBUTTON GROUP r .
START-OF-SELECTION.
IF hs = 'X'.
PERFORM functionmod.
PERFORM write.
ELSEIF sjk = 'X'.
PERFORM sqlmod.
PERFORM write.
ELSEIF compare = 'X'.
PERFORM functionmod.
PERFORM sqlmod.
PERFORM compare.
ENDIF.
*&---------------------------------------------------------------------*
*& Form sqlmod
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sqlmod.
SELECT vbap~vbeln
vbap~posnr
vbap~cuobj
cabn~atinn"内部特性
cabn~atnam"特性名称
* ibsymbol~atwrt"特性值
cabnt~atbez
* cawnt~atwtb
ibinvalues~symbol_id
cabn~msehi
APPENDING CORRESPONDING FIELDS OF TABLE itab
FROM vbap
INNER JOIN ibin ON ibin~instance = vbap~cuobj
INNER JOIN ibinvalues ON ibinvalues~in_recno = ibin~in_recno
INNER JOIN ibsymbol ON ibsymbol~symbol_id = ibinvalues~symbol_id
INNER JOIN cabn ON cabn~atinn = ibsymbol~atinn
INNER JOIN cabnt ON cabnt~atinn = cabn~atinn
* INNER JOIN cawnt ON cawnt~atinn = ibsymbol~atinn
* AND cawnt~atzhl = ibsymbol~atwrt
WHERE vbap~vbeln IN s_vbeln
AND vbap~posnr IN s_posnr
AND ibin~valto = '99991231235959'.
*
* SELECT * INTO TABLE lt_cabnt FROM cabnt
* FOR ALL ENTRIES IN itab
* WHERE atinn = itab-atinn.
SELECT * INTO TABLE lt_ibsymbol FROM ibsymbol
FOR ALL ENTRIES IN itab
WHERE symbol_id = itab-symbol_id.
SELECT * INTO TABLE lt_cawnt FROM cawnt
FOR ALL ENTRIES IN itab
WHERE atinn = itab-atinn.
SORT lt_cawnt BY atinn atzhl.
SORT lt_ibsymbol BY symbol_id.
DATA:atzhl LIKE cawnt-atzhl.
DATA:atflv LIKE cha_class_view-sollwert.
DATA:dzero TYPE p DECIMALS 0.
LOOP AT itab.
READ TABLE lt_ibsymbol WITH KEY symbol_id = itab-symbol_id
BINARY SEARCH.
IF sy-subrc = 0.
IF lt_ibsymbol-atwrt = ''.
IF itab-msehi = 'M2'.
CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
EXPORTING
i_number_of_digits = 3
i_fltp_value = lt_ibsymbol-atflv
* I_VALUE_NOT_INITIAL_FLAG = 'X'
* I_SCREEN_FIELDLENGTH = 16
IMPORTING
e_char_field = atflv
.
CONDENSE atflv.
DATA:len TYPE i .
len = STRLEN( atflv ).
len = len - 1.
IF atflv+len(1) = '0'.
atflv = atflv+0(len).
ENDIF.
ELSE.
CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
EXPORTING
i_number_of_digits = 2
i_fltp_value = lt_ibsymbol-atflv
* I_VALUE_NOT_INITIAL_FLAG = 'X'
* I_SCREEN_FIELDLENGTH = 16
IMPORTING
e_char_field = atflv
.
CONDENSE atflv.
ENDIF.
itab-atwrt = atflv.
* 按atbez处理数字
IF itab-atbez = 'LA值'.
PERFORM round USING '1'.
ELSEIF itab-atbez = '电梯设备基本代码'
OR itab-atbez = '扶梯设备基本代码'.
PERFORM round USING '0'.
ELSE.
* 按单位处理数字
IF itab-msehi ='KWH'
OR itab-msehi = 'DEG'.
PERFORM round USING '1'.
ELSEIF itab-msehi = 'MM'.
PERFORM round USING '0'.
PERFORM thousandth.
ELSEIF itab-msehi = 'M2'.
ELSEIF itab-msehi NE 'A'
AND itab-msehi NE 'KW'
AND itab-msehi NE 'HZ'
AND itab-msehi NE 'M'
AND itab-msehi NE 'RPM'.
PERFORM thousandth.
ENDIF.
ENDIF.
* 处理单位名称
IF itab-msehi = ''.
itab-atwtb = itab-atwrt.
ELSE.
IF itab-msehi = 'CHE'.
itab-msehi = '层'.
ELSEIF itab-msehi = 'KW'.
itab-msehi = 'kW'.
ELSEIF itab-msehi = 'A'.
ELSEIF itab-msehi = 'HZ'.
itab-msehi = '赫兹'.
ELSEIF itab-msehi = 'RPM'.
ELSEIF itab-msehi = 'PC'.
ELSE.
TRANSLATE itab-msehi TO LOWER CASE..
ENDIF.
CONCATENATE itab-atwrt itab-msehi INTO itab-atwtb SEPARATED BY ' '.
itab-atwrt = itab-atwtb.
ENDIF.
ELSE.
itab-atwrt = lt_ibsymbol-atwrt.
IF itab-atwrt BETWEEN '0000' AND '9999'.
atzhl = itab-atwrt.
*>>> 特殊情况
IF itab-atnam = 'KLK_TUHAO'.
atzhl = atzhl + 1.
ELSEIF itab-atnam = 'KLK1_1000_0130'.
atzhl = atzhl - 1.
ENDIF.
*<<<
READ TABLE lt_cawnt WITH KEY atinn = itab-atinn
atzhl = atzhl
BINARY SEARCH.
IF sy-subrc = 0.
itab-atwtb = lt_cawnt-atwtb.
ELSE.
itab-atwtb = itab-atwrt.
ENDIF.
ELSE.
itab-atwtb = itab-atwrt.
ENDIF.
ENDIF.
MODIFY itab.
ENDIF.
ENDLOOP.
IF sjk = 'X'.
itabs[] = itab[].
ENDIF.
ENDFORM. "sqlmod
*&---------------------------------------------------------------------*
*& Form functionmod
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM functionmod.
SELECT vbeln posnr cuobj INTO CORRESPONDING FIELDS OF TABLE lt_vbap FROM vbap
WHERE vbeln IN s_vbeln
AND posnr IN s_posnr.
LOOP AT lt_vbap.
CLEAR configuration.
REFRESH configuration.
CALL FUNCTION 'VC_I_GET_CONFIGURATION' "调用函数"
EXPORTING
instance = lt_vbap-cuobj
TABLES
configuration = configuration
EXCEPTIONS
instance_not_found = 1
internal_error = 2
no_class_allocation = 3
instance_not_valid = 4
OTHERS = 5.
IF sy-subrc = 0.
LOOP AT configuration.
itabs-vbeln = lt_vbap-vbeln.
itabs-posnr = lt_vbap-posnr.
itabs-cuobj = lt_vbap-cuobj.
itabs-atinn = configuration-atinn.
itabs-atnam = configuration-atnam.
itabs-atbez = configuration-atbez.
itabs-atwrt = configuration-atwrt.
itabs-atwtb = configuration-atwtb.
APPEND itabs.
CLEAR itabs.
CLEAR configuration.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM. "functionmod
*&---------------------------------------------------------------------*
*& Form write
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM write.
SORT itabs BY atinn.
LOOP AT itabs.
WRITE:/ itabs-vbeln,itabs-posnr,itabs-atinn,itabs-atnam,itabs-atbez,itabs-atwrt,itabs-atwtb.
ENDLOOP.
ENDFORM. "write
*&---------------------------------------------------------------------*
*& Form CHANGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_ITAB_ATWRT text
*----------------------------------------------------------------------*
FORM thousandth.
DATA: atwrt LIKE ibsymbol-atwrt,
zero(3),
len TYPE i,
lenx TYPE i,
n TYPE i.
atwrt = itab-atwrt.
SPLIT atwrt AT '.' INTO atwrt zero.
IF zero = '00' OR zero = ''.
len = STRLEN( atwrt ).
lenx = 3.
WHILE len > 3.
len = len - 3.
CONCATENATE atwrt+0(len) ',' atwrt+len(lenx) INTO atwrt.
lenx = lenx + 4.
ENDWHILE.
itab-atwrt = atwrt.
ENDIF.
ENDFORM. " CHANGE
*&---------------------------------------------------------------------*
*& Form compare
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM compare.
DATA tabix TYPE i.
SORT itabs BY vbeln posnr atinn atnam atbez atwrt atwtb.
SORT itab BY vbeln posnr atinn atnam atbez atwrt atwtb.
LOOP AT itab.
tabix = sy-tabix.
READ TABLE itabs INDEX tabix.
IF sy-subrc = 0.
* IF itab-vbeln = itabs-vbeln
* AND itab-posnr = itabs-posnr
IF itab-atinn = itabs-atinn
AND itab-atnam = itabs-atnam
AND itab-atbez = itabs-atbez
AND itab-atwrt = itabs-atwrt
AND itab-atwtb = itabs-atwtb.
ELSE.
lt_compare-vbelns = itab-vbeln.
lt_compare-vbelnf = itabs-vbeln.
lt_compare-posnrs = itab-posnr.
lt_compare-posnrf = itabs-posnr.
lt_compare-atinns = itab-atinn.
lt_compare-atinnf = itabs-atinn.
lt_compare-atnams = itab-atnam.
lt_compare-atnamf = itabs-atnam.
lt_compare-atbezs = itab-atbez.
lt_compare-atbezf = itabs-atbez.
lt_compare-atwrts = itab-atwrt.
lt_compare-atwrtf = itabs-atwrt.
lt_compare-atwtbs = itab-atwtb.
lt_compare-atwtbf = itabs-atwtb.
APPEND lt_compare.
ENDIF.
ELSE.
lt_compare-vbelns = itab-vbeln.
lt_compare-posnrs = itab-posnr.
lt_compare-atinns = itab-atinn.
lt_compare-atnams = itab-atnam.
lt_compare-atbezs = itab-atbez.
lt_compare-atwrts = itab-atwrt.
lt_compare-atwtbs = itab-atwtb.
APPEND lt_compare.
ENDIF.
ENDLOOP.
LOOP AT itabs.
tabix = sy-tabix.
READ TABLE itab INDEX tabix.
IF sy-subrc = 0.
IF itab-atinn = itabs-atinn
AND itab-atnam = itabs-atnam
AND itab-atbez = itabs-atbez
AND itab-atwrt = itabs-atwrt
AND itab-atwtb = itabs-atwtb.
ELSE.
lt_compare-vbelns = itab-vbeln.
lt_compare-vbelnf = itabs-vbeln.
lt_compare-posnrs = itab-posnr.
lt_compare-posnrf = itabs-posnr.
lt_compare-atinns = itab-atinn.
lt_compare-atinnf = itabs-atinn.
lt_compare-atnams = itab-atnam.
lt_compare-atnamf = itabs-atnam.
lt_compare-atbezs = itab-atbez.
lt_compare-atbezf = itabs-atbez.
lt_compare-atwrts = itab-atwrt.
lt_compare-atwrtf = itabs-atwrt.
lt_compare-atwtbs = itab-atwtb.
lt_compare-atwtbf = itabs-atwtb.
APPEND lt_compare.
ENDIF.
ELSE.
lt_compare-vbelnf = itabs-vbeln.
lt_compare-posnrf = itabs-posnr.
lt_compare-atinnf = itabs-atinn.
lt_compare-atnamf = itabs-atnam.
lt_compare-atbezf = itabs-atbez.
lt_compare-atwrtf = itabs-atwrt.
lt_compare-atwtbf = itabs-atwtb.
APPEND lt_compare.
ENDIF.
ENDLOOP.
SORT lt_compare.
DELETE ADJACENT DUPLICATES FROM lt_compare COMPARING ALL FIELDS.
IF lt_compare[] IS INITIAL.
MESSAGE '没有差异' TYPE 'S'.
ELSE.
LOOP AT lt_compare.
WRITE:/ lt_compare-vbelns,lt_compare-vbelnf,
lt_compare-posnrs,lt_compare-posnrf,
lt_compare-atinns,lt_compare-atinnf,
lt_compare-atnams,lt_compare-atnamf,
lt_compare-atbezs,lt_compare-atbezf,
lt_compare-atwrts,lt_compare-atwrtf,
lt_compare-atwtbs,lt_compare-atwtbf.
ENDLOOP.
ENDIF.
ENDFORM. "compare
*&---------------------------------------------------------------------*
*& Form ROUND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0398 text
*----------------------------------------------------------------------*
FORM round USING decimal.
DATA:p0 TYPE p LENGTH 10 DECIMALS 0.
DATA:p1 TYPE p LENGTH 10 DECIMALS 1.
DATA:p TYPE p LENGTH 10 DECIMALS 2.
* CASE decimal.
* WHEN '0'.
* p0 = itab-atwrt.
* itab-atwrt = p0.
* WHEN '1'.
* p1 = itab-atwrt.
* itab-atwrt = p1.
* ENDCASE.
* CONDENSE itab-atwrt NO-GAPS.
p = itab-atwrt.
CASE decimal.
WHEN '0'.
CALL FUNCTION 'ROUND'
EXPORTING
decimals = decimal
input = p
sign = 'X'
IMPORTING
output = p0.
IF sy-subrc = 0.
itab-atwrt = p0.
CONDENSE itab-atwrt NO-GAPS.
ENDIF.
WHEN '1'.
CALL FUNCTION 'ROUND'
EXPORTING
decimals = decimal
input = p
sign = 'X'
IMPORTING
output = p1.
IF sy-subrc = 0.
itab-atwrt = p1.
CONDENSE itab-atwrt NO-GAPS.
ENDIF.
ENDCASE.
ENDFORM. " ROUND
【ABAP】从表中取特性,与函数取值相同的尝试
最新推荐文章于 2023-09-15 20:06:41 发布