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