write문으로 구현이 되어있어 수정 중 인데요.
기존 소스는
WHEN '2'.
WRITE : / '| 비스켓 |',
24 SY-VLINE, 33 SY-VLINE, 61 SY-VLINE, 100 SY-VLINE,
/ '| 개수 |',
24 SY-VLINE, 33 SY-VLINE, 61 SY-VLINE, 100 SY-VLINE.
WHEN '3'.
WRITE : / '| 스낵 |',
24 SY-VLINE, 33 SY-VLINE, 61 SY-VLINE, 100 SY-VLINE,
/ '| 개수 |',
24 SY-VLINE, 33 SY-VLINE, 61 SY-VLINE, 100 SY-VLINE.
수정본은 어떻게 해야될지 ....
표안에 표 그리기인데 어렵네요.
아시는 분???
댓글 7
-
kkamui
2009.12.08 10:24
-
맨날초보
2009.12.08 17:38
타이틀(제목) 부분이라 Loop~EndLoop 안에서 돌지 않거든요.
루프안에서 돌거라면 저도 덜 고민될텐데..... ㅠㅠ
다른 방법을 찾고 있습니다.
-
요요
2009.12.08 21:39
write 문장을 거의 쓸 필요가 없어서요. ^^;
헤더만 쓰실거라면 아래처럼하시고 부가적인 데코레이션은 원하시는 대로 하시면
되지 않을까 싶습니다. 도움 되시길...
PERFORM write_header.
*&---------------------------------------------------------------------*
*& Form WRITE_HEADER
*&---------------------------------------------------------------------*
FORM write_header .
PERFORM uline USING 'X' 101.
PERFORM line_draw USING 'X' 60 '제 목'.
PERFORM line_draw USING ' ' 36 '데 이 터 '.
PERFORM uline USING 'X' 101.
PERFORM line_draw USING 'X' 29 space.
PERFORM line_draw USING ' ' 29 '비스켓'.
PERFORM line_draw USING ' ' 36 space.
PERFORM line_draw USING 'X' 29 space.
PERFORM line_draw USING ' ' 29 '개 수'.
PERFORM line_draw USING ' ' 36 space.
PERFORM line_draw USING 'X' 29 '종 류'.
PERFORM uline USING ' ' 69.
PERFORM line_draw USING 'X' 29 space.
PERFORM line_draw USING ' ' 29 '스넥'.
PERFORM line_draw USING ' ' 36 space.
PERFORM line_draw USING 'X' 29 space.
PERFORM line_draw USING ' ' 29 '개 수'.
PERFORM line_draw USING ' ' 36 space.
PERFORM uline USING 'X' 101.
ENDFORM. " WRITE_HEADER
*&---------------------------------------------------------------------*
*& Form ULINE
*&---------------------------------------------------------------------*
FORM uline USING lf TYPE any
line TYPE any.
CASE lf.
WHEN 'X'. WRITE / sy-uline(line). " Line feed
WHEN OTHERS. WRITE sy-uline(line).
ENDCASE.
ENDFORM. " ULINE
*&---------------------------------------------------------------------*
*& Form LINE_DRAW
*&---------------------------------------------------------------------*
FORM line_draw USING new_line TYPE any
text_size TYPE i
text TYPE any.
CASE new_line.
WHEN 'X'.
WRITE / sy-vline NO-GAP.
WRITE AT (text_size) text CENTERED.
WHEN OTHERS.
WRITE AT (text_size) text CENTERED.
ENDCASE.
WRITE sy-vline NO-GAP.
ENDFORM. " LINE_DRAW
-
맨날초보
2009.12.09 17:45
↑요요님 답변 감사합니다. 알려주신대로 수정해서 했는데도 여전히 셀병합은 안되네요. ㅠㅠ 다른 좋은 방법은 뭐 없을까요?
-
요요
2009.12.09 20:07
위에 수정 후 레이아웃에 맞게 만든 건데요.
그냥 복사하셔서 출력해보시면 수정 후 레이아웃과 동일한 포맷으로 나옵니다.
write 하는데 좋은 방법이 어디있겠어요. ㅠㅠ
위 프로그램은 크게 라인과 텍스트를 출력하는 기능이고
세부로 시작부분이냐 아니냐 하는 4가지 기능으로 구분되는데요.
1. under-line 전체
2. under-line 부분 : 지정된 길이만큼 under-line 출력
3. text(new-line) : 새로운 라인에 텍스트 출려 ( vertical line 으로 시작 )
4. text(general) : 지정된 길이에 텍스트 출력
로 구분됩니다. 그것만 잘 이해하셔도 별 문제 없으리라 생각됩니다.
기타 decoration 에 대한 것은 맨날초보님 맘대로 하시면 되구요.
실 데이터가 들어가게 되면 지정된 position을 변수로 처리하시고
loop 를 돌아야 하는 데이터를 데이터 출력부분에 값으로 넣어주시기만
하시면 됩니다.
-
요요
2009.12.09 20:29
가상의 데이터를 만들어서 한번 구현해 봤습니다.
도움이 되시길... ^^
TYPES : BEGIN OF ty_st,
code TYPE c LENGTH 1,
text TYPE char255,
END OF ty_st.
DATA : itst TYPE SORTED TABLE OF ty_st WITH UNIQUE KEY code.
DATA dref TYPE REF TO data.
FIELD-SYMBOLS <fs_any> TYPE ANY.
DATA : BEGIN OF itab OCCURS 0,
stype TYPE c LENGTH 1,
s_cnt TYPE n LENGTH 20,
END OF itab.
DEFINE ins.
create data dref like line of &1.
assign dref->* to <fs_any>.
<fs_any> = &2.
insert <fs_any> into table &1.
END-OF-DEFINITION.
* Set code
ins itst : 'A비스켓', 'B빙과', 'C스낵','D초콜릿'.
ins itab : 'A30', 'B20', 'C15', 'D50'.
PERFORM write_header.
PERFORM write_body.
*&---------------------------------------------------------------------*
*& Form WRITE_HEADER
*&---------------------------------------------------------------------*
FORM write_header .
PERFORM uline USING 'X' 101.
PERFORM line_draw USING 'X' 60 '제 목'.
PERFORM line_draw USING ' ' 36 '데 이 터 '.
PERFORM uline USING 'X' 101.
ENDFORM. " WRITE_HEADER
*&---------------------------------------------------------------------*
*& Form ULINE
*&---------------------------------------------------------------------*
FORM uline USING lf TYPE any
line TYPE any.
CASE lf.
WHEN 'X'. WRITE / sy-uline(line). " Line feed
WHEN OTHERS. WRITE sy-uline(line).
ENDCASE.
ENDFORM. " ULINE
*&---------------------------------------------------------------------*
*& Form LINE_DRAW
*&---------------------------------------------------------------------*
FORM line_draw USING new_line TYPE any
text_size TYPE i
text TYPE any.
CASE new_line.
WHEN 'X'.
WRITE / sy-vline NO-GAP.
WRITE AT (text_size) text CENTERED.
WHEN OTHERS.
WRITE AT (text_size) text CENTERED.
ENDCASE.
WRITE sy-vline NO-GAP.
ENDFORM. " LINE_DRAW
*&---------------------------------------------------------------------*
*& Form WRITE_BODY
*&---------------------------------------------------------------------*
FORM write_body .
DATA l_kind_posi TYPE i.
DATA l_kind_text TYPE string.
DATA l_lines TYPE i.
DATA lsst TYPE ty_st.
DESCRIBE TABLE itab LINES l_lines.
l_kind_posi = l_lines / 2.
LOOP AT itab.
IF sy-tabix = l_kind_posi.
l_kind_text = '종 류'.
ELSE.
CLEAR l_kind_text.
ENDIF.
READ TABLE itst INTO lsst WITH KEY code = itab-stype.
PERFORM line_draw USING 'X' 29 space.
PERFORM line_draw USING ' ' 29 lsst-text.
PERFORM line_draw USING ' ' 36 space.
PERFORM line_draw USING 'X' 29 space.
PERFORM line_draw USING ' ' 29 '개 수'.
PERFORM line_draw USING ' ' 36 itab-s_cnt.
AT LAST.
PERFORM uline USING 'X' 101.
EXIT.
ENDAT.
PERFORM line_draw USING 'X' 29 l_kind_text.
PERFORM uline USING ' ' 69.
ENDLOOP.
ENDFORM. " WRITE_BODY
-
맨날초보
2009.12.09 22:56
↑요요님 답변 감사합니다. ^^ 큰 도움 되었습니다.
자체적으로 해결했습니다.
WRITE : / '| 전 자 | 사업자등록번호 |',
41 SY-VLINE, 46 SY-VLINE, 74 SY-VLINE, 100 SY-VLINE,
'| | 발 행 분 |',
41 SY-VLINE, 46 SY-VLINE, 74 SY-VLINE, 100 SY-VLINE,
17 SY-ULINE, 41 SY-VLINE, 46 SY-VLINE, 74 SY-VLINE, 100 SY-VLINE,
'| 세금계산서 | 주민등록번호 |',
41 SY-VLINE, 46 SY-VLINE, 74 SY-VLINE, 100 SY-VLINE,
'| | 발 행 분 |',
41 SY-VLINE, 46 SY-VLINE, 74 SY-VLINE, 100 SY-VLINE,
17 SY-ULINE, 41 SY-VLINE, 46 SY-VLINE, 74 SY-VLINE, 100 SY-VLINE,
'| 발 행 분 | 소 계 |',
41 SY-VLINE, 46 SY-VLINE, 74 SY-VLINE, 100 SY-VLINE.
케이스 밖에 AT NEW 'XXX' .
WRITE :/ '| 종류 |' " 최초일때 라이트
ENDAT.
케이스 탈때마다 비스켓 이나 스낵 앞에
WRITE :/ '| |'
" 최초건이 아닌경우 라이트갯수 앞에
WRITE :/ '| |'
이렇게 하심 아마도 ...... ^^;;