Page tree
Skip to end of metadata
Go to start of metadata

Purpose

The engineer is not getting any hint that the material BOM is not up to date any longer.

Overview

This guide shows how an Icon can be added to ECTR desktop to show the information of outdated BOMs.

Backend

In the backend the BAdI method BAdI /DSCSAG/ENH_DOC→FOL_OPENDETAILS_AFTER has to be implemented.

/DSCSAG/IF_ENH_DOC~FOL_OPENDETAILS_AFTER
  DATA: ls_doc_key       TYPE bapi_doc_keys,
        ls_material      TYPE /dscsag/mat_infolder,

        lt_dost          TYPE TABLE OF dost,
        lt_mast          TYPE TABLE OF mast,
        ls_dost          TYPE dost,
        ls_mast          TYPE mast,
        lt_drad          TYPE TABLE OF drad,
        lt_stzu          TYPE TABLE OF stzu,
        ls_stzu          TYPE stzu,
        lv_bod_tstmp     TYPE cs_tstamp,
        lv_bom_tstmp     TYPE cs_tstamp,
        ls_customer_data TYPE  /dscsag/name_value_dokob,
        lv_material      TYPE mara-matnr.

  DATA: lt_dost_stzu TYPE TABLE OF stzu,
        lt_mast_stzu TYPE TABLE OF stzu.

  FIELD-SYMBOLS: <ls_document> TYPE /dscsag/doc_infolder,
                 <ls_drad>     TYPE drad,
                 <ls_mast>     TYPE mast.



  LOOP AT out_document ASSIGNING <ls_document>.

*-- check if   DIR has a Structure -   if not we have nothing todo
    CLEAR: lt_dost[], ls_dost.
    SELECT stlnr dokar doknr dokvr doktl FROM dost INTO CORRESPONDING FIELDS OF TABLE lt_dost
                  WHERE dokar = <ls_document>-dokar AND
                        doknr = <ls_document>-doknr AND
                        dokvr = <ls_document>-dokvr AND
                        doktl = <ls_document>-doktl.
    IF sy-subrc <> 0.
      CLEAR lt_dost.
    ENDIF.

*-- get linked  Material(s)
    CLEAR: lt_drad[], lv_material.
    SELECT dokar doknr dokvr doktl objky cad_pos   FROM drad INTO CORRESPONDING FIELDS OF TABLE lt_drad
    WHERE dokar = <ls_document>-dokar AND
          doknr = <ls_document>-doknr AND
          dokvr = <ls_document>-dokvr AND
          doktl = <ls_document>-doktl AND
          dokob = 'MARA'.
    IF sy-subrc  =  0.

      LOOP AT lt_drad ASSIGNING <ls_drad> WHERE cad_pos IS NOT INITIAL.
        lv_material = <ls_drad>-objky.
        EXIT.
      ENDLOOP.
*- if material is not yet found => pick up first w/o cad_pos
      IF lv_material IS INITIAL.
        READ TABLE  lt_drad  INDEX 1  ASSIGNING <ls_drad>.
        IF sy-subrc = 0.
          lv_material = <ls_drad>-objky.
        ENDIF.
      ENDIF.
    ENDIF. " sy-subrc  =  0.


*-- get BOD timestamp
    CLEAR: lt_stzu[], ls_stzu, lv_bod_tstmp.
    READ  TABLE   lt_dost INDEX 1 INTO ls_dost.
    IF sy-subrc EQ 0.
      SELECT tstmp FROM stzu INTO CORRESPONDING FIELDS OF TABLE lt_stzu
          WHERE stlty = 'D'
          AND   stlnr = ls_dost-stlnr.
      IF sy-subrc EQ 0.
        SORT lt_stzu BY stldt DESCENDING stltm DESCENDING.
        READ TABLE lt_stzu INTO ls_stzu INDEX 1.
        lv_bod_tstmp = ls_stzu-tstmp.
      ELSE.
        CLEAR lv_bod_tstmp.
      ENDIF.
    ENDIF.

*-- get BOM timestamp
    IF NOT lv_material IS INITIAL.
      CLEAR: ls_mast, lv_bom_tstmp.
      SELECT SINGLE stlnr matnr FROM mast INTO CORRESPONDING FIELDS OF ls_mast  WHERE matnr = lv_material.
      IF sy-subrc EQ 0.
        REFRESH lt_stzu.
        SELECT tstmp FROM stzu
          INTO CORRESPONDING FIELDS OF TABLE lt_stzu
          WHERE stlty = 'M'
          AND   stlnr = ls_mast-stlnr.
        IF sy-subrc EQ 0.
          SORT lt_stzu BY stldt DESCENDING stltm DESCENDING.
          READ TABLE lt_stzu INTO ls_stzu INDEX 1.
          lv_bom_tstmp = ls_stzu-tstmp.
        ENDIF.
      ENDIF.
    ENDIF.

    CLEAR ls_customer_data.
    IF lv_material IS INITIAL OR lv_bom_tstmp IS INITIAL OR lv_bod_tstmp IS INITIAL.
      ls_customer_data-value = 'NA'.
    ELSEIF lv_bom_tstmp GE lv_bod_tstmp.
      ls_customer_data-value = 'UP'.
    ELSE.
      ls_customer_data-value = 'NU'.
    ENDIF.

*-- add attribute for Document
    ls_customer_data-name = 'BOM_UPD'.
    ls_customer_data-dokob = /dscsag/cl_constants=>mc_dsc_dir.
    ls_doc_key-documentnumber  =  <ls_document>-doknr.
    ls_doc_key-documenttype  =  <ls_document>-dokar.
    ls_doc_key-documentversion  =  <ls_document>-dokvr.
    ls_doc_key-documentpart  =  <ls_document>-doktl.
    ls_customer_data-objky  = /dscsag/utils=>dockeytoobjky( ls_doc_key ).
    APPEND    ls_customer_data   TO  out_customer_data.


*-- add attribute for Material
    READ TABLE out_material TRANSPORTING NO FIELDS WITH KEY matnr = lv_material.
    IF sy-subrc EQ 0.
      ls_customer_data-name = 'BOM_UPD'.
      ls_customer_data-objky = lv_material.
      ls_customer_data-dokob = /dscsag/cl_constants=>mc_dsc_mara.
      APPEND    ls_customer_data   TO  out_customer_data.
    ENDIF.
  ENDLOOP.


Frontend

The property which is returned by the backend has to be shown in the frontend of a document.

dtype.xml
...
                               <icondef icon_position="8" icon_group="default" use_status_color="no"
                                        icon_identifier="BOMUPD_$(CUSTOM[BOM_UPD])"/>
...


customer_icons.txt
BOMUPD_UP = {0}/sap/bill_of_material
BOMUPD_NA = {0}/sap/o_delete
BOMUPD_NU = {0}/sap/bill_of_material<<{0}/sap/o_outdated
BOMUPD_   = flag/flag_sign_off
...

Solution


Disclaimer

The additional reading of this data will take some time. Please only do this if you have a high performance backend system.  

Related Content

Related Documents

Related SAP Notes/KBAs

__________________________________________________________________________________________________________


  • No labels