【发布时间】: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 输出