Berechnung von Verkaufsgebühren

  • Hallo,

    ich hätte gerne ein Script, dass sich diverse Infos aus verschiedenes Dateien holt und diese Anhand einer Artikelnummer in einer Datei zusammen fügt. Es geht um eine Gebührenberechnung für Amazon.
    Vergütung: 20 Euro VB

    - Vorschau zu Verkaufsgebühren - Beta -

    Zunächst sollte aus einem Order (Bespw. C:\_import\test\download\) die aktuellste Datei eingelesen werden. Diese Datei ist immer eine tabstopgetrennte Textdatei wie 51069591344.txt, nur der Dateiname ändert sich jedes mal. Es befinden sich bis zu 50 tausend Datensätze in dieser Datei.
    Die relevanten Informationen aus dieser Datei stehen zum einen in

    Spalte A - Artikelnummer
    Spalte D - Verkaufspreis Euro (Punkt als Dezimaltrennzeichen)
    Spalte E - Gebühren in Euro (Punkt als Dezimaltrennzeichen)

    Benötigt wird die Artikelnummer zu Zuordnung und die prozentualen Gebühren (=100/Spalte D*Spalte E) gerundet auf eine ganze Zahl. Also statt 7,0254 soll es 7 sein.

    - FBA-Lagerbestand -

    Nun sollte aus einem Order (Bespw. C:\_import\test\FBA-Bestand\) die aktuellste Datei eingelesen werden. Diese Datei ist ebenfalls immer eine tabstopgetrennte Textdatei wie 51069591344.txt, nur auch hier ändert sich der Dateiname jedes mal. In dieser Datei befinden sich weniger, vermutlich nie mehr als 1000 Datensätze.
    Die relevante Informationen aus dieser Datei steht nur in Spalte A - die Artikelnummer.

    Die Artikelnummern dieser beiden Dateien sollten nun verglichen werden, und bei allen Artikelnummern, die in beiden Dateien vorkommen, sollte der ganze Datensatz aus der ersten Datei gelöscht werden.

    - Preisliste -

    Nun sollte aus dem Ordner C:\_import\test\Preisliste\ die Datei preisliste-amazon.csv eingelesen werden. Diese Datei enthält folgende Informationen:

    Spalte A - Artikelnummer
    Spalte B - Verkaufspreis
    Spalte C - Gewicht
    Spalte D - Diese Spalte ist für den Amazonverkaufspreis, der nun errechnet werden soll anhand der Formel:

    = (Verkaufspreis+Versandkosten)/((1/(1+MwSt))-Gebühren in %)-Versandkosten
    = Spalte B+4,99/((1/(1+0,19))-Gebühren in % aus der ersten Datei)-4,99

    - Datei erstellen -

    Die Ausgabe der Daten sollte dann in folgendem Format erfolgen:

    Spalte A - Artikelnummer
    Spalte B - leer
    Spalte C - errechneter Amazonpreis (Dezimaltrennzeichen muss hier wieder . sein)


    Sehr nützlich wären Kommentare in dem Script, da es mit Sicherheit noch einige Male angepasst werden muss, und ein Protokoll, in welchem die einzelnen Vorgänge dokumentiert werden.


    Ich hoffe, ich konnte mein Anliegen verständlich vermitteln :) und hoffe, dass sich jemand findet, der mir helfen kann ;)

  • Moin, Bit-Service.

    Du hast Dein Anliegen sehr gut formuliert, das mal am Anfang.

    Aber es ist nirgendwo ein Punkt, wo man nur ansatzweise anfangen könnte zu helfen.
    Bei 50K Datensätze solltest Du dann doch schon paar Datensätze zur Verfügung stellen.
    Sowie ich es derzeitig richtig deute, hast Du es in Excel bereits probiert und es
    wäre dann gut, wenn DU die Excel-Datei mal mit Testdaten posten würdest. Dann kann
    man anfangen die Formeln in AutoIt zu scripten. Hier sehe ich das kleinere Problem.
    Preisrundung auf KEINE Nachkommastelle geht u. a. mit "StringFormat".

    Hier mal eine kleine Funktion, aus der man einiges entnehmen könnte.

    Spoiler anzeigen
    [autoit]


    Func anzeige()
    ; Preise aller $array[6] berechnen (sog. Gesamtpreis)
    $sData = FileRead(@ScriptDir & '\test_dat.txt') ; welche Datei
    $array_preis = StringSplit($sData, "|", 1) ; Datei splitten
    $ver1 = 0 ;
    $i1 = 6 ; gebinnen mit $array[6] ; Spalte die zur Berechnung steht
    Do
    $ver1 += $array_preis[$i1] ; Zusammenrechnung beginnt
    $i1 += 16 ; immer jeden 16 dazu addieren
    Until ($i1 >= UBound($array_preis))

    [/autoit] [autoit][/autoit] [autoit]

    ; 2. Berechnung !!! Erklärung wie oben
    ; Stand aller $array[9] berechnen (sog. Ges.-Menge)
    $sData2 = FileRead(@ScriptDir & '\test_dat.txt')
    $array_Stand = StringSplit($sData2, "|", 1)
    $ver2 = 0
    $i2 = 9

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $ver2 += $array_Stand[$i2]
    $i2 += 16 ; immer jeden 16 dazu addieren
    Until ($i2 >= UBound($array_Stand))

    [/autoit] [autoit][/autoit] [autoit]


    GUICtrlCreateLabel("Ges. aus $array[6][x]", 985, 650, 100, 15)
    GUICtrlSetBkColor(-1, 0xff0000) ; Rot ; Schriftfarbe ändern für gerade erstelltest Label
    GUICtrlCreateLabel(StringFormat(" %.2f", $ver1), 1085, 650, 140, 15, $SS_Right) ; runden auf zwei Stellen nach dem Komma
    GUICtrlSetBkColor(-1, 0xff0000) ; Rot ; Schriftfarbe ändern für gerade erstelltest Label

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Ges.-Menge aller Artikel aus $array[9][x]", 985, 665, 100, 15)
    GUICtrlSetBkColor(-1, 0x00ff00) ; Grün
    GUICtrlCreateLabel(StringFormat(" %.0f", $ver2), 1085, 665, 140, 15, $SS_Right) ; runden auf keine Stelle nach dem Komma
    GUICtrlSetBkColor(-1, 0x00ff00) ; Grün
    EndFunc ;==>anzeige

    [/autoit]

    Wenn Du Deine Daten in ein Listview bekommen kannst, kann man die Spalten berechnen wie bei Excel die Summenfunktion.
    Summer aller Preise in Spalte A
    Anzahl der Artikel
    usw.

    Nur man muss irgendwo anfangen und das ist derzeitig nicht leicht, da Deine Informationen einfach zu wenige sind.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • @BugFix Ist habe einfach nicht an [Round] gedacht.

    Aber wo ist es eine Verrenkung?
    ob nun

    Spoiler anzeigen
    [autoit]

    StringFormat(" %.0f", $ver2)

    [/autoit]


    oder

    Spoiler anzeigen
    [autoit]

    Round($ver2, 0)

    [/autoit]

    ?
    Ergebisstechnisch irgendwo ein Unterschied??? Kläre mich mal bitte auf!
    Oder meinst Du die Berechnung von $ver2?
    ?(

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • aus welchem system kommen denn die daten?
    ich würde das eher über eine Datenbank realisieren, auch mit Autoit (Access, MySQL, MSSQL u.a.) sind da möglich.

    die daten in jeweils eine tabelle schreiben und darüber eine abfrage laufen lassen!
    die gleichen daten würde ich dann in Tabelle A in Spalte X als gelöscht markieren.
    Hat den vorteil, dass man hier dann auch aus der DB eine Statisktik erstellen kann, was du ja mit den Dateien nicht kannst, wenn du Datensätze löschst.

    Nur mal als Ansatz ...

    gruß gmmg

  • BugFix . Das ist eine gute Argumentation und ich verwende dann auch mehr [Round] ab jetzt. ;)
    DANKE

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • So, erstmal vielen Dank für die zahlreichen Beiträge.

    Derzeit arbeitet "Ahnungslos" an meiner Anfrage, habe von Ihm auch schon ein Script zugeschickt bekommen, aber es noch nicht testen können. Werde es schnellstmöglich nachholen und mich dann noch einmal melden.

    @gmmg die Daten kommen zum einen aus den Lagerbestandsberichten die Amazon bereitstellt und zum anderen handelt es sich um unsere Preisliste.