ダイアグラムとチャートを作成する
チャートやダイアグラムを作成する場合、.NETのSystem.Windows.Forms.DataVisualization.Chartクラスを使用することができます。
今回は、このクラスを使用して、ダイアグラム”orders”(発注金額)をトランザクションVD03(顧客の表示)の販売エリアデータに組み込みます。
この実装は以下の手順で行います。
- ダイアグラムを表示するためのプッシュボタンを挿入し、画像ファイルを表示します。
- 発注データを読み込みます。
- ダイアグラムを画像ファイルとして作成します。
最初の部分は数行のコードで十分です。
// Reset variables if new transaction or new customer
if not V[VD03_transactionid=&V[_transactionid]]
or not V[VD03_kunnr=&F[RF02D-KUNNR]]
Set V[VD03_*] “”
Set V[VD03_transactionid] “&V[_transactionid]”
Set V[VD03_kunnr] “&F[RF02D-KUNNR]”
endif
if Q[transaction=VD03] and Q[Page=Verkauf] Set V[chartfilename] “&%[TEMP]\saleschart.&V[VD03_kunnr].png”
// display chart?
if V[VD03_display_chart=X]
Box (7,86) (22,135) “Orders &V[year4] – &V[year0] in thousands”
Pushbutton (7,137) “x” size=(1,1) process=“chart_close.txt”
Image (8,87) “&V[chartfilename]” -nobuffer
else
Pushbutton (7,86) “@NF\QDisplay chart@Chart orders”process=“chart_open.txt”
endif
endif
InputScript “chart_open.txt”:
// Generate chart
…
// Display chart
Set V[VD03_display_chart] “X”
Return
InputScript “chart_close.txt”:
// Close chart
Set V[VD03_display_chart] “”
Return
ユーザーは、ボタンを押してダイアグラムを呼び出せます。また、後でダイアグラムをクローズできます。
ダイアグラムのデータを読み込むため、関数モジュール/guixt/selectを使用します。ここでは、販売情報システム(VIS)の統計テーブルのひとつを読み込みます。SAPの標準テーブルであるS001か、パフォーマンス上の問題がある場合はS001のコピー(品目コードのキーを取り除いたもの)を読み込みます。そして、VB.NET関数を呼び出してダイアグラムを作成します。
// Determine years
Set V[year0] &V[today_y]
Set V[year1] &V[year0] – 1
Set V[year2] &V[year0] – 2
Set V[year3] &V[year0] – 3
Set V[year4] &V[year0] – 4
// ialize sales figues
Set V[sales0] 0
Set V[sales1] 0
Set V[sales2] 0
Set V[sales3] 0
Set V[sales4] 0
// key values
Set V[kunnr] “&F[RF02D-KUNNR]”
Set V[vkorg] “&F[RF02D-VKORG]”
Set V[vtweg] “&F[RF02D-VTWEG]”
Set V[spart] “&F[RF02D-SPART]”
// leading zeros
Set V[kunnr](1-10) “0000000000&V[kunnr]” -alignright
// search condition
Set V[condition] “KUNNR = ‘&V[kunnr]’ and VKORG = ‘&V[vkorg]’ and VTWEG = ‘&V[vtweg]’ and SPART = ‘&V[spart]’ and SPMON GE ‘&V[year4]01′”
// read VIS statistics table S001
Call /guixt/select in.Table=“S951”in.Condition=“&V[condition]” in.Fields=“SPMON,AENETWR”table.V1table=“r1” table.V2table=“r2”
// Build sales figures
Set V[i] 1
label next
CopyText fromText=“r1” toString=“spmon” line=“&V[i]”
if Q[ok]
CopyText fromText=“r2” toString=“aenetwr” line=“&V[i]”
Set V[i] &V[i] + 1
Set V[year] &V[spmon](1-4)
// year0
if V[year=&V[year0]]
Set V[sales0] &V[sales0] + &V[aenetwr]
goto next
endif
// year1
if V[year=&V[year1]]
Set V[sales1] &V[sales1] + &V[aenetwr]
goto next
endif
// year2
if V[year=&V[year2]]
Set V[sales2] &V[sales2] + &V[aenetwr]
goto next
endif
// year3
if V[year=&V[year3]]
Set V[sales3] &V[sales3] + &V[aenetwr]
goto next
endif
// year4
if V[year=&V[year4]]
Set V[sales4] &V[sales4] + &V[aenetwr]
goto next
endif
goto next
endif
// in thousands
Set V[sales0] &V[sales0] / 1000 decimals=0
Set V[sales1] &V[sales1] / 1000 decimals=0
Set V[sales2] &V[sales2] / 1000 decimals=0
Set V[sales3] &V[sales3] / 1000 decimals=0
Set V[sales4] &V[sales4] / 1000 decimals=0
// generate chart
CallVB Chart01.Customer.SalesChart &quo”&V[chartfilename]”
VB.NET関数で作成する画像ファイルの名前を渡します。
ダイアグラムで必要なデータ(発注金額と発注年)は、GuiXT変数から直接取り出せます。
1 | Imports System.Windows.Forms |
2 | Imports System.Data |
3 | Imports System.Drawing |
4 | Imports System.Windows.Forms.DataVisualization.Charting |
5 | |
6 | |
7 | Public Class customer |
8 | |
9 | Private guixt As New guinet.guixt |
10 | |
14 | Public Sub SalesChart(ByVal imgfilename As String) |
15 | |
16 | ‘ create chart |
17 | Dim Chart1 As New Chart() |
18 | |
19 | Chart1.Size = New System.Drawing.Size(480, 340) |
20 | Chart1.BackColor = Color.DeepSkyBlue |
21 | |
22 | Dim ChartArea1 As New ChartArea |
23 | |
24 | ChartArea1.Name = “ChartArea1” |
25 | Chart1.ChartAreas.Add(ChartArea1) |
26 | |
27 | Dim Series1 As New Series |
28 | Series1.ChartArea = “ChartArea1” |
29 | Series1.Palette = ChartColorPalette.Pastel |
30 | Series1.XValueMember = “Year” |
31 | Series1.YValueMembers = “Sales” |
32 | Chart1.Series.Add(Series1) |
33 | |
34 | Dim table As New DataTable |
35 | |
36 | ‘ Create columns in the DataTable |
37 | table.Columns.Add(“Year”, GetType(String)) |
38 | table.Columns.Add(“Sales”, GetType(Integer)) |
39 | |
40 | ‘ Add sales figures for 5 years, using GuiXT variables |
41 | table.Rows.Add(guixt.GetVariable(“year4”), _ |
42 | CInt(guixt.GetVariable(“sales4”))) |
43 | |
44 | table.Rows.Add(guixt.GetVariable(“year3”), _ |
45 | CInt(guixt.GetVariable(“sales3”))) |
46 | |
47 | table.Rows.Add(guixt.GetVariable(“year2”), _ |
48 | CInt(guixt.GetVariable(“sales2”))) |
49 | |
50 | table.Rows.Add(guixt.GetVariable(“year1”), _ |
51 | CInt(guixt.GetVariable(“sales1”))) |
52 | |
53 | table.Rows.Add(guixt.GetVariable(“year0”), _ |
54 | CInt(guixt.GetVariable(“sales0”))) |
55 | |
56 | ‘ Chart data |
57 | Chart1.DataSource = table |
58 | |
59 | ‘ save chart as .png file |
60 | Chart1.SaveImage(imgfilename, ChartImageFormat.Png) |
61 | |
62 | End Sub |
63 | End Class |