前言:
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了建水免費(fèi)建站歡迎大家使用!
報(bào)表程序是什么??
是一個(gè)帶有選擇屏幕,通過用戶的輸入限定查詢條件,按固定的邏輯獲取數(shù)據(jù)并展示出來的程序.?
不知道大家認(rèn)可這個(gè)定義么??
從某種角度來講: SQL編輯器就是一個(gè)超級(jí)報(bào)表程序. 通過編輯界面輸入SQL語句(選擇條件及查詢邏輯),輸出一個(gè)查詢結(jié)果. 只是這個(gè)超級(jí)報(bào)表程序需要使用者能夠理解表邏輯關(guān)系,并且能夠熟練的寫出SQL語句.?
ABAP環(huán)境中常用的SQL編輯器:?
ZSQL (一個(gè)老版本的ABAP程序開發(fā)的SQL編輯器,只支持老版的OPEN SQL語句,來自網(wǎng)絡(luò))
ZTOAD (一個(gè)新版的ABAP程序開發(fā)的SQL編輯器,支持新版的OPEN SQL語句,同時(shí)附帶了歷史SQL語句功能,及查詢表的字段清單功能,來自網(wǎng)絡(luò))
DB02 (SAP自帶的hana SQL編輯器,支持HANA SQL語句,附帶歷史SQL功能,來自SAP)
但是我們今天的主題不是講SQL編輯器的功能.?我們的主題是:
怎么把DB02中SQL編輯器的查詢一鍵生成一個(gè)報(bào)表程序.?
執(zhí)行過程
在DB02的SQL編輯器中寫入一個(gè)查詢語句 (可以是一個(gè)復(fù)雜的查詢語句,示例給了一個(gè)簡(jiǎn)單查詢) ,并且附帶相關(guān)注釋
注釋內(nèi)容
--產(chǎn)生報(bào)表程序:00009:測(cè)試DB02生成報(bào)表程序
--使用字段描述:ALL
--MATNR:商品編碼A:2
--MTART:類型:1
3. 注釋說明?:
第一句是指定該查詢生成一個(gè)報(bào)表程序(程序名 ZBC123_00009,程序描述: 測(cè)試DB02生成報(bào)表程序)
第二句是指所有的字段描述來自表中的字段描述
第三句是指針對(duì)特定的字段指定描述,后面的數(shù)字是標(biāo)記該字段作為選擇條件的順序
第四句同上
4. 這樣,點(diǎn)擊執(zhí)行后,系統(tǒng)就產(chǎn)生了一個(gè)ZBC123_00009的程序.
該程序有注釋中指定的選擇條件/順序及描述,執(zhí)行后給出查詢的結(jié)果
接下來的本來應(yīng)該是福利時(shí)間, 但是這次我改變一下福利策略(為了關(guān)注,我也是拼了)??.
如果你對(duì)這篇文章感興趣,請(qǐng)幫忙轉(zhuǎn)發(fā)分享, 并且勾選微信 看一看.文章右上角的按鈕點(diǎn)擊后,點(diǎn)擊在看(或者文章末尾的右下角在看),即可.
當(dāng)文章 閱讀人數(shù)達(dá)到2000,或者在看達(dá)到500.或者公眾號(hào)關(guān)注達(dá)到500. 我會(huì)考慮在以后的文章中分享實(shí)現(xiàn)過程, 希望你能早日看到.
如果有渠道能推進(jìn)SAP也實(shí)現(xiàn)該功能.?那將是造福廣大開發(fā)(也可能是造禍,誰知道呢.)的舉止.
(如果你真的喜歡這篇文章,請(qǐng)記得回來打個(gè)賞,作為支持我繼續(xù)下去的動(dòng)力,這是一個(gè)正反饋過程. 越多的人打賞,作者越有動(dòng)力分享,讀者就能享受更多的福利. 畢竟打賞的金額富不了我,窮不了你,卻能支持這個(gè)公眾號(hào)長(zhǎng)久發(fā)文.)
提到進(jìn)銷存報(bào)表,SAP提供了一個(gè)標(biāo)準(zhǔn)報(bào)表MB5B。這個(gè)報(bào)表能顯示指定的日期范圍內(nèi),期初庫(kù)存(數(shù)量與金額),期末庫(kù)存(數(shù)量與金額),總?cè)霂?kù)數(shù)(數(shù)量與金額),總出庫(kù)數(shù)(數(shù)量與金額)等重要數(shù)據(jù),如下圖:
既然有了這個(gè)報(bào)表,既可以查實(shí)時(shí)庫(kù)存,又可以查詢歷史期間的期初期末庫(kù)存,還可以查詢指定時(shí)間段內(nèi)的收發(fā)貨數(shù)量與金額,為什么很多企業(yè)里尤其是民營(yíng)企業(yè)里還要開發(fā)自己的進(jìn)銷存報(bào)表呢?
首先是因?yàn)楦鱾€(gè)企業(yè)里有企業(yè)特殊需求。
筆者在SY項(xiàng)目里,一個(gè)重要任務(wù)就是要救活客戶早已存在卻不堪使用的進(jìn)銷存報(bào)表。優(yōu)化后的進(jìn)銷存報(bào)表也是要顯示期初余額,期初庫(kù)存數(shù)量,入庫(kù)數(shù)量與金額,出庫(kù)數(shù)量與金額,期末數(shù)量與金額等欄位;同時(shí)對(duì)入庫(kù)與出庫(kù),根據(jù)業(yè)務(wù)部門關(guān)注的重點(diǎn)做了幾個(gè)細(xì)分,比如入庫(kù)再細(xì)分采購(gòu)入庫(kù),工單入庫(kù)和其它入庫(kù);出庫(kù)則再細(xì)分為銷售出庫(kù),工單發(fā)料和其它出庫(kù)。這些都是企業(yè)特定的需求,使用報(bào)表的業(yè)務(wù)部門有其特定關(guān)注點(diǎn),所以報(bào)表需要支持這些關(guān)注點(diǎn)。MB5B報(bào)表對(duì)于這些需求的支持顯然不太給力。
其次還因?yàn)槠髽I(yè)還有特定行業(yè)要求。
SY項(xiàng)目的客戶生產(chǎn)出來的成品與半成品,由于產(chǎn)品所在行業(yè)的特殊性,業(yè)務(wù)部門除了關(guān)心出入庫(kù)數(shù)量與金額以外,還關(guān)心出入庫(kù)的面積與重量以及期初期末面積與重量。并且由于客戶使用了可配置物料,這些物料的單個(gè)面積不固定,而是根據(jù)不同銷售訂單里相關(guān)長(zhǎng)寬特性值的不同而不同。類似這種需求,標(biāo)準(zhǔn)的MB5B報(bào)表當(dāng)然更是無法支持。
第三,更重要的原因是,MB5B報(bào)表里對(duì)于收發(fā)貨數(shù)量與金額欄位的統(tǒng)計(jì)口徑并不科學(xué),不能滿足企業(yè)常規(guī)的需求。比如其總收發(fā)貨數(shù)量欄位值的計(jì)算邏輯,除了包括常規(guī)收發(fā)貨數(shù)量以外,還包括收貨的取消,采購(gòu)訂單退貨的數(shù)量等。
比如如下MB5B的截圖里,
報(bào)表將105移動(dòng)類型的收貨以及沖銷操作(106移動(dòng)類型)的數(shù)量各自1000 KG分別計(jì)入了總收貨的數(shù)量與總發(fā)貨數(shù)量里。這顯然是不符合企業(yè)常規(guī)邏輯的,比如采購(gòu)訂單收貨,我收了1000KG,又退了1000KG,那么該訂單的收貨數(shù)量應(yīng)該是0。你在總收/發(fā)貨數(shù)量里都計(jì)入了這1000KG,在很多企業(yè)的進(jìn)銷存邏輯里是不能接受的。
再者SAP系統(tǒng)的報(bào)表MB5B,會(huì)把普通的轉(zhuǎn)移過賬的數(shù)量也分別計(jì)入總發(fā)貨數(shù)量與總收貨數(shù)量欄位里,比如MB5B如下結(jié)果截圖里,
該物料有一筆移動(dòng)類型413+E的貨物移動(dòng),數(shù)量是9500 PC, 這張貨物移動(dòng)的業(yè)務(wù)背景是把9500 PC的自有庫(kù)存轉(zhuǎn)為銷售訂單庫(kù)存。
這是一筆普通的轉(zhuǎn)移過賬,并不是真正的出庫(kù)或者入庫(kù),但是MB5B報(bào)表結(jié)果里會(huì)把這筆數(shù)量分別計(jì)入發(fā)貨數(shù)量與收貨數(shù)量欄位里,這樣不符合很多企業(yè)進(jìn)銷存報(bào)表中進(jìn)與銷的理解與邏輯。
包括但是不限于上述諸多原因,使得項(xiàng)目實(shí)踐中,進(jìn)銷存報(bào)表的開發(fā)比較常見。
2018-06-28 寫于上海市
背景:
實(shí)現(xiàn)sap系統(tǒng)自動(dòng)化前,需要先開啟自動(dòng)錄制腳本功能和啟用腳本功能。大部分機(jī)器默認(rèn)是關(guān)閉這兩個(gè)功能的,如果沒開啟這兩個(gè)功能,后續(xù)也無法進(jìn)行自動(dòng)化。因此,我們需要先開啟這兩個(gè)功能。
問題現(xiàn)象:
1、如下圖,在SAP界面的定制本地布局菜單中,腳本錄制和回放功能為灰色,無法進(jìn)行點(diǎn)擊操作,因此也無法進(jìn)行本地腳本錄制。
?
2、執(zhí)行sap腳本后,連接不上SAP系統(tǒng),無法進(jìn)行自動(dòng)化操作。
解決方式:
步驟1、開啟腳本錄制功能
1、 進(jìn)入事務(wù)RZ11。sap界面左上角輸入框輸入RZ11,回車即可進(jìn)入對(duì)應(yīng)事務(wù)(如果SAP左下角提示您無權(quán)限使用事務(wù)RZ11,那就找管理員先開事務(wù)權(quán)限吧。)
?進(jìn)入對(duì)應(yīng)事務(wù)
2、 輸入 sapgui/user_scripting,并點(diǎn)擊顯示按鈕
?
3、 檢查“當(dāng)前值”是否為True。如果為False,則改為True。
?
步驟2、開啟腳本功能
1、 如圖,進(jìn)入SAP界面的選項(xiàng)。
?
2、進(jìn)行如下設(shè)置,點(diǎn)擊確定按鈕保存即可。(之后好像要重啟SAP系統(tǒng))
?
自動(dòng)化腳本錄制驗(yàn)證:
1、 點(diǎn)擊腳本錄制和回放功能
?
2、 錄制腳本前,先設(shè)置腳本保存的路徑,之后再點(diǎn)擊紅色按鈕開始錄制腳本,就可以在SAP系統(tǒng)上進(jìn)行自動(dòng)化操作了,結(jié)束操作時(shí),點(diǎn)擊黃色按鈕結(jié)束錄制。
?
3、之后打開錄制的腳本文件,里面的代碼就是自動(dòng)錄制的腳本了??蓪⑵滗浿频哪_本拷貝到Excel的宏里面執(zhí)行,即可實(shí)現(xiàn)SAP自動(dòng)化。
?sap自動(dòng)化錄制的代碼
4、補(bǔ)充,必看。
SAP腳本錄制時(shí),那錄制窗口里面還有個(gè)綠色的回放按鈕(我這邊實(shí)測(cè)該按鈕無效)。此外,因?yàn)槲疫@邊自動(dòng)化還需要使用到excel的數(shù)據(jù),所以將錄制的腳本代碼拷貝到excel的宏里面去執(zhí)行。
代碼拷貝到excel后,不要直接執(zhí)行,我們需要先修改代碼里面的application變量名(如上圖綠色字體,該變量名會(huì)和excel的對(duì)象沖突),將其改為其他變量名字(自己隨便起個(gè))。
以下是我錄制到sap自動(dòng)化代碼,供大家參考。經(jīng)過和Excel的表格數(shù)據(jù)結(jié)合,生成的VB腳本,直接存放于Excel的宏腳本里面。使用時(shí),僅需要先將Excel數(shù)據(jù)錄好,再登錄SAP系統(tǒng),就可以執(zhí)行宏腳本了,即可實(shí)現(xiàn)SAP的自動(dòng)化。
Sub 批量創(chuàng)建檢驗(yàn)批()
Set SapGuiAuto = GetObject("SAPGUI")
Set AppSAP = SapGuiAuto.GetScriptingEngine
Set Connection = AppSAP.Children(0)
Set session = Connection.Children(0)
Cells(1, 8) = "檢驗(yàn)批次"
maxrow = Sheets(1).[A65536].End(xlUp).Row
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "QA01"
session.findById("wnd[0]").sendVKey 0
For i = 2 To maxrow
session.findById("wnd[0]/usr/ctxtQALS-MATNR").Text = ""
session.findById("wnd[0]/usr/ctxtQALS-WERK").Text = ""
session.findById("wnd[0]/usr/ctxtQALS-MATNR").Text = Cells(i, 2)
session.findById("wnd[0]/usr/ctxtQALS-WERK").Text = Cells(i, 4)
session.findById("wnd[0]/usr/ctxtQALS-HERKUNFT").Text = "89"
session.findById("wnd[0]/usr/ctxtQALS-HERKUNFT").SetFocus
session.findById("wnd[0]/usr/ctxtQALS-HERKUNFT").caretPosition = 2
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tabsTABSTRIP/tabpHERK/ssubSUBSCR_TABSTRIP:SAPLQPL1:0212/txtQALS-LOSMENGE").Text = Cells(i, 7)
session.findById("wnd[0]/usr/tabsTABSTRIP/tabpHERK/ssubSUBSCR_TABSTRIP:SAPLQPL1:0212/ctxtQALS-PASTRTERM").SetFocus
session.findById("wnd[0]/usr/tabsTABSTRIP/tabpHERK/ssubSUBSCR_TABSTRIP:SAPLQPL1:0212/ctxtQALS-PASTRTERM").caretPosition = 3
session.findById("wnd[0]").sendVKey 4
session.findById("wnd[1]/usr/cntlCONTAINER/shellcont/shell").selectionInterval = Cells(i, 5) + "," + Cells(i, 5)
session.findById("wnd[0]/usr/tabsTABSTRIP/tabpHERK/ssubSUBSCR_TABSTRIP:SAPLQPL1:0212/txtQALS-KTEXTLOS").Text = Cells(i, 6)
session.findById("wnd[0]/usr/tabsTABSTRIP/tabpHERK/ssubSUBSCR_TABSTRIP:SAPLQPL1:0212/txtRMQEA-NAMEKUNDE").SetFocus
session.findById("wnd[0]/usr/tabsTABSTRIP/tabpHERK/ssubSUBSCR_TABSTRIP:SAPLQPL1:0212/txtRMQEA-NAMEKUNDE").caretPosition = 15
session.findById("wnd[0]/usr/tabsTABSTRIP/tabpVORG").Select
session.findById("wnd[0]/usr/tabsTABSTRIP/tabpVORG/ssubSUBSCR_TABSTRIP:SAPLQPL1:0202/btnVORGSEL").press
session.findById("wnd[0]/usr/tabsTABSTRIP/tabpSTIP").Select
session.findById("wnd[0]/usr/tabsTABSTRIP/tabpSTIP/ssubSUBSCR_TABSTRIP:SAPLQPL1:0203/btnDYNA").press
Cells(i, 8) = session.findById("wnd[0]/usr/subLOT_HEADER:SAPLQPL1:1102/ctxtQALS-PRUEFLOS").Text
session.findById("wnd[0]/tbar[0]/btn[11]").press
Next i
session.findById("wnd[0]/tbar[0]/btn[12]").press
End Sub
引用:
藝賽旗:自己動(dòng)手實(shí)現(xiàn) SAP GUI 自動(dòng)化