Keresés

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

  • Fferi50

    őstag

    válasz Telda #44739 üzenetére

    Szia!
    Bocs, hogy értetlenkedek, ez azért van mert nem ismerem az SAP-t (ez persze nem lehet mentség) és így csak "butákat" tudok kérdezni. De régebbi ismereteim szerint az ilyen rendszerekben szokott lenni olyan lehetőség, hogy adatfeltöltés fájlból és ez általában része az alapnak. Meg persze lehet API specifikáció is hozzá.
    Amit a leírás alapján te szeretnél, az úgy gondolom, nem fűzhető össze egy tranzakcióvá, mivel több soros lenne az eredmény. Lehet belső ciklust csinálni, ahol figyeled a Material értékét és amíg egyezik, nem kell ismét bekérni.
    Talán érdemes lenne kinyomozni a cég SAP kapcsolattartóját és vele beszélni erről.
    Én biztosan a textfájlos inputot favorizálnám. Mivel ismered a cél formátumát, talán mégis lehet valami kaput találni, amit ki lehet nyitni a tömeges adatbevitelre.
    Üdv.

  • Mutt

    aktív 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

    [ Szerkesztve ]

    A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel

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