quinta-feira, 16 de fevereiro de 2012

SapScript - Passo a Passo - 2

"  Opa, Demorou mas chegou, aqui está o post restante de como fazer uma
" Sapscript, continuação do link abaixo:
http://abapjuniores.blogspot.com/2012/02/sapscript-passo-passo-1.html
"  Primeiramente iremos colocar códigos dentro das janelas da pagina
" principal que são a 'MAIN' e a 'WINDOW1', clicando no botão em destaque
" na imagem abaixo, agora o bixo vai pega. rsrs to brincando rs.






" vamos para o editor da Sapscript que a cara é horrivel, tendo que trabalhar
" linha por linha do código, nas versões mais novas aparece um editor um
" pouco menos agressivo mas tão ruim quanto, bem como a gente quer aprender
" mesmo, então vamos trabalhar no modo antigo, na verdade porque o novo
" parece Word do Office e não fica paracendo código.
"  Olhe na segunda imagem abaixo e se não for a cara do seu editor então vá
" no menu 'GOTO / CHANGE EDITOR'  e pronto.


"  Agora coloquem o código abaixo no editor das janela 'MAIN' e 'WINDOW1' na

" ordem.




"  Eu sei, e muito chato escrever nesse editor por causa dos 'enters' que damos
" normalmente nos códigos, mas daqui a pouco você se acostumam, outra coisa que
" gostaria de comentar e provavelmente vocês já perceberam que esse passo-a-passo
" está da forma mais simples para que possam entender e depois vocês façam do
" melhor jeito que encontrarem, estarei mais tarde postando complementos sobre
" o que foi passado aqui.

"  Abaixo agora existe o código que vai chama a seu formulário, é só criar na SE38
" mesmo um programa normal com o código abaixo, e por favor vamos pensar no
" meio ambiente não fiquem imprimindo igual uns doidos a cada alteração que fizerem
" no Sapscript, na hora de imprimir coloquem no modo de visualização.


REPORT  z_sapscript_code.

" Declarações...
DATA :
  st_sflight TYPE sflight,
  it_sflight TYPE TABLE OF sflight
  .

" Tela de seleção...
" carrid : AA / Connid : 0017 pra teste caso seja minisap.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_carrid TYPE spfli-carrid,
  p_connid TYPE spfli-connid
  .
SELECTION-SCREEN END OF BLOCK   b1.

" Início...
START-OF-SELECTION.

" Select condicionado pelos parameters da tela de seleção..
  SELECT *
    FROM sflight
    INTO TABLE it_sflight
    WHERE carrid p_carrid
      AND connid p_connid.

" Se achou algum registro.
IF sy-subrc IS INITIAL.
" O nome das funções são um pouco auto-explicativas.
  PERFORM :
    f_start,
    f_open,
    f_write_1 .
"  Percebam que dei loop Somente com o perform que contem os dados da janela
" 'MAIN' pois ela e a única que dá loop de informação, se eu colocasse o
" perform f_write_1 que contem o Header do arquivo ('WINDOW1') dentro do
" loop também não iria aparecer todos as informações e sim o ultimo registro.

  LOOP AT it_sflight INTO st_sflight.
    PERFORM :f_write_2.
  ENDLOOP.

  PERFORM :
    f_close,
    f_end.

else.
  MESSAGE 'Dados não encontrados' TYPE 'I'.
ENDIF.


*&---------------------------------------------------------------------*
*&      Form  f_start
*&---------------------------------------------------------------------*
FORM f_start .

  CALL FUNCTION 'START_FORM'
   EXPORTING
*   ARCHIVE_INDEX          =
     form                   'ZTESTE' " Nome do Sapscript
     language               sy-langu " Idioma Logado
*   STARTPAGE              = ' '
     program                sy-repid " Programa Executado
*   MAIL_APPL_OBJECT       =
* IMPORTING
*   LANGUAGE               =
   EXCEPTIONS
     form                   1
     format                 2
     unended                3
     unopened               4
     unused                 5
     spool_error            6
     codepage               7
     OTHERS                 8
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " f_start
*&---------------------------------------------------------------------*
*&      Form  f_open
*&---------------------------------------------------------------------*
FORM f_open .

  CALL FUNCTION 'OPEN_FORM'
 EXPORTING
*   APPLICATION                       = 'TX'
*   ARCHIVE_INDEX                     =
*   ARCHIVE_PARAMS                    =
*   DEVICE                            = 'PRINTER'
*   DIALOG                            = 'X'
   form                              'ZTESTE' " Sapscript
   language                          sy-langu " Idioma logado
*   OPTIONS                           =
*   MAIL_SENDER                       =
*   MAIL_RECIPIENT                    =
*   MAIL_APPL_OBJECT                  =
*   RAW_DATA_INTERFACE                = '*'
*   SPONUMIV                          =
* IMPORTING
*   LANGUAGE                          =
*   NEW_ARCHIVE_PARAMS                =
*   RESULT                            =
 EXCEPTIONS
   canceled                          1
   device                            2
   form                              3
   OPTIONS                           4
   unclosed                          5
   mail_options                      6
   archive_error                     7
   invalid_fax_number                8
   more_params_needed_in_batch       9
   spool_error                       10
   codepage                          11
   OTHERS                            12
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " f_open
*&---------------------------------------------------------------------*
*&      Form  f_write
*&---------------------------------------------------------------------*
FORM f_write_1 .

  CALL FUNCTION 'WRITE_FORM'
 EXPORTING
   element                        'E1'     " Elemento da janela
*   FUNCTION                       = 'SET'
*   TYPE                           = 'BODY'
   window                         'WINDOW1'" janela do Sapscript
* IMPORTING
*   PENDING_LINES                  =
 EXCEPTIONS
   element                        1
   function                       2
   type                           3
   unopened                       4
   unstarted                      5
   window                         6
   bad_pageformat_for_print       7
   spool_error                    8
   codepage                       9
   OTHERS                         10
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " f_write
*&---------------------------------------------------------------------*
*&      Form  f_close
*&---------------------------------------------------------------------*
FORM f_close .

  CALL FUNCTION 'CLOSE_FORM'
* IMPORTING
*   RESULT                         =
*   RDI_RESULT                     =
* TABLES
*   OTFDATA                        =
 EXCEPTIONS
   unopened                       1
   bad_pageformat_for_print       2
   send_error                     3
   spool_error                    4
   codepage                       5
   OTHERS                         6
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " f_close
*&---------------------------------------------------------------------*
*&      Form  f_end
*&---------------------------------------------------------------------*
FORM f_end .

  CALL FUNCTION 'END_FORM'
* IMPORTING
*   RESULT                         =
 EXCEPTIONS
   unopened                       1
   bad_pageformat_for_print       2
   spool_error                    3
   codepage                       4
   OTHERS                         5
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " f_end

*&---------------------------------------------------------------------*
*&      Form  f_write_2
*&---------------------------------------------------------------------*
FORM f_write_2 .

  CALL FUNCTION 'WRITE_FORM'
 EXPORTING
   element                        'E2'    " Elemento da janela
*   FUNCTION                       = 'SET'
*   TYPE                           = 'BODY'
   window                         'MAIN'  " janela do Sapscript
* IMPORTING
*   PENDING_LINES                  =
 EXCEPTIONS
   element                        1
   function                       2
   type                           3
   unopened                       4
   unstarted                      5
   window                         6
   bad_pageformat_for_print       7
   spool_error                    8
   codepage                       9
   OTHERS                         10
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                                                    " f_write_2

Um comentário: