コード例 #1
0
        protected override void WriteContent()
        {
            System.Data.DataTable linesTable = DataTableHelper.SelectDistinct(_table, "���u");

            //�إ߼g�J�e�m�@�~
            int writeRow = 4;
            PasteDataRowsOptions options = new PasteDataRowsOptions();
            options.IncludeSummary = false;	//��ʱ���Summary Row
            options.SummaryColumns.AddRange(new string[] { /*"�h��ƶq", */"�ƶq"/*, "�зǤu��", "���H�u����"*/, "�����u��", "�����u��", "�~�]�u��", "�~�]�u��", "�з��`�u��", "�з��`�u��", "����`�u��" /*"���зǤu��", "��ڤu��", "��ڤu��"*/ });
            options.NoSummaryColumns.AddRange(new string[] { "�зǤu��", "���H�u����", "���зǤu��", "��ڤu��", "��ڤu��" });

            PasteDataRowEventHandler beforeSummary = new PasteDataRowEventHandler(BeforePasteDataRowSummary);
            //this.SheetAdapter.BeforePasteDataRowSummary += beforeSummary;

            DataTableHelper dtHelper = new DataTableHelper();
            DataTable nonNormalHourTable = dtHelper.SelectGroupByInto("ReportTable", _srcTable,
                    "���u, Sum(�����u��) �����u��, �u������",
                    null, "���u,��ڧ�����,�u�@�渹,�~��,�~�W,�ƶq,�зǤu��,���H�u����,���зǤu��,�u�~�s��,�u������");

            //��C�Ӳ��u
            foreach (DataRow lineRow in linesTable.Rows)
            {
                //NOTICE: ��Select����ק�ɤ]�����ק�BeforePasteDataRowSummary���e
                DataRow[] rows = _table.Select("���u = '" + lineRow["���u"] + "'", "�u�@�渹,�Ǹ�");

                foreach (DataRow row in rows)
                {
                    string worksheet = (string)row["�u�@�渹"];
                    int serialNumber = (int)row["�Ǹ�"];
                    //��h���`+�]��
                    object abnormalResult = _srcTable.Compute("SUM(�����u��)", "�u�@�渹='" + worksheet + "' AND �u�~�s�� = " + serialNumber + " AND ���u = '" + lineRow["���u"] + "' AND (�u������=" + (int)HourType.���`�Ͳ��u�� + " OR �u������=" + (int)HourType.�]�� + ")");
                    if (abnormalResult != DBNull.Value)
                        row["����`�u��"] = (decimal)row["����`�u��"] - (decimal)abnormalResult;
                }
                //�g�J���e
                options.IncludeSummary = false;
                options.Row = writeRow;
                options.SummaryPrefix = lineRow["���u"] + "���u�p�p";
                writeRow = this.SheetAdapter.PasteDataRows(rows, options);

                //�g�J���`�Ͳ��u��,�]�ˤu��
                decimal unusual = 0;
                decimal package = 0;

                // ���o���`�Ͳ��u��
                object result = nonNormalHourTable.Compute("SUM(�����u��)", "���u = '" + lineRow["���u"] + "' AND �u������=" + (int)HourType.���`�Ͳ��u��);
                if (result != null && result != DBNull.Value)
                    unusual = (decimal)result;

                // ���o�]�ˤu��
                result = nonNormalHourTable.Compute("SUM(�����u��)", "���u = '" + lineRow["���u"] + "' AND �u������=" + (int)HourType.�]��);
                if (result != null && result != DBNull.Value)
                    package = (decimal)result;

                DataRow tmpRow = _table.NewRow();
                tmpRow["���"] = null;
                tmpRow[0] = "���`�Ͳ��u��";
                tmpRow["����`�u��"] = unusual;
                writeRow = this.SheetAdapter.PasteDataRow(tmpRow, writeRow, options.Column);

                tmpRow[0] = "�]��";
                tmpRow["����`�u��"] = package;
                writeRow = this.SheetAdapter.PasteDataRow(tmpRow, writeRow, options.Column);

                //�g�J�p�p
                options.Row = writeRow;
                _subttlRows.Add(writeRow);
                writeRow = this.SheetAdapter.PasteSummaryRow(rows, options);
            }
            //this.SheetAdapter.BeforePasteDataRowSummary -= beforeSummary;

            decimal ttlUnusual = 0;
            decimal ttlPackage = 0;

            // ���o���`�Ͳ��u��
            object tmpResult = nonNormalHourTable.Compute("SUM(�����u��)", "�u������=" + (int)HourType.���`�Ͳ��u��);
            if (tmpResult != null && tmpResult != DBNull.Value)
                ttlUnusual = (decimal)tmpResult;

            // ���o�]�ˤu��
            tmpResult = nonNormalHourTable.Compute("SUM(�����u��)", "�u������=" + (int)HourType.�]��);
            if (tmpResult != null && tmpResult != DBNull.Value)
                ttlPackage = (decimal)tmpResult;

            //�g�J�`�p(���]�A���`,�]��)
            DataTable tmpTable = _table.Clone();
            tmpTable.Columns["����`�u��"].Expression = string.Empty;	//����`�u�ɦۤv�p��

            DataRow totalRow = tmpTable.NewRow();

            foreach (string sumCol in options.SummaryColumns)
            {
                if (!string.IsNullOrEmpty(tmpTable.Columns[sumCol].Expression))
                    tmpTable.Columns[sumCol].Expression = string.Empty;

                object o;
                o = _table.Compute("SUM(" + sumCol + ")", string.Empty);
                totalRow[sumCol] = Convert.IsDBNull(o) ? 0 : (decimal)o;
            }
            foreach (string noSumCol in options.NoSummaryColumns)
            {
                tmpTable.Columns[noSumCol].Expression = string.Empty;
                totalRow[noSumCol] = DBNull.Value;
            }

            ////����`�u�� - (���`�Ͳ��u��+�]��) �e����L�F
            //object ttlHourObj = _table.Compute("SUM(����`�u��)", string.Empty);
            //decimal ttlHour = Convert.IsDBNull(ttlHourObj) ? 0 : (decimal)ttlHourObj;
            ////totalRow["����`�u��"] = ttlHour - (ttlUnusual + ttlPackage);

            totalRow[0] = "�`�p";
            _ttlRow = writeRow;
            tmpTable.Rows.Add(totalRow);
            writeRow = this.SheetAdapter.PasteDataRow(totalRow, writeRow, 1);

            //tmpTable = _table.Clone();
            ////�g�J���`,�]���`�p
            //tmpTable.Columns[tmpTable.Columns["�~�]�u��"].Ordinal].DataType = typeof(object);

            //DataRow abnormalTotalRow = tmpTable.NewRow();
            //abnormalTotalRow["���"] = null;
            //abnormalTotalRow[tmpTable.Columns["�~�]�u��"].Ordinal] = "���`�Ͳ��u��";
            //abnormalTotalRow["����`�u��"] = ttlUnusual;
            //writeRow = this.SheetAdapter.PasteDataRow(abnormalTotalRow, writeRow, options.Column);

            //abnormalTotalRow[tmpTable.Columns["�~�]�u��"].Ordinal] = "�]��";
            //abnormalTotalRow["����`�u��"] = ttlPackage;
            //writeRow = this.SheetAdapter.PasteDataRow(abnormalTotalRow, writeRow, options.Column);

            ////�g�J�`�p(+���`,�]��)
            //totalRow = tmpTable.NewRow();
            //options.SummaryColumns = new List<string>(new string[] { "����`�u��", "��`�u��" });
            //options.NoSummaryColumns = new List<string>(new string[] { "�ƶq", "�����u��", "�����u��", "�~�]�u��", "�~�]�u��", "�зǤu��", "���H�u����", "���зǤu��", "��ڤu��", "��ڤu��", "�з��`�u��" });

            //foreach (string sumCol in options.SummaryColumns)
            //{
            //    if (!string.IsNullOrEmpty(tmpTable.Columns[sumCol].Expression))
            //        tmpTable.Columns[sumCol].Expression = string.Empty;

            //    object o;
            //    o = _table.Compute("SUM(" + sumCol + ")", string.Empty);
            //    totalRow[sumCol] = Convert.IsDBNull(o) ? 0 : (decimal)o;
            //}
            //foreach (string noSumCol in options.NoSummaryColumns)
            //{
            //    tmpTable.Columns[noSumCol].Expression = string.Empty;
            //    totalRow[noSumCol] = DBNull.Value;
            //}

            //totalRow[tmpTable.Columns["�~�]�u��"].Ordinal] = "Total";
            //totalRow["���"] = null;
            //tmpTable.Rows.Add(totalRow);

            //_ttlRow = writeRow;
            //writeRow = this.SheetAdapter.PasteDataRow(totalRow, writeRow, 1);

            base.WriteContent();
        }
コード例 #2
0
        protected override void WriteContent()
        {
            System.Data.DataTable linesTable = DataTableHelper.SelectDistinct(_table, "產線");

            //建立寫入前置作業
            int writeRow = 4;
            PasteDataRowsOptions options = new PasteDataRowsOptions();

            options.IncludeSummary = false;     //手動控制Summary Row
            options.SummaryColumns.AddRange(new string[] { /*"退驗數量", */ "數量" /*, "標準工時", "單位人工成本"*/, "內部工時", "內部工資", "外包工資", "外包工時", "標準總工資", "標準總工時", "實際總工時" /*"單位標準工資", "實際工時", "實際工資"*/ });
            options.NoSummaryColumns.AddRange(new string[] { "標準工時", "單位人工成本", "單位標準工資", "實際工時", "實際工資" });

            PasteDataRowEventHandler beforeSummary = new PasteDataRowEventHandler(BeforePasteDataRowSummary);
            //this.SheetAdapter.BeforePasteDataRowSummary += beforeSummary;

            DataTableHelper dtHelper           = new DataTableHelper();
            DataTable       nonNormalHourTable = dtHelper.SelectGroupByInto("ReportTable", _srcTable,
                                                                            "產線, Sum(內部工時) 內部工時, 工時類型",
                                                                            null, "產線,實際完成日,工作單號,品號,品名,數量,標準工時,單位人工成本,單位標準工資,工品編號,工時類型");

            //對每個產線
            foreach (DataRow lineRow in linesTable.Rows)
            {
                //NOTICE: 當Select條件修改時也必須修改BeforePasteDataRowSummary內容
                DataRow[] rows = _table.Select("產線 = '" + lineRow["產線"] + "'", "工作單號,序號");

                foreach (DataRow row in rows)
                {
                    string worksheet    = (string)row["工作單號"];
                    int    serialNumber = (int)row["序號"];
                    //減去異常+包裝
                    object abnormalResult = _srcTable.Compute("SUM(內部工時)", "工作單號='" + worksheet + "' AND 工品編號 = " + serialNumber + " AND 產線 = '" + lineRow["產線"] + "' AND (工時類型=" + (int)HourType.異常生產工時 + " OR 工時類型=" + (int)HourType.包裝 + ")");
                    if (abnormalResult != DBNull.Value)
                    {
                        row["實際總工時"] = (decimal)row["實際總工時"] - (decimal)abnormalResult;
                    }
                }
                //寫入內容
                options.IncludeSummary = false;
                options.Row            = writeRow;
                options.SummaryPrefix  = lineRow["產線"] + "產線小計";
                writeRow = this.SheetAdapter.PasteDataRows(rows, options);

                //寫入異常生產工時,包裝工時
                decimal unusual = 0;
                decimal package = 0;

                // 取得異常生產工時
                object result = nonNormalHourTable.Compute("SUM(內部工時)", "產線 = '" + lineRow["產線"] + "' AND 工時類型=" + (int)HourType.異常生產工時);
                if (result != null && result != DBNull.Value)
                {
                    unusual = (decimal)result;
                }

                // 取得包裝工時
                result = nonNormalHourTable.Compute("SUM(內部工時)", "產線 = '" + lineRow["產線"] + "' AND 工時類型=" + (int)HourType.包裝);
                if (result != null && result != DBNull.Value)
                {
                    package = (decimal)result;
                }

                DataRow tmpRow = _table.NewRow();
                tmpRow["單位"]    = null;
                tmpRow[0]       = "異常生產工時";
                tmpRow["實際總工時"] = unusual;
                writeRow        = this.SheetAdapter.PasteDataRow(tmpRow, writeRow, options.Column);

                tmpRow[0]       = "包裝";
                tmpRow["實際總工時"] = package;
                writeRow        = this.SheetAdapter.PasteDataRow(tmpRow, writeRow, options.Column);

                //寫入小計
                options.Row = writeRow;
                _subttlRows.Add(writeRow);
                writeRow = this.SheetAdapter.PasteSummaryRow(rows, options);
            }
            //this.SheetAdapter.BeforePasteDataRowSummary -= beforeSummary;

            decimal ttlUnusual = 0;
            decimal ttlPackage = 0;

            // 取得異常生產工時
            object tmpResult = nonNormalHourTable.Compute("SUM(內部工時)", "工時類型=" + (int)HourType.異常生產工時);

            if (tmpResult != null && tmpResult != DBNull.Value)
            {
                ttlUnusual = (decimal)tmpResult;
            }

            // 取得包裝工時
            tmpResult = nonNormalHourTable.Compute("SUM(內部工時)", "工時類型=" + (int)HourType.包裝);
            if (tmpResult != null && tmpResult != DBNull.Value)
            {
                ttlPackage = (decimal)tmpResult;
            }

            //寫入總計(不包括異常,包裝)
            DataTable tmpTable = _table.Clone();

            tmpTable.Columns["實際總工時"].Expression = string.Empty;                //實際總工時自己計算

            DataRow totalRow = tmpTable.NewRow();

            foreach (string sumCol in options.SummaryColumns)
            {
                if (!string.IsNullOrEmpty(tmpTable.Columns[sumCol].Expression))
                {
                    tmpTable.Columns[sumCol].Expression = string.Empty;
                }

                object o;
                o = _table.Compute("SUM(" + sumCol + ")", string.Empty);
                totalRow[sumCol] = Convert.IsDBNull(o) ? 0 : (decimal)o;
            }
            foreach (string noSumCol in options.NoSummaryColumns)
            {
                tmpTable.Columns[noSumCol].Expression = string.Empty;
                totalRow[noSumCol] = DBNull.Value;
            }

            ////實際總工時 - (異常生產工時+包裝) 前面減過了
            //object ttlHourObj = _table.Compute("SUM(實際總工時)", string.Empty);
            //decimal ttlHour = Convert.IsDBNull(ttlHourObj) ? 0 : (decimal)ttlHourObj;
            ////totalRow["實際總工時"] = ttlHour - (ttlUnusual + ttlPackage);

            totalRow[0] = "總計";
            _ttlRow     = writeRow;
            tmpTable.Rows.Add(totalRow);
            writeRow = this.SheetAdapter.PasteDataRow(totalRow, writeRow, 1);



            //tmpTable = _table.Clone();
            ////寫入異常,包裝總計
            //tmpTable.Columns[tmpTable.Columns["外包工資"].Ordinal].DataType = typeof(object);

            //DataRow abnormalTotalRow = tmpTable.NewRow();
            //abnormalTotalRow["單位"] = null;
            //abnormalTotalRow[tmpTable.Columns["外包工資"].Ordinal] = "異常生產工時";
            //abnormalTotalRow["實際總工時"] = ttlUnusual;
            //writeRow = this.SheetAdapter.PasteDataRow(abnormalTotalRow, writeRow, options.Column);

            //abnormalTotalRow[tmpTable.Columns["外包工資"].Ordinal] = "包裝";
            //abnormalTotalRow["實際總工時"] = ttlPackage;
            //writeRow = this.SheetAdapter.PasteDataRow(abnormalTotalRow, writeRow, options.Column);

            ////寫入總計(+異常,包裝)
            //totalRow = tmpTable.NewRow();
            //options.SummaryColumns = new List<string>(new string[] { "實際總工時", "標準總工時" });
            //options.NoSummaryColumns = new List<string>(new string[] { "數量", "內部工時", "內部工資", "外包工資", "外包工時", "標準工時", "單位人工成本", "單位標準工資", "實際工時", "實際工資", "標準總工資" });

            //foreach (string sumCol in options.SummaryColumns)
            //{
            //    if (!string.IsNullOrEmpty(tmpTable.Columns[sumCol].Expression))
            //        tmpTable.Columns[sumCol].Expression = string.Empty;

            //    object o;
            //    o = _table.Compute("SUM(" + sumCol + ")", string.Empty);
            //    totalRow[sumCol] = Convert.IsDBNull(o) ? 0 : (decimal)o;
            //}
            //foreach (string noSumCol in options.NoSummaryColumns)
            //{
            //    tmpTable.Columns[noSumCol].Expression = string.Empty;
            //    totalRow[noSumCol] = DBNull.Value;
            //}

            //totalRow[tmpTable.Columns["外包工資"].Ordinal] = "Total";
            //totalRow["單位"] = null;
            //tmpTable.Rows.Add(totalRow);

            //_ttlRow = writeRow;
            //writeRow = this.SheetAdapter.PasteDataRow(totalRow, writeRow, 1);

            base.WriteContent();
        }