segunda-feira, 13 de novembro de 2017

Coisinhas da SPAU

Esse post é só um memo também, mas as vezes pode ser que alguém passe por esse problema. Tem um erro que dá em alguns objetos logo depois da verificação da SPAU, isso depois de um upgrade, etc. Já tinha ocorrido comigo, mas não me lembrava como tinha arrumado, então depois de muita luta descobri e resolvei deixar postado para futuras atualizações de sistema. O erro que acontece é que vc tenta abrir um objeto standard para modificação (no meu caso uma macro do SPED), e dá uma mensagem que o objeto ainda está bloqueado na SPAU,SPDD,SE95 e pede para ser liberado. Quando vc entra nessas transações vc não acha nada do objeto. Nesse caso descobri que tem uma tabela q mostra os objetos que foram modificados durante o upgrade na correção da SPAU. Tabela SMODILOG, coloquei o objeto lá e tem o status do objeto, e tem um campo que tem a request que está o objeto bloqueado. No meu caso vi que eram notas, selecionei todas as notas e fui na SPAU processar, apesar do status da nota estar como não implementável, é necessário executar a nota para que fique setado como nota ajustada. Depois de resolvido isso a objeto abriu.

terça-feira, 30 de agosto de 2016

Convertendo smartforms para PDF - arquivo local ou servidor

  Rotina de conversão de relatório SMARTFORMS para arquivo PDF.

Antes de chamar a função do SMARTFORMS, ajustar os parâmetros de impressão.

DATA: w_out_opt  TYPE ssfcompop,
      w_out_info TYPE  ssfcrescl,
      w_ctr_par  TYPE ssfctrlop.

 
    w_out_opt-tdprinter 'SWIN'.
    w_ctr_par-no_dialog abap_true.
    w_ctr_par-getotf abap_true.


"Chamar o smartforms
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           'ZTESTE_PDF'
    IMPORTING
      fm_name            l_fnam
    EXCEPTIONS
      no_form            1
      no_function_module 2
      OTHERS             3.

  IF sy-subrc <> 0.
    RAISE sem_dados.
  ENDIF.


"Colocar o parâmetro de retorno JOB_OUTPUT_INFO
  CALL FUNCTION l_fnam
    EXPORTING
      control_parameters iw_ctr_par
      output_options     iw_out_opt
      user_settings      space
    IMPORTING
      job_output_info    = W_OUT_INFO
    EXCEPTIONS
      formatting_error   1
      internal_error     2
      send_error         3
      user_canceled      4
      OTHERS             5.
 


 "No caso de saída para arquivo local usando o GUI_DOWNLOAD, remover o parâmetro BIN_FILE

      CALL FUNCTION 'CONVERT_OTF'
        EXPORTING
          format                'PDF'
        IMPORTING
          bin_filesize          bin_size
          bin_file              bin_file
        TABLES
          otf                   w_out_info-otfdata
          lines                 t_lines
        EXCEPTIONS
          err_max_linewidth     1
          err_format            2
          err_conv_not_possible 3
          err_bad_otf           4
          OTHERS                5.



"Para geração de arquivo local
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename                file_loc
          filetype                'BIN'
        TABLES
          data_tab                t_lines
        EXCEPTIONS
          file_write_error        1
          no_batch                2
          gui_refuse_filetransfer 3
          invalid_type            4
          no_authority            5
          unknown_error           6
          header_not_allowed      7
          separator_not_allowed   8
          filesize_not_allowed    9
          header_too_long         10
          dp_error_create         11
          dp_error_send           12
          dp_error_write          13
          unknown_dp_error        14
          access_denied           15
          dp_out_of_memory        16
          disk_full               17
          dp_timeout              18
          file_not_found          19
          dataprovider_exception  20
          control_flush_error     21
          OTHERS                  22.



"Para geração de arquivo no servidor.

      OPEN DATASET p_filen FOR OUTPUT IN BINARY MODE.
      TRANSFER bin_file TO p_filen.
      CLOSE DATASET p_filen.

sexta-feira, 12 de agosto de 2016

F4IF_INT_TABLE_VALUE_REQUEST - Montagem campo F4 com tabeas e campo de colunas diferentes

  Problema clássico, tenho um campo de tela que pode receber um valor do cliente ou fornecedor (KNA1 e LFA1), os campos das 2 tabelas são idênticos. No meu caso preciso de um matchcode que identifique os valores a serem exibidos, na tela eu tenho um radio buttton para escolha entre o cliente e o fornecedor e 1 campo para receber o código de 1 ou outro.









No código eu tenho o PROCESS ON VALUE-REQUEST para chamada do match code.

  TYPESBEGIN OF tp_parceiro,
           line TYPE char50,
         END OF tp_parceiro.

  DATAlt_parceiro  TYPE TABLE OF tp_parceiro,
        lt_rettab    TYPE TABLE OF ddshretval,
        lt_dfies     TYPE TABLE OF dfies,
        lt_dfies_aux TYPE TABLE OF dfies,
        lt_dselc     TYPE TABLE OF dselc.

  DATAlw_parceiro TYPE tp_parceiro,
        lw_cli      TYPE z_mestre_cliente,
        lw_for      TYPE z_mestre_fornecedor,
        lw_rettab   TYPE ddshretval,
        lw_dfies    TYPE dfies,
        lw_dselc    TYPE dselc.

  DATAl_tabname   TYPE tabname,
        l_fieldname TYPE fieldname.

  DEFINE lm_ddget.

    CALL FUNCTION 'DDIF_FIELDINFO_GET'
      EXPORTING
        tabname        &1
        fieldname      &2
      TABLES
        dfies_tab      lt_dfies_aux
      EXCEPTIONS
        not_found      1
        internal_error 2
        OTHERS         3.

    IF sy-subrc 0.
      APPEND LINES OF lt_dfies_aux TO lt_dfies.
    ENDIF.

  END-OF-DEFINITION.

  "Z_LOTE = estrutura do paraâmetro de tela

  "Radio button da tela com o cliente/fornecedor
  IF z_lote-partyp_t c_partyp_cli AND
       t_cliente[] IS INITIAL ).

    l_tabname 'Z_MESTRE_CLIENTE'.
    l_fieldname 'KUNNR'.

    SELECT *
      INTO lw_cli
      FROM kna1
     WHERE EXISTS SELECT *
                       FROM knb1
                     WHERE bukrs EQ z_lote-bukrs
                       AND kunnr EQ kna1~kunnr ).

      CLEAR lw_parceiro.
      lw_parceiro-line =  lw_cli-land1.
      APPEND lw_parceiro TO lt_parceiro.
      lw_parceiro-line =  lw_cli-kunnr.
      APPEND lw_parceiro TO lt_parceiro.
      lw_parceiro-line =  lw_cli-name1.
      APPEND lw_parceiro TO lt_parceiro.
      lw_parceiro-line =  lw_cli-regio.
      APPEND lw_parceiro TO lt_parceiro.

    ENDSELECT.

  ELSEIF z_lote-partyp_t c_partyp_for AND
        t_fornecedor[] IS INITIAL ).

    l_tabname 'Z_MESTRE_FORNECEDOR'.
    l_fieldname 'LIFNR'.


    SELECT *
     INTO lw_for
     FROM lfa1
    WHERE EXISTS SELECT *
                      FROM lfb1
                    WHERE bukrs EQ z_lote-bukrs
                      AND lifnr EQ kna1~lifnr ).

      CLEAR lw_parceiro.
      lw_parceiro-line =  lw_for-land1.
      APPEND lw_parceiro TO lt_parceiro.
      lw_parceiro-line =  lw_for-lifnr.
      APPEND lw_parceiro TO lt_parceiro.
      lw_parceiro-line =  lw_for-name1.
      APPEND lw_parceiro TO lt_parceiro.
      lw_parceiro-line =  lw_for-regio.
      APPEND lw_parceiro TO lt_parceiro.

    ENDSELECT.


  ENDIF.

  lm_ddget l_tabname l_fieldname.
  lm_ddget l_tabname 'NAME1'.
  lm_ddget l_tabname 'REGIO'.

  CLEAR lw_dselc.
  lw_dselc-fldname l_fieldname.
  lw_dselc-dyfldname 'Z_LOTE-TFRNR'.
  APPEND lw_dselc TO lt_dselc.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        l_fieldname
      dynpprog        sy-repid
      dynpnr          '1000'
      dynprofield     'Z_LOTE-TFRNR'
    TABLES
      value_tab       lt_parceiro
      field_tab       lt_dfies
      return_tab      lt_rettab
      dynpfld_mapping lt_dselc
    EXCEPTIONS
      parameter_error 1
      no_values_found 2
      OTHERS          3.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
     WITH  sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
 


terça-feira, 7 de junho de 2016

CEST (Código Especificador ST) - Configuração aparecer na transação J1BxN

  Fiz as aplicações das notas do CEST só que o campo novo criado não aparecia na tela da J1B3n e afins. Tive que debugar para ver porquê não estava aparecendo.

 Esse campo apesar de estar na estrutura da J_1BNFLIN é mostrada na verdade na tela de impostos. do item. É dentro de uma subtela 3211 que está dentro da subtela 3210.

Para aparecer tem q ver qual o grupo de tela que está sendo usado na subtela 3210.

Na SM30 na visão J_1BNFW_SCGAITV


No meu caso no grupo 5.

aí tem que ir na SM30 na view  J_1BNFW_SCCITV
Por default acho q tem um item em branco e mais dois controles de tela a 0001 e 0002.





marcar o item geralmente o branco e clicar em detalhes. e marcar o item 5 para exibir e salvar


Essas telas de baixo são só um informativo do código (para eu me lembrar)


 

Durante o processamento da tela é feito uma verificação, primeiro com o número do controle de tela o Imp.ISS e o tipo de item da NF, se não achar verifca o controle de tela e o ISS e assim por diante.
a variável MV_SCN_I_CONT_ID que está no codigo acima geralmente está em branco, na configuração tem um campo para preencher o grpo de tela, mas não aceita, não sei porque, então geralmente vem em branco a questão do ISS depende da nota inclusive o tipo do item da NF.