728x90
반응형
<1페이지>
<1페이지 - 2번째>
<2페이지>
보다시피 이런식의 컨트롤이다. 아이템은 여러건이 될 수 있어서 뒷페이지까지 인쇄되고 다시 다른 자재가 첫페이지로 나오는 것인데..
그냥 생각하면 쉬운 컨트롤 같으나.. 해보면 어렵다... -_-
그럼 어떻게 할지 우선 선언부부터 공개..
테이블로 둘다 선언한 이유는 여러건의 자재가 들어오니 header도 여러건 item도 여러건이다.
그냥 생각하면 쉬운 컨트롤 같으나.. 해보면 어렵다... -_-
그럼 어떻게 할지 우선 선언부부터 공개..
테이블로 둘다 선언한 이유는 여러건의 자재가 들어오니 header도 여러건 item도 여러건이다.
물론 코딩상에서 1번째 자재에 맞는 그 아랫단 Bom 아이템들은 필드를 하나 줘서 매칭시켜놨다.
가령 1번 자재1 - 1번 bom1 1번 bom2 1번 bom3
2번 자재2 - 2번 bom1 2번 bom2 2번 bom3 2번 bom4 이런식으로... 그러기에 여기서만 잘 컨트롤 해주면 된다.. ㅎㅎ
다음은 정의부.
드럽게 많이 정의해줬다... G_FOBCIF는 사실 다른쪽때문에 선언한거다. 페이지 컨트롤에는 관련 없다.
HEAER_PAGE 는 우선 1페이지부터라 1로 선언했다.
HEADER가 몇개인지 계산해주면 몇개의 자재가 있는지 알수 있다. (물론 그에 따라서 달린 BOM들 때문에 전체 페이지는 매우 많이 나올 것이다..)
G_TOTAL_PAGE 는 총 5라인이었다...(예를 들자면 그랬다..)
우선 MATPAGE 가 G_HEADER_PAGE일때 시작하니까.. G_HEADER_PAGE 는 전역정의에서 1로 선언했다. 1페이지부터 출력이다.
아래는 아이템라인 컨트롤 시작.
입력 매개변수 IT_ITEM 출력 매개변수 IT_ITEM
G_HEADER_PAGE G_ITEM_COUNT
G_ITEM_COUNT G_GO_NEXTPAGE
G_GO_NEXTPAGE G_HEADER_PAGE
소스코드
DATA:
l_tabix TYPE sy-tabix,
l_lines TYPE i,
ls_item LIKE LINE OF it_item.
CONSTANTS:
c_item_max_lines TYPE sy-tabix VALUE 4.
CLEAR:
g_go_nextpage,
g_item_count.
LOOP AT it_item WHERE matpage = g_header_page.
g_item_count = g_item_count + 1.
l_tabix = sy-tabix.
ENDLOOP.
CHECK sy-subrc = 0.
IF g_item_count < c_item_max_lines. <-이 부분은 아이템라인이 총 4라인이 아닌 3라인이 들어왔을때
l_lines = c_item_max_lines - g_item_count. <- 빈 아이템라인을 출력하는 곳이다.
DO l_lines TIMES. <- 맨 위에 폼양식을 보면 가운데가 4칸인데 3칸만 인쇄될 것을 우려해서 넣은부분
g_item_count = g_item_count + 1.
l_tabix = l_tabix + 1.
ls_item-matpage = g_header_page. <-빈칸도 MATPAGE 를 입력해줘야 되니까 넣었다.
INSERT ls_item INTO it_item INDEX l_tabix. <- 빈칸 넣는거다.
ENDDO.
ENDIF.
아이템 인쇄부의 명령어인데...
그 아랫부분이 포인트다. HEADER LINE CONTROL 부분!!
입력 매개변수 G_ITEM_INDEX 출력 매개변수 G_ITEM_INDEX
G_ITEM_COUNT G_ITEM_COUNT
G_HEADER_PAGE G_GO_NEXTPAGE
G_GO_NEXTPAGE G_HEADER_PAGE
코딩부
g_item_index = g_item_index + 1.
IF g_item_index = g_item_count. <- 만약 아이템 인덱스를 쭉 돌아서 g_item_index 가 총 아이템 카운트랑 같아지면(위쪽에서 세놨음)
CLEAR:
g_item_index, <-클리어해
g_item_count.
g_header_page = g_header_page + 1. <- 다음페이지로 가.
g_go_nextpage = 'X'. <- 넥스트 페이지에 체크해놔
ENDIF.
아래는 마지막 부분..
G_GO_NEXT_PAGE 가 체크 되어 있고, G_TOTAL_PAGE 가 G_HEADER_PAGE 보다 크거나 같을 때, G_GO_NEXTPAGE G_HEADER_PAGE
소스코드
DATA:
l_tabix TYPE sy-tabix,
l_lines TYPE i,
ls_item LIKE LINE OF it_item.
CONSTANTS:
c_item_max_lines TYPE sy-tabix VALUE 4.
CLEAR:
g_go_nextpage,
g_item_count.
LOOP AT it_item WHERE matpage = g_header_page.
g_item_count = g_item_count + 1.
l_tabix = sy-tabix.
ENDLOOP.
CHECK sy-subrc = 0.
IF g_item_count < c_item_max_lines. <-이 부분은 아이템라인이 총 4라인이 아닌 3라인이 들어왔을때
l_lines = c_item_max_lines - g_item_count. <- 빈 아이템라인을 출력하는 곳이다.
DO l_lines TIMES. <- 맨 위에 폼양식을 보면 가운데가 4칸인데 3칸만 인쇄될 것을 우려해서 넣은부분
g_item_count = g_item_count + 1.
l_tabix = l_tabix + 1.
ls_item-matpage = g_header_page. <-빈칸도 MATPAGE 를 입력해줘야 되니까 넣었다.
INSERT ls_item INTO it_item INDEX l_tabix. <- 빈칸 넣는거다.
ENDDO.
ENDIF.
아이템 인쇄부의 명령어인데...
그 아랫부분이 포인트다. HEADER LINE CONTROL 부분!!
입력 매개변수 G_ITEM_INDEX 출력 매개변수 G_ITEM_INDEX
G_ITEM_COUNT G_ITEM_COUNT
G_HEADER_PAGE G_GO_NEXTPAGE
G_GO_NEXTPAGE G_HEADER_PAGE
코딩부
g_item_index = g_item_index + 1.
IF g_item_index = g_item_count. <- 만약 아이템 인덱스를 쭉 돌아서 g_item_index 가 총 아이템 카운트랑 같아지면(위쪽에서 세놨음)
CLEAR:
g_item_index, <-클리어해
g_item_count.
g_header_page = g_header_page + 1. <- 다음페이지로 가.
g_go_nextpage = 'X'. <- 넥스트 페이지에 체크해놔
ENDIF.
아래는 마지막 부분..
넘어가라. 라는건데... 크거나 같은 조건을 넣은 이유는 맨 마지막에 5페이지면 그 전 명령어 때문에
6페이지까지 +1이 되고 멈춰서 빈 페이지가 출력되는 것이다.
그렇기 때문에 마지막 커맨드에 저렇게 넣어주면 빈 페이지 출력이 안된다.
이정도면 끝!!!
728x90
반응형
'ERP-SAP > SAMRTFORMS' 카테고리의 다른 글
<ABAP> Smartforms 에서 알아둘 SAP SCRIPT (0) | 2012.02.08 |
---|---|
<ABAP> Smartforms 에서 1페이지에서 2페이지로 넘어가며 출력하기 (0) | 2011.06.03 |
<ABAP> RFC 를 이용하여 Smartform 을 PDF로 보내기 (0) | 2011.06.02 |