Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

CONVERSION_EXIT_TSTRG_OUTPUT problem.

Former Member
0 Likes
1,880

Dear All,

I have written a function module for changing the schedule line dates for a Sales Order using BAPI_SALESORDER_CHANGE. I have added this FM to a Standard Task which will be triggerred on tcode VA02 (Change SO).

When I execute the FM, it works fine and the sales order is getting updated.

But when I update the SO using VA02, the FM is triggered by the Standard Task, but stops at some point in the code and comes out. So the SO is not updated.

I have found out that the execution stops at a conversion exit CONVERSION_EXIT_TSTRG_OUTPUT.

If i comment out the conv exit, the exec stops at the next FM i.e 'DATE_CONVERT_TO_FACTORYDATE'.

I've pasted my code below.

Pls Help.

reg,

Jinson


************************************************************************
FUNCTION zsdf_update_dates_from_toc.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(VBELN) TYPE  VBAK-VBELN
*"----------------------------------------------------------------------
*
*  TABLES : ztest.
*  DATA: endwhile TYPE c VALUE 'X'.
*  IF sy-uname = 'ZCVENAJINS'.
*    WHILE endwhile = 'X'.
*
*    ENDWHILE.
*  ENDIF.

  DATA  : w_serno TYPE ztest.
 
  w_serno-serno = 'JFIRST'.
  INSERT into ztest values w_serno.
  COMMIT WORK.

*

  DATA : it_soltoc   TYPE TABLE OF zpptsol_toc,
         it_jstat1   TYPE TABLE OF jstat,
         it_vbap     TYPE TABLE OF vbap,
         it_vbep     TYPE TABLE OF vbep.

  DATA : wa_soltoc  TYPE zpptsol_toc,
         wa_t630r   TYPE t630r,
         wa_xvbap   TYPE vbap,
         wa_xvbep   TYPE vbep,
         wa_tvst    TYPE tvst,
         wa_tvro    TYPE tvro,
         wa_jstat1 TYPE jstat,
         wa_tj301  TYPE tj30.

  DATA : lv_date         TYPE datum,
         lv_date_factory TYPE datum,
         lv_date_ind,
         lv_rvdate       TYPE datum,
         lv_stonr2       TYPE tj30-stonr,
         lv_objnr2       LIKE jsto-objnr,
         lv_obtyp2       LIKE jsto-obtyp,
         lv_stsma2       LIKE jsto-stsma,
         lv_updflag,                       "Flag = X if SO needs to be updated
         lv_tocflag,                       "Flag = X if TOC Run
         lv_error        TYPE c,
         lv_vkorg        TYPE vkorg.
  DATA : c_toc(5) VALUE 'E0002'.

  DATA:
        it_bapisditmx   TYPE STANDARD TABLE OF bapisditmx,
        it_bapisditm    TYPE STANDARD TABLE OF bapisditm,
        it_bapischdlx   TYPE STANDARD TABLE OF bapischdlx,
        it_bapischdl    TYPE STANDARD TABLE OF bapischdl,
        it_bapiret2     TYPE STANDARD TABLE OF bapiret2.

  DATA: gs_salesdoc     TYPE vbak-vbeln,
        wa_order        TYPE bapisdh1,
        wa_orderx       TYPE bapisdh1x,
        wa_bapisditmx   TYPE bapisditmx,
        wa_bapisditm    TYPE bapisditm,
        wa_bapischdlx   TYPE bapischdlx,
        wa_bapischdl    TYPE bapischdl,
        wa_bapiret2     TYPE bapiret2.


* Check for Sales Order Change ONLY
*  CHECK sy-tcode = 'VA02'.
  break zcvenajins.
  REFRESH it_soltoc.

  SELECT SINGLE vkorg INTO lv_vkorg
    FROM vbak WHERE vbeln = vbeln.

  CHECK lv_vkorg = '0080'.


  SELECT  *
    FROM  vbap
    INTO  TABLE it_vbap
   WHERE  vbeln  = vbeln.
  IF NOT it_vbap[] IS INITIAL.

    SELECT  *
      FROM  vbep
      INTO  TABLE it_vbep
       FOR  ALL ENTRIES IN it_vbap
     WHERE  vbeln  = it_vbap-vbeln
       AND  posnr  = it_vbap-posnr.

*   Get data from TOC for all line SO items.
    SELECT  *
      FROM  zpptsol_toc
      INTO  TABLE it_soltoc
       FOR  ALL ENTRIES IN it_vbap
     WHERE  werks   = it_vbap-werks
       AND  ord_no  = it_vbap-vbeln
       AND  itm_nr  = it_vbap-posnr.
    SORT it_soltoc BY werks ord_no itm_nr.

    LOOP AT it_vbep INTO wa_xvbep.
      READ TABLE it_vbap INTO wa_xvbap
                      WITH KEY vbeln  = wa_xvbep-vbeln
                               posnr  = wa_xvbep-posnr.
      IF sy-subrc = 0.
*     Check Status for TOC RUN
        REFRESH it_jstat1.
        lv_objnr2 = wa_xvbap-objnr.

        CALL FUNCTION 'STATUS_READ'
          EXPORTING
            client           = sy-mandt
            objnr            = lv_objnr2
            only_active      = 'X'
          IMPORTING
            obtyp            = lv_obtyp2
            stsma            = lv_stsma2
            stonr            = lv_stonr2
          TABLES
            status           = it_jstat1
          EXCEPTIONS
            object_not_found = 1
            OTHERS           = 2.

        IF NOT  it_jstat1[] IS INITIAL.
          CLEAR lv_tocflag.
          READ TABLE it_jstat1 INTO wa_jstat1 WITH KEY stat = c_toc.
          IF sy-subrc EQ 0.
            LOOP AT it_jstat1 INTO wa_jstat1 WHERE stat EQ c_toc.
              SELECT  SINGLE *
                FROM  tj30
                INTO  wa_tj301
               WHERE  stsma EQ lv_stsma2
                 AND  estat EQ wa_jstat1-stat.
              IF sy-subrc NE 0.
*               No TOC Run
                CLEAR lv_tocflag.
                CONTINUE.
              ELSE.
                lv_tocflag = 'X'.
                EXIT.
              ENDIF.
            ENDLOOP.
          ELSE.
*           No TOC Run
            CLEAR lv_tocflag.
          ENDIF.

*         Do not proceed if TOC not run
          CHECK lv_tocflag = 'X'.

          READ TABLE it_soltoc INTO wa_soltoc
                               WITH KEY werks   = wa_xvbap-werks
                                        ord_no  = wa_xvbep-vbeln
                                        itm_nr  = wa_xvbep-posnr
                               BINARY SEARCH.
          IF sy-subrc = 0.


            IF wa_xvbep-mbdat NE wa_soltoc-mat_avld.

              lv_updflag = 'X'.

*           Change original Delivery date with Mat Availability Date from TOC
              wa_xvbep-mbdat = wa_soltoc-mat_avld.

*           Calculate the New Loading date
              SELECT  SINGLE *
                FROM  t630r
                INTO  wa_t630r
               WHERE  vstel  = wa_xvbap-vstel
                 AND  route  = wa_xvbap-route.
              IF sy-subrc = 0.

                 CALL FUNCTION 'CONVERSION_EXIT_TSTRG_OUTPUT'
                  EXPORTING
                    input  = wa_t630r-pipatg
                  IMPORTING
                    output = wa_t630r-pipatg.

                wa_xvbep-lddat = wa_xvbep-mbdat + wa_t630r-pipatg.

                CLEAR: lv_date,lv_date_factory,lv_date_ind.
                lv_date = wa_xvbep-lddat.

                CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
                  EXPORTING
                    correct_option               = '+'
                    date                         = lv_date
                    factory_calendar_id          = 'FI'
                  IMPORTING
                    date                         = lv_date_factory
                    workingday_indicator         = lv_date_ind
                  EXCEPTIONS
                    calendar_buffer_not_loadable = 1
                    correct_option_invalid       = 2
                    date_after_range             = 3
                    date_before_range            = 4
                    date_invalid                 = 5
                    factory_calendar_not_found   = 6
                    OTHERS                       = 7.
                IF sy-subrc <> 0.
                  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                ENDIF.
                wa_xvbep-lddat = lv_date_factory.        "New Loading date
              ENDIF.

*           Calculate the New Goods Issue date
              SELECT  SINGLE *
                FROM  tvst
                INTO  wa_tvst
               WHERE  vstel  = wa_xvbap-vstel.
              IF sy-subrc = 0.

                CALL FUNCTION 'CONVERSION_EXIT_TSTRG_OUTPUT'
                  EXPORTING
                    input  = wa_tvst-loadtg
                  IMPORTING
                    output = wa_tvst-loadtg.

                wa_xvbep-wadat = wa_xvbep-lddat + wa_tvst-loadtg.

                CLEAR: lv_date,lv_date_factory,lv_date_ind.
                lv_date = wa_xvbep-wadat.

                CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
                  EXPORTING
                    correct_option               = '+'
                    date                         = lv_date
                    factory_calendar_id          = 'FI'
                  IMPORTING
                    date                         = lv_date_factory
                    workingday_indicator         = lv_date_ind
                  EXCEPTIONS
                    calendar_buffer_not_loadable = 1
                    correct_option_invalid       = 2
                    date_after_range             = 3
                    date_before_range            = 4
                    date_invalid                 = 5
                    factory_calendar_not_found   = 6
                    OTHERS                       = 7.
                IF sy-subrc <> 0.
                  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                ENDIF.

                wa_xvbep-wadat = lv_date_factory.        "New Goods Issue date

              ENDIF.

*           Calculate the New Delivery Date
              SELECT  SINGLE *
                FROM  tvro
                INTO  wa_tvro
               WHERE  route  = wa_xvbap-route.
              IF sy-subrc = 0.
*                CONCATENATE rv45a-etdat+6(4) rv45a-etdat+3(2) rv45a-etdat+0(2)
*                       INTO lv_rvdate.
                lv_rvdate = wa_xvbep-edatu.

                CALL FUNCTION 'CONVERSION_EXIT_TSTRG_OUTPUT'
                  EXPORTING
                    input  = wa_tvro-traztd
                  IMPORTING
                    output = wa_tvro-traztd.

                lv_rvdate = lv_rvdate + wa_tvro-traztd.

                CLEAR: lv_date,lv_date_factory,lv_date_ind.
                lv_date = lv_rvdate.

                CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
                  EXPORTING
                    correct_option               = '+'
                    date                         = lv_date
                    factory_calendar_id          = 'FI'
                  IMPORTING
                    date                         = lv_date_factory
                    workingday_indicator         = lv_date_ind
                  EXCEPTIONS
                    calendar_buffer_not_loadable = 1
                    correct_option_invalid       = 2
                    date_after_range             = 3
                    date_before_range            = 4
                    date_invalid                 = 5
                    factory_calendar_not_found   = 6
                    OTHERS                       = 7.
                IF sy-subrc <> 0.
                  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                ENDIF.

                lv_rvdate  = lv_date_factory.        "New Delivery date

*                CONCATENATE lv_rvdate+6(2) lv_rvdate+4(2) lv_rvdate+0(4)
*                       INTO rv45a-etdat SEPARATED BY '.'.
                wa_xvbep-edatu = lv_rvdate.
              ENDIF.

              MODIFY it_vbep FROM wa_xvbep.

              wa_orderx-updateflag = 'U'.
              wa_bapisditm-itm_number  = wa_xvbep-posnr.
              APPEND wa_bapisditm TO it_bapisditm.

              wa_bapisditmx-itm_number = wa_xvbep-posnr.
              wa_bapisditmx-updateflag = 'U'.
              APPEND wa_bapisditmx TO it_bapisditmx.

              wa_bapischdl-itm_number = wa_xvbep-posnr.
              wa_bapischdl-sched_line = wa_xvbep-etenr.
              wa_bapischdl-ms_date    = wa_xvbep-mbdat.
              wa_bapischdl-load_date  = wa_xvbep-lddat.
              wa_bapischdl-gi_date    = wa_xvbep-wadat.
              wa_bapischdl-req_date   = wa_xvbep-edatu.
              APPEND wa_bapischdl TO it_bapischdl.

              wa_bapischdlx-itm_number = wa_xvbep-posnr.
              wa_bapischdlx-sched_line = wa_xvbep-etenr.
              wa_bapischdlx-ms_date    = 'X'.
              wa_bapischdlx-load_date  = 'X'.
              wa_bapischdlx-gi_date    = 'X'.
              wa_bapischdlx-req_date   = 'X'.
              wa_bapischdlx-updateflag = 'U'.
              APPEND wa_bapischdlx TO it_bapischdlx.
            ELSE.
              CLEAR lv_updflag.
            ENDIF.
          ENDIF.
        ENDIF.                         "it_jstat1[] IS INITIAL
      ENDIF.
    ENDLOOP.

    IF lv_updflag = 'X'.
      DELETE ADJACENT DUPLICATES FROM: it_bapisditm,
                                       it_bapisditmx,
                                       it_bapischdl,
                                       it_bapischdlx.

      CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
        EXPORTING
          salesdocument    = vbeln
          order_header_inx = wa_orderx
        TABLES
          return           = it_bapiret2
          order_item_in    = it_bapisditm
          order_item_inx   = it_bapisditmx
          schedule_lines   = it_bapischdl
          schedule_linesx  = it_bapischdlx.

      CLEAR lv_error.
      LOOP AT it_bapiret2 INTO wa_bapiret2
                    WHERE type = 'A'
                       OR type = 'X'
                       OR type = 'E'.
        lv_error = 'X'.
        EXIT.
      ENDLOOP.
*   If any error occured, then send error message to Spool, Else Do Commit Work.
      IF lv_error NE 'X'.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
      ELSE.
        DATA: ls_print_parameters TYPE pri_params,
              ls_valid_flag       TYPE c LENGTH 1.

        CALL FUNCTION 'GET_PRINT_PARAMETERS'
          EXPORTING
            mode                 = 'CURRENT'
            no_dialog            = 'X'
          IMPORTING
            out_parameters       = ls_print_parameters
            valid                = ls_valid_flag
          EXCEPTIONS
            invalid_print_params = 2
            OTHERS               = 4.
        IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.

        NEW-PAGE PRINT ON PARAMETERS ls_print_parameters
                            NO DIALOG.

        WRITE: / 'Sales Document'(001),
                  vbeln,
                 'Has Error when updating the Delivery Date'(002).
        LOOP AT it_bapiret2 INTO wa_bapiret2.
          WRITE: / wa_bapiret2-message,
                   wa_bapiret2-message_v1,
                   wa_bapiret2-message_v2,
                   wa_bapiret2-message_v3,
                   wa_bapiret2-message_v4.
        ENDLOOP.
        NEW-PAGE PRINT OFF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFUNCTION.

2 REPLIES 2
Read only

uwe_schieferstein
Active Contributor
0 Likes
899

Hello Jinson

I have three suggestions and recommendations that you might try:


  CHECK lv_vkorg = '0080'.  " Why not blocking processing in the first place?

  SELECT SINGLE vkorg INTO lv_vkorg
    FROM vbak WHERE vbeln = vbeln.
 
  "CHECK lv_vkorg = '0080'.
...


                 CALL FUNCTION 'CONVERSION_EXIT_TSTRG_OUTPUT'
                  EXPORTING
                    input  = wa_t630r-pipatg
                  IMPORTING
                    output = ld_pipatg.  " wa_t630r-pipatg.

     wa_t630r-pipatg = ld_pipatg.  " I prefer to use a different field for the import

Regarding the second fm that fails I would try to run it in SE37 using the values you see in the debugger.

Regards

Uwe

Read only

0 Likes
899

Thanks Uwe for the reply.

As for your first suggestion, I am fetching the vkorg based on vbeln and then blocking if its not '0080'. so I cannot put the check unless I have some value in lv_vkorg.

The second and the third suggestions accepted. But still its not working.

As I said, when I execute the FM in SE37, it works fine. But when its called from a Standard Task, the code below the first conv exit does not get executed. If I comment that FM call, the execution stops at the next FM call does and so on...

I am also not able to debug when the FM is being called from the Standard Task. I also tried to put an Infinite Loop in the code so that I can debug the code from SM50. But that was also of no use.

So for testing, I created a Z table and inserted differnt values into it at diffrent points in code.

Please convey if you have any more suggestions.

Thanks & regards,

Jinson.