REPORT zsd_va01_bdc NO STANDARD PAGE HEADING LINE-SIZE 255.
**NO STANDARD PAGE HEADING LINE-SIZE 255.
**************************Internal Table*****************************
DATA: BEGIN OF it_final OCCURS 0,
auart(4) TYPE c, " Sales document type
vkorg(4) TYPE c, " Sales Organization
vtweg(2) TYPE c, " Distribution Channel
spart(2) TYPE c, " Division
kunnr(10) TYPE c, " Customer
bstkd(35) TYPE c, " PO number
bstdk(10) TYPE c, " PO Date
matnr(18) TYPE c, " Material
kwmeng(18) TYPE c, " Order quantity
text(100) TYPE c, " LONG TEXT
END OF it_final.
DATA: BEGIN OF it_item OCCURS 0,
bstkd(35) TYPE c, " PO number
auart(4) TYPE c, " Sales document type
matnr(18) TYPE c, " Material
kwmeng(18) TYPE c, " Order quantity
END OF it_item.
DATA: BEGIN OF it_head OCCURS 0,
bstkd(35) TYPE c, " PO number
auart(4) TYPE c, " Sales document type
bstdk(10) TYPE c, " PO Date
vkorg(4) TYPE c, " Sales Organization
vtweg(2) TYPE c, " Distribution Channel
spart(2) TYPE c, " Division
kunnr(10) TYPE c, " Customer
matnr(18) TYPE c, " Material
kwmeng(18) TYPE c, " Order quantity
text(100) TYPE c, " LONG TEXT
END OF it_head.
DATA: BEGIN OF i_lines OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF i_lines.
* Batchinputdata of single transaction
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: it_bdcdata TYPE TABLE OF bdcdata,
wa_bdcdata TYPE bdcdata,
it_msg TYPE TABLE OF bdcmsgcoll,
it_msg1 TYPE TABLE OF bdcmsgcoll,
wa_msg TYPE bdcmsgcoll,
wa_msg1 TYPE bdcmsgcoll.
DATA: BEGIN OF i_messages OCCURS 0,
bstkd LIKE vbkd-bstkd,
auart LIKE vbak-auart,
* MATNR LIKE VBAP-MATNR,
longtext(225).
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF i_messages.
"nodata**************************Session
DATA: nodata(1) VALUE '/' .
*Creation***************************
*INCLUDE bdcrecx1.
*************************Selection Screen****************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002.
PARAMETERS p_mode LIKE ctu_params-dismode DEFAULT 'N'. " Display Mode
*A: show all dynpros
*E: show dynpro on error only
*N: do not display dynpro
PARAMETERS: pfile LIKE rlgrap-filename OBLIGATORY. " File Path
SELECTION-SCREEN END OF BLOCK b1.
**********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pfile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = space
def_path = pfile
mask = ',*.*,*.*.'
mode = 'E'
title = 'Choose File Name'
IMPORTING
filename = pfile
EXCEPTIONS
inv_winsys = 04
no_batch = 08
selection_cancel = 12
selection_error = 16.
IF sy-subrc EQ '04'.
MESSAGE text-001 TYPE 'E'.
ENDIF.
**************************Main Logic*******************************
START-OF-SELECTION.
PERFORM f_upload_file.
PERFORM f_delete_blank.
PERFORM f_create_header.
PERFORM f_create_detail.
PERFORM f_create_output_heading.
PERFORM f_call_va01.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR wa_bdcdata.
wa_bdcdata-program = program.
wa_bdcdata-dynpro = dynpro.
wa_bdcdata-dynbegin = 'X'.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
IF fval <> nodata.
CLEAR wa_bdcdata.
wa_bdcdata-fnam = fnam.
wa_bdcdata-fval = fval.
APPEND wa_bdcdata TO it_bdcdata.
ENDIF.
ENDFORM. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form f_upload_file
*&---------------------------------------------------------------------*
* Upload File
*----------------------------------------------------------------------*
FORM f_upload_file .
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = pfile
filetype = 'DAT'
TABLES
data_tab = it_final.
ENDFORM. " f_upload_file
*&---------------------------------------------------------------------*
*& Form f_call_va01
*&---------------------------------------------------------------------*
* Call VA01
*----------------------------------------------------------------------*
FORM f_call_va01 .
DATA: v_bdcfd1(100), " KWMENG
v_bdcfd2(100). " MABNR
DATA: v_count(2) TYPE n.
REFRESH it_bdcdata[].
CLEAR wa_bdcdata.
LOOP AT it_head.
REFRESH it_bdcdata[].
PERFORM header.
v_count = 1.
LOOP AT it_item WHERE bstkd = it_head-bstkd
AND auart = it_head-auart.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=POAN'.
CONCATENATE 'RV45A-KWMENG(' v_count ')' INTO v_bdcfd1.
PERFORM bdc_field USING 'BDC_CURSOR'
v_bdcfd1. " KWMENG
CONCATENATE 'RV45A-MABNR(' v_count ')' INTO v_bdcfd2.
PERFORM bdc_field USING v_bdcfd2
it_item-matnr. " Material Number
PERFORM bdc_field USING v_bdcfd1
it_item-kwmeng. " Order Quantity
v_count = 2.
ENDLOOP.
*-----------------------------------------------------------------------------------------
* SAVE CODE
*-----------------------------------------------------------------------------------------
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
*-----------------------------------------------------------------------------------------
CALL TRANSACTION 'VA01' USING it_bdcdata
MODE p_mode
MESSAGES INTO it_msg.
IF NOT it_msg IS INITIAL.
LOOP AT it_msg INTO wa_msg.
wa_msg1 = wa_msg.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = wa_msg-msgid
msgnr = wa_msg-msgnr
msgv1 = wa_msg-msgv1
msgv2 = wa_msg-msgv2
msgv3 = wa_msg-msgv3
msgv4 = wa_msg-msgv4
IMPORTING
message_text_output = wa_msg1-msgv1.
APPEND wa_msg1 TO it_msg1.
CLEAR wa_msg1.
ENDLOOP.
ENDIF.
ENDLOOP.
IF NOT it_msg1 IS INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_structure_name = 'BDCMSGCOLL'
TABLES
t_outtab = it_msg1
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.
ENDIF.
ENDFORM. "f_call_va01
*&---------------------------------------------------------------------*
*& Form f_create_detail
*&---------------------------------------------------------------------*
* Store Detail Prgs.
*----------------------------------------------------------------------*
FORM f_create_detail .
LOOP AT it_final.
TRANSLATE: it_final-auart TO UPPER CASE,
it_final-bstkd TO UPPER CASE.
it_item-bstkd = it_final-bstkd.
it_item-auart = it_final-auart.
it_item-matnr = it_final-matnr.
it_item-kwmeng = it_final-kwmeng.
APPEND it_item.
CLEAR it_item.
ENDLOOP.
ENDFORM. " f_create_detail
*&---------------------------------------------------------------------*
*& Form F_CREATE_HEADER
*&---------------------------------------------------------------------*
* Create Header
*----------------------------------------------------------------------*
FORM f_create_header .
DATA: v_po LIKE vbkd-bstkd,
v_so LIKE vbak-auart.
SORT it_final BY bstkd auart.
LOOP AT it_final.
TRANSLATE: it_final-auart TO UPPER CASE,
it_final-bstkd TO UPPER CASE,
it_final-vkorg TO UPPER CASE,
it_final-vtweg TO UPPER CASE,
it_final-spart TO UPPER CASE,
it_final-kunnr TO UPPER CASE.
IF v_po NE it_final-bstkd OR
v_so NE it_final-auart.
it_head-bstkd = it_final-bstkd.
it_head-bstdk = it_final-bstdk.
it_head-auart = it_final-auart.
it_head-vkorg = it_final-vkorg.
it_head-vtweg = it_final-vtweg.
it_head-spart = it_final-spart.
it_head-kunnr = it_final-kunnr.
it_head-text = it_final-text.
APPEND it_head.
CLEAR it_head.
v_po = it_final-bstkd.
v_so = it_final-auart.
ENDIF.
ENDLOOP.
ENDFORM. " F_CREATE_HEADER
*&---------------------------------------------------------------------*
*& Form header
*&---------------------------------------------------------------------*
* Populate Header fields in sales order
*----------------------------------------------------------------------*
FORM header .
PERFORM bdc_dynpro USING 'SAPMV45A' '0101'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBAK-SPART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'VBAK-AUART'
it_head-auart. " Sales document type
PERFORM bdc_field USING 'VBAK-VKORG'
it_head-vkorg. " Sales Organization
PERFORM bdc_field USING 'VBAK-VTWEG'
it_head-vtweg. " Distribution Channel
PERFORM bdc_field USING 'VBAK-SPART'
it_head-spart. " Division
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBKD-BSTDK'.
PERFORM bdc_field USING 'VBKD-BSTKD'
it_head-bstkd. " PO Number
PERFORM bdc_field USING 'VBKD-BSTDK'
it_head-bstdk. " PO Date
PERFORM bdc_field USING 'KUAGV-KUNNR'
it_head-kunnr. " Customer Code
PERFORM bdc_field USING 'KUWEV-KUNNR'
it_head-kunnr. " Customer Code
ENDFORM. " header
*&---------------------------------------------------------------------*
*& Form f_create_output_heading
*&---------------------------------------------------------------------*
FORM f_create_output_heading .
* WRITE: /2 'PO No.' COLOR 1,
* 14 'SO Type' COLOR 1,
* 24 'Msg. Type' COLOR 1,
* 36 'Message' COLOR 1.
* ULINE.
ENDFORM. " f_create_output_heading
*&---------------------------------------------------------------------*
*& Form f_delete_blank
*&---------------------------------------------------------------------*
* Delete blank lines
*----------------------------------------------------------------------*
FORM f_delete_blank .
DELETE it_final WHERE bstkd = space AND auart = space.
ENDFORM. " f_delete_blank
**NO STANDARD PAGE HEADING LINE-SIZE 255.
**************************Internal Table*****************************
DATA: BEGIN OF it_final OCCURS 0,
auart(4) TYPE c, " Sales document type
vkorg(4) TYPE c, " Sales Organization
vtweg(2) TYPE c, " Distribution Channel
spart(2) TYPE c, " Division
kunnr(10) TYPE c, " Customer
bstkd(35) TYPE c, " PO number
bstdk(10) TYPE c, " PO Date
matnr(18) TYPE c, " Material
kwmeng(18) TYPE c, " Order quantity
text(100) TYPE c, " LONG TEXT
END OF it_final.
DATA: BEGIN OF it_item OCCURS 0,
bstkd(35) TYPE c, " PO number
auart(4) TYPE c, " Sales document type
matnr(18) TYPE c, " Material
kwmeng(18) TYPE c, " Order quantity
END OF it_item.
DATA: BEGIN OF it_head OCCURS 0,
bstkd(35) TYPE c, " PO number
auart(4) TYPE c, " Sales document type
bstdk(10) TYPE c, " PO Date
vkorg(4) TYPE c, " Sales Organization
vtweg(2) TYPE c, " Distribution Channel
spart(2) TYPE c, " Division
kunnr(10) TYPE c, " Customer
matnr(18) TYPE c, " Material
kwmeng(18) TYPE c, " Order quantity
text(100) TYPE c, " LONG TEXT
END OF it_head.
DATA: BEGIN OF i_lines OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF i_lines.
* Batchinputdata of single transaction
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: it_bdcdata TYPE TABLE OF bdcdata,
wa_bdcdata TYPE bdcdata,
it_msg TYPE TABLE OF bdcmsgcoll,
it_msg1 TYPE TABLE OF bdcmsgcoll,
wa_msg TYPE bdcmsgcoll,
wa_msg1 TYPE bdcmsgcoll.
DATA: BEGIN OF i_messages OCCURS 0,
bstkd LIKE vbkd-bstkd,
auart LIKE vbak-auart,
* MATNR LIKE VBAP-MATNR,
longtext(225).
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF i_messages.
"nodata**************************Session
DATA: nodata(1) VALUE '/' .
*Creation***************************
*INCLUDE bdcrecx1.
*************************Selection Screen****************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002.
PARAMETERS p_mode LIKE ctu_params-dismode DEFAULT 'N'. " Display Mode
*A: show all dynpros
*E: show dynpro on error only
*N: do not display dynpro
PARAMETERS: pfile LIKE rlgrap-filename OBLIGATORY. " File Path
SELECTION-SCREEN END OF BLOCK b1.
**********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pfile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = space
def_path = pfile
mask = ',*.*,*.*.'
mode = 'E'
title = 'Choose File Name'
IMPORTING
filename = pfile
EXCEPTIONS
inv_winsys = 04
no_batch = 08
selection_cancel = 12
selection_error = 16.
IF sy-subrc EQ '04'.
MESSAGE text-001 TYPE 'E'.
ENDIF.
**************************Main Logic*******************************
START-OF-SELECTION.
PERFORM f_upload_file.
PERFORM f_delete_blank.
PERFORM f_create_header.
PERFORM f_create_detail.
PERFORM f_create_output_heading.
PERFORM f_call_va01.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR wa_bdcdata.
wa_bdcdata-program = program.
wa_bdcdata-dynpro = dynpro.
wa_bdcdata-dynbegin = 'X'.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
IF fval <> nodata.
CLEAR wa_bdcdata.
wa_bdcdata-fnam = fnam.
wa_bdcdata-fval = fval.
APPEND wa_bdcdata TO it_bdcdata.
ENDIF.
ENDFORM. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form f_upload_file
*&---------------------------------------------------------------------*
* Upload File
*----------------------------------------------------------------------*
FORM f_upload_file .
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = pfile
filetype = 'DAT'
TABLES
data_tab = it_final.
ENDFORM. " f_upload_file
*&---------------------------------------------------------------------*
*& Form f_call_va01
*&---------------------------------------------------------------------*
* Call VA01
*----------------------------------------------------------------------*
FORM f_call_va01 .
DATA: v_bdcfd1(100), " KWMENG
v_bdcfd2(100). " MABNR
DATA: v_count(2) TYPE n.
REFRESH it_bdcdata[].
CLEAR wa_bdcdata.
LOOP AT it_head.
REFRESH it_bdcdata[].
PERFORM header.
v_count = 1.
LOOP AT it_item WHERE bstkd = it_head-bstkd
AND auart = it_head-auart.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=POAN'.
CONCATENATE 'RV45A-KWMENG(' v_count ')' INTO v_bdcfd1.
PERFORM bdc_field USING 'BDC_CURSOR'
v_bdcfd1. " KWMENG
CONCATENATE 'RV45A-MABNR(' v_count ')' INTO v_bdcfd2.
PERFORM bdc_field USING v_bdcfd2
it_item-matnr. " Material Number
PERFORM bdc_field USING v_bdcfd1
it_item-kwmeng. " Order Quantity
v_count = 2.
ENDLOOP.
*-----------------------------------------------------------------------------------------
* SAVE CODE
*-----------------------------------------------------------------------------------------
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
*-----------------------------------------------------------------------------------------
CALL TRANSACTION 'VA01' USING it_bdcdata
MODE p_mode
MESSAGES INTO it_msg.
IF NOT it_msg IS INITIAL.
LOOP AT it_msg INTO wa_msg.
wa_msg1 = wa_msg.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = wa_msg-msgid
msgnr = wa_msg-msgnr
msgv1 = wa_msg-msgv1
msgv2 = wa_msg-msgv2
msgv3 = wa_msg-msgv3
msgv4 = wa_msg-msgv4
IMPORTING
message_text_output = wa_msg1-msgv1.
APPEND wa_msg1 TO it_msg1.
CLEAR wa_msg1.
ENDLOOP.
ENDIF.
ENDLOOP.
IF NOT it_msg1 IS INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_structure_name = 'BDCMSGCOLL'
TABLES
t_outtab = it_msg1
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.
ENDIF.
ENDFORM. "f_call_va01
*&---------------------------------------------------------------------*
*& Form f_create_detail
*&---------------------------------------------------------------------*
* Store Detail Prgs.
*----------------------------------------------------------------------*
FORM f_create_detail .
LOOP AT it_final.
TRANSLATE: it_final-auart TO UPPER CASE,
it_final-bstkd TO UPPER CASE.
it_item-bstkd = it_final-bstkd.
it_item-auart = it_final-auart.
it_item-matnr = it_final-matnr.
it_item-kwmeng = it_final-kwmeng.
APPEND it_item.
CLEAR it_item.
ENDLOOP.
ENDFORM. " f_create_detail
*&---------------------------------------------------------------------*
*& Form F_CREATE_HEADER
*&---------------------------------------------------------------------*
* Create Header
*----------------------------------------------------------------------*
FORM f_create_header .
DATA: v_po LIKE vbkd-bstkd,
v_so LIKE vbak-auart.
SORT it_final BY bstkd auart.
LOOP AT it_final.
TRANSLATE: it_final-auart TO UPPER CASE,
it_final-bstkd TO UPPER CASE,
it_final-vkorg TO UPPER CASE,
it_final-vtweg TO UPPER CASE,
it_final-spart TO UPPER CASE,
it_final-kunnr TO UPPER CASE.
IF v_po NE it_final-bstkd OR
v_so NE it_final-auart.
it_head-bstkd = it_final-bstkd.
it_head-bstdk = it_final-bstdk.
it_head-auart = it_final-auart.
it_head-vkorg = it_final-vkorg.
it_head-vtweg = it_final-vtweg.
it_head-spart = it_final-spart.
it_head-kunnr = it_final-kunnr.
it_head-text = it_final-text.
APPEND it_head.
CLEAR it_head.
v_po = it_final-bstkd.
v_so = it_final-auart.
ENDIF.
ENDLOOP.
ENDFORM. " F_CREATE_HEADER
*&---------------------------------------------------------------------*
*& Form header
*&---------------------------------------------------------------------*
* Populate Header fields in sales order
*----------------------------------------------------------------------*
FORM header .
PERFORM bdc_dynpro USING 'SAPMV45A' '0101'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBAK-SPART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'VBAK-AUART'
it_head-auart. " Sales document type
PERFORM bdc_field USING 'VBAK-VKORG'
it_head-vkorg. " Sales Organization
PERFORM bdc_field USING 'VBAK-VTWEG'
it_head-vtweg. " Distribution Channel
PERFORM bdc_field USING 'VBAK-SPART'
it_head-spart. " Division
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBKD-BSTDK'.
PERFORM bdc_field USING 'VBKD-BSTKD'
it_head-bstkd. " PO Number
PERFORM bdc_field USING 'VBKD-BSTDK'
it_head-bstdk. " PO Date
PERFORM bdc_field USING 'KUAGV-KUNNR'
it_head-kunnr. " Customer Code
PERFORM bdc_field USING 'KUWEV-KUNNR'
it_head-kunnr. " Customer Code
ENDFORM. " header
*&---------------------------------------------------------------------*
*& Form f_create_output_heading
*&---------------------------------------------------------------------*
FORM f_create_output_heading .
* WRITE: /2 'PO No.' COLOR 1,
* 14 'SO Type' COLOR 1,
* 24 'Msg. Type' COLOR 1,
* 36 'Message' COLOR 1.
* ULINE.
ENDFORM. " f_create_output_heading
*&---------------------------------------------------------------------*
*& Form f_delete_blank
*&---------------------------------------------------------------------*
* Delete blank lines
*----------------------------------------------------------------------*
FORM f_delete_blank .
DELETE it_final WHERE bstkd = space AND auart = space.
ENDFORM. " f_delete_blank
No comments:
Post a Comment