プロジェクト

全般

プロフィール

統計
| リビジョン:

h-you / branches / src / ProcessManagement / ProcessManagement / Common / CommonMotions.cs @ 344

履歴 | 表示 | アノテート | ダウンロード (145 KB)

1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Diagnostics;
6
using System.Windows.Forms;
7
using System.Drawing;
8
using System.IO;
9
using System.Text.RegularExpressions;
10
using System.Data;
11
using System.Security.Cryptography;
12
using System.Globalization;
13
using System.Runtime.InteropServices;
14
using System.Collections;
15

    
16
using Microsoft.VisualBasic; //for StrConv
17

    
18
using log4net;
19
using log4net.Appender;
20
using log4net.Repository.Hierarchy;
21

    
22
using ProcessManagement.DB.Core;
23
using ProcessManagement.DataModel;
24
using ProcessManagement.DB.IOAccess;
25
using ProcessManagement.Forms.CustomControls;
26
using ProcessManagement.Forms.DataEntry;
27

    
28
namespace ProcessManagement.Common
29
{
30
    /// <summary>
31
    /// 工事管理システム共通クラス
32
    /// </summary>
33
    public static class CommonMotions
34
    {
35
        #region 定義部
36
        /// <summary>
37
        /// log4netログを使用する
38
        /// </summary>
39
        private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
40
        #endregion
41

    
42
        #region 変数
43
        /// <summary>
44
        /// 定義ファイル読込クラス定義
45
        /// </summary>
46
        private static DefinitionFileRead m_dfr_model = null;
47

    
48
        /// <summary>
49
        /// 管理マスタデータ保持領域
50
        /// </summary>
51
        private static SystemMaster m_systemMaster = new SystemMaster();
52

    
53
        /// <summary>
54
        /// ログインユーザー担当者データ
55
        /// </summary>
56
        private static PersonInChargeMaster m_LoginUserData = new PersonInChargeMaster();
57

    
58
        /// <summary>
59
        /// ログインユーザー参照部署データ
60
        /// </summary>
61
        private static List<PersonDepartmentMaster> m_LoginUserRefDepartment = new List<PersonDepartmentMaster>();
62

    
63
        /// <summary>
64
        /// ログインユーザーセキュリティ区分
65
        /// </summary>
66
        private static SecurityMaster m_LoginUserSecurity = new SecurityMaster();
67

    
68
        /// <summary>
69
        /// ログインユーザー処理起動区分
70
        /// </summary>
71
        private static List<ProcessExcute> m_LoginUserProcExe = new List<ProcessExcute>();
72

    
73
        /// <summary>
74
        /// 製品ファイルバージョン格納エリア
75
        /// </summary>
76
        private static FileVersionInfo m_ProductVersionInfo = FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
77

    
78
        #endregion
79

    
80
        #region コンストラクタ
81
        /// <summary>
82
        /// 何もしない
83
        /// </summary>
84
        #endregion
85

    
86
        #region プロパティ
87
        /// <summary>
88
        /// 本稼働フラグ
89
        /// </summary>
90
        public static bool ProductionExecution
91
        {
92
            get { return CommonDefine.m_ProductionExecution; }
93
        }
94
        /// <summary>
95
        /// 定義ファイル読込クラス
96
        /// </summary>
97
        public static DefinitionFileRead DFRModel
98
        {
99
            get { return m_dfr_model; }
100
        }
101

    
102
        /// <summary>
103
        /// 管理マスタデータ
104
        /// </summary>
105
        public static SystemMaster SystemMasterData
106
        {
107
            get { return m_systemMaster; }
108
            set { m_systemMaster = value; }
109
        }
110

    
111
        /// <summary>
112
        /// ログインユーザー担当者データ
113
        /// </summary>
114
        public static PersonInChargeMaster LoginUserData
115
        {
116
            get { return m_LoginUserData; }
117
            set { m_LoginUserData = value; }
118
        }
119

    
120
        /// <summary>
121
        /// ログインユーザー参照部署データ
122
        /// </summary>
123
        public static List<PersonDepartmentMaster> LoginUserRefDepartment
124
        {
125
            get { return m_LoginUserRefDepartment; }
126
            set { m_LoginUserRefDepartment = value; }
127
        }
128

    
129
        /// <summary>
130
        /// ログインユーザーセキュリティ区分
131
        /// </summary>
132
        public static SecurityMaster LoginUserSecurity
133
        {
134
            get { return m_LoginUserSecurity; }
135
            set { m_LoginUserSecurity = value; }
136
        }
137

    
138
        /// <summary>
139
        /// ログインユーザー処理起動区分
140
        /// </summary>
141
        public static List<ProcessExcute> LoginUserProcExe
142
        {
143
            get { return m_LoginUserProcExe; }
144
            set { m_LoginUserProcExe = value; }
145
        }
146

    
147
        /// <summary>
148
        /// 製品ファイルバージョン格納エリア
149
        /// </summary>
150
        public static FileVersionInfo ProductVersionInfo
151
        {
152
            get { return m_ProductVersionInfo; }
153
        }
154

    
155
        #endregion
156

    
157
        #region 初期化
158
        /// <summary>
159
        /// 初期化
160
        /// </summary>
161
        public static void Initialize()
162
        {
163
            try
164
            {
165
                // 定義ファイル読込
166
                DefinitionFileInit();
167

    
168
                // 他共通クラス初期化
169
                DBCommon.Instance.Initialize();
170

    
171
                // 管理マスタ取得
172
                SetSystemMaster();
173
            }
174
            catch (Exception ex)
175
            {
176
                logger.ErrorFormat("初期化エラー:{0}:{1}", GetMethodName(), ex.Message);
177
            }
178
        }
179
        #endregion
180

    
181
        #region ---------- データ変換メソッド
182
        #region 西暦を和暦に変換する
183
        /// <summary>
184
        /// 西暦を和暦に変換する
185
        /// </summary>
186
        /// <returns></returns>
187
        public static string cnvJapaneseCalendar(DateTime Terget)
188
        {
189
            try
190
            {
191
                CultureInfo culture = new CultureInfo("ja-JP", true);
192
                culture.DateTimeFormat.Calendar = new JapaneseCalendar();
193

    
194
                return Terget.ToString("ggyy年M月d日", culture);
195
            }
196
            catch (Exception ex)
197
            {
198
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
199
                return string.Empty;
200
            }
201
        }
202
        #endregion
203

    
204
        #region 今の年号を取得する
205
        /// <summary>
206
        /// 今の年号を取得する
207
        /// </summary>
208
        /// <returns></returns>
209
        public static string GetNameOfAnEra(DateTime TargetDate)
210
        {
211
            try
212
            {
213
                string strRet = string.Empty;
214

    
215
                CultureInfo culture = new CultureInfo("ja-JP", true);
216
                culture.DateTimeFormat.Calendar = new JapaneseCalendar();
217

    
218
                string result = TargetDate.ToString("ggyy年M月d日", culture);
219

    
220
                int strLength = 0;
221
                foreach (char c in result)
222
                {
223
                    if (char.IsNumber(c)) break;
224

    
225
                    strLength++;
226
                }
227

    
228
                strRet = result.Substring(0, strLength);
229

    
230
                return strRet;
231
            }
232
            catch (Exception ex)
233
            {
234
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
235
                return string.Empty;
236
            }
237
        }
238
        #endregion
239

    
240
        #region Int値より文字列に変化して指定位置に指定文字を入れる。(工事番号編集)
241
        /// <summary>
242
        /// Int値より文字列に変化して指定位置に指定文字を入れる。
243
        /// </summary>
244
        /// <param name="strCode"></param>
245
        /// <returns></returns>
246
        public static string cnvStringCodeFromInt(int IntCode, string strCode, int iPoint)
247
        {
248
            try
249
            {
250
                // 文字列変換
251
                string strWork = IntCode.ToString();
252
                // 指定位置が文字列長を超えている場合はエラー
253
                if (strWork.Length <= iPoint) return string.Empty;
254
                // 文字挿入
255
                strWork = strWork.Substring(0, iPoint) + strCode + strWork.Substring(iPoint);
256
                return strWork;
257
            }
258
            catch (System.Exception ex)
259
            {
260
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
261
                return string.Empty;
262
            }
263
        }
264
        #endregion
265

    
266
        #region 文字列より指定文字を除去してInt値に変換する
267
        /// <summary>
268
        /// 文字列より指定文字を除去してInt値に変換する
269
        /// </summary>
270
        /// <param name="strCode"></param>
271
        /// <returns></returns>
272
        public static int cnvIntFromStringCode(string strCode, string strRemove)
273
        {
274
            try
275
            {
276
                // 文字列除去後変換
277
                return cnvInt(strCode.Replace(strRemove, ""));
278
            }
279
            catch (System.Exception ex)
280
            {
281
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
282
                return 0;
283
            }
284
        }
285
        #endregion
286

    
287
        #region オブジェクトを日付に変換する
288
        /// <summary>
289
        /// 日付返還変換
290
        /// </summary>
291
        /// <param name="sendData"></param>
292
        /// <returns></returns>
293
        public static DateTime cnvDate(object sendData)
294
        {
295
            DateTime dtDateWork = DateTime.MinValue;
296
            try
297
            {
298
                // 空判定
299
                if (sendData == null) return dtDateWork;
300
                if (sendData.ToString().Length == 0) return dtDateWork;
301

    
302
                // 変換
303
                bool bRet = DateTime.TryParse(sendData.ToString(), out dtDateWork);
304

    
305
                return dtDateWork;
306
            }
307
            catch (System.Exception ex)
308
            {
309
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
310
                return dtDateWork;
311
            }
312
        }
313
        #endregion
314

    
315
        #region オブジェクトより数値変換(long)
316
        /// <summary>
317
        /// オブジェクトより数値変換(long)
318
        /// </summary>
319
        /// <param name="sendData"></param>
320
        /// <returns></returns>
321
        public static long cnvLong(object sendData)
322
        {
323
            try
324
            {
325
                long retData = 0;
326

    
327
                // 空判定
328
                if (sendData == null) return retData;
329
                if (sendData.ToString().Trim().Length == 0) return retData;
330

    
331
                // 変換
332
                long.TryParse(sendData.ToString().Replace(",", "").Replace("\\", "").Trim(), out retData);
333

    
334
                return retData;
335
            }
336
            catch (System.Exception ex)
337
            {
338
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
339
                return 0;
340
            }
341
        }
342
        #endregion
343

    
344
        #region オブジェクトより数値変換(int)
345
        /// <summary>
346
        /// オブジェクトより数値変換(int)
347
        /// </summary>
348
        /// <param name="sendData"></param>
349
        /// <returns></returns>
350
        public static int cnvInt(object sendData)
351
        {
352
            try
353
            {
354
                int retData = 0;
355

    
356
                // 空判定
357
                if (sendData == null) return retData;
358
                if (sendData.ToString().Trim().Length == 0) return retData;
359

    
360
                // 変換
361
                int.TryParse(sendData.ToString().Replace(",", "").Replace("\\", "").Trim(), out retData);
362

    
363
                return retData;
364
            }
365
            catch (System.Exception ex)
366
            {
367
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
368
                return 0;
369
            }
370
        }
371
        #endregion
372

    
373
        #region オブジェクトより数値変換(string)
374
        /// <summary>
375
        /// オブジェクトより数値変換(string)
376
        /// </summary>
377
        /// <param name="sendData"></param>
378
        /// <returns></returns>
379
        public static string cnvString(object sendData)
380
        {
381
            try
382
            {
383
                string retData = string.Empty;
384

    
385
                // 空判定
386
                if (sendData == null) return retData;
387
                if (sendData.ToString().Trim().Length == 0) return retData;
388

    
389

    
390
                // 変換
391
                retData = sendData.ToString(); 
392

    
393
                return retData;
394
            }
395
            catch (System.Exception ex)
396
            {
397
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
398
                return "";
399
            }
400
        }
401
        #endregion
402

    
403
        #region オブジェクトより数値変換(double)
404
        /// <summary>
405
        /// オブジェクトより数値変換(double)
406
        /// </summary>
407
        /// <param name="sendData"></param>
408
        /// <returns></returns>
409
        public static double cnvDouble(object sendData)
410
        {
411
            try
412
            {
413
                double retData = 0;
414

    
415
                // 空判定
416
                if (sendData == null) return retData;
417
                if (sendData.ToString().Trim().Length == 0) return retData;
418

    
419

    
420
                // 変換
421
                double.TryParse(sendData.ToString().Replace(",", "").Replace("\\", "").Trim(), out retData);
422

    
423
                return retData;
424
            }
425
            catch (System.Exception ex)
426
            {
427
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
428
                return 0;
429
            }
430
        }
431
        #endregion
432

    
433
        #region オブジェクトより数値変換(float)
434
        /// <summary>
435
        /// オブジェクトより数値変換(float)
436
        /// </summary>
437
        /// <param name="sendData"></param>
438
        /// <returns></returns>
439
        public static float cnvFloat(object sendData)
440
        {
441
            try
442
            {
443
                float retData = 0;
444

    
445
                // 空判定
446
                if (sendData == null) return retData;
447
                if (sendData.ToString().Trim().Length == 0) return retData;
448

    
449

    
450
                // 変換
451
                float.TryParse(sendData.ToString().Replace(",", "").Replace("\\", "").Trim(), out retData);
452

    
453
                return retData;
454
            }
455
            catch (System.Exception ex)
456
            {
457
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
458
                return 0;
459
            }
460
        }
461
        #endregion
462

    
463
        #region オブジェクトより数値変換(decimal)
464
        /// <summary>
465
        /// オブジェクトより数値変換(decimal)
466
        /// </summary>
467
        /// <param name="sendData"></param>
468
        /// <returns></returns>
469
        public static decimal cnvDecimal(object sendData)
470
        {
471
            try
472
            {
473
                decimal retData = 0;
474

    
475
                // 空判定
476
                if (sendData == null) return retData;
477
                if (sendData.ToString().Trim().Length == 0) return retData;
478

    
479

    
480
                // 変換
481
                decimal.TryParse(sendData.ToString().Replace(",", "").Replace("\\", "").Trim(), out retData);
482

    
483
                return retData;
484
            }
485
            catch (System.Exception ex)
486
            {
487
                Console.WriteLine("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
488
                return 0;
489
            }
490
        }
491
        #endregion
492

    
493
        #region オブジェクトよりBool値変換(bool)
494
        /// <summary>
495
        /// オブジェクトよりBool値変換(bool)
496
        /// </summary>
497
        /// <param name="sendData"></param>
498
        /// <returns></returns>
499
        public static bool cnvBool(object sendData)
500
        {
501
            try
502
            {
503
                bool retData = false;
504

    
505
                // 空判定
506
                if (sendData == null) return retData;
507
                if (sendData.ToString().Trim().Length == 0) return retData;
508

    
509
                // 変換
510
                bool.TryParse(sendData.ToString(), out retData);
511

    
512
                return retData;
513
            }
514
            catch (System.Exception ex)
515
            {
516
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
517
                return false;
518
            }
519
        }
520
        #endregion
521

    
522
        #region 四捨五入
523
        /// <summary>
524
        /// 四捨五入
525
        /// </summary>
526
        /// <param name="InputData"></param>
527
        /// <returns></returns>
528
        public static int cnvRound(double InputData)
529
        {
530
            int retRoundData = 0;
531
            try
532
            {
533
                retRoundData = (int)Math.Round(InputData, MidpointRounding.AwayFromZero);
534

    
535
                return retRoundData;
536
            }
537
            catch (System.Exception ex)
538
            {
539
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
540
                return retRoundData;
541
            }
542
        }
543
        #endregion
544

    
545
        #region 切り上げ
546
        /// <summary>
547
        /// 切り上げ
548
        /// </summary>
549
        /// <param name="InputData"></param>
550
        /// <returns></returns>
551
        public static int cnvRoundUp(double InputData)
552
        {
553
            int retRoundData = 0;
554
            try
555
            {
556
                retRoundData = (int)Math.Ceiling(InputData);
557

    
558
                return retRoundData;
559
            }
560
            catch (System.Exception ex)
561
            {
562
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
563
                return retRoundData;
564
            }
565
        }
566
        #endregion
567

    
568
        #region 切り捨て
569
        /// <summary>
570
        /// 切り捨て
571
        /// </summary>
572
        /// <param name="InputData"></param>
573
        /// <returns></returns>
574
        public static int cnvTruncate(double InputData)
575
        {
576
            int retRoundData = 0;
577
            try
578
            {
579
                retRoundData = (int)Math.Truncate(InputData);
580

    
581
                return retRoundData;
582
            }
583
            catch (System.Exception ex)
584
            {
585
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
586
                return retRoundData;
587
            }
588
        }
589
        #endregion
590

    
591
        #region 四捨五入(四捨五入位置指定)
592
        /// <summary>
593
        /// 四捨五入(四捨五入位置指定)
594
        /// </summary>
595
        /// <param name="value"></param>
596
        /// <param name="pos"></param>
597
        /// <returns></returns>
598
        public static int IntRound(double value, int pos)
599
        {
600
            // 何乗かを求める
601
            int posion = (int)Math.Pow(10, (pos + 1));
602

    
603
            int upperval = (int)(value / posion);
604
            upperval *= posion;
605
            int lowerval = (int)(value % posion);
606
            int chkval = (int)(lowerval / Math.Pow(10, pos));
607
            if (chkval > 4) upperval += (1 * posion);
608

    
609
            return upperval;
610
        }
611
        #endregion
612

    
613
        #region 切り捨て(切り捨て位置指定)
614
        /// <summary>
615
        /// 切り捨て(切り捨て位置指定)
616
        /// </summary>
617
        /// <param name="value"></param>
618
        /// <param name="pos"></param>
619
        /// <returns></returns>
620
        public static int IntRoundDown(double value, int pos)
621
        {
622
            // 何乗かを求める
623
            int posion = (int)Math.Pow(10, (pos + 1));
624

    
625
            int upperval = (int)(value / posion);
626
            upperval *= posion;
627

    
628
            return upperval;
629
        }
630
        #endregion
631

    
632
        #region 切り上げ(切り上げ位置指定)
633
        /// <summary>
634
        /// 切り上げ(切り上げ位置指定)
635
        /// </summary>
636
        /// <param name="value"></param>
637
        /// <param name="pos"></param>
638
        /// <returns></returns>
639
        public static int IntRoundUp(double value, int pos)
640
        {
641
            // 何乗かを求める
642
            int posion = (int)Math.Pow(10, (pos + 1));
643

    
644
            int upperval = (int)(value / posion);
645
            upperval *= posion;
646
            int lowerval = (int)(value % posion);
647
            int chkval = (int)(lowerval / Math.Pow(10, pos));
648
            if (chkval > 0) upperval += (1 * posion);
649

    
650
            return upperval;
651
        }
652
        #endregion
653

    
654
        #region 0~26までの数字をA~Zに変換する
655
        /// <summary>
656
        /// 0~26までの数字をA~Zに変換する
657
        /// </summary>
658
        /// <param name="num"></param>
659
        /// <returns></returns>
660
        public static string cnvNumberToAlphaCharacter(int num)
661
        {
662
            try
663
            {
664
                // ----- 16進数文字列 -> 数値
665
                int CnvCode = Convert.ToInt32("0041", 16);      // 'A'
666
                int LastCode = Convert.ToInt32("005A", 16);     // 'Z'
667

    
668
                // 'Z'を超えたら余剰を使って変換する
669
                int work = (CnvCode + num);
670
                if (work <= LastCode)
671
                {
672
                    // 変換値を加算する
673
                    CnvCode += num;
674
                }
675
                else
676
                {
677
                    CnvCode += (work % LastCode);
678
                }
679
                // 'Z'を超えたら採番しない
680
                //if (CnvCode > LastCode) return string.Empty;
681

    
682
                // 数値(文字コード) -> 文字
683
                char c = Convert.ToChar(CnvCode);
684
                // 英字「文字列」
685
                string newChar = c.ToString();
686

    
687
                return newChar;
688
            }
689
            catch (System.Exception ex)
690
            {
691
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
692
                return "";
693
            }
694
        }
695
        #endregion
696

    
697
        #region 日付が最小値ならば"未定"文字を返す
698
        /// <summary>
699
        /// 日付が最小値ならば"未定"文字を返す
700
        /// </summary>
701
        /// <param name="srcDate"></param>
702
        /// <returns></returns>
703
        public static string cnvDateToUndecidedString(DateTime srcDate)
704
        {
705
            try
706
            {
707
                string work = "";
708
                if (srcDate.Equals(DateTime.MinValue))
709
                    work = CommonDefine.s_UndecidedString;
710
                else
711
                    work = srcDate.ToShortDateString();
712

    
713
                return work;
714
            }
715
            catch (System.Exception ex)
716
            {
717
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
718
                return "";
719
            }
720
        }
721
        #endregion
722

    
723
        #region オブジェクトより日付を返す(文字列が"未定"文字ならば日付最小値を返す)
724
        /// <summary>
725
        /// オブジェクトより日付を返す
726
        /// 文字列が"未定"文字ならば日付最小値を返す
727
        /// </summary>
728
        /// <param name="srcDate"></param>
729
        /// <returns></returns>
730
        public static DateTime cnvUndecidedStringToDate(object srcDate)
731
        {
732
            DateTime work = DateTime.MinValue;
733
            try
734
            {
735
                if (!srcDate.Equals(CommonDefine.s_UndecidedString))
736
                    work = cnvDate(srcDate);
737

    
738
                return work;
739
            }
740
            catch (System.Exception ex)
741
            {
742
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
743
                return work;
744
            }
745
        }
746
        #endregion
747

    
748
        #region オブジェクトより数値(文字列が"未定"文字ならば0を返す)
749
        /// <summary>
750
        /// オブジェクトより数値
751
        /// 文字列が"未定"文字ならば0を返す
752
        /// </summary>
753
        /// <param name="srcDate"></param>
754
        /// <returns></returns>
755
        public static double cnvUndecidedStringToDouble(object srcDate)
756
        {
757
            double work = 0;
758
            try
759
            {
760
                if (!srcDate.Equals(CommonDefine.s_UndecidedString))
761
                    work = cnvDouble(srcDate);
762

    
763
                return work;
764
            }
765
            catch (System.Exception ex)
766
            {
767
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
768
                return work;
769
            }
770
        }
771
        #endregion
772

    
773
        #region 色指定文字列より色を返す
774
        /// <summary>
775
        /// 色指定文字列より色を返す
776
        /// </summary>
777
        /// <param name="strColor"></param>
778
        /// <returns></returns>
779
        public static Color cnvStringToColor(string strColor)
780
        {
781
            Color ColorRet = Color.White;
782
            try
783
            {
784
                // 色文字列チェック
785
                if (!CommonMotions.chkObjectIsNull(strColor) && strColor.Length != 0)
786
                {
787
                    ColorRet = ColorTranslator.FromHtml(strColor);
788
                }
789
                return ColorRet;
790
            }
791
            catch (System.Exception ex)
792
            {
793
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
794
                return ColorRet;
795
            }
796
        }
797
        #endregion
798

    
799
        #region 色指定文字列より色を返す・設定無しは指定場所のデフォルトを返す
800
        /// <summary>
801
        /// 色指定文字列より色を返す・設定無しは指定場所のデフォルトを返す
802
        /// </summary>
803
        /// <param name="strColor"></param>
804
        /// <param name="point"></param>
805
        /// <returns></returns>
806
        public static Color getBackForeColor(string strColor, TermMaster.PalceOfColorDef point)
807
        {
808
            Color ColorRet = Color.White;
809
            try
810
            {
811
                // デフォルトセット
812
                if (point == TermMaster.PalceOfColorDef.BackColor)
813
                {   // 背景
814
                    ColorRet = Color.White;
815
                }
816
                else if (point == TermMaster.PalceOfColorDef.ForeColor)
817
                {   // 文字色
818
                    ColorRet = Color.Black;
819
                }
820
                else
821
                {
822
                    ColorRet = Color.Transparent;
823
                }
824

    
825
                if (!chkObjectIsNull(strColor) && strColor.Length != 0)
826
                {
827
                }
828
                else
829
                {
830
                    strColor = String.Format("0x{0:X2}{1:X2}{2:X2}", ColorRet.R, ColorRet.G, ColorRet.B);
831
                }
832

    
833
                ColorRet = cnvStringToColor(strColor);
834

    
835
                return ColorRet;
836
            }
837
            catch (System.Exception ex)
838
            {
839
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
840
                return ColorRet;
841
            }
842
        }
843
        #endregion
844

    
845
        #region 補色を取得する
846
        /// <summary>
847
        /// 補色を取得する
848
        /// </summary>
849
        /// <param name="color"></param>
850
        /// <returns></returns>
851
        public static Color GetComplementaryColor(Color color)
852
        {
853
            try
854
            {
855
                byte r = (byte)~color.R;
856
                byte g = (byte)~color.G;
857
                byte b = (byte)~color.B;
858

    
859
                return Color.FromArgb(r, g, b);
860
            }
861
            catch (System.Exception ex)
862
            {
863
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
864
                return color;
865
            }
866
        }
867
        #endregion
868

    
869
        #region 指定桁数の数値最大値を返す
870
        /// <summary>
871
        /// 指定桁数の数値最大値を返す
872
        /// </summary>
873
        /// <param name="NumLen"></param>
874
        /// <returns></returns>
875
        public static int CreateMaxNumeric(int NumLen)
876
        {
877
            try 
878
            {
879
                string strNum = string.Empty;
880
                for (int i = 0; i < NumLen; i++)
881
                {
882
                    strNum += "9";
883
                }
884

    
885
                return cnvInt(strNum);
886
            }
887
            catch (System.Exception ex)
888
            {
889
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
890
                return 0;
891
            }
892
        }
893
        #endregion
894

    
895
        #endregion
896

    
897
        #region ---------- データチェックメソッド
898
        #region ディレクトリの存在チェック
899
        /// <summary>
900
        /// ディレクトリの存在チェック
901
        /// </summary>
902
        /// <param name="DirectryName">フォルダパス</param>
903
        /// <returns></returns>
904
        public static bool ChkDirPath(string DirectryName, bool CreateFlg = false)
905
        {
906
            try
907
            {
908
                // フォルダ (ディレクトリ) が存在しているかどうか確認する
909
                if (!Directory.Exists(@DirectryName))
910
                {
911
                    // 作成フラグOffならばエラー
912
                    if (!CreateFlg) return false;
913

    
914
                    // ディレクトリを作成する
915
                    Directory.CreateDirectory(@DirectryName);
916
                }
917

    
918
                return true;
919
            }
920
            catch (Exception ex)
921
            {
922
                logger.ErrorFormat(ex.Message);
923
                return false;
924
            }
925
        }
926
        #endregion
927

    
928
        #region オブジェクトのNullチェック
929
        /// <summary>
930
        /// オブジェクトのNullチェック
931
        /// </summary>
932
        /// <param name="sendData">オブジェクト</param>
933
        /// <returns></returns>
934
        public static bool chkObjectIsNull(Object sendData)
935
        {
936
            try
937
            {
938
                if (sendData == null) return true;
939

    
940
                return false;
941
            }
942
            catch (System.Exception ex)
943
            {
944
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
945
                return false;
946
            }
947
        }
948
        #endregion
949

    
950
        #region 数値チェック
951
        /// <summary>
952
        /// 数値チェック
953
        /// </summary>
954
        /// <param name="data">Long文字列</param>
955
        /// <param name="indispensable">入力必須チェック</param>
956
        /// <returns>true:正常 false:異常</returns>
957
        public static bool chkNumeric(object CheckData, bool indispensable = false)
958
        {
959
            try
960
            {
961
                if (chkObjectIsNull(CheckData)) return false;
962

    
963
                string RecvData = cnvString(CheckData);
964
                double revData = 0;
965
                // 必須入力チェック
966
                if (indispensable)
967
                {
968
                    if (RecvData.Replace(",", "").Replace("\\", "").Trim().Length == 0) return false;
969
                }
970
                // Nullが入っていなくてレングスが0は数値として扱う
971
                if (RecvData.Replace(",", "").Replace("\\", "").Trim().Length == 0) return true;
972

    
973
                return double.TryParse(RecvData.Replace(",", "").Replace("\\", "").Trim(), out revData);
974
            }
975
            catch (System.Exception ex)
976
            {
977
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
978
                return false;
979
            }
980
        }
981
        #endregion
982

    
983
        #region 数値チェック(long)
984
        /// <summary>
985
        /// 数値チェック(long)
986
        /// </summary>
987
        /// <param name="data">Long文字列</param>
988
        /// <param name="indispensable">入力必須チェック</param>
989
        /// <returns>true:正常 false:異常</returns>
990
        public static bool chkNumeric(object sendData, ref long retData, bool indispensable = false)
991
        {
992
            try
993
            {
994
                // 必須入力チェック
995
                if (indispensable)
996
                {
997
                    if (cnvString(sendData).Replace(",", "").Replace("\\", "").Trim().Length == 0) return false;
998
                }
999

    
1000
                return long.TryParse(cnvString(sendData).Replace(",", "").Replace("\\", "").Trim(), out retData);
1001
            }
1002
            catch (System.Exception ex)
1003
            {
1004
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1005
                return false;
1006
            }
1007
        }
1008
        #endregion
1009

    
1010
        #region 数値チェック(int)
1011
        /// <summary>
1012
        /// 数値チェック(int)
1013
        /// </summary>
1014
        /// <param name="data">Long文字列</param>
1015
        /// <param name="indispensable">入力必須チェック</param>
1016
        /// <returns>true:正常 false:異常</returns>
1017
        public static bool chkNumeric(object sendData, ref int retData, bool indispensable = false)
1018
        {
1019
            try
1020
            {
1021
                // 必須入力チェック
1022
                if (indispensable)
1023
                {
1024
                    if (cnvString(sendData).Replace(",", "").Replace("\\", "").Trim().Length == 0) return false;
1025
                }
1026

    
1027
                return int.TryParse(cnvString(sendData).Replace(",", "").Replace("\\", "").Trim(), out retData);
1028
            }
1029
            catch (System.Exception ex)
1030
            {
1031
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1032
                return false;
1033
            }
1034
        }
1035
        #endregion
1036

    
1037
        #region 数値チェック(double)
1038
        /// <summary>
1039
        /// 数値チェック(double)
1040
        /// </summary>
1041
        /// <param name="data">Long文字列</param>
1042
        /// <param name="indispensable">入力必須チェック</param>
1043
        /// <returns>true:正常 false:異常</returns>
1044
        public static bool chkNumeric(object sendData, ref double retData, bool indispensable = false)
1045
        {
1046
            try
1047
            {
1048
                // 必須入力チェック
1049
                if (indispensable)
1050
                {
1051
                    if (cnvString(sendData).Replace(",", "").Replace("\\", "").Trim().Length == 0) return false;
1052
                }
1053

    
1054
                return double.TryParse(cnvString(sendData).Replace(",", "").Replace("\\", "").Trim(), out retData);
1055
            }
1056
            catch (System.Exception ex)
1057
            {
1058
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1059
                return false;
1060
            }
1061
        }
1062
        #endregion
1063

    
1064
        #region 文字列長さチェック(UTF-8)
1065
        /// <summary>
1066
        /// 文字列長さチェック(UTF-8)
1067
        /// </summary>
1068
        /// <param name="strData">対象文字列</param>
1069
        /// <param name="lngMaxLen">最大長</param>
1070
        /// <param name="indispensable">入力必須チェック</param>
1071
        /// <returns>true:正常 false:異常</returns>
1072
        public static bool chkStringLength(string strData, int lngMaxLen, bool indispensable = false)
1073
        {
1074
            bool bRet = true;
1075
            //int lngLen = 0;
1076
            try
1077
            {
1078

    
1079
                //Encoding sjis = Encoding.GetEncoding("shift-jis");
1080
                Encoding utf8 = Encoding.GetEncoding("utf-8");
1081

    
1082
                // 必須入力チェック
1083
                if (indispensable)
1084
                {
1085
                    if (strData.Length == 0) bRet = false;
1086
                }
1087
                // S-Jisチェック
1088
                //lngLen = sjis.GetByteCount(strData);
1089
                // UTF-8チェック
1090
                //lngLen = utf8.GetByteCount(strData);
1091
                //if (lngLen > lngMaxLen) bRet = false;
1092
                // C#内はUTFなので文字長だけをチェックする
1093
                if (strData.Length > lngMaxLen) bRet = false;
1094
            }
1095
            catch (System.Exception ex)
1096
            {
1097
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1098
                bRet = false;
1099
            }
1100

    
1101
            return bRet;
1102
        }
1103
        #endregion
1104

    
1105
        #region 郵便番号チェック
1106
        /// <summary>
1107
        /// 郵便番号チェック
1108
        /// </summary>
1109
        /// <param name="strData">郵便番号文字列</param>
1110
        /// <returns>true:正常 false:異常</returns>
1111
        public static bool chkZipcode(string strdata)
1112
        {
1113
            bool bRet = false;
1114

    
1115
            Regex regex = new Regex("^[0-9]{3}[-][0-9]{4}$");
1116
            if (regex.IsMatch(strdata))
1117
            {
1118
                bRet = true;
1119
            }
1120
            return bRet;
1121
        }
1122
        #endregion
1123

    
1124
        #region 電話番号/FAX番号チェック
1125
        /// <summary>
1126
        /// 電話番号/FAX番号チェック
1127
        /// </summary>
1128
        /// <param name="data">電話番号文字列</param>
1129
        /// <returns>true:正常 false:異常</returns>
1130
        public static bool chkPhoneNumber(string strdata)
1131
        {
1132
            bool bRet = false;
1133

    
1134
            Regex regex = new Regex("^[0-9]{2,5}-[0-9]{1,4}-[0-9]{3,4}$");
1135
            if (regex.IsMatch(strdata))
1136
            {
1137
                bRet = true;
1138
            }
1139
            return bRet;
1140
        }
1141
        #endregion
1142

    
1143
        #region メールアドレスチェック
1144
        /// <summary>
1145
        /// メールアドレスチェック
1146
        /// </summary>
1147
        /// <param name="data">電話番号文字列</param>
1148
        /// <returns>true:正常 false:異常</returns>
1149
        public static bool chkMailAddress(string strdata)
1150
        {
1151
            bool bRet = false;
1152

    
1153
            Regex regex = new Regex(@"\A\P{Cc}+@\P{Cc}+\z");
1154
            if (regex.IsMatch(strdata))
1155
            {
1156
                bRet = true;
1157
            }
1158
            return bRet;
1159
        }
1160
        #endregion
1161

    
1162
        #region 日付チェック
1163
        /// <summary>
1164
        /// 日付チェック
1165
        /// </summary>
1166
        /// <param name="data">日付文字列</param>
1167
        /// <returns>true:正常 false:異常</returns>
1168
        public static bool chkDate(string strdata)
1169
        {
1170
            bool bRet = true;
1171
            try
1172
            {
1173
                DateTime dtwork = DateTime.MinValue;
1174

    
1175
                return DateTime.TryParse(strdata, out dtwork);
1176
            }
1177
            catch (System.Exception ex)
1178
            {
1179
                logger.DebugFormat("chkDate Error message:{0}", ex.Message);
1180
                bRet = false;
1181
            }
1182
            return bRet;
1183
        }
1184
        #endregion
1185

    
1186
        #region 対象が空かどうかをチェックする
1187
        /// <summary>
1188
        /// 対象が空かどうかをチェックする
1189
        /// </summary>
1190
        /// <param name="objCell"></param>
1191
        /// <param name="iColumn"></param>
1192
        /// <returns>true:空 flase:有効</returns>
1193
        public static bool chkCellBlank(object objCell)
1194
        {
1195
            try
1196
            {
1197
                if (chkObjectIsNull(objCell)) return true;
1198
                if (objCell.ToString().Length == 0) return true;
1199
            
1200
                return false;
1201
            }
1202
            catch (System.Exception ex)
1203
            {
1204
                logger.DebugFormat("chkDate Error message:{0}", ex.Message);
1205
                return true;
1206
            }
1207
        }
1208
        #endregion
1209

    
1210
        #region 画面フィールド入力必須チェック
1211
        /// <summary>
1212
        /// 画面フィールド入力必須チェック
1213
        /// </summary>
1214
        /// <param name="dispControl">コントロールオブジェクト</param>
1215
        /// <returns>false:エラー true:エラーなし</returns>
1216
        public static bool DispFieldIndispensable(Control dispControl)
1217
        {
1218
            bool bAns = true;
1219
            try
1220
            {
1221
                // 必須入力チェック
1222
                if (chkObjectIsNull(dispControl))
1223
                {
1224
                    bAns = false;
1225
                }
1226
                else
1227
                {
1228
                    if (dispControl.Text.ToString().Length == 0)
1229
                    {
1230
                        bAns = false;
1231
                    }
1232
                }
1233
            }
1234
            catch (Exception ex)
1235
            {
1236
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1237
                bAns = false;
1238
            }
1239
            finally
1240
            {
1241
                // 背景色変更
1242
                chgBackColor(dispControl, bAns);
1243
            }
1244
            return bAns;
1245
        }
1246
        #endregion
1247

    
1248
        #region 画面フィールド入力文字数チェック
1249
        /// <summary>
1250
        /// 画面フィールド入力文字数チェック
1251
        /// </summary>
1252
        /// <param name="dispControl">コントロールオブジェクト</param>
1253
        /// <param name="sLength">文字列長</param>
1254
        /// <param name="indispensable">true:必須入力チェック</param>
1255
        /// <returns>false:エラー true:エラーなし</returns>
1256
        public static bool DispFieldLengthCheck(Control dispControl, int sLength, bool indispensable = false)
1257
        {
1258
            bool bAns = true;
1259
            try
1260
            {
1261
                // 必須入力チェック
1262
                if (indispensable)
1263
                {
1264
                    bAns = DispFieldIndispensable(dispControl);
1265
                }
1266

    
1267
                if (dispControl.Text.ToString().Length != 0)
1268
                {
1269
                    // レングスチェック
1270
                    bAns = chkStringLength(dispControl.Text.ToString(), sLength);
1271
                }
1272
            }
1273
            catch (Exception ex)
1274
            {
1275
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1276
                bAns = false;
1277
            }
1278
            finally
1279
            {
1280
                // 背景色変更
1281
                chgBackColor(dispControl, bAns);
1282
            }
1283
            return bAns;
1284
        }
1285
        #endregion
1286

    
1287
        #region 画面フィールド入力日付チェック
1288
        /// <summary>
1289
        /// 画面フィールド入力日付チェック
1290
        /// </summary>
1291
        /// <param name="dispControl">コントロールオブジェクト</param>
1292
        /// <param name="indispensable">true:必須入力チェック</param>
1293
        /// <returns>false:エラー true:エラーなし</returns>
1294
        public static bool DispFieldDateCheck(Control dispControl, bool indispensable = false)
1295
        {
1296
            bool bAns = true;
1297
            try
1298
            {
1299
                // 必須入力チェック
1300
                if (indispensable)
1301
                {
1302
                    bAns = DispFieldIndispensable(dispControl);
1303
                }
1304

    
1305
                if (dispControl.Text.ToString().Length != 0)
1306
                {
1307
                    // 未定はエラーにしない
1308
                    if (!indispensable && dispControl.Text.Equals(CommonDefine.s_UndecidedString)) { }
1309
                    else
1310
                        // 日付チェック
1311
                        bAns = chkDate(dispControl.Text.ToString());
1312
                }
1313
            }
1314
            catch (Exception ex)
1315
            {
1316
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1317
                bAns = false;
1318
            }
1319
            finally
1320
            {
1321
                // 背景色変更
1322
                chgBackColor(dispControl, bAns);
1323
            }
1324
            return bAns;
1325
        }
1326
        #endregion
1327

    
1328
        #region 画面フィールド入力郵便番号チェック
1329
        /// <summary>
1330
        /// 画面フィールド入力郵便番号チェック
1331
        /// </summary>
1332
        /// <param name="dispControl">コントロールオブジェクト</param>
1333
        /// <param name="indispensable">true:必須入力チェック</param>
1334
        /// <returns>false:エラー true:エラーなし</returns>
1335
        public static bool DispFieldZipCodeCheck(Control dispControl, bool indispensable = false)
1336
        {
1337
            bool bAns = true;
1338
            try
1339
            {
1340
                // 必須入力チェック
1341
                if (indispensable)
1342
                {
1343
                    bAns = DispFieldIndispensable(dispControl);
1344
                }
1345

    
1346
                if (dispControl.Text.ToString().Length != 0)
1347
                {
1348
                    // 郵便番号チェック
1349
                    bAns = chkZipcode(dispControl.Text.ToString());
1350
                }
1351
            }
1352
            catch (Exception ex)
1353
            {
1354
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1355
                bAns = false;
1356
            }
1357
            finally
1358
            {
1359
                // 背景色変更
1360
                chgBackColor(dispControl, bAns);
1361
            }
1362
            return bAns;
1363
        }
1364
        #endregion
1365

    
1366
        #region 画面フィールド入力Intチェック
1367
        /// <summary>
1368
        /// 画面フィールド入力Intチェック
1369
        /// </summary>
1370
        /// <param name="dispControl">コントロールオブジェクト</param>
1371
        /// <param name="indispensable">true:必須入力チェック</param>
1372
        /// <returns>false:エラー true:エラーなし</returns>
1373
        public static bool DispFieldIntCheck(Control dispControl, bool indispensable = false)
1374
        {
1375
            bool bAns = true;
1376
            try
1377
            {
1378
                // 必須入力チェック
1379
                if (indispensable)
1380
                {
1381
                    bAns = DispFieldIndispensable(dispControl);
1382
                }
1383

    
1384
                if (dispControl.Text.ToString().Length != 0)
1385
                {
1386
                    int work = 0;
1387
                    // 数値チェック
1388
                    //bAns = chkNumeric(dispControl.Text.ToString(), ref work);
1389
                    bAns = int.TryParse(dispControl.Text.ToString(), out work);
1390
                }
1391
            }
1392
            catch (Exception ex)
1393
            {
1394
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1395
                bAns = false;
1396
            }
1397
            finally
1398
            {
1399
                // 背景色変更
1400
                chgBackColor(dispControl, bAns);
1401
            }
1402
            return bAns;
1403
        }
1404
        #endregion
1405

    
1406
        #region 画面フィールド入力Doubleチェック
1407
        /// <summary>
1408
        /// 画面フィールド入力Doubleチェック
1409
        /// </summary>
1410
        /// <param name="dispControl">コントロールオブジェクト</param>
1411
        /// <param name="indispensable">true:必須入力チェック</param>
1412
        /// <returns>false:エラー true:エラーなし</returns>
1413
        public static bool DispFieldDoubleCheck(Control dispControl, bool indispensable = false)
1414
        {
1415
            bool bAns = true;
1416
            try
1417
            {
1418
                // 必須入力チェック
1419
                if (indispensable)
1420
                {
1421
                    bAns = DispFieldIndispensable(dispControl);
1422
                }
1423

    
1424
                if (dispControl.Text.ToString().Length != 0)
1425
                {
1426
                    double work = 0;
1427
                    // 数値チェック
1428
                    bAns = chkNumeric(dispControl.Text.ToString(), ref work);
1429
                }
1430
            }
1431
            catch (Exception ex)
1432
            {
1433
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1434
                bAns = false;
1435
            }
1436
            finally
1437
            {
1438
                // 背景色変更
1439
                chgBackColor(dispControl, bAns);
1440
            }
1441
            return bAns;
1442
        }
1443
        #endregion
1444

    
1445
        #region 画面フィールド入力電話番号チェック
1446
        /// <summary>
1447
        /// 画面フィールド入力電話番号チェック
1448
        /// </summary>
1449
        /// <param name="dispControl">コントロールオブジェクト</param>
1450
        /// <param name="indispensable">true:必須入力チェック</param>
1451
        /// <returns>false:エラー true:エラーなし</returns>
1452
        public static bool DispFieldPhoneNumberCheck(Control dispControl, bool indispensable = false)
1453
        {
1454
            bool bAns = true;
1455
            try
1456
            {
1457
                // 必須入力チェック
1458
                if (indispensable)
1459
                {
1460
                    bAns = DispFieldIndispensable(dispControl);
1461
                }
1462

    
1463
                if (dispControl.Text.ToString().Length != 0)
1464
                {
1465
                    // 電話番号チェック
1466
                    bAns = chkPhoneNumber(dispControl.Text.ToString());
1467
                }
1468
            }
1469
            catch (Exception ex)
1470
            {
1471
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1472
                bAns = false;
1473
            }
1474
            finally
1475
            {
1476
                // 背景色変更
1477
                chgBackColor(dispControl, bAns);
1478
            }
1479
            return bAns;
1480
        }
1481
        #endregion
1482

    
1483
        #region 画面フィールド入力メールアドレスチェック
1484
        /// <summary>
1485
        /// 画面フィールド入力メールアドレスチェック
1486
        /// </summary>
1487
        /// <param name="dispControl">コントロールオブジェクト</param>
1488
        /// <param name="indispensable">true:必須入力チェック</param>
1489
        /// <returns>false:エラー true:エラーなし</returns>
1490
        public static bool DispFieldMailAddressCheck(Control dispControl, bool indispensable = false)
1491
        {
1492
            bool bAns = true;
1493
            try
1494
            {
1495
                // 必須入力チェック
1496
                if (indispensable)
1497
                {
1498
                    bAns = DispFieldIndispensable(dispControl);
1499
                }
1500

    
1501
                if (dispControl.Text.ToString().Length != 0)
1502
                {
1503
                    // メールアドレスチェック
1504
                    bAns = chkMailAddress(dispControl.Text.ToString());
1505
                }
1506
            }
1507
            catch (Exception ex)
1508
            {
1509
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1510
                bAns = false;
1511
            }
1512
            finally
1513
            {
1514
                // 背景色変更
1515
                chgBackColor(dispControl, bAns);
1516
            }
1517
            return bAns;
1518
        }
1519
        #endregion
1520

    
1521
        #region 指定した日が第何週かを求める
1522
        /// <summary>
1523
        /// 指定した日が第何週かを求める
1524
        /// </summary>
1525
        /// <param name="date"></param>
1526
        /// <returns></returns>
1527
        public static int NthWeek(DateTime date)
1528
        {
1529
            int w = (int)(new DateTime(date.Year, date.Month, 1).DayOfWeek);
1530
            return (date.Day + w - 1) / 7 + 1;
1531

    
1532
        }
1533
        #endregion
1534
        #endregion
1535

    
1536
        #region ---------- 工事管理システム専用
1537

    
1538
        #region 定義ファイル読込
1539
        /// <summary>
1540
        /// 定義ファイル読込
1541
        /// </summary>
1542
        private static void DefinitionFileInit()
1543
        {
1544
            try
1545
            {
1546
                //定義ファイル読込
1547
                System.IO.FileStream fs = new System.IO.FileStream(CommonDefine.s_DefinitionFileName, System.IO.FileMode.Open);
1548
                System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(DefinitionFileRead));
1549
                m_dfr_model = (DefinitionFileRead)serializer.Deserialize(fs);
1550
            }
1551
            catch (Exception ex)
1552
            {
1553
                logger.ErrorFormat("定義ファイル読込エラー:{0}:{1}", GetMethodName(), ex.Message);
1554
            }
1555
        }
1556

    
1557
        #endregion
1558

    
1559
        #region 管理マスタ取得
1560
        /// <summary>
1561
        /// 管理マスタ取得
1562
        /// </summary>
1563
        public static bool SetSystemMaster()
1564
        {
1565
            // 管理マスタクラス
1566
            IOMSystem ocDB = new IOMSystem();
1567
            try
1568
            {
1569
                // 管理マスタ取得
1570
                // 1レコードだけなので取り出す
1571
                string strSQL = " Where SystemCode = 1";
1572
                if (!ocDB.SelectAction(strSQL, ref m_systemMaster)) return false;
1573

    
1574
                return true;
1575
            }
1576
            catch (Exception ex)
1577
            {
1578
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1579
                return false;
1580
            }
1581
            finally
1582
            {
1583
                ocDB.close(); ocDB = null;
1584
            }
1585
        }
1586
        #endregion
1587

    
1588
        #region メソッド名を取得する
1589
        /// <summary>
1590
        /// メソッド名を取得する
1591
        /// </summary>
1592
        /// <param name="StackCnt"></param>
1593
        /// <returns></returns>
1594
        public static string GetMethodName(int stackCnt = 1)
1595
        {
1596
            try
1597
            {
1598
                StringBuilder sb = new StringBuilder();
1599

    
1600
                // 一つ前のスタック情報
1601
                StackFrame stackFrame = new StackFrame(stackCnt);
1602

    
1603
                // 呼び出し元メソッドの情報出力
1604
                System.Reflection.MethodBase method = stackFrame.GetMethod();
1605

    
1606
                // Method取得失敗は戻る
1607
                if (method == null) return string.Empty;
1608

    
1609
                // 正しく取得できているかの判定
1610
                if (method.DeclaringType != null && !string.IsNullOrEmpty(method.DeclaringType.Name))
1611
                {
1612
                    // 型名
1613
                    sb.AppendFormat("[TYPE]{0}", method.DeclaringType.Name);
1614
                }
1615

    
1616
                if (!string.IsNullOrEmpty(method.Name))
1617
                {
1618
                    // 編集済みの場合は区切りを入れる
1619
                    if (0 < sb.Length) sb.Append('/');
1620

    
1621
                    // メソッド名
1622
                    sb.AppendFormat("[METHOD]{0}", method.Name);
1623
                }
1624
                return sb.ToString();
1625
            }
1626
            catch (Exception ex)
1627
            {
1628
                logger.ErrorFormat(ex.Message);
1629
            }
1630
            return string.Empty;
1631
        }
1632
        #endregion
1633

    
1634
        #region 期数から期の年を取得する
1635
        /// <summary>
1636
        /// 期数から期の年を取得する
1637
        /// </summary>
1638
        /// <param name="PeriodCount"></param>
1639
        /// <returns></returns>
1640
        public static int PeriodCountToYear(int PeriodCount)
1641
        {
1642
            IOMBizPeriodHistory BizHisDB = new IOMBizPeriodHistory();
1643
            try
1644
            {
1645
                // 今の年を取得する
1646
                int iYear = DateTime.Now.Year;
1647

    
1648
                StringBuilder strSQL = new StringBuilder();
1649
                BizPeriodHistory BizHisRec = new BizPeriodHistory();
1650

    
1651
                // 営業期
1652
                strSQL.Append(BizHisDB.CreatePrimarykeyString(PeriodCount, (int)BizPeriodHistory.PeriodFlagDef.BizPeriod));
1653

    
1654
                // 運営期履歴情報読込
1655
                if (!BizHisDB.SelectAction(strSQL.ToString(), ref BizHisRec)) return iYear;
1656

    
1657
                iYear = BizHisRec.BeginDate.Year;
1658

    
1659
                return iYear;
1660
            }
1661
            catch (Exception ex)
1662
            {
1663
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1664
                return 0;
1665
            }
1666
            finally
1667
            {
1668
                BizHisDB.close(); BizHisDB = null;
1669
            }
1670
        }
1671
        #endregion
1672

    
1673
        #region 工事情報より期の最大・最少を取得する
1674
        /// <summary>
1675
        /// 工事情報より期の最大・最少を取得する
1676
        /// </summary>
1677
        /// <param name="StartDate"></param>
1678
        /// <returns></returns>
1679
        public static void GetPeriodYearMinMax(ref int min, ref int max)
1680
        {
1681
            IOConstructionBaseInfo cbiDB = new IOConstructionBaseInfo();
1682
            try
1683
            {
1684
                StringBuilder strSQL = new StringBuilder();
1685
                if (CommonMotions.SystemMasterData.ConstructionNoBase == (int)SystemMaster.ConstrNoBaseDef.BusinessPeriod)
1686
                {   // ----- 営業期ベースの時
1687
                    strSQL.Append("SELECT MIN(CONSTRUCTIONPERIOD), MAX(CONSTRUCTIONPERIOD) FROM CONSTRUCTIONBASEINFO");
1688
                }
1689
                else
1690
                {   // ----- 工事年度ベースの時
1691
                    strSQL.Append("SELECT MIN(ConstructionYear), MAX(ConstructionYear) FROM CONSTRUCTIONBASEINFO");
1692
                }
1693

    
1694
                ArrayList arList = new ArrayList();
1695
                if (!cbiDB.ExecuteReader(strSQL.ToString(), ref arList)) return;
1696

    
1697
                object[] wrkobj = (object[])arList[0];
1698
                min = cnvInt(wrkobj[0]);
1699
                max = cnvInt(wrkobj[1]);
1700

    
1701
            }
1702
            catch (Exception ex)
1703
            {
1704
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1705
            }
1706
            finally
1707
            {
1708
                cbiDB.close(); cbiDB = null;
1709
            }
1710
        }
1711
        #endregion
1712

    
1713
        #region 管理マスタの現在年を取得する
1714
        /// <summary>
1715
        /// 管理マスタの現在年を取得する
1716
        /// </summary>
1717
        /// <returns></returns>
1718
        public static int GetPeriodYear()
1719
        {
1720
            try
1721
            {
1722
                int nYearVal = DateTime.Now.Year;
1723

    
1724
                if (CommonMotions.SystemMasterData.ConstructionNoBase == (int)SystemMaster.ConstrNoBaseDef.BusinessPeriod)
1725
                {
1726
                    // ----- 営業期ベースの時
1727
                    nYearVal = CommonMotions.SystemMasterData.BusinessPeriod;
1728
                }
1729
                else
1730
                {
1731
                    // ----- 工事年度ベースの時
1732
                    nYearVal = CommonMotions.SystemMasterData.ConstrYear;
1733
                }
1734

    
1735
                return nYearVal;
1736
            }
1737
            catch (System.Exception ex)
1738
            {
1739
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1740
                return 0;
1741
            }
1742
        }
1743
        #endregion
1744

    
1745
        #region 対象日より営業期・工事年度を取得する
1746
        /// <summary>
1747
        /// 対象日より営業期・工事年度を取得する
1748
        /// </summary>
1749
        /// <param name="NowDay"></param>
1750
        /// <returns></returns>
1751
        public static int ConvDate2YearOrPeriod(DateTime NowDay)
1752
        {
1753
            IOMBizPeriodHistory BizHisDB = new IOMBizPeriodHistory();
1754
            try
1755
            {
1756
                int nRetVal = 0;
1757

    
1758
                // 範囲に入るデータを取得する
1759
                StringBuilder strSQL = new StringBuilder();
1760

    
1761
                strSQL.AppendFormat(" WHERE (DATE(BeginDate) <= DATE('{0}'))", NowDay.ToShortDateString());
1762
                strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(CompleteDate))", NowDay.ToShortDateString());
1763
                strSQL.AppendFormat(" And PeriodFlag = {0}", CommonMotions.SystemMasterData.ConstructionNoBase);
1764
                strSQL.Append(" Order By PeriodFlag Asc, PeriodYear Asc");
1765

    
1766
                List<BizPeriodHistory> BizList = new List<BizPeriodHistory>();
1767
                if (!BizHisDB.SelectAction(strSQL.ToString(), ref BizList)) return 0;
1768

    
1769
                nRetVal = BizList[0].PeriodYear;
1770

    
1771
                return nRetVal;
1772
            }
1773
            catch (Exception ex)
1774
            {
1775
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1776
                return 0;
1777
            }
1778
            finally
1779
            {
1780
                BizHisDB.close(); BizHisDB = null;
1781
            }
1782
        }
1783
        #endregion
1784

    
1785
        #region ポイントに規定値を加算して戻す
1786
        /// <summary>
1787
        /// ポイントに規定値を加算して戻す
1788
        /// </summary>
1789
        /// <param name="PosPoint"></param>
1790
        public static Point SetFormPosion(Point PosPoint)
1791
        {
1792
            Point po = PosPoint;
1793
            try
1794
            {
1795
                po.X += CommonDefine.s_DefalutShiftValue;
1796
                po.Y += CommonDefine.s_DefalutShiftValue;
1797

    
1798
                return po;
1799
            }
1800
            catch (Exception ex)
1801
            {
1802
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1803
                return po;
1804
            }
1805
        }
1806
        #endregion
1807

    
1808
        #region フィールドバックカラー変更処理
1809
        /// <summary>
1810
        /// フィールドバックカラー変更処理(あまりカッコ良くない^^;)
1811
        /// </summary>
1812
        /// <param name="objCtrl"></param>
1813
        /// <param name="chgColor"></param>
1814
        public static void chgBackColor(object objCtrl, bool bPara)
1815
        {
1816
            try
1817
            {
1818
                if (objCtrl.GetType().Equals(typeof(TextBox)) || objCtrl.GetType().Equals(typeof(TextBoxEX)))
1819
                {
1820
                    TextBox wrk = (TextBox)objCtrl;
1821
                    if (bPara)
1822
                    {
1823
                        wrk.BackColor = CommonDefine.s_clrNormal;
1824
                    }
1825
                    else
1826
                    {
1827
                        wrk.BackColor = CommonDefine.s_clrError;
1828
                        wrk.Focus();
1829
                    }
1830
                }
1831
                else if (objCtrl.GetType().Equals(typeof(DataGridViewTextBoxCell)))
1832
                {
1833
                    DataGridViewTextBoxCell wrk = (DataGridViewTextBoxCell)objCtrl;
1834
                    if (bPara)
1835
                    {
1836
                        wrk.Style.BackColor = CommonDefine.s_clrNormal;
1837
                    }
1838
                    else
1839
                    {
1840
                        wrk.Style.BackColor = CommonDefine.s_clrError;
1841
                        wrk.Selected = true;
1842
                    }
1843
                }
1844
                else if (objCtrl.GetType().Equals(typeof(ComboBoxEX)))
1845
                {
1846
                    ComboBox wrk = (ComboBox)objCtrl;
1847
                    if (bPara)
1848
                    {
1849
                        wrk.BackColor = CommonDefine.s_clrNormal;
1850
                    }
1851
                    else
1852
                    {
1853
                        wrk.BackColor = CommonDefine.s_clrError;
1854
                        wrk.Focus();
1855
                    }
1856
                }
1857
                else if (objCtrl.GetType().Equals(typeof(ComboBox)))
1858
                {
1859
                    ComboBox wrk = (ComboBox)objCtrl;
1860
                    if (bPara)
1861
                    {
1862
                        wrk.BackColor = CommonDefine.s_clrNormal;
1863
                    }
1864
                    else
1865
                    {
1866
                        wrk.BackColor = CommonDefine.s_clrError;
1867
                        wrk.Focus();
1868
                    }
1869
                }
1870
                else if (objCtrl.GetType().Equals(typeof(ListBox)))
1871
                {
1872
                    ListBox wrk = (ListBox)objCtrl;
1873
                    if (bPara)
1874
                    {
1875
                        wrk.BackColor = CommonDefine.s_clrNormal;
1876
                    }
1877
                    else
1878
                    {
1879
                        wrk.BackColor = CommonDefine.s_clrError;
1880
                        wrk.Focus();
1881
                    }
1882
                }
1883
                else if (objCtrl.GetType().Equals(typeof(Label)))
1884
                {
1885
                    Label wrk = (Label)objCtrl;
1886
                    if (bPara)
1887
                    {
1888
                        wrk.BackColor = CommonDefine.s_clrNormal;
1889
                    }
1890
                    else
1891
                    {
1892
                        wrk.BackColor = CommonDefine.s_clrError;
1893
                    }
1894
                }
1895
                else if (objCtrl.GetType().Equals(typeof(NumericUpDown)))
1896
                {
1897
                    NumericUpDown wrk = (NumericUpDown)objCtrl;
1898
                    if (bPara)
1899
                    {
1900
                        wrk.BackColor = CommonDefine.s_clrNormal;
1901
                    }
1902
                    else
1903
                    {
1904
                        wrk.BackColor = CommonDefine.s_clrError;
1905
                    }
1906
                }
1907
            }
1908
            catch (Exception ex)
1909
            {
1910
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1911
            }
1912
        }
1913
        #endregion
1914

    
1915
        #region 営業期数より工事年を取得する
1916
        /// <summary>
1917
        /// 営業期数より工事年を取得する
1918
        /// </summary>
1919
        /// <param name="Period"></param>
1920
        /// <returns></returns>
1921
        public static int BusinessPeriodToConstructionYears(int Period)
1922
        {
1923
            try
1924
            {
1925
                int Beginning = 0;
1926
                int diffwork = 0;
1927
                int RetYears = 0;
1928
                string strwork = string.Empty;
1929

    
1930
                // 現在期との差分を求める
1931
                diffwork = Period - CommonMotions.SystemMasterData.BusinessPeriod;
1932

    
1933
                // 期首月を取得する
1934
                Beginning = CommonMotions.SystemMasterData.BusinessBeginDate.Month;
1935

    
1936
                // 年数を求める
1937
                DateTime dateWork = DateTime.Now;
1938
                int nowMounth = DateTime.Now.Month;
1939
                // 期首月を境に年度を計算する
1940
                int iYear = 0;
1941
                if (nowMounth < Beginning)
1942
                    iYear = dateWork.AddYears(-1).Year;
1943
                else
1944
                    iYear = dateWork.Year;
1945

    
1946
                // ベース年を求める
1947
                RetYears = iYear + diffwork;
1948

    
1949
                return RetYears;
1950
            }
1951
            catch (Exception ex)
1952
            {
1953
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1954
                return 0;
1955
            }
1956
        }
1957
        #endregion
1958

    
1959
        #region 発注者名を法人格を含んだ形で連結する
1960
        /// <summary>
1961
        /// 発注者名を法人格を含んだ形で連結する
1962
        /// </summary>
1963
        /// <param name="master"></param>
1964
        /// <returns></returns>
1965
        public static string OrderersNameUnion(OrderersMaster master)
1966
        {
1967
            try
1968
            {
1969
                string strRet = string.Empty;
1970

    
1971
                if (master.CorporateStatusPoint == (int)BusinessTypeMaster.StatusNamePointDef.Forword)
1972
                    strRet = master.CorporateStatusName + " " + master.OrderersName1 + " " + master.OrderersName2;
1973
                else if (master.CorporateStatusPoint == (int)BusinessTypeMaster.StatusNamePointDef.Back)
1974
                    strRet = master.OrderersName1 + " " + master.CorporateStatusName + " " + master.OrderersName2;
1975
                else
1976
                    strRet = master.OrderersName1 + " " + master.OrderersName2;
1977

    
1978
                return strRet;
1979
            }
1980
            catch (Exception ex)
1981
            {
1982
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1983
                return string.Empty;
1984
            }
1985
        }
1986
        #endregion
1987

    
1988
        #region メッセージ送信メソッド(テキストボックス背景文字表示用)
1989
        /// <summary>
1990
        /// メッセージ送信メソッド
1991
        /// </summary>
1992
        /// <param name="hWnd"></param>
1993
        /// <param name="Msg"></param>
1994
        /// <param name="wParam"></param>
1995
        /// <param name="lParam"></param>
1996
        /// <returns></returns>
1997
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
1998
        public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
1999
        #endregion
2000

    
2001
        #region ファイルの時間を取得する
2002
        /// <summary>
2003
        /// ファイルの時間を取得する
2004
        /// </summary>
2005
        /// <param name="FilePath">ファイルパス</param>
2006
        /// <param name="flg">取得日付フラグ</param>
2007
        /// <returns></returns>
2008
        public static DateTime GetFileTimeStamp(string FilePath, char flg)
2009
        {
2010
            try
2011
            {
2012
                DateTime dtDateTime = DateTime.MinValue;
2013

    
2014
                if (flg == 'C')
2015
                {
2016
                    // 作成日時を取得する
2017
                    dtDateTime = File.GetCreationTime(@FilePath);
2018
                }
2019
                else if (flg == 'U')
2020
                {
2021
                    // 更新日時を取得する
2022
                    dtDateTime = File.GetLastWriteTime(@FilePath);
2023
                }
2024
                else if (flg == 'A')
2025
                {
2026
                    // アクセス日時を取得する
2027
                    dtDateTime = File.GetLastAccessTime(@FilePath);
2028
                }
2029

    
2030
                return dtDateTime;
2031
            }
2032
            catch (Exception ex)
2033
            {
2034
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2035
                return DateTime.Now;
2036
            }
2037
        }
2038
        #endregion
2039

    
2040
        #region ファイルパスよりmd5のハッシュ値を返す
2041
        /// <summary>
2042
        /// ファイルパスよりmd5のハッシュ値を返す
2043
        /// </summary>
2044
        /// <param name="FilePath"></param>
2045
        /// <returns></returns>
2046
        public static string GetFileHashData(string FilePath)
2047
        {
2048
            try
2049
            {
2050
                //ファイルを開く
2051
                FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
2052

    
2053
                //MD5CryptoServiceProviderオブジェクトを作成
2054
                MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
2055

    
2056
                //ハッシュ値を計算する
2057
                byte[] bs = md5.ComputeHash(fs);
2058

    
2059
                //リソースを解放する
2060
                md5.Clear();
2061
                //ファイルを閉じる
2062
                fs.Close();
2063

    
2064
                return BitConverter.ToString(bs).ToLower().Replace("-", "");
2065

    
2066
            }
2067
            catch (Exception ex)
2068
            {
2069
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2070
                return string.Empty;
2071
            }
2072
        }
2073
        #endregion
2074

    
2075
        #region 郵便番号より住所を検索する
2076
        /// <summary>
2077
        /// 郵便番号より住所を検索する
2078
        /// </summary>
2079
        /// <param name="ZipCode">郵便番号</param>
2080
        public static void SearchZipCode2Address(string ZipCode, ref string Address1, ref string Address2)
2081
        {
2082
            Address1 = "";                //住所
2083
            Address2 = "";                //住所
2084

    
2085
            //処理時間を計測
2086
            Stopwatch sw = new Stopwatch();
2087
            //処理時間計測開始
2088
            sw.Start();
2089

    
2090
            // 郵便番号セット
2091
            string sKey = ZipCode;
2092

    
2093
            //文字列の前後のスペースをとる
2094
            sKey = sKey.Trim(' ');
2095
            //Microsoft.VisualBasic名前空間のStrConv関数を使って、全角文字を半角文字に変換
2096
            sKey = Strings.StrConv(sKey, VbStrConv.Narrow, 0);
2097

    
2098
            // 文字列の長さを取得する
2099
            int iLength = sKey.Length;
2100
            // '-'がある場合は先頭文字目の後から '-' を検索し、見つかった位置を取得する
2101
            int iFind = 0;
2102
            if ((iFind = sKey.IndexOf('-', 0)) != 0)
2103
            {
2104
                //左から3文字+"-"文字以降をtmpZip変数に代入
2105
                sKey = sKey.Substring(0, 3) + sKey.Substring(iFind + 1);
2106
            }
2107
            try
2108
            {
2109
                //StreamReaderオブジェクトの作成
2110
                StreamReader sr = new StreamReader(@CommonDefine.s_AddressFilePath, Encoding.Default);
2111

    
2112
                //1行ずつ読み込み
2113
                string dat = "";
2114
                while ((dat = sr.ReadLine()) != null)
2115
                {
2116
                    string tmpZip = "";
2117

    
2118
                    //カンマで区切られた文字列を取得
2119
                    string[] sbuf = dat.Split(',');
2120
                    //配列の3番目が郵便番号
2121
                    tmpZip = sbuf[2].Trim('"');
2122

    
2123
                    //入力された郵便番号と比較
2124
                    if (sKey == tmpZip)
2125
                    {
2126
                        //住所を作成
2127
                        //都道府県名+市区町村名+町域名
2128
                        Address1 = sbuf[6].Trim('"') + sbuf[7].Trim('"');
2129
                        Address2 = sbuf[8].Trim('"');
2130

    
2131
                        sw.Stop();  //処理時間計測終了
2132

    
2133
                        // 処理時間をTimeSpan構造体で書式付き表示
2134
                        TimeSpan ts = sw.Elapsed;
2135
                        // 出力例:00:00:00.9984668
2136
                        logger.DebugFormat("処理時間:{0}", ts.ToString());
2137

    
2138
                        break;          //ループを抜ける
2139
                    }
2140
                    Application.DoEvents();
2141
                }
2142
                //ファイルを閉じる
2143
                sr.Close();
2144
            }
2145
            catch (Exception ex)
2146
            {
2147
                //ファイルエラーが発生した場合
2148
                MessageBox.Show(ex.Message, "ファイルエラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
2149
                //処理を抜ける
2150
                return;
2151
            }
2152
        }
2153
        #endregion
2154

    
2155
        #region 文字列より指定文字から後ろを省いて戻す
2156
        /// <summary>
2157
        /// 文字列より指定文字から後ろを省いて戻す
2158
        /// </summary>
2159
        /// <param name="Mijiretu"></param>
2160
        /// <param name="Delimiter"></param>
2161
        /// <returns></returns>
2162
        public static string ComentSucstring(string Mijiretu, string Delimiter)
2163
        {
2164
            string strRet = Mijiretu;
2165
            try
2166
            {
2167

    
2168
                if (Mijiretu.IndexOf(Delimiter) < 0) return strRet;
2169
                int TargetCnt = Mijiretu.IndexOf(Delimiter) - 1;
2170

    
2171
                if (TargetCnt>0)
2172
                    strRet = Mijiretu.Substring(0, TargetCnt);
2173
                
2174
                return strRet;
2175
            }
2176
            catch (Exception ex)
2177
            {
2178
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2179
                return string.Empty;
2180
            }
2181
        }
2182
        #endregion
2183

    
2184
        #region 今の時間をセパレータを除いた文字列で戻す
2185
        /// <summary>
2186
        /// 今の時間をセパレータを除いた文字列で戻す
2187
        /// </summary>
2188
        /// <returns></returns>
2189
        public static string stringNowJikan()
2190
        {
2191
            string[] wrk = DateTime.Now.ToShortDateString().Split('/');
2192

    
2193
            string[] wrk2 = DateTime.Now.ToShortTimeString().Split(':');
2194

    
2195
            return string.Format("{0}{1}{2}{3}{4}{5}"
2196
                                            , wrk[0], wrk[1], wrk[2]
2197
                                            , wrk2[0], wrk2[1], wrk2[2]);
2198
        }
2199
        #endregion
2200

    
2201
        #region 経過日数を工数で返す
2202
        /// <summary>
2203
        /// 経過日数を工数で返す
2204
        /// </summary>
2205
        /// <param name="StartDate"></param>
2206
        /// <param name="CompDate"></param>
2207
        /// <returns></returns>
2208
        public static double DiffMounthTimes(DateTime StartDate, DateTime CompDate)
2209
        {
2210
            // 差分計算
2211
            TimeSpan DiffDate = CompDate - StartDate;
2212
            
2213
            // 当日までなので+1日する
2214
            TimeSpan wrkts = new TimeSpan(1, 0, 0, 0);
2215
            DiffDate = DiffDate + wrkts;
2216

    
2217
            // 工数の最小単位で割って10分の1にする
2218
            //return (((double)DiffDate.Days) / CommonDefine.s_ManHourUnitDays) / 10;
2219
            // 日数から月数へ変換する
2220
            return ClsCalendar.cnvMonthFromDays(DiffDate.Days);
2221
        }
2222
        #endregion
2223

    
2224
        #region 文字列を指定文字で指定レングス分埋める
2225
        /// <summary>
2226
        /// 文字列を指定文字で指定レングス分埋める
2227
        /// </summary>
2228
        /// <param name="OrgString"></param>
2229
        /// <param name="SetLength"></param>
2230
        /// <param name="Before"></param>
2231
        /// <returns></returns>
2232
        public static string SetBlankString(string OrgString, string SetString, int SetLength, bool Before)
2233
        {
2234
            try
2235
            {
2236
                string strRet = string.Empty;
2237
                int stringLength = OrgString.Length;
2238

    
2239
                // 文字列を埋める
2240
                for (int i = 0; i < (SetLength - stringLength); i++) strRet += SetString;
2241

    
2242
                // 前か後か
2243
                if (Before)
2244
                {
2245
                    strRet = strRet + OrgString;
2246
                }
2247
                else
2248
                {
2249
                    strRet = OrgString + strRet;
2250
                }
2251

    
2252
                return strRet;
2253
            }
2254
            catch (Exception ex)
2255
            {
2256
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2257
                return string.Empty;
2258
            }
2259
        }
2260
        #endregion
2261

    
2262
        #region 現在年を西暦で求める
2263
        /// <summary>
2264
        /// 現在年を西暦で求める
2265
        /// </summary>
2266
        public static int GetBaseCounstructionYear(int years)
2267
        {
2268
            try
2269
            {
2270
                int Beginning = 0;
2271
                int diffwork = 0;
2272
                string strwork = string.Empty;
2273
                if (CommonMotions.SystemMasterData.ConstructionNoBase == (int)SystemMaster.ConstrNoBaseDef.BusinessPeriod)
2274
                {   // ----- 営業期ベースの時
2275

    
2276
                    // 現在期との差分を求める
2277
                    diffwork = years - SystemMasterData.BusinessPeriod;
2278

    
2279
                    // 期首月を取得する
2280
                    Beginning = SystemMasterData.BusinessBeginDate.Month;
2281
                }
2282
                else
2283
                {   // ----- 営業年度ベースの時
2284

    
2285
                    // 現在期との差分を求める
2286
                    diffwork = years - SystemMasterData.ConstrYear;
2287

    
2288
                    // 期首月を取得する
2289
                    Beginning = SystemMasterData.ConstrBeginDate.Month;
2290
                }
2291

    
2292
                // 年数を求める
2293
                DateTime dateWork = DateTime.Now;
2294
                int nowMounth = DateTime.Now.Month;
2295
                // 期首月を境に年度を計算する
2296
                int iYear = 0;
2297
                if (nowMounth < Beginning)
2298
                    iYear = dateWork.AddYears(-1).Year;
2299
                else
2300
                    iYear = dateWork.Year;
2301

    
2302
                // ベース年を求める
2303
                return (iYear + diffwork);
2304
            }
2305
            catch (System.Exception ex)
2306
            {
2307
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
2308
                return 0;
2309
            }
2310
        }
2311
        #endregion
2312

    
2313
        #region 指定期・指定年度の期首日・期末日を取得する
2314
        /// <summary>
2315
        /// 指定期・指定年度の期首日・期末日を取得する
2316
        /// </summary>
2317
        /// <param name="nYear"></param>
2318
        /// <param name="bOpen"></param>
2319
        /// <param name="bPeriod"></param>
2320
        /// <returns></returns>
2321
        public static DateTime GetOpeningEndDate(int nYear, bool bOpen = true, bool bAuto = true, int nConstrNoBase = 0)
2322
        {
2323
            IOMBizPeriodHistory BizHisDB = new IOMBizPeriodHistory();
2324
            try
2325
            {
2326
                DateTime dtRet = DateTime.Now.Date;
2327

    
2328
                StringBuilder strSQL = new StringBuilder();
2329
                BizPeriodHistory BizHisRec = new BizPeriodHistory();
2330

    
2331
                // システム基準自動判定
2332
                int nCheckFlag = -1;
2333
                if (bAuto)
2334
                {
2335
                    nCheckFlag = m_systemMaster.ConstructionNoBase;
2336
                }
2337
                else
2338
                {
2339
                    nCheckFlag = nConstrNoBase;
2340
                }
2341

    
2342
                // 対象設定
2343
                bool bPeriod = true;
2344
                switch (nCheckFlag)
2345
                {
2346
                    case (int)SystemMaster.ConstrNoBaseDef.BusinessPeriod:
2347
                        bPeriod = true;
2348
                        break;
2349
                    case (int)SystemMaster.ConstrNoBaseDef.ConstructionYear:
2350
                        bPeriod = false;
2351
                        break;
2352
                }
2353

    
2354
                if (bPeriod)
2355
                {   // 営業期
2356
                    strSQL.Append(BizHisDB.CreatePrimarykeyString(nYear, (int)BizPeriodHistory.PeriodFlagDef.BizPeriod));
2357
                }
2358
                else
2359
                {   // 工事年度
2360
                    strSQL.Append(BizHisDB.CreatePrimarykeyString(nYear, (int)BizPeriodHistory.PeriodFlagDef.ConstrYear));
2361
                }
2362

    
2363
                // 運営期履歴情報読込
2364
                if (!BizHisDB.SelectAction(strSQL.ToString(), ref BizHisRec)) return dtRet;
2365

    
2366
                if (bOpen)
2367
                {
2368
                    // 期首取得時
2369
                    dtRet = BizHisRec.BeginDate;
2370
                }
2371
                else
2372
                {
2373
                    // 期末取得時
2374
                    dtRet = BizHisRec.CompleteDate;
2375
                }
2376

    
2377
                return dtRet;
2378
            }
2379
            catch (System.Exception ex)
2380
            {
2381
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2382
                return DateTime.Today;
2383
            }
2384
            finally
2385
            {
2386
                BizHisDB.close(); BizHisDB = null;
2387
            }
2388
        }
2389
        #endregion
2390

    
2391
        #region TimeSpanから年数を取得する
2392
        /// <summary>
2393
        /// TimeSpanから年数を取得する
2394
        /// </summary>
2395
        /// <param name="timespan"></param>
2396
        /// <returns></returns>
2397
        public static int GetTimeSpanYears(this TimeSpan timespan)
2398
        {
2399
            return (int)((double)timespan.Days / 365.2425);
2400
        }
2401
        #endregion
2402

    
2403
        #region TimeSpanから月数を取得する
2404
        /// <summary>
2405
        /// TimeSpanから月数を取得する
2406
        /// </summary>
2407
        /// <param name="timespan"></param>
2408
        /// <returns></returns>
2409
        public static int GetTimeSpanMonths(this TimeSpan timespan)
2410
        {
2411
            return (int)((double)timespan.Days / 30.436875);
2412
        }
2413
        #endregion
2414

    
2415
        #region 工事種別より工事詳細台帳が作成OKかどうかをチェックする
2416
        /// <summary>
2417
        /// 工事種別より工事詳細台帳が作成OKかどうかをチェックする
2418
        /// </summary>
2419
        /// <param name="ConstructionType"></param>
2420
        /// <returns></returns>
2421
        public static bool CheckCreateLedgerData(int ConstructionStatusFlg, int ConstructionType)
2422
        {
2423
            try
2424
            {
2425
                bool ExcuteFlg = false;
2426
                int[] Status = new int[] { CommonDefine.ProjectsStatus.First(x => x.Value.Equals("一般補修工事")).Key,
2427
                                            CommonDefine.ProjectsStatus.First(x => x.Value.Equals("空家補修工事")).Key,
2428
                                            CommonDefine.ProjectsStatus.First(x => x.Value.Equals("Hit'sV工事")).Key,
2429
                                            };
2430
                for (int i = 0; i < Status.Length; i++)
2431
                {
2432
                    //if (ConstructionStatusFlg == Status[i] && ConstructionType == CommonDefine.s_CreateLedgerData[i])
2433
                    if (ConstructionStatusFlg == Status[i])
2434
                    {
2435
                        ExcuteFlg = true;
2436
                        break;
2437
                    }
2438
                }
2439
                return ExcuteFlg;
2440
            }
2441
            catch (Exception ex)
2442
            {
2443
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2444
                return false;
2445
            }
2446
        }
2447
        #endregion
2448

    
2449
        #region 予算書・台帳給与金額計算処理
2450
        /// <summary>
2451
        /// 予算書・台帳給与金額計算処理
2452
        /// </summary>
2453
        public static void CalcPayValueData(double MonthryCost, double OrdersPrice, int workingCount,
2454
                                            ref double ExecutionAmount, ref double AmountConfigRate,
2455
                                            bool bSalaryCorrection = true)
2456
        {
2457
            try
2458
            {
2459
                // 受注金額が0の場合は1として計算する
2460
                if (OrdersPrice == 0) OrdersPrice = 1;
2461

    
2462
                // 日当計算
2463
                double DairySalary =0;
2464
                if (bSalaryCorrection)
2465
                    DairySalary = (MonthryCost * CommonDefine.s_SalaryCorrection) / CommonDefine.s_ManHourUnitMonth;
2466
                else
2467
                    DairySalary = MonthryCost / CommonDefine.s_ManHourUnitMonth;
2468

    
2469
                // 給与支払総額
2470
                int iInput = CommonMotions.cnvRound(DairySalary * workingCount);
2471
                
2472
                // 実行金額に給与支払総額をセットする
2473
                ExecutionAmount = iInput;
2474
                
2475
                // 金額構成率計算
2476
                AmountConfigRate = (iInput / OrdersPrice) * 100.0;
2477
                
2478
                // 構成率が範囲外の場合は0にする
2479
                if (AmountConfigRate < -999.00 || 999.00 < AmountConfigRate) AmountConfigRate = 0;
2480
            }
2481
            catch (Exception ex)
2482
            {
2483
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2484
            }
2485
        }
2486
        #endregion
2487

    
2488
        #region 給与取得SQL作成処理
2489
        /// <summary>
2490
        /// 給与取得SQL作成処理
2491
        /// </summary>
2492
        private static string GetSalaryValue(int PersonCode, DateTime GetData)
2493
        {
2494
            try
2495
            {
2496
                // SQL作成
2497
                string strSQL = "SELECT A.MONTHLYSALARY, A.YEARSALARY, A.PERSONCODE, A.STARTDATE FROM PERSONSALARYMASTER A,";
2498
                strSQL += " (SELECT PERSONCODE, MAX(STARTDATE) sDate FROM PERSONSALARYMASTER";
2499
                strSQL += string.Format(" WHERE PERSONCODE = {0}", PersonCode);
2500
                strSQL += string.Format(" AND DATE(NOW()) <= '{0}'", GetData.ToShortDateString());
2501
                strSQL += " GROUP BY PERSONCODE) B";
2502
                strSQL += " WHERE A.PERSONCODE = B.PERSONCODE AND A.STARTDATE = B.sDate";
2503

    
2504
                return strSQL;
2505
            }
2506
            catch (Exception ex)
2507
            {
2508
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2509
                return string.Empty;
2510
            }
2511
        }
2512
        #endregion
2513

    
2514
        #region 担当者給与金額取得処理(単独処理)
2515
        /// <summary>
2516
        /// 担当者給与金額取得処理(単独処理)
2517
        /// </summary>
2518
        public static bool GetSalaryValue(int PersonCode, ref double MonthryCost, ref double YearsCost, DateTime GetData)
2519
        {
2520
            IOMPersonInCharge PersonDB = new IOMPersonInCharge();
2521
            try
2522
            {
2523
                // 初期値セット
2524
                MonthryCost = 0;
2525
                YearsCost = 0;
2526

    
2527
                // データ取得
2528
                string strSQL = GetSalaryValue(PersonCode, GetData);
2529
                ArrayList arList = new ArrayList();
2530
                if (!PersonDB.ExecuteReader(strSQL, ref arList)) return false;
2531
                object[] objGetData = (object[])arList[0];
2532

    
2533
                // 取得値セット
2534
                MonthryCost = CommonMotions.cnvDouble(objGetData[0]);
2535
                YearsCost = CommonMotions.cnvDouble(objGetData[1]);
2536

    
2537
                return true;
2538
            }
2539
            catch (Exception ex)
2540
            {
2541
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2542
                return false;
2543
            }
2544
            finally
2545
            {
2546
                PersonDB.close(); PersonDB = null;
2547
            }
2548
        }
2549
        #endregion
2550

    
2551
        #region 担当者給与金額取得処理(セッションコネクト別)
2552
        /// <summary>
2553
        /// 担当者給与金額取得処理(セッションコネクト別)
2554
        /// </summary>
2555
        public static bool GetSalaryValue(IOMPersonInCharge PersonDB, int PersonCode,
2556
                                            ref double MonthryCost, ref double YearsCost, DateTime GetData)
2557
        {
2558
            try
2559
            {
2560
                // 初期値セット
2561
                MonthryCost = 0;
2562
                YearsCost = 0;
2563

    
2564
                // データ取得
2565
                string strSQL = GetSalaryValue(PersonCode, GetData);
2566
                ArrayList arList = new ArrayList();
2567
                if (!PersonDB.ExecuteReader(strSQL, ref arList, false)) return false;
2568
                object[] objGetData = (object[])arList[0];
2569

    
2570
                // 取得値セット
2571
                MonthryCost = CommonMotions.cnvDouble(objGetData[0]);
2572
                YearsCost = CommonMotions.cnvDouble(objGetData[1]);
2573

    
2574
                return true;
2575
            }
2576
            catch (Exception ex)
2577
            {
2578
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2579
                return false;
2580
            }
2581
        }
2582
        #endregion
2583

    
2584
        #region 与えられたキー値より機密管理区分データを取得する
2585
        /// <summary>
2586
        /// 与えられたキー値より機密管理区分データを取得する
2587
        /// </summary>
2588
        /// <param name="KeyValue"></param>
2589
        /// <returns></returns>
2590
        public static KeyValuePair<int, string> SearchSecurityRankList(int KeyValue)
2591
        {
2592
            KeyValuePair<int, string> RetPairvalue = new KeyValuePair<int, string>(0, string.Empty);
2593
            try
2594
            {
2595
                for (int i = 0; i < CommonDefine.SecurityRankList.Count; i++)
2596
                {
2597
                    if (CommonDefine.SecurityRankList[i].Key == KeyValue)
2598
                    {
2599
                        RetPairvalue = CommonDefine.SecurityRankList[i];
2600
                    }
2601
                }
2602

    
2603
                return RetPairvalue;
2604
            }
2605
            catch (Exception ex)
2606
            {
2607
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2608
                return RetPairvalue;
2609
            }
2610
        }
2611
        #endregion
2612

    
2613
        #region 与えられたキー値より機密区分範囲データを取得する
2614
        /// <summary>
2615
        /// 与えられたキー値より機密区分範囲データを取得する
2616
        /// </summary>
2617
        /// <param name="KeyValue"></param>
2618
        /// <returns></returns>
2619
        public static KeyValuePair<int, string> SearchSecurityRangeList(int KeyValue)
2620
        {
2621
            KeyValuePair<int, string> RetPairvalue = new KeyValuePair<int, string>(0, string.Empty);
2622
            try
2623
            {
2624
                for (int i = 0; i < CommonDefine.SecurityRangeList.Count; i++)
2625
                {
2626
                    if (CommonDefine.SecurityRangeList[i].Key == KeyValue)
2627
                    {
2628
                        RetPairvalue = CommonDefine.SecurityRangeList[i];
2629
                    }
2630
                }
2631

    
2632
                return RetPairvalue;
2633
            }
2634
            catch (Exception ex)
2635
            {
2636
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2637
                return RetPairvalue;
2638
            }
2639
        }
2640
        #endregion
2641

    
2642
        #region 登録完了メッセージ表示
2643
        /// <summary>
2644
        /// 登録完了メッセージ表示
2645
        /// </summary>
2646
        /// <param name="strTitle"></param>
2647
        public static void EntryEndMessage(string strTitle)
2648
        {
2649
            try
2650
            {
2651
                string strMes = string.Format("{0} 登録完了しました。", strTitle);
2652

    
2653
                MessageBox.Show(strMes, "登録完了メッセージ", MessageBoxButtons.OK, MessageBoxIcon.Information);
2654
            }
2655
            catch (Exception ex)
2656
            {
2657
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2658
            }
2659
        }
2660
        public static void EntryEndMessage(string strTitle, string strTitle2)
2661
        {
2662
            try
2663
            {
2664
                string strMes = string.Format("{0} {1}完了しました。", strTitle, strTitle2);
2665
                string strGuidance = string.Format("{0}完了メッセージ", strTitle2);
2666

    
2667
                MessageBox.Show(strMes, strGuidance, MessageBoxButtons.OK, MessageBoxIcon.Information);
2668
            }
2669
            catch (Exception ex)
2670
            {
2671
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2672
            }
2673
        }
2674
        #endregion
2675

    
2676
        #region 削除完了メッセージ表示
2677
        /// <summary>
2678
        /// 削除完了メッセージ表示
2679
        /// </summary>
2680
        /// <param name="strTitle"></param>
2681
        public static void RemoveEndMessage(string strTitle)
2682
        {
2683
            try
2684
            {
2685
                string strMes = string.Format("{0} 削除完了しました。", strTitle);
2686

    
2687
                MessageBox.Show(strMes, "削除完了メッセージ", MessageBoxButtons.OK, MessageBoxIcon.Information);
2688
            }
2689
            catch (Exception ex)
2690
            {
2691
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2692
            }
2693
        }
2694
        #endregion
2695

    
2696
        #region 経過給与を計算する
2697
        /// <summary>
2698
        /// 経過給与を計算する
2699
        /// </summary>
2700
        /// <param name="dtStart"></param>
2701
        /// <param name="PersonCode"></param>
2702
        /// <returns></returns>
2703
        public static int CalcElapsedSalary(IOMPersonInCharge SalDB, DateTime dtStart, DateTime dtLast, int PersonCode)
2704
        {
2705
            try
2706
            {
2707
                int RetSalary = 0;
2708

    
2709
                StringBuilder strSQL = new StringBuilder();
2710
                strSQL.Append("SELECT SUM(SAL.SALARY) FROM");
2711
                strSQL.Append(" (SELECT AX.hiduke,");
2712
                //strSQL.AppendFormat(" ROUND((AX.salary * {0}) / DATE_FORMAT(LAST_DAY(AX.hiduke), '%d')) AS SALARY,", CommonDefine.s_SalaryCorrection);
2713
                strSQL.AppendFormat(" ROUND((AX.salary * {0}) / 30) AS SALARY,", CommonDefine.s_SalaryCorrection);
2714
                strSQL.Append(" MAX(AX.StartD) FROM");
2715
                strSQL.Append(" (SELECT A.d hiduke, B.MonthlySalary salary, B.STARTDATE StartD FROM");
2716

    
2717
                strSQL.Append(" (SELECT A1.years, A2.month, A3.days, DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) AS d");
2718
                strSQL.Append(" FROM yearmaster AS A1, monthmaster AS A2, daymaster AS A3");
2719

    
2720
                strSQL.Append(" WHERE");
2721
                if (dtStart.Year == dtLast.Year)
2722
                {
2723
                    strSQL.AppendFormat(" (A1.years = {0} AND A2.month IN(", dtStart.Year.ToString("0000"));
2724
                    for (int i = dtStart.Month; i <= dtLast.Month; i++)
2725
                    {
2726
                        if (i != dtStart.Month) strSQL.Append(", ");
2727
                        strSQL.AppendFormat("{0} ", i);
2728
                    }
2729
                    strSQL.Append("))");
2730
                }
2731
                else
2732
                {
2733
                    strSQL.Append(" (");
2734

    
2735
                    for (int iYear = dtStart.Year; iYear <= dtLast.Year; iYear++)
2736
                    {
2737
                        // 先頭以外はORを追加する
2738
                        if (iYear != dtStart.Year) strSQL.AppendFormat(" OR");
2739

    
2740
                        strSQL.AppendFormat(" (A1.years = {0}", iYear.ToString("0000"));
2741
                        strSQL.Append(" AND A2.month IN (");
2742

    
2743
                        if (iYear == dtStart.Year)
2744
                        {   // 先頭年
2745
                            for (int i = dtStart.Month; i <= 12; i++)
2746
                            {
2747
                                if (i != dtStart.Month) strSQL.Append(", ");
2748
                                strSQL.AppendFormat("{0} ", i);
2749
                            }
2750
                        }
2751
                        else if (iYear == dtLast.Year)
2752
                        {   // 最終年
2753
                            for (int i = 1; i <= dtLast.Month; i++)
2754
                            {
2755
                                if (i != 1) strSQL.Append(", ");
2756
                                strSQL.AppendFormat("{0} ", i);
2757
                            }
2758
                        }
2759
                        else 
2760
                        {   // 以外の年
2761
                            for (int i = 1; i <= 12; i++)
2762
                            {
2763
                                if (i != 1) strSQL.Append(", ");
2764
                                strSQL.AppendFormat("{0} ", i);
2765
                            }
2766
                        }
2767
                        strSQL.Append("))");
2768
                    }
2769
                    strSQL.Append(")");
2770
                }
2771

    
2772
                strSQL.Append(" AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) IS NOT NULL");
2773
                strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days))", dtStart.ToShortDateString());
2774
                strSQL.AppendFormat(" AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) <= DATE('{0}'))", dtLast.ToShortDateString());
2775
                strSQL.Append(" ORDER BY d) A");
2776
                strSQL.Append(", PERSONSALARYMASTER AS B");
2777
                strSQL.AppendFormat(" WHERE B.PERSONCODE = {0}", PersonCode);
2778
                strSQL.Append("       AND B.STARTDATE <= A.d");
2779
                strSQL.Append(" ORDER BY A.d, B.STARTDATE DESC) AS AX");
2780
                strSQL.Append(" GROUP BY AX.hiduke");
2781
                strSQL.Append(" ORDER BY AX.hiduke");
2782
                strSQL.Append(" ) AS SAL");
2783

    
2784
                ArrayList ArData = new ArrayList();
2785
                if(!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return 0;
2786

    
2787
                foreach (object[] objRec in ArData)
2788
                {
2789
                    RetSalary += CommonMotions.cnvInt(objRec[0]);
2790
                }
2791

    
2792
                return RetSalary;
2793
            }
2794
            catch (Exception ex)
2795
            {
2796
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2797
                return 0;
2798
            }
2799
        }
2800
        #endregion
2801

    
2802
        #region 期間より零れた経過給与を取得する
2803
        /// <summary>
2804
        /// 期間より零れた経過給与を取得する
2805
        /// </summary>
2806
        /// <returns></returns>
2807
        public static void CalcSpilledSalary(IOMPersonInCharge SalDB
2808
                                            , int TargetYear, DateTime dtStart, DateTime dtLast
2809
                                            , int PersonCode
2810
                                            , ref int NextDiffDay
2811
                                            , ref int PrevDiffDay)
2812
        {
2813
            try
2814
            {
2815

    
2816
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(TargetYear, true);
2817
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(TargetYear, false);
2818

    
2819
                StringBuilder strSQL = new StringBuilder();
2820
                strSQL.Append("Select");
2821
                strSQL.Append(" Base.ConstructionCode");
2822
                strSQL.Append(", Ledger.ConstructionStart");
2823
                strSQL.Append(", Ledger.ConstructionEnd");
2824
                strSQL.Append(", LDetail.GroupCount");
2825
                strSQL.Append(", LDetail.SalaryFlg");
2826
                strSQL.Append(", LDetail.SalaryDays");
2827
                strSQL.Append(" From");
2828
                strSQL.Append(" constructionbaseinfo As Base");
2829
                strSQL.Append(" Inner Join constructionledger As Ledger");
2830
                strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
2831
                strSQL.AppendFormat("  And DATE('{0}') <= DATE(Ledger.ConstructionEnd)", dtDefaultStart.ToShortDateString());
2832
                strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
2833
                strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
2834
                strSQL.AppendFormat(" And LDetail.GroupCount = {0}", (int)FrmConstructionLedger.DataGroup.Payroll);
2835
                strSQL.AppendFormat(" And LDetail.CompanyCode = {0}", PersonCode);
2836
                strSQL.AppendFormat(" And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
2837
                strSQL.Append(" Where");
2838
                strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", TargetYear);
2839
                strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", PersonCode);
2840
                strSQL.Append(" And(");
2841
                strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", dtLast.ToShortDateString());
2842
                strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtDefaultEnd.ToShortDateString());
2843
                strSQL.Append(")");
2844

    
2845
                ArrayList ArData = new ArrayList();
2846
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return;
2847

    
2848
                // 半端分の日数を取得する
2849
                NextDiffDay = ArData.Cast<object[]>().Sum(x => CommonMotions.cnvInt(x[5]));
2850

    
2851
                // 先期の半端分の日数を取得する
2852
                PrevDiffDay = CalcSpilledPreviusDay(SalDB, TargetYear, dtStart, PersonCode);
2853

    
2854
            }
2855
            catch (Exception ex)
2856
            {
2857
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2858
            }
2859
        }
2860
        #endregion
2861

    
2862
        #region 先期の終了後零れた日数を取得する
2863
        /// <summary>
2864
        /// 先期の終了後零れた日数を取得する
2865
        /// </summary>
2866
        /// <returns></returns>
2867
        private static int CalcSpilledPreviusDay(IOMPersonInCharge SalDB
2868
                                            , int TargetYear, DateTime dtStart, int PersonCode)
2869
        {
2870
            try
2871
            {
2872
                int RetDay = 0;
2873

    
2874
                // 先期の期末を取得する
2875
                int PrevTargetYear = (TargetYear - 1);
2876
                if (PrevTargetYear < 1) return 0;
2877
                DateTime dtPrevEnd = CommonMotions.GetOpeningEndDate((TargetYear - 1), false);
2878

    
2879
                // 今期の最初が先期の最後より大きい場合は処理しない
2880
                if (dtPrevEnd< dtStart) return 0;
2881

    
2882
                StringBuilder strSQL = new StringBuilder();
2883
                strSQL.Append("Select");
2884
                strSQL.Append(" Base.ConstructionCode");
2885
                strSQL.Append(", Ledger.ConstructionStart");
2886
                strSQL.Append(", Ledger.ConstructionEnd");
2887
                strSQL.Append(", LDetail.GroupCount");
2888
                strSQL.Append(", LDetail.SalaryFlg");
2889
                strSQL.Append(", LDetail.SalaryDays");
2890
                strSQL.Append(" From");
2891
                strSQL.Append(" constructionbaseinfo As Base");
2892
                strSQL.Append(" Inner Join constructionledger As Ledger");
2893
                strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
2894
                strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
2895
                strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
2896
                strSQL.AppendFormat(" And LDetail.GroupCount = {0}", (int)FrmConstructionLedger.DataGroup.Payroll);
2897
                strSQL.AppendFormat(" And LDetail.CompanyCode = {0}", PersonCode);
2898
                strSQL.AppendFormat(" And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
2899
                strSQL.Append(" Where");
2900
                strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", PrevTargetYear);
2901
                strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", PersonCode);
2902
                strSQL.Append(" And(");
2903
                strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", (dtStart.AddDays(-1)).ToShortDateString());
2904
                strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtPrevEnd.ToShortDateString());
2905
                strSQL.Append(")");
2906

    
2907
                ArrayList ArData = new ArrayList();
2908
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return 0;
2909

    
2910
                // 半端分の日数を取得する
2911
                RetDay = ArData.Cast<object[]>().Sum(x => CommonMotions.cnvInt(x[5]));
2912

    
2913
                return RetDay;
2914
            }
2915
            catch (Exception ex)
2916
            {
2917
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2918
                return 0;
2919
            }
2920
        }
2921
        #endregion
2922

    
2923
        #region 経過給与を一括計算する
2924
        /// <summary>
2925
        /// 経過給与を一括計算する
2926
        /// </summary>
2927
        /// <param name="dtStart"></param>
2928
        /// <param name="PersonCode"></param>
2929
        /// <returns></returns>
2930
        public static void CalcElapsedSalaryAll(IOMPersonInCharge SalDB, ArrayList TargetList, ref List<KeyValuePair<int, long>> SalDataList)
2931
        {
2932
            try
2933
            {
2934

    
2935
                StringBuilder strSQL = new StringBuilder();
2936

    
2937
                bool bFirst = true;
2938
                foreach (object[] ObjRec in TargetList)
2939
                {
2940
                    int PersonCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.PersonCode]);
2941
                    DateTime dtStart = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.StartDate]);
2942
                    DateTime dtLast = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.CompDate]);
2943

    
2944
                    if (!bFirst) strSQL.Append(" UNION ");
2945

    
2946
                    strSQL.AppendFormat("SELECT {0} As LinkKey, SUM(SAL{0}.SALARY) FROM", PersonCode);
2947

    
2948
                    strSQL.Append(" (SELECT AX.hiduke,");
2949
                    //strSQL.AppendFormat(" ROUND((AX.salary * {0}) / DATE_FORMAT(LAST_DAY(AX.hiduke), '%d')) AS SALARY,", CommonDefine.s_SalaryCorrection);
2950
                    strSQL.AppendFormat(" ROUND((AX.salary * {0}) / 30) AS SALARY,", CommonDefine.s_SalaryCorrection);
2951
                    strSQL.Append(" MAX(AX.StartD) FROM");
2952
                    strSQL.Append(" (SELECT A.d hiduke, B.MonthlySalary salary, B.STARTDATE StartD FROM");
2953

    
2954
                    strSQL.Append(" (SELECT A1.years, A2.month, A3.days, DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) AS d");
2955
                    strSQL.Append(" FROM yearmaster AS A1, monthmaster AS A2, daymaster AS A3");
2956

    
2957
                    strSQL.Append(" WHERE");
2958
                    if (dtStart.Year == dtLast.Year)
2959
                    {
2960
                        strSQL.AppendFormat(" (A1.years = {0} AND A2.month IN(", dtStart.Year.ToString("0000"));
2961
                        for (int i = dtStart.Month; i <= dtLast.Month; i++)
2962
                        {
2963
                            if (i != dtStart.Month) strSQL.Append(", ");
2964
                            strSQL.AppendFormat("{0} ", i);
2965
                        }
2966
                        strSQL.Append("))");
2967
                    }
2968
                    else
2969
                    {
2970
                        strSQL.Append(" (");
2971

    
2972
                        for (int iYear = dtStart.Year; iYear <= dtLast.Year; iYear++)
2973
                        {
2974
                            // 先頭以外はORを追加する
2975
                            if (iYear != dtStart.Year) strSQL.AppendFormat(" OR");
2976

    
2977
                            strSQL.AppendFormat(" (A1.years = {0}", iYear.ToString("0000"));
2978
                            strSQL.Append(" AND A2.month IN (");
2979

    
2980
                            if (iYear == dtStart.Year)
2981
                            {   // 先頭年
2982
                                for (int i = dtStart.Month; i <= 12; i++)
2983
                                {
2984
                                    if (i != dtStart.Month) strSQL.Append(", ");
2985
                                    strSQL.AppendFormat("{0} ", i);
2986
                                }
2987
                            }
2988
                            else if (iYear == dtLast.Year)
2989
                            {   // 最終年
2990
                                for (int i = 1; i <= dtLast.Month; i++)
2991
                                {
2992
                                    if (i != 1) strSQL.Append(", ");
2993
                                    strSQL.AppendFormat("{0} ", i);
2994
                                }
2995
                            }
2996
                            else
2997
                            {   // 以外の年
2998
                                for (int i = 1; i <= 12; i++)
2999
                                {
3000
                                    if (i != 1) strSQL.Append(", ");
3001
                                    strSQL.AppendFormat("{0} ", i);
3002
                                }
3003
                            }
3004
                            strSQL.Append("))");
3005
                        }
3006
                        strSQL.Append(")");
3007
                    }
3008

    
3009
                    strSQL.Append(" AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) IS NOT NULL");
3010
                    strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days))", dtStart.ToShortDateString());
3011
                    strSQL.AppendFormat(" AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) <= DATE('{0}'))", dtLast.ToShortDateString());
3012
                    strSQL.Append(" ORDER BY d) A");
3013
                    strSQL.Append(", PERSONSALARYMASTER AS B");
3014
                    strSQL.AppendFormat(" WHERE B.PERSONCODE = {0}", PersonCode);
3015
                    strSQL.Append("       AND B.STARTDATE <= A.d");
3016
                    strSQL.Append(" ORDER BY A.d, B.STARTDATE DESC) AS AX");
3017
                    strSQL.Append(" GROUP BY AX.hiduke");
3018
                    strSQL.Append(" ORDER BY AX.hiduke");
3019
                    strSQL.AppendFormat(" ) AS SAL{0}", PersonCode);
3020

    
3021
                    bFirst = false;
3022
                }
3023

    
3024
                ArrayList ArData = new ArrayList();
3025
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return;
3026

    
3027
                foreach (object[] objRec in ArData)
3028
                {
3029
                    SalDataList.Add(new KeyValuePair<int, long>(CommonMotions.cnvInt(objRec[0]), CommonMotions.cnvLong(objRec[1])));
3030
                }
3031

    
3032
            }
3033
            catch (Exception ex)
3034
            {
3035
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3036
            }
3037
        }
3038
        #endregion
3039

    
3040
        #region 期間より零れた経過給与を取得しデータテーブルの開始終了日を変更する
3041
        /// <summary>
3042
        /// 期間より零れた経過給与を取得しデータテーブルの開始終了日を変更する
3043
        /// </summary>
3044
        /// <returns></returns>
3045
        public static void CalcSpilledSalaryAll(IOMPersonInCharge SalDB
3046
                                            , int TargetYear
3047
                                            , ref ArrayList TargetList)
3048
        {
3049
            try
3050
            {
3051
                // デフォルト開始・終了を取得する
3052
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(TargetYear, true);
3053
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(TargetYear, false);
3054
                DateTime dtPrevEnd = CommonMotions.GetOpeningEndDate((TargetYear - 1), false);
3055

    
3056
                // 先期の期末を取得する
3057
                int PrevTargetYear = (TargetYear - 1);
3058
                if (PrevTargetYear < 1) return;
3059

    
3060
                List<KeyValuePair<DateTime, DateTime>> wrkStEdDate = new List<KeyValuePair<DateTime, DateTime>>();
3061
                bool bFirst = true;
3062
                StringBuilder strSQL = new StringBuilder();
3063
                foreach (object[] ObjRec in TargetList)
3064
                {
3065
                    // 開始・終了日が無い場合はデフォルトの期首・期末を使用する
3066
                    DateTime stDate = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.StartDate]);
3067
                    DateTime edDate = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.CompDate]);
3068
                    CalcStartCompDate(TargetYear,
3069
                                        dtDefaultStart, dtDefaultEnd,
3070
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.HireStartDays]),
3071
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.HireCompDays]),
3072
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.NextStartDate]),
3073
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.NextCompDate]),
3074
                                        ref stDate, ref edDate);
3075

    
3076
                    int nPersonCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.PersonCode]);
3077
                    wrkStEdDate.Add(new KeyValuePair<DateTime, DateTime>(stDate, edDate));
3078

    
3079
                    // 今期の最初が先期の最後より大きい場合は処理しない
3080
                    //if (dtPrevEnd < stDate) continue;
3081

    
3082
                    if (!bFirst) strSQL.Append(" Union ");
3083

    
3084
                    strSQL.Append("Select");
3085
                    strSQL.Append(" Base.ConstructionPeriod");
3086
                    strSQL.Append(", Base.ConstructionCode");
3087
                    strSQL.Append(", Base.ConstructionPersonCode");
3088
                    strSQL.Append(", Ledger.ConstructionStart");
3089
                    strSQL.Append(", Ledger.ConstructionEnd");
3090
                    strSQL.Append(", LDetail.GroupCount");
3091
                    strSQL.Append(", LDetail.SalaryFlg");
3092
                    strSQL.Append(", LDetail.SalaryDays");
3093
                    strSQL.Append(" From");
3094
                    strSQL.Append(" constructionbaseinfo As Base");
3095
                    strSQL.Append(" Inner Join constructionledger As Ledger");
3096
                    strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
3097
                    strSQL.AppendFormat("  And DATE('{0}') <= DATE(Ledger.ConstructionEnd)", dtDefaultStart.ToShortDateString());
3098
                    strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
3099
                    strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
3100
                    strSQL.AppendFormat(" And LDetail.GroupCount = {0}", (int)FrmConstructionLedger.DataGroup.Payroll);
3101
                    strSQL.AppendFormat(" And LDetail.CompanyCode = {0}", nPersonCode);
3102
                    strSQL.AppendFormat(" And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
3103
                    strSQL.Append(" Where");
3104
                    strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", TargetYear);
3105
                    strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", nPersonCode);
3106
                    strSQL.Append(" And(");
3107
                    strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", edDate.ToShortDateString());
3108
                    strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtDefaultEnd.ToShortDateString());
3109
                    strSQL.Append(")");
3110
                    strSQL.Append(" Union Select");
3111
                    strSQL.Append(" Base.ConstructionPeriod");
3112
                    strSQL.Append(", Base.ConstructionCode");
3113
                    strSQL.Append(", Base.ConstructionPersonCode");
3114
                    strSQL.Append(", Ledger.ConstructionStart");
3115
                    strSQL.Append(", Ledger.ConstructionEnd");
3116
                    strSQL.Append(", LDetail.GroupCount");
3117
                    strSQL.Append(", LDetail.SalaryFlg");
3118
                    strSQL.Append(", LDetail.SalaryDays");
3119
                    strSQL.Append(" From");
3120
                    strSQL.Append(" constructionbaseinfo As Base");
3121
                    strSQL.Append(" Inner Join constructionledger As Ledger");
3122
                    strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
3123
                    strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
3124
                    strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
3125
                    strSQL.AppendFormat(" And LDetail.GroupCount = {0}", (int)FrmConstructionLedger.DataGroup.Payroll);
3126
                    strSQL.AppendFormat(" And LDetail.CompanyCode = {0}", nPersonCode);
3127
                    strSQL.AppendFormat(" And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
3128
                    strSQL.Append(" Where");
3129
                    strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", PrevTargetYear);
3130
                    strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", nPersonCode);
3131
                    strSQL.Append(" And(");
3132
                    strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", (stDate.AddDays(-1)).ToShortDateString());
3133
                    strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtPrevEnd.ToShortDateString());
3134
                    strSQL.Append(")");
3135

    
3136
                    bFirst = false;
3137
                }
3138
                // データ取得
3139
                ArrayList ArData = new ArrayList();
3140
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return;
3141

    
3142
                int DateCnt = 0;
3143
                foreach (object[] ObjRec in TargetList)
3144
                {
3145
                    int nPersonCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.PersonCode]);
3146

    
3147
                    // 半端分の日数を取得する
3148
                    int NextDiffDay = ArData.Cast<object[]>().Where(x => CommonMotions.cnvInt(x[0]) == TargetYear
3149
                                                                    && CommonMotions.cnvInt(x[2]) == nPersonCode)
3150
                                                            .Sum(y => CommonMotions.cnvInt(y[7]));
3151

    
3152
                    // 先期の半端分の日数を取得する
3153
                    int PrevDiffDay = ArData.Cast<object[]>().Where(x => CommonMotions.cnvInt(x[0]) == PrevTargetYear
3154
                                                                    && CommonMotions.cnvInt(x[2]) == nPersonCode)
3155
                                                            .Sum(y => CommonMotions.cnvInt(y[7]));
3156

    
3157
                    KeyValuePair<DateTime, DateTime> CurStEd = wrkStEdDate[DateCnt++];
3158
                    // 今期終了日変更
3159
                    DateTime wrkDate = CurStEd.Value.AddDays(NextDiffDay);
3160
                    if (dtDefaultEnd.Date < wrkDate.Date) wrkDate = dtDefaultEnd;
3161
                    ObjRec[(int)CommonLedgerData.GetPersonTerm.CompDate] = wrkDate;
3162
                    // 今期開始日変更
3163
                    wrkDate = CurStEd.Key.AddDays(PrevDiffDay);
3164
                    if (dtDefaultEnd.Date < wrkDate.Date) wrkDate = dtDefaultEnd;
3165
                    ObjRec[(int)CommonLedgerData.GetPersonTerm.StartDate] = wrkDate;
3166
                }
3167

    
3168
            }
3169
            catch (Exception ex)
3170
            {
3171
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3172
            }
3173
        }
3174
        #endregion
3175

    
3176
        #region 計算開始・終了日のチェック入れ替え
3177
        /// <summary>
3178
        /// 計算開始・終了日のチェック入れ替え
3179
        /// </summary>
3180
        public static void CalcStartCompDate(int BusinessPeriod,
3181
                                        DateTime dtDefaultStart, DateTime dtDefaultEnd,
3182
                                        DateTime HireStartDate, DateTime HireCompDate,
3183
                                        DateTime NextStartDate, DateTime NextCompDate,
3184
                                        ref DateTime StartDate, ref DateTime CompDate)
3185
        {
3186
            try
3187
            {
3188
                // ----- 計算開始日セット
3189
                if (StartDate == DateTime.MinValue)
3190
                {
3191
                    StartDate = dtDefaultStart;
3192
                }
3193
                else if (dtDefaultStart <= HireStartDate && HireStartDate <= dtDefaultEnd)
3194
                {
3195
                    StartDate = HireStartDate;
3196
                }
3197
                else if (dtDefaultStart < StartDate)
3198
                {
3199
                    StartDate = dtDefaultStart;
3200
                }
3201
                // 入社日が期内ならば開始を入社日にする
3202
                if (dtDefaultStart < HireStartDate && HireStartDate < dtDefaultEnd) StartDate = HireStartDate;
3203

    
3204
                // ----- 計算終了日セット
3205
                // Defaultは期末
3206
                CompDate = dtDefaultEnd;
3207

    
3208
                // 退社日が期内ならば終了を退社日にする
3209
                if (dtDefaultStart < HireCompDate && HireCompDate < dtDefaultEnd) CompDate = HireCompDate;
3210

    
3211
                // 来季の開始があって期末日より小さい場合は置き換える
3212
                if (NextStartDate != DateTime.MinValue)
3213
                {
3214
                    if (StartDate < NextStartDate && NextStartDate < CompDate) CompDate = NextStartDate.AddDays(-1);
3215
                }
3216
            }
3217
            catch (Exception ex)
3218
            {
3219
                logger.ErrorFormat("システムエラー:{0}", ex.Message);
3220
            }
3221
        }
3222
        #endregion
3223

    
3224
        #region グリッド行退避エリア初期化処理
3225
        /// <summary>
3226
        /// グリッド行退避エリア初期化処理
3227
        /// </summary>
3228
        public static void InitSavrGridRow(ref GridCellStyleMember[] BackUpStyle)
3229
        {
3230
            try
3231
            {
3232
                for (int i = 0; i < BackUpStyle.Length; i++)
3233
                {
3234
                    BackUpStyle[i] = new GridCellStyleMember();
3235
                }
3236
            }
3237
            catch (Exception ex)
3238
            {
3239
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3240
            }
3241
        }
3242
        #endregion
3243

    
3244
        #region 選択行の色を変更する
3245
        /// <summary>
3246
        /// 選択行の色を変更する
3247
        /// </summary>
3248
        public static void ChangeGridRow(DataGridView dgv
3249
                                        , DataGridViewRow CurRow
3250
                                        , ref GridCellStyleMember[] BackUpStyle
3251
                                        , bool bSelect = true)
3252
        {
3253
            try
3254
            {
3255
                // カレント行バックアップ&対象色セット
3256
                for (int i = 0; i < dgv.ColumnCount; i++)
3257
                {
3258
                    if (bSelect)
3259
                    {
3260
                        BackUpStyle[i].DrowBackColor = CurRow.Cells[i].Style.BackColor;
3261
                        BackUpStyle[i].DrowFont = CurRow.Cells[i].Style.Font;
3262
                        BackUpStyle[i].DrowForeColor = CurRow.Cells[i].Style.ForeColor;
3263
                        CurRow.Cells[i].Style.BackColor = Color.Red;
3264
                        CurRow.Cells[i].Style.ForeColor = Color.White;
3265
                    }
3266
                    else
3267
                    {
3268
                        CurRow.Cells[i].Style.BackColor = BackUpStyle[i].DrowBackColor;
3269
                        CurRow.Cells[i].Style.Font = BackUpStyle[i].DrowFont;
3270
                        CurRow.Cells[i].Style.ForeColor = BackUpStyle[i].DrowForeColor;
3271
                    }
3272
                }
3273
            }
3274
            catch (Exception ex)
3275
            {
3276
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3277
            }
3278
        }
3279
        #endregion
3280

    
3281
        #region フォームのコントロールを列挙する
3282
        /// <summary>
3283
        /// フォームのコントロールを列挙する
3284
        /// </summary>
3285
        /// <returns></returns>
3286
        public static Control[] GetAllControls(Control top)
3287
        {
3288
            ArrayList buf = new ArrayList();
3289
            foreach (Control c in top.Controls)
3290
            {
3291
                buf.Add(c);
3292
                buf.AddRange(GetAllControls(c));
3293
            }
3294
            return (Control[])buf.ToArray(typeof(Control));
3295
        }
3296
        #endregion
3297

    
3298
        #region 今期の判定を行う
3299
        /// <summary>
3300
        /// 今期の判定を行う
3301
        /// </summary>
3302
        /// <returns></returns>
3303
        public static bool CheckNowSeason(int nTarget)
3304
        {
3305
            try
3306
            {
3307
                if (m_systemMaster.ConstructionNoBase == (int)SystemMaster.ConstrNoBaseDef.BusinessPeriod)
3308
                {   // 営業期数
3309
                    if (nTarget != m_systemMaster.BusinessPeriod) return false;
3310
                }
3311
                else
3312
                {   // 工事年度
3313
                    if (nTarget != m_systemMaster.ConstrYear) return false;
3314
                }
3315
                return true;
3316
            }
3317
            catch (Exception ex)
3318
            {
3319
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3320
                return false;
3321
            }
3322
        }
3323
        #endregion
3324

    
3325
        #region 部署コンボボックスデータ取得SQL作成
3326
        /// <summary>
3327
        /// 部署コンボボックスデータ取得SQL作成
3328
        /// </summary>
3329
        /// <param name="strSQL"></param>
3330
        public static void CreateDepCombBoxSQL(ref StringBuilder strSQL, int nTargetCount, bool bInput = false)
3331
        {
3332
            try
3333
            {
3334
                // 今期のデータかどうかを判定する
3335
                bool bNowSeason = CheckNowSeason(nTargetCount);
3336

    
3337
                strSQL.Append("SELECT");
3338
                strSQL.Append(" A.DEPARTMENTCODE");
3339
                strSQL.Append(", A.DEPARTMENTSTRING");
3340
                strSQL.Append(", A.DISPLAYORDER");
3341
                strSQL.Append(", COUNT(*)");
3342
                strSQL.Append(" FROM");
3343
                if (bNowSeason)
3344
                {
3345
                    // 今期のプライマリテーブルは部署マスタ
3346
                    strSQL.Append(" DEPARTMENTMASTER A");
3347
                }
3348
                else
3349
                {   // 過去のデータは工事情報より取得する
3350
                    strSQL.Append(" (");
3351
                    strSQL.Append("Select");
3352
                    strSQL.Append(" A1.SalesDepCode As DEPARTMENTCODE");
3353
                    strSQL.Append(", B1.DetailString As DEPARTMENTSTRING");
3354
                    strSQL.Append(", ifnull(C1.DisplayOrder, 10) As DISPLAYORDER");
3355
                    strSQL.Append(" From Constructionbaseinfo As A1");
3356
                    strSQL.Append("  Inner Join constructionbaseinfodetail As B1");
3357
                    strSQL.Append("        On B1.ConstructionCode = A1.ConstructionCode");
3358
                    strSQL.AppendFormat("  And B1.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.SalesDepartmentName);
3359
                    strSQL.Append("  Left Join departmentmaster As C1");
3360
                    strSQL.Append("       On C1.DepartmentCode = A1.SalesDepCode");
3361
                    strSQL.AppendFormat(" Where A1.ConstructionPeriod = {0}", nTargetCount);
3362
                    strSQL.Append("       And A1.SalesDepCode != 0");
3363

    
3364
                    strSQL.Append(" Union Select");
3365
                    strSQL.Append(" A2.ConstrDepCode As DEPARTMENTCODE");
3366
                    strSQL.Append(", B2.DetailString As DEPARTMENTSTRING");
3367
                    strSQL.Append(", ifnull(C2.DisplayOrder, 10) As DISPLAYORDER");
3368
                    strSQL.Append(" From Constructionbaseinfo As A2");
3369
                    strSQL.Append(" Inner Join constructionbaseinfodetail As B2");
3370
                    strSQL.Append("       On B2.ConstructionCode = A2.ConstructionCode");
3371
                    strSQL.AppendFormat(" And B2.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.ConstrDepartmentName);
3372
                    strSQL.Append(" Left Join departmentmaster As C2");
3373
                    strSQL.Append("      On C2.DepartmentCode = A2.ConstrDepCode");
3374
                    strSQL.AppendFormat(" Where A2.ConstructionPeriod = {0}", nTargetCount);
3375
                    strSQL.Append("       And A2.ConstrDepCode != 0");
3376

    
3377
                    strSQL.Append(" Union Select");
3378
                    strSQL.Append(" A3.ConstrSubDepCode As DEPARTMENTCODE");
3379
                    strSQL.Append(", B3.DetailString As DEPARTMENTSTRING");
3380
                    strSQL.Append(", ifnull(C3.DisplayOrder, 10) As DISPLAYORDER");
3381
                    strSQL.Append(" From Constructionbaseinfo As A3");
3382
                    strSQL.Append(" Inner Join constructionbaseinfodetail As B3");
3383
                    strSQL.Append("       On B3.ConstructionCode = A3.ConstructionCode");
3384
                    strSQL.AppendFormat(" And B3.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.ConstrSubDepartmentName);
3385
                    strSQL.Append(" Left Join departmentmaster As C3");
3386
                    strSQL.Append("      On C3.DepartmentCode = A3.ConstrSubDepCode");
3387
                    strSQL.AppendFormat(" Where A3.ConstructionPeriod = {0}", nTargetCount);
3388
                    strSQL.Append("       And A3.ConstrSubDepCode != 0");
3389

    
3390
                    strSQL.Append(" Union Select");
3391
                    strSQL.Append(" A4.ConstrInstrDepCode As DEPARTMENTCODE");
3392
                    strSQL.Append(", B4.DetailString As DEPARTMENTSTRING");
3393
                    strSQL.Append(", ifnull(C4.DisplayOrder, 10) As DISPLAYORDER");
3394
                    strSQL.Append(" From Constructionbaseinfo As A4");
3395
                    strSQL.Append(" Inner Join constructionbaseinfodetail As B4");
3396
                    strSQL.Append("       On B4.ConstructionCode = A4.ConstructionCode");
3397
                    strSQL.AppendFormat(" And B4.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.InstrDepartmentName);
3398
                    strSQL.Append(" Left Join departmentmaster As C4");
3399
                    strSQL.Append("      On C4.DepartmentCode = A4.ConstrInstrDepCode");
3400
                    strSQL.AppendFormat(" Where A4.ConstructionPeriod = {0}", nTargetCount);
3401
                    strSQL.Append("       And A4.ConstrInstrDepCode != 0");
3402
                    strSQL.Append(") As A");
3403
                }
3404

    
3405
                if (bNowSeason)
3406
                {   // 対象が今期の場合
3407
                    if (!bInput) strSQL.Append(", CONSTRUCTIONBASEINFO C");
3408
                    strSQL.Append(" WHERE");
3409

    
3410
                    // 削除されていないもの
3411
                    strSQL.Append(" A.DELETEFLG = 0");
3412
                    DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(nTargetCount, false);
3413

    
3414
                    strSQL.AppendFormat(" And DATE(A.StartDate) <= DATE('{0}')", dtDefaultEnd.ToShortDateString());
3415
                    if (!bInput) strSQL.Append(" And C.ConstrDepCode = A.DepartmentCode");
3416

    
3417
                    // システム管理者以外は部署参照マスタよりデータ取得
3418
                    if (CommonMotions.LoginUserData.PersonCode != CommonDefine.AdminCode)
3419
                    {
3420
                        // 参照部署マスタより取得する
3421
                        strSQL.Append(" And A.DEPARTMENTCODE");
3422
                        strSQL.Append(" IN (SELECT A1.DEPARTMENTCODE FROM PERSONDEPARTMENTMASTER A1");
3423
                        strSQL.AppendFormat(" WHERE A1.PERSONCODE = {0})", CommonMotions.LoginUserData.PersonCode);
3424
                    }
3425
                }
3426
                else
3427
                {   // 対象が過去の場合
3428
                    strSQL.Append(", CONSTRUCTIONBASEINFO C");
3429
                    strSQL.Append(" WHERE");
3430

    
3431
                    strSQL.AppendFormat(" (C.ConstructionPeriod = {0}", nTargetCount);
3432
                    strSQL.Append(" And A.DepartmentCode IN(C.SalesDepCode, C.ConstrDepCode, C.ConstrSubDepCode, C.ConstrInstrDepCode))");
3433
                }
3434
                strSQL.Append(" GROUP BY A.DEPARTMENTCODE, A.DEPARTMENTSTRING, A.DISPLAYORDER");
3435
                strSQL.Append(" ORDER BY A.DISPLAYORDER ASC");
3436
            }
3437
            catch (Exception ex)
3438
            {
3439
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3440
            }
3441
        }
3442
        #endregion
3443

    
3444
        #region 担当者コンボボックスデータ取得SQL作成
3445
        /// <summary>
3446
        /// 担当者コンボボックスデータ取得SQL作成
3447
        /// </summary>
3448
        /// <param name="strSQL"></param>
3449
        /// <param name="nTargetYear"></param>
3450
        public static void CreateManCombBoxSQL(ref StringBuilder strSQL, int nTargetYear, int nDepCode = 0, int nLEDGERFLG = -1)
3451
        {
3452
            try
3453
            {
3454
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(nTargetYear, true);
3455
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(nTargetYear, false);
3456

    
3457
                strSQL.Append("Select A.* From");
3458
                strSQL.Append(" personinchargemaster As A");
3459
                strSQL.Append(" Left Join chgchargedep As B");
3460
                strSQL.Append("       On B.PersonCode = A.PersonCode");
3461

    
3462
                strSQL.AppendFormat(" WHERE ((DATE(A.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
3463
                strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(A.ENDDATE)", dtDefaultStart.ToShortDateString());
3464
                strSQL.AppendFormat(" OR DATE('{0}') = DATE(A.ENDDATE)))", DateTime.MinValue.ToShortDateString());
3465
                strSQL.AppendFormat(" AND ((DATE(B.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
3466
                strSQL.AppendFormat(" AND(DATE('{0}') <= DATE(B.CompDate)", dtDefaultStart.ToShortDateString());
3467
                strSQL.AppendFormat(" OR DATE('{0}') = DATE(B.CompDate)))", DateTime.MinValue.ToShortDateString());
3468

    
3469
                if (nDepCode != 0) strSQL.AppendFormat(" AND (B.DEPARTMENTCODE = {0})", nDepCode);
3470

    
3471
                if (nLEDGERFLG == -1) strSQL.AppendFormat(" AND A.LEDGERFLG = {0}", (int)PersonInChargeMaster.LedgerDivNoDef.CalcTarget);
3472
                else if (nLEDGERFLG > -1) strSQL.AppendFormat(" AND A.LEDGERFLG = {0}", nLEDGERFLG);
3473

    
3474
                // 今期のデータかどうかを判定する
3475
                string FieldName = string.Empty;
3476
                if (CommonMotions.SystemMasterData.ConstructionNoBase == (int)SystemMaster.ConstrNoBaseDef.BusinessPeriod)
3477
                {
3478
                    FieldName = "ConstructionPeriod";
3479
                }
3480
                else
3481
                {
3482
                    FieldName = "ConstructionYear";
3483
                }
3484
                if (!CheckNowSeason(nTargetYear))
3485
                {
3486
                    strSQL.Append(" AND B.DepartmentCode IN(SELECT InDep.DEPARTMENTCODE FROM (");
3487
                    strSQL.Append(" Select A1.SalesDepCode As DEPARTMENTCODE From Constructionbaseinfo As A1");
3488
                    strSQL.AppendFormat(" Where A1.{0} = {1}", FieldName, nTargetYear);
3489
                    strSQL.Append(" Union Select A2.ConstrDepCode As DEPARTMENTCODE From Constructionbaseinfo As A2");
3490
                    strSQL.AppendFormat(" Where A2.{0} = {1}", FieldName, nTargetYear);
3491
                    strSQL.Append(" Union Select A3.ConstrSubDepCode As DEPARTMENTCODE From Constructionbaseinfo As A3");
3492
                    strSQL.AppendFormat(" Where A3.{0} = {1}", FieldName, nTargetYear);
3493
                    strSQL.Append(" Union Select A4.ConstrInstrDepCode As DEPARTMENTCODE From Constructionbaseinfo As A4");
3494
                    strSQL.AppendFormat(" Where A4.{0} = {1}", FieldName, nTargetYear);
3495
                    strSQL.Append(" ) As InDep");
3496
                    strSQL.Append(" GROUP BY InDep.DEPARTMENTCODE) ");
3497
                }
3498

    
3499
                strSQL.Append(" Order By A.DeleteFlg ASC, A.EmployeeClassFlg ASC, A.DisplayOrder ASC");
3500
            }
3501
            catch (Exception ex)
3502
            {
3503
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3504
            }
3505
        }
3506
        #endregion
3507

    
3508
        #region 担当者より指定年度の部署を取得するSQL作成
3509
        /// <summary>
3510
        /// 担当者より指定年度の部署を取得するSQL作成
3511
        /// </summary>
3512
        public static void CreateMan2DepSQL(ref StringBuilder strSQL, int nTargetYear, int nPersonCode)
3513
        {
3514
            try
3515
            {
3516
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(nTargetYear, true);
3517
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(nTargetYear, false);
3518

    
3519
                strSQL.Append("Select");
3520
                strSQL.Append(" A.PersonCode");
3521
                strSQL.Append(", A.PersonName");
3522
                strSQL.Append(", B.DepartmentCode");
3523
                strSQL.Append(", B.DepartmentName");
3524
                strSQL.Append(" From");
3525
                strSQL.Append(" personinchargemaster As A");
3526
                strSQL.Append(" Left Join chgchargedep As B");
3527
                strSQL.Append("       On B.PersonCode = A.PersonCode");
3528

    
3529
                strSQL.AppendFormat(" WHERE ((DATE(A.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
3530
                strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(A.ENDDATE)", dtDefaultStart.ToShortDateString());
3531
                strSQL.AppendFormat(" OR DATE('{0}') = DATE(A.ENDDATE)))", DateTime.MinValue.ToShortDateString());
3532
                strSQL.AppendFormat(" AND ((DATE(B.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
3533
                strSQL.AppendFormat(" AND(DATE('{0}') <= DATE(B.CompDate)", dtDefaultStart.ToShortDateString());
3534
                strSQL.AppendFormat(" OR DATE('{0}') = DATE(B.CompDate)))", DateTime.MinValue.ToShortDateString());
3535

    
3536
                strSQL.AppendFormat(" AND A.PersonCode = {0}", nPersonCode);
3537
            }
3538
            catch (Exception ex)
3539
            {
3540
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3541
            }
3542
        }
3543
        #endregion
3544

    
3545
        #region 経費率リスト取得処理
3546
        /// <summary>
3547
        /// 経費率リストを取得する
3548
        /// </summary>
3549
        /// <returns></returns>
3550
        public static bool GetExpensesList(int Preiod, int DepartmentCode, ref ArrayList ExpensesList)
3551
        {
3552
            IOMDepartmentExpenses expDB = new IOMDepartmentExpenses();
3553
            try
3554
            {
3555
                // 部署経費率マスタ取得
3556
                StringBuilder strSQL = new StringBuilder();
3557
                if (CheckNowSeason(Preiod))
3558
                {   // 今期データ
3559
                    strSQL.Append("SELECT");
3560
                    strSQL.Append(" A.NAMESTRING");
3561
                    strSQL.Append(", IFNULL(B.EXPENSESRAITO, 0)");
3562
                    strSQL.Append(", A.NAMECODE");
3563
                    strSQL.Append(" FROM");
3564
                    strSQL.Append(" DIVISIONMASTER AS A");
3565
                    strSQL.Append(" LEFT JOIN (");
3566
                    strSQL.Append("SELECT");
3567
                    strSQL.Append(" NAMECODE");
3568
                    strSQL.Append(", DEPARTMENTCODE");
3569
                    strSQL.Append(", EXPENSESRAITO");
3570
                    strSQL.Append(", EXPENSESPERIOD");
3571
                    strSQL.Append(" FROM");
3572
                    strSQL.Append(" DEPARTMENTEXPENSESMASTER) AS B");
3573
                    strSQL.Append(" ON A.NAMECODE = B.NAMECODE");
3574
                    strSQL.AppendFormat(" AND B.EXPENSESPERIOD = {0}", Preiod);
3575
                    strSQL.AppendFormat(" AND B.DEPARTMENTCODE = {0}", DepartmentCode);
3576
                    strSQL.AppendFormat(" WHERE A.DIVISIONCODE = {0}", (int)DivisionMaster.DivisionMasterCodeDef.ConstructionExpenses);
3577
                    strSQL.Append(" ORDER BY A.DISPLAYORDER");
3578
                }
3579
                else
3580
                {   // 以前のデータ
3581
                    strSQL.Append("SELECT");
3582
                    strSQL.Append(" NAMESTRING");
3583
                    strSQL.Append(", EXPENSESRAITO");
3584
                    strSQL.Append(", NAMECODE");
3585
                    strSQL.Append(" FROM");
3586
                    strSQL.Append(" DEPARTMENTEXPENSESMASTER AS B");
3587
                    strSQL.AppendFormat(" WHERE B.EXPENSESPERIOD = {0}", Preiod);
3588
                    strSQL.AppendFormat(" AND B.DEPARTMENTCODE = {0}", DepartmentCode);
3589
                    strSQL.Append(" ORDER BY B.DISPLAYORDER");
3590
                }
3591

    
3592
                ExpensesList.Clear();
3593
                if (!expDB.ExecuteReader(strSQL.ToString(), ref ExpensesList)) return false;
3594
                if (ExpensesList.Count == 0) return false;
3595

    
3596
                return true;
3597
            }
3598
            catch (Exception ex)
3599
            {
3600
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3601
                return false;
3602
            }
3603
            finally
3604
            {
3605
                expDB.close(); expDB = null;
3606
            }
3607
        }
3608
        #endregion
3609

    
3610
        #endregion
3611

    
3612
        #region ---------- Excel向け操作メソッド
3613
        #region オブジェクト開放
3614
        /// <summary>
3615
        /// Com解放
3616
        /// </summary>
3617
        /// <param name="o"></param>
3618
        public static void ReleaseCom(ref Object objCom)
3619
        {
3620
            try
3621
            {
3622
                int i = 1;
3623
                if (objCom != null && System.Runtime.InteropServices.Marshal.IsComObject(objCom))
3624
                {
3625
                    //参照カウントが0より大きい間・・・
3626
                    do
3627
                    {
3628
                        //ランタイム呼び出し可能ラッパーの参照カウントをデクリメント
3629
                        i = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom);
3630
                    } while (i > 0);
3631
                }
3632
            }
3633
            catch (Exception ex)
3634
            {
3635
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
3636
            }
3637
            finally
3638
            {
3639
                objCom = null;
3640
            }
3641
        }
3642

    
3643
        #endregion
3644
        #endregion
3645

    
3646
        #region デバッグ用メソッド
3647
        /// <summary>
3648
        /// デバッグ用メソッド
3649
        /// </summary>
3650
        /// <param name="DebugPrint">表示文字列</param>
3651
        public static void DebugWriteLine_TimeNow(string DebugPrint)
3652
        {
3653
            string wrkPrint = DateTime.Now.ToLongTimeString() +
3654
                                ((double)DateTime.Now.Millisecond / 1000.0000).ToString("#.0000");
3655

    
3656
            Debug.WriteLine(DebugPrint + ":" + wrkPrint);
3657
        }
3658

    
3659
        public static void DebugWriteLine_DateTimeNow(string DebugPrint)
3660
        {
3661
            string wrkPrint = DateTime.Now.ToLongDateString() + " " +
3662
                                DateTime.Now.ToLongTimeString() + "." +
3663
                                DateTime.Now.Millisecond.ToString();
3664

    
3665
            Debug.WriteLine(DebugPrint + ":" + wrkPrint);
3666
        }
3667
        #endregion
3668
    }
3669
}