2016-12-22 5 views
0

현재 fm을 호출하는 사용자 정의 프로그램을 만드는 중입니다. 'sd_salesdocument_create'.sap - abap 'sd_salesdocument_create'

프로그램 목표는 세부 사항이 채워진 .csv 파일에서 시작하여 se38을 통해 대량으로 셀 항목을 만드는 것입니다.

프로그램이 제대로 작동하고 주문이 만들어졌지만 판매 문서 번호 (salesdocument_ex 필드에 있음)를 쓸 때 프로그램에서 27 개의 빈 줄과 메시지 문자열을 인쇄합니다.

이미 빈 줄을 설정하여 사용했지만 아무 일도 없었습니다. 동료 중 한 명은 줄 및 위치 건너 뛰기 명령을 사용하여 문제를 해결했지만 그 방법으로 출력을 강요하지 않으면 다른 방법이 있는지 알고 싶습니다.

나는 이미 공식 수액 웹 사이트를 찾아 보았으므로이 문제를 해결하는 방법에 대한 단서를 찾지 못했기 때문에 나는 당신에게 묻습니다.

나는 아래의 코드를 복사하고, 사전에 감사합니다 :

FORM BAPI . 

    data: COUNTER1 TYPE N VALUE 0, 
     COUNTER2 TYPE N VALUE 0, 
     NUM_CLI like KNA1-KUNNR. 

    SORT TESTATA BY N_ORDINE. 

    LOOP AT TESTATA. 
    AT NEW N_ORDINE. 
     READ TABLE TESTATA INDEX 1. 

     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 
     EXPORTING 
      INPUT = TESTATA-N_CLIENTE 
     IMPORTING 
      OUTPUT = TESTATA-N_CLIENTE. 

     SELECT single KUNNR INTO NUM_CLI FROM KNA1 
    WHERE KUNNR = TESTATA-N_CLIENTE. 

     IF SY-SUBRC = 0. 

     COUNTER1 = COUNTER1 + 1. 

     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 
      EXPORTING 
      INPUT = TESTATA-N_DESTINATARIO 
      IMPORTING 
      OUTPUT = TESTATA-N_DESTINATARIO. 

     SALES_HEADER_IN-DOC_TYPE  = TESTATA-TIPO_DOC. 
     SALES_HEADER_IN-SALES_ORG = 'ZCOM'. 
     SALES_HEADER_IN-DISTR_CHAN = '01'. 
     SALES_HEADER_IN-DIVISION  = '01'. 
     SALES_HEADER_IN-REQ_DATE_H = testata-data_comsegna. 
     SALES_HEADER_IN-PURCH_DATE = testata-data_or_acq_cli. 

     APPEND SALES_HEADER_IN. 

*  COUNTER = 0. 
     SORT CORPO BY N_ORDINE. 
     LOOP AT CORPO WHERE N_ORDINE = TESTATA-N_ORDINE. 

      COUNTER = COUNTER + 10. 

      SELECT SINGLE MATNR INTO MAT_COD FROM MARA WHERE EAN11 = 
     CORPO-EAN_MAT. 

      SALES_ITEMS_IN-ITM_NUMBER = COUNTER. 
      SALES_ITEMS_IN-MATERIAL = MAT_COD. 
      SALES_ITEMS_IN-PLANT = 'ZDIV'. 
      SALES_ITEMS_IN-STORE_LOC = 'ZMAG'. 

      APPEND SALES_ITEMS_IN. 

      SALES_PARTNERS-PARTN_ROLE = 'AG'. 
      SALES_PARTNERS-PARTN_NUMB = TESTATA-N_CLIENTE. 
      APPEND SALES_PARTNERS. 

      SALES_PARTNERS-PARTN_ROLE = 'WE'. 
      SALES_PARTNERS-PARTN_NUMB = TESTATA-N_DESTINATARIO. 
      APPEND SALES_PARTNERS. 

      SALES_SCHEDULES_IN-ITM_NUMBER = COUNTER. 
      SALES_SCHEDULES_IN-REQ_QTY = CORPO-QTA. 
      APPEND SALES_SCHEDULES_IN. 

      REPLACE ALL OCCURRENCES OF ',' IN CORPO-PREZZO WITH '.'. 
      SALES_CONDITIONS_IN-ITM_NUMBER = COUNTER. 
      SALES_CONDITIONS_IN-COND_TYPE = 'PR00'. 
      SALES_CONDITIONS_IN-COND_VALUE = CORPO-PREZZO. 
      SALES_CONDITIONS_IN-CURRENCY = TESTATA-VALUTA. 
      APPEND SALES_CONDITIONS_IN. 

     ENDLOOP. 

     CLEAR COUNTER. 

     PERFORM CALL_FUNCTION. 

     COMMIT WORK AND WAIT. 

     WRITE:/ 'COUNTER TESTATA', COUNTER1. 
     WRITE:/ 'DOCUMENTO', SALESDOCUMENT_EX, 'SCRITTO'. 

     ENDIF. 

    ENDAT. 

    CLEAR SALES_HEADER_IN. 

    CLEAR SALES_PARTNERS. 

    CLEAR SALES_ITEMS_IN. 

    CLEAR SALES_SCHEDULES_IN. 

    CLEAR SALES_CONDITIONS_IN. 

    CLEAR NUM_CLI. 

    LOOP AT RETURN. 
     WRITE:/ RETURN-MESSAGE. 
    ENDLOOP. 

    ENDLOOP. 

    CLEAR COUNTER1. 

ENDFORM.     " BAPI 

this is the bapi form in which is nested the call function: 



FORM CALL_FUNCTION . 



CALL FUNCTION 'SD_SALESDOCUMENT_CREATE' 



    EXPORTING 
* SALESDOCUMENT     = SALESDOCUMENT_EX 
       SALES_HEADER_IN    = SALES_HEADER_IN 
* 
** SALES_HEADER_INX    = 
** SENDER      = 
** BINARY_RELATIONSHIPTYPE  = ' ' 
      INT_NUMBER_ASSIGNMENT   = 'X' 
** BEHAVE_WHEN_ERROR    = ' ' 
** LOGIC_SWITCH     = ' ' 
     BUSINESS_OBJECT    = 'BUS2032' 
     TESTRUN      = ' ' 

* CONVERT_PARVW_AUART   = ' ' 
* STATUS_BUFFER_REFRESH   = 'X' 

      IMPORTING 
      SALESDOCUMENT_EX  = SALESDOCUMENT_EX 


* SALES_HEADER_OUT    = 
* SALES_HEADER_STATUS   = 

      TABLES 
      RETURN      = RETURN 
      SALES_ITEMS_IN    = SALES_ITEMS_IN 
* SALES_ITEMS_INX    = 
     SALES_PARTNERS    = SALES_PARTNERS 
     SALES_SCHEDULES_IN   = SALES_SCHEDULES_IN 
* SALES_SCHEDULES_INX   = 
     SALES_CONDITIONS_IN   = SALES_CONDITIONS_IN 
* SALES_CONDITIONS_INX   = 
* SALES_CFGS_REF    = 
* SALES_CFGS_INST    = 
* SALES_CFGS_PART_OF   = 
* SALES_CFGS_VALUE    = 
* SALES_CFGS_BLOB    = 
* SALES_CFGS_VK     = 
* SALES_CFGS_REFINST   = 
* SALES_CCARD     = 
* SALES_TEXT     = testi e liìni 
* SALES_KEYS     = 
* SALES_CONTRACT_IN    = 
* SALES_CONTRACT_INX   = 
* EXTENSIONIN     = 
* PARTNERADDRESSES    = 
* SALES_SCHED_CONF_IN   = 
* ITEMS_EX      = 
* SCHEDULE_EX     = 
* BUSINESS_EX     = 
* INCOMPLETE_LOG    = 
* EXTENSIONEX     = 
* CONDITIONS_EX     = 
* PARTNERS_EX     = 
* TEXTHEADERS_EX    = 
* TEXTLINES_EX     = 
* BATCH_CHARC     = 
* CAMPAIGN_ASGN     = 
* CONDITIONS_KONV_EX   = 
    . 

ENDFORM.     " CALL_FUNCTION 
+0

정규식을 사용하여 비슷한 문제를 해결했습니다. 유스 케이스에서는 적절하지 않을 수도 있지만 (결과를 많이 읽지는 ​​못했지만) 출력에 예측 가능한 패턴이있는 경우 해당 방법을 조사하고 싶을 수 있습니다. – gkubed

+0

무엇을 의미합니까 * 줄 건너 뛰고 위치 명령 *? – Suncatcher

답변

0

난 당신이 "라인 및 위치 명령로 이동"무슨 뜻인지 모르겠어요. SALESDOCUMENT_EX는 vbeln 유형의 필드이며 salsorder가 작성된 경우. 서 x 호를 포함합니다.

하지만 주문이 생성 되었습니까? SALES_HEADER_INX 및 item/schedule 행의 _inx 구조를 게시 한 코드는 사용되지 않습니다. 이 결과 집합이 생성되는 경우에도 (나는 그렇게 생각하지 않습니다.) 입력 값에 따라 결정되지는 않습니다.