AP
一般AP里要分析行项目数据,交易数据,历史付款信息。
还有一些供应商主数据。
基础的抽取数据源就是下面几个:
- 0FI_AP_4: Vendors: Line Items with Delta Extrcation
- 0FI_AP_6: Vendor Sales Figures via Delta Extraction
- 0FI_AP_7: Vendor SGL Sales Figures using Delta Extraction
1. 数据源
1.1 0FI_AP_4
这个是从表BSIK(未清项)和BSAK(已清项)来的。
提取器:BWFID_GET_FIAP_ITEM
提取结构:DTFIAP_3 (从原先那个0FI_AP_3改来的)
在数据源里有个CI_BSIK结构用来添加附加字段。
这个CI_BSIK结构自动包括在主结构DTFIAP_3里。
这里有个0FI_AP_30数据源,也是一样的提取结构DTFIAP_3。
但是它不支持delta init:
提取结构一样,提取器不一样。
0FI_AP_4用的是时间戳方法。而不是delta queue。
字段 | 描述 | 原始表 | 原始表字段 |
BUKRS | Company code | BSIK, BSAK | BSIK-BUKRS |
FISCPER | Fiscal year/period | BSIK, BSAK | BSIK-GJAHR BSIK-MONAT |
BELNR | Accounting document number | BSIK, BSAK | BSIK-BELNR |
BUZEI | Account document posting line | BSIK, BSAK | BSIK-BUZEI |
UPOSZ | Subitem number | = 0001 | |
STATUSPS | Status of the FI item (O = open, C = cleared) | BSIK, BSAK | BSIK-BSTAT, BSIK-AUGDT |
LIFNR | Account number of the vendor or creditor | BSIK, BSAK | BSIK-LIFNR |
KKBER | Credit control area | BSIK, BSAK, T001 | BSIK-KKBER or T001-KKBER |
MABER | Dunning area | BSIK, BSAK | BSIK-MABER |
KOART | Account type | = K | |
UMSKZ | Special G/L indicator | BSIK, BSAK | BSIK-UMSKZ |
BLART | Document type | BSIK, BSAK | BSIK-BLART |
BSCHL | Posting key | BSIK, BSAK | BSIK-BSCHL |
FISCVAR | Fiscal year variant | T001 | T001-PERIV |
BLDAT | Document date in document | BSIK, BSAK | BSIK-BLDAT |
BUDAT | Posting date in the document | BSIK, BSAK | BSIK-BUDAT |
CPUDT | Day on which accounting document was created | BSIK, BSAK | BSIK-CPUDT |
AUGDT | Clearing date | BSIK, BSAK | BSIK-AUGDT |
MADAT | Last dunning date | BSIK, BSAK | BSIK-MADAT |
NETDT | Due date for net payment | BSIK, BSAK | 通过FM DETERMINE_DUE_DATE 计算 |
SK1DT | Due date according to cash discount terms 1 | BSIK, BSAK | 通过FM DETERMINE_DUE_DATE 计算 |
SK2DT | Due date according to cash discount terms 2 | BSIK, BSAK | 通过FM DETERMINE_DUE_DATE 计算 |
ZFBDT | Baseline date for due date calculation | BSIK, BSAK | BSIK-ZFBDT |
ZBD1T | Cash discount days 1 | BSIK, BSAK | BSIK-ZBD1T |
ZBD2T | Cash discount days 2 | BSIK, BSAK | BSIK-ZBD2T |
ZBD3T | Net payment terms period | BSIK, BSAK | BSIK-ZBD3T |
ZBD1P | Cash discount percentage 1 | BSIK, BSAK | BSIK-ZBD1P |
ZBD2P | Cash discount percentage 2 | BSIK, BSAK | BSIK-ZBD2P |
LAND1 | Country key | T001 | T001-LAND1 |
ZLSCH | Payment method | BSIK, BSAK | BSIK-ZLSCH |
ZTERM | Terms of payment key | BSIK, BSAK | BSIK-ZTERM |
ZLSPR | Payment block key | BSIK, BSAK | BSIK-ZLSPR |
RSTGR | Reason code for payments | BSIK, BSAK | BSIK-RSTGR |
MANSP | Dunning block | BSIK, BSAK | BSIK-MANSP |
MSCHL | Dunning key | BSIK, BSAK | BSIK-MSCHL |
MANST | Dunning level | BSIK, BSAK | BSIK-MANST |
LCURR | Currency key of the local currency | T001 | T001-WAERS |
DMSOL | Debit amount in local currency | BSIK, BSAK | BSIK-SHKZG, BSIK-DMBTR |
DMHAB | Credit amount in local currency | BSIK, BSAK | BSIK-SHKZG, BSIK-DMBTR |
DMSHB | Local currency amount (+/-) | BSIK, BSAK | BSIK-SHKZG, BSIK-DMBTR |
SKNTO | Cash discount amount in local currency | BSIK, BSAK | BSIK- SKNTO |
WAERS | Currency key | BSIK, BSAK | BSIK-WAERS |
WRSOL | Debit amount in foreign currency | BSIK, BSAK | BSIK-SHKZG, BSIK-WRBTR |
WRHAB | Credit amount in foreign currency | BSIK, BSAK | BSIK-SHKZG, BSIK-WRBTR |
WRSHB | Foreign currency amount (+/-) | BSIK, BSAK | BSIK-SHKZG, BSIK-WRBTR |
SKFBT | Amount eligible for cash discount in document currency | BSIK, BSAK | BSIK-SKFBT |
WSKTO | Cash discount amount in document currency | BSIK, BSAK | BSIK-WSKTO |
KTOPL | Chart of accounts | T001 | T001-KTOPL |
HKONT | General ledger account in G/L accounting. | BSIK, BSAK | BSIK-HKONT |
SAKNR | G/L account number | BSIK, BSAK | BSIK-SAKNR |
FILKD | Branch account number | BSIK, BSAK | BSIK-FILKD |
AUGBL | Clearing document number | BSIK, BSAK | BSIK-AUGBL |
XBLNR | Reference document number | BSIK, BSAK | BSIK-XBLNR |
REBZG | Invoice document number | BSIK, BSAK | BSIK-REBZG |
REBZJ | Fiscal year of the relevant invoice | BSIK, BSAK | BSIK-REBZJ |
REBZZ | Posting item in the relevant invoice | BSIK, BSAK | BSIK-REBZZ |
VBELN | Sales document number | ||
XREF1 | Reference key of the business partner | BSIK, BSAK | BSIK-XREF1 |
XREF2 | Reference key of the business partner | BSIK, BSAK | BSIK-XREF2 |
XREF3 | Reference key for the document items | BSIK, BSAK | BSIK-XREF3 |
SGTXT | Item text | BSIK, BSAK | BSIK-SGTXT |
XNEGP | Flag: Negative Posting | BSIK, BSAK | BSIK-XNEGP |
XARCH | Indicator: amount already in archive | BSIK, BSAK | BSIK-XARCH |
UMSKS | Transaction class Special Ledger | BSIK, BSAK | BSIK-UMSKS |
UPDMOD | BW delta process: Update mode | ||
ZUONR | Assignment number | ||
.INCLUDE DTFIAP-WF | |||
.INCLUDE CI_BSIK | Customer exits for extract structureDTFIAP_3 | 增强 |
1.2 0FI_AP_6
这个数据源从表LFC1 (供应商主数据交易数据)来的。
提取器:BWFI2D_GET_FIAP_TRFI
提取结构:DTFIAP_1 (从原先那个0FI_AP_1改来的)
字段 | 描述 | 原始表 | 原始表字段 |
LIFNR | Account number of the vendor | LFC1 | |
BUKRS | Company Code | LFC1 | |
FISCPER | Fiscal Year/Period | LFC1 | |
FISCVAR | Fiscal Year Variant | LFC1 | |
CURTYPE | Currency Type | LFC1 | |
CURRENCY | Currency key | LFC1 | |
UM01S | Total Debit Postings | LFC1 | |
UM01H | Total Credit Postings | LFC1 | |
UM01K | Accumulated Balance | LFC1 | |
UM01U | Sales of the Period | LFC1 | |
UPDMOD | BW delta process: update mode | LFC1 |
1.3 0FI_AP_7
这个从LFC3(供应商主数据 特殊总账交易数据)来的。
提取器:BWFI2D_GET_FIAP_TRFI_SPGL
提取结构:DTFIAR_7
字段 | 描述 | 原始表 | 原始表字段 |
LIFNR | Account number of the vendor | LFC3 | |
BUKRS | Company Code | LFC3 | |
FISCPER | Fiscal Year/Period | T001 | |
FISCVAR | Fiscal Year Variant | LFC3 | |
CURTYPE | Currency Type | LFC3 | |
CURRENCY | Currency key | LFC3 | |
UM01S | Total Debit Postings | LFC3 | |
UM01H | Total Credit Postings | LFC3 | |
UM01K | Accumulated Balance | LFC3 | |
UM01U | Sales of the Period | LFC3 |
1.4 行项目提取增量逻辑
采用时间戳增量。也就是说会有一个时间戳字段在行项目里,然后会有个时间戳的表,记录哪些时间段已经被读取过了。下次抽取增量数据集从时间戳开始直接发送到BW里。不用再放到ERP的Delta queue里。
行项目数据源基本都用AIE(after-image delta)后像增量。这个就不好直接到BW的Cube类型的ADSO里。因为Cube里是直接累加,没有前像的抵消,累加会重复。
所以这种得先到标准ADSO里,用它的change log表来找到更改的记录,再往后传到上层ADSO。
那么时间戳在哪里?实际上在GL的抬头表BKPF里,在字段BKPF-CPUDT里。
当上一次的delta DTP抽取完了,ECC里面就会记录两个时间戳字段在BWOM2_TIMEST里面。
AEDAT是你的DTP抽取的时间。TS_LOW和TS_HIGH是从1900.01.01开始的秒数。抽完了就会在这两个字段对应的区间范围打个X。表示上次抽过这里的数据了,下次抽得从HIGH的往后。
转换一下来看:
每次抽取都会在最新的一次区间内打钩。
所有的行项目都是这么个抽取方式:
对于行项目来讲,一天只能抽上一天的所有增量集。因为在字段BKPF-CPUDT里,只有date没有time。大概就这么设计的,安全区间就是1天,用AIE过来,只取一天内最后一次更改的后像。
那么如果月末进行的更改,持续到了下月初一,这数据岂不是要到初二才能拿过来。这明显不行啊。
这种情况下,SAP说可以去设置一个表BWOM_SETTINGS里面的参数。
BWFIOVERLA
这个参数默认是空的。设置成X就允许时间区间的重叠。注意这个是有限制的,在BWFITIMEBOR这个里面是020000,也就是说如果提取时间是在02:00:00之前开始,就是打了X,也还是会提取前一天的数据。但是这个设置我们没有做,所以暂时行项目里我们只能拿到前一天的数据。
*解释SETTING表参数
BWFILOWLIM 这个就是你初始化增量的DTP的起始时间。默认值设置为19910101。
BWFISAFETY 计算提取日期上限,初始化的就是从当前日期到提取日期当天。增量的话就是从上次增量到当前日期-BWFISAFETY。这个是天数,最小1天。就是你最少能抽一天的增量,最大就是上次抽取的时间到前一天。
DELTIMEST 这个就是日志保留时间 默认60天。(是针对三个log表BWFI_AEDAT, BWFI_AEDA2 , BWFI_AEDA3)时间戳表BWOM2_TIMEST里会保留60天的抽取记录。60天前的会被删掉。那么对应的,日志表中的BWFI_AEDAT/2/3的更改记录也会被删掉。
BWFITIMBOR 默认为2点,格式为HHMMSS。意思是如果delta抽取时间在2点之后,那数据就是前一天的。如果是2点之前,那就是会取昨天之前一天的,又倒退一天。这也是个安全区间吧。比如你9月10号两点前跑DTP,那会去拿9月8号那天的。而两点后去跑,会去拿9月9号的。
BWFIOVERLA 这个是针对于年结或者月结的大批量数据处理,假设12月31号晚上处理的数据到1号的提取时间还没确认。还没存到数据库里。
默认是空,就是抽取的是上次的抽取时间戳到本次抽取时间-1天内的所有增量。
那么,填X 意思是忽略BWFISAFETY里面的值,delta的时间会是从上一次抽取的时间戳到这次抽取的时间。
BWFINEXT: 打了X好像是流抽取。默认是空。这个没整过。如果这里打了X,那这几个参数就被忽略了BWFIOVERLA , BWFISAFETY , BWFITIMBOR。具体在Note 991429里有。
*解释结束
如果GL没有进行增量抽取,那么AR和AP也就没有增量数据。所以处理链里先搞GL。
对于在上次增量抽取过后做更改的行项目数据,没有办法记录更改的时间。所以所有行项目只要做了更改都会被记录到系统里,更改了的行项目和凭证的key,和时间都会放到表BWFI_AEDAT里。
就相当于是个change日志表:
根据这个log表,提取器能找到增量数据集。
只要是你手动更改了行项目凭证的,或者是清行项目,或者是更改行项目的催款数据的。都会被记到这个表里。
这些都是由一些系统自带的更新程序搞起来的。细节的咱就不去追了。
只要知道在表TPS31里面有FM BWFIP_WRITE_AEDAT_POINTER就行了。SM30可以添加这条。它这FM是说写BKPF的change pointer。
在BW的增量初始化的时候就会自动在表TPS31里加这条。加了之后就是告诉系统接下来要记录增量了。我以后要弄增量DTP了。AEDAT这里写的是BSEG和BKPF的增量,其他的可以自己去看。
基本上搞完增量初始化,根据setting表里的增量区间,比如是1就是1天,那一天后可以开始增量抽取。
当然对于增量初始化的,也还是应该先搞GL的,再弄AR和AP的。要不然数据不一致了。有些时候增量初始化需要对财年和公司代码做限制的。那么应收和应付也都是跟着总账来,总账先搞哪些过滤参数,应收应付也是跟着用哪些过滤参数。
对行项目的增强可以在customer include里进行:
那么有两种情况,如果你在CI里面加的字段,就在它本身提取结构的表里,那就不用写增强逻辑了,因为提取器里就写了从那些表来的move corresponding 就能直接取出来。
如果是从其他表来的,就得用BW的BADI了,现在就是那个RSU5啥的。搞完了去RSA6把隐藏的字段给放出来。
1.5 交易数据提取增量逻辑
过程一样。就是增量日志表不一样:BWFI_AEDA2
时间戳表是一样的:BWOM2_TIMEST.
Delta init的DTP执行时候会生成这条在TPS31的记录: