【问题标题】:sap - abap 'sd_salesdocument_create'sap -abap 'sd_salesdocument_create'
【发布时间】:2016-12-22 09:12:43
【问题描述】:

我目前正在创建一个需要 f.m. 的自定义程序。 'sd_salesdocument_create'。

该程序的目标是通过 se38 大规模创建一个 seles 订单,从一个充满详细信息的 .csv 文件开始。

该程序似乎工作正常并且订单已创建,但是当我尝试写入销售单据编号(保存在 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

【问题讨论】:

  • 我已经通过使用正则表达式解决了一个类似的问题。它可能不适合您的用例(我没有阅读太多内容),但如果您的输出具有可预测的模式,您可能需要研究这种方法。
  • 什么意思跳到行和位置命令
  • 您的 salesdocument_ex 似乎为空(原因由 user1498318 命名),因此您的程序仅返回 RETURN 表的空白行。调试 FM 本身,而不是 WRITE 输出

标签: abap sap-erp


【解决方案1】:

我不确定您所说的“跳到行和位置命令”是什么意思。 SALESDOCUMENT_EX 是一个 vbeln 类型的字段,如果创建了 salsorder,它将包含文档编号。

但是您确定创建了订单吗?在您发布的代码中,未使用项目/计划行的 SALES_HEADER_INX 和 _inx 结构。即使这个结果是按顺序创建的(我认为不会),它也不会根据您的输入值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2022-09-25
    相关资源
    最近更新 更多