본문 바로가기
ERP-SAP/SAMRTFORMS

<ABAP> Smartforms 에서 1페이지에서 2페이지로 넘어가며 출력하기

by 행복한워니의 기록 2011. 6. 3.
728x90
반응형

우선 스마트폼을 그릴줄 안다라는 조건부터 시작...

포인트는..

1. 라인 아이템들(실제 많은 데이터가 나올 라인들)이 첫페이지에는 6칸, 2번째 페이지에서는 위에서부터 쭉 연결되게 나오는 방법

2. 라인아이템 출력칸이 5칸인데 실제로 데이터는 3개밖에 없어서 빈칸만 출력하는 방법


이 두가지가 가장 궁금하고 주요한 요지가 아닐까..


우선 어떻게 그렸는지 보자.

 


2개의 페이지를 그린다. 1페이지는 루프를 안돌아도 될.. 그런 Body 급들(예를들어, 작성자명이라던지 주소 같은.. 한번만 보여주면 될것들)과

가운데 라인아이템들이 도는 부분을 두 윈도우 (노란색 하늘색)로 나눠두었다.


2페이지의 head 부분은 라인아이템위에 소개글 부분같은 곳이다.

가령

아이템번호 | 자재번호 | 자재이름 | 유효기간 |     <-- 이런 텍스트가 들어갈 곳이 바로 헤더부분이다.

아이템 부분은 루프를 돌 곳으로 특별히 컨트롤 할 필요는 없다.

두번째로 저 사진에서 알 수 있는건, 하늘색은 주 윈도우, 노란색은 보조윈도우라는 것이다.

아이템부를 주 윈도우로 둠으로써 아이템의 갯수가 오버해서 다음페이지로 자동으로 넘어갈 수 있도록 주 윈도우 설정을 해 준 것이다.

(뉴버젼 스마트폼에서 가능한 기술이라고 한다. 구버젼에서는 따로 2페이지로 가도록 소스코딩 해줘야 한다고 들었다.)


자 이제 가장 중요한 내용부를 오픈하겠다..

 

 


이런식의 아이템 컨트롤을 해줄 수 있다.1페이지의  바디 레이아웃은 기존 그냥 1페이지짜리 만들듯 만들면 끝나는 부분이다.

신경쓸 필요 없고.. 포인트는 아이템부인데.. 여기서 이제 루프를 몇개를 도느냐, 5라인중에 3아이템만 있어서 2칸이 비면 어떻게 처리할 것인가..

하는 문제들이 여기에 있다.


그럼 메인아이템의 첫번째 라인

Item line control - 1st page

 거기서 이런 소스를 넣어두었다.



입력매개변수 : IT_ITEM    출력 매개변수 : IT_ITEM

  DATA:
  l_lines TYPE i.

IF LINESit_item[] 5.   들어오는 입력값이 5개보다 적으면..(첫페이지 아이템 입력칸이 5개였음)
  l_lines LINESit_item[] ).   만약 3개만 왔다면 5-3해서 l_lines 는 2가 된다.
  DO l_lines TIMES.              2번 돌아라.
    APPEND INITIAL LINE TO it_item.   이니셜 라인을 it_item에 붙여라.
  ENDDO.
ENDIF.


이걸로 이제 첫페이지에서 5라인보다 적게 들어온 값들을 컨트롤 할 수 있게 되었다.

아참 당연히 루프는 아래처럼 내부테이블이 돌도록 선언 되어 있었다..

 


그리고 실수하기 쉬운 것은..

1페이지 다음에 2페이지로 넘어가는 셋팅을 안해서.. 1페이지만 계속 나오게 되는 것인데..

이는 여기서 셋팅해주면 된다.

페이지1에서 일반속성에 다음페이지를 page2 로 잡아주기만 하면 2페이지로 간다..


 



그리고 여담으로 난 처음 이 스마트폼을 그릴 때, 반복되서 나오는 부분도 전부 칸을 그려놔서...

어이없이 전부 삭제해야 하는 구린 경우가 발생하였는데.

아이템이 반복되서 나오는 부분은 첫 한줄만 만들고,
 
윈도우 메인의 사이즈를 딱 그 루프돌 위치의 크기만큼 잡아주면 된다.



2페이지의 윈도우는 당연히 아이템만 계속 나오니까 1페이지보다 크게만 그려주면 되는 것이고..

끝!!

이 내용은 대충.. 조금이라도 그려본 사람이 이해할 수 있도록 쓴 글이니.. 생 초보가 보면 무슨말인가 할 것임이 ....

ㅠ_ㅜ

아래는 선언부..

 

 



그 아래는 스마트폼 콜하는 내 소스..
  *----------------------------------------------------------------------*
*-- Call smartforms
*... Local Variable Declaration
  DATA:
    lt_document_output_info TYPE ssfcrespd,
    lt_job_output_info      TYPE ssfcrescl,
    lt_job_output_options   TYPE ssfcresop,
    ls_control_parameters   TYPE ssfctrlop,
    ls_output_options       TYPE ssfcompop,
    func_module_name        TYPE rs38l_fnam.

  CONSTANTS:
*... Determine the name of the generated function module
    c_formname TYPE ssfscreen-fname VALUE 'ZOASIS_ORI01'.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           c_formname
    IMPORTING
      fm_name            func_module_name
    EXCEPTIONS
      no_form            1
      no_function_module 2
      OTHERS             3.

  CASE sy-subrc.
    WHEN 1.
      es_return-type    'E'.
      es_return-message 'No form'.
      RETURN.

    WHEN 2.
      es_return-type    'E'.
      es_return-message 'No function module'.
      RETURN.

    WHEN 3.
      es_return-type    'E'.
      es_return-message 'Smartform error'.
      RETURN.
  ENDCASE.


  ls_control_parameters-no_dialog 'X'.
  ls_control_parameters-getotf    'X'.

*... Call the generated function module of the form
  CALL FUNCTION func_module_name
    EXPORTING
      control_parameters   ls_control_parameters
      output_options       ls_output_options
      user_settings        space
      is_header            ls_header
    IMPORTING
      document_output_info lt_document_output_info
      job_output_info      lt_job_output_info
      job_output_options   lt_job_output_options
    TABLES
      it_item              lt_item
    EXCEPTIONS
      formatting_error     1
      internal_error       2
      send_error           3
      user_canceled        4
      my_exception         5
      OTHERS               6.

그 아래는 OTF를 PDF로 변환해서 인터페이스 해주는 방법.. 이건 다른 글에 있다..

  *----------------------------------------------------------------------*
*-- convert OTF to xstring
  DATA:
    l_bin_filesize TYPE i,
    lt_dummy       TYPE STANDARD TABLE OF docs,
    lt_lines       TYPE STANDARD TABLE OF tline.

  FIELD-SYMBOLS:
    <lines> TYPE tline,
    <x>     TYPE x.

  CALL FUNCTION 'CONVERT_OTF_2_PDF'
    IMPORTING
      bin_filesize           l_bin_filesize
    TABLES
      otf                    lt_job_output_info-otfdata
      doctab_archive         lt_dummy
      lines                  lt_lines
    EXCEPTIONS
      err_conv_not_possible  1
      err_otf_mc_noendmarker 2
      OTHERS                 3.

  LOOP AT lt_lines
    ASSIGNING <lines>.
    ASSIGN <lines> TO <x> CASTING TYPE x.
    CONCATENATE e_contents <x> INTO e_contents IN BYTE MODE.
  ENDLOOP.
728x90
반응형