Project

General

Profile

Unterstützung #314

Erzeugnisbestandteile in Rechnungen (invoice-Tabelle) speichern (oder nicht)

Added by Bernd Bleßmann almost 4 years ago. Updated almost 4 years ago.

Status:
Neu
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
11/06/2017
Due date:
% Done:

0%

Estimated time:

Description

Bis 2015 (f087c373) wurden Erzeugnisbestandteile in der Tabelle invoice gespeichert und mit assemblyitem = true markiert.
Danach ging das kaputt, wurde aber wohl auch nicht vermisst. Wenn ich das richtig sehen, gibt es auch keine Auswertungen dafür. In den Berichten werden assemblyitems extra rausgefiltert.

Die Frage ist jetzt, ob das wieder aktiviert werden soll. Wenn, dann sollte aber auch lastcost mitgespeichert werden.

Falls mal Auswertungen gewünscht werden, wäre es evtl. besser, eine extra Tabelle einzuführen, die bei verkauften Erzeugnissen die Bestandteile zum Verkaufszeitpunkt speichert.

Bei eingeschalteter Stückliste beim Erzeugnis werden die Bestandteile für den Ausdruck übrigens aus den Stammdaten geholt.

History

#1

Updated by Werner Hahn almost 4 years ago

Für unser neues Projekt brauchen wir da so was, dass die Erzeugnissbestandteile in Auftrag/Lieferschein/Rechnung mit gespeichert werden, so dass später nachvollziehbar welche Einzelteile verbaut wurden sind. Meine Idee war es diese als json in den Positionstbl (order_items, delivery_order_items, invoice) zu haben.

#2

Updated by Jan Büren almost 4 years ago

@Werner: Also das JSON-Objekt direkt in den (*items|invoices) Tabelle als Typ JSON?

Ich würde eher ein klassisches E/R-Design bevorzugen.

Die ids in io,doi und invoice sind doch persistent, dann wäre es doch naheliegend einen Fremdschlüssel auf eine processed_assembly_items Tabelle zu machen, die dann nur parts_id, lastcost, qty und sonstige Daten enthält, die für eine spätere Auswertung relevant wäre.

#3

Updated by Martin Helmling almost 4 years ago

Wichtig ist, nicht mehr die invoice Tabelle zu verwenden, da diese inzwischen durch das Löschen von "orphand" Einträgen gelöscht werden.
Wie in meiner Mail vom 3.1. an die develop liste zu entnehmen ist, kostet dies beim Speichern einige Zeit:

Das (erneuten) Buchen einer Verkaufsrechnung mit 20 Positionen, davon 18
Erzeugnisse, dauert 30 Sekunden. Das ist reproduzierbar.

Es stellt sich heraus, dass die meiste Zeit (ca 20 sec) benötigt wird um
3844 'orphaned invoice' Einträge zu löschen:

SL/IS.pm: Line 1410: 'DELETE FROM invoice WHERE id IN (%s)'.

Weitere Nachforschung ergab, dass diese in process_assembly() erzeugt werden

SL/IS.pm: Line 1707 ff: '# save detail record for individual assembly
item in invoice table'

Die Funktionen 'process_assembly' und 'cogs' sind anscheinend uralte
Mechanismen zum Berechnen von was? 'allocated' etc.

Frage 1:

Warum braucht das Löschen von 3844 Inventory- Einträgen über 30
Sekunden? Hat das mit den zwei Triggerfuktionen beim Löschen zu tun?

Die Triggerfunktionen sind clean_up_record_links_before_invoice_delete()
und delete_custom_variables_trigger()

Frage 2:

Warum werden diese temporären 3844 invoice Tabelleneinträge erzeugt?
Gäbe es dafür nicht eine bessere Lösung?

Also available in: Atom PDF