Liferposten ohne Ursprung mit Proteus zuweisen

78 views
Skip to first unread message

TPH

unread,
Apr 7, 2016, 10:36:10 AM4/7/16
to tryton-de
Guten Tag

In der Tryton Version 3.2 bekomme ich es nicht hin, mit Proteus einen Lieferposten als Status gepackt zu markieren

Code:
ShipmentOut.pack([shipment.id],config.context)

Fehler:
xmlrpclib.Fault: <Fault 2: u'UserWarning\nstock.move,24567.done\nDie Lagerbewegung "1.0St. [5346343680] Polster Sitzkissen" hat keinen Ursprung.\n'>



Ich kannte dies bisher nur von der Zuweisung eines Lieferposten, wenn dieser nicht im Lager verfügbar ist, bei dieser habe ich jedoch andere Möglichkeiten:
ShipmentOut.assign_try([shipment.id],config.context)
ShipmentOut.assign_force([s.id],config.context)




Freue mich über Tipps zu diesem Thema. Ich frage mich auch immer wieder, wie ich denn am besten alleine zu so einem Problem eine Lösung finden kann.

Ich habe z.B. pack_force probiert, was es jedoch nicht gibt. Dann wollte ich mit die Attribute von ShipmentOut anzeigen zu lassen mit dir(ShipmentOut). Hier sehe ich aber noch nicht einmal assign_try oder
assign_force, obwohl dies ja verfügbar ist. Das verstehe ich nicht.

Darum, Tipps sind willkommen :-)

Danke

TPH

unread,
Apr 7, 2016, 11:38:49 AM4/7/16
to tryton-de


Die Fehlermeldung habe ich gefunden in stock/move.py

        cls
._error_messages.update({
           
...,
           
'no_origin': 'The stock move "%s" has no origin.',
           
})

und
    @classmethod
   
def check_origin(cls, moves, types=None):
       
if types is None:
            types
= cls.check_origin_types()
       
if not types:
           
return
       
for move in moves:
           
if ((move.from_location.type in types
                       
or move.to_location.type in types)
                   
and not move.origin):
                cls
.raise_user_warning('%s.done' % move,
                   
'no_origin', move.rec_name)

Wie ich nun mit Proteus die Situation nachbilde, dass man bei einem Lieferposten auf "Packen" klickt, dann die Meldung mit dem fehlenden Ursprung bestätigt. Evtl. noch die Option "Diese Warnung künftig nicht mehr anzeigen" wählt und dann auf "Ja" klickt habe ich jedoch noch nicht gefunden.

Udo Spallek

unread,
Apr 8, 2016, 3:15:41 AM4/8/16
to tryt...@googlegroups.com
Thu, 7 Apr 2016 07:36:10 -0700 (PDT)
TPH <truckpart...@gmx.de>:
>Freue mich über Tipps zu diesem Thema. Ich frage mich auch immer
>wieder, wie ich denn am besten alleine zu so einem Problem eine Lösung
>finden kann.
>Ich habe z.B. pack_force probiert, was es jedoch nicht gibt. Dann
>wollte ich mit die Attribute von ShipmentOut anzeigen zu lassen mit
>dir(ShipmentOut). Hier sehe ich aber noch nicht einmal assign_try oder
>assign_force, obwohl dies ja verfügbar ist. Das verstehe ich nicht.

dir() funktioniert bei Proteus leider nicht so wie Du es erwartest. Mit
Proteus hat man keinen direkten Zugriff auf die tatsächlichen Python
Objekte. Proteus ist ein Proxy, der deine Proteus-Python-Befehle
in XML serialisiert und an den Tryton server sendet, der Tryton
server antwortet auch wieder mittels XML. Die Antwort des Servers
übersetzt Proteus dann in eine Python Datenstruktur auf die du
zugreifst. dir(ShipmentOut) zeigt Dir also immer nur den Aufbau der
Proteus Datenstruktur.

Um Auskunft über die Objekte und Methoden zu erlangen, ist das Lesen des
Quelltexts das erste Mittel der Wahl.

Beste Grüße
Udo Spallek
--
_____________________________
virtual things
Preisler & Spallek GbR
München - Aachen

Windeckstr. 77
81375 München
Tel: +49 (89) 710 481 55
Fax: +49 (89) 710 481 56

in...@virtual-things.biz
http://www.virtual-things.biz

Udo Spallek

unread,
Apr 8, 2016, 3:28:39 AM4/8/16
to tryt...@googlegroups.com
Hi,
Thu, 7 Apr 2016 08:38:48 -0700 (PDT)
TPH <truckpart...@gmx.de>:
>Wie ich nun mit Proteus die Situation nachbilde, dass man bei einem
>Lieferposten auf "Packen" klickt, dann die Meldung mit dem fehlenden
>Ursprung bestätigt. Evtl. noch die Option "Diese Warnung künftig nicht
>mehr anzeigen" wählt und dann auf "Ja" klickt habe ich jedoch noch
>nicht gefunden.

dazu könntest Du dich mit dem graphischen Tryton Client mit den
Credentials der Proteus-Verbindung anmelden, einmal den Fehler
reproduzieren und dann im Warndialog den Haken setzen.
Diese Einstellung lässt sich m.W. nicht mehr mit dem graphischen Tryton
Client verändern.

Ansonsten kannst Du Dir das Modell res.user.warning anschauen. Dort
werden die Warnungen deaktiviert für einzelne Benutzer. Das sollte sich
auch mit Proteus einstellen lassen.
Beste Grüße

Udo Spallek
--
_____________________________
virtual things
Preisler & Spallek GbR
München - Aachen

Windeckstr. 77
81375 München
Tel: +49 (89) 710 481 55
Fax: +49 (89) 710 481 56

in...@virtual-things.biz
http://www.virtual-things.biz

-

TPH

unread,
May 11, 2016, 1:17:53 PM5/11/16
to tryton-de


Hallo und Danke für den Tipp, bin jetzt erst wieder dazu gekommen mich zu melden.

Zu dem Tipp, die Warnung einmalig im Tryton-Client zu deaktivieren:
Es scheint leider keine Auswirkung zu haben ob der Hacken im Tryton-Client gesetzt wird. Habe ich vergessen zu erwähnen. Ich habe immer wieder die selben Artikel, die ich bestätigen muss. Bisher mach ich das ja grafisch.
 
Das sehe ich auch, wenn ich den Clienten im Debug-Modus starte, ich schätze mal es müsste der Eintrag bei Always sein:
INFO:tryton.rpc:model.res.user.warning.create(6, '1cbad5e1cb384e0a8d701ccc18ebac91', [{'always': True, 'user': 6, 'name': 'stock.move,25754.done'}], ...

Meinen user config context setze ich so:
User = Model.get('res.user')
config
._context = User.get_preferences(True, config.context)

Muss ich die Warnings ähnlich setzen?
UserWarnings = Model.get('res.user.warning')

Danke




TPH

unread,
May 12, 2016, 4:34:42 AM5/12/16
to tryton-de

Evtl. interessant dazu: https://groups.google.com/forum/#!topic/tryton/CK7OhIWnCC8
Hier scheint es zu funktionieren, wird aber wohl einer neuere Version genutzt.

TPH

unread,
Jun 28, 2016, 5:22:48 AM6/28/16
to tryton-de


Am Mittwoch, 11. Mai 2016 19:17:53 UTC+2 schrieb TPH:
Hat dazu evtl. doch noch jemand einen Tipp wie ich das verwirklichen kann?

Ich habe es jetzt auch mal über die Knöpfe probiert, aber mir ist noch immer nicht klar wie ich mit dem Fehler umgehe:
shipment.click('pack')
<Fault 2: 'UserWarning\nstock.move,26412.done\nDie Lagerbewegung "2.0St. [534698734] Testprodukt" hat keinen Ursprung.\n'>

Danke

 

TPH

unread,
Jun 28, 2016, 3:21:18 PM6/28/16
to tryton-de
Hat jemand evtl. ein Beispiel, wie ich eine Warnung mit 'res.user.warning' deaktivieren kann?
Folgendes habe ich probiert:
        UserWarnings(user=user, name=str(shipment.id), always=True).save()
        ShipmentOut.pack([shipment.id],config.context)
Leide noch ohne Erfolg. Die Fehlermeldung bleibt weiterhin die gleiche :-( Ich habe das nun in unzähligen Varianten getestet und versucht mich dabei an folgende Beispiele zu halten:
Und auch mal den SourceCode angeschaut: http://pydoc.net/Python/trytond/3.2.1/trytond.res.user/

Ich scheine da wohl aber noch etwas falsch zu machen.

Hier noch meine komplette Vorgehensweise:

config = config.set_xmlrpc(url)

Udo Spallek

unread,
Jun 29, 2016, 7:38:31 AM6/29/16
to tryt...@googlegroups.com
Hi,

Tue, 28 Jun 2016 12:21:17 -0700 (PDT)
TPH <truckpart...@gmx.de>:
>Am Dienstag, 28. Juni 2016 11:22:48 UTC+2 schrieb TPH:
...
>Hat jemand evtl. ein Beispiel, wie ich eine Warnung mit
>'res.user.warning' deaktivieren kann?
>Folgendes habe ich probiert:
> UserWarnings(user=user, name=str(shipment.id),
> always=True).save() ShipmentOut.pack([shipment.id],config.context)
In [1] steht aber folgender Pattern:

Model.get('res.user.warning')(user=config.user,
name=str(statement2.lines[0].id), always=True).save()

Den Fehler selbst kannst du mit try except[2] abfangen.

Beste Grüße
Udo Spallek

[1]https://github.com/tryton/account_statement/blob/3.2/tests/scenario_account_statement.rst
[2]https://docs.python.org/2.7/tutorial/errors.html

TPH

unread,
Jun 30, 2016, 4:27:47 AM6/30/16
to tryton-de
Hallo und erst mal vielen Dank für die Rückmeldung.

UserWarning habe ich davor mit "UserWarnings = Model.get('res.user.warning')" zugewiesen und "user" konnte ich nicht aus dem "context" nehmen da dies "None" war. Evtl. liegt da das Problem?

Ich verbinde mit "config = config.set_xmlrpc(url)"

Ich hatte auch schon erfolglos versucht dem "context" nachträglich einen "user" zuzuweisen:
User = Model.get('res.user')

user
, = Model.get('res.user').find([("name", "=", username)])
config
.set_context(user=user.id)



TPH

unread,
Feb 27, 2018, 4:17:03 PM2/27/18
to tryton-de
Ich habe zwischenzeitlich eine Lösung gefunden:

                for n, outgoing_move in enumerate(shipment.outgoing_moves):
                    warning = Model.get('res.user.warning')(user=user, name="stock.move,{}.done".format(outgoing_move.id))
                    warning.always=True
                    warning.save()

Zu beachten ist der Wert bei name, dieser darf nicht nur die ID als String sein wie im verlinkten Beispiel, sondern muss noch weitere Stellen enthalten. Ist sicher keine saubere Lösung aber nach 2 Jahren bin ich froh das es nun wenigstens funktioniert ohne dass ich für den selben Artikel immer wieder klicken muss, dass es den Bestand ignorieren soll :-)
Reply all
Reply to author
Forward
0 new messages