获取SAP表字段说明

2005年02月05日 10:19:00

*&---------------------------------------------------------------------
*& Report ZGETTABLEFIELD *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

REPORT ZGETTABLEFIELD .
* Data declaration
TYPE-POOLS: SLIS.

* Global structure of list
TYPES: BEGIN OF UD_STRUCT,
POSITION LIKE DD03L-POSITION,
TABNAME LIKE DD03L-TABNAME,
FIELDNAME LIKE DD03L-FIELDNAME,
DATATYPE LIKE DD03L-DATATYPE,
DDLENG LIKE DD03L-LENG,
DECIMALS LIKE DD03L-DECIMALS,
DDTEXT LIKE DD03T-DDTEXT,
EDDTEXT LIKE DD03T-DDTEXT,
DDDTEXT LIKE DD03T-DDTEXT,
END OF UD_STRUCT.

TABLES: DD03L.

DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: GT_OUTTAB TYPE UD_STRUCT OCCURS 0 WITH HEADER LINE.
DATA: G_REPID LIKE SY-REPID.
data : begin of exclude occurs 5,
fcode like sy-ucomm,
end of exclude.
DATA p_ucomm LIKE sy-ucomm.

PARAMETER P_TNAME LIKE DD02l-TABNAME DEFAULT 'VBAK'.

*======================================================================*
* Initialization fieldcatalog
*======================================================================*
INITIALIZATION.
G_REPID = SY-REPID.
PERFORM FIELDCAT_INIT USING GT_FIELDCAT[].


*======================================================================*
* Ereignis : AT SELECTION-SCREEN OUTPUT (PBO-Zeitpunkt) *
*======================================================================*
at selection-screen output.
data exclude like rsexfcode occurs 0 with header line.
if sy-dynnr = 1000.
call function 'RS_SET_SELSCREEN_STATUS'
EXPORTING
p_status = 'ZGETTBFD'
TABLES
p_exclude = exclude
EXCEPTIONS
others = 1.
endif.
p_ucomm = SPACE.

*======================================================================*
* Ereignis : AT SELECTION-SCREEN (PAI-Zeitpunkt) *
* letztes PAI-Ereignis *
*======================================================================*
at selection-screen.
p_ucomm = sy-ucomm.
CASE p_ucomm.
WHEN 'STBL'.
SET PARAMETER ID 'DTB' FIELD P_TNAME.
* PERFORM AUTHORITY_CHECK USING 'SE11' .
CALL TRANSACTION 'SE11' AND SKIP FIRST SCREEN.
ENDCASE.

*======================================================================*
* Data selection
*======================================================================*
START-OF-SELECTION.
PERFORM SELECT_DATA TABLES GT_OUTTAB.
perform function_exclude tables exclude.

*======================================================================*
* Display list
*======================================================================*
END-OF-SELECTION.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IT_FIELDCAT = GT_FIELDCAT[]
TABLES
T_OUTTAB = GT_OUTTAB.
*-----------------------------------------------------------------------
* Forms
*-----------------------------------------------------------------------

* Initialization fieldcatalog

FORM FIELDCAT_INIT
USING RT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DATA: POS TYPE I VALUE 1.

clear ls_fieldcat.
LS_FIELDCAT-COL_POS = POS.
LS_FIELDCAT-FIELDNAME = 'POSITION'.
ls_fieldcat-ref_fieldname = 'POSITION'.
LS_FIELDCAT-REF_TABNAME = 'DD03L'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS = POS.
LS_FIELDCAT-FIELDNAME = 'TABNAME'.
ls_fieldcat-ref_fieldname = 'TABNAME'.
LS_FIELDCAT-REF_TABNAME = 'DD03T'.
* LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS = POS.
LS_FIELDCAT-FIELDNAME = 'FIELDNAME'.
ls_fieldcat-ref_fieldname = 'FIELDNAME'.
LS_FIELDCAT-REF_TABNAME = 'DD03T'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS = POS.
LS_FIELDCAT-FIELDNAME = 'DATATYPE'.
ls_fieldcat-ref_fieldname = 'DATATYPE'.
LS_FIELDCAT-REF_TABNAME = 'DD03T'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS = POS.
LS_FIELDCAT-FIELDNAME = 'DDLENG'.
ls_fieldcat-ref_fieldname = 'LENG'.
LS_FIELDCAT-REF_TABNAME = 'DD03L'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS = POS.
LS_FIELDCAT-FIELDNAME = 'DECIMALS'.
ls_fieldcat-ref_fieldname = 'DECIMALS'.
LS_FIELDCAT-REF_TABNAME = 'DD03L'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS = POS.
LS_FIELDCAT-FIELDNAME = 'DDTEXT'.
ls_fieldcat-ref_fieldname = 'DDTEXT'.
LS_FIELDCAT-REF_TABNAME = 'DD03T'.
* LS_FIELDCAT-NO_OUT = 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
ENDFORM. "fieldcat_init


* Data selection
FORM SELECT_DATA
TABLES RT_OUTTAB LIKE GT_OUTTAB[].
SELECT DD03L~POSITION DD03L~TABNAME
DD03L~FIELDNAME DD03L~DATATYPE
DD03L~LENG DD03L~DECIMALS
DD03T~DDTEXT
DD04T~DDTEXT DD01T~DDTEXT
INTO (RT_OUTTAB-POSITION, RT_OUTTAB-TABNAME,
RT_OUTTAB-FIELDNAME, RT_OUTTAB-DATATYPE,
RT_OUTTAB-DDLENG, RT_OUTTAB-DECIMALS,
RT_OUTTAB-DDTEXT,
RT_OUTTAB-EDDTEXT,RT_OUTTAB-DDDTEXT)
FROM DD03L LEFT JOIN DD03T
ON DD03L~TABNAME = DD03T~TABNAME
AND DD03L~FIELDNAME = DD03T~FIELDNAME
AND DD03T~DDLANGUAGE = SY-LANGU
LEFT JOIN DD04T
ON DD03L~ROLLNAME = DD04T~ROLLNAME
AND DD04T~DDLANGUAGE = SY-LANGU
LEFT JOIN DD01T
ON DD03L~DOMNAME = DD01T~DOMNAME
AND DD01T~DDLANGUAGE = SY-LANGU
WHERE DD03L~TABNAME = P_TNAME
ORDER BY DD03L~POSITION.
IF RT_OUTTAB-DDTEXT = SPACE.
IF RT_OUTTAB-EDDTEXT = SPACE.
RT_OUTTAB-DDTEXT = RT_OUTTAB-DDDTEXT.
ELSE.
RT_OUTTAB-DDTEXT = RT_OUTTAB-EDDTEXT.
ENDIF.
ENDIF.
APPEND RT_OUTTAB.
ENDSELECT.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FUNCTION_EXCLUDE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --*----------------------------------------------------------------------*
form function_exclude tables p_exclude structure exclude.
* data : rcode like sy-subrc.
* clear p_exclude.
* refresh p_exclude.
* exclude-fcode = 'EERW'.
* append exclude.
* exclude-fcode = 'EXIT'.
* append exclude.
endform. " FUNCTION_EXCLUDE



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=281435


<think>我们正在处理用户关于SAP系统中BUDAT字段的询问。根据提供的引用,我们可以总结以下信息:引用[1]中提到了一个SQL语句示例,其中使用了`MSEG~BUDAT_MKPF`字段。该字段在构造`AWKEY`(凭证键)时被使用,通过`CAST`函数转换为字符类型,并用`SUBSTRING`截取前4位(可能是年份部分)。同时,该字段出现在多个表(MSEG,LIPS,VBAK)的连接查询中,并且作为查询条件(`MSEG~CPUDT_MKPFIN@S_BUDAT`,注意这里条件字段是CPUDT_MKPF,但BUDAT_MKPF也出现在选择字段中)。引用[2]中提到在MB51事务码中增加字段时,使用了`MSEG-BUDAT_MKPF`,并指出它是物料凭证的过账日期。结合SAP知识:-BUDAT是过账日期(PostingDate)的缩写。在SAP中,过账日期是指业务交易在财务上过账的日期,通常也是凭证的记账日期。-在物料凭证表(如MSEG)中,BUDAT_MKPF字段实际上来自物料凭证抬头表(MKPF)的BUDAT字段。因此,在MSEG表中,通常通过内联MKPF表来获取抬头信息,但有些情况下,MSEG表中可能已经包含了抬头表的部分字段(比如在S4/HANA中,由于CDS视图的优化,可能将抬头表字段冗余到行项目表中)。但传统上,BUDAT字段在MKPF表中。因此,我们可以回答用户:在SAP中,BUDAT字段代表过账日期(PostingDate)。它是业务交易在财务上过账的日期,通常也是凭证的记账日期。在物料凭证相关表(如MSEG)中,通常会有一个字段BUDAT_MKPF,它实际上来自物料凭证抬头表(MKPF)的BUDAT字段。在查询物料凭证行项目时,如果需要过账日期,我们需要关联MKPF表(通过物料凭证号MJNR和年度字段)或者在某些情况下(如S4/HANA)可以直接使用MSEG表中的BUDAT_MKPF字段(如果存在)。具体到用法:1.在ABAPSQL中,我们可以通过关联MKPF表来获取BUDAT字段,或者如果MSEG表中有BUDAT_MKPF字段,则可以直接使用。2.BUDAT字段通常用于财务记账的日期,因此在报表中如果需要按记账日期筛选或汇总,就会使用此字段。例如,在引用[1]的SQL语句中,直接使用了`MSEG~BUDAT_MKPF`,说明在查询中该字段可以直接从MSEG表中获取(可能是S4/HANA系统)。然后将其转换为字符型并截取年份部分,用于构造一个20位的凭证键(AWKEY)。在引用[2]中,在MB51事务码中增加字段时,使用了`MSEG-BUDAT_MKPF`作为物料凭证的过账日期。因此,用户在使用时,需要根据其系统版本(传统ECC还是S4/HANA)以及表结构来确定是直接使用MSEG表中的BUDAT_MKPF字段,还是通过关联MKPF表来获取BUDAT字段。注意:在传统ECC系统中,MSEG表并不包含BUDAT字段,所以必须关联MKPF表。而在S4/HANA中,MSEG表(实际上是MATDOC表)可能已经包含了抬头信息。为了验证,用户可以通过SE11或SE16N查看表结构,确认MSEG表是否有BUDAT_MKPF字段。相关问题:1.SAP中BUDAT字段与CPUDT字段有什么区别?2.在SAPS4/HANA中,物料凭证表(MATDOC)与MSEG表是什么关系?3.如何通过ABAPSQL关联MKPF表来获取物料凭证的过账日期?4.在SAP报表中,如何按过账日期(BUDAT)进行筛选?根据上述分析,我们给出回答:</think>### SAP BUDAT字段含义及用法 在SAP系统中,**BUDAT**(过账日期)是财务模块的核心字段,表示业务交易在财务上正式过账的日期。以下是详细说明: #### 1. **字段含义** - **BUDAT** = **B**uchungs**dat**um(德语“记账日期”) - 代表凭证在财务账目中实际登记的日期,与业务发生日期(CPUDT)可能不同 - 直接影响财务月结和财务报表的期间归属[^1][^2] #### 2. **技术特性** | 属性 | 值 | |--------------|------------------| | 数据类型 | DATS(日期类型) | | 标准长度 | 8字符(YYYYMMDD)| | 关键表 | BKPF(会计凭证抬头)、MKPF(物料凭证抬头) | | 相关字段 | `BUDAT_MKPF`(物料凭证过账日期) | #### 3. **典型用法示例** **场景**:查询物料凭证的过账日期 ```abap SELECT mseg~werks AS 工厂, mseg~vbeln_im AS 物料凭证, CAST( mseg~budat_mkpf AS CHAR ) AS 过账日期 -- 类型转换 FROM mseg WHERE mseg~budat_mkpf BETWEEN '20240101' AND '20241231' INTO TABLE @data(lt_data). ``` > 此处`CAST`将日期字段转为字符类型便于处理[^1] **联合使用案例**: ```abap CONCAT( 'DOC', SUBSTRING( CAST( mseg~budat_mkpf AS CHAR ), 1, 4 ) ) AS 凭证年份 -- 拼接凭证号+年份前4位[^1] ``` #### 4. **业务规则** - **财务关账**:BUDAT决定交易归属的会计期间 - **物料移动**:在MSEG表中通过`BUDAT_MKPF`关联物料凭证日期[^2] - **跨模块集成**:与SD模块的VBAK(销售订单)、MM模块的MKPF联动 - **特殊场景**:允许过账到已关闭期间需配置特殊权限 #### 5. **注意事项** - 与`CPUDT`(凭证创建日期)的区别: $ \text{BUDAT} \neq \text{CPUDT} $ - CPUDT = 系统操作时间 - BUDAT = 财务生效时间 - 在S/4 HANA中可直接通过CDS视图`I_MaterialDocument`访问 --- ### 相关问题 1. BUDAT与CPUDT字段在月结处理中有何不同影响? 2. 如何在ABAP CDS视图中正确使用BUDAT_MKPF字段? 3. SAP跨模块集成时BUDAT如何影响财务凭证和物料凭证的关联? 4. 能否通过BUDAT过账到历史会计期间?需要哪些配置? 5. 物料凭证表(MSEG/MATDOC)中BUDAT_MKPF字段的取值逻辑是什么? [^1]: SAP-ABAP-SQL语句中CAST字段类型转换示例,CONCAT连接示例,SUBSTRING截断示例。 [^2]: mb51增加MSEG&MKPF表外的字段。MB51增加字段-优快云博客。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值