Mostrando postagens com marcador Diquinha do Dia. Mostrar todas as postagens
Mostrando postagens com marcador Diquinha do Dia. Mostrar todas as postagens

segunda-feira, 25 de outubro de 2021

Roubando alv's Standard para o nosso programa

*  Fala pessoal, hoje vou mostrar uma dica que pode facilitar muito seu
* desenvolvimento ou no minimo diminir o tempo para entregar....
*  Sabe quando o funcional te chama falando que está afim de fazer um relatorio
* muito parecido com o um relatorio standard mas cheio de 'Fru Fru',
* neste momento você já começa a pensar que terá que 'debugar' o standard
* pra saber como chegar nos dados principais do relatorio antes mesmo de
* incluir as 'Melhorias', pois seus problemas acabaram.... rs ( Sempre quis
* falar isso). Com esse post podemos processar o relatorio standard e pegar
* os dados que seriam exibidos na tela, e depois disso, com todos os dados
* base, podemos fazer os adicionais sem problema nenhum. Bora pro codigo.

*  Abaixo temos um exemplo, aonde o funcional me pediu para trazer os dados
* referente a documentos financeiros usando apenas o 'Conta Razão', 'Empresa'
* e 'Data de lançamento'... Conversamos sobre os acessos na tabela e
* mostrei que não tinhamos esse Indice na tabela e que talvez sofreriamos
* com a performance do programa, teriamos que ter mais parametros para
* conseguir acessar as tabelas com as chaves e assim entregar conforme
* esperado, o funcional insastifeito depois de ter feito uma documentação
* da demanda tudo baseada nessa seleção sem chaves faz o seguinte comentario,
* - Ahhhhh, mas no standard funciona rápido quando eu coloco somente essas
* informações !!!
* Eu em choque, sem entender, pergunto. - Rápido ?!! Standard ?!!
* Depois disso o funcional complementa. - Sim, quando rodo a FBL3N
* ( Relatorio de partidas individuais - Contas do razão ) me mostra um
* relatorio no final que aparece relativamente rapido.
*  Com essas informações lembrei que conversando com um amigo do trabalho,
* o mesmo me falou sobre uma classe que deixa o retorno do processo em
* memoria e assim podemos buscar essa informação e depois tratar como
* quiser.
* Segue codigo comentado abaixo como exemplo.

REPORT  zrtts.
*--------------------------------------------------------------------*

TABLES :
  bkpfbseg.

TYPES :
  BEGIN OF ty_bkpf,
    bukrs TYPE bkpf-bukrs,
    belnr TYPE bkpf-belnr,
    gjahr TYPE bkpf-gjahr,
    budat TYPE bkpf-budat,
  END OF ty_bkpf.

DATA :
  t_bkpf TYPE TABLE OF ty_bkpf,
  s_bkpf TYPE ty_bkpf.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS :
  r_saknr FOR bseg-saknr,
  r_bukrs FOR bseg-bukrs,
  r_budat FOR bkpf-budat.

SELECTION-SCREEN END OF BLOCK   b1.

* Definir para não mostrar ALV, Metadata
cl_salv_bs_runtime_info=>set(
  EXPORTING display  abap_false
            metadata abap_false
            data     abap_true ).

* Chamado do programa do FBL3N e passando os parametros de tela.
SUBMIT rfitemgl
  WITH sd_saknr IN r_saknr
  WITH sd_bukrs IN r_bukrs
  WITH so_budat IN r_budat

  WITH x_opsel  EQ abap_false
  WITH x_clsel  EQ abap_false
  WITH x_aisel  EQ abap_true

  WITH x_norm   EQ abap_true
*  WITH pa_vari  EQ '/OES_EXT'
  AND RETURN.


TRY.
    DATA ol_pay_data TYPE REF TO data.
    FIELD-SYMBOLS<fs_pay_data> TYPE ANY TABLE,
                   <pay_data> TYPE ANY.

* Busca tabela do ALV em processamento do Submit
    cl_salv_bs_runtime_info=>get_data_ref(
      IMPORTING r_data ol_pay_data ).

* Atribui para tabela dinâmica
    ASSIGN ol_pay_data->TO <fs_pay_data>.

  CATCH cx_salv_bs_sc_runtime_info.
*        #ec no_handler
ENDTRY.

* Limpa runtime
cl_salv_bs_runtime_info=>clear_all).

*--------------------------------------------------------------------*
* No ambiente atual que estou não consigo usar comando 'Inline' mas
* segue abaixo eu pegando o retorno e colocando na minha tabela interna.

FIELD-SYMBOLS :
  <bukrs> TYPE bkpf-bukrs,
  <belnr> TYPE bkpf-belnr,
  <gjahr> TYPE bkpf-gjahr,
  <budat> TYPE bkpf-budat.


LOOP AT <fs_pay_data> ASSIGNING <pay_data>.
  ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <pay_data> TO <bukrs>.
  ASSIGN COMPONENT 'BELNR' OF STRUCTURE <pay_data> TO <belnr>.
  ASSIGN COMPONENT 'GJAHR' OF STRUCTURE <pay_data> TO <gjahr>.
  ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <pay_data> TO <budat>.

  s_bkpf-bukrs <bukrs>.
  s_bkpf-belnr <belnr>.
  s_bkpf-gjahr <gjahr>.
  s_bkpf-budat <budat>.

  APPEND s_bkpf TO t_bkpf.
  CLEAR s_bkpf.
ENDLOOP.

*--------------------------------------------------------------------*
* Gostaria que vocês percebecem que mesmo colocando layout no relatorio
* standard quando darmos o 'Get' dos dados, ele vira toda a tabela de
* saida que seria usada no ALV da transação Standard.
*  Espero ter ajudado e qualquer coisa tamo aeeeee. Vlw.

quinta-feira, 25 de abril de 2019

Business Transaction Events ( BTE ) - FIBF

*  Bom dia pessoal, iremos falar hoje sobre uma negocio que é usado no
* modulo de FI, a não muito famosa BTE ( Business Transaction Events ).
*  BTE são funções pré definidas e chamadas pelo standard, são pré definidas
* para que saibamos a assinatura ( parametros de importação e Expostação ),
*  Bom.... Vamos colocando a mão na massa e durante as ações eu vou
* tentando explicar, lembrando que o comentario de vocês ajuda muito
* a melhorar o Post caso necessario.

*  Primeiro passo, como tudo na vida, antes de implementar a BTE temos que
* saber o que vamos fazer que será necessario uma BTE, faremos uma coisa
* bem simples, iremos atualizar um campo da linha de documento contabil (BSEG)
* no momento da gravação. Agora sabendo o que vamos fazer, vamos para a
* transação 'FIBF' e entramos no Menu 'Ambiente / Sistemas Info ( Processos ).




*  Vamos colocar o 'Tipo de atributo' igual a 'A' ( Componente de aplicação )



*  Vamos trabalhar com '00001430 MODIFICAR DOCUMENTO:substit.campo cab./linha'
* clicando na Botão 'Interface' conseguimos ver a assinatura e clicando no
* botão 'Modulo de função modelo'... você pode não acreditar, mas irá
* mostrar uma função que podemos usar como modelo ( rsrs ).




segunda-feira, 17 de julho de 2017

Classe - 'CL_GUI_FRONTEND_SERVICES'

*--------------------------------------------------------------------*
*  Eae galera, sempre em nossas vidas de ABAP, vamos precisar saber
* fazer download e upload de arquivo, sabemos tambem que estas mesmas funções
* 'GUI_DOWNLOAD' e 'GUI_UPLOAD' estão obsoletas.




*  Conforme o 'F1' da função o mesmo indica você usar a classe
* 'CL_GUI_FRONTEND_SERVICES' que será a classe que vamos estudar hoje.
*  Tentarei mostrar alguns Metodos interessantes dessa classe que trabalham
* com arquivos e pastas.

*  A ideia desse programa será bem simples, ele te possibilita criar uma
* pasta e incluir nela copias dos arquivos de uma outra pasta, e no final
* , como tudo isso é só para teste, existe a possibilidade de deletar todos
* os arquivos copiados juntamente com a pasta caso deseje. Esse programa
* não fara nenhuma alteração de algum arquivo que você já tenha no Desktop,
* irá trabalhar somente com os criados pelo proprio programa.
*  Recomendo criar uma pasta qualquer, incluir um arquivo qualquer também
* e começar a brincadeira.
*  Como sempre faço, existem algums Breaks no código para forçá-los a
* entender o que cada metodo faz. Abaixo a lista dos metodos usados dessa
* Classe.

* cl_gui_frontend_services=>directory_browse
* cl_gui_frontend_services=>directory_create
* cl_gui_frontend_services=>directory_exist
* cl_gui_frontend_services=>directory_delete
* cl_gui_frontend_services=>directory_list_files
* cl_gui_frontend_services=>file_copy
* cl_gui_frontend_services=>file_exist
* cl_gui_frontend_services=>file_get_attributes
* cl_gui_frontend_services=>file_delete

*  Lembando que o código está simples, mais para estudos mesmo, sugestões,
* critina ou qualquer tipo de opnião estamos disponivel no final do post,
* a nomenclatura dos metodos estão bem intuitivas para não precisar comentar
* muito, mas qualquer duvida estamos aí também.
* Bons estudos aeeee.

REPORT z_cl_gui_frontend_services.

TABLES :
  sscrfields.

CLASS
  zcl_main DEFINITION DEFERRED.

DATA :
  o_main TYPE REF TO zcl_main.

DATA :
  subrc         TYPE sy-subrc,
  result        TYPE abap_bool,
  gt_file_table TYPE rstt_t_files.


* T01 - Pastas
* C01 - Processar
* T02 - Arquivos
* T03 - Deletar arquivos e pastas novas após o processo ?

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
PARAMETERS :
  folder   TYPE string,
  n_folder TYPE string DEFAULT 'teste'.
SELECTION-SCREEN END OF BLOCK   b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.
PARAMETERS :
  folder2 TYPE string.
SELECTION-SCREEN END OF BLOCK   b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t03.
PARAMETERS :
  del_fold AS CHECKBOX DEFAULT abap_true,
  del_file AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN END OF BLOCK   b3.


CLASS zcl_main DEFINITION.
  PUBLIC SECTION.
    METHODS:
*--------------------------------------------------------------------*
      directory,
*--------------------------------------------------------------------*
      directory_browse
        IMPORTING
          iv_title  TYPE string
        CHANGING
          cv_folder TYPE string,
*--------------------------------------------------------------------*
      directory_create
        IMPORTING
          iv_directory TYPE string
        CHANGING
          cv_rc        TYPE sy-subrc,
*--------------------------------------------------------------------*
      directory_exist
        IMPORTING
          iv_directory TYPE string
        CHANGING
          cv_result    TYPE abap_bool,
*--------------------------------------------------------------------*
      directory_delete
        IMPORTING
          iv_directory TYPE string
        CHANGING
          cv_rc        TYPE sy-subrc,
*--------------------------------------------------------------------*
      directory_list_files
        IMPORTING
          iv_directory  TYPE string
        EXPORTING
          ev_count      TYPE i
        CHANGING
          ct_file_table TYPE rstt_t_files,
*--------------------------------------------------------------------*
      file
        CHANGING
          ct_file_table TYPE rstt_t_files,
*--------------------------------------------------------------------*
      file_copy
        IMPORTING
          iv_source      TYPE string
          iv_destination TYPE string
          iv_overwrite   TYPE abap_bool OPTIONAL
        EXPORTING
          ev_rc          TYPE sy-subrc,
*--------------------------------------------------------------------*
      file_exist
        IMPORTING
          iv_file   TYPE string
        EXPORTING
          ev_result TYPE abap_bool,
*--------------------------------------------------------------------*
      file_get_attributes
        IMPORTING
          iv_file       TYPE string
        EXPORTING
          ev_attributes TYPE char10,
*--------------------------------------------------------------------*
      popup_to_confirm_files
        CHANGING
          ct_file_table TYPE rstt_t_files,
*--------------------------------------------------------------------*
      popup_to_confirm
        IMPORTING
          iv_title    TYPE string
          iv_question TYPE string
        EXPORTING
          ev_answer   TYPE char1,
*--------------------------------------------------------------------*
      delete_folder,
*--------------------------------------------------------------------*
      delete_file
        CHANGING
          ct_file_table TYPE rstt_t_files,
*--------------------------------------------------------------------*
      file_delete
        IMPORTING
          iv_file TYPE string
        EXPORTING
          ev_rc   TYPE sy-subrc
        .
ENDCLASS.

quinta-feira, 6 de julho de 2017

Alterando Request já liberada - RDDIT076

*  Na marioria das vezes, o transporte de request realizado de forma 
* organizada, padronização de nomenclatura, destino, essas coisas,
*  Mas as vezes fazemos requests fora do padrão, aguardando alguma informação
* que complete essa nomenclatura padrão, o problema é quando liberamos 
* para essa mesma request transporte ( =( ), procurando na internet algo 
* que resolvesse isso encontrei o programa 'RDDIT076', esse mesmo programa 
* Faz a alteração de quase tudo sobre a request ( incluindo Status, caso 
* queira deixar modificavel(D) novamente ). A execução dela é bem simples
* mas como tudo.... MUITO CUIDADO. Para não mexer em algo que não devesse.

* Abaixo uns prints com o processo.

*  Primeiramente Com o numero da request reservada vamos na transação se38,
* colocar 'RDDIT076' e dar 'F8', apos executado informar a request.





*  Irá aparaecer uma tela com dados principais da request e as tasks da mesma,
* clique duas vezes, ou seleciona a request e aperte o botão de detalhamento.


segunda-feira, 26 de junho de 2017

Função - REUSE_ALV_POPUP_TO_SELECT

REPORT zreuse_alv_popup_to_select.
*--------------------------------------------------------------------*
* Fala pessoal, hoje irei mostrar algo que facilita muito escolhas de
* registro em massa em um ALV, para fazer isso usarei a função
* 'REUSE_ALV_POPUP_TO_SELECT' que irá exibir todas as opções de seleção
* em massa.
*  Estarei trabalhando com um exemplo simples que trará todos os objetos
* criados pelo usuário que executar o programa.
* A lista de opções de seleção de linhas do ALV será criada baseada nos
* tipos de objetos ( TADIR-OBJECT ).
* Espero que gostem desse metodo que ajudará muito na seleção de linhas
* do ALV, onde além de fazer linha por linha, será feito conforme range
* definido no PopUP.
*  Segue no final do código os prints do processo.
* Valeo.

* Tipos.
TYPES :
  BEGIN OF ty_tadir,
    selected.
        INCLUDE TYPE tadir.
TYPES :
  END OF ty_tadir.
TYPES :
  BEGIN OF ty_popup,
    select,
    text(50),
  END OF   ty_popup.

* Tabela global.
DATA :
  gt_popup    TYPE TABLE OF ty_popup.

* Variaveis referente ao ALVV
DATA :
* Objetos
  o_docking   TYPE REF TO cl_gui_docking_container,
  o_grid      TYPE REF TO cl_gui_alv_grid,
* Tabelas internas
  gt_tadir    TYPE TABLE OF ty_tadir,
  gt_fieldcat TYPE TABLE OF lvc_s_fcat,
  gt_exclude  TYPE TABLE OF ui_func,
* Estruturas
  gs_layout   TYPE lvc_s_layo.

* Ranges
DATA :
  r_object TYPE RANGE OF char20.

* Inicio do processo.
START-OF-SELECTION.

* Quando criarem a tela do ALV ( 9001 ) coloquem o código abaixo na tela.
*--------------------------------------------------------------------*
*PROCESS BEFORE OUTPUT.
*  MODULE :
*    status_9001,
*    inicialization_9001.
*
*PROCESS AFTER INPUT.
*  MODULE :
*    user_command_9001.
*--------------------------------------------------------------------*

* Tela ALV principal.
  CALL SCREEN 9001.

*&---------------------------------------------------------------------*
*&      Form  POPUP_COM_MULTIPLA_ESCOLHA
*&---------------------------------------------------------------------*
FORM popup_com_multipla_escolha .

  DATA :
    ls_popup      LIKE LINE OF gt_popup,
    lt_fcat_popup TYPE TABLE OF slis_fieldcat_alv,
    ls_fcat_popup LIKE LINE OF lt_fcat_popup,
    lt_excl       TYPE slis_t_extab,
    ls_excl       TYPE slis_extab,
    ls_object     LIKE LINE OF r_object.

* Catalogo de campos do PopUp de opções.
  ls_fcat_popup-tabname   'LT_POPUP'.

  ls_fcat_popup-col_pos   '1'.
  ls_fcat_popup-fieldname 'SELECT'.
  ls_fcat_popup-seltext_m 'SELECT'.
  APPEND ls_fcat_popup TO lt_fcat_popup.

  ls_fcat_popup-col_pos   '2'.
  ls_fcat_popup-fieldname 'TEXT'.
  ls_fcat_popup-seltext_m 'Status'.
  ls_fcat_popup-outputlen 50.
  APPEND ls_fcat_popup TO lt_fcat_popup.

* Exclusão dos botões padrões do ALV.
  ls_excl-fcode '&ETA'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '%SC'.  APPEND ls_excl TO lt_excl.
  ls_excl-fcode '%SC+'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&OUP'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&ODN'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&ILT'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&OL0'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRB'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRL'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRR'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRE'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&ALL'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&SAL'APPEND ls_excl TO lt_excl.

  CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
    EXPORTING
      i_title               'Tipos de Objetos'
      i_zebra               abap_true
      i_screen_start_column 1
      i_screen_start_line   1
      i_checkbox_fieldname  'SELECT'
      i_tabname             'LT_POPUP'
      it_fieldcat           lt_fcat_popup
      it_excluding          lt_excl
    TABLES
      t_outtab              gt_popup
    EXCEPTIONS
      program_error         1
      OTHERS                2.

  FREE r_object.
  IF gt_popup[] IS NOT INITIAL.
    LOOP AT gt_popup INTO ls_popup.
      IF ls_popup-select abap_true..
        ls_object-sign   'I'.
        ls_object-option 'EQ'.
        ls_object-low    ls_popup-text.
        APPEND ls_object TO r_object.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.