Conteúdo

openSAP Sumiu 😲 Caaaaalma, só migraram

Desde julho de 2024 a plataforma openSAP foi descontinuada.

Os cursos gratuitos continuarão disponíveis no site de aprendizado.

Alguns dos cursos que estavam na openSAP foram migrados para plataforma.

Mais detalhes sobre a migração aqui:
https://learning.sap.com/opensap-course-migration

Cursos aqui:
https://learning.sap.com/courses

Certificados:
Meu amigo, ainda não sei, mas até o momento não consegui encontrá-los.
Então quem souber como recuperar os certificados anteriormente realizados na open.SAP me avise para atualizar o blog e ajudar aos demais.

Que tal uma tela de parâmetros diferentona?

Não tive muitas idéias de ícones ou utilidade disso na tela de parâmetros, mas aposto que você terá!


REPORT ZSAPeiros.

DATA l_field TYPE string.
FIELD-SYMBOLS  TYPE ANY.

SELECTION-SCREEN BEGIN OF TABBED BLOCK t1 FOR 10 LINES.
SELECTION-SCREEN TAB (50) tab1 USER-COMMAND tab1 DEFAULT SCREEN 101.
SELECTION-SCREEN TAB (50) tab2 USER-COMMAND tab2 DEFAULT SCREEN 102.
SELECTION-SCREEN TAB (50) tab3 USER-COMMAND tab3 DEFAULT SCREEN 103.
SELECTION-SCREEN END OF BLOCK t1.

SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-t01.
PARAMETERS p_bukrs TYPE bukrs.
SELECTION-SCREEN END OF BLOCK 1.
SELECTION-SCREEN END OF SCREEN 101.

SELECTION-SCREEN BEGIN OF SCREEN 102 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK 2 WITH FRAME TITLE text-t02.
PARAMETERS p_werks TYPE werks_d.
SELECTION-SCREEN END OF BLOCK 2.
SELECTION-SCREEN END OF SCREEN 102.

SELECTION-SCREEN BEGIN OF SCREEN 103 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK 3 WITH FRAME TITLE text-t03.
PARAMETERS p_kunnr TYPE kunnr.
SELECTION-SCREEN END OF BLOCK 3.
SELECTION-SCREEN END OF SCREEN 103.

INITIALIZATION.
  l_field = '(ZSAPEIROS)TAB1'.
  ASSIGN (l_field) TO <fs_tab>.
  CONCATENATE '@0Y@' 'Novo' INTO <fs_tab> RESPECTING BLANKS.

  l_field = '(ZSAPEIROS)TAB2'.
  ASSIGN (l_field) TO <fs_tab>.
  CONCATENATE '@0Z@' 'Alterar' INTO <fs_tab> RESPECTING BLANKS.

  l_field = '(ZSAPEIROS)TAB3'.
  ASSIGN (l_field) TO <fs_tab>.
  CONCATENATE '@0W@' 'Excluir' INTO <fs_tab> RESPECTING BLANKS.

Mudar de idioma sem precisar sair ou logar novamente

Precisa testar aquela tradução que está fazendo mas está com preguiça de sair e logar novamente?

Digite ZEN para mudar para o idioma Inglês, ou ZES para Espanhol, ZPT para Português, etc.

Crie as transações ZEN, ZPT, ZES direcionando para o mesmo programa.

REPORT ZSAPeiros.

CASE sy-tcode.

  WHEN 'ZEN'.
    SET LOCALE LANGUAGE 'E'.

  WHEN 'ZPT'.
    SET LOCALE LANGUAGE 'P'.
  
  WHEN 'ZES'.
    SET LOCALE LANGUAGE 'S'.
  
  WHEN OTHERS.
    RETURN.

ENDCASE.
 
CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK 'LANGUAGE'
  EXPORTING
    tcode = 'SESSION_MANAGER'.

Campo obrigatório de mentirinha - Screen-Required

Precisa que um parâmetro de tela apareça o simbolo de obrigatório, mas que não seja obrigatório?

Isso não é tão estranho... é?



REPORT ZSAPeiros.

PARAMETERS p_werks TYPE t001w-werks. "CADÊ O OBLIGATORY?

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    FIND 'P_WERKS' IN screen-name.
    IF sy-subrc IS INITIAL.
      screen-required = '2'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
Pra validar valor ou obrigatório ( estranho já que não queria como obrigatório ), pode usar assim:

AT SELECTION-SCREEN.
  IF p_werks IS INITIAL.
    MESSAGE e032(ms) WITH 'Centro'.
  ENDIF.

Exibir opção de Gravar Layout em seu AlvOO

DATA wa_variant TYPE disvariant.

wa_variant-report = sy-repid. "Sim, só por causa disso!

CALL METHOD go_grid_0100->set_table_for_first_display
  EXPORTING
    i_save     = 'A' "E disso
    is_layout  = wa_layout
    is_variant = wa_variant
...

Conteúdo da SO10 ( textos sapscript ) em Request

Digamos que vc criou isso:


Primeiro mude o tipo da TASK da sua request de workbench para Reparação:


Execute o programa RSTXTRAN no ambiente que criou o texto, e informe os dados solicitados e F8:


<Enter>   <Aceit>   <Sim>






Download de imagem da SE78 ( Smartforms/ Sapscript )

REPORT ZSAPeiros.

* Definição de tipos
TYPES:
  BEGIN OF ty_graphic_table,
    line(255) TYPE x,
  END OF ty_graphic_table.

* Variáveis
DATA:
  lv_graphic_size  TYPE i,
  lv_bytecount     TYPE i,
  lv_tdbtype       LIKE stxbitmaps-tdbtype,
  lv_call_mask(50) TYPE c,
  lv_name_exp      LIKE ibipparms-path,
  lv_filename      TYPE rlgrap-filename,
  lt_content       TYPE TABLE OF bapiconten,
  lt_graphic_table TYPE TABLE OF ty_graphic_table.

* Parâmetros de tela
PARAMETERS:
  p_name  TYPE stxbitmaps-tdname  DEFAULT 'ZSAPEIROS',
  p_btype TYPE stxbitmaps-tdbtype DEFAULT 'BCOL'.

* Atribuir valor aos parâmetros
INITIALIZATION.
  %_p_name_%_app_%-text  = 'Logo (SE78)'.
  %_p_btype_%_app_%-text = 'Cores ou P&B'.

* Executar
END-OF-SELECTION.
* Conteúdo da imagem
  CALL FUNCTION 'SAPSCRIPT_GET_GRAPHIC_BDS'
    EXPORTING
      i_object       = 'GRAPHICS'
      i_name         = p_name
      i_id           = 'BMAP'
      i_btype        = p_btype
    IMPORTING
      e_bytecount    = lv_bytecount
    TABLES
      content        = lt_content
    EXCEPTIONS
      not_found      = 1
      bds_get_failed = 2
      bds_no_content = 3
      OTHERS         = 4.

* Conversão da imagem
  CALL FUNCTION 'SAPSCRIPT_CONVERT_BITMAP'
    EXPORTING
      old_format               = 'BDS'
      new_format               = 'BMP'
      bitmap_file_bytecount_in = lv_bytecount
    IMPORTING
      bitmap_file_bytecount    = lv_graphic_size
    TABLES
      bds_bitmap_file          = lt_content
      bitmap_file              = lt_graphic_table
    EXCEPTIONS
      OTHERS                   = 1.

* Extenção do arquivo de saída
  lv_call_mask = ',Bitmap (*.bmp),*.BMP'.

* Nome do arquivo original
  lv_filename = p_name && '.bmp'.

* Popup para informar o local onde será gravado o arquivo
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = lv_filename
      def_path         = lv_name_exp
      mask             = lv_call_mask
      mode             = 'S'
    IMPORTING
      filename         = lv_name_exp
    EXCEPTIONS
      inv_winsys       = 04
      no_batch         = 08
      selection_cancel = 12
      selection_error  = 16.

  CHECK sy-subrc IS INITIAL.

* Nome do arquivo com o caminho informado
  lv_filename = lv_name_exp.

* Download do arquivo
  CALL FUNCTION 'WS_DOWNLOAD'
    EXPORTING
      bin_filesize            = lv_graphic_size
      filename                = lv_filename
      filetype                = 'BIN'
    TABLES
      data_tab                = lt_graphic_table
    EXCEPTIONS
      invalid_filesize        = 1
      invalid_table_width     = 2
      invalid_type            = 3
      no_batch                = 4
      unknown_error           = 5
      gui_refuse_filetransfer = 6.

  IF sy-subrc IS INITIAL.
    MESSAGE 'Download realizado com sucesso!' TYPE 'S'.
  ELSE.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

Deu TIMEOUT ou ALLOC MEMORY no seu SELECT? OPEN CURSOR pode ser a solução

O que acha de ir trabalhando um grupo de dados antes mesmo de finalizar a seleção de todos os dados?

Basicamente é isto que o comando OPEN CURSOR faz.

_Ah, mas o SELECT ... END SELECT faz isso.

Se você realmente chegou a pensar nisso, na boa, nem tente entender o código abaixo, recomendo estudar um pouco sobre PERFORMANCE e BEST PRATICES.

Eis um código para estudar e aplicar para sua solução.

REPORT ZSAPeiros.

DATA:
  lv_cursor    TYPE cursor,
  lt_j_1bnfdoc TYPE TABLE OF j_1bnfdoc,
  ls_j_1bnfdoc TYPE j_1bnfdoc.

GET TIME STAMP FIELD DATA(lv_ini).
WRITE:/ lv_ini.

OPEN CURSOR lv_cursor 
 FOR SELECT * 
       FROM j_1bnfdoc
      WHERE docdat LE sy-datum.

IF sy-subrc IS NOT INITIAL.
  WRITE:/ 'Erro ao abrir o cursor'.
  REJECT.
ENDIF.

DO.

  FETCH NEXT CURSOR lv_cursor
        INTO TABLE lt_j_1bnfdoc
     PACKAGE SIZE 100. "Quantidade de registros por bloco

  IF sy-subrc IS NOT INITIAL.
    WRITE / '----- FIM DO BLOCO -----'.
    EXIT.
  ENDIF.

  WRITE / '----- INÍCIO DO BLOCO -----'.
  LOOP AT lt_j_1bnfdoc INTO ls_j_1bnfdoc.
    WRITE:/ ls_j_1bnfdoc-docnum.
  ENDLOOP.
  WRITE / '----- FIM DO BLOCO -----'.

ENDDO.

GET TIME STAMP FIELD DATA(lv_fim).
WRITE:/ lv_fim.

Pilha de Processos ABAP / ABAP Stack Process - LIFO

REPORT ZSAPeiros.

DATA:
  lt_stack TYPE abap_callstack,
  ls_stack TYPE abap_callstack_line.

CALL FUNCTION 'SYSTEM_CALLSTACK'
  IMPORTING
    callstack = lt_stack.

LOOP AT lt_stack INTO ls_stack.
  WRITE:/ 'Programa principal:',ls_stack-mainprogram.
  WRITE:/ 'Include           :',ls_stack-include.
  WRITE:/ 'Linha da chamada  :',ls_stack-line.
  WRITE:/ 'Tipo da chamada   :',ls_stack-blocktype.
  WRITE:/ 'Nome do processo  :',ls_stack-blockname.
  WRITE:/ 'Programa sistema  :',ls_stack-flag_system.
ENDLOOP.