Bài viết: SAP Scripting – Excel và SAP (P3)

Liên hệ QC

kyo

Nguyễn Khắc Duy
Thành viên danh dự
Tham gia
4/6/06
Bài viết
901
Được thích
2,714
SAP Scripting - Excel và SAP (P3)


Phần 3: Hiểu thêm về cấu trúc lệnh của SAP

Trong phần 1 tôi đã chỉ bạn cách để ghi lại một script và với phần 2, bạn được học về cách gán script đó vào Excel cũng như nhân rộng thông số bạn đưa vào SAP một cách dễ dàng thông qua Excel và VBA. Tuy nhiên, nếu bạn không hiểu một chút về câu lệnh SAP, trong nhiều trường hợp, bạn sẽ không thể đối phó được, vì xét cho cùng, bạn dùng VBA để biến các thông số tĩnh (ví dụ, "M12345") thành thông số động(ví dụ, Sheet1.Range("A" & i).Value) thì với SAP cũng vậy, bạn cần biến những số 0, 1, 2,… của SAP thành số động như biến i, biến j,…

Trước tiên, bạn hãy xem qua hình sau:

ysAI4bZY437NE-dw2i7X-HiXJPqEvqeOiXiyPkeT3kbFZ3LT8xQWancb2TLLIZ4BOoWgz_kT7l2kOz2zOSKf9hMC13OcwX9kaMYDffWP9Q-q6ZX07buS6OVvQX3VrX8wnUYAJSXKIHMuVHcigu0cKec_vcFhX9SufiIOjX6wuCok5lsnKyQD1I1INminDfJ8LiHJ14t10jEFV_klXcj-LJNEtNbX0KiEvGihHPyrs-e3xHPCKpWqKd_0Ngt8J9t8BQh_wwSnlF35JNpipYxhyFV2jtcfeYHsZbZ0o9q_c11R7vSzzwJk96V8eWCqOwiQuXjAMqnm3vxA1AzJEq0BmvH8k8JyZDjM2jDURXChuVklYyxM8i6xJodcNWmgt8VgXxmAaeBuf_I6WXjqbFsMGk2GwHWRJyA4S02bdojar4NoFLRKjfv-8HUDqelPFW-5TEFHRDXKvLS3zg828qAKnUnCIhM6eh-CY1tHMj7tIefAPE6VqCguU3GkgGXLXzRaANU6ONggr-CzSL_H88kYqMzMnuUgn5NyGua2xm5YFXVv24maBKXk4YwcZZAYurSdwBoVFiRRanXDlcJhkjufp2eWzXGvBcS04SX3GnqyYEl3sOeqGRsy=w893-h459-no


Như hình trên, bạn có thể phần nào mường tượng được cấu trúc của SAP.
- wmd là cửa sổ. Với cửa số đầu tiên đang tương tác, nó là wmd[0]
- mbar là thanh thực đơn menu đầu tiên của SAP.
- tbar là thanh tiêu đề phía dưới menu. Và tương ứng, khi chúng ta có nhiều thanh tiêu đề phía dưới, số thứ tự sẽ được đánh cao dần bắt đầu từ [0] rồi đến [1],…
- usr là một báo hiệu sử dụng các đối tượng trong SAP.
- sbar là thanh trạng thái ở phía cuối cùng cửa sổ. Thanh trạng thái này sẽ cho bạn biết bạn làm đúng hay sai, hay thông báo một số thông tin trong quá trình sử dụng SAP.
- Các số bạn có thể thấy như [0], [1], [1,2],… Nó là số thứ tự của một đối tượng nào đó, ví dụ cửa sổ đầu tiên, cửa sổ thứ hai,… hoặc đôi khi nó có hai chiều là ám chỉ về một đối tượng có cột và hàng. Và theo mặc định của SAP thì số đầu tiên là số 0 và sau đó sẽ được cộng dần lên.

Để cụ thể hơn, chúng ta cùng coi lại script trong phần 2 nhé.

session.findById("wnd[0]").maximize - Dòng lệnh này sẽ làm cửa sổ đầu tiên được phóng lớn ra, vì wmd[0].
session.findById("wnd[0]/tbar[0]/okcd").text = "mm02" - Dòng này có nghĩa là ngay tại thanh tiêu đề đầu tiên phía dưới thanh menu, trong cửa sổ đầu tiên, và đối tượng okcd chính là ô để gõ t-code, ô này có thuộc tính Text chính là thuộc tính chứa chữ, và nó sẽ chứa chữ mm02.
session.findById("wnd[0]").sendVKey 0 - Đây chính là lấy hành động gửi mã bàn phím số 0 (chính là phím Enter), tại cửa sổ đầu tiên.
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").text = "P11220169" - Ở đây báo hiệu về việc tương tác đối tượng trong cửa sổ thứ nhất, và đây là đối tượng ctxt (combo text field). Nếu bạn nhớ lại trong SAP, bạn sẽ thấy ở đoạn này, bạn sẽ được yêu cầu nhập 2 giá trị vào 2 ô, và dòng lệnh này để nhập vào ô thứ nhất, chính là ô mang tên RMMG1-MATNR.
session.findById("wnd[1]/usr/tblSAPLMGMMTC_VIEW").getAbsoluteRow(14).selected = true - Ở đây bạn thấy liền wnd chuyển sang số 1, có nghĩa là một cửa sổ mới hiện lên, và kích hoạt đối tượng bảng tbl (table) với tên SAPLMGMMTC_VIEW. Đồng thời, ở đây do bạn chọn dòng số 14, nên SAP ghi lại câu lệnh lấy dòng số 14 và đặt thuộc tính selected là True.

session.findById("wnd[1]/tbar[0]/btn[0]").press - Nhấn chọn nút đồng ý btn (button) đầu tiên, tại cửa sổ thứ hai và thanh tiêu đề đầu tiên.

session.findById("wnd[0]/tbar[0]/btn[11]").press - Nhấn chọn nút Save cũng chính là nút thứ 12 tại cửa sổ đầu tiên và thanh tiêu đề đầu tiên.


Bạn có thể thấy được một cấu trúc chung chứ? Chỉ trừ tên của đối tượng là khó nhớ, phần còn lại thì rất dễ dàng cho bạn phán đoán ra nếu bạn để ý. Ngoài ra, một số thuộc tính mà bạn cũng dễ nhận biết đó chính là:
- .Text: thuộc tính này sẽ giúp bạn lấy chữ có sẵn trong một đối tượng hoặc gán ký tự khác vào đối tượng này (nếu đây là đối tượng cho phép nhập liệu).
- .Press: nhấn một nút nào đó.
- .setFocus: chính là con trỏ chuột của bạn. Khi bạn bấm vào SAP trong quá trình tạo script, bạn bấm ở đâu, con trỏ chuột bạn theo đấy và SAP sẽ lưu với thuộc tính này. Đây cũng là thuộc tính không cần thiết và bạn có thể bỏ. Tuy nhiên, đây cũng là điểm lợi hại để giúp bạn tìm hiểu về các tên của đối tượng khác mà bạn không biết, chỉ đơn giản là ghi script và lấy chuột bấm vào nó thôi.

Khi bạn đã hiểu được những điểm này rồi, đặc biệt là phần số thứ tự, bạn sẽ dễ dàng biến nó từ một con số tĩnh, sang một con số động để tận dụng sức mạnh của VBA.

Do đó, trở lại, tôi muốn nhắn nhủ với bạn là, script là miễn phí, bạn có thể tạo bao nhiêu cái cũng được. Hãy cố gắng thử hết các trường hợp có thể, và cái gì không biết thì cứ ghi lại script, bạn sẽ có được những cái tên mà bạn cần để đưa vào VBA của bạn.

Một số bài viết có liên quan:
1/ SAP Scripting - Excel và SAP (P2)
2/ SAP Scripting - Excel và SAP (P1)
3/ Xử lý các lỗi của công thức (phần 1)
4/ Chiêu thứ 27: Chuyển đổi con số dạng văn bản sang số thực
5/ Làm việc với công thức mảng trong Excel
6/ Các lỗi thường gặp trong Excel
7/ 6 thói quen cá nhân khi làm việc với dữ liệu và Excel
8/ 29 cách tiết kiệm thời gian với các công thức Excel (phần 3)
9/ 29 cách tiết kiệm thời gian với các công thức Excel (phần 2)
10/ 29 cách tiết kiệm thời gian với các công thức Excel (phần 1)
 
Lần chỉnh sửa cuối:
Upvote 0
Để tránh thông báo của SAP dừng script đang chạy, các bạn có thể vào SAP Launch Pad, bấm Option và bỏ dấu chọn như trong hình


tiAzudS.png


Cách thử 2 là sử dụng 1 macro để gỡ bỏ dấu tick này vì SAP lưu thông tin này trong Windows Registry

PHP:
Public Function RegRead(Path As String) As StringDim ws As ObjectOn Error GoTo ErrHandlerSet ws = CreateObject("WScript.Shell")RegRead = ws.RegRead(Path)Exit FunctionErrHandler:RegRead = ""End Function
Sub RegistryLesen()Dim index As Stringindex = RegRead("HKEY_CURRENT_USER\Software\SAP\SAPGUI Front\SAP Frontend Server\Security\WarnOnAttach")If index = "1" Then    MsgBox "Benachrichtigen, wenn sich ein Scropt an SAP GUI anbindet: nict aktiv"Else    MsgBox "Benachrichtigen, wenn sich ein Scropt an SAP GUI anbindet: aktiv"End IfEnd Sub
Sub RegistrySchreiben1()Dim wsh As ObjectSet wsh = CreateObject("WScript.Shell")   With wsh      .RegWrite "HKEY_CURRENT_USER\Software\SAP\SAPGUI Front\SAP Frontend Server\Security\WarnOnAttach", "1", "REG_DWORD"   End With   Set wsh = NothingEnd Sub
Sub RegistrySchreiben0()Dim wsh As ObjectSet wsh = CreateObject("WScript.Shell")   With wsh      .RegWrite "HKEY_CURRENT_USER\Software\SAP\SAPGUI Front\SAP Frontend Server\Security\WarnOnAttach", "0", "REG_DWORD"   End With   Set wsh = NothingEnd Sub
 
Lần chỉnh sửa cuối:
Giờ mới đọc các bài viết về SAP Scripting. Công việc hằng ngày của mình đang rất cần những công cụ này để hiệu quả hơn. Mỗi tội hình trong bài viết không thấy đâu nữa huhu
 
Web KT
Back
Top Bottom