2013-03-01 4 views
-1

내 문제를 취급 :SAP의 ABAP - 제어 테이블

I ls_eban라는 로컬 구조로 테이블을 통해 "루프"..

그 정보를 내가이 지침에 따라야합니다

:

  1. ls_eban-matnr 은 (
  2. ls_eban-werks 가 zmd_scmi_st05에이어야() (1 글로벌 제어 테이블)에 zmd_scmi_st01 BE해야 2. 제어 표) (글로벌)
  3. ls_eban-knttp 내가 명확하고 확대됨에있는 선택이 필요

) zmd_scmi_st06에서 ((글로벌 3. 제어 표)해야합니다. 나는 실제로 하나 가지고 있지만, 전혀 공연하지 않습니다.

내 솔루션 :

나는 또한 제어 테이블이 서로 어떤 관계 (기본 키없이 차 키)이없는 것을 말할 필요
SELECT st01~matnr st05~werks st06~knttp 
    FROM  zmd_scmi_st01 AS st01 
    INNER JOIN zmd_scmi_st05 AS st05 
    ON   st05~werks = ls_eban-werks 
    INNER JOIN zmd_scmi_st06 AS st06 
    ON   knttp = ls_eban-knttp 
INTO TABLE lt_control 
WHERE  st01~matnr = ls_eban-matnr AND st01~bedarf = 'X' 
    AND  st05~bedarf = 'X'. 

.

+1

전체 코드 샘플뿐만 아니라 관련된 모든 테이블의 구조를 보여 주시겠습니까? 나는 당신의 문제가 무엇인지 짐작할 수 있습니다. 당신은 순수 추측 인 "대답"을 원하지 않습니다 ... – vwegert

+1

3 개의 제어 테이블이 서로 관련이 없다면, 합류해서는 안됩니다. 각 규칙에 대해 별도의 선택을하십시오. 또한 제어 테이블의 특성으로 인해 상대적으로 작은 테이블이기 때문에 각 테이블의 모든 항목을 별도의 내부 테이블로 선택하고 루프 내부에서 읽기 만하면됩니다. – Esti

답변

0

첫 번째로해야 할 일은 루프 내부에서 선택을하는 것입니다. 대신

loop at lt_eban into ls_eban. 
     Select .... 
endloop. 

단일 선택을 수행해야합니다.

if lt_eban[] is not initial. 
    select ... 
    into table ... 
    from ... 
     for all entries in lt_eban 
    where ... 
endif. 

우리가 더 많은 정보가 있다면 수정해야 할 더 효율성이있을 수 있습니다 (vwegert에 의해 주석에 언급 한 바와 같이. 예를 들어, 정말 아무 제어 테이블의 키?) 루프의 선택이 첫 번째 있지만입니다 나 한테서 뛰어 내리는 것.

+0

답변 해 주셔서 감사합니다. 사실 루프의 선택은 : 작동하지만 난 그것을 당신의 방법을 시도 할 것이다 .. 지금은 집에 가서 다음주 월요일 '원인 : 덕분에 다시 D를 :) 매우 친절! –