REPORT SAPeiros.
DATA:
lv_url TYPE char255 VALUE 'C:\TEMP\Arquivo.PDF',
lv_file TYPE string.
CALL FUNCTION 'CALL_BROWSER'
EXPORTING
url = lv_url
EXCEPTIONS
frontend_not_supported = 1
frontend_error = 2
prog_not_found = 3
no_batch = 4
unspecified_error = 5
OTHERS = 6.
IF sy-subrc IS NOT INITIAL.
lv_file = lv_url.
CALL METHOD cl_gui_frontend_services=>execute
EXPORTING
document = lv_file
EXCEPTIONS
OTHERS = 1.
ENDIF.
Conteúdo
Abrir arquivo PDF em tela em vez de salvar
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?
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
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:
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.