Inhalt
Der Bericht "Reklamationen" zeigt für die auswählten Kunden
die Reklamationen der letzten 30 Tage. Der Zeitraum kann vom Benutzer
variiert werden.
|
Datenbeschaffung
Die Datenbeschaffung erfolgt über die CIS ABAP
Schnittstelle analog dem
Beispiel Umsätze.

VB.net
' Report complaints
Public Function CreateReportComplaints _
(ByVal keys As Dictionary(Of String, String), _
ByVal id As String, _
ByVal customernumbers() As String, _
ByVal customernames() As String) As String
' We use CIS addon ABAP function to read the complaints
' Clear input/output
rfc_input.Clear()
rfc_output.Clear()
' Report options
' Option 0: days
Dim maxdays As String
maxdays = GetItem(keys, "COMPLAINTS.OPTION.0")
If maxdays = "" Then
maxdays = "30"
InsertItem(keys, "COMPLAINTS.OPTION.0", maxdays)
End If
' Build up input
Dim s As addonsimplestring = _
DirectCast(rfc_input.AddNew(), addonsimplestring)
s.content = GetItem(keys, "VKORG")
s = DirectCast(rfc_input.AddNew(), addonsimplestring)
s.content = GetItem(keys, "VTWEG")
s = DirectCast(rfc_input.AddNew(), addonsimplestring)
s.content = GetItem(keys, "SPART")
s = DirectCast(rfc_input.AddNew(), addonsimplestring)
s.content = maxdays
' following parameters: customer numbers
For Each cn As String In customernumbers
s = DirectCast(rfc_input.AddNew(), addonsimplestring)
s.content = cn
Next
' Request data
ic.RfcRequest("CISADDON.CUSTOMER_COMPLAINTS", "S", _
rfc_input, rfc_output)
|
In der ABAP-Routine erhalten wir die Organisationsschlüssel VKORG, VTWEG,
SPART, die Anzahl Tage für den Zeitraum der Reklamationen und anschließend alle selektierten Kundennummern.
Wir lesen die Reklamationen aus Tabelle VIQMEL und anschliessend pro
Reklamation die Artikelbezeichnung:

ABAP
form customer_complaints tables reqparm resparm
changing rc type c msg type c.
data: wa(8000).
data: vkorg like s001-vkorg,
vtweg like s001-vtweg,
spart like s001-spart,
days(12).
* complaints during past n days
data:
qmdat type D.
Read Table reqparm index 1 into vkorg.
Read Table reqparm index 2 into vtweg.
Read Table reqparm index 3 into spart.
Read Table reqparm index 4 into days.
qmdat = sy-datum - days.
* Customer numbers
data: begin of customers occurs 10,
kunnr like kna1-kunnr,
end of customers.
Data: k type i value 5.
Read Table reqparm index k into customers-kunnr.
While sy-subrc EQ 0.
Append customers.
k = k + 1.
Read Table reqparm index k into customers-kunnr.
Endwhile.
* no customers?
if customers[] is initial.
exit.
endif.
* Result table
data: begin of r occurs 10,
kunum like viqmel-kunum,
qmnum like viqmel-qmnum,
qmdat like viqmel-qmdat,
matnr like viqmel-matnr,
ls_kdauf like viqmel-ls_kdauf,
qmtxt like viqmel-qmtxt,
qmdab like viqmel-qmdab,
end of r.
Select *
from viqmel
into corresponding fields of table r
for all entries in customers
where kunum = customers-kunnr
and vkorg = vkorg
and vtweg = vtweg
and spart = spart
and qmart EQ 'Q1'
and qmdat GE qmdat.
Sort r by qmdat ascending.
Loop at r.
* MAKT
Select single * from makt
where matnr = r-matnr and spras = sy-langu.
if sy-subrc NE 0.
clear makt.
Endif.
* output result
Concatenate
r-qmdat
r-qmnum
r-kunum
r-matnr
makt-maktx
r-ls_kdauf
r-qmtxt
r-qmdab
into wa
separated by cl_abap_char_utilities=>horizontal_tab.
Append wa to resparm.
Endloop.
Endform.
|
|
Layout
Die Ausgabetabelle bauen wir in VB.NET wieder als
HTML-String auf analog dem
Beispiel Umsätze. Als kleine Besonderheit verwenden wir unterschiedlichen
Farben für abgeschlossene und offene Reklamationen.
Ein typischer
Ausschnitt aus dem VB.NET Coding:

VB.net
' material number
If qmdab = Nothing Then
sb.Append("<br><i><div class='outputcelldiv'
style='color:#800000; margin-left:85px;'>")
Else
sb.Append("<br><i><div class='outputcelldiv'
yle='color:#505050; margin-left:85px;'>")
End If
sb.Append("<div style='text-align:left;
text-overflow: ellipsis;'>")
AppendString(sb, ic.MessageText("REPORT_COMPLAINTS_MATNR"))
sb.Append(" ")
AppendString(sb, matnr.TrimStart("0"))
sb.Append(" ")
AppendString(sb, maktx)
sb.Append("</div>")
' text
sb.Append("<div style='text-align:left;
text-overflow: ellipsis;' >")
AppendString(sb, qmtxt)
sb.Append("</div>")
|
|
Zusatzparameter
Zunächst werden die Reklamationen der letzten 30 Tage angezeigt. Der
Benutzer kann dann einen anderen Zeitraum wählen (60 Tage / 90 Tage / 1
Jahr / Alle).
Die Anzahl der Tage steht
als COMPLAINTS.OPTION.0 im übergebenen Dictionary "keys" zur Verfügung.
Am Angang ist die Option leer und wir setzen den Default-Wert "30".
Das VB.NET
Coding dazu sieht wie folgt aus:

VB.net
' Option 0: days
Dim maxdays As String
maxdays = GetItem(keys, "COMPLAINTS.OPTION.0")
If maxdays = "" Then
maxdays = "30"
InsertItem(keys, "COMPLAINTS.OPTION.0", maxdays)
End If
|
Zur Darstellung der Berichtsoptionen dient die HTML-Seite
"COMPLAINTSSALES2.OTPIONS.HTML". Sie liegt im Verzeichnis config/reports/views.DE
(deutsche Version). Falls Sie weitere Sprachen unterstützen,
entsprechend in confgi/reports/views.XX, z.B. config/reports/views.EN für
Englisch und config/reports/views. FR
für Französisch.
Die HTML-Seite ist im Prinzip beliebig. Für die Optionen können Sie
Eingabefelder <INPUT>, Drop-Down Felder <SELECT> und Checkboxen <INPUT
TYPE='CHECKBOX'> nutzen. Die Verbindung zur jeweiligen Option wird über
die HTML-Id d 'OPTION.0', 'OPTION.1',... des jeweiligen Elements
hergestellt.
In unserem Fall sieht es wie folgt aus:

HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | <html>
<head>
</head>
<body>
<div style='font-family: Helvetiva; font-size:12px;'></div>
<b>Reklamationen im Zeitraum</b>
<select size="1" id='OPTION.0' style='font-size:12px'>
<option value='30'>30 Tage</option>
<option value='60'>60 Tage</option>
<option value='90'>90 Tage</option>
<option value='365'>1 Jahr</option>
<option value='36500'>Alle</option>
</select>
</body>
</html>
|
Bitte beachten Sie:
- CSS-Style-Angaben werden erst unterhalb des <BODY> Tags
beachtet, da das HTML-Coding in die Anzeige des Berichts kopiert
wird.
- Die Taste zum erneuten Aufruf des Berichts nach Eingabe neuer
Optionen wird von CIS mobile automatisch eingeblendet
|