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的记录:




















