제가 지금 기존의 bdc프로그램을 수정하고 있는데요
'X' 'SAPLKACB' '0002',
' ' 'BDC_CURSOR' 'COBL-KOSTL',
' ' 'BDC_OKCODE' '=ENTE',
* ' ' 'BDC_OKCODE' '=COBL_XERGO',
' ' 'COBL-KOSTL' p_kostl,
' ' 'BDC_SUBSCR' 'SAPLKACB
0003block1'.
위의 코드는 bdc테이블의 마지막에 들어가는 부분입니다.
전표를 생성하는 프로그램인데 수익성 세그먼트를 추가 해서 만들려고 합니다.
아래와 같이 고쳤습니다.
'X' 'SAPLKACB' '0002',
' ' 'BDC_CURSOR' 'COBL-KOSTL',
* ' ' 'BDC_OKCODE' '=ENTE',
' ' 'BDC_OKCODE' '=COBL_XERGO', <- 기존의 마지막을 다음과 같이 수정 수익성 세그먼트팝업버튼으로
' ' 'COBL-KOSTL' p_kostl,
' ' 'BDC_SUBSCR' 'SAPLKACB
0003block1',
* 수익성 세그먼트 추가
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(10)',
' ' 'BDC_OKCODE' '/00',
' ' 'RKEAK-FIELD(01)' ' ',
' ' 'RKEAK-FIELD(02)' p_ARTNR, "'QML6007Z',
' ' 'RKEAK-FIELD(07)' p_WERKS, " 'KP01',
' ' 'RKEAK-FIELD(08)' p_VKORG, "'ks00',
' ' 'RKEAK-FIELD(09)' p_VTWEG, "'k1',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(12)',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(01)',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(01)',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(01)',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(14)',
' ' 'BDC_OKCODE' '=WEIT',
' ' 'RKEAK-FIELD(13)' p_WWVKB, "'A01',
' ' 'RKEAK-FIELD(14)' p_WWVKG, "'A01',
'X' 'SAPLKACB' '0002',
' ' 'BDC_CURSOR' 'COBL-KOSTL',
' ' 'BDC_OKCODE' '=ENTE', <- 엔터 이벤트가 들어간것 같은데요?
' ' 'COBL-KOSTL' p_kostl,
' ' 'BDC_SUBSCR' 'SAPLKACB
0003block1'.
위와 같이 수정을 했는데 마지막 수정 마지막 코드에서 보시면 ok_code가 =ente로써
와 같은 블럭을 엔터를 쳐져야 끝이 나는데 위와 같은 화면이 에러에 걸려요 그래서 그부분에서 엔터를 치면 아무런 문제가 없어 지거든요..
어떻게 처리를 해야 저위의 사진이 안걸리고 자동으로 엔터가 들어갈까요..
코드에는 문제가 없는것 같은데.. 쫌 도와주세요
흑흑 그림이 안뜨네요.. 코드만으로 확인 하시기 힘드시겠죠.. 그냥 팝업 창 하나가 뛰워 져있고요 거기에 엔터이벤트가 안들어간것 같아요..에러니까 전표가 안만들어지는데 e로 돌려서 그 팝업 화면에서 엔터만 치면 제대로 돌아가거든요.
댓글 10
-
정군
2009.05.12 20:55
-
보나
2009.05.12 21:55
젤 마지막 부분
여기를
'X' 'SAPLKACB' '0002',
' ' 'BDC_CURSOR' 'COBL-KOSTL',
' ' 'BDC_OKCODE' '=ENTE', <- 엔터 이벤트가 들어간것 같은데요?
' ' 'COBL-KOSTL' p_kostl,
' ' 'BDC_SUBSCR' 'SAPLKACB
0003block1'.
아래와같이 변경해보세요.
'X' 'SAPLKACB' '0002',
' ' 'BDC_OKCODE' '/EENTE'.
-
보나
2009.05.12 22:07
SD관련 FI 전표기표 BDC 같은데,
CO-PA , CCA 를 같이 넘겨주나보네요...
CO-PA 발생시 CCA 내역은 안 넣어줘도 되지 않나?
라는 생각에 e-abap.net 의 CO컨에게 물어보니 그렇다고 하네요 ㅎㅎㅎ
사이트의 FI,CO 담당자에게 해당 전표에 대한 내역을 확인해 보시는 것도 좋을듯...
나름 익숙한BDC 코드라서... -_-;
BDC 에러가 계속되는 경우 에러메세지 내역도 좀 알려주세요.
-
아밥고지를 찾아서
2009.05.13 00:31
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(10)',
' ' 'BDC_OKCODE' '/00',
' ' 'RKEAK-FIELD(01)' ' ',
' ' 'RKEAK-FIELD(02)' p_ARTNR, "'QML6007Z',
' ' 'RKEAK-FIELD(07)' p_WERKS, " 'KP01',
' ' 'RKEAK-FIELD(08)' p_VKORG, "'ks00',
' ' 'RKEAK-FIELD(09)' p_VTWEG, "'k1',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(12)',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(01)',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(01)',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(01)',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(14)',
' ' 'BDC_OKCODE' '=WEIT',
' ' 'RKEAK-FIELD(13)' p_WWVKB, "'A01',
' ' 'RKEAK-FIELD(14)' p_WWVKG, "'A01',
요 부분이 문제 인거 같아요
필드가 30개정도 되는데 화면이 작아서 한 화면에 보이는 필드수가 15개 정도 됩니다.
그래서
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(14)',
' ' 'BDC_OKCODE' '=WEIT',
' ' 'RKEAK-FIELD(13)' p_WWVKB, "'A01',
' ' 'RKEAK-FIELD(14)' p_WWVKG, "'A01',
의 값이 제대로 들어가지 않는것 같아요
그래서
'X' 'SAPLKEAK' '0300',
' ' 'BDC_CURSOR' 'RKEAK-FIELD(10)',
' ' 'BDC_OKCODE' '/00',
' ' 'RKEAK-FIELD(01)' ' ',
' ' 'RKEAK-FIELD(02)' p_ARTNR, "'QML6007Z',
' ' 'RKEAK-FIELD(07)' p_WERKS, " 'KP01',
' ' 'RKEAK-FIELD(08)' p_VKORG, "'ks00',
' ' 'RKEAK-FIELD(09)' p_VTWEG, "'k1',
' ' 'RKEAK-FIELD(21)' p_WWVKB, "'A01',
' ' 'RKEAK-FIELD(22)' p_WWVKG, "'A01',
와 같이 처리 했더니 필더 21 22가 안보니까.없다고 하더라고요.. 스크롤 해서 내려가야 보이자나요.. 어떻게 하죠?
-
보나
2009.05.13 00:45
'X' 'SAPLKEAK' '0300',
' ' 'BDC_OKCODE' '=WEIT',
' ' 'RKEAK-FIELD(01)' ' ',
' ' 'RKEAK-FIELD(02)' p_ARTNR, "'QML6007Z',
' ' 'RKEAK-FIELD(07)' p_WERKS, " 'KP01',
' ' 'RKEAK-FIELD(08)' p_VKORG, "'ks00',
' ' 'RKEAK-FIELD(09)' p_VTWEG, "'k1',
' ' 'RKEAK-FIELD(21)' p_WWVKB, "'A01',
' ' 'RKEAK-FIELD(22)' p_WWVKG, "'A01', -
아밥고지를 찾아서
2009.05.13 01:08
위와 같이 해도 21번이랑 22번이 안보니까 문제가 생긴다고 하는데요... -
아밥고지를 찾아서
2009.05.13 01:13
필드 RKEAK-FIELD(22)는(은) 화면 SAPLKEAK 03000 에 없습니다. 라고 떠요. -
보나
2009.05.13 02:08
'X' 'SAPLKEAK' '0300',
' ' 'BDC_OKCODE' 'P+',
' ' 'RKEAK-FIELD(01)' ' ',
' ' 'RKEAK-FIELD(02)' p_ARTNR, "'QML6007Z',
' ' 'RKEAK-FIELD(07)' p_WERKS, " 'KP01',
' ' 'RKEAK-FIELD(08)' p_VKORG, "'ks00',
' ' 'RKEAK-FIELD(09)' p_VTWEG, "'k1',
* ' ' 'RKEAK-FIELD(15)' ' ',
'X' 'SAPLKEAK' '0300',
' ' 'BDC_OKCODE' '=WEIT',
' ' 'RKEAK-FIELD(06)' p_WWVKB, "'A01',
' ' 'RKEAK-FIELD(07)' p_WWVKG, "'A01',
현재 플젝중인 사이트에서는 해당 내역을 테스트할 환경이 아니라, 소스만 보고 답변달라니 정확하지 못한점 이해해주세요.
P+ 버튼(Pages)이 존재한다면 위와같은 로직으로 테스트가 가능할까요?
-
정군
2009.05.13 03:17
에러를 해결하는 방향으로 정하셨나 보네요.
일반적?으로 BDC에서 화면이 내려가는 것 때문에 특정 라인을 선택할 수 있는 기능이 많습니다.
CO02같은 것에서 하위 품목 중에 특정 것을 찾거나 할 수 있는 것과 같은 것이지요.
따라서, 어떤 t-code인지는 모르겠지만, 메뉴에서 보면 goto 혹은 find 혹은 position 등으로
찾아갈 수 있는 조건을 넣는 창이 뜨는 경우가 있습니다.
이경우 값을 넣고 찾으면 원하는 라인이 첫 라인이 되기 때문에 무조건(01)로 코딩하면 되지요.
추가를 하는 경우에는 보통 제일 아래로 내리면 마지막 라인이 첫번째로 오기 때문에
(02)에다가 값을 넣고 다시 제일 아래로 내리고 하기도 합니다.
문제는 이런게 없는 경우인데...
이 사이트를 뒤져보면 BDC 탈 때 화면크기를 계산해서 몇 번쨰 라인까지 보이는지 계산하는
예제 코드가 있었던 것으로 기억합니다.
그걸 이용해서 몇 라인인지 계산하고
마지막 라인이 되면 보나님이 제시한 대로 P+ 를 이용해 한 페이지를 내린다음
(02)부터 넣기 시작하면 되겠지요...
혹자는 이런게 귀찮아서 그냥 무조건 (05) 같은 라인에 집어 넣은 다음
P+로 페이지 다운 하고, 그러면 보통 마지막 라인이 첫번째로 오기 때문에
다시 (05) 집어 넣는 식으로 추가하기도 합니다.
-
보나
2009.05.13 17:48
정군님께서 설명하신 방법이 저도 이용하는 방법이지요.
위의 CO-PA 입력같은 경우는 'goto, find, position' 등을 이용할 수 없는 case 입니다.
라인아이템 개념이 아닌 각 01,02,03....nn 의 line 들이 고유의 값 (각각 자재명, 플랜트, 수량 등등의 CO 로 넘겨주는 세부 항목)
을 가지게 되기에, '(05) 입력후 P+ ' 의 빈복을 이용하는건 힘들어보이구요....
우선 해당 screen 에 대한 user_command 부분을 보니 ok_code 'P+' 에 대한 로직이 들어가 있길래,
위의 예제를 말씀드린거구요....
현재 프로젝트중인 시스템내에서 위와같이 CCA 대신 CO-PA 세팅을 하게되는(그것도 특성값을 20개이상 가지는)
전표 생성이 불가하여 소스로만 설명드리려니 삽질이네요....
참고로 P+ 를 이용한 BDC값의 입력은 며칠전에도 질문이 올라왔었습니다.
step loop 등으로 사이트에서 검색하시면,
화면의 라인수를 체크하여 다음페이지로 넘어가게 할 수 있는 펑션(로직)이 있으니
만약 P+ 를 이용할 수 있을 경우에는 참고해 보시는것도 ^^;;
어제부터 이 질문에 대한 답글을 많이 달게 되는군요...
문제가 해결되시길 바랍니다.
제가 질문을 잘 이해했는지 모르겠지만...
N 모드일 때는 에러가 발생하면 BDC가 멈춥니다.
E일 때야 사용자 입력을 대기하니까 엔터치면 되지만, N일 때는 그냥 끝나버려서 안되는 것 아닌가요?
에러가 안나게 해야지...
E모드로 하는건 해결책이 아닌거 같습니다.