2016-12-22 15 views
0

私は現在、fmを呼び出すカスタムプログラムの作成に取り組んでいます。 'sd_salesdocument_create'。sap - abap 'sd_salesdocument_create'

プログラムの目的は、細部がいっぱいになった.csvファイルからse38を介して大規模なセールスオーダーを作成することです。

プログラムが正常に動作しているように見えますが、注文書が作成されますが、salesdocument_exフィールドに保持されている販売伝票番号を書き込もうとすると、27行の空白行とメッセージ文字列が印刷されます。

すでに空白を設定してみましたが、何も起こりませんでした。 私の同僚の一人が、行と位置のコマンドにスキップすることで問題を解決しましたが、出力を強制することなく、別の方法があるかどうかを知りたいと思います。

私はすでに公式のSAPウェブサイトを調べようとしていたので、この問題を解決する方法を見つけることができなかったので、私はあなたに尋ねています。私はあなたが「行と位置指令にスキップ」によって何を意味するかわからないんだけど

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

* skip to lineとpositionコマンド*はどういう意味ですか? – Suncatcher

答えて

0

は、私は以下のコードをコピーしています、事前にあなたに感謝します。 SALESDOCUMENT_EXはvbeln型のフィールドであり、salsorderが作成された場合は文書番号を含みます。

注文は作成されていますか?あなたが投稿したコードでは、item/schedule行のSALES_HEADER_INXおよび_inx構造体は使用されません。たとえこの注文が作成されたとしても(私はそう思わないでしょうが)、あなたの入力値に従わないでしょう。

関連する問題