antelio
1/3/2018 - 5:56 PM

ZPRAA_ACTIVATION

ZPRAA_ACTIVATION

*&---------------------------------------------------------------------*
*& Report  ZPRAA_ACTIVATION
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zpraa_activation.

CONSTANTS: tipo_movimento TYPE bwart VALUE '241'.

DATA: t_inbox TYPE TABLE OF ztbaa_inbox_mm,
      t_mkpf TYPE TABLE OF mkpf,
      x_mkpf TYPE mkpf,
      t_mseg TYPE TABLE OF mseg,
      t_anla TYPE TABLE OF anla,
      t_anlh TYPE TABLE OF anlh,
      w_inbox TYPE ztbaa_inbox_mm,
      w_mseg TYPE mseg.

FIELD-SYMBOLS: <inbox> TYPE ztbaa_inbox_mm.

* Parametros para chamada de transações.
DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE,
        messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

* Retorno da messtable.
DATA: w_mess TYPE bdcmsgcoll.

WAIT UP TO 5 SECONDS.

* Carrega tabelas internas (mseg, mkpf, anla, anlh, inbox)
PERFORM read_data.

DATA: t_number TYPE i.
DESCRIBE TABLE t_inbox LINES t_number.

WRITE: / 'Processando ', t_number, 'registros da tabela ZTBAA_INBOX_MM'.

LOOP AT t_inbox ASSIGNING <inbox>.

  CALL FUNCTION 'ENQUEUE_EZTBAA_ACTIVATE'
    EXPORTING
      mandt = sy-mandt
      mblnr = <inbox>-mblnr
      mjahr = <inbox>-mjahr
      zeile = <inbox>-zeile.

  CHECK sy-subrc IS INITIAL.

  DATA: flag_check TYPE flag.
  CLEAR: flag_check.

  SELECT SINGLE flag INTO flag_check
    FROM ztbaa_inbox_mm
    WHERE mblnr EQ <inbox>-mblnr
    AND mjahr EQ <inbox>-mjahr
    AND zeile EQ <inbox>-zeile.

  CHECK flag_check IS INITIAL.

* recupera os dados do material na mseg.
  READ TABLE t_mseg INTO w_mseg WITH KEY
    mblnr = <inbox>-mblnr
    mjahr = <inbox>-mjahr
    zeile = <inbox>-zeile.

  CHECK sy-subrc IS INITIAL.

  READ TABLE t_mkpf INTO x_mkpf WITH KEY
    mblnr = <inbox>-mblnr
    mjahr = <inbox>-mjahr.

  CHECK sy-subrc IS INITIAL.

* cria o sub-numero do imobilizado
  IF <inbox>-zanln2 IS INITIAL.

    DATA: w_anla TYPE anla,
          w_anlh TYPE anlh,
          w_class LIKE klah-class,
          w_object LIKE ausp-objek,
          w_tab TYPE clobjdat,
          w_leas TYPE lryth,
          w_lifnr TYPE lifnr,
          w_lifnrl TYPE lifnr,
          v_sub_anln2 TYPE anln2,
          tclass LIKE sclass OCCURS 0,
          tobjectdata LIKE clobjdat OCCURS 0.

    READ TABLE t_anla INTO w_anla WITH KEY
       anln1 = w_mseg-anln1
       anln2 = w_mseg-anln2
       bukrs = w_mseg-bukrs.

    CHECK sy-subrc IS  INITIAL.

    READ TABLE t_anlh INTO w_anlh WITH KEY
      anln1 = w_mseg-anln1
      bukrs = w_mseg-bukrs.

    CHECK sy-subrc IS  INITIAL.

*   Carrega classificação e características do lote do material
    PERFORM read_classification.

    CLEAR: bdcdata, messtab.
    REFRESH: bdcdata, messtab.

*   Monta objeto para chamada da transação as11
    PERFORM load_data_as11.

    WRITE: / 'Início de execução da AS11: Documento: ',
             <inbox>-mblnr, ' Imobilizado: ', w_mseg-anln1, ' Item: ',  w_mseg-zeile.

    CALL TRANSACTION 'AS11' USING bdcdata
                     MODE   'A' " ctumode
                     UPDATE 'N' " cupdate
                     MESSAGES INTO messtab.

*   Recupera sub-número gerado pela as11
    IF sy-subrc IS INITIAL.
      WRITE: / 'AS11 Executada com sucesso.'.

      CLEAR w_mess.
      READ TABLE messtab INTO w_mess WITH KEY
        msgid = 'AA'
        msgnr = 228.

      <inbox>-zanln2 = w_mess-msgv2.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = <inbox>-zanln2
        IMPORTING
          output = <inbox>-zanln2.

*     atualiza o sub-numero na tabela de inbox de ativação
      MODIFY ztbaa_inbox_mm FROM <inbox>.

    ELSE.
      WRITE: / 'Não foi possível executar a transação AS11 para o documento ',
                <inbox>-mblnr, ' imobilizado ', <inbox>-anln1, ' item ', <inbox>-zeile.

    ENDIF.

    PERFORM print_message.

  ENDIF.

  CHECK sy-subrc IS INITIAL.

  WAIT UP TO 2 SECONDS.

  IF <inbox>-zanln2 IS NOT INITIAL AND <inbox>-flag IS INITIAL.
* Faz a transferencia de valor para o imobilizaod pai para o filho.
    DATA: w_mkpf TYPE mkpf.

    READ TABLE t_mkpf INTO w_mkpf WITH KEY
      mblnr = w_mseg-mblnr
      mjahr = w_mseg-mjahr.

    CHECK sy-subrc IS  INITIAL.

    WRITE: / 'Início de execução da ABUMN: Documento: ',
             <inbox>-mblnr, ' Imobilizado: ', w_mseg-anln1, ' Sub nº: ',  <inbox>-zanln2.

* Monta objeto para chamada da transação abumn
    CLEAR: bdcdata, messtab.
    REFRESH: bdcdata, messtab.
    PERFORM load_data_abumn.

    CALL TRANSACTION 'ABUMN' USING bdcdata
                     MODE   'A' " ctumode
                     UPDATE 'N' " cupdate
                     MESSAGES INTO messtab.

* atualiza dados finais de processamento na tabela ztbaa_inbox_mm
    IF sy-subrc IS INITIAL.

      WRITE: / 'ABUMN Executada com sucesso.'.

      CLEAR w_mess.
      READ TABLE messtab INTO w_mess WITH KEY
        msgid = 'AA'
        msgnr = 228.

      <inbox>-matnr = w_mseg-matnr.
      <inbox>-werks = w_mseg-werks.
      <inbox>-bukrs = w_mseg-bukrs.
      <inbox>-lgort = w_mseg-lgort.
      <inbox>-charg = w_mseg-charg.
      <inbox>-anln1 = w_mseg-anln1.
      <inbox>-anln2 = w_mseg-anln2.
      <inbox>-dmbtr = w_mseg-dmbtr.
      <inbox>-menge = w_mseg-menge.
      <inbox>-meins = w_mseg-meins.
      <inbox>-flag = 'X'.

      MODIFY ztbaa_inbox_mm FROM <inbox>.

    ELSE.
      WRITE: / 'Não foi possível executar a transação ABUMN para o documento ',
                <inbox>-mblnr, ' Imobilizado: ', w_mseg-anln1, ' Sub nº: ',  <inbox>-zanln2.
    ENDIF.

    PERFORM print_message.

  ENDIF.

  WAIT UP TO 2 SECONDS.

  PERFORM check_abgdat.
  PERFORM change_timedata USING <inbox>.

  CALL FUNCTION 'DEQUEUE_EZTBAA_ACTIVATE'
    EXPORTING
      mandt = sy-mandt
      mblnr = <inbox>-mblnr
      mjahr = <inbox>-mjahr
      zeile = <inbox>-zeile.

ENDLOOP.

* INCLUDE bdcrecx1.
INCLUDE zpraa_activation_forms.



*----------------------------------------------------------------------*
***INCLUDE ZPRAA_ACTIVATION_FORMS .
*----------------------------------------------------------------------*

DATA: BEGIN OF st_leas,
        lifnr LIKE knvk-lifnr,
        namev LIKE knvk-namev,
        name1 LIKE knvk-name1,
        titel_ap LIKE knvk-titel_ap,
        abtpa LIKE knvk-abtpa,
      END OF st_leas.

DATA: wa_leas LIKE st_leas.

*&---------------------------------------------------------------------*
*&      Form  READ_DATA
*&---------------------------------------------------------------------*
FORM read_data.
* seleciona os dumentos de ativação a serem processados
  SELECT * INTO TABLE t_inbox
    FROM ztbaa_inbox_mm
    WHERE zanln2 EQ '' OR flag EQ ''.

  CHECK sy-subrc IS INITIAL.

*  seleciona os dados de cabeçalho

  DATA: w_inbox LIKE ztbaa_inbox_mm,
        w_mkpf TYPE mkpf.
  READ TABLE t_inbox INDEX 1 INTO w_inbox.

  "checa se o documento de material já foi criado
  DO 50 TIMES.
    SELECT SINGLE * INTO w_mkpf
      FROM mkpf
      WHERE mblnr = w_inbox-mblnr.
    IF sy-subrc IS INITIAL.
      EXIT.
    ELSE.
      WAIT UP TO 1 SECONDS.
    ENDIF.
  ENDDO.

  IF sy-subrc IS NOT INITIAL.
    MESSAGE x100(zlw) WITH 'Documento de Material não foi gerado'.
  ENDIF.

  SELECT * INTO TABLE t_mkpf
    FROM mkpf
    FOR ALL ENTRIES IN t_inbox
    WHERE mblnr EQ t_inbox-mblnr
      AND mjahr EQ t_inbox-mjahr.

  CHECK sy-subrc IS INITIAL.

*  seleciona os dados dos documentos de imobilizados na mseg.
  SELECT * INTO TABLE t_mseg
    FROM mseg
    FOR ALL ENTRIES IN t_inbox
    WHERE mblnr EQ t_inbox-mblnr
      AND mjahr EQ t_inbox-mjahr
      AND zeile EQ t_inbox-zeile
      AND bwart EQ tipo_movimento
      AND xauto EQ ''.

  CHECK sy-subrc IS INITIAL.

*  seleciona dados do registro mestre de imobilizados
  SELECT * INTO TABLE t_anla
    FROM anla
    FOR ALL ENTRIES IN t_mseg
    WHERE bukrs EQ t_mseg-bukrs
    AND anln1 EQ t_mseg-anln1
      AND anln2 EQ t_mseg-anln2.

  CHECK sy-subrc IS INITIAL.

*  seleciona numero principal dos imobilizados
  SELECT * INTO TABLE t_anlh
    FROM anlh
    FOR ALL ENTRIES IN t_mseg
    WHERE anln1 EQ t_mseg-anln1
      AND bukrs EQ t_mseg-bukrs.

  CHECK sy-subrc IS INITIAL.
ENDFORM.                    " READ_DATA

*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.
ENDFORM.                    "BDC_FIELD

*&---------------------------------------------------------------------*
*&      Form  read_classification
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM read_classification.
  w_class = 'MM_LOTE'.
  w_object = w_mseg-matnr.
  w_object+18 = w_mseg-charg.

  CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
    EXPORTING
      class              = w_class
      classtext          = 'X'
      classtype          = '023'
      clint              = 0
      features           = 'X'
      language           = sy-langu
      object             = w_object
      objecttable        = 'MCH1'
      key_date           = sy-datum
      initial_charact    = 'X'
      no_value_descript  = ' '
      change_service_clf = 'X'
      inherited_char     = ' '
      change_number      = ' '
    TABLES
      t_class            = tclass
      t_objectdata       = tobjectdata
    EXCEPTIONS
      no_classification  = 1
      no_classtypes      = 2
      invalid_class_type = 3
      OTHERS             = 4.

  CHECK sy-subrc IS  INITIAL.

  w_leas = '000'.
  CLEAR: w_lifnrl, w_lifnr.
  LOOP AT tobjectdata INTO w_tab.
    IF w_tab-atnam EQ 'MM_LOTE_LEASING' AND w_tab-ausp1 EQ 'Leasing'.
      w_leas =  '001'.
    ELSEIF w_tab-atnam EQ 'MM_LOTE_FORNEC'.
      w_lifnr = w_tab-ausp1.
    ELSEIF w_tab-atnam EQ 'MM_LOTE_FORNEC_LEASING'.
      w_lifnrl = w_tab-ausp1.
    ENDIF.
  ENDLOOP.

  IF w_lifnrl IS NOT INITIAL.
    PERFORM get_leasing_data.
  ENDIF.
ENDFORM.                    "read_classification

*&---------------------------------------------------------------------*
*&      Form  load_data_as11
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM load_data_as11.

  DATA: txtsub TYPE maktg,
        "w_kostl TYPE kostl,
        w_unit TYPE meins,
        w_aktiv(8).

* Recupera texto descritivo do material.
  SELECT SINGLE maktg INTO txtsub
    FROM makt
    WHERE matnr EQ w_mseg-matnr
    AND spras EQ sy-langu.

  CHECK sy-subrc IS INITIAL.

* Faz a conversão da unidade de medida.
  CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
    EXPORTING
      input          = w_anla-meins
      language       = sy-langu
    IMPORTING
      output         = w_unit
    EXCEPTIONS
      unit_not_found = 1
      OTHERS         = 2.

  CHECK sy-subrc IS INITIAL.

* Recupera o centro de custo.
*  SELECT SINGLE kostl INTO w_kostl
*    FROM anlz
*    WHERE bukrs EQ w_mseg-bukrs
*    AND anln1 EQ w_mseg-anln1
*    AND anln2 EQ w_mseg-anln2.

*  CHECK sy-subrc IS INITIAL.

*  CONCATENATE w_anla-aktiv+6(2) w_anla-aktiv+4(2) w_anla-aktiv(4) INTO w_aktiv.
* TICKET #86
  CONCATENATE x_mkpf-budat+6(2) x_mkpf-budat+4(2) x_mkpf-budat(4) INTO w_aktiv.

  "Duração do cpntrato de leasing
  DATA: w_lejar LIKE anla-lejar, " (anos)
        w_leper LIKE anla-leper. " (meses

  w_lejar = wa_leas-titel_ap DIV 12.
  w_leper = wa_leas-titel_ap MOD 12.

  PERFORM bdc_dynpro      USING 'SAPLAIST' '0110'.
  PERFORM bdc_field       USING:
        'BDC_CURSOR' 'RA02S-NASSETS',
        'BDC_OKCODE' '=MAST',
        'ANLA-ANLN1' w_anla-anln1,
        'ANLA-BUKRS' w_anla-bukrs,
        'RA02S-NASSETS' '1'.

  PERFORM bdc_dynpro      USING 'SAPLAIST' '1000'.
  PERFORM bdc_field       USING:
        'BDC_OKCODE' '=TAB02',
        'ANLA-TXT50' txtsub,
        'ANLH-ANLHTXT' w_anla-txt50,
        'ANLA-MENGE' '0',
        'ANLA-INVNR' w_anla-invnr,
*{   REPLACE        LWPK900168                                        1
*\        'ANLA-MEINS' 'PEÇ',
        'ANLA-MEINS' 'PEC',
*}   REPLACE
        'RA02S-XHIST' 'X',
        'ANLA-INKEN' 'X',
        'BDC_CURSOR' 'ANLA-AKTIV',
        'ANLA-DEAKT' '',
        'ANLA-AKTIV' w_aktiv.

  PERFORM bdc_dynpro      USING 'SAPLAIST' '1000'.
  PERFORM bdc_field       USING:
        'BDC_OKCODE' '=TAB03',
        'BDC_CURSOR' 'ANLZ-KFZKZ',
        "'ANLZ-KOSTL' w_kostl,
        'ANLZ-KFZKZ' w_mseg-charg.
  "IF w_anla-anlkl NE '00008000'.
  PERFORM bdc_field USING 'ANLZ-XSTIL' ' '.
  "ENDIF.

  PERFORM bdc_dynpro      USING 'SAPLAIST' '1000'.
  PERFORM bdc_field       USING:
        'BDC_OKCODE' '=TAB04',
        'BDC_CURSOR' 'ANLA-ORD41',
        'RA02S-EQANZ' '1'.

  PERFORM bdc_dynpro      USING 'SAPLAIST' '1000'.
  PERFORM bdc_field       USING:
        'BDC_OKCODE' '=TAB07',
        'BDC_CURSOR' 'ANLA-TYPBZ',
        'ANLA-LIFNR' w_lifnr,
        'ANLA-LIEFE' w_anla-liefe,
        'ANLA-TYPBZ' w_mseg-matnr.

  PERFORM bdc_dynpro      USING 'SAPLAIST' '1000'.
  PERFORM bdc_field       USING:
        'BDC_OKCODE' '=TAB08',
        'BDC_CURSOR' 'ANLA-LRYTH',
        'ANLA-LEAFI' wa_leas-lifnr,
        'ANLA-LVTNR' wa_leas-namev,
        'ANLA-LEABG' wa_leas-name1,
        'ANLA-LEJAR' w_lejar,
        'ANLA-LEPER' w_leper,
        'ANLA-LBASW' wa_leas-abtpa,
        'ANLA-LRYTH' w_leas.

  PERFORM bdc_dynpro      USING 'SAPLAIST' '1000'.
  PERFORM bdc_field       USING:
        'ANLB-AFABG(01)' w_aktiv,
        'BDC_OKCODE' '=BUCH',
        'BDC_CURSOR' 'ANLA-ANLN1'.

ENDFORM.                    "load_data_as11

*&---------------------------------------------------------------------*
*&      Form  load_data_abumn
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM load_data_abumn.

  "SET PARAMETER ID 'BUK' FIELD w_mseg-bukrs.
  DATA: bukrs LIKE anla-bukrs.
  CLEAR bukrs.
  GET PARAMETER ID 'BUK' FIELD bukrs.
  IF bukrs IS INITIAL.
    SET PARAMETER ID 'BUK' FIELD '0200'.
  ENDIF.

  DATA: w_raifp2 LIKE raifp2,
        w_bzdat(8) TYPE c,
        w_bldat(8) TYPE c,
        w_budat(8) TYPE c.

  DATA: w_menge(13),
        w_dmbtr(13).

  WRITE w_mseg-menge TO w_menge LEFT-JUSTIFIED.
  WRITE w_mseg-dmbtr TO w_dmbtr LEFT-JUSTIFIED.

  DATA: w_new_budat TYPE budat.
  IF w_mkpf-bktxt IS NOT INITIAL.
    IF w_mkpf-bktxt(3) = 'DT:'.
      CONCATENATE w_mkpf-bktxt+9(4)  w_mkpf-bktxt+6(2)  w_mkpf-bktxt+3(2)
        INTO w_new_budat.
      CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
        EXPORTING
          date                      = w_new_budat
        EXCEPTIONS
          plausibility_check_failed = 1
          OTHERS                    = 2.
      IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ELSE.
        w_mkpf-budat = w_new_budat.
      ENDIF.


    ENDIF.
  ENDIF.
  CONCATENATE w_mkpf-budat+6(2) w_mkpf-budat+4(2) w_mkpf-budat(4) INTO w_bzdat.
  CONCATENATE w_mkpf-bldat+6(2) w_mkpf-bldat+4(2) w_mkpf-bldat(4) INTO w_bldat.
  CONCATENATE w_mkpf-budat+6(2) w_mkpf-budat+4(2) w_mkpf-budat(4) INTO w_budat.

  PERFORM bdc_dynpro      USING 'SAPLAMDP' '0100'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/ENEWC'.

  PERFORM bdc_dynpro      USING 'SAPLSPO4' '0300'.
  PERFORM bdc_field       USING:
        'BDC_CURSOR' 'SVALD-VALUE(01)',
        'BDC_OKCODE' '=FURT',
        'SVALD-VALUE(01)' w_mseg-bukrs.

  PERFORM bdc_dynpro      USING 'SAPLAMDP' '0100'.
  PERFORM bdc_field       USING:
        'BDC_OKCODE'  '=TAB02',
        'BDC_CURSOR' 'RAIFP3-ANLN2',
        'RAIFP2-ANLN1' w_mseg-anln1,
        'RAIFP2-ANLN2' w_mseg-anln2,
        'RAIFP1-BLDAT' w_bldat,
        'RAIFP1-BUDAT' w_budat,
        'RAIFP1-BZDAT' w_bzdat,
        'RAIFP2-SGTXT' 'Transferência para Sub-Número',
        'RAIFP3-XBANL' 'X',
        'RAIFP3-ANLN1' w_mseg-anln1,
        'RAIFP3-ANLN2' <inbox>-zanln2.

  PERFORM bdc_dynpro      USING 'SAPLAMDP' '0100'.
  PERFORM bdc_field       USING:
        'BDC_OKCODE' '=TAB03',
        'RAIFP2-ANLN1' w_mseg-anln1,
        'RAIFP2-ANLN2' w_mseg-anln2,
        'RAIFP1-TRAVA' '',
        'RAIFP1-XBLNR' '',
        'BDC_CURSOR' 'RAIFP2-ZUONR',
        'RAIFP2-ZUONR' w_mseg-mblnr.

  PERFORM bdc_dynpro      USING 'SAPLAMDP' '0100'.
  PERFORM bdc_field       USING:
        'BDC_OKCODE' '=SAVE',
        'RAIFP2-ANLN1' w_mseg-anln1,
        'RAIFP2-ANLN2' w_mseg-anln2,
        'BDC_CURSOR' 'RAIFP2-XANEU',
        'RAIFP2-ANBTR' w_dmbtr,
        'RAIFP2-MENGE' w_menge,
        'RAIFP2-XAALT' '',
        'RAIFP2-XANEU' 'X'.
ENDFORM.                    "load_data_abumn

*&---------------------------------------------------------------------*
*&      Form  print_error_message
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM print_message.
  DATA: msgtxt(300) TYPE c,
        v_msgv1(50) TYPE c,
        v_msgv2(50) TYPE c,
        v_msgv3(50) TYPE c,
        v_msgv4(50) TYPE c.

  LOOP AT messtab.

    v_msgv1 = messtab-msgv1(50).
    v_msgv2 = messtab-msgv2(50).
    v_msgv3 = messtab-msgv3(50).
    v_msgv4 = messtab-msgv4(50).

    CALL FUNCTION 'MESSAGE_PREPARE'
      EXPORTING
        language               = sy-langu
        msg_id                 = messtab-msgid
        msg_no                 = messtab-msgnr
        msg_var1               = v_msgv1
        msg_var2               = v_msgv2
        msg_var3               = v_msgv3
        msg_var4               = v_msgv4
      IMPORTING
        msg_text               = msgtxt
      EXCEPTIONS
        function_not_completed = 1
        message_not_found      = 2
        OTHERS                 = 3.

    WRITE / msgtxt.

  ENDLOOP.
ENDFORM.                    "print_error_message

*&---------------------------------------------------------------------*
*&      Form  check_abgdat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM check_abgdat.
  DATA w_answl TYPE answl.

  SELECT SINGLE answl INTO w_answl
    FROM anlc
    WHERE bukrs EQ w_mseg-bukrs
    AND anln1 EQ w_mseg-anln1
    AND anln2 EQ w_mseg-anln2
    AND afabe EQ '01'.

  WRITE: / 'Alterando data de desativação:', w_mseg-bukrs, w_mseg-anln1, w_mseg-anln2.

  CHECK sy-subrc IS INITIAL AND w_answl EQ 0.

  UPDATE anla SET
    abgdt = ''
    WHERE bukrs = w_mseg-bukrs
    AND anln1 = w_mseg-anln1
    AND anln2 = w_mseg-anln2.

  WRITE: / 'Update anla:', sy-subrc.

  UPDATE anlb SET
    abgdat_b = ''
    WHERE bukrs = w_mseg-bukrs
    AND anln1 = w_mseg-anln1
    AND anln2 = w_mseg-anln2.

  WRITE: / 'Update anlb:', sy-subrc.

  COMMIT WORK.

ENDFORM.                    "check_abgdat

*&---------------------------------------------------------------------*
*&      Form  GET_LEASING_DATA
*&---------------------------------------------------------------------*
FORM get_leasing_data .
  CLEAR wa_leas.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = w_lifnrl
    IMPORTING
      output = w_lifnrl.

  SELECT SINGLE lifnr namev name1 titel_ap abtpa INTO wa_leas
    FROM knvk
    WHERE lifnr EQ w_lifnrl.

  IF wa_leas IS INITIAL.
    WRITE: / 'Não foi possível encontrar parceiro de leasing:', w_lifnrl.
  ENDIF.

ENDFORM.                    " GET_LEASING_DATA

*&---------------------------------------------------------------------*
*&      Form  CHANGE_TIMEDATA
*&---------------------------------------------------------------------*
FORM change_timedata USING inbox TYPE ztbaa_inbox_mm.

  DATA: tb_anlz   TYPE TABLE OF anlz,
        wa_anlz   TYPE anlz,
        wa_anlz_x TYPE anlz,
        i_adatu   TYPE anlz-adatu.

  DATA: time_data  LIKE bapi1022_feglg003,
        time_datax LIKE bapi1022_feglg003x.

  DATA: rettab TYPE bapiret2.

  REFRESH tb_anlz.
  SELECT *
    FROM anlz
    INTO TABLE tb_anlz
    WHERE bukrs EQ inbox-bukrs
      AND anln1 EQ inbox-anln1
      AND anln2 EQ '0000'
      AND adatu NE '19000101'.

  SORT tb_anlz BY adatu.

  CHECK tb_anlz[] IS NOT INITIAL.

  CLEAR: time_datax.
  time_datax-from_date        = 'X'.
  time_datax-costcenter       = 'X'.
  time_datax-plant            = 'X'.
  time_datax-location         = 'X'.
  time_datax-room             = 'X'.
  time_datax-license_plate_no = 'X'.
  time_datax-shutdown         = 'X'.

  CLEAR i_adatu.
  SELECT MIN( adatu )
    FROM anlz
    INTO i_adatu
    WHERE bukrs EQ inbox-bukrs
      AND anln1 EQ inbox-anln1
      AND anln2 EQ inbox-zanln2.

  LOOP AT tb_anlz INTO wa_anlz.

    CLEAR: time_data, wa_anlz_x.
    SELECT SINGLE *
      FROM anlz
      INTO wa_anlz_x
      WHERE bukrs EQ inbox-bukrs
        AND anln1 EQ inbox-anln1
        AND anln2 EQ inbox-zanln2
        AND adatu EQ i_adatu.

    CHECK wa_anlz_x IS NOT INITIAL.

    time_data-from_date  = wa_anlz-adatu.
    time_data-costcenter = wa_anlz-kostl.
    time_data-plant      = wa_anlz-werks.
    time_data-location   = wa_anlz_x-stort.
    time_data-room       = wa_anlz-raumn.
    time_data-plate_no   = wa_anlz_x-kfzkz.
    time_data-shutdown   = wa_anlz_x-xstil.

    DO 5 TIMES.
      CALL FUNCTION 'ENQUEUE_EANLA'
        EXPORTING
          mandt          = sy-mandt
          bukrs          = inbox-bukrs
          anln1          = inbox-anln1
          anln2          = inbox-zanln2
        EXCEPTIONS
          foreign_lock   = 1
          system_failure = 2
          OTHERS         = 3.

      IF sy-subrc IS INITIAL.
        EXIT.
      ENDIF.

      WAIT UP TO 2 SECONDS.
    ENDDO.

    CLEAR rettab.
    CALL FUNCTION 'BAPI_FIXEDASSET_CHANGE'
      EXPORTING
        companycode        = inbox-bukrs
        asset              = inbox-anln1
        subnumber          = inbox-zanln2
        timedependentdata  = time_data
        timedependentdatax = time_datax
      IMPORTING
        return             = rettab.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

    CALL FUNCTION 'DEQUEUE_EANLA'
      EXPORTING
        mandt = sy-mandt
        bukrs = inbox-bukrs
        anln1 = inbox-anln1
        anln2 = inbox-zanln2.

  ENDLOOP.

ENDFORM.                    " CHANGE_TIMEDATA