Bestände ausbuchen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Bestände ausbuchen

Beitrag von turtle47 »

Hi Moni,
Wenn ein einen Artikel verkaufe, gebe ich per Hand im Artikelblatt in der Spalte Verkauf die Menge ein (d.h. ich erhöhe die Menge, die schon drin steht) damit ich weiß, wieviel ich am Jahresende davon verkauft habe. Kann man sowas auch mit einem Makro machen? Ich weiß gar nicht, wie ich mit sowas anfangen soll, bin ein blutiger Anfänger in der Richtung!
Sollte normalerweise kein Problem sein. Habe vor kurzem so was ähnliches schon mal geschrieben, z.B. nach bestimmten Kriterien aus einem Vorgabeblatt in einem zweiten Blatt zu suchen und zu buchen.

Code: Alles auswählen

Sub Search_Engine
    oDoc = ThisComponent  
    oSheetOut = oDoc.Sheets.getByName("output")
  
    oCell = oSheetOut.getCellRangeByName("J5")
    Customer_ID_1 = oCell.string
  
    for i = 15 to 25
    oCell = oSheetOut.getCellRangeByName("K" & i)
    Order_ID_1 = oCell.string
    Searching_for_1 = Customer_ID_1 & Order_ID_1
    if Order_ID_1 = "" Then
    msgbox "Searching ""output_sheet"" finish or no more ID´s found!", 64 , "Searching"
    exit sub
    end if
    oCell = oSheetOut.getCellRangeByName("L" & i)
    Order_Code = oCell.value
   
    oCell = oSheetOut.getCellRangeByName("M" & i)
    Order_Qty = oCell.value
    oSheetData = oDoc.Sheets.getByName("database")
   
    for j = 3 to 20' 20 is example for count rows
   
    oCell = oSheetData.getCellRangeByName("B" & j)
    Customer_ID_2 = oCell.value
   
    oCell = oSheetData.getCellRangeByName("C" & j)
    Order_ID_2 = oCell.value
   
    if Searching_for_1 = Customer_ID_2 & Order_ID_2 Then
   
    for k = 10 to 48 step 2
    oCell1 = oSheetData.getCellByPosition(k ,  j - 1)
    Data_ID_2 = oCell1.value

    if Order_Code = Data_ID_2 then
   
    oCell_1 = oSheetData.getCellByPosition( k + 1 ,  j -1 )
    Quantity1 = oCell_1.value
    new_Quantity = Quantity1 - Order_Qty
   
    oCell_1.value = new_Quantity
   
    end if   
    next k
   
    end if
       next j
next i   
   
End Sub
Und gibt es auch die Möglichkeit, ein Makro zu schreiben, damit er mir die Rechnungen, die als Pdf speichere, in eine List einträgt, mit Datum, Rechnungsnummer, Namen und Betrag?
Sollte auch keine grosse Sache sein.

Am besten mal eine Beispieldatei hochladen, dazu vorher hier im Forum anmelden (es lohnt sich, weil es ist echt ne tolle Truppe hier), um die Struktur Deines Dokumentes zu kennen.

Bis dann.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
piratenbraut
Beiträge: 8
Registriert: Fr, 24.10.2008 21:41

Re: Bestände ausbuchen

Beitrag von piratenbraut »

Hallo Jürgen,

ich hab dir mal eben das Warenlager geschickt. Es ist nur ein Probewarenlager, das Orginale rühr ich für so was net an. Ich muss heut eh noch Rechnungen schreiben. Im Abverkaufsblatt stehen rund 900 Artikel und nicht nur 5, wie hier. Und im Blatt Rechnungen sollen die Rechnung nach Datum, Nr, Name und Betrag per Makro eingefügt werden. Vielleicht können wir auch ein paar Makros verbinden oder nur eins draus machen. Immer drank denken: bin blutiger Anfänger und stolz auf mich, überhaupt soweit gekommen zu sein.

Und noch was: ich will wissen wie man so was schreibt, wie man auf die Ideen kommt, will ja schließlich auch was lernen.

Danke erstmal für deine schnelle Antwort, bleibe heute einfach online und schau immer wieder nach nach Antwort

Liebe Grüße
Moni
Dateianhänge
Warenlagerprobe.ods
Anbei das Warenlager
(55.74 KiB) 73-mal heruntergeladen
hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Re: Bestände ausbuchen

Beitrag von hawe »

Hallo,

ich hab übungs- und testweise einige ältere Excel-Makros nach OO Calc portiert. Das ist auch ein Rechnungs/Fakturierungs-Beispiel darunter. Die Makros sind allerdings hauptsächlich VBA mit den notwendigen BASIC anpassungen. Wenn's DIch interessiert dann sag Bescheid :
Zuletzt geändert von hawe am Sa, 25.10.2008 19:11, insgesamt 1-mal geändert.
Gruss HW
Win7/SuSe 11.2 - LO 3.3
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Bestände ausbuchen

Beitrag von turtle47 »

Hallo Moni,
piratenbraut hat geschrieben:Es ist nur ein Probewarenlager, das Orginale rühr ich für so was net an
Das ist auch sinnvoll bei so einer Sache.
piratenbraut hat geschrieben:Und noch was: ich will wissen wie man so was schreibt, wie man auf die Ideen kommt, will ja schließlich auch was lernen.
Deshalb machen wir das Step by Step.

In der angehängte Datei findes Du ein neues Modul mit dem Namen "Ausbuchen".
Darin ist das Makro "Ware_ausbuchen" enhalten. Dieses läuft wie folgt ab:
Zuerst wird geprüft ob zu einer Artikelnummer auch eine Mengenangabe vorhanden ist.
Wenn nicht , dann wird Dir das über eine Messagebox mitgeteilt und das Makro beendet.

Wenn Mengenangabe und Artikelnummer in Ordnung sind dann werden diese in einer
Schleife ausgelesen und die Artikelnummern in dem Sheet "Abverkauf" verglichen und
bei Übereinstimmung die Anzahl in der Spalte "Verkauf" hinzuaddiert.

Der Code ist entsprechend mit Kommentaren versehen damit Du nachvollziehen kannst
was da passiert.

Man müsste noch eine Sicherheit einbauen, damit die Buchung nicht versehentlich mehrfach
durchgeführt werden kann. Dazu habe ich auch schon ein paar Ideen.

In der Spalte "Artikelnr." habe ich Dir über Menue > Daten > Gültigkeit ein Dropdownmenue
hizugefügt um die entsprechenden Artikel einfacher auszuwählen. Ich hoffe das war in
Deinem Sinne.

Aber wie gesagt, alles der Reihe nach.

Erste Fragen dazu?

Jürgen
Warenlagerprobe_V1.ods
(56.03 KiB) 80-mal heruntergeladen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
piratenbraut
Beiträge: 8
Registriert: Fr, 24.10.2008 21:41

Re: Bestände ausbuchen

Beitrag von piratenbraut »

Mann bist du schnell, lach.
Okay, Makro hab ich mir angeschaut, das Lager ist nur zum lesen geöffnet, ausprobieren kann ich es leider nicht. Aber ich denke, das makro hab ich verstanden. Wenn ich mehr Artikel habel, ändere ich die Schleife 2 bis 5 auf 2 bis ... Artikel. Das Drop and Down menü ist okay, meine ganzen Artikel sind zwar mit Artikelnummern versehen, aber es erspart Arbeit.
Also soweit keine Fragen zum makro. Er darf aber auch ins minus abverkaufen, denn manchmal bestell ich Ware und schreib die Rechnung schon, dann buche ich erst im Nachhinein. Geht das auch?
Ne Sicherheit wäre okay, damit nichts doppelt abverkauft wird. Wie willst das machen?

Okay, bis soweit alles okay und verstanden

Lieben Gruß Moni :D
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Bestände ausbuchen

Beitrag von turtle47 »

Hallo Moni,
piratenbraut hat geschrieben:das Lager ist nur zum lesen geöffnet, ausprobieren kann ich es leider nicht
Du musst das Dokument erst auf Deinem Rechner abspeichern, dann kannst Du es auch ausprobieren.
piratenbraut hat geschrieben:Er darf aber auch ins minus abverkaufen, denn manchmal bestell ich Ware und schreib die Rechnung schon, dann buche ich erst im Nachhinein. Geht das auch?
Das Makro bucht auch ins Minus.

Hier vorab schon mal der Code für die Rechnungen in die Rechnungsliste zu übertragen:

Code: Alles auswählen

Sub Liste_Rechnung
	oDoc = ThisComponent 
	ReSheet = oDoc.Sheets.getByName("Rechnung")'Sheet Rechnung ansprechen
	Cell_ReDatum  = ReSheet.getCellRangeByName("F9").value 'Zelle auslesen
	Cell_ReNr     = ReSheet.getCellRangeByName("F11").value
	Cell_ReName   = ReSheet.getCellRangeByName("B13").String
	Cell_ReBetrag = ReSheet.getCellRangeByName("F36").value	
	ReSheetSt = oDoc.Sheets().getByName("Rechnungen")'Sheet Rechnungen ansprechen
	oCellCursor =ReSheetSt.createCursor()
	oCellCursor.GotoEndOfUsedArea(True)	
	End_Row = oCellCursor.getRangeAddress.EndRow 'letzte benutzte Zeile auslesen
	EndRow = End_Row + 2 'Der Index der Zeilen fängt bei Null an zu zählen
	ReSheetSt.getCellRangeByName("A" & EndRow ).Value = Cell_ReDatum 'in Zelle schreiben
	ReSheetSt.getCellRangeByName("B" & EndRow ).Value = Cell_ReNr
	ReSheetSt.getCellRangeByName("C" & EndRow ).String = Cell_ReName
	ReSheetSt.getCellRangeByName("D" & EndRow ).value = Cell_ReBetrag
End Sub
piratenbraut hat geschrieben:Ne Sicherheit wäre okay, damit nichts doppelt abverkauft wird. Wie willst das machen?
Na, die Schaltfläche so lange deaktivieren bis der Sheetinhalt für eine neue Rechnung gelöscht wird. :lol:

Kleiner Tipp am Rande. An Deiner Stelle würde ich in der Spalte "Betrag" folgende Formel verwenden:

Code: Alles auswählen

=WENN(E20="";"";A20*E20)
(Beispiel für Zelle F20. Dort eintragen und dann runterziehen)
Dann werden dort die unschönen Nullen nicht angezeigt. :D

Viel Spass bei Ausprobieren.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
piratenbraut
Beiträge: 8
Registriert: Fr, 24.10.2008 21:41

Re: Bestände ausbuchen

Beitrag von piratenbraut »

Ha du bist ein Held, echt!

habs gespeichert und es funktioniert supi! Deinen Tipp mit den Nullen bau ich noch ein und das andere Makro auch. Eine Frage hab ich noch: Das Drop and Drown - wie kann ich das für alle Artikel übernehmen? Im Beispiel sind es ja nur die 5, aber in echt sind es ja mehr. Wir haben uns da schon mal die Zähne dran ausgebissen und ein bisschen faul beim Rechnung schreiben darf man ja sein! :lol:

Erst mal lieben Dank und ich bin weiter am basteln!

Liebe Grüße
Moni
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Bestände ausbuchen

Beitrag von turtle47 »

Hallo Moni,
piratenbraut hat geschrieben:Eine Frage hab ich noch: Das Drop and Drown - wie kann ich das für alle Artikel übernehmen?
Das hatte bereits oben vorsorglich schon mal geschrieben:
turtle47 hat geschrieben:In der Spalte "Artikelnr." habe ich Dir über Menue > Daten > Gültigkeit ein Dropdownmenue
hizugefügt um die entsprechenden Artikel einfacher auszuwählen
Dort kannst Du den Zellbereich angeben. :lol:

Hier die komplette Datei mit folgenden Funktionen:
Button "Ware ausbuchen" > Ware wird ausgebucht und der Button deaktiviert
Button "Übertragen in Übersicht" Die Rechnung wird in die Übersicht eingetragen und der Button deaktiviert
Button "Inhalt leeren" > Der Inhalt in der Tabelle wird gelöscht und die beiden Schaltflächen werden wieder aktiviert :wink:

Die Sub "leeren" zum Löschen des Inhaltes habe ich "etwas" gekürzt. :mrgreen:
Warenlagerprobe_V2.ods
(56.52 KiB) 178-mal heruntergeladen
Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
piratenbraut
Beiträge: 8
Registriert: Fr, 24.10.2008 21:41

Re: Bestände ausbuchen

Beitrag von piratenbraut »

okay du Held, lach, ich war mittlerweile auch fleissig und hab die Makros für die Rechnung für Ebay angeglichen, die gehn jetzt dort auch. Außerdem hab ich bei den Makros zum Thema Rechnung eintragen eine Zeile geändert, da er mir dort beim Namen nur Frau oder Mann eingetragen hat :( musste dort nur die Zeile ändern.
Ich danke dir vielmals, schließe dich heut Nacht in mein Nachtgebet ein, hast es echt verdient. Seit Monaten überlegen wir, wie wir das ändern könnten und kommen nicht voran. Wenn du mir deine Adresse schickst (auch an Email falls du willst - etherischeoele@web.de - ) dann lasse ich dir etwas für den Aufwand und als Entschädigung per Post schicken. Ist es mir wert!

Ich hab ja schon viel gelernt was Open Office angeht mir mir vieles angeeignet, selbst eine kleine Kasse hab ich geschrieben, aber bei Makros setzt es bei mir aus. Allerdings scheint das kein Hexenwerk zu sein. Man muss nur dransitzen und sich in die Materie reinarbeiten, dann geht fast alles.

Jetzt übernehm ich die letzten Änderungen von dir was das leeren angeht, und danke dir nochmals kräftig.

Liebe Grüße und Bussi auf Bauchi :D
Moni
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Bestände ausbuchen

Beitrag von turtle47 »

Hi Moni,
piratenbraut hat geschrieben:ein bisschen faul beim Rechnung schreiben darf man ja sein
Da Faulheit bekanntlich scharf denk habe ich mir noch was für die Kundenauswahl überlegt.
In der Kundenliste habe ich eine Hilfsspalte erstellt die alle Daten eines Kunden in einer Zelle zusammenfasst.
Diese Hilfsspalte wird für die Kundenauswahl in dem Sheet Rechnungen eingesetzt. Dort kann man dann den
Kunden aus der Liste auswählen und die Kundennummer wird dann direkt in der entsprechenden Zelle eingefügt.

Die Kundenauswahl wird nicht mit ausgedruckt.
Das habe ich über Menue > Format > Zellen > Reiter Zellschutz > [X] Für Ausdruck ausblenden ausgeschaltet.

Edit: > Start hinfällig
In der Kundenliste habe ich die Spalte Kundennummer als Text formatiert und zwei Nullen vorne angestellt.
Das macht deshalb Sinn, wenn Du mal mehr als 999 Kunden hast die Formel:

Code: Alles auswählen

=LINKS(A10;5)
nicht richtig funktioniert. Die holt sich nämlich die ersten 5 Stellen des Textes des ausgewählten Kunden.
> Ende hinfällig

Die Formel in Zelle F10

Code: Alles auswählen

=LINKS(A10;SUCHEN(",";A10;1)-1)
holt sich die ersten Stellen bis zum Komma automatisch.

Den Makrocode habe ich auch noch ein wenig optimiert. Die Stellen sind entsprechend gekennzeichnet.
Warenlagerprobe_V4.ods
(59.1 KiB) 241-mal heruntergeladen
Hilft Dir das wieder ein Stück weiter?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
piratenbraut
Beiträge: 8
Registriert: Fr, 24.10.2008 21:41

Re: Bestände ausbuchen

Beitrag von piratenbraut »

Hallo Jürgen, kann es sein das dir irgendwie langweilig ist und du mit dem Blatt noch nicht zufrieden warst? Für mich war es ja schon der Himmel auf Erden, aba sowas ist das Paradies schlecht hin. Ich bin beeindruckt, echt. :D Das werd ich auch noch übernehmen in mein Warenlager. Aber das nehm ich mir morgen oder Dienstag vor, wir machen gerade nen faulen auf der Couch. Aber danke dir schon mal im Voraus und das Angebot mit dem schicken steht noch aus - ich warte geduldig auf Adresse, lach.

So, Rauchpause vorbei und jetzt schauen wir DVD weiter.

Dir noch nen schönen Restsonntag und liebe Grüße und vielen Dank für deine Hilfe, mein Held

Gruß Moni
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Bestände ausbuchen

Beitrag von turtle47 »

Grüss Gott Moni,
so sagt man doch bei Euch, oder?
piratenbraut hat geschrieben:kann es sein das dir irgendwie langweilig ist
Nö, eigentlich nicht.
piratenbraut hat geschrieben:und du mit dem Blatt noch nicht zufrieden warst?
Genau so ist es, weil ich immer so arbeite wie ich es für mich selber auch tun würde. :D

Konnte halt nicht einschlafen und da tue ich doch was sinnvolleres als die Decke anzustarren. :lol:
Danach bin ich dann zufrieden schlummern gegangen.


Ich wünsche die jedenfalls eine gute Auftragslage.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
piratenbraut
Beiträge: 8
Registriert: Fr, 24.10.2008 21:41

Re: Bestände ausbuchen

Beitrag von piratenbraut »

Hallo, habe alles erfolgreich im Script geändert, auch deine neuste Änderung mit den Kundendaten funktioniert prächtig. Jetzt hab ich noch eine letzte Frage: da ich immer alles ganz ordentlich in mein richtiges Warenlager übertragen habe, habe ich festgestellt, das ich andere Buttons als du benutze für das PDF, drucken, Ware ausbuchen. Wenn ich jetzt z.B. auf das Button Ware ausbuchen gehe, macht er das ohne Probleme, aber er zeigt es mir nicht. Deine wurden dann grau, das fand ich keine schlechte Idee. Wie kann ich solche Buttons machen? Ich hab es schon ausprobiert, aber ich bekomm das so nicht hin.

Kannst du mir noch einen Tipp geben?

Und nochmals vielen Dank für deine Hilfe, bist echt ein Engel

Servus und liebe Grüße
Moni
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Bestände ausbuchen

Beitrag von turtle47 »

Liebe Moni,
piratenbraut hat geschrieben:Deine wurden dann grau, das fand ich keine schlechte Idee. Wie kann ich solche Buttons machen? Ich hab es schon ausprobiert, aber ich bekomm das so nicht hin.
Auf die Frage hatte ich schon lange gewartet und noch bei mir gedacht, die ist aber ganz schön fit was Calc und Makros angeht. :wink:

Lange Rede kurzer Sinn.
Klicke Menue > Ansicht > Symbolleisten > Formular-Steuerlemente an.
Dann klicke auf das Symbol mit dem Dreieck-Lineal-Bleistift >> Der Entwurfsmodus wird eingeschaltet.
(Wenn Du mit der Maus langsam über die Symbole fährst wird dir angezeigt worum es sich handelt.)

Weiterer Klick auf das Symbol "Schaltfläche" und im Sheet aufziehen, danach auf die Schaltfläche einen Rechtsklick und im Kontextmenue "Kontrollfeld" auswählen.
Wenn du dort unter dem Reiter "Allgemein" deine Einstellungen vorgenommen hast wie Name, der muss genau so lauten wie in dem Makro weil er sonst nicht zum deaktivieren angesprochen werden kann, sowie Farbe, Titel, Schrift etc. dann den Reiter "Ereignisse" anklicken und das Makro bei "Beim Auslösen" zuweisen".

Danach nicht vergessen den Entwurfsmodus wieder auszuschalten!!
Ich hoffe, dass ich jetzt nichts vergessen habe zu beschreiben.

Jetzt sollte alles so wie von mir in dem Beispielsheet funktionieren.

Sonst einfach nochmal nachfragen. Du weist ja wo ich zu erreichen bin.

Viiiiel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
piratenbraut
Beiträge: 8
Registriert: Fr, 24.10.2008 21:41

Re: Bestände ausbuchen

Beitrag von piratenbraut »

Hallo Jürgen, ich war gar nicht so falsch mit meinem Versuch, allerdings hatte ich den Knopf für das Steuerelement nicht aktiviert. Nun läuft alles, aba ich hab ein Problem mit dem Makro leeren.

ich hab ja 2 Rechnungen, eine normale, die du gemacht hast und eine für Ebay, die ich angepasst habe. Da läuft auch alles, aber das Marko Liste leeren ging nur bei der normalen Rechnung.

Code: Alles auswählen

sub leeren
	Dim vButton, vForm
	Dim oForms
	oForms = ThisComponent.CurrentController.ActiveSheet.DrawPage.Forms
	vForm = oForms.getByIndex(0)
	vButton1 = vForm.getByName("Button_Ausbuchen")
	vButton1.Label = "Ware ausbuchen"
	vButton1.enabled=True
	vButton2 = vForm.getByName("Button_ReListe")
	vButton2.Label = "Übertragen in Übersicht"
	vButton2.enabled=True
	odoc=thiscomponent
	osheet=odoc.sheets(1)
	myAera=oSheet.getCellRangeByName("A20:B36")
	myAera.clearContents(1)
End Sub
jetzt habe ich die Zeile osheet=odoc.sheets von (0) auf (1) geändert, da Ebay die zweite Rechnung und ich die häufiger brauche. Jetzt löscht er mir die Liste bei Ebay, aber nimmer auf der normalen Rechnung. Wie kann ich das ändern, das er auch die normal löscht?
Ich würde dir gerne nochmal das komplette Warenlager schicken, damit du noch mal drüber schauen kannst, ob ich nen Fehler gemacht habe, aber das will ich nicht ins Forum stellen, da alle Daten drin sind. Kann ich dir das an deine normale Email schicken? Musst du mir halt mal geben.

Liebe Grüße Moni
Antworten