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