Table of Contents:



*@---------------------------------------------------------------------
*@ PROGRAM ID    : ZF_VENDOR_PAY_METHOD_CHG
*@ Program Desc  : This Program creates a BDC session that alters
*@                 payment methods for vendors
*@
*@ Input file    : ID -
*@ Output file   : ID -
*@ Tables Updated: Table LFB1 -
*@                 Transaction Code -
*@                 This program creates a BDC Session that simulates the
*@                 change of Payment Method on the Vendor master LFB1.
*@                 The table is not updated directly.  Transaction FK02
*@                 is called and data is put in the paramters on the
*@                 screen and transaction is run to save the data.
*@
*@ Created by Ibrahim Jadalowen. December 27, 2001.
*@----------------------------------------------------------------------
** Change History:
**
************************************************************************
*
REPORT zf_vendor_pay_method_chg
NO STANDARD PAGE HEADING
LINE-SIZE 80
LINE-COUNT 65.

TABLES: lfb1.

DATA: counter TYPE i,
      counta LIKE counter,
      countb LIKE counta.


DATA: BEGIN OF itab OCCURS 0,
       lifnr LIKE lfb1-lifnr,
       bukrs LIKE lfb1-bukrs,
       zwels LIKE lfb1-zwels,          "Payment method
     END OF itab.


DATA:  BEGIN OF bdcdel OCCURS 0.
        INCLUDE STRUCTURE bdcdata.
DATA:  END OF bdcdel.

SELECTION-SCREEN: BEGIN OF BLOCK sel WITH FRAME TITLE box1.
SELECT-OPTIONS: vendor FOR lfb1-lifnr,
                company FOR lfb1-bukrs OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK sel.
SELECTION-SCREEN: SKIP 2.
SELECTION-SCREEN: BEGIN OF BLOCK payment WITH FRAME TITLE box2.
PARAMETERS:     pay1 LIKE lfb1-zwels OBLIGATORY,
                pay2 LIKE lfb1-zwels OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK payment.
SELECTION-SCREEN: SKIP 2.
SELECTION-SCREEN: BEGIN OF BLOCK bdc WITH FRAME TITLE box3.
PARAMETERS: name LIKE apqi-groupid OBLIGATORY DEFAULT sy-cprog.
SELECTION-SCREEN: SKIP.
PARAMETERS: bdc_updt RADIOBUTTON GROUP rad1 DEFAULT 'X'.
PARAMETERS: bdc_test RADIOBUTTON GROUP rad1.
SELECTION-SCREEN: END OF BLOCK bdc.

INITIALIZATION.
  box1 = 'Select by '.
  box2 = 'Payment Methods'.
  box3 = 'BDC Session  '.

END-OF-SELECTION.

  PERFORM get_data.

  SORT itab BY lifnr.

  counter = 0.
  FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
  LOOP AT itab.
    ULINE AT (44).
    WRITE:/1 sy-vline,
           2 itab-lifnr NO-GAP,
           12 sy-vline,
           13 itab-bukrs NO-GAP,
           20 sy-vline,
           21 itab-zwels NO-GAP,
           32 sy-vline,
           33 pay2 NO-GAP,
           44 sy-vline.

    ADD 1 TO counter.
  ENDLOOP.
  ULINE AT (44).

  IF counter = 0.
    SKIP 4.
    WRITE:
      'NO DATA EXISTS FOR THE SELECTED CRITERIA; NO SESSION CREATED'.
  ENDIF.

  IF bdc_updt = 'X' AND counter GT 0.
    SKIP 3.

    CALL FUNCTION 'BDC_OPEN_GROUP'
         EXPORTING
              client = sy-mandt
              group  = name
              keep   = 'X'
              user   = sy-uname.

    SORT itab BY lifnr.

    LOOP AT itab.

      PERFORM generate_bdc_data.


      CALL FUNCTION 'BDC_INSERT'
           EXPORTING
                tcode     = 'FK02'
           TABLES
                dynprotab = bdcdel.
      REFRESH bdcdel.

    ENDLOOP.
    CALL FUNCTION 'BDC_CLOSE_GROUP'.
    WRITE: / 'BDC session generated:', name, '.  Time: ', sy-uzeit.
    WRITE: / 'Please run Batch session in SM35'.
    SKIP.
    WRITE: / 'Number of records to be processed:', counter.
  ENDIF.

  IF bdc_updt IS INITIAL.
    WRITE: / 'This is a test run.  No BDC session was generated'.
  ENDIF.

***********************************************************************
FORM get_data.

  SELECT lifnr bukrs zwels FROM lfb1
       INTO TABLE itab
       WHERE lifnr IN vendor AND
             bukrs IN company AND
             zwels = pay1.

ENDFORM.

*---------------------------------------------------------------------*
*       FORM GENERATE_BDC_DATA                                        *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM generate_bdc_data.
  PERFORM bdc_dynpro(zvbatch4) TABLES bdcdel USING 'SAPMF02K' '0106'.
  PERFORM bdc_field(zvbatch4) TABLES bdcdel
                     USING 'RF02K-LIFNR' itab-lifnr.
  PERFORM bdc_field(zvbatch4) TABLES bdcdel
                     USING 'RF02K-BUKRS' itab-bukrs.
  PERFORM bdc_field(zvbatch4) TABLES bdcdel
                     USING 'RF02K-D0215' 'X'.
  PERFORM bdc_field(zvbatch4) TABLES bdcdel
                     USING 'BDC_OKCODE' '/00'.

  PERFORM bdc_dynpro(zvbatch4) TABLES bdcdel USING 'SAPMF02K' '0215'.
  PERFORM bdc_field(zvbatch4) TABLES bdcdel
                     USING 'LFB1-ZWELS' pay2.
  PERFORM bdc_field(zvbatch4) TABLES bdcdel
                     USING 'BDC_OKCODE' '/11'.

ENDFORM.

************************************************************************

TOP-OF-PAGE.
  CALL FUNCTION 'Z_REPORT_HEADING'
       EXPORTING
            progtitle = 'Payment Method changes for Vendors'
            progname  = sy-cprog
            user      = sy-uname
       EXCEPTIONS
            OTHERS    = 1.
  SKIP.
  ULINE AT (44).

  WRITE:/1 sy-vline,
         2 'Vendor' NO-GAP,
         12 sy-vline,
         13 'Company' NO-GAP,
         20 sy-vline,
         21 'Payment' NO-GAP,
         32 sy-vline,
         33 'Payment' NO-GAP,
         44 sy-vline.

  WRITE:/1 sy-vline,
         2 'Number' NO-GAP,
         12 sy-vline,
         13 'Code' NO-GAP,
         20 sy-vline,
         21 'Method From' NO-GAP,
         32 sy-vline,
         33 'Method To' NO-GAP,
         44 sy-vline.