martes, 16 de mayo de 2017

LOGICA MENSAJES KO01 - 16/05

NOTESE QUE TOMA EL PRIMER ERROR DEL MENSAJE DE LA TX
EN CASO NO SEA ERROR TE TOMA EL PRIMER Y SEGUNDO MENSAJE
EN CASO EXISTA UN SEGUNDO Y TE LO CONCATENA. TE PUSE
EN COMENTARIOS DONDE IRIA LA LOGICA PARA QUE GUARDES LOS DATOS A
LA TABLA Z EN CASO NO GENERE LA ORDEN.

TU PUEDES!

CODIGO:

FUNCTION ZPRUEBA_ORDEN_TRABAJO.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(PO_ORDENT) TYPE  ZAC_LORDENT
*"  EXPORTING
*"     REFERENCE(MESSAGE) TYPE  LS_MSG
*"----------------------------------------------------------------------
DATAWA_LORDENT LIKE LINE OF PO_ORDENT.
*----------------------------------------------------------------------*
* DEFINICIONES PARA BATCH INPUT
*----------------------------------------------------------------------*
DATAI_MSGBI      LIKE BAPIRET2 OCCURS WITH HEADER LINE.
DATAOPT          TYPE CTU_PARAMS.
DATAI_LOG_HANDLE TYPE BALLOGHNDL.

DATABEGIN OF BDCDATA OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.
DATAEND OF BDCDATA.

DATABEGIN OF MESSTAB OCCURS 10.
        INCLUDE STRUCTURE BDCMSGCOLL.
DATA END OF MESSTAB.

DATAWA_PARAMETERS TYPE CTU_PARAMS.
DATAWA_MESSTAB LIKE LINE OF MESSTAB.

DATALV_MESSAGE(250TYPE C,
      LV_MESSAGE_AUX(250TYPE C.
DATALV_AUFNR TYPE AUFK-AUFNR.
DATALV_USER7(10TYPE C.
DATALV_PROZS(6TYPE C.

            DATALV_CTU TYPE APQI-PUTACTIVE VALUE 'X'.
            DATALV_MODE TYPE APQI-PUTACTIVE VALUE 'N'.
            DATALV_UPD TYPE APQI-PUTACTIVE VALUE 'S'.
            DATAGS_MESSTAB LIKE LINE OF MESSTAB.

            WA_PARAMETERS-DISMODE  'N'.
            WA_PARAMETERS-UPDMODE  'L'.
            WA_PARAMETERS-RACOMMIT 'X'.
*----------------------------------------------------------------------*
*BDC_DYNPRO
*  CLEAR BDCDATA.
*  BDCDATA-PROGRAM  = PROGRAM.
*  BDCDATA-DYNPRO   = DYNPRO.
*  BDCDATA-DYNBEGIN = 'X'.
*  APPEND BDCDATA.

*BDC_FIELD
*  CLEAR BDCDATA.
*  BDCDATA-FNAM = FNAM.
*  BDCDATA-FVAL = FVAL.
*  APPEND BDCDATA.

DEFINE BDC_DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM  &1.
BDCDATA-DYNPRO   &2.
BDCDATA-DYNBEGIN &3.
APPEND BDCDATA.
END-OF-DEFINITION.

DEFINE BDC_FIELD.
CLEAR BDCDATA.
BDCDATA-FNAM &1.
BDCDATA-FVAL &2.
APPEND BDCDATA.
END-OF-DEFINITION.

LOOP AT PO_ORDENT INTO WA_LORDENT.
*----------------------------------------------------------------------*
* VALIDACIÓN EXISTENCIA ORDEN
*----------------------------------------------------------------------*
SELECT SINGLE AUFNR
  INTO LV_AUFNR
  FROM AUFK
  WHERE AUART EQ WA_LORDENT-AUART "Clase Orden
    AND AUTYP EQ WA_LORDENT-AUTYP "Tipo de Orden / por lo general amarrada a la Clase de Orden
    AND AUFEX EQ WA_LORDENT-AUFNR.
  IF LV_AUFNR IS NOT INITIAL.
          CONCATENATE 'Orden' WA_LORDENT-AUFNR
          'relacionada a Orden SAP: ' LV_AUFNR INTO
          LV_MESSAGE SEPARATED BY SPACE.
          MOVE LV_MESSAGE TO MESSAGE.
  CONTINUE.
  ELSE.
*----------------------------------------------------------------------*
* LLENADO BATCH INPUT
*----------------------------------------------------------------------*
            REFRESH BDCDATAMESSTAB.
            CLEAR   BDCDATAMESSTAB.
            CLEAR   LV_MESSAGELV_MESSAGE_AUX.
            CLEAR     LV_USER7.
            CLEAR     LV_PROZS.

CONCATENATE WA_LORDENT-USER7+6(2)
            WA_LORDENT-USER7+4(2)
            WA_LORDENT-USER7+0(4)
            INTO LV_USER7 SEPARATED BY '.'.
WRITE WA_LORDENT-PROZS TO LV_PROZS.
CONDENSE LV_PROZS.

BDC_DYNPRO 'SAPMKAUF' '0100' 'X'.
BDC_FIELD 'BDC_CURSOR' 'COAS-AUART'.
BDC_FIELD 'BDC_OKCODE' '/00'.
BDC_FIELD 'COAS-AUART' WA_LORDENT-AUART.
BDC_DYNPRO 'SAPMKAUF' '0600' 'X'.
BDC_FIELD 'BDC_OKCODE' '=BUT2'.
BDC_FIELD 'COAS-KTEXT' WA_LORDENT-KTEXT.
BDC_FIELD 'COAS-BUKRS' WA_LORDENT-BUKRS.
BDC_FIELD 'COAS-WERKS' WA_LORDENT-WERKS.
BDC_FIELD 'COAS-SCOPE' 'GG'"Gastos Generales "FIJO
BDC_FIELD 'COAS-PRCTR' WA_LORDENT-PRCTR.
BDC_FIELD 'COAS-KOSTV' WA_LORDENT-KOSTV.
BDC_FIELD 'COAS-AKSTL' WA_LORDENT-AKSTL.
BDC_FIELD 'COAS-ABUKR' WA_LORDENT-ABUKR.
BDC_FIELD 'COAS-AUFEX' WA_LORDENT-AUFNR"Es la orden externa, que viene del otro sistema
*Antes de pasar a otra dynpro aquí se podría agregar otro campo de la misma dynpro, ejm División por ejemplo
*y lo mismo con otros campos que se encuentren dentro de un grupo de dynpro
*BDC_FIELD 'COAS-GSBER' WA_LORDENT-GSBER.
BDC_DYNPRO 'SAPMKAUF' '0600' 'X'.
BDC_FIELD 'BDC_OKCODE' '=BUT4'"Pestañas
BDC_FIELD 'COAS-WAERS' WA_LORDENT-WAERS"Por lo general ya arrastra del sistema
BDC_DYNPRO 'SAPMKAUF' '0600' 'X'.
BDC_FIELD 'BDC_OKCODE' '=ABVO'.
BDC_FIELD 'COAS-USER0' WA_LORDENT-USER0.
BDC_FIELD 'COAS-USER2' WA_LORDENT-USER2.
BDC_FIELD 'COAS-USER6' WA_LORDENT-USER6.
BDC_FIELD 'COAS-USER7' LV_USER7.
BDC_FIELD 'COAS-USER9' 'X'.
BDC_DYNPRO 'SAPLKOBS' '0130' 'X'.
BDC_FIELD 'BDC_CURSOR' 'COBRB-EXTNR(01)'.
BDC_FIELD 'BDC_OKCODE' '/00'.
BDC_FIELD 'COBRB-KONTY(01)' WA_LORDENT-KONTY.
BDC_FIELD 'DKOBR-EMPGE(01)' WA_LORDENT-EMPGE.
BDC_FIELD 'COBRB-PROZS(01)' LV_PROZS.
BDC_FIELD 'COBRB-PERBZ(01)' WA_LORDENT-PERBZ.
BDC_FIELD 'COBRB-EXTNR(01)' WA_LORDENT-EXTNR.
BDC_DYNPRO 'SAPLKOBS' '0130' 'X'.
BDC_FIELD 'BDC_CURSOR' 'COBRB-KONTY(01)'.
BDC_FIELD 'BDC_OKCODE' '=SICH'.
*----------------------------------------------------------------------*
* EJECUCIÓN BATCH INPUT
*----------------------------------------------------------------------*
     CALL TRANSACTION 'KO01'
            USING  BDCDATA
            OPTIONS FROM WA_PARAMETERS
            MESSAGES INTO MESSTAB.
*----------------------------------------------------------------------*
* RECEPCIÓN MENSAJE
*----------------------------------------------------------------------*
IF MESSTAB[] IS NOT INITIAL"El batch input arrojo un mensaje
  READ TABLE  MESSTAB INTO GS_MESSTAB
  WITH KEY MSGTYP 'S'
           MSGID 'KO'
           MSGNR 107.
  IF SY-SUBRC EQ 0"Encontró el mensaje que confirma creación
    CONCATENATE 'Se creo Orden CO SAP : ' GS_MESSTAB-MSGV1
    'para la Orden' WA_LORDENT-AUFNR
    INTO LV_MESSAGE
    SEPARATED BY space.
    MOVE LV_MESSAGE TO MESSAGE.
  ELSE"Lee el primer error
    READ TABLE  MESSTAB INTO GS_MESSTAB
    WITH KEY MSGTYP 'E'.
      IF SY-SUBRC EQ 0.
          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
            EXPORTING
              MSGID                     GS_MESSTAB-MSGID
              MSGNR                     GS_MESSTAB-MSGNR
              MSGV1                     GS_MESSTAB-MSGV1
              MSGV2                     GS_MESSTAB-MSGV2
              MSGV3                     GS_MESSTAB-MSGV3
              MSGV4                     GS_MESSTAB-MSGV4
            IMPORTING
             MESSAGE_TEXT_OUTPUT       LV_MESSAGE.
             MOVE LV_MESSAGE TO MESSAGE.
*          IF SY-SUBRC <> 0. "No se genero el mensaje de la tx
*          CONCATENATE
*          'No se generó la Orden CO SAP para la orden '
*          WA_LORDENT-AUFNR
*          INTO LV_MESSAGE
*          SEPARATED BY SPACE.
*          MOVE LV_MESSAGE TO MESSAGE.
*          ELSE.
*          CONCATENATE 'Error SAP: ' LV_MESSAGE INTO
*          LV_MESSAGE SEPARATED BY SPACE.
*          MOVE LV_MESSAGE TO MESSAGE.
*          ENDIF.
      ELSE"Cualquier otro mensaje que no creo orden y no es tipo 'E'
*          CONCATENATE
*          'No se generó la Orden CO SAP para la orden '
*          WA_LORDENT-AUFNR
*          INTO LV_MESSAGE
*          SEPARATED BY SPACE.
*          MOVE LV_MESSAGE TO MESSAGE.
        READ TABLE  MESSTAB INTO GS_MESSTAB INDEX 1.
            CALL FUNCTION 'MESSAGE_TEXT_BUILD'
            EXPORTING
              MSGID                     GS_MESSTAB-MSGID
              MSGNR                     GS_MESSTAB-MSGNR
              MSGV1                     GS_MESSTAB-MSGV1
              MSGV2                     GS_MESSTAB-MSGV2
              MSGV3                     GS_MESSTAB-MSGV3
              MSGV4                     GS_MESSTAB-MSGV4
            IMPORTING
             MESSAGE_TEXT_OUTPUT       LV_MESSAGE.

            READ TABLE  MESSTAB INTO GS_MESSTAB INDEX 2.
            IF sy-subrc EQ 0.
            CALL FUNCTION 'MESSAGE_TEXT_BUILD'
            EXPORTING
              MSGID                     GS_MESSTAB-MSGID
              MSGNR                     GS_MESSTAB-MSGNR
              MSGV1                     GS_MESSTAB-MSGV1
              MSGV2                     GS_MESSTAB-MSGV2
              MSGV3                     GS_MESSTAB-MSGV3
              MSGV4                     GS_MESSTAB-MSGV4
            IMPORTING
             MESSAGE_TEXT_OUTPUT       LV_MESSAGE_AUX.
            ENDIF.

            CONCATENATE LV_MESSAGE LV_MESSAGE_AUX INTO LV_MESSAGE SEPARATED BY SPACE.
            MOVE LV_MESSAGE TO MESSAGE.
      ENDIF.
      "OJO!
      "En esta parte del codigo puede ingresarse la logica para guardar todo dentro de una tabla Z
      "ya que dentro de este ELSE es que se indica que no se generó la Orde 
CO, en este punto tomarias los datos del WA_LORDENT y lo guardarias en tu Z, campo por campo o concatenando todo, las dos maneras deberia funcionar.
ENDIF.
ENDIF.
ENDIF"Validación existencia Orden Externa
ENDLOOP.
ENDFUNCTION.

No hay comentarios.:

Publicar un comentario