| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Collections;using System.Data;using System.Drawing;namespace IControls_FireManager{    // 엑티브 레포트 관련 작업량을 알아내고, 실제로 엑티브 레포트 관련 작업을 하는 함수를 모아둔다     // 향후 레포트 관련 작업양이 많아짐에따라 소스 관리가 힘들어질수 있으므로 관련 함수만 정리하기 좋도록 하는데 목적이 있음    public static class _ActiveReport    {        //        // 헤더와 디테일의 정보를 동적으로 생성한다        //        public static void Create_Column(            DataDynamics.ActiveReports.ActiveReport pActiveReport,            DataDynamics.ActiveReports.PageHeader pPageHeader,  // 페이제 헤더            DataDynamics.ActiveReports.Detail pDetail,          // 디테일            ArrayList Column_Info,                              // 컬럼 텍스트명 및 길이 예)빌딩명=0.32;층명=0.5            float ColumnHeight,                                 // 컬럼 높이             int FontSize)                                       // 폰트 사이즈        {            // 반드시 정확한 데이타가 들어와야만 한다            if (Column_Info.Count == 0) return;            // 아이템 추가시 Left 속성은 계속 증가하도록 구성            float left = 0;            // 아이템을 추가하자 (단, 현재 페이지의 프린터 출력 가로 사이즈를 침범하지 못하도록 만들어야 한다)            for (int i = 0; i < Column_Info.Count; i++)            {                //                // 페이지 헤더                //                // 텍스트 박스 생성                DataDynamics.ActiveReports.TextBox PageHeader_TextBox = new DataDynamics.ActiveReports.TextBox();                // 선 속성                PageHeader_TextBox.Border.BottomStyle = DataDynamics.ActiveReports.BorderLineStyle.Solid;                PageHeader_TextBox.Border.LeftStyle = DataDynamics.ActiveReports.BorderLineStyle.Solid;                PageHeader_TextBox.Border.RightStyle = DataDynamics.ActiveReports.BorderLineStyle.Solid;                PageHeader_TextBox.Border.TopStyle = DataDynamics.ActiveReports.BorderLineStyle.Solid;                // 이름                 PageHeader_TextBox.Name = "PageHeader_" + ((_Report_Column_Info)Column_Info[i]).Column_Key;                // 텍스트                PageHeader_TextBox.Text = ((_Report_Column_Info)Column_Info[i]).Column_Name;                // X 좌표                PageHeader_TextBox.Left = left;                // Y 좌표                PageHeader_TextBox.Top = 0.88F;                // 너비                PageHeader_TextBox.Width = ((_Report_Column_Info)Column_Info[i]).Column_Size;                // 높이                PageHeader_TextBox.Height = ColumnHeight;                // 스타일                PageHeader_TextBox.Style =                    "background-color: LightGrey; color: Black; font-family: 굴림; font-size: " +                    FontSize.ToString() +                    "pt; font-" + "weight: bold; text-align: center; vertical-align: bottom; ddo-char-set: 1";                // 왼쪽 좌표 증가                left = left + PageHeader_TextBox.Width;                // 단, 예외로 마지막 아이템이라면 프린터사이즈만큼 임의로 늘린다                if (i == Column_Info.Count - 1)                {                    PageHeader_TextBox.Width = PageHeader_TextBox.Width + (pActiveReport.PrintWidth - left);                    PageHeader_TextBox.Width = PageHeader_TextBox.Width - 0.001F; // margin                }                // 페이지 헤더에 추가                pPageHeader.Controls.Add(PageHeader_TextBox);            }            left = 0;            for (int i = 0; i < Column_Info.Count; i++)            {                //                // 디테일                //                // 텍스트 박스 생성                DataDynamics.ActiveReports.TextBox Detail_TextBox = new DataDynamics.ActiveReports.TextBox();                // 선 속성                Detail_TextBox.Border.BottomStyle = DataDynamics.ActiveReports.BorderLineStyle.Solid;                Detail_TextBox.Border.LeftStyle = DataDynamics.ActiveReports.BorderLineStyle.Solid;                Detail_TextBox.Border.RightStyle = DataDynamics.ActiveReports.BorderLineStyle.Solid;                Detail_TextBox.Border.TopStyle = DataDynamics.ActiveReports.BorderLineStyle.Solid;                // 이름                 Detail_TextBox.Name = ((_Report_Column_Info)Column_Info[i]).Column_Key;                // 텍스트                Detail_TextBox.Text = ((_Report_Column_Info)Column_Info[i]).Column_Name;                                // X 좌표                Detail_TextBox.Left = left;                // Y 좌표                Detail_TextBox.Top = 0F;                // 너비                Detail_TextBox.Width = ((_Report_Column_Info)Column_Info[i]).Column_Size;                                // 높이                Detail_TextBox.Height = ColumnHeight;                // 스타일                Detail_TextBox.Style =                    "font-family: 굴림; font-size: " + FontSize.ToString() + "pt; text-align: center; vertical-align: bottom; ddo-char-set: 1";                // 왼쪽 좌표 증가                left = left + Detail_TextBox.Width;                // 단, 예외로 마지막 아이템이라면 프린터사이즈만큼 임의로 늘린다                if (i == Column_Info.Count - 1)                {                    Detail_TextBox.Width = Detail_TextBox.Width + (pActiveReport.PrintWidth - left);                    Detail_TextBox.Width = Detail_TextBox.Width - 0.001F; // margin                }                // 데이타 필드                Detail_TextBox.DataField = Detail_TextBox.Name;                // 데이타 필드 추가                pActiveReport.Fields.Add(Detail_TextBox.Name);                // 페이지 헤더에 추가                pDetail.Controls.Add(Detail_TextBox);            }        }        //        // 레포트 출력시에 예외처리 (보통 데이타베이스에서 자료를 가져와서 곧바로 레포트로 만드는 경우 DataRow 개체를 사용하게된다. 이때 필요없는 데이타가 존재함)        //        public static bool Exception_ReportPrint(DataDynamics.ActiveReports.ActiveReport pActiveReport, string Key, int RowCounter, DataRow Result_Info)        {            bool result = true;            // 단, 인덱스 넘버라면            if (Key == "INDEX_NUMBER")            {                pActiveReport.Fields[Key].Value = (RowCounter + 1).ToString();                            }            // 나머지는 예외가 아니다!            else                                result = false;            return result;        }                //        // 기본 디폴트 컬럼 인쇄부 어레이리스트 생성 (가변 레포트에서만 사용됨)        //        public static void Print_Default_Column(ArrayList Save_Arraylist, string Column_Key, string Column_Name, float Column_Size)        {            _Report_Column_Info data = new _Report_Column_Info();            data.Column_Key = Column_Key;            data.Column_Name = Column_Name;            data.Column_Size = Column_Size;            Save_Arraylist.Add(data);        }        //        // 데이타 총개수        //         public static int Get_All_ProcessCount(object Data)        {            int result = 0;            if (Data != null)            {                if (Data.GetType() == typeof(DataRowCollection))                    result = ((DataRowCollection)Data).Count;                else if (Data.GetType() == typeof(ArrayList))                    result = ((ArrayList)Data).Count;            }            return result;        }        //        // 레포트 생성자         //        // 레포트를 생성하기 위해 먼저 컬럼명을 생성하는 가변 레포트인지, 아니면 정형화된 고정 레포트인지 살펴봐야한다        //        // 가변레포트의 경우 컬럼명이 존재하지 않아서 직접 생성시켜주어야 한다, 즉 상위의 Create_Column 함수가 레포트 포맷에 존재한다        // 대표적인 가변레포트 포맷은 ActiveReport_Variable_Height, ActiveReport_Variable_Width 이다        // 장점은 데이타를 컬럼명에 맞게 출력할수 있어 레포트의 포맷을 다양하게 구성할수가 있다        // 단점은 그룹헤더가 하나뿐인 단순한 도표수준의 레포트만 출력가능하다         // 고정레포트의 경우 컬럼명을 실제 존재하여 직접 생성시키면안된다. 대신 레포트 폼에서 만든 TextBox 의 DataField 이름을 알고 있어야한다        // 대표적인 고정레포트 포맷은 ActiveReport_Location_ACU 이다        // 장점은 그룹헤더가 여러개로 구성가능하며, 이미지 및 각종 양식에 자유롭게 사용자가 구성할 수 있다        // 단점은 각 DataField 를 직접 레포트 디자이너에서 일일이 확인해주어야 하며, 그룹헤더가 여러개라면 구성이 복잡해진다        // 아래는 고정레포트의 생성부만 취합하였음        // 연동 그룹 레포트        public static void Create_ReportViewer_OperGroup(string Receiver_Id)        {            // 레포트 폼생성             if (_Data.ActiveReportViewer_Enable == false)            {                // 컬럼키값                _Report_OperGroup dummy = new _Report_OperGroup();                ArrayList Column_Info = _Reflection.GetMemberName_ToArrayList(dummy);                // 레포트 특정 클래스 데이타 집합                ArrayList Report_Data = new ArrayList();                //                // 데이타베이스 접근 경로 지정부                //                _Data.DataBaseFilePath_Set(null);//Receiver_Id);                //                // 레포트용 데이타 생성부                 // 현재 쿼리가 많아지는 루틴이다. 그룹별 쿼리를 날리게 되어 효율적이지 못하지만                 // 그룹헤더 정보가 고유하게 셋팅되어 리스트에 저장되어야 하므로 아래와 같이 작업합니다                // 만약 레포트 출력에 속도가 문제가 발생된다면..                // 쿼리를 하나만 날리고 저장된 리스트를 각각 모두 추출해서 고유한 그룹만 선별해서 별도로 그룹 헤더 코드를 생성해야 합니다.                             //                //** TB_GROUP 테이블에서 출력그룹을 모두 가지고 온다                DataRowCollection DB_TABLE_GROUP = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", "GROUP_ID", Receiver_Id));                int Group_Header_No = 0;                if (DB_TABLE_GROUP != null && DB_TABLE_GROUP.Count != 0)                {                    foreach (DataRow GROUP in DB_TABLE_GROUP)                    {                        //** TB_GROUP_DEVICE 테이블에서 해당그룹을 모두 가지고 보여준다                        DataRowCollection DB_TABLE_DETAIL = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Gruop_DeviceTable(GROUP[1].ToString(), Receiver_Id));                        int Group_No = 0;                        if (DB_TABLE_DETAIL != null && DB_TABLE_DETAIL.Count != 0)                        {                            // 그룹별 고유 코드                            Group_Header_No++;                            foreach (DataRow DETAIL in DB_TABLE_DETAIL)                            {                                // 내용별 순번                                Group_No++;                                if (_Convert.Exception_Into_object(DETAIL[6], DETAIL[7], DETAIL[8], DETAIL[9], DETAIL[10]) == true)                                {                                    // 회로번호 추출                                    // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE                                    MskDeviceIDString dev_s = new MskDeviceIDString(                                        _Convert.Null_to_IntZero(DETAIL[6].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[7].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[8].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[9].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[10].ToString()),                                        DETAIL[11].ToString(), Receiver_Id); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경                                    // 레포트 출력용 클래스 생성                                    _Report_OperGroup Report_OperGroup = new _Report_OperGroup();                                    // 그룹별로 고유 코드 (중복이 안된다고 가정한다)                                    Report_OperGroup.Group_Header = Group_Header_No.ToString();                                    // 그룹 순번                                    Report_OperGroup.Group_No = Group_Header_No;                                    // 그룹 아이디                                    Report_OperGroup.Group_ID = GROUP[1].ToString();                                    // 그룹 이름                                    Report_OperGroup.Group_Name = GROUP[2].ToString();                                    // 내용 순번                                    Report_OperGroup.Detail_No = Group_No;                                    // 내용 회로번호                                    Report_OperGroup.Detail_Circuit = dev_s.MskId;                                    // 내용 회로타입                                    Report_OperGroup.Detail_Type = DETAIL[0].ToString();                                    // 내용 회로위치                                    Report_OperGroup.Detail_Location = DETAIL[1].ToString();                                    // 내용 회로이름                                    Report_OperGroup.Detail_Name = DETAIL[2].ToString();                                    // 레포트 출력용 데이타 (세부내용을 포함)                                    Report_Data.Add(Report_OperGroup);                                }                                                            }                        }                        // 세부 내용이 없어도 일단 추가 (차후에 필요없으면 삭제)                        else                        {                            // 그룹별 고유 코드                            Group_Header_No++;                            // 레포트 출력용 클래스 생성                            _Report_OperGroup Report_OperGroup = new _Report_OperGroup();                            // 그룹별로 고유 코드 (중복이 안된다고 가정한다)                            Report_OperGroup.Group_Header = Group_Header_No.ToString();                            // 그룹 순번                            Report_OperGroup.Group_No = Group_Header_No;                            // 그룹 아이디                            Report_OperGroup.Group_ID = GROUP[1].ToString();                            // 그룹 이름                            Report_OperGroup.Group_Name = GROUP[2].ToString();                            // 내용 순번                            Report_OperGroup.Detail_No = Group_No;                            // 내용 회로번호                            Report_OperGroup.Detail_Circuit = _Text.Minus;                            // 내용 회로타입                            Report_OperGroup.Detail_Type = _Text.Minus;                            // 내용 회로위치                            Report_OperGroup.Detail_Location = _Text.Minus;                            // 내용 회로이름                            Report_OperGroup.Detail_Name = _Text.Minus;                            // 레포트 출력용 데이타                            Report_Data.Add(Report_OperGroup);                        }                        Group_No = 0;                    }                }                // 개요                int All_Group_Cnt = 0;                if (DB_TABLE_GROUP != null) All_Group_Cnt = DB_TABLE_GROUP.Count;                // 레포트뷰어에 정보를 전달                Form_ActiveReport_Viewer Report = new Form_ActiveReport_Viewer(                    ACTIVE_REPORT_DATA.OPER_GROUP,                    Report_Data,                    Column_Info,                    "연동 그룹 보고서",                    string.Format("프로젝트명 [{0}]  수신기ID [{1}]  그룹개수 [{2}]", _Data.Project_Name, Receiver_Id, All_Group_Cnt.ToString()),                      0.21F,                    9);                // 출력                _Form.Create(Report, null);            }            else                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.UsingReportViewer, 0);        }        // 연동 설정 레포트        public static void Create_ReportViewer_OperSet(string Receiver_Id)        {            // 레포트 폼생성             if (_Data.ActiveReportViewer_Enable == false)            {                // 컬럼키값                _Report_Operset dummy = new _Report_Operset();                ArrayList Column_Info = _Reflection.GetMemberName_ToArrayList(dummy);                // 레포트 특정 클래스 데이타 집합                ArrayList Report_Data = new ArrayList();                //                // 데이타베이스 접근 경로 지정부                //                _Data.DataBaseFilePath_Set(null);//Receiver_Id);                //                // 레포트용 데이타 생성부                 // 현재 쿼리가 많아지는 루틴이다. 그룹별 쿼리를 날리게 되어 효율적이지 못하지만                 // 그룹헤더 정보가 고유하게 셋팅되어 리스트에 저장되어야 하므로 아래와 같이 작업합니다                // 만약 레포트 출력에 속도가 문제가 발생된다면..                // 쿼리를 하나만 날리고 저장된 리스트를 각각 모두 추출해서 고유한 그룹만 선별해서 별도로 그룹 헤더 코드를 생성해야 합니다.                             //                //** TB_MAP 테이블에서 맵명을 모두 가지고 온다                DataRowCollection DB_TABLE_MAP = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_MAP", "MAP_ID", Receiver_Id));                int Group_Header_No = 0;                if (DB_TABLE_MAP != null && DB_TABLE_MAP.Count != 0)                {                    foreach (DataRow MAP in DB_TABLE_MAP)                    {                        // 그룹별 고유 코드                        Group_Header_No++;                        //                        // 입력이든 출력이든 일단 하나라도 있는지 확인하자                        //                        // 입력                        DataRowCollection DB_TABLE_MAP_IN = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(MAP[1].ToString(), "I", Receiver_Id));                        // 출력 - 회로                        DataRowCollection DB_TB_MAP_OUT = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(MAP[1].ToString(), "O", "D", Receiver_Id));                        // 출력 - 그룹                        DataRowCollection DB_MAP_OUT_GROUP = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(MAP[1].ToString(), "O", "G", Receiver_Id));                         // 디바이스가 없을 경우                        if (DB_TABLE_MAP_IN.Count == 0 && DB_TB_MAP_OUT.Count == 0 && DB_MAP_OUT_GROUP.Count == 0)                        {                            // 레포트 출력용 클래스 생성                            _Report_Operset Report_Operset = new _Report_Operset();                            // 그룹별로 고유 코드 (중복이 안된다고 가정한다)                            Report_Operset.Group_Header = Group_Header_No.ToString();                            // 그룹 순번                            Report_Operset.Group_No = Group_Header_No;                            // 그룹 아이디                            Report_Operset.Group_ID = MAP[2].ToString();                            // 그룹 이름                            Report_Operset.Group_Name = MAP[3].ToString();                            // 서브 그룹별 코드                            Report_Operset.Group_Header_Sub = _Text.Minus;                            // 내용 IO                            Report_Operset.Detail_IO = _Text.Minus;                            // 수신기 ID                            Report_Operset.Detail_Receiver = _Text.Minus;                            // 내용 아이디                            Report_Operset.Detail_ID = _Text.Minus;                            // 내용 타입                            Report_Operset.Detail_Type = _Text.Minus;                            // 내용 위치                            Report_Operset.Detail_Location = _Text.Minus;                            // 내용 이름                            Report_Operset.Detail_Name = _Text.Minus;                            // 레포트 출력용 데이타 (세부내용을 포함)                            Report_Data.Add(Report_Operset);                        }                        //                        // 입력                        //                        int Group_Header_Sub_No = 0;                        bool Group_Header_Sub_No_Enable = false; // 출력중에는 디바이스 및 그룹이 구분되어서 나오게 되므로 하나로 그룹을 통합하기 위한 변수                        if (DB_TABLE_MAP_IN != null && DB_TABLE_MAP_IN.Count != 0)                        {                            Group_Header_Sub_No++;                            foreach (DataRow DETAIL in DB_TABLE_MAP_IN)                            {                                if (_Convert.Exception_Into_object(DETAIL[7], DETAIL[8], DETAIL[9], DETAIL[10], DETAIL[11]) == true)                                {                                    // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE                                    MskDeviceIDString dev_s = new MskDeviceIDString(                                        _Convert.Null_to_IntZero(DETAIL[7].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[8].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[9].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[10].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[11].ToString()),                                        DETAIL[12].ToString(), DETAIL[6].ToString()); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경                                    // 레포트 출력용 클래스 생성                                    _Report_Operset Report_Operset = new _Report_Operset();                                    // 그룹별로 고유 코드 (중복이 안된다고 가정한다)                                    Report_Operset.Group_Header = Group_Header_No.ToString();                                    // 그룹 순번                                    Report_Operset.Group_No = Group_Header_No;                                    // 그룹 아이디                                    Report_Operset.Group_ID = MAP[2].ToString();                                    // 그룹 이름                                    Report_Operset.Group_Name = MAP[3].ToString();                                    // 서브 그룹별 코드                                    Report_Operset.Group_Header_Sub = Group_Header_Sub_No.ToString();                                    // 내용 IO                                    Report_Operset.Detail_IO = "입력";                                    // 수신기 ID                                    Report_Operset.Detail_Receiver = DETAIL[6].ToString();                                    // 내용 아이디                                    Report_Operset.Detail_ID = dev_s.MskId;                                    // 내용 타입                                    Report_Operset.Detail_Type = DETAIL[0].ToString();                                    // 내용 위치                                    Report_Operset.Detail_Location = DETAIL[1].ToString();                                    // 내용 이름                                    Report_Operset.Detail_Name = DETAIL[2].ToString();                                    // 레포트 출력용 데이타 (세부내용을 포함)                                    Report_Data.Add(Report_Operset);                                }                            }                        }                        //                        // 출력 (디바이스)                        //                        if (DB_TB_MAP_OUT != null && DB_TB_MAP_OUT.Count != 0)                        {                            // 그룹별 고유 코드                            //Group_Header_No++;                            if (Group_Header_Sub_No == 1)                            {                                Group_Header_Sub_No++; // 출력 디바이스 만 있는 경우                                Group_Header_Sub_No_Enable = true;                            }                            else                                Group_Header_Sub_No++;                            foreach (DataRow DETAIL in DB_TB_MAP_OUT)                            {                                if (_Convert.Exception_Into_object(DETAIL[7], DETAIL[8], DETAIL[9], DETAIL[10], DETAIL[11]) == true)                                {                                    // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE                                    MskDeviceIDString dev_s = new MskDeviceIDString(                                        _Convert.Null_to_IntZero(DETAIL[7].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[8].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[9].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[10].ToString()),                                        _Convert.Null_to_IntZero(DETAIL[11].ToString()),                                        DETAIL[12].ToString(), DETAIL[6].ToString()); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경                                    // 레포트 출력용 클래스 생성                                    _Report_Operset Report_Operset = new _Report_Operset();                                    // 그룹별로 고유 코드 (중복이 안된다고 가정한다)                                    Report_Operset.Group_Header = Group_Header_No.ToString();                                    // 그룹 순번                                    Report_Operset.Group_No = Group_Header_No;                                    // 그룹 아이디                                    Report_Operset.Group_ID = MAP[2].ToString();                                    // 그룹 이름                                    Report_Operset.Group_Name = MAP[3].ToString();                                    // 서브 그룹별 코드                                    Report_Operset.Group_Header_Sub = Group_Header_Sub_No.ToString();                                    // 내용 IO                                    Report_Operset.Detail_IO = "출력";                                    // 수신기 ID                                    Report_Operset.Detail_Receiver = DETAIL[6].ToString();                                    // 내용 아이디                                    Report_Operset.Detail_ID = dev_s.MskId;                                    // 내용 타입                                    Report_Operset.Detail_Type = DETAIL[0].ToString();                                    // 내용 위치                                    Report_Operset.Detail_Location = DETAIL[1].ToString();                                    // 내용 이름                                    Report_Operset.Detail_Name = DETAIL[2].ToString();                                    // 레포트 출력용 데이타 (세부내용을 포함)                                    Report_Data.Add(Report_Operset);                                }                            }                        }                        //                        // 출력 (그룹)                        //                        if (DB_MAP_OUT_GROUP != null && DB_MAP_OUT_GROUP.Count != 0)                        {                            // 그룹별 고유 코드                            //Group_Header_No++;                            if (Group_Header_Sub_No_Enable == false)                                Group_Header_Sub_No++;                            foreach (DataRow DETAIL in DB_MAP_OUT_GROUP)                            {                                // TB_GROUP 테이블에 접근                                DataRowCollection DB_TABLE_TB_DEVICE_TYPE = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", "GROUP_ID", DETAIL[5].ToString(), null)); // 맵연동 설정에서 확인하는 출력그룹은 오로지 그룹아이디로만 판단                                if (DB_TABLE_TB_DEVICE_TYPE != null && DB_TABLE_TB_DEVICE_TYPE.Count != 0)                                {                                    foreach (DataRow Dr in DB_TABLE_TB_DEVICE_TYPE)                                    {                                        // 레포트 출력용 클래스 생성                                        _Report_Operset Report_Operset = new _Report_Operset();                                        // 그룹별로 고유 코드 (중복이 안된다고 가정한다)                                        Report_Operset.Group_Header = Group_Header_No.ToString();                                        // 그룹 순번                                        Report_Operset.Group_No = Group_Header_No;                                        // 그룹 아이디                                        Report_Operset.Group_ID = MAP[2].ToString();                                        // 그룹 이름                                        Report_Operset.Group_Name = MAP[3].ToString();                                        // 서브 그룹별 코드                                        Report_Operset.Group_Header_Sub = Group_Header_Sub_No.ToString();                                        // 내용 IO                                        Report_Operset.Detail_IO = "출력";                                        // 수신기 ID                                        Report_Operset.Detail_Receiver = Dr[0].ToString();                                        // 내용 아이디                                        Report_Operset.Detail_ID = DETAIL[5].ToString();                                        // 내용 타입                                        Report_Operset.Detail_Type = null;                                        // 내용 위치                                        Report_Operset.Detail_Location = null;                                        // 내용 이름                                        Report_Operset.Detail_Name = Dr[2].ToString();                                        // 레포트 출력용 데이타 (세부내용을 포함)                                        Report_Data.Add(Report_Operset);                                    }                                }                            }                        }                    }                }                                // 개요                int All_Group_Cnt = 0;                if (DB_TABLE_MAP != null) All_Group_Cnt = DB_TABLE_MAP.Count;                // 레포트뷰어에 정보를 전달                Form_ActiveReport_Viewer Report = new Form_ActiveReport_Viewer(                    ACTIVE_REPORT_DATA.OPER_SET,                    Report_Data,                    Column_Info,                    "연동 설정 보고서",                    string.Format("프로젝트명 [{0}]  수신기ID [{1}]  맵 개수 [{2}]", _Data.Project_Name, Receiver_Id, All_Group_Cnt.ToString()),                    0.21F,                    9);                // 출력                _Form.Create(Report, null);            }            else                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.UsingReportViewer, 0);        }        // 화면 설정 레포트        public static void Create_ReportViewer_Page(string RECEIVER_ID)        {            // 레포트 폼생성             if (_Data.ActiveReportViewer_Enable == false)            {                // 컬럼키값                _Report_Page dummy = new _Report_Page();                ArrayList Column_Info = _Reflection.GetMemberName_ToArrayList(dummy);                // 레포트 특정 클래스 데이타 집합                ArrayList Report_Data = new ArrayList();                //                // 해쉬테이블을 이용해서 페이지 정보 추출                //                                // 페이지당 현재 설정된 이름을 전부 가져온다                foreach (string PAGE_ID in ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).LIST_PAGE_ID)                {                    if (((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).Receiver_ID == RECEIVER_ID)                    {                        // 아이콘 명                        ArrayList NewColumnHeader = new ArrayList();                         // 아이콘 개수                        int Button_Icon_Count = 0;                        int Device_Icon_Count = 0;                        foreach (string ICON_ID in ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).LIST_ICON_ID)                        {                            // 현재 설정된 아이콘의 이름을 모두 가져온다                            string TempDeviceIconName = ((_PictureBoxItem)((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).HASH_ICON[ICON_ID]).Device_DB_Name;                            // 중복 배제 및 공백 제거 (널값 허용안함)                            if (NewColumnHeader.Contains(TempDeviceIconName) == false && TempDeviceIconName != null && TempDeviceIconName.Length != 0)                            {                                NewColumnHeader.Add(TempDeviceIconName);                            }                            if (((_PictureBoxItem)((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).HASH_ICON[ICON_ID]).ItemType == Item_Type.Button)                                Button_Icon_Count++;                            else if (((_PictureBoxItem)((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).HASH_ICON[ICON_ID]).ItemType == Item_Type.Device)                                Device_Icon_Count++;                        }                        // etc                        string Etc = null;                        for (int i = 0 ; i < NewColumnHeader.Count; i++)                        {                            Etc = Etc + NewColumnHeader[i].ToString() + ":" + Get_Count_By_Device_Icon_Name(RECEIVER_ID, PAGE_ID, NewColumnHeader[i].ToString()) + " , ";                        }                        if (Etc == null) Etc = " ※ Not Setted Device Icon";                        else                        {                            Etc = Etc.Trim();                            Etc = Etc.TrimEnd(',');                            Etc = " ※ 참고 : " + Etc;                        }                        // 레포트 출력용 클래스 생성                        _Report_Page Report_Page = new _Report_Page();                        Report_Page.Group_Header = PAGE_ID;                        Report_Page.Group_No = ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).LIST_PAGE_ID.IndexOf(PAGE_ID);                        Report_Page.Group_Name = ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).NodeText;                        Report_Page.Group_Cnt = string.Format(" Device_Icon : {0} , Button Icon : {1}", Device_Icon_Count, Button_Icon_Count);                        Report_Page.Group_Etc = Etc;                        //Report_Page.Detail_Image = Image.FromFile(((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).PictureBoxItem_BackGround.FullPath_FileName);                        Report_Page.Detail_Image = ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).Capure_Image_Page;                         // 레포트 출력용 데이타 (세부내용을 포함)                        Report_Data.Add(Report_Page);                    }                }                // 레포트뷰어에 정보를 전달                Form_ActiveReport_Viewer Report = new Form_ActiveReport_Viewer(                    ACTIVE_REPORT_DATA.PAGE,                    Report_Data,                    Column_Info,                    "페이지 설정 보고서",                    string.Format("프로젝트명 [{0}]  수신기ID [{1}]  페이지 개수 [{2}]", _Data.Project_Name, RECEIVER_ID, ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).LIST_PAGE_ID.Count.ToString()),                    0.21F,                    9);                // 출력                _Form.Create(Report, null);            }            else                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.UsingReportViewer, 0);        }        // 해당 이름에 대한 디바이스 총개수         private static int Get_Count_By_Device_Icon_Name(string RECEIVER_ID, string Page_ID, string Data)        {            int result = 0;            foreach (string ICON_ID in ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[Page_ID]).LIST_ICON_ID)            {                if (((_PictureBoxItem)((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[Page_ID]).HASH_ICON[ICON_ID]).Device_DB_Name == Data)                    result++;            }            return result;        }    }}
 |