 |
|
สอบถามการออกรายงานด้วย Crystal Report หน่อยครับ...... |
|
 |
|
|
 |
 |
|
พอรันโปรแกรมแล้วผมก็เลือกข้อมูลจาก dropdownlist ข้อมูลก็ออกมาปรกติครับ
แต่พอเลือกข้อมูลอีกรอบมันถามหา ดังภาพด้านล่างครับ

แล้วนี้ code ทั้งหมดครับ เป็น asp.net ครับ
ขอความช่วยเหลือด้วยนะครับ
Code (VB.NET)
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data
Imports System.Data.SqlClient
Imports CrystalDecisions.Shared
Imports System.Data.OleDb
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Dim objConn As New SqlConnection
Dim objCmd As New SqlCommand
Dim dtAdapter As New SqlDataAdapter
Dim ds As New DataSet
Dim dt As DataTable
Dim strConnString As String
Dim strSQL As New StringBuilder
strConnString = "Server=IT-PC\SQL2005;UID=sa;PASSWORD=taweesak;database=TESTB1;Max Pool Size=400;Connect Timeout=600;"
strSQL.Append("SELECT '1-2'as 'Level',T1.docnum,T1.U_JobNo,T1.U_ProcessDate as 'Level1_ProcessDate',T1.DueDate as 'Level1_DueDate', T0.itemname as 'Level1_ProductName',")
strSQL.Append("T1.ItemCode as 'Level1_ProductCode',T1.[PlannedQty]as 'Level1_PlanQty',")
strSQL.Append("T18.[OnHand] as 'Level1_Onhand', T18.[IsCommited]as 'Level1_Commited', T18.[OnOrder]as 'Level1_Ordered', T18.[Counted] as 'Level1_Available',")
strSQL.Append("T2.ItemCode as 'Level2_Code',T2.[BaseQty] as 'Level2_BaseQty', T2.[PlannedQty] as 'Level2_PlanQty',")
strSQL.Append("T19.[OnHand] as 'Level2_Onhand', T19.[IsCommited]as 'Level2_Commited', T19.[OnOrder]as 'Level2_Ordered', T19.[Counted] as 'Level2_Available',")
strSQL.Append("'0' as 'Level3_Code','0' as 'Level3_BaseQty','0' as 'Level3_PlanQty',")
strSQL.Append("'0' as 'Level3_Onhand', '0' as 'Level3_Commited', '0' as 'Level3_Ordered', '0' as 'Level3_Available',")
strSQL.Append("'0' as 'Level4_Code','0' as 'Level4_BaseQty','0' as 'Level4_PlanQty',")
strSQL.Append("'0' as 'Level4_Onhand', '0'as 'Level4_Commited', '0'as 'Level4_Ordered', '0' as 'Level4_Available'")
strSQL.Append(" FROM OWOR T1 INNER JOIN WOR1 T2 ON T1.DocEntry = T2.DocEntry ")
strSQL.Append(" INNER join OITM T0 ON T0.ItemCode = T1.ItemCode and T0.[TreeType] = 'P'") '--Level 1
strSQL.Append(" INNER JOIN OITM T13 On T13.ItemCode= T2.ItemCode and T13.[TreeType] = 'P'") '--Level 2
strSQL.Append(" INNER JOIN OITW T18 ON T1.itemcode = T18.itemcode and T18.[WhsCode] = 'W02'") '--FG-Factory--Level 1
strSQL.Append(" INNER JOIN OITW T19 ON T2.itemcode = T19.itemcode and T19.[WhsCode] = 'W02'") '--FG-Factory--Level 2
strSQL.Append("where T1.U_jobno = '" & Me.DDL1.Text & "'")
strSQL.Append(" Union ")
strSQL.Append(" SELECT '3'as 'Level',T1.docnum,T1.U_JobNo,T1.U_ProcessDate as 'Level1_ProcessDate',T1.DueDate as 'Level1_DueDate', T0.itemname as 'Level1_ProductName',")
strSQL.Append("T1.ItemCode as 'Level1_ProductCode',T1.[PlannedQty]as 'Level1_PlanQty',")
strSQL.Append("T18.[OnHand] as 'Level1_Onhand', T18.[IsCommited]as 'Level1_Commited', T18.[OnOrder]as 'Level1_Ordered', T18.[Counted] as 'Level1_Available',")
strSQL.Append("T2.ItemCode as 'Level2_Code',T2.[BaseQty] as 'Level2_BaseQty', T2.[PlannedQty] as 'Level2_PlanQty',")
strSQL.Append("T19.[OnHand] as 'Level2_Onhand', T19.[IsCommited]as 'Level2_Commited', T19.[OnOrder]as 'Level2_Ordered', T19.[Counted] as 'Level2_Available',")
strSQL.Append("T4.Code as 'Level3_Code',T4.[Quantity] as 'Level3_BaseQty',T4.[Quantity]*T1.[PlannedQty] as 'Level3_PlanQty',")
strSQL.Append("T20.[OnHand] as 'Level3_Onhand', T20.[IsCommited]as 'Level3_Commited', T20.[OnOrder]as 'Level3_Ordered', T20.[Counted] as 'Level3_Available',")
strSQL.Append("'0' as 'Level4_Code','0' as 'Level4_BaseQty','0' as 'Level4_PlanQty',")
strSQL.Append("'0' as 'Level4_Onhand', '0'as 'Level4_Commited', '0'as 'Level4_Ordered', '0' as 'Level4_Available'")
strSQL.Append("FROM OWOR T1 INNER JOIN WOR1 T2 ON T1.DocEntry = T2.DocEntry ")
strSQL.Append(" INNER join OITM T0 ON T0.ItemCode = T1.ItemCode and T0.[TreeType] = 'P'") '--Level 1
strSQL.Append(" INNER JOIN OITM T13 On T13.ItemCode= T2.ItemCode and T13.[TreeType] = 'P'") '--Level 2
strSQL.Append(" INNER JOIN OITW T18 ON T1.itemcode = T18.itemcode and T18.[WhsCode] = 'W02'") '--FG-Factory--Level 1
strSQL.Append(" INNER JOIN OITW T19 ON T2.itemcode = T19.itemcode and T19.[WhsCode] = 'W02'") '--FG-Factory--Level 2
strSQL.Append(" INNER JOIN OITT T3 On T3.Code = T2.ItemCode") ' --Level 2
strSQL.Append(" INNER JOIN ITT1 T4 On T3.Code = T4.Father") ' --Level 3
strSQL.Append(" INNER JOIN OITM T14 On T14.ItemCode= T4.Code and T14.[TreeType] = 'P'") ' --Level 3
strSQL.Append(" INNER JOIN OITW T20 ON T4.code = T20.itemcode and T20.[WhsCode] = 'W01'") ' --RM-Factory--Level 3
strSQL.Append("where T1.U_jobno = '" & Me.DDL1.Text & "'")
strSQL.Append(" Union ")
strSQL.Append(" SELECT '4'as 'Level',T1.docnum,T1.U_JobNo,T1.U_ProcessDate as 'Level1_ProcessDate',T1.DueDate as 'Level1_DueDate', T0.itemname as 'Level1_ProductName',")
strSQL.Append("T1.ItemCode as 'Level1_ProductCode',T1.[PlannedQty]as 'Level1_PlanQty',")
strSQL.Append("T18.[OnHand] as 'Level1_Onhand', T18.[IsCommited]as 'Level1_Commited', T18.[OnOrder]as 'Level1_Ordered', T18.[Counted] as 'Level1_Available',")
strSQL.Append("T2.ItemCode as 'Level2_Code',T2.[BaseQty] as 'Level2_BaseQty', T2.[PlannedQty] as 'Level2_PlanQty',")
strSQL.Append("T19.[OnHand] as 'Level2_Onhand', T19.[IsCommited]as 'Level2_Commited', T19.[OnOrder]as 'Level2_Ordered', T19.[Counted] as 'Level2_Available',")
strSQL.Append("T4.Code as 'Level3_Code',T4.[Quantity] as 'Level3_BaseQty',T4.[Quantity]*T1.[PlannedQty] as 'Level3_PlanQty',")
strSQL.Append("T20.[OnHand] as 'Level3_Onhand', T20.[IsCommited]as 'Level3_Commited', T20.[OnOrder]as 'Level3_Ordered', T20.[Counted] as 'Level3_Available',")
strSQL.Append("T16.Code as 'Level4_Code',T16.[Quantity] as 'Level4_BaseQty',T16.[Quantity]*T1.[PlannedQty] as 'Level4_PlanQty',")
strSQL.Append("T21.[OnHand] as 'Level4_Onhand', T21.[IsCommited]as 'Level4_Commited', T21.[OnOrder]as 'Level4_Ordered', T21.[Counted] as 'Level4_Available'")
strSQL.Append("FROM OWOR T1 INNER JOIN WOR1 T2 ON T1.DocEntry = T2.DocEntry ")
strSQL.Append(" INNER join OITM T0 ON T0.ItemCode = T1.ItemCode and T0.[TreeType] = 'P'") '--Level 1
strSQL.Append(" INNER JOIN OITM T13 On T13.ItemCode= T2.ItemCode and T13.[TreeType] = 'P'") '--Level 2
strSQL.Append(" INNER JOIN OITW T18 ON T1.itemcode = T18.itemcode and T18.[WhsCode] = 'W02'") ' --FG-Factory--Level 1
strSQL.Append(" INNER JOIN OITW T19 ON T2.itemcode = T19.itemcode and T19.[WhsCode] = 'W02'") ' --FG-Factory--Level 2
'--Level 3
strSQL.Append(" INNER JOIN OITT T3 On T3.Code = T2.ItemCode") ' --Level 2
strSQL.Append(" INNER JOIN ITT1 T4 On T3.Code = T4.Father") ' --Level 3
strSQL.Append(" INNER JOIN OITM T14 On T14.ItemCode= T4.Code and T14.[TreeType] = 'P'") ' --Level 3
strSQL.Append(" INNER JOIN OITW T20 ON T4.code = T20.itemcode and T20.[WhsCode] = 'W01'") ' --RM-Factory--Level 3
'--Level 4
strSQL.Append(" INNER JOIN OITT T15 On T15.Code = T4.Code") ' --Level 4
strSQL.Append(" INNER JOIN ITT1 T16 On T15.Code = T16.Father") ' --Level 5
strSQL.Append(" INNER JOIN OITM T17 On T17.ItemCode= T16.Code and T17.[TreeType] = 'P'") ' --Level 5
strSQL.Append(" INNER JOIN OITW T21 ON T16.code = T21.itemcode and T21.[WhsCode] = 'W01'") '--RM-Factory--Level 4
strSQL.Append("where T1.U_jobno = '" & Me.DDL1.Text & "'")
objConn.ConnectionString = strConnString
With objCmd
.Connection = objConn
.CommandText = strSQL.ToString()
.CommandType = CommandType.Text
End With
dtAdapter.SelectCommand = objCmd
dtAdapter.Fill(ds, "myDataReport")
dt = ds.Tables(0)
dtAdapter = Nothing
objConn.Close()
objConn = Nothing
Dim rpt As New ReportDocument()
rpt.Load(Server.MapPath("CrystalReport1.rpt"))
rpt.SetDataSource(dt)
Me.CrystalReportViewer1.ReportSource = rpt
'Dim TL As TableLogOnInfo =
End Sub
End Class
Tag : ASP, Ms SQL Server 2005, Crystal Report, Web (ASP.NET), VS 2008 (.NET 3.x)
|
|
 |
 |
 |
 |
Date :
2014-07-22 14:16:48 |
By :
e_tawee |
View :
1690 |
Reply :
8 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
Dim CTableLogInfo As TableLogOnInfo
Dim ConnInfo As CrystalDecisions.Shared.ConnectionInfo = New ConnectionInfo()
ConnInfo.Type = ConnectionInfoType.CRQE
ConnInfo.ServerName = DBLayer.GetAbsoluteDBPath()
ConnInfo.DatabaseName = ""
ConnInfo.UserID = "Admin"
ConnInfo.AllowCustomConnection = False
ConnInfo.IntegratedSecurity = False
For Each CTable As Table In CRpt.Database.Tables
CTable.LogOnInfo.ConnectionInfo = ConnInfo
CTableLogInfo = CTable.LogOnInfo
CTableLogInfo.ReportName = CRpt.Name
CTableLogInfo.TableName = CTable.Name
CTable.ApplyLogOnInfo(CTableLogInfo)
Next
CrystalReportViewer1.ReportSource = CRpt
CrystalReportViewer1.RefreshReport()
http://stackoverflow.com/questions/4254335/how-do-i-change-logon-info-dynamically-in-crystal-report-and-ms-access
|
ประวัติการแก้ไข 2014-07-22 17:01:40
 |
 |
 |
 |
Date :
2014-07-22 17:00:49 |
By :
nongpaoza |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
@หลวงปู่ e_tawee ไม่ธรรมดาเลยนะครับท่าน ปัญหาของท่านผมไม่ทราบครับ
ถึงทราบผมก็ลืมไปแล้ว กลัวว่า เดาไปแล้วผลลัพธ์มันถูกต้อง และตรงตามความต้องการ
คุณและผมเดินทางมาถึงขั้นนี้แล้ว
บางสิ่งที่ผมจำเป็นต้องทำในอนาคต นั่นคือ เลิกใช้ Crystal Reports, SSRS, Fast Reports, etc โดยถาวรตลอดไป
นั่นคือผมต้องเขียน Reporter ขึ้นมาใช้งานเอง (ผมจำเป็นต้องทำครับ แต่ของหลวงปู่ผมไม่รู้ครับ)
ปล. ขอให้โชคดีครับ
|
ประวัติการแก้ไข 2014-07-23 09:57:29 2014-07-23 10:01:22
 |
 |
 |
 |
Date :
2014-07-23 09:56:19 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ปัญหาด้านบนผมแก้ได้แล้วเพียงแต่ตอนนี้
พอเรากด print หรือ export ข้อมูลออกมามันจะขึ้นเหมือนข้างบนครับ
ลองโค๊ดหลายตัวละไม่ได้สักทีใครเคยเจอปัญหานี้ขอคำแนะนำด้วยนะครับ
ขอบคุณล่วงหน้าครับ
|
 |
 |
 |
 |
Date :
2014-07-24 09:49:17 |
By :
e_tawee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 3 เขียนโดย : e_tawee เมื่อวันที่ 2014-07-24 09:49:17
อันนี้ผมไม่รู้จริงฯครับ ผมเคยใช้ Crystal Reports แต่บางอย่างผมก็ไม่รู้(ไม่ทราบครับ)
ผมตั้งข้อสงสัยว่า
--- ผมตาเหร่ไปข้างหนึ่งเป็นเพราะ Crystal Reports หรือไม่ (ตารางบน Crystal Report กะเอาจนผมตาเหล่ไปเลยครับ)
--- Fomula Coding ของ Crystal Reports ผมดูแล้วมันไม่เป็นมิตรครับ (ใช้ได้เฉพาะ Crystal Reports เท่านั้น)
ทุกวันนี้ผมใช้ SSRS และ Fomula Coding ของ SSRS มันเป็นมิตรครับ (ความรู้สึกเหมือนเขียนด้วย C#/VB )
--- ข้อเสีย ผมรู้สึกว่ามันโหลดและแสดงผลได้ค่อนข้างช้ากว่า Crystal Reports
--- ข้อดี และแจ๋วจริงฯ นั่นคือ Dynamic Columns, Dynamics Rows, Dynamic ตามที่เราต้องการ แม้กระทั่ง UnDesign Time ครับ
(มันเก็บข้อมูลทุกฯอย่างเป็น .XML)
...
...
...
|
ประวัติการแก้ไข 2014-07-24 10:49:38 2014-07-24 10:53:23
 |
 |
 |
 |
Date :
2014-07-24 10:46:29 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าบังคับให้ผมเลือกระหว่าง Crystal Reports VS SSRS ผมคงเลือก SSRS
แต่ถ้าบังคับให้ผมทำ ผมจะเอา Crystal Reports + SSRS เป็นต้นแบบเพื่อ
คุณสมบัติบางอย่างผมก็ไม่ได้ใช้ และบางครั้งมันดีเกินไปสำหรับผม
นี่คือที่มาของคำว่า "ผมอาจต้องเขียน Reporter ขึ้นมาใช้งานเองครับ"
ปล. อันนี้ไม่ใช่แนวคิดนะครับ แต่ผมจำเป็นต้องทำครับ และต้องทำ ทุกฯย่างก้าวสำหรับผมไม่มีอะไรได้มาง่ายฯครับ
|
ประวัติการแก้ไข 2014-07-24 11:04:42 2014-07-24 11:07:11
 |
 |
 |
 |
Date :
2014-07-24 11:02:38 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
โลกกว้างกว้าง ในมุมแคบแคบของผม ผมมั่นใจว่า มันจะไม่กระทบกับอะไรเลยในสังคมนี้ครับ(ไทย) ครับ
ผมเป็นคนตัวเล็กฯ ในคราบของมนุษย์คนหนึ่ง
---- "ผมอาจจะต้องเขียน Reporter ขึ้นมาใช้งานเองครับ"
---- "ผมจะทำ..."
---- "ผมจะทำ..."
---- "ผมอาจจะต้องเขียน OS ขึ้นมาใช้งานเองครับ"
---- "ผมจะทำ..."
---- "ผมจะทำ..."
...
...
...
---- "ผมอาจจะ
---- "ผมจะทำ..."
---- "ผมจะทำ..."
...
...
...
---- "ผมอาจจะ
---- "ผมจะทำ..."
---- "ผมจะทำ..."
...
...
...
---- "ผมอาจจะ
---- "ผมจะทำ..."
---- "ผมจะทำ..."
|
 |
 |
 |
 |
Date :
2014-07-24 11:19:28 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จากประสบการณ์ผมค่อนข้างเชื่อว่า คุณกำลังทำการเชื่อม report ด้วยวิธีการออกแบบ dataset mapping คือใน visual studio จะมีไฟล์นามสกุล xsd แล้วใน xsd ของคุณจะมี dataTable สร้างรับเอาไว้
สมมติฐานข้างต้น ถ้าเป็นแบบนี้ ก็ไม่ได้เกี่ยวอะไรกับการ Logon Table แต่ปัญหานี้จะไปเกี่ยวกับการดึงเอาฟิวล์ขึนมาในตัวแปร strSQL ของคุณนะ จำนวนฟิวล์ที่คุณรับค่าขึ้นมาไม่ตรงกันกับจำนวนฟิวล์ที่อยู่ใน xsd เวลาต่อเข้า report จะทำให้เกิดปัญหาถามหา dataset ที่ตรงกัน
ยกตัวอย่างง่าย ๆ สมมติใน xsd ของคุณมีสร้างเอาไว้ 1 Table ชื่ออะไรก็ได้ แต่มีฟิวล์อยู่ 2 ฟิวล์ เช่น ID, Name
ปรากฎว่าเวลาคุณดึงข้อมูลขึ้นมา คุณดึงได้เป็น Select ID, Name, Address From Tbl_Test เป็นต้น
แล้วคุณก็ Binding มันเข้ามาที่ dataTable แล้วต่อเข้า Report กรณีแบบนี้พังครับ เพราะจำนวนฟิวล์ไม่ตรงกัน
สรุป ตรวจสอบว่าคุณทำการ Select ขึ้นมากี่ Column แล้วดูว่าในไฟล์ xsd ของคุณมี Column ครบถ้วนหรือไม่ มันต้องเท่ากันเท่านั้น
|
 |
 |
 |
 |
Date :
2014-07-24 11:58:31 |
By :
gunnermontana |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทำได้แล้วครับขอบคุณทุกท่านมากๆๆครับที่ให้แนวคิด
|
 |
 |
 |
 |
Date :
2014-07-25 11:36:17 |
By :
e_tawee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|