}    //FOLD00

    //  Разпознание колонок входного файла
    public bool    Preview()       //fold00
    {
        int       Choice  = 0;
        const int MAX_COL = 100;                                // Максимальное кол-во столбцов  в файле

        string[] Lines = new   string[HEIGHT];
        int[]    Sizes = new   int[MAX_COL];
        if (!Reader.Open(FileName, CharSet))
        {
            Reader.Close();
            return(false);
        }
        TotalLines = Reader.Count;
        int I, LineNum = 0;

        for (I = 0; I < MAX_COL; I++)
        {
            Sizes[I] = 0;
        }
        for (I = 0; I < HEIGHT; I++)
        {
            Lines[I] = CAbc.EMPTY;
        }
        while (Reader.Read())
        {
            if (++LineNum > HEIGHT - 2)
            {
                break;
            }
            for (I = 1; (I < MAX_COL) && (I <= Reader.FieldCount); I++)
            {
                Sizes[I] = (Reader[I].Trim().Length > Sizes[I])
                                                        ?       Reader[I].Trim().Length
                                                        :       Sizes[I];
                Lines[LineNum - 1] += (
                    (I > 1)
                                                        ?       TAB.ToString()
                                                        :       CAbc.EMPTY
                    )
                                      + __.FixUkrI(Reader[I].Trim());
            }
        }
        Reader.Close();
        if (LineNum == 0)
        {
            return(false);
        }
        string Line;

        string[] Columns;
        CConsole.Clear();
        TotalColumns = 0;
        for (I = 0; I < LineNum; I++)
        {
            if (Lines[I] == null)
            {
                break;
            }
            if (Lines[I] == CAbc.EMPTY)
            {
                break;
            }
            Columns = Lines[I].Split(TAB);
            if (Columns == null)
            {
                continue;
            }
            if (Columns.Length == 0)
            {
                continue;
            }
            Line = " ";
            int J = 0;
            foreach (string Column in Columns)
            {
                Line += (
                    (J > 0)
                                        ?       " | "
                                        :       CAbc.EMPTY
                    )
                        + __.Left(Column, Sizes[J + 1]);
                J++;
            }
            TotalColumns = (J > TotalColumns) ? J : TotalColumns;
            __.Print(__.Left(Line, WIDTH - 1));
        }
        if (TotalColumns == 0)
        {
            return(false);
        }
        __.Print(__.Replicate("_", WIDTH - 1), "Для продолжения нажмите ENTER.Для выхода - ESC.");
        if (!CConsole.WaitForEscOrEnter())
        {
            return(false);
        }
        for (int J = 0; J < TotalColumns; J++)
        {
            CConsole.Clear();
            for (I = 0; (I < LineNum) && (I < HEIGHT - 1); I++)
            {
                Columns = Lines[I].Split(TAB);
                if (Columns == null)
                {
                    continue;
                }
                if (Columns.Length <= J)
                {
                    continue;
                }
                __.Print(__.Left(Columns[J], WIDTH - 1));
            }
            int MenuCount = 1;
            if (FieldFromFile[FLD_SUMA] == 0)
            {
                MenuCount++;
            }
            if (FieldFromFile[FLD_CREDITACC] == 0)
            {
                MenuCount++;
            }
            if (FieldFromFile[FLD_CREDITNAME] == 0)
            {
                MenuCount++;
            }
            if (FieldFromFile[FLD_CREDITSTATE] == 0)
            {
                MenuCount++;
            }
            string[] MenuItems = new   string[MenuCount];
            int[]    MenuKinds = new   int[MenuCount];
            I            = 0;
            MenuItems[I] = " ( пропустить ) ";
            MenuKinds[I] = 0;
            if (FieldFromFile[FLD_SUMA] == 0)
            {
                I++;
                MenuItems[I] = "     сумма";
                MenuKinds[I] = FLD_SUMA;
            }
            if (FieldFromFile[FLD_CREDITACC] == 0)
            {
                I++;
                MenuItems[I] = "   кредит-счет";
                MenuKinds[I] = FLD_CREDITACC;
            }
            if (FieldFromFile[FLD_CREDITNAME] == 0)
            {
                I++;
                MenuItems[I] = " название кт.счета";
                MenuKinds[I] = FLD_CREDITNAME;
            }
            if (FieldFromFile[FLD_CREDITSTATE] == 0)
            {
                I++;
                MenuItems[I] = "идент код. кт.счета";
                MenuKinds[I] = FLD_CREDITSTATE;
            }
            Choice = CConsole.GetMenuChoice(MenuItems);
            if (Choice == 0)
            {
                break;
            }
            if (Choice > 1)
            {
                FieldFromFile[MenuKinds[Choice - 1]] = J + 1;
            }
        }
        return(true);
    }    //FOLD00
    }    //FOLD00

    //  Проверка всех строк входного файла
    public string  CheckAll(CCommand Command, string BankCode)          //fold00
    {
        string Result   = CAbc.EMPTY
        , CmdText       = CAbc.EMPTY
        , SavedCode     = CAbc.EMPTY
        , AboutError    = CAbc.EMPTY
        , DebitIBAN     = CAbc.EMPTY
        , CreditIBAN    = CAbc.EMPTY
        , DebitMoniker  = CAbc.EMPTY
        , CreditMoniker = CAbc.EMPTY;
        bool HaveError  = false;
        int  LineNum    = 0;

        FieldValues[FLD_DEBITMFO]  = BankCode;
        FieldValues[FLD_CREDITMFO] = BankCode;
        if (!Reader.Open(FileName, CharSet))
        {
            Reader.Close();
            return("Ошибка чтения исходного файла !");
        }
        SavedCode = FieldValues[FLD_CODE];
        while (Reader.Read())
        {
            LineNum++;
            PrepareFields();
            DebitMoniker  = FieldValues[FLD_DEBITACC].Replace("'", "`").Trim();
            CreditMoniker = FieldValues[FLD_CREDITACC].Replace("'", "`").Trim();
            if (DebitMoniker[0] > '9')
            {
                DebitIBAN    = DebitMoniker;
                DebitMoniker = CAbc.EMPTY;
            }
            if (CreditMoniker[0] > '9')
            {
                CreditIBAN    = CreditMoniker;
                CreditMoniker = CAbc.EMPTY;
            }
            CConsole.ShowBox(CAbc.EMPTY, " Проверяется строка" + __.StrI(LineNum, 5) + " ", CAbc.EMPTY);
            CmdText = "exec  dbo.pMega_OpenGate_CheckPalvis "
                      + " @Code         = '" + FieldValues[FLD_CODE].Replace("'", "`").Trim() + "'"
                      + ",@Ctrls        = ''"
                      + ",@SourceCode   = '" + FieldValues[FLD_DEBITMFO].Replace("'", "`").Trim() + "'"
                      + ",@DebitMoniker = '" + DebitMoniker + "'"
                      + ",@DebitState   = '" + FieldValues[FLD_DEBITSTATE].Replace("'", "`").Trim() + "'"
                      + ",@DebitIBAN    = '" + DebitIBAN + "'"
                      + ",@TargetCode   = '" + FieldValues[FLD_CREDITMFO].Replace("'", "`").Trim() + "'"
                      + ",@CreditMoniker= '" + CreditMoniker + "'"
                      + ",@CreditState  = '" + FieldValues[FLD_CREDITSTATE].Replace("'", "`").Trim() + "'"
                      + ",@CreditIBAN   = '" + CreditIBAN + "'"
                      + ",@CrncyAmount  =  " + FieldValues[FLD_SUMA].Replace(" ", CAbc.EMPTY).Trim()
                      + ",@CurrencyId   =  " + FieldValues[FLD_CURRENCY].Replace("'", "`").Trim()
                      + ",@UserName     = '******'"
            ;
            AboutError = (string)__.IsNull(Command.GetScalar(CmdText), CAbc.EMPTY);
            if (__.IsEmpty(FieldValues[FLD_PURPOSE].Trim()))
            {
                AboutError += " Не заполнено назначение платежа ;";
            }
            if (__.IsEmpty(FieldValues[FLD_DEBITNAME].Trim()))
            {
                AboutError += " Не заполнено название дб. счета ;";
            }
            if (__.IsEmpty(FieldValues[FLD_CREDITNAME].Trim()))
            {
                AboutError += " Не заполнено название кт. счета ;";
            }
            if (AboutError != null)
            {
                if ((AboutError.Trim() != ""))
                {
                    HaveError = true;
                    Result   += " Ошибка в строке " + LineNum.ToString() + " : " + AboutError.Trim() + CAbc.CRLF;
                }
            }
        }
        FieldValues[FLD_CODE] = SavedCode;
        CConsole.Clear();
        byte SavedColor = CConsole.BoxColor;

        if ((( int )__.IsNull(Command.GetScalar("exec dbo.pMega_OpenGate_CheckPalvis;2 @TaskCode='" + TASK_CODE + "',@FileName='" + CleanFileName + "'"), (int)0)) > 0)
        {
            CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE;
            CConsole.GetBoxChoice("Внимание ! Файл " + CleanFileName + " сегодня уже загружался !", "", "Для выхода нажмите ENTER.");
            CConsole.BoxColor = SavedColor;
            Result           += "Файл " + CleanFileName + " сегодня уже загружался !" + CAbc.CRLF;
        }
        CConsole.BoxColor = SavedColor;
        Reader.Close();
        return(Result);
    }    //FOLD00
    static void Main()        //FOLD00
    {
        const bool      DEBUG       = false;
        bool            UseErcRobot = false;                                            // подключаться ли к серверу под логином ErcRobot
        const string    ROBOT_LOGIN = "******";
        const string    ROBOT_PWD   = "35162987";
        const string    TASK_CODE   = "OpenGate";
        CPayRoll        PayRoll;
        CCommand        Command;
        CConnection     Connection;
        COpengateConfig OgConfig;
        CScrooge2Config Scrooge2Config;
        byte            SavedColor;
        int             ErcDate = 0
        , SeanceNum             = 0;
        string TmpDir           = CAbc.EMPTY
        , StatDir          = CAbc.EMPTY
        , BankCode         = "351629"
        , FileName         = CAbc.EMPTY
        , TodayDir         = CAbc.EMPTY
        , InputDir         = CAbc.EMPTY
        , DataBase         = CAbc.EMPTY
        , ScroogeDir       = CAbc.EMPTY
        , SettingsDir      = CAbc.EMPTY
        , ServerName       = CAbc.EMPTY
        , AboutError       = CAbc.EMPTY
        , LogFileName      = CAbc.EMPTY
        , TmpFileName      = CAbc.EMPTY
        , CleanFileName    = CAbc.EMPTY
        , ConnectionString = CAbc.EMPTY;

        CConsole.Clear();
        __.Print(CAbc.EMPTY, "  Загрузка зарплатных ведомостей в `Скрудж`. Версия 2.01 от 21.08.2019г.", CAbc.EMPTY);
        System.Console.Title = "Загрузка в `Скрудж` зарплатных ведомостей";
        __.DeleteOldTempDirs("??????", __.Today() - 1);
        if (DEBUG)
        {
            FileName = "D:\\WorkShop\\zkm.dif";
            Err.LogTo("D:\\WorkShop\\zkm.log");
        }
        else
        if (__.ParamCount() > 1)
        {
            for (int i = 1; i < __.ParamCount(); i++)
            {
                if (CAbc.ParamStr[i].Trim().ToUpper() == "/R")
                {
                    UseErcRobot          = true;
                    System.Console.Title = System.Console.Title + " * ";
                }
                else
                {
                    FileName = CAbc.ParamStr[i].Trim();
                }
            }
        }
        if (__.IsEmpty(FileName))
        {
            __.Print(" Не указано имя файла для обработки ! ");
            __.Print("  Формат запуска :   PayrollImporter.exe  <FileName>  [/R]");
            __.Print("  Пример         :   PayrollImporter.exe  * ");
            return;
        }
        // -----------------------------------------------------
        // Вычитываем настройки "Скрудж-2"
        Scrooge2Config = new   CScrooge2Config();
        if (!Scrooge2Config.IsValid)
        {
            __.Print(Scrooge2Config.ErrInfo);
            return;
        }
        ScroogeDir  = (string)Scrooge2Config["Root"];
        SettingsDir = (string)Scrooge2Config["Common"];
        ServerName  = (string)Scrooge2Config["Server"];
        DataBase    = (string)Scrooge2Config["DataBase"];
        if (ScroogeDir == null)
        {
            __.Print("  Не найдена переменная `Root` в настройках `Скрудж-2` ");
            return;
        }
        if (ServerName == null)
        {
            __.Print("  Не найдена переменная `Server` в настройках `Скрудж-2` ");
            return;
        }
        if (DataBase == null)
        {
            __.Print("  Не найдена переменная `Database` в настройках `Скрудж-2` ");
            return;
        }
        ScroogeDir = ScroogeDir.Trim();
        if (SettingsDir != null)
        {
            SettingsDir = ScroogeDir + "\\" + SettingsDir;
        }
        ServerName = ServerName.Trim();
        DataBase   = DataBase.Trim();
        if (DEBUG)
        {
            __.Print("  Беру настройки `Скрудж-2` здесь :  " + ScroogeDir);
        }
        if (FileName == "*")
        {
            FileName = SelectFileNameGUI(SettingsDir);
        }
        if (FileName == null)
        {
            return;
        }
        if (__.IsEmpty(FileName))
        {
            return;
        }
        if (!__.FileExists(FileName))
        {
            __.Print(" Не найден указанный файл ! ", "", "Для выхода нажмите ENTER.");
            CConsole.WaitForEscOrEnter();
            return;
        }
        CleanFileName = __.GetFileName(FileName);
        PayRoll       = new   CPayRoll();
        if (!PayRoll.Open(FileName))
        {
            __.Print("Ошибка открытия исходного файла !", "", "Для выхода нажмите ENTER.");
            PayRoll.Close();
            CConsole.WaitForEscOrEnter();
            return;
        }
        if (!PayRoll.Preview())
        {
            PayRoll.Close();
            return;
        }
        // -----------------------------------------------------
        // Подключаемся к базе данных
        ConnectionString = "Server=" + ServerName
                           + ";Database=" + DataBase;
        if (UseErcRobot)
        {
            ConnectionString += ";UID=" + ROBOT_LOGIN + ";PWD=" + ROBOT_PWD + ";";
        }
        else
        {
            ConnectionString += ";Integrated Security=TRUE;";
        }
        Connection = new   CConnection(ConnectionString);
        if (Connection.IsOpen())
        {
            if (DEBUG)
            {
                __.Print("  Сервер        :  " + ServerName);
            }
        }
        else
        {
            __.Print("", "  Ошибка подключения к серверу !");
            Connection.Close();
            PayRoll.Close();
            __.Print("", "Для выхода нажмите ENTER.");
            CConsole.WaitForEscOrEnter();
            return;
        }
        Command = new   CCommand(Connection);
        if (Command.IsOpen())
        {
            if (DEBUG)
            {
                __.Print("  База данных   :  " + DataBase);
            }
        }
        else
        {
            __.Print("", "  Ошибка подключения к базе данных !");
            Command.Close();
            Connection.Close();
            PayRoll.Close();
            __.Print("", "Для выхода нажмите ENTER.");
            CConsole.WaitForEscOrEnter();
            return;
        }
        System.Console.Title = System.Console.Title + " |   " + ServerName + "." + DataBase;
        // -----------------------------------------------------
        //  Вычитываем из БД информацию про МФО и дебет-счет
        BankCode = ( string )__.IsNull(Command.GetScalar(" select Code from dbo.vMega_Common_MyBankInfo with ( NoLock ) "), CAbc.EMPTY);
        if (BankCode == null)
        {
            BankCode = "351629";
        }
        else
        if (__.IsEmpty(BankCode))
        {
            BankCode = "351629";
        }
        if (!PayRoll.GetDebitInfo(Command))
        {
            Command.Close();
            Connection.Close();
            PayRoll.Close();
            return;
        }
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        // считываем настройки шлюза в ЕРЦ
        ErcDate = ( int )__.IsNull(Command.GetScalar(" exec  dbo.pMega_OpenGate_Days;7 "), (int)0);
        if (ErcDate < 1)
        {
            __.Print(" Ошибка определения даты текущего рабочего дня. ");
            Command.Close();
            Connection.Close();
            PayRoll.Close();
            __.Print("", "Для выхода нажмите ENTER.");
            CConsole.WaitForEscOrEnter();
            return;
        }
        OgConfig = new   COpengateConfig();
        OgConfig.Open(ErcDate);
        if (!OgConfig.IsValid())
        {
            __.Print("  Ошибка чтения настроек программы из " + OgConfig.Config_FileName());
            __.Print(OgConfig.ErrInfo());
            Command.Close();
            Connection.Close();
            PayRoll.Close();
            __.Print("", "Для выхода нажмите ENTER.");
            CConsole.WaitForEscOrEnter();
            return;
        }
        SeanceNum = ( int )__.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4  @TaskCode='" + TASK_CODE + "',@ParamCode='NumSeance' "), (int)0);
        if (SeanceNum < 1)
        {
            __.Print(" Ошибка определения номера сеанса ");
            Command.Close();
            Connection.Close();
            PayRoll.Close();
            __.Print("", "Для выхода нажмите ENTER.");
            CConsole.WaitForEscOrEnter();
            return;
        }
        TodayDir = (string)OgConfig.TodayDir();
        TmpDir   = (string)OgConfig.TmpDir();
        StatDir  = (string)OgConfig.StatDir();
        if ((TodayDir == null) || (InputDir == null))
        {
            __.Print("  Ошибка чтения настроек программы из " + OgConfig.Config_FileName());
            Command.Close();
            Connection.Close();
            PayRoll.Close();
            __.Print("", "Для выхода нажмите ENTER.");
            CConsole.WaitForEscOrEnter();
            return;
        }
        TodayDir = TodayDir.Trim();
        StatDir  = StatDir.Trim();
        TmpDir   = TmpDir.Trim();
        if (!__.DirExists(TodayDir))
        {
            __.MkDir(TodayDir);
        }
        if (!__.DirExists(StatDir))
        {
            __.MkDir(StatDir);
        }
        if (!__.DirExists(TmpDir))
        {
            __.MkDir(TmpDir);
        }
        if (!__.SaveText(StatDir + "\\" + "test.dat", "test.dat", CAbc.CHARSET_DOS))
        {
            __.Print(" Ошибка записи в каталог " + StatDir);
            Command.Close();
            Connection.Close();
            PayRoll.Close();
            __.Print("", "Для выхода нажмите ENTER.");
            CConsole.WaitForEscOrEnter();
            return;
        }
        __.DeleteFile(StatDir + "\\" + "test.dat");
        LogFileName = OgConfig.LogDir() + "\\SEANS" + SeanceNum.ToString("000") + ".TXT";
        Err.LogTo(LogFileName);
        __.AppendText(LogFileName, __.Now() + "   " + __.Upper(__.GetUserName()) + "  загружает файл " + CleanFileName + CAbc.CRLF, CAbc.CHARSET_WINDOWS);
        TmpFileName = TodayDir + CAbc.SLASH + CleanFileName;
        if (!__.FileExists(TmpFileName))
        {
            __.CopyFile(FileName, TmpFileName);
        }
        if (!__.FileExists(TmpFileName))
        {
            __.Print(" Ошибка записи файла " + TmpFileName);
            Command.Close();
            Connection.Close();
            PayRoll.Close();
            __.Print("", "Для выхода нажмите ENTER.");
            CConsole.WaitForEscOrEnter();
            return;
        }
        TmpFileName = TmpDir + CAbc.SLASH
                      + __.Right("0" + __.Hour(__.Clock()).ToString(), 2)
                      + __.Right("0" + __.Minute(__.Clock()).ToString(), 2)
                      + __.Right("0" + __.Second(__.Clock()).ToString(), 2);
        if (!__.DirExists(TmpFileName))
        {
            __.MkDir(TmpFileName);
        }
        PayRoll.CopyTempFile(TmpFileName);
        TmpFileName = TmpFileName + CAbc.SLASH + CleanFileName;
        PayRoll.CopyTempFile(TmpFileName);
        if (__.FileExists(TmpFileName))
        {
            __.DeleteFile(TmpFileName);
        }
        if (__.FileExists(TmpFileName))
        {
            __.Print("Ошибка удаления файла ", TmpFileName);
            Command.Close();
            Connection.Close();
            PayRoll.Close();
            __.Print("", "Для выхода нажмите ENTER.");
            CConsole.WaitForEscOrEnter();
            return;
        }
        __.CopyFile(FileName, TmpFileName);
        if (DEBUG)
        {
            __.Print("  Беру настройки шлюза здесь :  " + OgConfig.Config_FileName());
        }
        // -----------------------------------------------------
        //  Проверяем пачку
        AboutError = PayRoll.CheckAll(Command, BankCode);
        if (AboutError != CAbc.EMPTY)
        {
            __.Print(AboutError);
            __.AppendText(LogFileName, CAbc.CRLF + AboutError + CAbc.CRLF, CAbc.CHARSET_WINDOWS);
            SavedColor        = CConsole.BoxColor;
            CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE;
            if (!CConsole.GetBoxChoice(" При проверке файла обнаружены ошибки !"
                                       , " Для отмены загрузки нажмите ESC . "
                                       , " Для продолжения - ENTER ."
                                       )
                )
            {
                __.AppendText(LogFileName, CAbc.CRLF + __.Now() + "  загрузка отменена. " + CAbc.CRLF, CAbc.CHARSET_WINDOWS);
                CConsole.BoxColor = SavedColor;
                Command.Close();
                Connection.Close();
                PayRoll.Close();
                return;
            }
            CConsole.BoxColor = SavedColor;
        }
        else
        {
            if (!CConsole.GetBoxChoice(" При проверке файла ошибок не найдено."
                                       , " Для загрузки нажмите ENTER . "
                                       , " Для выхода - ESC."
                                       )
                )
            {
                __.AppendText(LogFileName, CAbc.CRLF + __.Now() + "  загрузка отменена. " + CAbc.CRLF, CAbc.CHARSET_WINDOWS);
                Command.Close();
                Connection.Close();
                PayRoll.Close();
                return;
            }
        }
        // -----------------------------------------------------
        //  Загружаем пачку
        if (!PayRoll.InsertAll(Command, BankCode))
        {
            SavedColor        = CConsole.BoxColor;
            CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE;
            CConsole.GetBoxChoice(CAbc.EMPTY, "  При загрузке файла были ошибки !", CAbc.EMPTY);
            CConsole.BoxColor = SavedColor;
        }
        // -----------------------------------------------------
        Command.Close();
        Connection.Close();
        PayRoll.Close();
        __.AppendText(LogFileName, CAbc.CRLF + __.Now() + "  загрузка завершена. " + CAbc.CRLF, CAbc.CHARSET_WINDOWS);
    }    //FOLD00
    }    //FOLD00

    //  Вставка строк входного файла в БД
    public bool    InsertAll(CCommand Command, string BankCode)          //fold00
    {
        string CmdText  = CAbc.EMPTY
        , DebitIBAN     = CAbc.EMPTY
        , CreditIBAN    = CAbc.EMPTY
        , DebitMoniker  = CAbc.EMPTY
        , CreditMoniker = CAbc.EMPTY;
        int  LineNum    = 0;
        bool Result     = true;

        FieldValues[FLD_DEBITMFO]  = BankCode;
        FieldValues[FLD_CREDITMFO] = BankCode;
        if (!Reader.Open(FileName, CharSet))
        {
            Reader.Close();
            return(false);
        }
        while (Reader.Read())
        {
            LineNum++;
            PrepareFields();
            DebitMoniker  = FieldValues[FLD_DEBITACC].Replace("'", "`").Trim();
            CreditMoniker = FieldValues[FLD_CREDITACC].Replace("'", "`").Trim();
            if (DebitMoniker[0] > '9')
            {
                DebitIBAN    = DebitMoniker;
                DebitMoniker = CAbc.EMPTY;
            }
            if (CreditMoniker[0] > '9')
            {
                CreditIBAN    = CreditMoniker;
                CreditMoniker = CAbc.EMPTY;
            }
            CConsole.ShowBox(CAbc.EMPTY, " Загружается строка" + __.StrI(LineNum, 5) + " ", CAbc.EMPTY);
            CmdText = "exec  dbo.pMega_OpenGate_AddPalvis "
                      + " @TaskCode     = '" + TASK_CODE + "'"
                      + ",@DayDate	= "+ DayDate.ToString()
                      + ",@BranchCode   = ''"
                      + ",@FileName     = '" + CleanFileName + "'"
                      + ",@LineNum      =  " + LineNum.ToString()
                      + ",@SourceCode   = '" + FieldValues[FLD_DEBITMFO].Replace("'", "`").Trim() + "'"
                      + ",@DebitMoniker = '" + DebitMoniker + "'"
                      + ",@DebitState   = '" + FieldValues[FLD_DEBITSTATE].Replace("'", "`").Trim() + "'"
                      + ",@DebitIBAN    = '" + DebitIBAN + "'"
                      + ",@DebitName    = '" + FieldValues[FLD_DEBITNAME].Replace("'", "`").Trim() + "'"
                      + ",@TargetCode   = '" + FieldValues[FLD_CREDITMFO].Replace("'", "`").Trim() + "'"
                      + ",@CreditMoniker= '" + CreditMoniker + "'"
                      + ",@CreditState  = '" + FieldValues[FLD_CREDITSTATE].Replace("'", "`").Trim() + "'"
                      + ",@CreditIBAN   = '" + CreditIBAN + "'"
                      + ",@CreditName   = '" + FieldValues[FLD_CREDITNAME].Replace("'", "`").Trim() + "'"
                      + ",@CrncyAmount  =  " + FieldValues[FLD_SUMA].Replace(" ", CAbc.EMPTY).Trim()
                      + ",@CurrencyId   =  " + FieldValues[FLD_CURRENCY].Replace("'", "`").Trim()
                      + ",@Purpose      = '" + FieldValues[FLD_PURPOSE].Replace("'", "`").Replace("?", "i").Trim() + "'"
                      + ",@Code         = '" + FieldValues[FLD_CODE].Replace("'", "`").Trim() + "'"
                      + ",@Ctrls        = ''"
                      + ",@UserName     = '******'"
            ;
            if (!Command.Execute(CmdText))
            {
                Result = false;
            }
        }
        CConsole.Clear();
        CConsole.ShowBox(CAbc.EMPTY, " Подождите...", CAbc.EMPTY);
        Command.Execute("  exec pMega_OpenGate_PayRoll;2 "
                        + "  @FileName='" + CleanFileName + "'"
                        + ", @DayDate=" + DayDate.ToString()
                        );
        CConsole.Clear();
        Reader.Close();
        return(Result);
    }    //FOLD00
Exemplo n.º 5
0
        public static void Main(string[] args)
        {
#if !DEBUG
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
#endif
            AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);

            try {
                mThread   = Thread.CurrentThread;
                mProcess  = Process.GetCurrentProcess();
                mAssembly = Assembly.GetEntryAssembly();
                if (mThread != null)
                {
                    mThread.Name = "Core Thread";
                }

                Timer.TimerThread ttObj = new Timer.TimerThread();
                mTimerThread      = new Thread(new ThreadStart(ttObj.TimerMain));
                mTimerThread.Name = "Timer Thread";

                int width = Math.Min(100, Console.LargestWindowWidth - 2);
                Console.CursorVisible = false;
                Console.Clear();
                Console.WindowLeft = Console.WindowTop = 0;
                if (Console.WindowWidth < width)
                {
                    Console.WindowWidth = width;
                }

                LogoPrinter.PrefixColor = EConsoleColor.Blue;
                LogoPrinter.SufixColor  = EConsoleColor.Blue;
                LogoPrinter.TextColor   = EConsoleColor.Gray;
                LogoPrinter.PrintLogo();

                Version ver = mAssembly.GetName().Version;
                CConsole.StatusLine("Shaiya.Extended Server - Version {0}.{1}, Build {2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision);

                mConsoleEventHandler = new ConsoleEventHandler(OnConsoleEvent);
                SetConsoleCtrlHandler(mConsoleEventHandler, true);

                mAppConf = new ApplicationSettings();
                mAppConf.ReadAll();

                Stopwatch watch = Stopwatch.StartNew();
                CConsole.Info("Connecting to SQL Server {0}...", mAppConf.Network["DB Server"]);
                mDatabase = new MySqlWrapper(mAppConf.Network["DB Server"], int.Parse(mAppConf.Network["DB Port"]), mAppConf.Network["DB User"], mAppConf.Network["DB Password"], mAppConf.Network["DB Database"]);
                MysqlError conRes = mDatabase.Prepare();
                if (conRes != MysqlError.None)
                {
                    CConsole.WriteLine(EConsoleColor.Error, " failed!");
                    throw new Exception("Failed to open Database Connection! Type: " + conRes.ToString());
                }
                watch.Stop();
                CConsole.WriteLine(EConsoleColor.Status, " done! Needed {0:F2} sec", watch.Elapsed.TotalSeconds);
                watch = null;

                ScriptDatabase.Initialize(@"Scripts\ScriptList.xml");
                ScriptCompiler.Compile(AppDomain.CurrentDomain.BaseDirectory + Path.Combine(Settings.Default.MainConfDir, Settings.Default.ScriptAssemblies), true, true);

                World.Load();

                // testing CallMethod
                ScriptCompiler.CallMethod("Initialize");

                SocketPool.Create();
                mSocketConnector = new SocketConnector(mAppConf.Network["Server IP"], mAppConf.Network.GetInt("Server Port"));
                PacketHandlers.Initialize();

                // start Timer Thread
                mTimerThread.Start();

                NetState.Initialize();

                // finished Loading
                Events.InvokeServerStarted();


                DateTime    now, last = DateTime.Now;
                const int   sampleInterval = 100;
                const float ticksPerSecond = (float)(TimeSpan.TicksPerSecond * sampleInterval);
                int         sample         = 0;

                while (mSignal.WaitOne())
                {
                    Timer.Slice();
                    mSocketConnector.Slice();

                    NetState.FlushAll();
                    NetState.ProcessDisposedQueue();

                    if (Slice != null)
                    {
                        Slice();
                    }

                    // just for Diagnostics
                    if ((++sample % sampleInterval) == 0)
                    {
                        now = DateTime.Now;
                        mCyclesPerSecond[mCycleIndex++ % mCyclesPerSecond.Length] = ticksPerSecond / (now.Ticks - last.Ticks);
                        last = now;
                    }
                }
            } catch (Exception e) {
                CurrentDomain_UnhandledException(null, new UnhandledExceptionEventArgs(e, true));
            }
        }