ユーザーとしてのSAPでの数年間の作業で、SAPでの作業を容易にするために多数の異なるスクリプトをコンパイルしました。 SAPの「箱から出してすぐ」は、高速で効率的な作業には非常に不便です。 特に面倒なのは、画面に表示されているよりも多くの行をテーブルに挿入することが一度にできないことです。 テーブルをスクロールして、パーツに挿入する必要があります。 低ワイドスクリーンモニターでは、非常に不便です。 どういうわけか、スクリプトをコンパイルする前であっても、モニターを直立させ、画像を回転させてより多くの行が表示されるようにしました。
私は自分のベストプラクティスを一般に公開することにしました。
会社での仕事に必要なものの開発を達成することは、実際には(そして実際には)非現実的です。 同社は大規模で、官僚主義であり、多くの承認を得ており、SAPプログラマー、多くの仲介部門などのお金を申し訳なく思っています。 したがって、VBScriptを使用して(私の作業だけでなく)作業をゆっくりと独立して自動化しました。 会社のコンピューターで「左利き」exeを実行することは、あらゆる種類のポリシー、設定、およびサードパーティのプログラムによって禁止されていますが、VBScriptは静かに起動します。
スクリプトをコンパイルするための主な方法論は、SAP自体のツールを使用してマクロにアクションを記録し、記録のさらなる分析、ヘルプの調査、インターネット上の情報の検索などを行うことでした。 など
インターネット上では、vbs-fileをダブルクリックして起動されるVBScriptを使用してSAPを操作する多くの例がありますが、ほとんどすべてが最初のSAPウィンドウで動作するように設計されています。 このような例の先頭には、通常、 session.findById( "wnd [0]")。Maximizeというコードがあり、SAPウィンドウを展開します。 このようなスクリプトを最初のウィンドウの下で「グラウンド」で操作することは、次の理由で不便です。
- SAP Logonウィンドウを閉じるか、トレイに最小化する必要があります。 それ以外の場合、スクリプトはその中で動作しようとします。
- 最初のウィンドウで、別のトランザクションを実行したり、トランザクションの結果を表示したり、トランザクションを開いてパラメータを入力したりできます。 一般に、メニュー以外の何かが最初のウィンドウで開かれた場合、スクリプトを介したトランザクションの開始は機能しません。
- 最初のウィンドウは、別のサーバーへの接続を開く場合があります。
最初のSAPウィンドウのGUI要素のツリーをXMLファイルにアンロードする追加のスクリプトが作成されました。 次のようになります。

Dim currentNode Set xmlParser = CreateObject("Msxml2.DOMDocument") ' XML xmlParser.appendChild(xmlParser.createProcessingInstruction("xml", "version='1.0' encoding='windows-1251'")) Set SapGuiAuto = GetObject("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine Set connection = application.Children(0) Set session = connection.Children(0) WScript.ConnectObject session, "on" WScript.ConnectObject application, "on" ' SAP session.findById("wnd[0]").maximize enumeration "wnd[0]" 'enumeration "wnd[0]/usr" MsgBox "!", vbSystemModal Or vbInformation Sub enumeration(SAPRootElementId) Set SAPRootElement = session.findById(SAPRootElementId) ' Set XMLRootNode = xmlParser.appendChild(xmlParser.createElement(SAPRootElement.Type)) enumChildrens SAPRootElement, XMLRootNode xmlParser.save("C:\SAP_tree.xml") End Sub Sub enumChildrens(SAPRootElement, XMLRootNode) For i = 0 To SAPRootElement.Children.Count - 1 Set SAPChildElement = SAPRootElement.Children.ElementAt(i) ' Set XMLSubNode = XMLRootNode.appendChild(xmlParser.createElement(SAPChildElement.Type)) ' Name Set attrName = xmlParser.createAttribute("Name") attrName.Value = SAPChildElement.Name XMLSubNode.setAttributeNode(attrName) ' Text If (Len(SAPChildElement.Text) > 0) Then Set attrText = xmlParser.createAttribute("Text") attrText.Value = SAPChildElement.Text XMLSubNode.setAttributeNode(attrText) End If ' Id Set attrId = xmlParser.createAttribute("Id") attrId.Value = SAPChildElement.Id XMLSubNode.setAttributeNode(attrId) ' - , If (SAPChildElement.ContainerType) Then enumChildrens SAPChildElement, XMLSubNode Next End Sub
行の1つをコメントアウトします。
- 列挙「wnd [0]」
- 列挙「wnd [0] / usr」
SAPウィンドウ全体またはUserAreaのみ(メニュー、ツールバー、ステータスバーなし)の要素をクロールした結果を取得します。
いくつかのニュアンス:
- 画面に表示されない要素がある場合、その要素は存在せず、名前でもIDでも見つけることができません。 それに到達するには、すべての親要素を展開して表示する必要があります。 例:
- トランザクションME51Nでは、ヘッダーが折りたたまれている場合、「Header Note」を指定することはできません。 最初にヘッダーを展開する必要があります。
- トランザクションME21NでOur Signフィールドにアクセスするには、ヘッダーを展開するだけでなく、Communicationタブに切り替える必要があります。
- 画面を更新すると、ほとんどすべてのGUIオブジェクトが再作成され、名前またはIDで再度検索する必要があります。 画面を更新する前にスクリプトで作成されたオブジェクトにアクセスすると、エラーが発生します。
- SAP GUI要素と対話するすべてのVBScriptコマンドは、同期モードで実行されます。 SAPがコマンドを完了するまで、VBScriptコードの実行はそれ以上進みません。 これは非常に便利です。一時停止やループをどこにでも挿入する必要はありません。画面上の変更を確認したり、メッセージボックスが表示されるのを待ったりする必要はありません。
- スクリプトが実行され、1つのSAPウィンドウ(モード)と対話している間、他のSAPモードとWindowsまたは他のアプリケーションの両方で安全に作業できます。
私のスクリプトはSAPから直接実行されます。 これを行うために、SAPでは、タイプ「Webアドレスまたはファイル」のオブジェクトがお気に入りに作成され、スクリプトファイルへのフルパスを示します。

スクリプトには、WSF(Windows Script File)ファイルを使用します。このファイルは2つの部分で構成されています。
- 各スクリプトで使用されるコードと、すべてのスクリプトで使用されないいくつかの関数と手順を含む、ビッグネームSDK.vbsの下の共通ファイル
- 実際、私のタスクを実行するVBScript自体。 VBScriptは、起動元のSAPウィンドウでコマンドを正確に実行します。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> … … </script> </job>
すなわち WSFは、いくつかのスクリプト(さまざまなプログラミング言語)で構成でき、両方とも別々のファイルに散在しており、WSF自体に登録されています。 WSFを起動すると、SDK.vbsファイルのコードが最初に実行され、次にスクリプト自体のコードが実行されます。 なぜなら WSFはSAPから直接実行されます-WSFは、起動されたウィンドウとまったく同じウィンドウで実行されることが保証されています。 アクティブなセッションはSet session = application.ActiveSession()コマンドで決定されます 。
SDK.vbsは、SAP接続コードとアクティブなセッション定義、およびいくつかのサポート手順と機能で構成されています。
さらに、スクリプトでは、便宜上、いくつかのオブジェクトと変数が定義されています。
- Wnd0およびUserArea-ほぼすべての場所で使用され、
- メニューバー、ステータスバー、およびユーザー名-一部のスクリプト。
追加の手順と機能:
- トランザクション開始。
- Enter、F3、F5、F8ボタンを押すことのエミュレーション。
- 記録用のファイルを作成する機能を備えたcsvまたはtxtファイルを開くためのダイアログ。 書き込み用のファイルは同じフォルダに作成され、同じ名前を持ちますが、拡張子の前に「out」が追加されます。 読み取り用のファイルは、BOMを使用したUTF-8エンコーディングにしないでください。 最初の行を読み取るとき、ファイルの先頭の3バイト(#EFBBBF)がさらに読み取られます。これにより、読み取り行をSAPフィールドに挿入するときにエラーが発生します。
- テーブルの1行を埋めます(トランザクションME51Nの場合)。
- クリップボードを操作します。
' WScript.Shell Set WshShell = WScript.CreateObject("WScript.Shell") ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' SAP ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Set SapGuiAuto = GetObject("SAPGUI") ' GuiApplication (COM-) Set application = SapGuiAuto.GetScriptingEngine() ' GuiSession - , SAP ' .. WSF SAP, Set session = application.ActiveSession() WScript.ConnectObject session, "on" WScript.ConnectObject application, "on" ' GuiMainWindow Set Wnd0 = session.findById("wnd[0]") ' GuiMenubar Set Menubar = Wnd0.findById("mbar") ' GuiUserArea Set UserArea = Wnd0.findById("usr") ' GuiStatusbar Set Statusbar = Wnd0.findById("sbar") ' UserName = session.Info.User ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Sub startTransaction(transaction_name) session.StartTransaction transaction_name End Sub ' "Enter" Sub pressEnter() Wnd0.sendVKey 0 End Sub ' F2 Sub pressF2() Wnd0.sendVKey 2 End Sub ' F3 Sub pressF3() Wnd0.sendVKey 3 End Sub ' F5 Sub pressF5() Wnd0.sendVKey 5 End Sub ' F8 Sub pressF8() Wnd0.sendVKey 8 End Sub ' , Function selectFile(createOuputFile) Set objDialog = CreateObject("UserAccounts.CommonDialog") ' With objDialog .InitialDir = WshShell.SpecialFolders("Desktop") ' - .Filter = " (*.csv;*.txt)|*.csv;*.txt" result = .ShowOpen End With ' - If (result = 0) Then WScript.Quit inputFile = objDialog.FileName ' Set fso = CreateObject("Scripting.FileSystemObject") Set inputStream = fso.OpenTextFile(inputFile) ' ? If (createOuputFile) Then outputFile = Left(inputFile, Len(inputFile) - 3) & "out" & Right(inputFile, 4) Set outputStream = fso.CreateTextFile(outputFile, True) ' selectFile = Array(inputStream, outputStream) Else ' Set selectFile = inputStream End If End Function ' ( ME51N) Sub fill_row(row, material, kolvo, zavod, zatreboval) Set grid = session.findById(UserArea.findByName("GRIDCONTROL", "GuiCustomControl").Id & "/shellcont/shell") grid.modifyCell row, "KNTTP", "K" ' grid.modifyCell row, "MATNR", material ' grid.modifyCell row, "MENGE", kolvo ' grid.modifyCell row, "NAME1", zavod ' grid.modifyCell row, "LGOBE", "0001" ' grid.modifyCell row, "AFNAM", zatreboval ' End Sub ' Set, get and clear ClipBoard text in VBScript ' CLEAR - QuickClip("") ' SET - QuickClip("Hello World!") ' GET - Result = QuickClip(Null) Function QuickClip(input) '@description: A quick way to set and get your clipboard. '@author: Jeremy England (SimplyCoded) If IsNull(input) Then QuickClip = CreateObject("HTMLFile").parentWindow.clipboardData.getData("Text") If IsNull(QuickClip) Then QuickClip = "" Else CreateObject("WScript.Shell").Run "mshta.exe javascript:eval(""document.parentWindow.clipboardData.setData('text','" & Replace(Replace(input, "'", "\\u0027"), """", "\\u0022") & "');window.close()"")", 0, True End If End Function
以下に、コメントと簡単な説明を含むスクリプトの例を示します。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> ' startTransaction("IQ09") ' " " UserArea.findById("btn%_SERNR_%_APP_%-VALU_PUSH").Press() ' " " session.findById("wnd[1]/tbar[0]/btn[24]").Press() ' "" (F8) pressF8() ' "" (F8) pressF8() </script> </job>
すなわち スクリプトを実行する直前に、たとえばExcelやテキストファイルなどのシリアル番号からクリップボードに列をコピーする必要があります。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> ' curr_date = Date() curr_month = Month(curr_date) curr_year = Year(curr_date) curr_day = Day(curr_date) date_begin = DateSerial(curr_year, curr_month, 1) date_end = DateSerial(curr_year, curr_month + 1, 0) ' startTransaction("MB51") ' / UserArea.findById("ctxtMATNR-LOW").Text = "100000" ' UserArea.findById("ctxtWERKS-LOW").Text = "9999" ' UserArea.findById("ctxtLGORT-LOW").Text = "0001" ' UserArea.findById("ctxtBWART-LOW").Text = "101" ' UserArea.findById("ctxtBUDAT-LOW").Text = date_begin ' - UserArea.findById("ctxtBUDAT-HIGH").Text = date_end ' - UserArea.findById("ctxtLIFNR-LOW").Text = "" UserArea.findById("ctxtBUKRS-LOW").Text = "" UserArea.findById("ctxtEBELN-LOW").Text = "" ' UserArea.findById("txtMAT_KDPO-LOW").Text = "" ' . UserArea.findById("txtZEILE-LOW").Text = "" ' . . UserArea.findById("txtMBLNR-LOW").Text = "" ' UserArea.findById("txtMJAHR-LOW").Text = "" ' pressF8() ' " " Wnd0.findById("tbar[1]/btn[48]").Press() ' " -> -> ..." Menubar.findById("menu[3]/menu[2]/menu[1]").Select() ' "X " session.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cmbG51_USPEC_LBOX").Key = "X" ' 3- session.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shellcont/shell").currentCellRow = 3 session.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shellcont/shell").clickCurrentCell() </script> </job>
スクリプトの開始時に、今月の最初と最後の日が決定されます。 また、前回のトランザクション開始後に入力できる入力フィールドがいくつかクリアされます。 テーブルには、以前に作成された形式(ユーザー固有)が使用されます。これはリストの3番目になります。 形式のシリアル番号は、コードで簡単に修正できます。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> ' curr_date = Date() curr_month = Month(curr_date) curr_year = Year(curr_date) curr_day = Day(curr_date) curr_month = curr_month - 1 date_begin = DateSerial(curr_year, curr_month, 1) date_end = DateSerial(curr_year, curr_month + 1, 0) ' startTransaction("VL06O") ' " - . " UserArea.findById("btnBUTTON6").Press() ' " ..." Wnd0.findById("tbar[1]/btn[17]").Press() ' session.findById("wnd[1]/usr/txtV-LOW").Text = "MY_FORMAT" ' "" (F8) pressF8() ' UserArea.findById("ctxtIT_WTIST-LOW").Text = date_begin UserArea.findById("ctxtIT_WTIST-HIGH").Text = date_end ' "" (F8) pressF8() ' " ..." Wnd0.findById("tbar[1]/btn[33]").Press() ' "X " session.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cmbG51_USPEC_LBOX").Key = "X" ' 3- session.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shellcont/shell").currentCellRow = 3 session.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shellcont/shell").clickCurrentCell() </script> </job>
スクリプトの開始時に、先月の最初と最後の日が決定されます。 トランザクション開始の残りのパラメーターは、以前に作成された形式MY_FORMAT_2で保存されます。 テーブルには、以前に作成された形式(ユーザー固有)も使用されます。これは、リストの3番目になります。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> zavod = InputBox(" ") If (zavod = "") Then WScript.Quit ' streams = selectFile(True) Set inputStream = streams(0) Set outputStream = streams(1) ' startTransaction("MM43") ' , Do While (Not inputStream.AtEndOfLine) ' UserArea.findById("ctxtRMMW1-VZWRK").Text = zavod ' material = inputStream.ReadLine() ' UserArea.findById("ctxtRMMW1-MATNR").Text = material ' "Enter" pressEnter() ' ": " UserArea.findById("tabsTABSPR1/tabpSP05").Select() ' "" UserArea.findById("tabsTABSPR1/tabpSP05/ssubTABFRA1:SAPLMGMW:2004/subSUB9:SAPLMGD2:2480/btnMBEW_PUSH").Press() ' price = UserArea.findById("subSUB3:SAPLMGD2:2802/txtMBEW-VERPR").Text ' price = Replace(price, ".", "") ' "" (F3) pressF3() ' "" (F3) pressF3() ' outputStream.WriteLine(material & vbTab & price) Loop ' "" (F3) pressF3() inputStream.Close() outputStream.Close() MsgBox "!", vbSystemModal Or vbInformation </script> </job>
平均スライド価格を取得する必要がある資料はテキストファイルにあり、列にあります。 スクリプトはトランザクションMM43を開始し、タブに切り替え、ボタンを押して目的のフィールドに移動します。 結果の価格は、材料とともに新しいファイルに書き込まれます(タブ経由)。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> ' curr_date = Date() curr_month = Month(curr_date) curr_year = Year(curr_date) date_begin = DateSerial(curr_year, curr_month, 1) ' startTransaction("VT16") ' "Enter" pressEnter() ' "" UserArea.findById("ctxtK_DALEN-LOW").Text = date_begin UserArea.findById("ctxtK_DALEN-HIGH").Text = "31.12.9999" ' UserArea.findById("ctxtK_SHTYP-LOW").Text = "0001" ' UserArea.findById("btn%_A_VSTEL_%_APP_%-VALU_PUSH").Press() Set table = session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE") table.findById("ctxtRSCSEL_255-SLOW_I[1,0]").Text = "1111" table.findById("ctxtRSCSEL_255-SLOW_I[1,1]").Text = "2222" table.findById("ctxtRSCSEL_255-SLOW_I[1,2]").Text = "3333" session.findById("wnd[1]/tbar[0]/btn[8]").Press() ' "" (F8) pressF8() ' " -> -> ..." Menubar.findById("menu[3]/menu[0]/menu[1]").Select() ' session.findById("wnd[1]/usr/lbl[1,3]").setFocus() ' "Enter" pressEnter() </script> </job>
輸送は、間隔から選択されます-現在の月の初日から12.31.9999まで。 現在の月の最初の日の日付は、スクリプトの最初に決定されます。 出荷ポイントが示されています。 生成されたレポートでは、リストの最初の形式が選択されます。
次の3つのスクリプトは、ロードの終了日と同じ日付の出荷済みの配送物をポストするためのものです。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> ' startTransaction("VL06O") ' " - . " UserArea.findById("btnBUTTON6").Press() ' " ..." Wnd0.findById("tbar[1]/btn[17]").Press() ' session.findById("wnd[1]/usr/txtV-LOW").Text = "MY_FORMAT_2" ' "" session.findById("wnd[1]/usr/txtENAME-LOW").Text = "" ' "" pressF8() ' "" pressF8() </script> </job>
事前に作成されたフォーマットがテーブルに使用されます。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> ' startTransaction("VT16") ' session.findById("wnd[1]/tbar[0]/btn[0]").Press() ' " " UserArea.findById("btn%_S_VBELN_%_APP_%-VALU_PUSH").Press() ' " " session.findById("wnd[1]/tbar[0]/btn[24]").Press() ' "" (F8) pressF8() ' "" (F8) pressF8() ' " -> -> ..." Menubar.findById("menu[3]/menu[0]/menu[1]").Select() ' session.findById("wnd[1]/usr/lbl[1,3]").setFocus() ' "Enter" pressEnter() </script> </job>
同様に、配達番号の列を最初にクリップボードにコピーする必要があります。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> ' startTransaction("VL06O") ' " " UserArea.findById("btnBUTTON4").Press() ' " " UserArea.findById("ctxtIT_WADAT-LOW").Text = "" UserArea.findById("ctxtIT_WADAT-HIGH").Text = "" ' " " UserArea.findById("btn%_IT_TKNUM_%_APP_%-VALU_PUSH").Press() ' " " session.findById("wnd[1]/tbar[0]/btn[24]").Press() ' "" (F8) pressF8() ' "" (F8) pressF8() ' " " - If (Wnd0.findById("tbar[1]/btn[18]").Text = " ") Then ' UserArea.findById("cntlGRID1/shellcont/shell").selectAll ' " -> " Menubar.findById("menu[4]/menu[7]").Select() ' ( ) WshShell.SendKeys "{HOME}{DELETE}{DELETE}" Else MsgBox " !", vbSystemModal Or vbExclamation ' "" (F3) pressF3() ' "" (F3) pressF3() End If </script> </job>
輸送番号の列は、最初にトランザクションVT16(前のスクリプト)の結果からクリップボードにコピーする必要があります。 トランザクションが完了した後:
- レポートに配信がない場合、対応するメッセージが表示され、スクリプトは終了します。
- レポートに配送がある場合、メニュー項目「出庫の転記」が選択され、最初の2文字(つまり、日)が表示された転記日付のウィンドウで削除されます。 次に、スクリプトが終了し、ユーザーは希望する日を入力してEnterを押す必要があります。
レポート内の配信の有無は、メニューの有無によって決まります。 事前有効化されたエラー処理スクリプト。
記事を書いている間に、出荷された配達物を1つに投稿するための最初の2つのスクリプトを組み合わせることにしました。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> '############################################################## ' startTransaction("VL06O") ' " - . " UserArea.findById("btnBUTTON6").Press() ' " ..." Wnd0.findById("tbar[1]/btn[17]").Press() ' session.findById("wnd[1]/usr/txtV-LOW").Text = "MY_FORMAT_3" ' "" session.findById("wnd[1]/usr/txtENAME-LOW").Text = "" ' "" pressF8() ' "" pressF8() Set grid = UserArea.findById("cntlGRID1/shellcont/shell") ' GuiGridView rowCount = grid.RowCount ' visibleRowCount = grid.VisibleRowCount ' ' , firstVisibleRow = visibleRowCount Do While (firstVisibleRow < rowCount) grid.firstVisibleRow = firstVisibleRow firstVisibleRow = firstVisibleRow + visibleRowCount Loop ' grid.SelectColumn("VBELN") ' grid.ContextMenu() grid.SelectContextMenuItemByText " " ' SAP pressF3() pressF3() pressF3() '############################################################## ' startTransaction("VT16") ' session.findById("wnd[1]/tbar[0]/btn[0]").Press() ' " " UserArea.findById("btn%_S_VBELN_%_APP_%-VALU_PUSH").Press() ' " " session.findById("wnd[1]/tbar[0]/btn[24]").Press() ' "" (F8) pressF8() ' "" (F8) pressF8() ' " -> -> ..." Menubar.findById("menu[3]/menu[0]/menu[1]").Select() ' ( "Lexa_1") session.findById("wnd[1]/usr/lbl[1,3]").setFocus() ' "Enter" pressEnter() </script> </job>
スクリプトは、トランザクションVL06Oからの配信番号を含む列のコピーを使用し、テーブルを最後まで予備スクロールします(したがって、すべての配信がコピーされます)。
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> data_prihoda = InputBox(" : 010213, 01022013, 01.02.13, 01.02.2013") If (data_prihoda = "") Then WScript.Quit vremya_prihoda = InputBox(" : 0130, 01:30") If (vremya_prihoda = "") Then WScript.Quit ' Set inputStream = selectFile(False) ' startTransaction("VL32N") ' , Do While (Not inputStream.AtEndOfLine) ' postavka = inputStream.ReadLine() ' UserArea.findById("ctxtLIKP-VBELN").Text = postavka ' "Enter" pressEnter() ' "" UserArea.findById("tabsTAXI_TABSTRIP_OVERVIEW/tabpT\02").Select() ' UserArea.findById("tabsTAXI_TABSTRIP_OVERVIEW/tabpT\02/ssubSUBSCREEN_BODY:SAPMV50A:1208/ctxtLIKP-TDDAT").Text = data_prihoda ' UserArea.findById("tabsTAXI_TABSTRIP_OVERVIEW/tabpT\02/ssubSUBSCREEN_BODY:SAPMV50A:1208/ctxtLIKP-TDUHR").Text = vremya_prihoda ' "Enter" , Do ' "Enter" pressEnter() Loop While (Len(Statusbar.text) > 0) ' "" Wnd0.findById("tbar[0]/btn[11]").Press() Loop ' "" pressF3() inputStream.Close() MsgBox "!", vbSystemModal Or vbInformation </script> </job>
. , , «», . - – Enter , .
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> ' zavod = InputBox(" ") If (zavod = "") Then WScript.Quit ' - sklad_source = InputBox(" -") If (sklad_source = "") Then WScript.Quit ' - sklad_destination = InputBox(" -") If (sklad_destination = "") Then WScript.Quit ' Set inputStream = selectFile(False) ' startTransaction("MB1B") ' UserArea.findById("ctxtRM07M-BWARTWA").Text = "311" ' UserArea.findById("ctxtRM07M-WERKS").Text = zavod ' - UserArea.findById("ctxtRM07M-LGORT").Text = sklad_source ' "Enter" pressEnter() ' - UserArea.findById("ctxtMSEGK-UMLGO").Text = sklad_destination ' "Enter" pressEnter() ' Set simpleContainer = UserArea.findById("sub:SAPMM07M:0421") RowCount = simpleContainer.LoopRowCount intRow = 2 ' , Do While (Not inputStream.AtEndOfLine) ' stroka = inputStream.ReadLine() ' arr = Split(stroka, vbTab) material = arr(0) kolvo = Replace(arr(1), " ", "") ' SAP_pos = (intRow - 2) Mod RowCount UserArea.findById("sub:SAPMM07M:0421/ctxtMSEG-MATNR[" & SAP_pos & ",7]").Text = material UserArea.findById("sub:SAPMM07M:0421/txtMSEG-ERFMG[" & SAP_pos & ",26]").Text = kolvo ' "", If (SAP_pos = (RowCount - 1)) Then Wnd0.findById("tbar[1]/btn[19]").Press() intRow = intRow + 1 If (intRow > 1000) Then inputStream.Close() MsgBox " 999 !", vbSystemModal Or vbCritical WScript.Quit End If Loop ' "Enter" pressEnter() inputStream.Close() MsgBox "!", vbSystemModal Or vbInformation </script> </job>
, ( ), , . 1000 .
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> ' zavod = InputBox(" ") If (zavod = "") Then WScript.Quit ' - sklad_source = InputBox(" -") If (sklad_source = "") Then WScript.Quit ' - sklad_destination = InputBox(" -") If (sklad_destination = "") Then WScript.Quit ' Set inputStream = selectFile(False) ' startTransaction("MB1B") ' UserArea.findById("ctxtRM07M-BWARTWA").Text = "311" ' UserArea.findById("ctxtRM07M-WERKS").Text = zavod ' - UserArea.findById("ctxtRM07M-LGORT").Text = sklad_source ' "Enter" pressEnter() ' - UserArea.findById("ctxtMSEGK-UMLGO").Text = sklad_destination ' "Enter" pressEnter() ' Set simpleContainer = UserArea.findById("sub:SAPMM07M:0421") RowCount = simpleContainer.LoopRowCount intRow = 2 ' , Do While (Not inputStream.AtEndOfLine) ' stroka = inputStream.ReadLine() ' arr = Split(stroka, vbTab) material = arr(0) serial = arr(1) SAP_pos = (intRow - 2) Mod RowCount UserArea.findById("sub:SAPMM07M:0421/ctxtMSEG-MATNR[" & SAP_pos & ",7]").Text = material UserArea.findById("sub:SAPMM07M:0421/txtMSEG-ERFMG[" & SAP_pos & ",26]").Text = "1" ' "Enter" pressEnter() ' session.findById("wnd[1]/usr/tblSAPLIPW1TC_SERIAL_NUMBERS/ctxtRIPW0-SERNR[0,0]").Text = serial ' "" session.findById("wnd[1]/tbar[0]/btn[0]").Press() ' "", If (SAP_pos = (RowCount - 1)) Then Wnd0.findById("tbar[1]/btn[19]").Press() intRow = intRow + 1 If (intRow > 1000) Then inputStream.Close() MsgBox " 999 !", vbSystemModal Or vbCritical WScript.Quit End If Loop ' "Enter" pressEnter() inputStream.Close() MsgBox "!", vbSystemModal Or vbInformation </script> </job>
, , 1.
<job> <script language="VBScript" src="SDK.vbs"></script> <script language="VBScript"> zavod = 8888 zatreboval = 12345 mvz = "7777666666" note = " " ' . - , 0 itemsArray = Array( _ Array(111111, 50, " 4"), _ Array(222222, 50, " "), _ Array(333333, 0, " "), _ Array(444444, 0, " "), _ Array(555555, 10, ""), _ Array(666666, 0, " "), _ ) ' startTransaction("ME51N") ' - NB UserArea.findByName("MEREQ_TOPLINE-BSART", "GuiComboBox").Key = "NB" ' , Set buttonTop = UserArea.findByName("SUB1:SAPLMEVIEWS:4000", "GuiSimpleContainer").findByName("DYN_4000-BUTTON", "GuiButton") If (Right(buttonTop.Tooltip, 2) = "F2") Then buttonTop.Press() ' guiTexteditId = UserArea.findByName("TEXT_EDITOR_0101", "GuiCustomControl").Id & "/shellcont/shell" UserArea.findById(guiTexteditId).Text = note pos = 0 For Each item In itemsArray If (item(1) > 0) Then ' fill_row pos, item(0), item(1), zavod, zatreboval ' "Enter" pressEnter() ' UserArea.findByName("COBL-KOSTL", "GuiCTextField").Text = mvz ' "Enter" pressEnter() pos = pos + 1 End If Next MsgBox "!", vbSystemModal Or vbInformation </script> </job>
, . 0, . . ( ).
, , .
...