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;
- }
- }
- }
|