15 Replies Latest reply: Feb 27, 2012 7:10 PM by sankara rao bhatta RSS

FM for creating GR cancellation or return delivery

sankara rao bhatta
Currently Being Moderated

hi experts,

 

i would like to know whether there is any FM/method to do the cancellation of GR in SRM 7. i found one BAPI for doinf confirmation BAPI_CONFEC_CREATE but not for cancellation. any ideas?

 

thanks

  • Re: FM for creating GR cancellation or return delivery
    Surender Yadav
    Currently Being Moderated

    Why dont you use class/method for cancellation of GR .  Use method /SAPSRM/IF_PDO_BO_CONFDELETE_DOCUMENT(cancellation) and /SAPSRM/IF_PDO_BO_CONFRETURN_DELIVERY(return delivery)  of the below interface after creating instance for confirmation.

     

    
      DATA: lo_bo_conf_adv TYPE REF TO /sapsrm/if_pdo_bo_conf_adv,
                  lo_bo_conf         TYPE REF TO /sapsrm/if_pdo_bo_conf.
    
    
    * Create confirmation object
      CALL METHOD /sapsrm/cl_pdo_fact_conf_adv=>create_new_instance
        EXPORTING
          iv_subtype         = lc_cf
          iv_header_guid     = lv_po_guid
          iv_object_type     = lv_objtyp
          iv_logsys          = lv_po_logsys
          iv_object_id       = p_ls_po_header-object_id
          iv_user_type       = lc_profi
        IMPORTING
          eo_instance        = lo_bo_conf_adv
        CHANGING
          co_message_handler = p_lo_message_consumer.

     

     

    Check for sample code for creating confrimation, similarly you can cancel confirmation.

     

    http://forums.sdn.sap.com/thread.jspa?threadID=2137361&tstart=15

    • Re: FM for creating GR cancellation or return delivery
      sankara rao bhatta
      Currently Being Moderated

      hi,

       

      Thanks for the reply.

       

      i have tried to debug the cancellation process by keeping the breakpoint in delete_document method.. the control goes to this method first when i click cancel and then goes to the constructor you had mentioned. i am bit confused about how to code for cancellation. can you give some high level code for cancellation as well, as you given for confirmation

       

      thanks

      • Re: FM for creating GR cancellation or return delivery
        Surender Yadav
        Currently Being Moderated

        Check this :

         

        Create an instance first  with header guid and if you want to delete only one item then use item guid while creating instance and finally call the delete_document method using that instance.

         

        
        * Create confirmation object
          CALL METHOD /sapsrm/cl_pdo_fact_conf_adv=>create_new_instance
            EXPORTING
              iv_subtype         = lc_cf
              iv_header_guid     = lv_po_guid
              iv_object_type     = lv_objtyp
              iv_logsys          = lv_po_logsys
              iv_object_id       = p_ls_po_header-object_id
              iv_user_type       = lc_profi
            IMPORTING
              eo_instance        = lo_bo_conf_adv
            CHANGING
              co_message_handler = p_lo_message_consumer.
        
                  " Then call the delete document on that.
                    CALL METHOD lo_bo_conf_adv->/sapsrm/if_pdo_bo_conf~delete_document
                      IMPORTING
                        eo_instance        = lo_bo_conf_adv
                      CHANGING
                        co_message_handler = mo_pdo_message_consumer.
        
                    if lo_pdo_conf is initial.
                      commit work.
                    endif.
        

         

        • Re: FM for creating GR cancellation or return delivery
          sankara rao bhatta
          Currently Being Moderated

          hi yadav,

           

          the confusion i am having is this.

           

          when i want to cancel an existing GR, for the instantiation of the object  what should i pass. is it the PO guid ot the confirmation GUID. the reason i am asking this is for confirmation the source docuement  is PO but for the cancellation the reference documnet is GR. so what should i pass in the below code.

           

          
          * Create confirmation object
            CALL METHOD /sapsrm/cl_pdo_fact_conf_adv=>create_new_instance
              EXPORTING
                iv_subtype         = lc_cf
                iv_header_guid     = lv_po_guid
                iv_object_type     = lv_objtyp
                iv_logsys          = lv_po_logsys
                iv_object_id       = p_ls_po_header-object_id
                iv_user_type       = lc_profi
              IMPORTING
                eo_instance        = lo_bo_conf_adv
              CHANGING
                co_message_handler = p_lo_message_consumer.
          

           

          thanks

          • Re: FM for creating GR cancellation or return delivery
            Surender Yadav
            Currently Being Moderated

            Hello

             

            Apologies, that just a copy past mistake

             

             

            CALL METHOD /sapsrm/cl_pdo_fact_conf_adv=>create_new_instance

                EXPORTING

                  iv_subtype         = 'CA'

                  iv_header_guid     = <Confermation header Guid>

                 IV_NUMBER_INT       = <Item no>(optional)

                  iv_object_type     = 'BUS2203'

                  iv_user_type       = <type of user>( DSKTOP for standard user) or (PROFI for professional user)

                IMPORTING

                  eo_instance        = lo_bo_conf_adv

                CHANGING

                  co_message_handler = p_lo_message_consumer.

            • Re: FM for creating GR cancellation or return delivery
              sankara rao bhatta
              Currently Being Moderated

              hi,

               

              no problem. i have tried this. i am getting the cancellation document number but the status is 'DELETED' at the header level in BBP_PD for the cancellation document. not sure why? if i do the cancellation from webgui it works fine.

               

              thanks

              • Re: FM for creating GR cancellation or return delivery
                Surender Yadav
                Currently Being Moderated

                In that case use the SUBTYPE as 'CF' instead of 'CA'. Try this option.

                 

                Regards.

                • Re: FM for creating GR cancellation or return delivery
                  sankara rao bhatta
                  Currently Being Moderated

                  hi

                   

                  No i need to create cancellation so we should use CA

                • Re: FM for creating GR cancellation or return delivery
                  sankara rao bhatta
                  Currently Being Moderated

                  hi

                   

                  what i am suspecting is the create_new_instance method actually calls delete_document inside it. so because we are calling that method explicitly again it is updating the status as delete? i will try by commenting the delete_documnent method and see what happens.

                  • Re: FM for creating GR cancellation or return delivery
                    Surender Yadav
                    Currently Being Moderated

                    I have debugged it and found that the create instance is creating a new instance for the confirmation which shouldnu2019t happen.

                     

                    When we use 'CA' as Subtype it treats it as a new deletion confirmation document.  Hence if we want to use DELETE_DOCUMENT we shouldnu2019t be calling create_new_instance with 'CA' it won't work. Just get the Conf. Instance and then call delete_document or only call create_new_instance with subtype 'CA'. That will work.

                     

                    Pls. try this one. It will definitely work.

                     

                     

                      CALL METHOD /sapsrm/cl_pdo_fact_conf_adv=>create_new_instance
                        EXPORTING
                          iv_subtype         = 'CA'
                          iv_header_guid     = lv_guid
                          iv_object_type     = 'BUS2203'
                    *      iv_number_int      = '0000000001'
                    *      iv_logsys          = 'DXXCLNT010'
                    *      iv_object_id       = 'X000056XXX'
                          iv_user_type       = 'DSKTOP'
                        IMPORTING
                          eo_instance        = lo_bo_conf_adv
                        CHANGING
                          co_message_handler = lo_message_consumer.
                    
                    * Cast to PDO object
                      lo_bo_conf ?= lo_bo_conf_adv.
                    
                    * Set save flag
                      CALL METHOD lo_bo_conf->set_save_or_park_flag
                        EXPORTING
                          iv_save_flag = abap_true.
                    
                    * Confirm document
                      CALL METHOD lo_bo_conf->confirm
                        CHANGING
                          co_message_handler = lo_message_consumer.
                    
                      COMMIT WORK.
                    

                     

                    OR

                     

                      CALL METHOD /sapsrm/cl_pdo_fact_conf_adv=>get_instance
                        EXPORTING
                          iv_header_guid = lv_guid
                          iv_mode        = 'DISPLAY'
                        RECEIVING
                          ro_instance    = lo_bo_conf_adv.
                    
                    ** Then call the delete document on that.
                      CALL METHOD lo_bo_conf_adv->/sapsrm/if_pdo_bo_conf~delete_document
                        IMPORTING
                          eo_instance        = lo_bo_conf_adv
                        CHANGING
                          co_message_handler = lo_message_consumer.
                    
                    * Cast to PDO object
                      lo_bo_conf ?= lo_bo_conf_adv.
                    
                    * Set save flag
                      CALL METHOD lo_bo_conf->set_save_or_park_flag
                        EXPORTING
                          iv_save_flag = abap_true.
                    
                    * Confirm document
                      CALL METHOD lo_bo_conf->confirm
                        CHANGING
                          co_message_handler = lo_message_consumer.
                      COMMIT WORK.
                    

                     

                     

                    Both Works.

                    • Re: FM for creating GR cancellation or return delivery
                      sankara rao bhatta
                      Currently Being Moderated

                      hi Yadav,

                       

                      even i was debugging the code yesterday and came to a similar conclusion. I really appreciate you for taking time and helping me out here. i am planning to write a blog/article about it in SDN, so that other people can take advantage of it.

                      thank you very much once again.

                    • Re: FM for creating GR cancellation or return delivery
                      sankara rao bhatta
                      Currently Being Moderated

                      Hi Yadav,

                       

                      one more clarification i need in this. when i am executing this methods in a FM manually with my id, the created_by and changed_by fields in the GR are getting updated by my user id. i want to updated these fields with some other user id. how can i do that. i have explored the structures of update_hdr and update_item methods of interface /sapsrm/if_pdo_bo_conf, bu surprisingly they don't have any field for created_by or changed_by. i went through the interface methods as well, but could not find anything relevant.

                       

                      thanks

                      • Re: FM for creating GR cancellation or return delivery
                        Surender Yadav
                        Currently Being Moderated

                        Try changing the system field SY-UNAME before calling the method and also Check the exporting parameter of DELETE_DOCUMENT method, it has created by Field.

                        • Re: FM for creating GR cancellation or return delivery
                          sankara rao bhatta
                          Currently Being Moderated

                          hi yadav,

                           

                          i am having another issue. as you know when you update the 'final entry' flag in gr system updates the po item also with 'no further confiramtions' radio button . is there any way i can remove this flags using some method and create new confirmations for the po item.

                           

                          thanks

                        • Re: FM for creating GR cancellation or return delivery
                          sankara rao bhatta
                          Currently Being Moderated

                          hi yadav

                           

                          need your help again for updating the PO items. i using the below code. system is creating the change versions but with no items. not sure why

                           

                          
                          CALL FUNCTION 'BBP_PD_PO_GETDETAIL'
                          EXPORTING
                          *   I_GUID                           =
                            I_OBJECT_ID                      =  po_no
                          *   I_ATTACH_WITH_DOC                = ' '
                            I_WITH_ITEMDATA                  = 'X'
                          IMPORTING
                            E_HEADER                         = ls_hdr
                          *   ET_ATTACH                        =
                          TABLES
                            E_ITEM                           = lt_item .
                          
                          data : obj_hdr_guid type BBP_GUID,
                                lo_po_inst type ref to /SAPSRM/IF_PDO_BO_PO_ADV,
                                lo_po type ref to /SAPSRM/IF_PDO_BO_PO.
                          obj_hdr_guid = ls_hdr-guid.
                          TRY.
                          CALL METHOD /sapsrm/cl_pdo_factory_po_adv=>get_instance
                            EXPORTING
                              iv_header_guid  = obj_hdr_guid
                              iv_mode         =  'EDIT'
                              iv_process_type = 'ECPO'
                          *    iv_wiid         =
                          *    iv_user_id      =
                            RECEIVING
                              ro_instance     = lo_po_inst
                              .
                          
                          lo_po ?= lo_po_inst.
                          data: lt_parguid type BBPT_GUID,
                                ls_parguid like line of lt_parguid.
                          ls_parguid-guid = ls_hdr-guid.
                          append ls_parguid to lt_parguid.
                          CALL METHOD lo_po->/sapsrm/if_pdo_item_list~get_item_list
                            EXPORTING
                                  it_parent_guid = lt_parguid
                            IMPORTING
                              et_item_guid   = lt_itmguid
                              .
                          
                          
                          CALL METHOD lo_po->get_item_detail
                            EXPORTING
                              it_item_guid         = lt_itmguid
                          *    it_requested_fields  =
                            IMPORTING
                              et_item              =  lt_item
                          *    eo_meta_data_handler =
                            CHANGING
                             co_message_handler   = lo_msg
                              .
                          data: lt_item_upd type BBPT_PD_PO_ITEM_ICU,
                                ls_item_upd like line of lt_item_upd.
                          loop at lt_item into ls_item.
                            move-corresponding ls_item to ls_item_upd.
                            IF ls_item_upd-final_entry eq space.
                               ls_item_upd-final_entry = 'S'.
                            else.
                               ls_item_upd-final_entry = 'D'.
                            ENDIF.
                            ls_item_upd-quantity = '3'.
                            append ls_item_upd to lt_item_upd.
                            clear : ls_item_upd, ls_item.
                            endloop.
                          
                          CALL METHOD lo_po->update_item
                            EXPORTING
                              it_item            = lt_item_upd
                            CHANGING
                              co_message_handler = lo_msg
                              .
                          *TRY.
                          CALL METHOD lo_po->/sapsrm/if_pdo_base~submit_update
                            CHANGING
                              co_message_handler = lo_msg
                              .
                          * CATCH /sapsrm/cx_pdo_wrong_mode .
                          * CATCH /sapsrm/cx_pdo_abort .
                          *ENDTRY.
                          
                          CALL METHOD lo_po->order
                            CHANGING
                              co_message_handler = lo_msg
                              .
                          CALL METHOD lo_msg->get_messages
                                        IMPORTING
                                          et_messages = lt_messages_class.
                          
                              CATCH /sapsrm/cx_pdo_incons_user
                              /sapsrm/cx_pdo_lock_failed
                          * CATCH /sapsrm/cx_pdo_abort .
                          
                          * CATCH /sapsrm/cx_pdo_error .
                          
                          
                          * CATCH /sapsrm/cx_pdo_no_authorizatio .
                            /sapsrm/cx_pdo_no_authorizatio
                            /sapsrm/cx_pdo_order_invalid
                           /sapsrm/cx_pdo_parameter_error
                            /sapsrm/cx_pdo_pd_read_error
                            /sapsrm/cx_pdo_status_change
                            /sapsrm/cx_pdo_status_error
                            /sapsrm/cx_pdo_wf_mode_ban
                            /sapsrm/cx_pdo_wrong_bus_type
                            /sapsrm/cx_pdo_wrong_mode
                              /sapsrm/cx_pdo_error
                                /sapsrm/cx_pdo_abort into lo_root.
                          * CATCH /sapsrm/cx_pdo_abort .
                          * CATCH /sapsrm/cx_pdo_no_authorizatio .
                          
                          
                            lv_msg = lo_root->get_text( ).
                          
                          
                          
                          * CATCH /sapsrm/cx_pdo_abort .
                          
                          
                          ENDTRY.
                          commit work.

                           

Actions