获取工资表中的字段总和并保存在RDLC报告中

问题描述 投票:0回答:1

我正在制定薪资计划。

我想要获得税务报告,我可以在其中对每个员工的 BASIC、RELIEFS、PAYE 等字段进行求和,并将结果保存在另一个表中,我可以在其中使用 RDLC 报告查看或打印它。

有两张桌子;员工数据和工资单。 STAFFDATA 中有 225 条记录,PAYROLL 中有 20 条记录,因为我抽取了 10 个人的样本并计算了他们的工资单。

然后,我在 STAFFDATA 中选择一个 Staffid 字段,然后转到工资单对记录进行排序并对所需字段求和,然后将结果数据保存在另一个临时文件 PAYTEMP 中。

这就是我所做的:

Try
        Dim MonthlyBasic As Double
        Dim MonthlyBasic1 As Double
        Dim Rent As Double
        Dim Rent1 As Double
        Dim Transport As Double
        Dim Transport1 As Double
        Dim OtherA As Double
        Dim OtherA1 As Double
        Dim Reliefs As Double
        Dim Reliefs1 As Double
        Dim PAYE As Double
        Dim PAYE1 As Double

        Dim da As New OleDbDataAdapter
        Dim ds As DataSet = New DataSet
        Dim b As String = "Provider =Microsoft.ACE.OLEDB.12.0; data source= C:\ECTSPAYROLL\ECTSPAY.accdb " 'this location can be edited in the settings or the app.config file

        Dim a As New OleDb.OleDbConnection(b)

        conDb.Open()
        sql = "Delete * from PAYTEMP"
        cmd.Connection = conDb
        cmd.CommandText = sql

        i = cmd.ExecuteNonQuery

        Dim mySelect1 As String = ("SELECT * FROM STAFFDATA")

        Dim adapter1 As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(mySelect1, conDb)
        Dim ds1 As DataSet = New DataSet
        adapter1.Fill(ds1, "STAFFDATA")

        For Index1 = 0 To ds1.Tables("STAFFDATA").Rows.Count - 1
            StaffID = ds1.Tables("STAFFDATA").Rows(Index1).Item("STAFFID")
            Surname = ds1.Tables("STAFFDATA").Rows(Index1).Item("SURNAME")
            OtherNames = ds1.Tables("STAFFDATA").Rows(Index1).Item("OTHERNAMES")

            MonthlyBasic1 = 0
            Rent1 = 0
            Transport1 = 0
            OtherA1 = 0
            Reliefs1 = 0
            PAYE1 = 0

            a.Open()

            Dim mySelect As String = ("SELECT * FROM PAYROLL WHERE (SALARYYEAR='" & txtYear.Text & "')")

            Dim adapter As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(mySelect, b)
            adapter.Fill(ds, "PAYROLL")

            For index = 0 To ds.Tables("PAYROLL").Rows.Count - 1
                If ds.Tables("PAYROLL").Rows(index).Item("STAFFID").ToString.ToLower.Equals(StaffID.ToLower) Then 'And ds.Tables("PAYROLL").Rows(index).Item("SALARYYEAR").ToString.ToLower.Equals(txtYear.Text.ToLower) Then
                    'If ds.Tables("PAYROLL").Rows(index).Item("SURNAME").ToString.ToLower.Equals(Surname.ToLower) And ds.Tables("PAYROLL").Rows(index).Item("OTHERNAMES").ToString.ToLower.Equals(OtherNames.ToLower) Then
                    Surname = ds.Tables("PAYROLL").Rows(index).Item("SURNAME")
                    OtherNames = ds.Tables("PAYROLL").Rows(index).Item("OTHERNAMES")
                    Department = ds.Tables("PAYROLL").Rows(index).Item("DEPARTMENT")
                    TINNo = ds.Tables("PAYROLL").Rows(index).Item("TINNO")
                    MonthlyBasic = ds.Tables("PAYROLL").Rows(index).Item("BASICPM")
                    Rent = ds.Tables("PAYROLL").Rows(index).Item("RENT")
                    Transport = ds.Tables("PAYROLL").Rows(index).Item("TRANSPORT")
                    OtherA = ds.Tables("PAYROLL").Rows(index).Item("OTHERA")
                    Reliefs = ds.Tables("PAYROLL").Rows(index).Item("RELIEFS")
                    PAYE = ds.Tables("PAYROLL").Rows(index).Item("PAYE")

                    MonthlyBasic1 = MonthlyBasic1 + MonthlyBasic
                    RENT1 = RENT1 + Rent
                    Transport1 = Transport1 + Transport
                    OtherA1 = OtherA1 + OtherA
                    Reliefs1 = Reliefs
                    PAYE1 = PAYE1 + PAYE

                End If
            Next
            StaffName = Surname & ", " & OtherNames
            DeductionHeading = "ANNUAL TAX RETURNS FOR YEAR " & txtYear.Text

            sql1 = "INSERT INTO PAYTEMP (HEADINGS,STAFFID,SURNAME,DEPARTMENT,TINNO,BASICPM,RENT,TRANSPORT,OTHERA,RELIEFS,PAYE) values ('" & DeductionHeading & "','" & StaffID & "','" & StaffName & "','" & Department & "','" & TINNo & "','" & MonthlyBasic1 & "','" & Rent1 & "','" & Transport1 & "','" & OtherA1 & "','" & Reliefs1 & "','" & PAYE1 & "');"

            cmd1.Connection = a
            cmd1.CommandText = sql1

            j = cmd1.ExecuteNonQuery

            StaffName = ""

            a.Close()

        Next

    Catch ex As Exception
        MsgBox(ex.Message.ToString)
    Finally
        conDb.Close()
    End Try

当我运行此程序时,这就是我在 PAYTEMP 文件中得到的内容,我打算将其用于 RDLC 报告。

我无法从 Excel 复制并粘贴它。

只有第一条记录是正确的。

其他记录不断增加,某些记录重复很多次,直到达到 225 条记录,而不是我预期的 10 条。

我不知道我哪里错了。

vb.net
1个回答
0
投票

我的 Access SQL 有点生疏(我更经常在 SQL Server 中工作),但是您想要更接近下面代码的东西,它首先完成数据库上的大部分工作,按人员数据分组进行总结总计,并使用查询参数包含来自客户端的必要信息:

Dim cnString As String = "Provider =Microsoft.ACE.OLEDB.12.0; data source= C:\ECTSPAYROLL\ECTSPAY.accdb " 'this location can be edited in the settings or the app.config file

Dim heading As String = "ANNUAL TAX RETURNS FOR YEAR " & txtYear.Text
Try
    Dim con As New OleDbConnection(cnString)
    Dim cmd As New OleDbCommand("Delete * from PAYTEMP", con)

    con.Open()
    cmd.ExecuteNonQuery()

    Dim sql As String = "
INSERT INTO PAYTEMP 
    (HEADINGS, STAFFID, SURNAME, DEPARTMENT, TINNO, BASICPM, RENT, 
     TRANSPORT, OTHERA, RELIEFS, PAYE)
SELECT ?, StaffData.StaffID, StaffData.SurName + ', ' + StaffData.OtherNames, 
    Payroll.Department, Payroll.TINNO,
    SUM(Payroll.BasicPM), SUM(Payroll.Rent), SUM(Payroll.Transport),
    SUM(Payroll.OtherA), SUM(Payroll.Reliefs), SUM(Payroll.PayE)
FROM StaffData
INNER JOIN Payroll ON (StaffData.StaffID = Payroll.StaffID)
GROUP BY StaffData.StaffID, StaffData.SurName, StaffData.OtherNames, Payroll.Department
WHERE ( Payroll.SalaryYear = ? )"

    cmd.CommandText = sql
    cmd.Parameters.AddWithValue("?", heading)
    cmd.Parameters.AddWithValue("?", txtYear.Text)
    con.ExecuteNonQuery()

Catch ex As Exception
    MsgBox(ex.Message)
Finally
    con.Close()
End Try
© www.soinside.com 2019 - 2024. All rights reserved.