Sap 根据付款日期来抽取供应商会计凭证的程序

现在需要写一个根据付款日期来抽取供应商会计凭证的程序。

付款日期是在供应商明细查看中看到(付款日期)得项目。
在BSEG里面,是计划日期这个项目。但是bseg是簇表没有办法结合BS IK来抽取。
付款日期项目是通过BSIK里面的支付基准日和日数相加所计算出来的。没有直接付款日期这一项。

现在想要,在Select- options 选择界面,指定一个支付日期。比如说2023年8月1日付款。 (前提,我指定了供应商代码和公司代码还有付款方法)。
在抽取数据BSIK中要通过 基准日加上日数=我输入界面的日期的供应商凭证被抽出。

这个代码要怎么写。

比如说:
select (支付基准日+日数) 这个代码要怎么来定义。
from BSIK (因为没有付款日期这个项目)没有办法直接从BSIK抽出。
INTO
Where 这个代码=我输入的日期的项目被抽出。


REPORT Z_EXTRACT_VENDOR_DOCUMENTS.  
  
SELECT-OPTIONS:  
  payment_date FOR bsik-zahlungsdatum,  
  vendor_code FOR bsik-lieferant,  
  company_code FOR bsik-firmennr.  
  
DATA:  
  bseg_table TYPE TABLE OF bseg,  
  bsik_table TYPE TABLE OF bsik,  
  extracted_table TYPE TABLE OF bseg.  
  
SELECT bsik~belnr bsik~buzei bsik~lieferant bsik~firmennr bsik~zahlungsdatum  
  INTO TABLE bsik_table  
  FROM bsik  
  WHERE bsik~zahlungsdatum = payment_date  
    AND bsik~lieferant = vendor_code  
    AND bsik~firmennr = company_code.  
  
LOOP AT bsik_table INTO DATA(bsik_line).  
  DATA: payment_date_calculated TYPE bseg-zahlungsdatum.  
  payment_date_calculated = bsik_line~buzei + bsik_line~zahlungsziel.  
 
  SELECT bseg

根据您提供的信息,以下是一个基本的代码示例,用于根据指定的支付日期从供应商会计凭证中抽取数据:

SELECT *
FROM BSIK
WHERE 供应商代码 = '指定的供应商代码'
  AND 公司代码 = '指定的公司代码'
  AND 付款方法 = '指定的付款方法'
  AND (支付基准日 + 日数) = '指定的支付日期';

请替换 '指定的供应商代码''指定的公司代码''指定的付款方法''指定的支付日期' 为您实际想要筛选的值。

在这个查询中,我们使用了 WHERE 子句来指定筛选条件。其中,供应商代码公司代码付款方法 是直接与您指定的值进行比较的条件。而 支付基准日 + 日数 是一个计算字段,通过将 支付基准日日数 相加得到的结果与您指定的 支付日期 进行比较。

请注意,上述代码只是一个基本示例,您可能需要根据您的数据库结构和数据模型进行适当的调整。此外,还需要确保在查询之前设置了正确的日期格式和输入参数的处理方式。

引用 皆我百晓生 小程序回复内容作答:
根据你的描述,你希望根据付款日期抽取供应商会计凭证的程序。根据你提供的信息,如果无法直接从BSIK表中获取付款日期,你可以通过计算基准日与日数的方式来获取付款日期。下面是一个示例代码,供你参考:

DATA: lv_payment_date TYPE sy-datum.

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
PARAMETERS: p_payment_date TYPE sy-datum.
SELECTION-SCREEN END OF BLOCK block1.

SELECT *
  FROM bsik
  INTO TABLE @data(lt_bsik)
  WHERE (payment_base_date + days) = p_payment_date.

请注意,在这段示例代码中,你需要根据实际情况调整字段名和表名。此示例假设BSIK表有名为payment_base_date和days的字段,分别表示支付基准日和日数。根据用户在选择界面上指定的支付日期p_payment_date,程序会查询满足条件的供应商会计凭证。

希望这能帮到你!如有其他问题,请随时提问。

根据您提供的信息,以下是一个示例代码,用于根据指定的付款日期抽取供应商会计凭证:

SELECT *
FROM BSIK
WHERE 供应商代码 = '指定的供应商代码'
  AND 公司代码 = '指定的公司代码'
  AND 付款方法 = '指定的付款方法'
  AND (支付基准日+日数) = '指定的付款日期'

请注意,上述代码中的'指定的供应商代码'、'指定的公司代码'、'指定的付款方法'和'指定的付款日期'都需要替换为您实际想要筛选的值。

由于您提到BSEG是簇表,无法直接结合BS IK来抽取数据,因此上述代码仅基于BSIK表进行筛选。如果您需要结合其他表的数据来进行抽取,请提供更多信息,以便我能够提供更准确的代码示例。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您的需求,您需要编写一个程序来从BSIK表中根据付款日期抽取供应商会计凭证。以下是一个示例代码,用于实现该功能:

DECLARE @PaymentDate DATE = '2023-08-01'; -- 替换为您输入的日期
DECLARE @VendorCode VARCHAR(50) = 'VENDOR_CODE'; -- 替换为您指定的供应商代码
DECLARE @CompanyCode VARCHAR(50) = 'COMPANY_CODE'; -- 替换为您指定的公司代码
DECLARE @PaymentMethod VARCHAR(50) = 'PAYMENT_METHOD'; -- 替换为您指定的付款方法

SELECT *
FROM BSIK
WHERE (支付基准日 + 日数) = @PaymentDate
AND VendorCode = @VendorCode
AND CompanyCode = @CompanyCode
AND PaymentMethod = @PaymentMethod;

请注意,上述代码中的"支付基准日"和"日数"是假设存在于BSIK表中的列名,您需要根据实际情况进行相应的调整。此外,您还需要将代码中的占位符(例如'VENDOR_CODE')替换为实际的供应商代码、公司代码和付款方法。

这段代码首先声明了三个变量,分别表示输入的付款日期、供应商代码和公司代码。然后,通过在WHERE子句中使用这些变量来筛选符合条件的记录,并将其作为结果返回。

希望这可以帮助到您!


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

结合GPT给出回答如下请题主参考
根据付款日期来抽取供应商会计凭证的程序需要以下步骤:

  1. 确定需要抽取的付款日期范围,并在SAP系统中使用T-code FBL1N或者FBL3N进入供应商明细查询页面。

  2. 在供应商明细查询页面中,按照付款日期进行筛选,只显示符合该日期范围的供应商明细。

  3. 将筛选出来的供应商明细通过T-code FBL3N或者FBL1N导出为Excel文件。

  4. 在Excel中,筛选出付款日期符合要求的会计凭证,并进行数据整理和汇总处理。

  5. 最后,将处理后的会计凭证数据导入到SAP系统中,生成相应的供应商会计凭证。

需要注意的是,在数据整理和汇总处理过程中,需要保证数据的准确性和完整性,以免导致错误或漏洞。

示例

SELECT
    BSIK.*,
    (BSIK."支付基准日" + BSIK."日数") AS "计算后的付款日期"
FROM
    BSIK
WHERE
    BSIK."公司代码" = 'YOUR_COMPANY_CODE' -- 请替换为你的公司代码
    AND BSIK."供应商代码" = 'YOUR_VENDOR_CODE' -- 请替换为你的供应商代码
    AND BSIK."支付基准日" + BSIK."日数" = '2023-08-01'; -- 请替换为你想要的付款日期


可以参考下


sap系统怎么查询凭证的简单介绍 - 变形虫 sap系统操作流程1、SAP系统操作有以下技巧:“/N”:快速返回主界面。例如,当用户在录入凭证时发现凭证错了,需要退出后重新录入。2、项目准备--合同签订、成立项目组、概念... http://www.bxcqd.com/news/414152.html

该回答引用ChatGPT,希望对题主有所帮助,如有帮助,还望采纳。


可以通过以下代码来实现:

DATA: lw_bsik TYPE bsik.

SELECT SINGLE * FROM bsik INTO lw_bsik 
  WHERE bukrs = '公司代码'
  AND lifnr = '供应商代码'
  AND zlsch = '付款方法'
  AND budat + lw_bsik/zhldg = '20230801'.

其中,budat是支付基准日,zhldg是日数,通过加法运算得到付款日期。注意,zhldg字段在BSIK表中为数值类型,需要转换为日期类型。

另外,可以在Select-options中定义一个日期类型的变量,例如lv_pay_date,然后在WHERE条件中使用该变量,实现根据指定日期来抽取供应商会计凭证的功能。

你看下这样子ok不OK啊:

SELECT SUM(CHAR_TO_DATE('1900-01-01', 'YYYY-MM-DD', '基准日', '日数')) AS payment_date
  INTO @DATA(mt_date)
  FROM BSIK
  WHERE 供应商代码 = '你指定的供应商代码'
    AND 公司代码 = '你指定的公司代码'
    AND 付款方法 = '你指定的付款方法'
    AND 日数 >= 0
    AND 基准日 <= @mt_date;  "这里假设你使用的是MT日期作为基准日
  "计算匹配的日期
  IF sy-subrc = 0.
    "如果查询成功
    DATA: ls_doc_dates TYPE lkdoc-datum.
    ls_doc_dates-datenr = sy-index.
    ls_doc_dates-belegdatum = @mt_date.
    APPEND ls_doc_dates TO @lt_doc_dates.
  ENDIF.
  "接下来根据日期筛选凭证

参考gpt
根据您的描述,您想要编写一个程序来根据指定的付款日期从供应商会计凭证中抽取数据。根据您提供的信息,我可以给出以下示例代码来实现这个功能:

REPORT Z_EXTRACT_VENDOR_DOCUMENTS.

TABLES: BSIK. "供应商会计凭证表

DATA: lv_payment_date TYPE BSIK-ZFBDT, "付款日期
      lt_documents   TYPE TABLE OF BSIK. "供应商会计凭证数据表

PARAMETERS: p_payment_date TYPE BSIK-ZFBDT. "选择支付日期的输入参数

START-OF-SELECTION.

  lv_payment_date = p_payment_date.

  SELECT *
    FROM BSIK
    INTO TABLE lt_documents
    WHERE (支付基准日 + 日数) = lv_payment_date. "根据支付基准日加上日数来匹配指定的付款日期

  IF lt_documents IS NOT INITIAL.
    "处理抽取到的供应商会计凭证数据
    LOOP AT lt_documents INTO DATA(ls_document).
      "在这里进行您想要的处理操作,比如输出到屏幕或者其他处理逻辑
      WRITE: / ls_document-字段1, ls_document-字段2.
    ENDLOOP.
  ELSE.
    "没有找到符合条件的供应商会计凭证数据
    WRITE: 'No documents found for the specified payment date.'.
  ENDIF.

请注意,上述代码只是一个示例,您需要根据实际情况进行适当的调整和修改。具体的字段名和逻辑可能需要根据您的数据模型和需求进行修改。

试试

REPORT ZPAYMENT_DATE.

TABLES: BSIK.

DATA: ITAB LIKE STANDARD TABLE OF BSIK WITH HEADER LINE,
      WTAB LIKE STANDARD TABLE OF BSIK WITH HEADER LINE.

SELECT-OPTIONS: PAY_DATE FOR SY-DATUM.

START-OF-SELECTION.

  SELECT * FROM BSIK INTO TABLE ITAB
    WHERE LIFNR = 'XXXX' AND
          BUKRS = 'YYYY' AND
          ZLSCH = 'ZZZZ'.

  LOOP AT ITAB.
    CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
      EXPORTING
        DATE_IN        = ITAB-ZFBDT
        DAYS           = ITAB-ZBD1T
        MONTHS         = 0
        SIGNUM         = '+'
        YEARS          = 0
      IMPORTING
        DATE_OUT       = ITAB-ZFBDT.
    IF ITAB-ZFBDT = PAY_DATE.
      MOVE-CORRESPONDING ITAB TO WTAB.
      APPEND WTAB.
    ENDIF.
  ENDLOOP.

  LOOP AT WTAB.
    WRITE: / WTAB-BELNR, WTAB-BUKRS, WTAB-LIFNR, WTAB-ZFBDT, WTAB-DMBTR.
  ENDLOOP.


在Select-options选择界面指定一个支付日期,然后根据基准日加上日数来抽取数据

在where条件里面加日期限制

通过日期条件判断呀