Hirdetés

Új hozzászólás Aktív témák

  • Mutt

    senior tag

    válasz Telda #44739 üzenetére

    Szia,

    Nincs CS01 hozzáférésem, így nem tudtam tesztelni de ezt próbáld meg:

    Dim objExcel
    Dim objSheet, intRow, i
    Set objExcel = GetObject(, "Excel.Application")
    Set objSheet = objExcel.Workbooks("dj feltolt").Sheets("Munka1")

    For i = 2 To objSheet.UsedRange.Rows.Count
    COL1 = Trim(CStr(objSheet.Cells(i, 1).Value)) 'Column1

    'CS01 fõképernyõn anyagszám / plant / BOM usage megadása
    session.findById("wnd[0]/usr/ctxtRC29N-MATNR").Text = COL1
    'session.findById("wnd[0]/usr/ctxtRC29N-WERKS").text = "0610"
    session.findById("wnd[0]/usr/ctxtRC29N-STLAN").Text = "1"
    session.findById("wnd[0]/usr/txtRC29N-WTEXT").SetFocus
    session.findById("wnd[0]/usr/txtRC29N-WTEXT").caretPosition = 0
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0

    'component screen amiről csak akkor kell elmenni, ha másik anyagot kell felépíteni
    j = -1
    Do
    j = j + 1
    COL2 = Trim(CStr(objSheet.Cells(i + j, 2).Value)) 'Column2
    COL3 = Trim(CStr(objSheet.Cells(i + j, 3).Value)) 'Column3
    session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-POSTP[1," & CStr(j) & "]").Text = "L"
    session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-IDNRK[2," & CStr(j) & "]").Text = COL2
    session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[5," & CStr(j) & "]").Text = COL3
    session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[5," & CStr(j) & "]").SetFocus
    session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[5," & CStr(j) & "]").caretPosition = 5
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0
    Loop Until COL1 <> Trim(CStr(objSheet.Cells(i + j + 1, 1).Value))

    'mentés
    session.findById("wnd[0]/tbar[0]/btn[11]").press

    'léptetni kell az i értékét
    i = i + j
    Next i
    MsgBox "Keszen vagyunk"

    Neked egy fájlban vannak a létrehozandó anyagtörzsek (az aktuális mindig a COL1 változóban van), így addig nem kell kilépned CS01-ből amíg új anyaghoz nem érsz.
    A fenti megoldásban van egy Do - Loop ciklus ami addig adogatja a komponenseket a listához amíg a COL1 értéke meg nem változik.

    A másik fontos dolog, hogy a rácson hivatkozni SAP-ban sor és oszlop azonosítóval lehet.
    pl. .. CMAT/ctxtRC29P-IDNRK[2,0] mindig a második mezőt az első soron jelenti, vagyis a komponenst.
    A sor változót kell léptetni, hogy a komponensek egymás alá kerüljenek és ne mindig az első sor legyen felülírva. Ezért van mindegyik sorban a j belső változó meghívva.

    Ami fontos, hogy a script el fog hasalni ha olyan sorra hivatkozol ami a nem látható képernyő része. A képernyőmentéseden látszik 19 sor, de ha kisebbre teszed a GUI-t akkor lehet hogy csak 5 sort fogsz látni. Ezt kivédeni úgy lehet, hogy mielőtt írnál megnézed hogy létezik-e az adott sor. Tippre vhogy így:
    On Error Resume Next
    If session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-POSNR[0," & CStr(j) & "]").Text <> Right("000" & j, 4) Then
    MsgBox "hiba"
    End If
    On Error GoTo 0

    Megkértem a jogosultságot a CS01-hez így ha majd megkapom akkor tudom tesztelni, hogy az elmélet párosul-e a valósággal.

    üdv

Új hozzászólás Aktív témák

Hirdetés