quarta-feira, 29 de janeiro de 2020

Alteração IVA - código de imposto no pedido de transferência - atualização de cálculo

Solução definitiva.

Utilizando exit de pedido de compra e configuração do standard.

Debugando o programa quando cria a remessa, vi que a rotina para buscar o código de imposto SD no caso de processo de transferência STO tem uma tratativa que pode ser usado, não fomos a fundo se existe uma configuração standard em MM para que ao criar o pedido de compra isso funcione. Enfim o processo foi montado da seguinte forma.

J1BTAX
Na tela de "atualização de imposto MM" tem o código de imposto chave, na linha do imposto no final tem 2 campos: 
- Código de imposto de entrada
- Código de imposto SD

Durante o processo de transferência entre centros esses 2 campos são usados.

- Quando é criado o pedido de transferência o código de imposto não aparece para preencher, então especialmente para esse caso de pedido de transferência, coloquei uma rotina na exit de pedido de compra.
MM06E005 

Exit ao salvar EXIT_SAPMM06E_012

Apenas para tipo de pedido de transferência - 
- Nesse ponto deve entrar com o código de imposto de entrada de acordo com a J1BTAX
    "Verifica se é transferência
    SELECT COUNT)
      FROM t161
     WHERE bsart EQ i_ekko-bsart
       AND brefn EQ 'UBF'.

  FIELD-SYMBOLS <lt_ekpo> TYPE mmpur_bekpo.

  ASSIGN ('(SAPLMEPO)POT[]'TO <lt_ekpo>.

  IF sy-subrc 0.

    LOOP AT <lt_ekpo> ASSIGNING FIELD-SYMBOL(<ls_ekpo>).
        <ls_ekpo>-mwskz 'ZZ'
      ELSE.
        CLEAR <ls_ekpo>-mwskz.
    ENDLOOP.

  ENDIF.

Ao criar a remessa automaticamente o standard vai pegar esse código de imposto e converter para o código de imposto de SD na remessa.



IDOC - WPUBON - Implementação geraçao de doc de faturamento

Código para geração de doc. de faturamento utilizando o IDOC WPUBON.

Obs: mantive a rotina incompleta, apenas o caminho das pedras...


     CLEAR ls_e1wpb01.
      ls_e1wpb01-poskreis    = <perfil determninado no customizing>.
      ls_e1wpb01-kassid      = <CÓDIGO DO CAIXA>.
      ls_e1wpb01-vorgdatum   sy-datum.
      ls_e1wpb01-vorgzeit    sy-uzeit.
      ls_e1wpb01-kundnr      = <CLIENTE>.
      ls_e1wpb01-belegwaers  'BRL'.

      APPEND INITIAL LINE TO lt_idoc_data ASSIGNING FIELD-SYMBOL(<ls_idoc_data>).
      <ls_idoc_data>-sdata  ls_e1wpb01.
      <ls_idoc_data>-mandt  sy-mandt.
      <ls_idoc_data>-segnam 'E1WPB01'.

      LOOP AT lt_zsdt_0082 ASSIGNING FIELD-SYMBOL(<ls_item>).

        CLEAR ls_e1wpb02.
        ls_e1wpb02-vorgangart <TIPO DO FATURAMENTO>.
        ls_e1wpb02-qualartnr  'ARTN'.
        ls_e1wpb02-artnr      = <MATERIAL>.
        ls_e1wpb02-seriennr   ''.
        ls_e1wpb02-vorzeichen '-'.
        ls_e1wpb02-menge      = <QUANTIDADE>.
        ls_e1wpb02-artnr_long = <MATERIAL>.

        APPEND INITIAL LINE TO lt_idoc_data ASSIGNING <ls_idoc_data>.
        <ls_idoc_data>-sdata  ls_e1wpb02.
        <ls_idoc_data>-mandt  sy-mandt.
        <ls_idoc_data>-segnam 'E1WPB02'.

        CLEAR ls_e1wpb03.
        ls_e1wpb03-vorzeichen '+'.
        ls_e1wpb03-kondition  <CONDIÇÃO DE PREÇO(customizing)>.
        ls_e1wpb03-kondvalue  = <VALOR TO ITEM>.

        APPEND INITIAL LINE TO lt_idoc_data ASSIGNING <ls_idoc_data>.
        <ls_idoc_data>-sdata  ls_e1wpb03.
        <ls_idoc_data>-mandt  sy-mandt.
        <ls_idoc_data>-segnam 'E1WPB03'.

        "Campos adicionais do cabeçalho
        "Verificar implementação função exit EXIT_SAPLWPUE_106
        APPEND INITIAL LINE TO lt_idoc_data ASSIGNING <ls_idoc_data>.
        ls_e1wxx01-fldgrp  'HEAD'.
        ls_e1wxx01-fldname 'ZTERM'.
        ls_e1wxx01-fldval  = <CONDICAO DE PAGAMENTO>.
        <ls_idoc_data>-sdata  ls_e1wxx01.
        <ls_idoc_data>-mandt  sy-mandt.
        <ls_idoc_data>-segnam 'E1WXX01'.

        "Campo STAFO - elimina verificação estatistica ao gerar faturamento
        "Se estiver preenchido um  DUMP acontece
        APPEND INITIAL LINE TO lt_idoc_data ASSIGNING <ls_idoc_data>.
        ls_e1wxx01-fldgrp  'HEAD'.
        ls_e1wxx01-fldname 'STAFO'.
        ls_e1wxx01-fldval  ''.
        <ls_idoc_data>-sdata  ls_e1wxx01.
        <ls_idoc_data>-mandt  sy-mandt.
        <ls_idoc_data>-segnam 'E1WXX01'.

        APPEND INITIAL LINE TO lt_idoc_data ASSIGNING <ls_idoc_data>.
        ls_e1wxx01-fldgrp  'HEAD'.
        ls_e1wxx01-fldname 'KUNWE'.
        ls_e1wxx01-fldval  = <RECEBEDOR DA MERCADORIA>.
        <ls_idoc_data>-sdata  ls_e1wxx01.
        <ls_idoc_data>-mandt  sy-mandt.
        <ls_idoc_data>-segnam 'E1WXX01'.

        "Forma de pagamento
        APPEND INITIAL LINE TO lt_idoc_data ASSIGNING <ls_idoc_data>.
        ls_e1wxx01-fldgrp  'HEAD'.
        ls_e1wxx01-fldname 'ZLSCH'.

        CASE ls_zsdt_0081-tppag.
          WHEN gc_pag_vista.
            ls_e1wxx01-fldval  'E'.
          WHEN gc_pag_prazo.
            ls_e1wxx01-fldval  'A'.
          WHEN gc_pag_ccc.
            ls_e1wxx01-fldval  'L'.
          WHEN gc_pag_folha.
            ls_e1wxx01-fldval  'I'.
        ENDCASE.

        <ls_idoc_data>-sdata  ls_e1wxx01.
        <ls_idoc_data>-mandt  sy-mandt.
        <ls_idoc_data>-segnam 'E1WXX01'.

        APPEND INITIAL LINE TO lt_idoc_data ASSIGNING <ls_idoc_data>.
        ls_e1wxx01-fldgrp  'MSEG'.
        ls_e1wxx01-fldname 'CHARG'.
        ls_e1wxx01-fldval  <ls_item>-charg.
        <ls_idoc_data>-sdata  ls_e1wxx01.
        <ls_idoc_data>-mandt  sy-mandt.
        <ls_idoc_data>-segnam 'E1WXX01'.


      ENDLOOP.

      APPEND INITIAL LINE TO lt_idoc_data ASSIGNING <ls_idoc_data>.
      ls_e1wpb06-vorzeichen '-'.
      ls_e1wpb06-zahlart '----'.
      <ls_idoc_data>-sdata  ls_e1wpb06.
      <ls_idoc_data>-mandt  sy-mandt.
      <ls_idoc_data>-segnam 'E1WPB06'.



      CALL FUNCTION 'IDOC_WRITE_AND_START_INBOUND'
        EXPORTING
          i_edidc        ls_idoc_control
          do_commit      ''
        IMPORTING
          docnum         ls_idoc_control-docnum
        TABLES
          i_edidd        lt_idoc_data
        EXCEPTIONS
          idoc_not_saved 1
          OTHERS         2.



=====================

Customizing 

Perfil:

Config. dados pagamento


TEM MAIS CONFIG, MAS TÁ DANDO MUITO TRABALHO



Leitura de tabela interna - Categoria de tabela - sem estrutura

Lembrete:

Categoria de tabelas que não tem estrutura mas somente um elemento de dados.

Ex:

Tipo tabela:  MATNR_TTY
a categoria de linha é somente o campo MATNR

Como não tem campo estruturado na tabela, acrescentar o campo TABLE_LINE


DATA: LT_MATNR TYPE MATNR_TTY

SELECT *
     FROM XXX
      FOR ALL ENTRIES IN  LT_MATNR
WHERE MATNR EQ LT_MATNR-TABLE_LINE

XXXXXXXXXXXXXXXXXXXXXXXX

READ TABLE LT_MATNR WITH KEY TABLE_LINE = XXX