Leistungsdetails zu Zeilen einer Lieferung oder Rechnung drucken.
Tobias Loke
Hallo, ich möchte die coresuite Leistungserfassung nutzen, um Servicestunden zu verrechnen. Also Leistungen auf einen Serviceabruf erfassen, am Monatsende Serviceabruf schliessen und Fakturieren auf einen Lieferschein (dann Rechnung).Auf dem Lieferschein erscheinen pro Artikel/Leistungsart zusammengefasst die Stunden der Leistungen die auf den Serviceabruf erfasst wurden.
Ich erhalte also z.B. eine Zeile mit 5 Technikerstunden und eine Zeile mit 7 Designerstunden.
Nun möchte ich die Leistungen (Efforts, also "Zeilen aus dem Leistungs-Tab des Serviceabruf") mit zu diesen beiden Zeilen des Lieferschein anzeigen und vor allem die Beschreibung was gemacht wurde ("Remarks") und die Dauer der Einzelpositionen mit anzeigen und drucken.
Also das "Endergebnis" des Lieferscheins soll so aussehen (die Zeilen mit Bindestrich am Anfang sind die Daten aus der Leistungserfassung, Dauer und Remark/Beschreibung):
Position 1: Technikerstunden Menge=5 ME=Std.
- 1 Std. Installation
- 1 Std. Updates
- 3 Std. SQL-Scripts erstellt
Position 2: Designerstunden Menge=7 ME=Std.
- 3 Std. Entwurf für Herrn Meier
- 2 Std. Umsetzung html und CSS
- 2 Std. Abnahme und Änderungen per Telefonkonferenz
Eine Anfrage die mir zu allen Zeilen eines Lieferschein (DLN1) alle dahinterstehenden ursprünglichen Leistungen (aus @SWA_CT_EFFORT) holt habe ich schon.
War allerdings nicht einfach, da der Fakturierungsassistent an die Leistungen selbst nicht hinschreibt wohin sie fakturiert werden. In TargetEntry und ähnlichen Target Feldern steht nur ein geparkter Beleg der vom Fakturierungsassistenten erzeugt wird :bang:
Hier die Anfrage:
SELECT DLN1.LineNum, EFFORT.*, OSCL.*, ODLN.[DocEntry] AS 'DocEntry', DLN1.[ItemCode] AS 'ItemCode',
DLN1.[LineNum] AS 'LineNum'
FROM
[dbo].[@SWA_CT_EFFORT] EFFORT INNER JOIN
[dbo].[OSCL] OSCL ON EFFORT.[U_ObjEntry] = OSCL.CallId INNER JOIN
[dbo].[DLN1] DLN1 ON DLN1.[U_SWA_CT_BEntry] = OSCL.[callID] and DLN1.[U_SWA_CT_BType] = OSCL.[objType] INNER JOIN
[dbo].[ODLN] ODLN ON ODLN.[DocEntry] = DLN1.[DocEntry] INNER JOIN
[dbo].[@SWA_CT_ETC_ITEM] EFFORTCAT ON EFFORTCAT.CODE = EFFORT.U_EffCatItmCode
WHERE
ODLN.[DocEntry] = [%DocEntry] AND
ODLN.[DocEntry] = DLN1.[DocEntry] AND
DLN1.[ItemCode] = EFFORTCAT.[U_ItemCode] AND
EFFORT.[U_ObjType] = '191'
Ich habe diese Anfrage die ich in der Layoutdefinition von "Document DIN (DOC00008)" mit der Abfrage "SWA_LD_Document:Row" verknüpft über das Link Feld "LineNum" und Link Feld 2 "LineNum".
Es erscheint unter Datenquellen in DocumentRow auch die Daten der Anfrage. Aber die Anfrage ist nicht auf die aktuelle Row/Zeile des Lieferschein eingeschränkt. Sie liefert bei jeder Zeile die gleichen Daten.
Das Ergebnis sieht also so aus:
Position 1: Technikerstunden Menge=5 ME=Std.
- 1 Std. Installation
- 1 Std. Updates
- 3 Std. SQL-Scripts erstellt
- 3 Std. Entwurf für Herrn Meier
- 2 Std. Umsetzung html und CSS
- 2 Std. Abnahme und Änderungen per Telefonkonferenz
Position 2: Designerstunden Menge=7 ME=Std.
- 1 Std. Installation
- 1 Std. Updates
- 3 Std. SQL-Scripts erstellt
- 3 Std. Entwurf für Herrn Meier
- 2 Std. Umsetzung html und CSS
- 2 Std. Abnahme und Änderungen per Telefonkonferenz
Wie kann ich dafür sorgen das die Anfrage nur die Daten zur aktuellen Zeile/Row liefert und das für jede Zeile?
Es müsste eine Verknüpfung geben die dafür soft das die LineNum
oder zur Not auch der ItemCode der aktuellen Zeile des Lieferscheins
mit in die Anfrage einfliesst. Ich habe des wie bei %DocEntry mit
versucht, klappt aber nicht :... AND DLN1.[ItemCode] = [%ItemCode]
Muss man einen extra Parameter eingeben oder wie kann man die Anfrage
auf die aktuelle Zeile einschränken?
Ist sicher nur eine Kleinigkeit wenn mans weiss.
Mit freundlichem Gruss,
Tobias
Sascha Balke
Hallo Tobias,eine sehr interessante Aufgabenstellung, welche bis auf den Umweg über die Lieferscheine auch genau bei uns passen würde.
Ich werde das heute Nachmittag, sofern nichts dazwischen kommt, einmal testen und schauen ob ich die Ursache für dein Problem finde.
VG
Sascha
Philipp Knecht
Hi TobiasDas schaut alles eigentlich ganz gut aus.
Eventuell liegt der Fehler ja nur in der Anzeige.
Deshalb hier die weitere Vorgehenseise wie ich es machen würde im Designer:
Da es sich ja um eine Row : Leistungen Beziehung im Sinne von 1 : n
handelt musst du innerhalb vom Row AdvancedDataBand ein weiteres AdvancedDataBand einfügen und die Datenquelle des DataBandes auf die Struktur Document.DocumentRow.MeineQuery setzen (ähnlich wie die Datenquelle vom DocumentRow DataBand einfach noch ein Level mehr...)
Im Detail innerhalb deines neuen Datenbandes kannst du dann die Textboxen einfügen und das value Property auf : meinneuesDataBand("MeinFeld") setzen.
hth
Tobias Loke
[quote]"evion_gmbh"]Hallo Tobias,
eine sehr interessante Aufgabenstellung, welche bis auf den Umweg über die Lieferscheine auch genau bei uns passen würde.
[/quote]
Hallo Sascha,
wenn ich mich richtig erinnere möchtes du so eine ähnliche Problemstellung über Select Grid lösen oder du hast es glaube ich bereits gelöst.
Das wäre mein nächster Ansatz gewesen, wenn das hier funktioniert.
Also bei einer Rechnung (oder Lieferschein) über die aufgeführte Anfrage die Serviceabrufe finden die "dazugehören" und sozusagen die Basisbelege bilden und dann mit Select Grid
das Rechnungsdokument + (alle) dazugehörigen Serviceabrufe drucken.
Dabei die Rechnung über "Document Din (DOC00008) und den
Serviceabruf über ein anders Layout wie ServiceCall (CSM03511) welches alle Details (FromDate, ToDate, Duration, Remark, Item Code ....) des Serviceaufruf druckt.
Bei Select Grid fehlen mir noch ein paar Grundlagen, aber wie gesagt, das kommt sicher als nächsters.
Gruss,
Tobias
Tobias Loke
Hallo, nach ein paar Tagen habe ich eine Lösung gefunden.@Sascha: Funktioniert auch direkt für Rechnungen
Anfrage erstellen und speichern:
SELECT DLN1.LineNum as DLN1Line, EFFORT.*, OSCL.*, ODLN.[DocEntry] AS 'DocEntry', DLN1.[ItemCode] AS 'ItemCode',
DLN1.[LineNum] AS 'LineNum'
FROM
[dbo].[@SWA_CT_EFFORT] EFFORT INNER JOIN
[dbo].[OSCL] OSCL ON EFFORT.[U_ObjEntry] = OSCL.CallId INNER JOIN
[dbo].[@@RDR1] DLN1 ON DLN1.[U_SWA_CT_BEntry] = OSCL.[callID] and DLN1.[U_SWA_CT_BType] = OSCL.[objType] INNER JOIN
[dbo].[O@@RDR] ODLN ON ODLN.[DocEntry] = DLN1.[DocEntry] INNER JOIN
[dbo].[@SWA_CT_ETC_ITEM] EFFORTCAT ON EFFORTCAT.CODE = EFFORT.U_EffCatItmCode
WHERE
ODLN.[DocEntry] = [%DocEntry] AND
ODLN.[DocEntry] = DLN1.[DocEntry] AND
DLN1.[ItemCode] = EFFORTCAT.[U_ItemCode] AND
EFFORT.[U_ObjType] = '191'
Nicht von den Alias Angaben der Tabellen verwirren lassen.
@@RDR1 und O@@RDR stehen je nach Verwendungszweck für
DLN1 und ODLN bei Lieferschein oder
INV1 und OINV bei Rechnung.
Die Abfrage in Layoutdefinition aufnehmen. Mit SWA_LD_Document:Row über LineNum (aus SWA_LD_Document:Row)
und LineNum (aus Abfrage) verknüpfen.
Nun in der Layoutvorlage neues AdvancedDataBand eingefügen.
Im Datenband dann noch einen Detailbereich einfügen. Im Detailbereich werden dann die eigentlichen Felder positioniert.
Die Datassource des AdvancedDataBand auf:
B1_Data.Document.DocumentRow.Row"NameDerGespeichertenAnfrage"
setzen (nicht auf B1_Data.Row."NameDerGespeichertenAnfrage"
oder auf B1_Data."NameDerGespeichertenAnfrage" )
Dann funktioniert es. Bitte beachten das die Fakturierung der Einzelpositionen bei laufenden/offenen Serviceabrufen eventuell noch nicht aussreichend berücksichtigt wird.
VG, Tobias
0
Please sign in to leave a comment.
Comments
0 comments