點擊藍字 關注我們
一
前言
前文介紹了通用導入程序
詳見鏈接無峰,公眾號:ABAP 技巧與實戰(zhàn)SAP工具箱 通用導入程序
本文主要介紹怎么給特定表的導入配置模板及數(shù)據(jù)檢查
為了講解的更清楚,更有條理,本文以數(shù)據(jù)導入臨時表ZTUP_MB(商品憑證導入)為例.
二
導入表定義
ZTUP_MB表是用來臨時存儲需要產(chǎn)生商品憑證的數(shù)據(jù).為了讓商品憑證產(chǎn)生的過程可記錄,可重試. 所以創(chuàng)建一個特定結(jié)構(gòu)的表來記錄導入的數(shù)據(jù)
UPLID: 生成的序號,用來記錄上傳的文件ID
LINEID: 行號,記錄數(shù)據(jù)在原文件中的序號
MBLNR_CR/MJAHR_CR: 用來記錄后續(xù)成功創(chuàng)建的商品憑證號
ZSUP_MB: 商品憑證需要的業(yè)務數(shù)據(jù),字段不再贅述. 詳見圖二.
ZSMATNR_IDENTIFY: 額外的商品識別方式
ZSSIZE: 尺碼作為列的導入(允許一般商品+多尺碼信息在一行中同時導入單據(jù),形成單據(jù)中的一般商品及下層的變式商品. 該邏輯后續(xù)專門撰文說明.
ZSBC008: 后續(xù)處理產(chǎn)生商品憑證的程序?qū)嵱?記錄相關日期,時間,操作者等內(nèi)容,詳見圖三
圖一
圖二
圖三
三
輔助表定義
ZTUP_HEADER 是一個輔助表, 主要用來記錄上傳文件ID的一些特殊屬性.
這是一個通用輔助表, 所有臨時保存數(shù)據(jù)的表ZTUP_*都會把文件ID寫入ZTUP_HEADER 中. 主要用于記錄文件ID對應的文件名(FILENAME),導入日期,導入人員等信息.
當然,如果導入的表是數(shù)據(jù)最終要進入的表, 則無需這個輔助表.
四
創(chuàng)建TCODE
為通用導入程序ZUPLOAD_TABLE_CONTENT 創(chuàng)建一個TCODE: ZUP_MB . 具體產(chǎn)生模板或?qū)霑r,會通過TCODE讀取配置信息.
五
配置表ZTBC001
ZTBC001中主要配置TCODE 與表的對應及一些通常的控制信息
大部分字段的描述已經(jīng)足以說明字段含義了. 個別字段會在后面重點介紹一下.
TCODE? 事務代碼
TABNAME 表名
FUNCNAME 函數(shù)名:配置調(diào)用的數(shù)據(jù)校驗函數(shù)
PROGNAMEABAP 程序名 :配置數(shù)據(jù)導入后跳轉(zhuǎn)的處理程序
TYPENAME 字典類型的名稱 (廢棄)
SEPARATOR 分隔符 :如果是文本文件導入, 指定分割符號.如果沒有指定, 實用制表符分割
BAPI_NO_AUTHCHECK 跳過BAPI執(zhí)行中的授權(quán)檢查(需要BAPI函數(shù)支持)
CMFLG 尺碼橫向顯示功能標記
SELSC 跳轉(zhuǎn)到處理程序時,留在選擇屏幕上
ERRSAVE 帶錯誤保存標記: 勾選: 文件存在錯誤的情況下,允許保存處理正確的部分. 未勾選,文件存在錯誤就不允許保存.
DISPT 顯示特定字段的文本(字段必須有碼表檢查標記才能顯示),數(shù)據(jù)導入顯示時,補充編碼的描述
ERR_IN_DATA 檢查出錯的數(shù)據(jù)也保存在上傳表中(標記為A).
WITH_DATA 允許附加數(shù)據(jù)產(chǎn)生模板: 勾選后,允許產(chǎn)生帶有數(shù)據(jù)的模板.
UPD_NUM? 更新表時分包處理的每個包的條目數(shù)(個別表發(fā)現(xiàn)無法一次性更新,需要按指定條目數(shù)多次寫入數(shù)據(jù)庫)
FILENAME 模板文件名(如果為空,使用表名)
KEEP_LINEID 保留文件中的行號(如果存在報錯并允許保存:勾選,保留文件中的行號,不勾選,正確內(nèi)容重寫行號)
01
FUNCNAME
函數(shù)名:配置調(diào)用的數(shù)據(jù)校驗函數(shù)
通過定義并配置一個固定結(jié)構(gòu)的函數(shù),在函數(shù)中執(zhí)行商品憑證導入的特殊邏輯(校驗或數(shù)據(jù)補償). 可以配置通用檢查函數(shù)Z_BC_UP_COMM_CHECK. 也可以用這個函數(shù)復制一個函數(shù)
Z_BC_UP_MB_CHECK,在基本檢查的基礎上,再補充商品憑證導入的特殊檢查邏輯
下面是兩個基本檢查邏輯
Z_BC_UP_FIELD_EMPTY_CHECK? 基于配置的檢查
Z_BC_UP_COMMON_DATUM_CHECK 日期檢查
02
PROGNAME
ABAP 程序名 :配置數(shù)據(jù)導入后跳轉(zhuǎn)的處理程序
如果導入數(shù)據(jù)記錄的表是最終目標表, 則無需配置處理程序.
如果記錄的表是臨時表, 還需要通過特定的程序執(zhí)行寫入正式表(或者調(diào)用BAPI產(chǎn)生主數(shù)據(jù)或單據(jù)). 則需要配置一個處理程序.
處理程序大致需要一個相對固定的選擇屏幕
03
ERR_IN_DATA
檢查出錯的數(shù)據(jù)也保存在上傳表中(標記為VPROC=A).
勾選后:錯誤部分的數(shù)據(jù)與正確的數(shù)據(jù)一起顯示并寫入目標表(附加錯誤標記).此時視同ERRSAVE='X'.
未勾選:錯誤數(shù)據(jù)單獨顯示. 此時如果允許出錯保存(ERRSAVE='X'). 保存后,會丟棄錯誤部分的數(shù)據(jù). .如果ERRSAVE=''. 如果有錯誤的數(shù)據(jù),則不允許保存
六
配置ZTBC001后的效果
執(zhí)行TCODE: ZUP_MB . 會讀取配置表ZTBC001中的表寫入表名字段(不允許修改). 同時文件名依據(jù)配置字段FILENAME的內(nèi)容+<_時間戳>
點擊下載模板后,不再彈出字段字段選擇屏幕,會直接下載產(chǎn)生模板文件(模板文件內(nèi)容依賴于配置表ZTBC001A,如果未配置, 則使用表中所有字段).
需要注意的是:選擇屏幕中的 檢查數(shù)據(jù)復選框是一個總控開關,可以通過取消勾選,取消數(shù)據(jù)導入模板中配置的所有檢查邏輯.(可信賴的大數(shù)據(jù)量導入時,去掉檢查數(shù)據(jù)可以極大的提高導入性能)
七
配置表ZTBC001A
該配置表用于配置特定的事務代碼或表的模板內(nèi)容及導入檢查等.
TABNAME 表名或者TCODE名稱,或者接口編號
FIELDNAME 字段名
FIELDTEXT 表字段描述
SORTK 字段順序
EXCMB 模版中排除該字段(標記了的字段從模版中排除,并且字段檢查失效)
NOZERO 字段非空檢查
DUP_CHECK 上傳文件內(nèi)容重復性檢查(所有設置了該標記的字段參與重復性檢查)
MBCHK 碼表檢查
MBNOEXCEL 碼表限制在EXCEL模版的表現(xiàn)方式
DISPT 顯示特定字段的文本(字段必須有碼表檢查標記才能顯示)
AUTHCHK 授權(quán)檢查標記
AUTHOBJ 權(quán)限對象
AUTHCHK_S 簡單授權(quán)檢查
NROBJ 編號范圍對象名稱
NRNR 序號區(qū)間編號
DEFAULT_VALUE 字段的默認值
WITH_DATAE_TEXT如果FIELD_LONG_TEXT 為空且添加了標記, 則獲取數(shù)據(jù)元素長文本作為批注
FIELD_LONG_TEXT 字段詳細描述,體現(xiàn)在EXCEL的批注中
ZZBDS_CHECK 正則表達式檢查(輸入字段內(nèi)容檢查的正則表達式)
01
TABNAME
表名或者TCODE名稱,或者接口編號
如果一個表的導入配置了多個事務代碼入口. 可以為這些事務代碼分別配置模板(TABNAME中填寫事務代碼). 也可以讓這些事務代碼共用一個模板,(TABNAME填寫表名).
02
NOZERO
字段非空檢查
勾選后:模板中的該字段將紅色顯示,同時描述中添加* 提醒用戶該字段必須輸入內(nèi)容. 數(shù)據(jù)上傳后,如果該字段內(nèi)容為空, 會報錯
03
EXCMB
模版中排除該字段(標記了的字段從模版中排除,并且字段檢查失效)
04
DUP_CHECK
上傳文件內(nèi)容重復性檢查(所有設置了該標記的字段參與重復性檢查)
比如期初庫存導入時, 可以為商品,地點,庫位字段勾選該標記. 這樣默認檢查邏輯會根據(jù)這三個字段檢查文件中是否有重復的數(shù)據(jù), 如果有重復數(shù)據(jù),報錯.
05
MBCHK
碼表檢查
勾選后, 輸入進入系統(tǒng)中會執(zhí)行數(shù)據(jù)有效性檢查.有效性檢查依賴于碼表配置,
詳見鏈接無峰,公眾號:ABAP開發(fā)技巧SAP開發(fā)框架系列之 碼表框架
06
MBNOEXCEL
碼表限制在EXCEL模版的表現(xiàn)方式
N? 碼表不輸出EXCEL
E? 碼表輸出EXCEL,字段檢查報錯顯示
W? 碼表輸出EXCEL,字段檢查警告顯示
I? ? 碼表輸出EXCEL,字段檢查消息顯示
空? 碼表輸出EXCEL,字段檢查報錯顯示
07
AUTHCHK/AUTHOBJ
授權(quán)檢查標記/權(quán)限對象
通過勾選AUTHCHK 并且維護權(quán)限對象,啟用標準的授權(quán)檢查.檢查的活動ACTVT默認 01,檢查的字段名就是當前字段名
該配置模式非常靈活, 只需要找到該字段的標準授權(quán)對象,就可以通過配置啟用導入的該字段內(nèi)容的授權(quán)檢查.
08
AUTHCHK_S
簡單授權(quán)檢查
有別于標準授權(quán)體系的一套自定義授權(quán)檢查體系. 該體系與標準授權(quán)檢查并存,可以作為標準授權(quán)檢查體系的一個補充.
用來減少標準授權(quán)體系的維護量. 或者取代標準授權(quán)體系,實現(xiàn)授權(quán)檢查.
09
NROBJ/ NRNR
編號范圍對象名稱/序號區(qū)間編號
對于特定的字段,可以通過配置號碼對象,區(qū)間編號在導入時通過函數(shù)NUBER_GET_NEXT獲取一個編號賦值到字段中.
這個配置可以為一些簡單的表賦予關鍵字號碼.
10
DEFAULT_VALUE
字段的默認值
允許在模板中給一些字段定義默認值.
通過字段默認值,可以進一步的簡化導入模板.
比如:
為特定的移動類型, 比如期初庫存導入設定單獨的模板, 該模板中,可以設置移動類型默認值561. 設置BUDAT=當前日期.
為特定的工廠設置特殊的模板,在該模板中,可以把為WERKS字段設置默認值.
11
FIELD_LONG_TEXT
字段詳細描述,體現(xiàn)在EXCEL的批注中
產(chǎn)生模板時,可以為字段設置詳細的描述, 該描述會放到字段的批注中.
勾選WITH_DATAE_TEXT
且未維護FIELD_LONG_TEXT,則會把字段數(shù)據(jù)元素的描述作為字段的批注(數(shù)據(jù)元素未必能詳細解釋該字段,還是建議手工添加描述).
12
ZZBDS_CHECK
正則表達式檢查(輸入字段內(nèi)容檢查的正則表達式)
為特定的字段維護正則表達式可以進一步校驗數(shù)據(jù)的合法性. 幫助文檔中給出了一些常用的正則表達式的寫法.
八
配置示例
下圖是一個商品憑證導入的模板配置示例. 這個配置使用了表名ZTUP_MB.意味著如果沒有特定的事務代碼的配置, 所有ZTUP_MB表相關的TCODE都會使用下圖模板.
九
數(shù)據(jù)檢查
所有配置中的檢查,如未特別說明的, 都是在數(shù)據(jù)導入的時候執(zhí)行.
也可以在函數(shù)Z_BC_UP_MB_CHECK補充檢查邏輯. 比如下圖,是在PO導入時補充檢查調(diào)撥單的發(fā)貨庫位必須輸入.
注意: 導入程序選擇屏幕上的 數(shù)據(jù)檢查 復選框是一個總控開關
十
數(shù)據(jù)檢查的表現(xiàn)
根據(jù)配置項ZTBC001-ERR_IN_DATA的內(nèi)容不同.數(shù)據(jù)檢查的表現(xiàn)形式也不一樣.
01
ERR_IN_DATA=''
配置ZTBC001- ERR_IN_DATA= ''.報錯數(shù)據(jù),分開顯示.
序號 是記錄在原文件中的行號.
如果有錯誤數(shù)據(jù),會提示報錯,并且顯示會有錯誤按鈕,點擊該按鈕可以看到所有報錯信息
一行中的多個錯誤都會顯示在錯誤信息字段中,
此時根據(jù)ZTBC001- ERRSAVE判斷是否能夠保存正確的數(shù)據(jù)
' ' 不允許保存
'X' 允許保存
02
ERR_IN_DATA = 'X'
如果配置了ZTBC001-ERR_IN_DATA = 'X'.則報錯數(shù)據(jù)和正常數(shù)據(jù)一起顯示,通過處理狀態(tài)VPROC=A標記行存在錯誤.
此時允許保存所有數(shù)據(jù).
十一
保存數(shù)據(jù)模板功能
ZTBC001- WITH_DATA = 'X' 表示允許把導入數(shù)據(jù)保存在模板中.
在數(shù)據(jù)導入后會出現(xiàn)按鈕 保存數(shù)據(jù)模板.
點擊后. 下次產(chǎn)生的模板會包含本次導入的數(shù)據(jù). 如果要清空模板中的數(shù)據(jù),只需要導入一次空數(shù)據(jù),點擊保存數(shù)據(jù)模板即可.
數(shù)據(jù)模板中附加的數(shù)據(jù)如未刪除,也會作為正式數(shù)據(jù)寫入表中
數(shù)據(jù)模板功能適用場景: 固定數(shù)據(jù)行,讓用戶填寫特定字段的內(nèi)容.
十二
保存跳轉(zhuǎn)功能
點擊保存按鈕后,數(shù)據(jù)會寫入ZTUP_MB表. 同時會調(diào)用ZTBC001- PROGNAME中配置的數(shù)據(jù)處理程序 ZUP_MB_PROC. 并且根據(jù)配置ZTBC001-SELSC 來判斷
X 停留在程序的選擇屏幕
空 跳過選擇屏幕
數(shù)據(jù)導入程序與數(shù)據(jù)處理程序是通過文件ID傳遞導入的數(shù)據(jù)內(nèi)容:在數(shù)據(jù)保存時,會分配一個文件ID給這些導入的數(shù)據(jù),在處理程序中,讀取文件ID相關的數(shù)據(jù).
十三
數(shù)據(jù)單獨處理
單獨執(zhí)行ZUP_MB_PROC也能通過搜索幫助找到該文件ID并選擇處理
十四
總結(jié)
導入模板的配置功能是歷經(jīng)多個項目,不斷總結(jié)用戶需求,不斷的改進,整合出來的框架功能.依據(jù)這個框架,開發(fā)了很多主數(shù)據(jù)或單據(jù)導入功能.
在項目實踐中:
可以用在上線前期初數(shù)據(jù)導入(處理程序中整合了多進程處理功能).
可以為特定用戶配置特殊模板,作為快速單據(jù)創(chuàng)建的一種方式.
可以把接口傳遞的數(shù)據(jù)寫入處理表,作為接口數(shù)據(jù)后續(xù)處理的方式.
處理程序整合多進程處理詳見 文章(該文章無法鏈接,請自行在公眾號中搜索)?
SAP工具箱之 快速調(diào)度并發(fā)后臺作業(yè)
靈活運用導入模板,可以帶來如下好處:
簡化數(shù)據(jù)導入操作
提升數(shù)據(jù)導入質(zhì)量
記錄數(shù)據(jù)導入痕跡
另外對于大數(shù)據(jù)導入的處理建議使用.TXT文件. 如果啟用了數(shù)據(jù)檢查,程序會把檢查失敗的數(shù)據(jù)內(nèi)容在導入文件的目錄中生成一個報錯文件
命名規(guī)則:? 原文件名+_ERR.TXT