BDC Table

本文详细介绍了ABAP中的BDC技术,包括BDCTableStructure的数据结构、如何使用内部表存储数据、通过示例展示如何从ASCII文本文件读取数据并更新R/3系统中的SalesEmployee个人信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BDC Table Structure

BDC Table是一個Structure,用來存放要放入輸入畫面的資料,包含有以下的欄位:

 

Field Name

Type

Description

Program

Char(8)

Program name of Transaction

Dynpro

Char(4)

Screen number of Transaction

Dynbegin

Char(1)

Indicator for new Screen

Fnam

Char(35)

Name of  Database Field from Screen

Fval

Char(80)

Value to Submit to Field

 

可在程式開始之初宣告一個Internal Table使用BDCDATAStructure:

 

DATA  BEGIN  OF  INT_BDC  OCCURS  0.

      INCLUDE  STRUCTURE  BDCDATA.

DATA  END  OF INT_BDC.

 

如在以上的畫面中要輸入VBAK-KUNNR VBAK-NAME1 兩個欄位的內容,分別要填入

‘34051920’ 台達電子,其BDC Table內容如下:

 

Program

Dynpro

Dynbegin

Fnam

Fval

SAPMV45A

0300

X

 

 

 

 

 

VBAK-KUNNR

34051920

 

 

 

VBAK-NAME1

台達電子

 

 

 

BDC_OKCODE

/nn

 

BDC_OKCODE欄位的值就是結束輸入時所要按下的鍵盤控制碼,

 

& 常用的BDC Okcode:

OKCODE     Description                                      

  /nn          Function Key nn

  /00          Enter

  /8           F8Continue or Execute

  /11          F11Post

  %EX        Exit

  BACK       F3Back Previous Screen

  DLT         Delete

  PICK        Double Click

  SAVE        F11Save

 

存入BDC Table的資料

   首先我們需建立兩個副程式,BDC_SCREEN是來存入ProgramDynproDynbegin

   三個欄位,也就是輸入畫面的程式名稱及Screen NumberBDC_FIELD:用來存入

   FnamFval兩個欄位,也就是輸入畫面所需填入的各個欄位內容,程式內容如:

  

* Add BDC Screen Field Data

FORM BDC_SCREEN TABLES P_BDC STRUCTURE BDCDATA

     USING P_PROGRAM P_SCREEN.

  CLEAR  P_BDC.

  P_BDC-PROGRAM  =  P_PROGRAM.

  P_BDC-DYNPRO   =  P_SCREEN.

  P_BDC-DYNBEGIN = 'X'.

  APPEND  P_BDC.

ENDFORM.

 

* Add BDC Field Data

FORM BDC_FIELD TABLES P_BDC STRUCTURE BDCDATA

     USING P_NAME  P_VALUE.

  CLEAR P_BDC.

  CASE  P_VALUE.

    WHEN ''.

    WHEN OTHERS.

      P_BDC-FNAM  =  P_NAME.

      P_BDC-FVAL  =  P_VALUE.

      APPEND  P_BDC.

  ENDCASE.

ENDFORM.

 

 

 

 

接下來在程式中去呼叫這兩個副程式來填入資料,程式敘述如下:

   PERFORM BDC_SCREEN  TABLES  INT_BDC

      USING  'SAPMV45A'  '0300'.

   PERFORM BDC_FIELD  TABLES  INT_BDC:

     USING  'VBAK-KUNNR'  ‘34051920’,

     USING  'VBAK-NAME1'  台達電子’,

     USING  'BDC_OKCODE'  '/00'.       " Save and end

 

 Call Transaction指令

將資料依序填入BDC Table後要寫入R/3Database時要使用 CALL TRANSACTION

指令,指令格式如下:

 

   CALL  TRANSACTION  WITH  <tcode>

                          USING  <BDC Table>

                          MODE  <Display Mode>

   <Display Mode> 可分成:

   A      Show all Screen

   E      Show only Screen with Error

   N      Show no Screen

 

:

   CALL  TRANSACTION  'VA03'

             USING  INT_BDC

             MODE  'E'.

 

Example for BDC Program

例如我們想經由BDC ProgramSales Empolyee的資料由ASCII Text File去更新 R/3

資料庫Sales Empolyee Persolnal Data 會有以下兩個畫面要輸入: 



Program Name SAPMP50AScreen Number 1000Transaction Code PAL3

 

Program Name SAPMP50AScreen Number 2042Transaction Code PAL3

 

 

Screen 1000 要填入的資料是

Description        Field Name         Value

Personal Number   RP50G-PERNR      242147

Info Type          RP50G-CHOIL      Personal Data

 

Screen 2042 要填入的資料是

Description        Field Name         Value

From Date         P002-BEGDA       01/13/1969

To Date           P002-ENDDA       12/31/9999

Last Name         P002-NACHN       Dora

First Name         P002-VORNA       Cheng

 

欲轉入的ASCII Text File檔名是 empoly.txt,其格式為

Description        Length   Position      Value

Personal Number     10         1        242147

Info Type           20        11        Personal Data

From Date          10        31        01/13/1969

To Date            10        41        12/31/9999

Last Name          20        61        Dora

First Name          20        81        Cheng

 

程式如下:

 

*  PROGRAM SOURCE HEADER 

* Program Name: ZTBDC00

* Description:  Change Sales Empolyee Data Using BDC Program

* Date/Author:  1998/06/10 周慶日

* Table Update:

* Special Logic:

* Include:

*---------------------------------------------------------------

*  MODIFICATION LOG

*---------------------------------------------------------------

* ChangeDate Programmer    Request      Description

* ========== ============= ============ ==========================

* 1998/06/10 Chou                       NEW PROGRAM

*----------------------------------------------------------------------------

 

* REPORT NAME 

*------------------------------------------------------------------

REPORT ZTBDC00

       NO STANDARD PAGE HEADING

          MESSAGE-ID ZZ

          LINE-COUNT 60 

          LINE-SIZE  80.

 

*DATA

*----------------------------------------------------------------

TABLES: RP50G,P002.

DATA: BEGIN OF INT_BDC  OCCURS  0.

      INCLUDE  STRUCTURE  BDCDATA.

DATA: END  OF  INT_BDC.

 

* Work Internal Table

DATA: BEGIN OF IN_REC,

     PERNR   LIKE  RP50G-PERNR,

     CHOIL   LIKE  RP50G-CHOIL,

     BEGDA  LIKE   P002-BEGDA,

     ENDDA  LIKE   P002-ENDDA,

     NACHN  LIKE   P002-NACHN,

     VORNA  LIKE   P002-VORNA,

      END  OF  IN_REC.

 

DATA: P_FILE(30)  VALUE  ‘empoly.txt’.  “ASCII Text File Name       

* INITIALIZATION

*----------------------------------------------------------------

INITIALIZATION.

* AT START SELECTION

*---------------------------------------------------------------

START-OF-SELECTION.

  PERFORM READ_DATA.

  PERFORM PROCESS_DATA.

 

*  END OF SELECTION

*---------------------------------------------------------------------

END-OF-SELECTION.

  PERFORM  CLEAN_UP.

 

* FORM

*-------------------------------------------------------------

* Read Data  OPEN ASCII Text File

*-------------------------------------------------------------

FORM READ_DATA.

  OPEN  DATASET  P_FILE  FOR  INPUT  IN  TEXT  MODE.

 

  IF  SY-SUBRC  NE  0.

     MESSAGE  E999  WITH  ‘Cannot  Open ‘  P_FILE.

  ENDIF. 

 

ENDFORM.

 

 

* Process Data

*-------------------------------------------------------------

FORM PROCESS_DATA.

  DO.

    READ DATASET P_FILE  INTO  IN_REC.  “Add Data To Internal Table

IF SY-SUBRC  NE  0.

   EXIT.

ENDIF.

 

PERFORM  BUILD_BDC.    “Add to BDC Table

PERFORM  SUBMIT_BDC.  “Call Transaction Code To Change Data

 

 ENDDO.

ENDFORM.

 

*----------------------------------------------------

* Add Data to BDC Table

FORM BUILD_BDC.

  PERFORM  BDC_SCREEN  TABLES  INT_BDC 

           USING  ‘SAPMP50A’  ‘1000’.

  PERFORM  BDC_FIELD  TABLES   INT_BDC:

           USING  ‘RP50G-PERNR’ IN_REC-PERNR,

           USING  ‘RP50G-CHOIL’  IN_REC-CHOIL,

           USING  ‘BDC_OKCODE’  ‘/00’.

 PERFORM  BDC_SCREEN  TABLES  INT_BDC 

           USING  ‘SAPMP50A’  ‘2042’.

 PERFORM  BDC_FIELD  TABLES   INT_BDC:

           USING  ‘P0002-BEGDA’ IN_REC-BEGDA,

           USING  ‘P0002-ENDDA’ IN_REC-ENDDA,

           USING  ‘P0002-NACHN’ IN_REC-NACHN,

           USING  ‘P0002-VORNA’ IN_REC-VORNA,

           USING  ‘BDC_OKCODE’  ‘/11’.

 ENDFORM.

 

*----------------------------------------------------------------

* Call Transaction Code to Execute Change Data

FORM  SUBMIT_BDC.

  CALL  TRANSACTION  ‘PAL3’  USING  INT_BDC

        MODE  ‘N’.

  REFRESH  INT_BDC.  BDC Table資料清除

ENDFORM.

 

*------------------------------------------------------------------

* Close ASCII Text File

FORM  CLEAN_UP.

  CLOSE  DATASET  P_NAME.

  IF  SY-SUBRC  NE  0.

     MESSAGE  E999  WITH  ‘Cannot  Close ‘ P_FILE.

  ENDIF. 

 

ENDFORM.

 

*------------------------------------------------------------------

* Add BDC Screen Field Data

*---------------------------------------------------------------------------------------------------

FORM BDC_SCREEN TABLES P_BDC STRUCTURE BDCDATA

     USING P_PROGRAM P_SCREEN.

  CLEAR  P_BDC.

  P_BDC-PROGRAM  =  P_PROGRAM.

  P_BDC-DYNPRO   =  P_SCREEN.

  P_BDC-DYNBEGIN = 'X'.

  APPEND  P_BDC.

ENDFORM.

 

* Add BDC Field Data

*----------------------------------------------------------------------------------------------

FORM BDC_FIELD TABLES P_BDC STRUCTURE BDCDATA

     USING P_NAME P_VALUE.

  CLEAR  P_BDC.

  CASE  P_VALUE.

    WHEN ''.

    WHEN OTHERS.

      P_BDC-FNAM  =  P_NAME.

      P_BDC-FVAL  =  P_VALUE.

      APPEND  P_BDC.

  ENDCASE.

ENDFORM.

03-21
### BDC码定义 BDC(Binary-Coded Decimal)是一种编码方式,其中每一位十进制数被单独表示为二进制形式。具体来说,每一个十进制数字都被映射到四位二进制位上[^1]。 例如,在BDC编码下,“9”会被表示为`1001`,而“5”则会表示为`0101`。因此,十进制数“59”在BDC中的表示将是`0101 1001`。 --- ### BDC码转换方法 #### 十进制转BDC 要将一个十进制数转换成BDC格式,需逐位将其转化为对应的四位二进制值。以下是具体的算法描述: 对于给定的十进制整数N: - 将其分解为各个独立的十进制位; - 对于每位十进制数值d_i,计算其对应的四位二进制值bin(d_i); - 连接这些四位二进制值得到最终的BDC编码。 示例代码如下所示: ```cpp #include <iostream> using namespace std; string decimalToBCD(int num) { string bcd = ""; while (num > 0) { int digit = num % 10; // Convert each digit to its binary representation and pad with leading zeros. char binDigit[5]; sprintf(binDigit, "%04d", bitset<4>(digit).to_ulong()); bcd.insert(0, binDigit); num /= 10; } return bcd.empty() ? "0000" : bcd; } int main() { cout << "Decimal number: "; int n; cin >> n; cout << "Equivalent BCD code: " << decimalToBCD(n) << endl; } ``` #### BDC转十进制 相反的过程是从BDC恢复原始的十进制数。这可以通过解析每组四个比特并组合它们来完成。 --- ### BDC码表格示例 下面是一个简单的对照表展示如何从十进制转换至BDC以及反之亦然的情况。 | **十进制** | **BDC 编码** | |------------|--------------| | 0 | `0000` | | 1 | `0001` | | ... | ... | | 9 | `1001` | 当超过单一字符长度时,比如十进制数“12”,它的BDC表达即为两部分拼接的结果——`0001 0010`。 --- ### 应用场景及相关技术关联 在某些特定领域如嵌入式开发或早期计算机系统设计中,BDC因其易于硬件实现的特点仍然具有一定的应用价值。此外,像SAP这样的企业资源计划软件可能也会涉及到类似的机制用于批量数据录入(BDC)[^1]。 同时需要注意的是,在现代数据库管理系统里虽然不常见直接使用BDC存储数值的方式,但是通过修改列结构可以间接支持这种需求。例如采用ALTER TABLE语句新增加一列专门用来保存经过特殊处理后的数据[^2]。 最后提到一点关于类型识别方面的小技巧,如果是在C++环境下工作的话,则可借助RTTI特性里的typeid功能确认变量确切的数据类别[^3];而在做大数据量传输之前往往还需要先准备好相应的源端资料提取流程,这里就可能会运用到标准SQL查询手段获取目标字段的内容[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值