on 10-28-2013 9:32 AM
Hi guys, I'm just a beginner in abap. I got some problem with SAPscript(receipt of payment for HR). The output didn't show the data that I need (I label it with red line). Can you give me some suggestions to repair this?
TABLES: pa0001, pa0002, pa0015, pa0021, pa0185, pa0267.
TYPES: BEGIN OF t_pa0001,
pernr LIKE PA0001-pernr,
END OF t_pa0001.
TYPES: BEGIN OF t_pa0002,
begda LIKE PA0002-begda, "Begin date
endda LIKE PA0002-endda, "End Date
cname LIKE PA0002-cname, "Employee Name
END OF t_pa0002.
TYPES: BEGIN OF t_pa0015,
betrg LIKE PA0015-betrg, "total amount
begda LIKE PA0015-begda, "payment date
END OF t_pa0015.
TYPES: BEGIN OF t_pa0021,
fcnam LIKE P0021-fcnam, "Assured name
END OF t_pa0021.
TYPES: BEGIN OF t_pa0185,
icnum LIKE PA0185-icnum, "ic number
subty LIKE PA0185-subty,
END OF t_pa0185.
TYPES: BEGIN OF t_pa0267,
lgart LIKE PA0267-lgart, "wage type
END OF t_pa0267.
TYPES: BEGIN OF t_data,
betrg LIKE PA0015-betrg,
begda LIKE PA0015-begda,
fcnam LIKE PA0021-fcnam,
pernr LIKE PA0001-pernr,
cname LIKE PA0002-cname,
subty LIKE PA0185-subty,
icnum LIKE PA0185-icnum,
lgart LIKE PA0267-lgart,
endda LIKE pa0002-endda,
END OF t_data.
DATA: it_pa0001 TYPE TABLE OF t_pa0001,
wa_pa0001 TYPE t_pa0001,
it_pa0002 TYPE TABLE OF t_pa0002,
wa_pa0002 TYPE t_pa0002,
it_pa0015 TYPE TABLE OF t_pa0015,
wa_pa0015 TYPE t_pa0015,
it_pa0021 TYPE TABLE OF t_pa0021,
wa_pa0021 TYPE t_pa0021,
it_pa0185 TYPE TABLE OF t_pa0185,
wa_pa0185 TYPE t_pa0185,
it_pa0267 TYPE TABLE OF t_pa0267,
wa_pa0267 TYPE t_pa0267,
it_data TYPE TABLE OF t_data,
wa_data TYPE t_data.
SELECT-OPTIONS:
s_begda FOR PA0002-begda,
s_endda FOR PA0002-endda,
s_pernr FOR PA0001-pernr,
s_lgart FOR PA0267-lgart.
PARAMETERS:
p_cname TYPE PA0002-cname NO-DISPLAY,
p_betrg TYPE PA0015-betrg NO-DISPLAY,
p_fcnam TYPE pa0021-fcnam NO-DISPLAY,
p_icnum TYPE pa0185-icnum NO-DISPLAY,
p_subty TYPE pa0185-subty NO-DISPLAY,
p_begda TYPE pa0015-begda NO-DISPLAY.
START-OF-SELECTION.
PERFORM get_data.
PERFORM open_form.
PERFORM start_form.
PERFORM write_form.
PERFORM end_form.
PERFORM close_form.
*&---------------------------------------------------------------------*
*& For GET_DATA
*&---------------------------------------------------------------------*
* tex Getting data into final internal table for display
*----------------------------------------------------------------------*
FORM get_data.
SELECT pa0001~pernr pa0002~cname
FROM pa0001
INNER JOIN pa0002
ON pa0001~pernr = pa0002~pernr
INTO CORRESPONDING FIELDS OF TABLE it_pa0001
WHERE pa0001~pernr = s_pernr.
LOOP AT it_pa0001 INTO wa_pa0001.
READ TABLE it_pa0001 INTO wa_pa0001 WITH KEY pernr = s_pernr.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_pa0001 TO wa_data.
ENDIF.
APPEND wa_data to it_data.
ENDLOOP.
SELECT pa0002~cname pa0002~begda pa0002~endda pa0001~pernr
FROM pa0002
INNER JOIN pa0001
ON pa0002~pernr = pa0001~pernr
INTO CORRESPONDING FIELDS OF TABLE it_pa0002
WHERE pa0002~cname = p_cname
AND pa0002~endda IN s_endda
AND pa0002~begda IN s_begda.
LOOP AT it_pa0002 INTO wa_pa0002.
READ TABLE it_pa0002 INTO wa_pa0002 WITH KEY cname = p_cname.
READ TABLE it_pa0002 INTO wa_pa0002 WITH KEY begda = s_begda.
READ TABLE it_pa0002 INTO wa_pa0002 WITH KEY endda = s_endda.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_pa0002 TO wa_data.
ENDIF.
APPEND wa_data to it_data.
ENDLOOP.
SELECT lgart
FROM pa0267 INTO CORRESPONDING FIELDS OF TABLE it_pa0267
WHERE lgart IN s_lgart.
SELECT pa0015~betrg pa0015~begda pa0001~subty
FROM pa0015
INNER JOIN pa0001
ON pa0001~subty = pa0015~subty
INTO CORRESPONDING FIELDS OF TABLE it_pa0015
WHERE pa0015~betrg = p_betrg
AND pa0015~begda = p_begda.
LOOP AT it_pa0015 INTO wa_pa0015.
READ TABLE it_pa0015 INTO wa_pa0015 WITH KEY betrg = p_betrg.
READ TABLE it_pa0015 INTO wa_pa0015 WITH KEY begda = p_begda.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_pa0015 TO wa_data.
ENDIF.
APPEND wa_data to it_data.
ENDLOOP.
SELECT pa0021~fcnam pa0001~pernr
FROM pa0021
INNER JOIN pa0001
ON pa0001~pernr = pa0021~pernr
INTO CORRESPONDING FIELDS OF TABLE it_pa0021
WHERE pa0021~fcnam = p_fcnam.
LOOP AT it_pa0021 INTO wa_pa0021.
READ TABLE it_pa0021 INTO wa_pa0021 WITH KEY fcnam = p_fcnam.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_pa0021 TO wa_data.
ENDIF.
APPEND wa_data TO it_data.
ENDLOOP.
SELECT pa0185~subty pa0185~icnum pa0001~pernr
FROM pa0185
INNER JOIN pa0001
ON pa0001~pernr = pa0185~pernr
INTO CORRESPONDING FIELDS OF TABLE it_pa0185
WHERE pa0185~subty = p_subty
AND pa0185~icnum = p_icnum.
LOOP AT it_pa0185 INTO wa_pa0185.
READ TABLE it_pa0185 INTO wa_pa0185 WITH KEY icnum = p_icnum.
READ TABLE it_pa0185 INTO wa_pa0185 WITH KEY subty = p_subty.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_pa0185 TO wa_data.
ENDIF.
APPEND wa_data TO it_data.
ENDLOOP.
CLEAR it_data.
ENDFORM. "get_data
*&---------------------------------------------------------------------*
*& Form OPEN_FORM
*&---------------------------------------------------------------------*
* text: opening script form
*----------------------------------------------------------------------*
FORM open_form.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
FORM = 'ZHR_DEMO2'
.
ENDFORM. "open_form
*&---------------------------------------------------------------------*
*& Form START_FORM
*&---------------------------------------------------------------------*
* Text: Starting form
*----------------------------------------------------------------------*
FORM start_form.
CALL FUNCTION 'START_FORM'
EXPORTING
FORM = 'ZHR_DEMO2'
.
ENDFORM. "start_form
*&---------------------------------------------------------------------*
*& Form WRITE_FORM
*&---------------------------------------------------------------------*
* text: Writing into form
*----------------------------------------------------------------------*
FORM write_form.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'MAIN'
ELEMENT = 'ADDRESS'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW1'
ELEMENT = 'DATE'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW2'
ELEMENT = 'POLICY'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW3'
ELEMENT = 'A_NAME'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW4'
ELEMENT = 'PAYMENT'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW5'
ELEMENT = 'TITLE'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW6'
ELEMENT = 'PERIOD'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW7'
ELEMENT = 'NOTE1'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW8'
ELEMENT = 'NOTE2'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW9'
ELEMENT = 'NOTE3'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW10'
ELEMENT = 'NOTE4'
.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'WINDOW11'
ELEMENT = 'NOTE5'
.
ENDFORM. "write_form
*&---------------------------------------------------------------------*
*& Form END_FORM
*&---------------------------------------------------------------------*
* text: Ending form
*----------------------------------------------------------------------*
FORM end_form.
CALL FUNCTION 'END_FORM'
.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM. "end_form
*&---------------------------------------------------------------------*
*& Form close_form
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM close_form.
CALL FUNCTION 'CLOSE_FORM'
.
ENDFORM. "close_form
Hi
See note 7040 - How are form variables provided from ABAP?. You need to pass the values of internal table to an object defined in the dictionary (as structure for instance) or via the function CONTROL_FORM.
I hope this helps you
Regards
Eduardo
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
1. Internal table structure is not compatible t_pa0001 when you selecting the data into internal table.
TYPES: BEGIN OF t_pa0001,
pernr LIKE PA0001-pernr,
END OF t_pa0001.
SELECT pa0001~pernr pa0002~cname
FROM pa0001
INNER JOIN pa0002
ON pa0001~pernr = pa0002~pernr
INTO CORRESPONDING FIELDS OF TABLE it_pa0001
WHERE pa0001~pernr = s_pernr.
please check the select query on where condition also. it should be pernr in s_pernr.
2. try to avoaid usage of into corresponding fields when fetch data it will affect on performance and also avoid usage of move-corresponding statement.
3.Loop the final internal table it_data to get the values that need to be passed to sap script windows before calling the function module WRITE_FORM .
LOOP AT IT_DATA INTO WA_DATA.
*&---------------------------------------------------------------------*
*& Form WRITE_FORM
*&---------------------------------------------------------------------*
* text: Writing into form
*----------------------------------------------------------------------*
FORM write_form.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'MAIN'
ELEMENT = 'ADDRESS'
.
After all assignments of text elements on corresponding windows endloop it.
ENDLOOP.
4.Check the data population on the script on debugger at runtime to understand why the data population not done.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I am not sure about your get_data subroutine, because it is appending into table after getting data from each infotype. You need to append data just once after getting data from all infotype, or modify after appending once.
Again, on calling the script, I dont see any reference to the table. You should be loop at the data table to get the values that need to be passed to the sap-script windows.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Muhammad Faisal Omar,
As per the screenshot you have attached.
Except texts Nothing is displaying(i assumed, those texts also you have hardcoded in the sapscript)
Please check in your driver program whether data is population or not?
Checks:
In FORM GET_DATA
SELECT pa0001~pernr pa0002~cname
FROM pa0001
INNER JOIN pa0002
ON pa0001~pernr = pa0002~pernr
INTO CORRESPONDING FIELDS OF TABLE it_pa0001
WHERE pa0001~pernr = s_pernr.
you are selecting PERNR and CNAME. But, your internal table t_pa0001 is having only one field PERNR.
TYPES: BEGIN OF t_pa0001,
pernr LIKE PA0001-pernr,
END OF t_pa0001.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
110 | |
12 | |
11 | |
6 | |
5 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.