예제 #1
0
 //----------------------------------------------------------
 //	формирование имени результирующего файла
 static string  GetAFileName()
 {
     return(ConstPartOfName
            + "."
            + CCommon.StrY(CCommon.Minute(CCommon.Now()) & 31, 1)
            + CCommon.Right((BatchNum + AFileExtName).ToString("000"), 2)
            );
 }
예제 #2
0
    // Kinds - типы полей:
    //	-1 = редактируемое, обязательное для заполнения;
    //	-2 = постоянное, нередактируемое;
    //	-3 = номер документа;
    //	-4 = редактируемое, необязтельное для заполнения;
    //	иначе - номер столбца из вход. данных.
    //
    public CSepAModel()
    {
        string DateStr = CCommon.DtoC(CCommon.Today()).Substring(2, 6);
        string TimeStr = CCommon.Hour(CCommon.Now()).ToString("00") + CCommon.Minute(CCommon.Now()).ToString("00") + CCommon.Second(CCommon.Now()).ToString("00");

        try {
            NumberDoc += CCommon.CLng(TimeStr) * 1000;
        } catch (System.Exception Excpt) {
            NumberDoc = 1;
        }
        Kinds[CSepAFileInfo.L_DEBITMFO]      = -1;    Values[CSepAFileInfo.L_DEBITMFO] = "351629";       Infos[CSepAFileInfo.L_DEBITMFO] = "МФО   Дб. сч.";       Aliases[CSepAFileInfo.L_DEBITMFO] = "MFOA_Text";
        Kinds[CSepAFileInfo.L_DEBITACC]      = -1;    Values[CSepAFileInfo.L_DEBITACC] = "";       Infos[CSepAFileInfo.L_DEBITACC] = "Номер Дб. сч.";       Aliases[CSepAFileInfo.L_DEBITACC] = "AccountA_Text";
        Kinds[CSepAFileInfo.L_CREDITMFO]     = -1;    Values[CSepAFileInfo.L_CREDITMFO] = "351629";       Infos[CSepAFileInfo.L_CREDITMFO] = "МФО   Кт. сч.";       Aliases[CSepAFileInfo.L_CREDITMFO] = "MFOCl3_Text";
        Kinds[CSepAFileInfo.L_CREDITACC]     = -1;    Values[CSepAFileInfo.L_CREDITACC] = "";       Infos[CSepAFileInfo.L_CREDITACC] = "Номер Кт. сч.";       Aliases[CSepAFileInfo.L_CREDITACC] = "AccCl3_Text";
        Kinds[CSepAFileInfo.L_FLAG]          = -2;    Values[CSepAFileInfo.L_FLAG] = "1";       Infos[CSepAFileInfo.L_FLAG] = null;       Aliases[CSepAFileInfo.L_FLAG] = "";
        Kinds[CSepAFileInfo.L_SUMA]          = -1;    Values[CSepAFileInfo.L_SUMA] = "";       Infos[CSepAFileInfo.L_SUMA] = "Сумма ";       Aliases[CSepAFileInfo.L_SUMA] = "";
        Kinds[CSepAFileInfo.L_DTYPE]         = -2;    Values[CSepAFileInfo.L_DTYPE] = "1";       Infos[CSepAFileInfo.L_DTYPE] = null;       Aliases[CSepAFileInfo.L_DTYPE] = "";
        Kinds[CSepAFileInfo.L_NDOC]          = -3;    Values[CSepAFileInfo.L_NDOC] = "";       Infos[CSepAFileInfo.L_NDOC] = null;       Aliases[CSepAFileInfo.L_NDOC] = "";
        Kinds[CSepAFileInfo.L_CURRENCY]      = -1;    Values[CSepAFileInfo.L_CURRENCY] = "980";       Infos[CSepAFileInfo.L_CURRENCY] = "Числовой код валюты";  Aliases[CSepAFileInfo.L_CURRENCY] = "";
        Kinds[CSepAFileInfo.L_DATE1]         = -2;    Values[CSepAFileInfo.L_DATE1] = DateStr;       Infos[CSepAFileInfo.L_DATE1] = null;       Aliases[CSepAFileInfo.L_DATE1] = "";
        Kinds[CSepAFileInfo.L_DATE2]         = -2;    Values[CSepAFileInfo.L_DATE2] = DateStr;       Infos[CSepAFileInfo.L_DATE2] = null;       Aliases[CSepAFileInfo.L_DATE2] = "";
        Kinds[CSepAFileInfo.L_DEBITNAME]     = -1;    Values[CSepAFileInfo.L_DEBITNAME] = "АТ \"МЕГАБАНК\""; Infos[CSepAFileInfo.L_DEBITNAME] = "Название Дб. сч.";     Aliases[CSepAFileInfo.L_DEBITNAME] = "AName_Text";
        Kinds[CSepAFileInfo.L_CREDITNAME]    = -1;    Values[CSepAFileInfo.L_CREDITNAME] = "";       Infos[CSepAFileInfo.L_CREDITNAME] = "Название Кт. сч.";     Aliases[CSepAFileInfo.L_CREDITNAME] = "NameCl3_Text";
        Kinds[CSepAFileInfo.L_PURPOSE]       = -1;    Values[CSepAFileInfo.L_PURPOSE] = "";       Infos[CSepAFileInfo.L_PURPOSE] = "Назначение платежа";   Aliases[CSepAFileInfo.L_PURPOSE] = "Argument_Text";
        Kinds[CSepAFileInfo.L_RESERVED1]     = -2;    Values[CSepAFileInfo.L_RESERVED1] = "";       Infos[CSepAFileInfo.L_RESERVED1] = null;       Aliases[CSepAFileInfo.L_RESERVED1] = "";
        Kinds[CSepAFileInfo.L_DEBITACC_EXT]  = -2;    Values[CSepAFileInfo.L_DEBITACC_EXT] = "";       Infos[CSepAFileInfo.L_DEBITACC_EXT] = null;       Aliases[CSepAFileInfo.L_DEBITACC_EXT] = "";
        Kinds[CSepAFileInfo.L_CREDITACC_EXT] = -2;    Values[CSepAFileInfo.L_CREDITACC_EXT] = "";       Infos[CSepAFileInfo.L_CREDITACC_EXT] = null;       Aliases[CSepAFileInfo.L_CREDITACC_EXT] = "";
        Kinds[CSepAFileInfo.L_SYMBOL]        = -4;    Values[CSepAFileInfo.L_SYMBOL] = "";       Infos[CSepAFileInfo.L_SYMBOL] = "Кассовый символ";      Aliases[CSepAFileInfo.L_SYMBOL] = "";
        Kinds[CSepAFileInfo.L_RESERVED2]     = -2;    Values[CSepAFileInfo.L_RESERVED2] = "";       Infos[CSepAFileInfo.L_RESERVED2] = null;       Aliases[CSepAFileInfo.L_RESERVED2] = "";
        Kinds[CSepAFileInfo.L_OKPO1]         = -1;    Values[CSepAFileInfo.L_OKPO1] = "09804119";     Infos[CSepAFileInfo.L_OKPO1] = "Идент код Дб. сч.";    Aliases[CSepAFileInfo.L_OKPO1] = "OKPOA_Text";
        Kinds[CSepAFileInfo.L_OKPO2]         = -1;    Values[CSepAFileInfo.L_OKPO2] = "";       Infos[CSepAFileInfo.L_OKPO2] = "Идент код Кт. сч.";    Aliases[CSepAFileInfo.L_OKPO2] = "OKPOCl3_Text";
        Kinds[CSepAFileInfo.L_ID]            = -3;    Values[CSepAFileInfo.L_ID] = "";       Infos[CSepAFileInfo.L_ID] = null;       Aliases[CSepAFileInfo.L_ID] = "";
        Kinds[CSepAFileInfo.L_RESERVED3]     = -2;    Values[CSepAFileInfo.L_RESERVED3] = "";       Infos[CSepAFileInfo.L_RESERVED3] = null;       Aliases[CSepAFileInfo.L_RESERVED3] = "";
        Kinds[CSepAFileInfo.L_DES]           = -2;    Values[CSepAFileInfo.L_DES] = "";       Infos[CSepAFileInfo.L_DES] = null;       Aliases[CSepAFileInfo.L_DES] = "";
        Kinds[CSepAFileInfo.L_DEBITIBAN]     = -4;    Values[CSepAFileInfo.L_DEBITIBAN] = "";       Infos[CSepAFileInfo.L_DEBITIBAN] = "IBAN Дб.сч.";       Aliases[CSepAFileInfo.L_DEBITIBAN] = "";
        Kinds[CSepAFileInfo.L_CREDITIBAN]    = -4;    Values[CSepAFileInfo.L_CREDITIBAN] = "";       Infos[CSepAFileInfo.L_CREDITIBAN] = "IBAN Кт.сч.";       Aliases[CSepAFileInfo.L_CREDITIBAN] = "";
        Kinds[CSepAFileInfo.L_RESERVED4]     = -2;    Values[CSepAFileInfo.L_RESERVED4] = "";       Infos[CSepAFileInfo.L_RESERVED4] = null;       Aliases[CSepAFileInfo.L_RESERVED4] = "";
        Kinds[CSepAFileInfo.L_CRLF]          = -2;    Values[CSepAFileInfo.L_CRLF] = CAbc.CRLF;      Infos[CSepAFileInfo.L_CRLF] = null;       Aliases[CSepAFileInfo.L_CRLF] = "";
    }
예제 #3
0
    //-----------------------------------------------------------------------------------------
    //	основная программа
    public static void Main()
    {
        const bool DEBUG       = false;
        const int  MAX_COLUMNS = 299;                                           // максимальное количество столбцов

        int[]       ColWidth = new   int[MAX_COLUMNS];                          // ширины столбцов
        int         ColNumber = 0;
        int         ALineNumber = 0;
        int         AFieldNumber = 0;
        string      AFileName = "";
        string      ModelFileName = CCommon.GetTempDir() + "\\" + "AMaker.mod";
        string      Now_Date_Str = CCommon.DtoC(CCommon.Today()).Substring(2, 6);
        string      Now_Time_Str = CCommon.Hour(CCommon.Now()).ToString("00") + CCommon.Minute(CCommon.Now()).ToString("00");
        CTsvWriter  TsvWriter = new   CTsvWriter();
        CTextReader TextReader = new   CTextReader();
        string      TsvFileName = "$";
        string      InpFileName = "";
        int         InpColCount = 0;
        int         I, SourceMode = -2;                                         // откуда читать данные : 0=ClipBoard , 1=CSV , 2=DIF
        string      Tmps = "";

        string[] SubTmps;
        //----------------------------------------------------------
        CCommon.Print("  Программа для cоздания А-файлов с платежами на основе форматных данных,");
        CCommon.Print("  полученных из электронной таблицы (CVS/DIF). Версия 2.03 от 17.09.2019г.");
        if (DEBUG)
        {
            InpFileName = "F:\\Trash\\Kazna1.csv";
        }
        else
        if (CCommon.ParamCount() < 2)
        {
            CCommon.Print("");
            CCommon.Print(" Формат запуска : ");
            CCommon.Print("      AMaker3    Имя_файла  ");
            CCommon.Print(" где : ");
            CCommon.Print("      Имя_файла  - имя файла данных в формате CSV или DIF ");
            CCommon.Print("");
            return;
        }
        else
        {
            InpFileName = CAbc.ParamStr[1].Trim();
        }

        if (InpFileName == "*")
        {
            SourceMode = 0;
        }
        else
        {
            switch (CCommon.GetExtension(InpFileName).ToUpper())
            {
            case    ".CSV": {
                SourceMode = 1;
                break;
            }

            case    ".DIF": {
                SourceMode = 2;
                break;
            }

            case    ".MOD": {
                SourceMode = -1;
                break;
            }

            default: {
                CCommon.Print("Неправильный тип файла !");
                SourceMode = -2;
                break;
            }
            }
        }
        //----------------------------------------------------------
        // если выбран файл с шаблоном, то выводим его на экран
        if (SourceMode == -1)
        {
            if (AModel.LoadFromFile(InpFileName))
            {
                AModel.PrintConstValues();
                if (CConsole.GetBoxChoice("Использовать теперь этот шаблон ?", " Да = Enter . Нет = Esc ."))
                {
                    if (CCommon.FileExists(ModelFileName))
                    {
                        CCommon.DeleteFile(ModelFileName);
                    }
                    if (CCommon.FileExists(ModelFileName))
                    {
                        CCommon.Print("Ошибка удаления файла " + ModelFileName);
                    }
                    else if (!CCommon.CopyFile(InpFileName, ModelFileName))
                    {
                        CCommon.Print("Ошибка записи файла  " + ModelFileName);
                    }
                    return;
                }
            }
        }
        else
        if (CCommon.FileExists(ModelFileName))
        {
            AModel.LoadFromFile(ModelFileName);
        }
        if ((SourceMode < 0) || (SourceMode > 2))
        {
            CCommon.Print("Неправильная строка параметров !");
            return;
        }
        //----------------------------------------------------------
        // скидываем информацию в промежуточный Tsv-файл
        TsvFileName = CCommon.GetTempName();
        if (TsvFileName == null)
        {
            TsvFileName = InpFileName + ".$$$";
        }
        else if (TsvFileName.Trim() == "")
        {
            TsvFileName = InpFileName + ".$$$";
        }
        if (SourceMode == 0)
        {
            TsvWriter.LoadFromClipboard();
            if (!TsvWriter.SaveToFile(TsvFileName))
            {
                CCommon.Print("Ошибка записи в файл " + TsvFileName);
                return;
            }
        }
        if (SourceMode > 0)
        {
            if (!CCommon.FileExists(InpFileName))
            {
                CCommon.Print("Не найден файл " + InpFileName);
                return;
            }
        }
        if (SourceMode == 1)
        {
            if (TsvWriter.LoadFromCsvFile(InpFileName))
            {
                if (!TsvWriter.SaveToFile(TsvFileName))
                {
                    CCommon.Print("Ошибка записи в файл " + TsvFileName);
                    return;
                }
            }
            else
            {
                CCommon.Print("Ошибка чтения файла " + InpFileName);
                return;
            }
        }
        if (SourceMode == 2)
        {
            if (TsvWriter.LoadFromDifFile(InpFileName))
            {
                if (!TsvWriter.SaveToFile(TsvFileName))
                {
                    CCommon.Print("Ошибка записи в файл " + TsvFileName);
                    return;
                }
            }
            else
            {
                CCommon.Print("Ошибка чтения файла " + InpFileName);
                return;
            }
        }
        //----------------------------------------------------------
        // подсчитываем количество столбцов во входящем файле , а также ширину этих столбцов
        for (I = 0; I < MAX_COLUMNS; I++)
        {
            ColWidth[I] = 0;
        }
        for (I = 0; I < (MAX_LINES * MAX_FILES); I++)
        {
            Cents[I] = 0;
        }
        if (!TextReader.Open(TsvFileName, CAbc.CHARSET_WINDOWS))
        {
            CCommon.Print("Ошибка чтения файла" + TsvFileName);
            TsvFile.Close();
            CCommon.DeleteFile(TsvFileName);
            return;
        }
        if (!TextReader.Read())
        {
            CCommon.Print("Ошибка чтения файла" + TsvFileName);
            TsvFile.Close();
            CCommon.DeleteFile(TsvFileName);
            return;
        }
        for (I = 0; I < 20; I++)
        {
            Tmps    = TextReader.Value;
            SubTmps = Tmps.Split(CCommon.Chr(9));
            if (SubTmps != null)
            {
                if (SubTmps.Length > InpColCount)
                {
                    InpColCount = SubTmps.Length;
                }
                for (ColNumber = 0; ColNumber < SubTmps.Length; ColNumber++)
                {
                    if (SubTmps[ColNumber].Length > ColWidth[ColNumber])
                    {
                        ColWidth[ColNumber] = SubTmps[ColNumber].Length;
                    }
                }
            }
            else
            {
                InpColCount = 0;
            }
            if (!TextReader.Read())
            {
                break;
            }
        }
        TextReader.Close();
        if (InpColCount == 0)
        {
            CCommon.Print("Не получается распознать входные данные ");
            CCommon.DeleteFile(TsvFileName);
            return;
        }
        //----------------------------------------------------------
        // выводим столбцы на экран и запрос пользователю ( помним , что в Csv - файле нумерация столбцов начинается с 1 )
        CConsole.Clear();
        if (!TsvFile.Open(TsvFileName, CAbc.CHARSET_WINDOWS))
        {
            CCommon.Print("Ошибка чтения файла " + TsvFileName);
            return;
        }
        for (I = 0; I < (System.Console.WindowHeight - 1); I++)
        {
            if (!TsvFile.Read())
            {
                break;
            }
            Tmps = "";
            for (ColNumber = 0; ColNumber < InpColCount; ColNumber++)
            {
                Tmps += CCommon.Left(TsvFile[ColNumber + 1], ColWidth[ColNumber]) + "¦";
            }
            if (Tmps.Length > 0)
            {
                if (Tmps.Length < System.Console.WindowWidth - 1)
                {
                    CCommon.Print(Tmps);
                }
                else
                {
                    CCommon.Print(Tmps.Substring(0, System.Console.WindowWidth - 2));
                }
            }
        }
        TsvFile.Close();
        if (!CConsole.GetBoxChoice("Для продолжения обработки нажмите Enter.", "", "Для выхода нажмите Esc. "))
        {
            CCommon.DeleteFile(TsvFileName);
            return;
        }
        CConsole.Clear();
        //----------------------------------------------------------
        // распознавание столбцов во входящем файле ( помним , что в Csv - файле нумерация столбцов начинается с 1 )
        for (ColNumber = 0; ColNumber < InpColCount; ColNumber++)
        {
            CConsole.Clear();
            CCommon.Print("");
            if (!TsvFile.Open(TsvFileName, CAbc.CHARSET_WINDOWS))
            {
                CCommon.Print("Ошибка чтения файла " + TsvFileName);
                TsvFile.Close();
                CCommon.DeleteFile(TsvFileName);
                return;
            }
            for (I = 0; I < (System.Console.WindowHeight - 1); I++)
            {
                if (!TsvFile.Read())
                {
                    break;
                }
                else
                {
                    CCommon.Print(" " + TsvFile[ColNumber + 1]);
                }
            }
            TsvFile.Close();
            if (!AModel.RecognizeColumn(ColNumber + 1))
            {
                CCommon.DeleteFile(TsvFileName);
                return;
            }
        }
        CConsole.Clear();
        //----------------------------------------------------------
        // запрашиваем у пользователя значения постоянных полей
        AModel.AskFixedValues();
        //----------------------------------------------------------
        // подсчитываем количество строк и общую сумму по входному файлу
        TotalLines = 0;
        TotalCents = 0;
        if (!TsvFile.Open(TsvFileName, CAbc.CHARSET_WINDOWS))
        {
            CCommon.Print("Ошибка чтения файла " + TsvFileName);
            TsvFile.Close();
            CCommon.DeleteFile(TsvFileName);
            return;
        }
        while (TsvFile.Read())
        {
            if (IsLineEmpty())
            {
                continue;
            }
            Cents[TotalLines] = CCommon.CLng(GetColValue(CSepAFileInfo.L_SUMA).Trim());
            TotalCents       += Cents[TotalLines];
            TotalLines++;
        }
        TsvFile.Close();
        //-----------------------------------------------------------
        // запрашиваем у пользователя имя файла , в который будет записан результат
        string ShortName = ConstPartOfName;

        CCommon.Write("Краткое имя результирующего файла ( " + ShortName + " ) : ");
        ShortName = CCommon.Input().Trim();
        if (ShortName.Length > 0)
        {
            ConstPartOfName = CCommon.Left(ShortName, 8);
        }
        //-----------------------------------------------------------
        // сверяем с пользователем общее количество строк и общую сумму
        if (!CConsole.GetBoxChoice(" Всего строк : " + CCommon.Right(TotalLines.ToString(), 11)
                                   , " Общая сумма : " + CCommon.StrN(TotalBucks, 11).Replace(",", ".")
                                   , "_________________________________"
                                   , "Для продолжения нажмите Enter."
                                   , "Для выхода - Esc. "
                                   )
            )
        {
            CCommon.DeleteFile(TsvFileName);
            return;
        }
        CConsole.Clear();
        //-----------------------------------------------------------
        // записываем результатов работы программы в файлы
        if (!TsvFile.Open(TsvFileName, CAbc.CHARSET_WINDOWS))
        {
            CCommon.Print("Ошибка чтения файла " + TsvFileName);
            TsvFile.Close();
            CCommon.DeleteFile(TsvFileName);
            return;
        }
        BatchNum = 0;
        //
        while (TotalLines > 0)
        {
            AFileName = GetAFileName();
            if (!AFile.Create(AFileName, CAbc.CHARSET_DOS))
            {
                CCommon.Print("Ошибка создания файла " + AFileName);
                break;
            }
            else
            {
                CCommon.Print(AFileName);
            }
            //
            AFile.Head[CSepAFileInfo.H_EMPTYSTR]      = "";
            AFile.Head[CSepAFileInfo.H_CRLF1]         = CAbc.CRLF;
            AFile.Head[CSepAFileInfo.H_FILENAME]      = CCommon.Left(AFileName, 12);
            AFile.Head[CSepAFileInfo.H_DATE]          = Now_Date_Str;
            AFile.Head[CSepAFileInfo.H_TIME]          = Now_Time_Str;
            AFile.Head[CSepAFileInfo.H_STRCOUNT]      = TotalLinesInBatch().ToString();
            AFile.Head[CSepAFileInfo.H_TOTALDEBET]    = "0";
            AFile.Head[CSepAFileInfo.H_TOTALCREDIT]   = TotalCentsInBatch().ToString();
            AFile.Head[CSepAFileInfo.H_DES]           = "0";
            AFile.Head[CSepAFileInfo.H_DES_ID]        = "UIAB00";
            AFile.Head[CSepAFileInfo.H_DES_OF_HEADER] = "";
            AFile.Head[CSepAFileInfo.H_CRLF2]         = CAbc.CRLF;
            //
            if (!AFile.WriteHeader())
            {
                CCommon.Print("Ошибка записи файла " + AFileName);
                AFile.Close();
                break;
            }
            //
            for (ALineNumber = 0; ALineNumber < TotalLinesInBatch(); ALineNumber++)
            {
                do
                {
                    if (!TsvFile.Read())
                    {
                        break;
                    }
                }while   (IsLineEmpty());
                for (AFieldNumber = 0; AFieldNumber < AModel.TotalFields; AFieldNumber++)
                {
                    AFile.Line[AFieldNumber] = GetColValue(AFieldNumber);
                }
                if (!AFile.WriteLine())
                {
                    CCommon.Print("Ошибка записи файла " + AFileName);
                    break;
                }
                AModel.IncNumber();
            }
            AFile.Close();
            BatchNum++;
            TotalLines -= TotalLinesInBatch();
        }
        TsvFile.Close();
        CCommon.DeleteFile(TsvFileName);
    }
예제 #4
0
    public static void Main()
    {
        Err.LogToConsole();
        int          ErcDate          = 0;
        bool         UseErcRobot      = false;                                  // подключаться ли к серверу под логином ErcRobot
        string       FileName         = CAbc.EMPTY;
        const string ROBOT_LOGIN      = "******";
        const string ROBOT_PWD        = "35162987";
        const string TASK_CODE        = "OpenGate";
        string       StatDir          = null;
        string       DataBase         = null;
        string       ServerName       = null;
        string       ScroogeDir       = null;
        string       SettingsDir      = null;
        string       ConnectionString = null;

        if (System.Console.BufferHeight > 50)
        {
            System.Console.WindowHeight = 25;
            System.Console.BufferHeight = 25;
        }
        System.Console.Title           = "Загрузка в `Скрудж` платежей из А-файлов ";
        System.Console.BackgroundColor = 0;
        System.Console.Clear();
        CCommon.Print("", "  Загрузка в `Скрудж` платежей из А-файлов. Версия 3.03 от 29.08.2019г.");
        if (CCommon.ParamCount() < 2)
        {
            CCommon.Print("  В строке запуска нужно указатьть один из режимов :");
            CCommon.Print("  /A   диалоговый режим, для загрузки файлов для универсального шлюза ;");
            CCommon.Print("  /С   проверка одного файла, имя которого задано далее в строке ;");
            CCommon.Print("  /D   `браковка` заготовок из файла, имя которого задано далее в строке ;");
            CCommon.Print("  /S   пакетный режим  , для загрузки файлов от САКР ( маска !A??_*.* ) ;");
            CCommon.Print("  /U   диалоговый режим, для загрузки файлов от ЕРЦ  ( кроме !A??_*.* ) ;");
            CCommon.Print("  /Z   диалоговый режим, для загрузки файлов зарплаты( маска !A*.Z??  ) .");
            CCommon.Print("", "  /R   дополнительная опция - подключаться под пользователем ErcRobot .");
            return;
        }
        if (CCommon.ParamCount() == 0)
        {
            return;
        }
        for (int i = 1; i < CCommon.ParamCount(); i++)
        {
            if (CAbc.ParamStr[i].Trim().ToUpper() == "/R")
            {
                UseErcRobot          = true;
                System.Console.Title = System.Console.Title + " * ";
            }
            else
            if (CAbc.ParamStr[i].Trim().Substring(0, 1) == "/")
            {
                WorkMode = CCommon.Upper(CAbc.ParamStr[i]).Trim();
            }
            else
            {
                FileName = CAbc.ParamStr[i].Trim();
            }
        }
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        // Вычитываем настройки "Скрудж-2"
        ErcAFile       = new   CErcAFile();
        ErcEFile       = new   CErcEFile();
        Scrooge2Config = new   CScrooge2Config();
        if (!Scrooge2Config.IsValid)
        {
            CCommon.Print(Scrooge2Config.ErrInfo);
            return;
        }
        ScroogeDir  = (string)Scrooge2Config["Root"];
        SettingsDir = (string)Scrooge2Config["Common"];
        ServerName  = (string)Scrooge2Config["Server"];
        DataBase    = (string)Scrooge2Config["DataBase"];
        if (ScroogeDir == null)
        {
            CCommon.Print("  Не найдена переменная `Root` в настройках `Скрудж-2` ");
            return;
        }
        if (ServerName == null)
        {
            CCommon.Print("  Не найдена переменная `Server` в настройках `Скрудж-2` ");
            return;
        }
        if (DataBase == null)
        {
            CCommon.Print("  Не найдена переменная `Database` в настройках `Скрудж-2` ");
            return;
        }
        ScroogeDir = ScroogeDir.Trim();
        if (SettingsDir != null)
        {
            SettingsDir = ScroogeDir + "\\" + SettingsDir;
        }
        ServerName = ServerName.Trim();
        DataBase   = DataBase.Trim();
        CCommon.Print("  Беру настройки `Скрудж-2` здесь :  " + ScroogeDir);
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        // Подключаемся к базе данных
        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())
        {
            /* CCommon.Print("  Сервер        :  " + ServerName ) */;
        }
        else
        {
            CCommon.Print("  Ошибка подключения к серверу !");
            return;
        }
        Command = new   CCommand(Connection);
        if (Command.IsOpen())
        {
            /* CCommon.Print("  База данных   :  " + DataBase ) */;
        }
        else
        {
            CCommon.Print("  Ошибка подключения к базе данных !");
            return;
        }
        System.Console.Title = System.Console.Title + " | " + ServerName + "." + DataBase;
        // - - - - - - - - - - - - - - - - -
        // считываем настройки шлюза в ЕРЦ
        AppSettings = new   CAppSettings(Connection);
        ErcDate     = ( int )CCommon.IsNull(Command.GetScalar(" exec  dbo.pMega_OpenGate_Days;7 "), (int)0);
        if (ErcDate < 1)
        {
            CCommon.Print(" Ошибка определения даты текущего рабочего дня. ");
            return;
        }
        switch (WorkMode)
        {
        case    WorkModes.CHECK:
        {
            SeanceNum = 1;
            ErcConfig = new   COpenwayConfig();
            ErcConfig.Open(ErcDate);
            InputDir = (string)ErcConfig["InputDir"];
            break;
        }

        case    WorkModes.DISABLE:
        {
            SeanceNum = 1;
            ErcConfig = new   COpenwayConfig();
            ErcConfig.Open(ErcDate);
            InputDir = (string)ErcConfig["InputDir"];
            break;
        }

        case    WorkModes.SALARY:
        {
            SeanceNum = ( int )CCommon.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4  @TaskCode='ErcGate',@ParamCode='NumSeance' "), (int)0);
            ErcConfig = new   CSalaryConfig();
            ErcConfig.Open(ErcDate);
            InputDir = (string)ErcConfig["SalaryDir"] + "\\IN\\";
            break;
        }

        case    WorkModes.OPENGATE:
        {
            SeanceNum = ( int )CCommon.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4  @TaskCode='OpenGate',@ParamCode='NumSeance' "), (int)0);
            ErcConfig = new   COpenwayConfig();
            ErcConfig.Open(ErcDate);
            InputDir = (string)ErcConfig["InputDir"];
            break;
        }

        case    WorkModes.SAKR:
        case    WorkModes.ERC:
        {
            SeanceNum = ( int )CCommon.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4  @TaskCode='ErcGate',@ParamCode='NumSeance' "), (int)0);
            ErcConfig = new   CErcConfig();
            ErcConfig.Open(ErcDate);
            InputDir = (string)ErcConfig["InputDir"];
            break;
        }

        default:
        {
            CCommon.Print("", "Ошибка в строке параметров программы ! ");
            return;

            break;
        }
        }
        if (!ErcConfig.IsValid())
        {
            CCommon.Print("  Ошибка чтения настроек программы из " + ErcConfig.Config_FileName());
            System.Console.WriteLine(ErcConfig.ErrInfo());
            return;
        }
        if (SeanceNum < 1)
        {
            CCommon.Print(" Ошибка определения номера сеанса ");
            return;
        }
        TodayDir = (string)ErcConfig.TodayDir();
        TmpDir   = (string)ErcConfig.TmpDir();
        StatDir  = (string)ErcConfig.StatDir();
        if ((TodayDir == null) || (InputDir == null))
        {
            CCommon.Print("  Ошибка чтения настроек программы из " + ErcConfig.Config_FileName());
            return;
        }
        TodayDir = TodayDir.Trim();
        InputDir = InputDir.Trim();
        if ((TodayDir == "") || (InputDir == ""))
        {
            CCommon.Print("  Ошибка чтения настроек программы из " + ErcConfig.Config_FileName());
            return;
        }
        if (!CCommon.DirExists(StatDir))
        {
            CCommon.MkDir(StatDir);
        }
        if (!CCommon.SaveText(StatDir + "\\" + "test.dat", "test.dat", CAbc.CHARSET_DOS))
        {
            CCommon.Print(" Ошибка записи в каталог " + StatDir);
            return;
        }
        CCommon.DeleteFile(StatDir + "\\" + "test.dat");
        LogFileName = ErcConfig.LogDir() + "\\"
                      + ((WorkMode == WorkModes.CHECK)
                                        ?       "W" + CCommon.Hour(CCommon.Now()).ToString("00") + CCommon.Minute(CCommon.Now()).ToString("00") + CCommon.Second(CCommon.Now()).ToString("00")
                                        :       "SEANS" + SeanceNum.ToString("000")
                         )
                      + ".TXT";
        CCommon.Print("  Беру настройки шлюза здесь :  " + ErcConfig.Config_FileName());
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        // основной блог работы программы
        switch (WorkMode)
        {
        // - - - - - - - - - - - - - - - - - - - - - - -
        // Загружаем сторонние платежи
        case    WorkModes.SAKR:
        {
            foreach (string FName in CCommon.GetFileList(InputDir + "!A??_*.*"))
            {
                if (FName != null)
                {
                    if (FileName.Trim() != "")
                    {
                        ProcessAFile(Command, FileName, false);
                    }
                }
            }
            // Загружаем допреквизиты
            foreach (string FName in CCommon.GetFileList(InputDir + "!E*.*"))
            {
                if (FName != null)
                {
                    if (FName.Trim() != "")
                    {
                        if (ErcEFile.Load(Command, FileName))
                        {
                            CCommon.MoveFile(FileName, TodayDir + CAbc.SLASH + CCommon.GetFileName(FileName));
                        }
                    }
                }
            }
            // Завершающие действия
            CCommon.Print("  Пересчет промежуточных данных ...");
            Command.Execute("exec dbo.pMega_OpenGate_PalvisBind ");
            break;
        }

        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        // Загружаем коммунальные платежи из файла, который выбирает пользователь
        case    WorkModes.ERC:
        {
            FileName = SelectFileName(InputDir + "!A*.*");
            while (FileName != "")
            {
                if (ErcAFile.UserAccepted(FileName))
                {
                    ProcessAFile(Command, FileName, true);
                }
                FileName = SelectFileName(InputDir + "!A*.*");
            }
            break;
        }

        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        // Загружаем зарплатные платежи из файла, который выбирает пользователь
        case    WorkModes.SALARY:
        {
            FileName = SelectFileName(InputDir + "!A*.Z*");
            while (FileName != "")
            {
                if (ErcAFile.UserAccepted(FileName))
                {
                    ProcessAFile(Command, FileName, true);
                }
                FileName = SelectFileName(InputDir + "!A*.*");
            }
            break;
        }

        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        // Загружаем платежи по универсальному шлюзу из файла, который выбирает пользователь
        case    WorkModes.OPENGATE:
        {
            if (FileName != "")
            {
                if (CCommon.FileExists(FileName))
                {
                    if (ErcAFile.UserAccepted(FileName))
                    {
                        ProcessAFile(Command, FileName, true);
                    }
                }
            }
            else
            {
                FileName = SelectFileNameGUI(SettingsDir, InputDir);
                if (FileName != "")
                {
                    if (ErcAFile.UserAccepted(FileName))
                    {
                        ProcessAFile(Command, FileName, true);
                        if (CCommon.FileExists(FileName))
                        {
                            CCommon.DeleteFile(FileName);
                        }
                    }
                }
            }
            break;
        }

        // - - - - - - - - - - - -
        // Только проверка файла
        case    WorkModes.CHECK:
        {
            string AboutError = "";
            if (FileName.Length > 0)
            {
                if (!CCommon.FileExists(FileName))
                {
                    CCommon.Print("", "Не найден файл " + FileName);
                    FileName = "";
                }
            }
            if (FileName != "")
            {
                Err.LogToConsole();
                AboutError = ErcAFile.Check(Command, FileName);
                CConsole.Clear();
                if (AboutError == "")
                {
                    CCommon.Print("", " " + ErcAFile.String_Count.ToString() + " строк на общую суммму "
                                  + CCommon.StrN(ErcAFile.Total_Credit, 11).Replace(",", "."), ""
                                  , " Ошибок не найдено.");
                }
                else
                {
                    CCommon.AppendText(LogFileName, CCommon.Now() + "   " + CCommon.Upper(CCommon.GetUserName()) + "  проверяет файл "
                                       + CCommon.GetFileName(FileName) + CAbc.CRLF + CAbc.CRLF + AboutError + CAbc.CRLF, CAbc.CHARSET_WINDOWS);
                    CCommon.Print(AboutError);
                }
            }
            else
            {
                FileName = SelectFileNameGUI(SettingsDir, InputDir);
                if (FileName != "")
                {
                    if (ErcAFile.UserAccepted(FileName))
                    {
                        AboutError = ErcAFile.Check(Command, FileName);
                        CConsole.Clear();
                        if (AboutError == "")
                        {
                            CCommon.Print("", " " + ErcAFile.String_Count.ToString() + " строк на общую суммму "
                                          + CCommon.StrN(ErcAFile.Total_Credit, 11).Replace(",", "."), ""
                                          , " Ошибок не найдено.");
                        }
                        else
                        {
                            CCommon.AppendText(LogFileName, CCommon.Now() + "   " + CCommon.Upper(CCommon.GetUserName()) + "  проверяет файл "
                                               + CCommon.GetFileName(FileName) + CAbc.CRLF + CAbc.CRLF + AboutError + CAbc.CRLF, CAbc.CHARSET_WINDOWS);
                            CCommon.Print(AboutError);
                        }
                    }
                    if (CCommon.FileExists(FileName))
                    {
                        CCommon.DeleteFile(FileName);
                    }
                }
            }
            break;
        }

        // - - - - - - - - - - - - - - - - - -
        // `запретить` заготовки из А-файла
        case    WorkModes.DISABLE:
        {
            CConsole.Clear();
            Err.LogToConsole();
            if (CCommon.ParamCount() > 2)
            {
                FileName = CAbc.ParamStr[2].Trim();
            }
            if (FileName == "")
            {
                CCommon.Print("", "Не задано имя файла !");
            }
            else
            {
                FileName = CCommon.GetFileName(FileName);
                if (Command.Execute("exec dbo.pMega_OpenGate_Disable @TaskCode='OpenGate',@FileName='" + FileName + "'"))
                {
                    CCommon.Print("", "заготовки из файла  " + FileName + "  запрещены .");
                }
                else
                {
                    CCommon.Print("", "Ошибка выполнения команды на сервере !");
                }
            }
            break;
        }
        }
        Command.Close();
        Connection.Close();
    }
예제 #5
0
    //  - - - - - - - - - - - - - - - - - - - - - - - - - -
    static void    ProcessAFile(CCommand Command, string FileName, bool IsCheckNeeded)
    {
        string ShortFileName = null;
        string BranchCode    = null;
        string TmpFileName   = null;
        string AboutError    = null;
        bool   Result        = false;
        byte   SavedColor    = CConsole.BoxColor;

        if (FileName == null)
        {
            return;
        }
        if (FileName.Trim() == "")
        {
            return;
        }
        ShortFileName = CCommon.GetFileName(FileName);
        CCommon.AppendText(LogFileName, CCommon.Now() + "   " + CCommon.Upper(CCommon.GetUserName()) + "  загружает файл " + ShortFileName + CAbc.CRLF, CAbc.CHARSET_WINDOWS);

        if (ShortFileName.IndexOf("_") < 0)
        {
            BranchCode = "";
        }
        else
        {
            BranchCode = ShortFileName.Substring(2, 2);
        }

        TmpFileName = TodayDir + CAbc.SLASH + ShortFileName;
        if (!CCommon.FileExists(TmpFileName))
        {
            CCommon.CopyFile(FileName, TmpFileName);
        }
        if (!CCommon.FileExists(TmpFileName))
        {
            return;
        }
        TmpFileName = TmpDir + CAbc.SLASH
                      + CCommon.Right("0" + CCommon.Hour(CCommon.Clock()).ToString(), 2)
                      + CCommon.Right("0" + CCommon.Minute(CCommon.Clock()).ToString(), 2)
                      + CCommon.Right("0" + CCommon.Second(CCommon.Clock()).ToString(), 2);
        if (!CCommon.DirExists(TmpFileName))
        {
            CCommon.MkDir(TmpFileName);
        }
        TmpFileName = TmpFileName + CAbc.SLASH + ShortFileName;
        if (CCommon.FileExists(TmpFileName))
        {
            CCommon.DeleteFile(TmpFileName);
        }
        if (CCommon.FileExists(TmpFileName))
        {
            CConsole.GetBoxChoice("", "Ошибка при удалении файла ", TmpFileName, "", " Для выхода нажмите Esc.");
            return;
        }
        CCommon.CopyFile(FileName, TmpFileName);
        if (!CCommon.FileExists(TmpFileName))
        {
            CConsole.GetBoxChoice("", "Ошибка при создании файла ", TmpFileName, "", " Для выхода нажмите Esc.");
            return;
        }
        Err.LogTo(LogFileName);
        CCommon.DeleteFile(FileName);
        CConsole.BoxColor = SavedColor;
        if (IsCheckNeeded)
        {
            AboutError = ErcAFile.Check(Command, TmpFileName);
            CConsole.Clear();
            if (AboutError != null)
            {
                if (AboutError.Trim() != "")
                {
                    CCommon.AppendText(LogFileName, AboutError + CAbc.CRLF, CAbc.CHARSET_WINDOWS);
                    CCommon.Print(AboutError);
                    CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE;
                    if (!CConsole.GetBoxChoice("Внимание ! При проверке " + ShortFileName + " обнаружены ошибки !"
                                               , "", "Для отмены загрузки нажмите Esc , для продолжения - Enter"
                                               )
                        )
                    {
                        CCommon.CopyFile(TmpFileName, FileName);
                        CCommon.Print(AboutError);
                        CConsole.BoxColor = SavedColor;
                        return;
                    }
                }
            }
        }
        CConsole.BoxColor = SavedColor;
        if (WorkMode == WorkModes.OPENGATE)
        {
            Result = ErcAFile.Load(Command, TmpFileName, BranchCode, "OpenGate");
            if (Result)
            {
                // добавление в PayRoll информации о файле
                CConsole.BoxColor = SavedColor;
                CConsole.Clear();
                CConsole.ShowBox("", " Подождите...", "");
                Command.Execute(" exec pMega_OpenGate_PayRoll;2 @FileName='" + CCommon.GetFileName(TmpFileName) + "'");
            }
        }
        else
        {
            Result = ErcAFile.Load(Command, TmpFileName, BranchCode, "ErcGate");
        }
        if (Result)
        {
            CCommon.AppendText(LogFileName, CCommon.Now() + "   загрузка закончена." + CAbc.CRLF, CAbc.CHARSET_WINDOWS);
        }
        else
        {
            CCommon.CopyFile(TmpFileName, FileName);
            CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE;
            CConsole.GetBoxChoice("", "  При загрузке " + ShortFileName + " возникли ошибки !", "");
        }
        CConsole.BoxColor = SavedColor;
        CConsole.Clear();
        Err.LogToConsole();
    }
예제 #6
0
    public static void Main()
    {
        const bool DEBUG            = false;
        int        WorkMode         = 0;                                 // 1 = выгружать B ; 2 = выгружать V
        const int  WORK_MODE_B      = 1;                                 // для WorkMode : 1 = выгружать B
        const int  WORK_MODE_V      = 2;                                 // для WorkMode : 2 = выгружать V
        int        DayStatus        = 0;                                 // &1 = стоп по B ; &2 = стоп по V
        int        ErcDate          = CCommon.Today();
        string     TmpDir           = null;
        string     StatDir          = null;
        string     TodayDir         = null;
        string     OutputDir        = null;
        string     DataBase         = null;
        string     ServerName       = null;
        string     ScroogeDir       = null;
        string     LogFileName      = null;
        string     SimpleFileName   = null;
        string     ConfigFileName   = null;
        string     ConnectionString = null;

        Err.LogToConsole();
        CCommon.Print("", " Создание файлов для ЕРЦ. Версия 3.02 от 23.05.2019г.");

        if (!DEBUG)
        {
            if (CCommon.ParamCount() < 2)
            {
                CCommon.Print(" Режим работы программы (задаются в строке запуска программы):");
                CCommon.Print("        /E      -  выполнить выгрузку файлов для ЕРЦ .");
                CCommon.Print(" Примеры запуска программы  : ");
                CCommon.Print("        ErcExport  /E");
                CCommon.Print("        ErcExport  /E  2019/05/20");
                return;
            }
            if (CCommon.Upper(CAbc.ParamStr[1]).Trim() != "/E")
            {
                CCommon.Print(" Ошибка ! Неправильный режим работы  - " + CAbc.ParamStr[1]);
                return;
            }
            if (CCommon.ParamCount() > 2)
            {
                ErcDate = CCommon.GetDate(CAbc.ParamStr[2].Trim());
                if (ErcDate < 10000)
                {
                    CCommon.Print(" Ошибка ! Неправильная дата - " + CAbc.ParamStr[2]);
                    return;
                }
            }
        }
        else
        {
            CCommon.Print("--- DEBUG ---");
        }
        CCommon.Print(" Рабочая дата " + CCommon.StrD(ErcDate, 10, 10));

        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Scrooge2Config = new   CScrooge2Config();
        if (!Scrooge2Config.IsValid)
        {
            CCommon.Print(Scrooge2Config.ErrInfo);
            return;
        }

        ScroogeDir = (string)Scrooge2Config["Root"];
        ServerName = (string)Scrooge2Config["Server"];
        DataBase   = (string)Scrooge2Config["DataBase"];
        if (ScroogeDir == null)
        {
            CCommon.Print("  Не найдена переменная `Root` в настройках `Скрудж-2` ");
            return;
        }
        if (ServerName == null)
        {
            CCommon.Print("  Не найдена переменная `Server` в настройках `Скрудж-2` ");
            return;
        }
        if (DataBase == null)
        {
            CCommon.Print("  Не найдена переменная `Database` в настройках `Скрудж-2` ");
            return;
        }
        CCommon.Print("  Беру настройки `Скрудж-2` здесь :  " + ScroogeDir);

        // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ConnectionString = "Server=" + ServerName
                           + ";Database=" + DataBase
                           + ";Integrated Security=TRUE;"
        ;
        Connection1 = new CConnection(ConnectionString);
        Connection2 = new CConnection(ConnectionString);

        if (Connection1.IsOpen())
        {
            CCommon.Print("  Сервер        :  " + ServerName);
            CCommon.Print("  База данных   :  " + DataBase + CAbc.CRLF);
        }
        else
        {
            CCommon.Print(CAbc.CRLF + "  Ошибка подключения к серверу !");
            return;
        }

        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        CCommand Command = new   CCommand(Connection1);

        DayStatus = ( int )CCommon.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;8 @TaskCode = 'ErcGate' , @DayDate = " + ErcDate.ToString()), (int)0);

        switch ((DayStatus & 3))
        {
        case  0: {                                      // разрешена отправка и B и V
            WorkMode = WORK_MODE_B;                     // отправлять B
            break;
        }

        case  1: {                                      // запрещена отправка B ; разрешена отправка V
            WorkMode = WORK_MODE_V;                     // отправлять V
            break;
        }

        case  2: {                                      // разрешена отправка B ; запрещена отправка V
            WorkMode = WORK_MODE_B;                     // отправлять B
            break;
        }

        case  3: {
            CCommon.Print(" На " + CCommon.StrD(ErcDate, 10, 10) + " отправка пачек B и V завершена (см. признак текущего дня).");
            Connection1.Close();
            Connection2.Close();
            return;

            break;
        }
        }

        SeanceNum = ( int )CCommon.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4  @TaskCode = 'ErcGate' , @ParamCode = 'NumSeance'  , @DayDate = " + ErcDate.ToString()), (int)0);
        if (WorkMode == WORK_MODE_B)
        {
            BFileNum = ( int )CCommon.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4  @TaskCode = 'ErcGate' , @ParamCode = 'NumOutFile' , @DayDate = " + ErcDate.ToString()), (int)0);
            CCommon.Print(" Выполняется формирование B-файлов ");
        }
        else
        {
            CCommon.Print(" Выполняется формирование V и W -файлов ");
        }

        Command.Close();
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ConfigFileName = ScroogeDir + CAbc.SLASH + "EXE" + CAbc.SLASH + "GLOBAL.ERC";
        ErcConfig      = new CErcConfig();
        ErcConfig.Open(ErcDate);
        if (!ErcConfig.IsValid())
        {
            CCommon.Print("  Ошибка чтения настроек из файла " + ConfigFileName);
            System.Console.WriteLine(ErcConfig.ErrInfo());
            Connection1.Close();
            Connection2.Close();
            return;
        }
        TodayDir  = (string)ErcConfig.TodayDir();
        StatDir   = (string)ErcConfig.StatDir();
        TmpDir    = (string)ErcConfig.TmpDir();
        OutputDir = (string)ErcConfig["OutputDir"];
        if ((TodayDir == null) || (OutputDir == null))
        {
            CCommon.Print("  Ошибка чтения настроек из файла " + ConfigFileName);
            Connection1.Close();
            Connection2.Close();
            return;
        }
        TodayDir  = TodayDir.Trim();
        OutputDir = OutputDir.Trim();
        StatDir   = StatDir.Trim();
        if ((TodayDir == "") || (OutputDir == "") || (StatDir == ""))
        {
            CCommon.Print("  Ошибка чтения настроек из файла " + ConfigFileName);
            Connection1.Close();
            Connection2.Close();
            return;
        }
        if (!CCommon.DirExists(StatDir))
        {
            CCommon.MkDir(StatDir);
        }
        if (!CCommon.SaveText(StatDir + "\\" + "test.dat", "test.dat", CAbc.CHARSET_DOS))
        {
            CCommon.Print(" Ошибка записи в каталог " + StatDir);
            Connection1.Close();
            Connection2.Close();
            return;
        }
        CCommon.DeleteFile(StatDir + "\\" + "test.dat");
        CCommon.Print("  Беру настройки шлюза здесь :  " + ConfigFileName);

        // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        TmpDir = TmpDir + "\\" + SeanceNum.ToString("000000");
        CCommon.MkDir(TmpDir);
        if (!CCommon.SaveText(TmpDir + "\\" + "test.dat", "test.dat", CAbc.CHARSET_DOS))
        {
            CCommon.Print("  Ошибка записи в каталог " + TmpDir);
            Connection1.Close();
            Connection2.Close();
        }
        LogFileName = ErcConfig.LogDir() + "\\SE" + SeanceNum.ToString("000000") + ".TXT";
        if (!CCommon.AppendText(LogFileName, CCommon.Now() + " , " + CCommon.Upper(CCommon.GetUserName()) + CAbc.CRLF, CAbc.CHARSET_DOS))
        {
            CCommon.Print("  Ошибка записи в файл " + LogFileName);
            Connection1.Close();
            Connection2.Close();
        }

        Err.LogTo(LogFileName);

        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        //	Отправка B
        if (WorkMode == WORK_MODE_B)
        {
            if (!WriteBFiles(ErcDate, TmpDir))
            {
                CCommon.Print("  Ошибка записи B-файлов!");
            }
        }

        // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        //	Отправка V
        if (WorkMode == WORK_MODE_V)
        {
            WriteVFiles(ErcDate, TmpDir, 0);
            WriteVFiles(ErcDate, TmpDir, 1);
            Command = new   CCommand(Connection1);
            if (!Command.Execute(" exec dbo.pMega_OpenGate_Days;9  @TaskCode = 'ErcGate' , @DayDate = " + ErcDate.ToString()))
            {
                CCommon.Print("  Ошибка установки запрета на отправку V-файла!");
                CCommon.AppendText(LogFileName, "  Ошибка установки запрета на отправку V-файла!", CAbc.CHARSET_DOS);
                CCommon.AppendText(LogFileName, CAbc.CRLF, CAbc.CHARSET_DOS);
                Connection1.Close();
                Connection2.Close();
                return;
            }
            Command.Close();
        }

        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        foreach (string ResultFile in CCommon.GetFileList(TmpDir + "\\" + "!*.*"))
        {
            if (ResultFile != null)
            {
                SimpleFileName = CCommon.GetFileName(ResultFile);
                CCommon.CopyFile(ResultFile, TodayDir + "\\" + SimpleFileName);
                CCommon.CopyFile(ResultFile, OutputDir + "\\" + SimpleFileName);
                CCommon.AppendText(LogFileName, "Записываю файл " + SimpleFileName, CAbc.CHARSET_DOS);
                CCommon.Print("  Записываю файл " + SimpleFileName);
            }
        }
        CCommon.AppendText(LogFileName, CAbc.CRLF, CAbc.CHARSET_DOS);
        Connection1.Close();
        Connection2.Close();
    }
예제 #7
0
파일: Day.cs 프로젝트: shkumat/mgb_day
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    public static void    Main()
    {
        const bool DEBUG                = false;
        CParam     Param                = new   CParam();
        int        Choice               = 0;
        bool       Result               = false;
        byte       SavedColor           = 7;
        string     OutputDir            = CAbc.EMPTY;
        string     ScroogeDir           = CAbc.EMPTY;
        string     ServerName           = CAbc.EMPTY;
        string     DataBase             = CAbc.EMPTY;
        string     LogFileName          = CAbc.EMPTY;
        string     UnsolverBillsCmdText = CAbc.EMPTY;
        int        UnsolvedBillsExists  = 0;

        string[] Titles       = { "ОТКРЫТИЕ ДНЯ", "ЗАКРЫТИЕ ДНЯ" };
        string[] LogFileNames = { "dayopen.log", "dayclose.log" };
        string   NOW_STR      = CCommon.StrD(CCommon.Today(), 10, 10).Substring(6)
                                + CCommon.StrD(CCommon.Today(), 10, 10).Substring(2, 4)
                                + CCommon.StrD(CCommon.Today(), 10, 10).Substring(0, 2);

        Err.LogToConsole();
        CConsole.Clear();
        CCommon.Print(" Оболочка открытия и закрытия дня в `Скрудже`. Версия 3.13 от 02.10.2018г.", "");
        if (DEBUG)
        {
            Mode = 1;
        }
        else
        if (CCommon.IsEmpty(Param["Mode"]))
        {
            CCommon.Print("Не указан режим работы программы !");
        }
        else
        {
            switch (Param["Mode"].ToUpper())
            {
            case    "OPEN": {
                Mode = 1;
                break;
            }

            case    "CLOSE": {
                Mode = 2;
                break;
            }

            default: {
                CCommon.Print("Неверно указан режим работы программы !");
                break;
            }
            }
        }
        if ((Mode != 1) && (Mode != 2))
        {
            return;
        }
        if ((Mode == 2) && (!CCommon.DirExists("Z:\\")))
        {
            SavedColor        = CConsole.BoxColor;
            CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE;
            CConsole.ShowBox("", "Не подключен Z:\\", "");
            CConsole.ClearKeyboard();
            CConsole.ReadChar();
            CConsole.BoxColor = SavedColor;
            CConsole.Clear();
            CConsole.ShowCursor();
        }
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        //	Запрос пользователю на ввод даты дня, который открывается или закрывается
        while (DayDate == 0)
        {
            switch (Mode)
            {
            case 1: {
                CCommon.Write("Какую дату открываем ? ( " + NOW_STR.Replace("/", ".") + " ) ");
                break;
            }

            default: {
                CCommon.Write("Какую дату закрываем ? ( " + NOW_STR.Replace("/", ".") + " ) ");
                break;
            }
            }
            Answer = CCommon.Input().Trim();
            if (Answer == "")
            {
                DayDate = CCommon.Today();
            }
            else
            {
                DayDate = CCommon.GetDate(Answer);
            }
        }
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Scrooge2Config = new   CScrooge2Config();
        if (!Scrooge2Config.IsValid)
        {
            CCommon.Print(Scrooge2Config.ErrInfo);
            return;
        }
        ScroogeDir = (string)Scrooge2Config["Root"];
        OutputDir  = (string)Scrooge2Config["Output"];
        ServerName = (string)Scrooge2Config["Server"];
        DataBase   = (string)Scrooge2Config["DataBase"];
        if (ScroogeDir == null)
        {
            CCommon.Print("  Не найдена переменная `Root` в настройках `Скрудж-2` ");
            return;
        }
        if (ServerName == null)
        {
            CCommon.Print("  Не найдена переменная `Server` в настройках `Скрудж-2` ");
            return;
        }
        if (DataBase == null)
        {
            CCommon.Print("  Не найдена переменная `Database` в настройках `Скрудж-2` ");
            return;
        }
        CCommon.Print(" Беру настройки `Скрудж-2` здесь :  " + ScroogeDir);
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ConnectionString = "Server=" + ServerName
                           + ";Database=" + DataBase
                           + ";Integrated Security=TRUE;";
        Connection = new CConnection(ConnectionString);
        if (Connection.IsOpen())
        {
            CCommon.Print(" Сервер " + ServerName);
            CCommon.Print(" База   " + DataBase + CAbc.CRLF);
        }
        else
        {
            CCommon.Print(CAbc.CRLF + "  Ошибка подключения к серверу !");
            return;
        }
        System.Console.Title = "  " + Titles[Mode - 1] + "             |   " + ServerName + "." + DataBase;
        Command = new   CCommand(Connection);
        int    IsFullAccess   = ( int )CCommon.IsNull(Command.GetScalar(" select  dbo.Fn_IsFullAccess( DEFAULT ) "), (int)0);
        string InfNBU_OutPath = ( string )CCommon.IsNull(Command.GetScalar(" exec dbo.Mega_Day_Open;5  @Mode=2 ; "), (string)CAbc.EMPTY);

        if (Mode == 2)
        {
            // Записываю в историю логин пользователя, который закрывает день
            Command.Execute(" exec  dbo.Mega_Day_Close;12  @DayDate = " + DayDate.ToString() + " , @UserCode = '" + UserCode + "' ");
            // Проверка : имеются ли непроведенные документы ?
            UnsolverBillsCmdText = " If Exists ( select 1 from dbo.Mega_SV_WaitingBills with (NoLock) where  (DayDate=" + DayDate.ToString() + " )  and ((PermitFlag & 255 )!=255) and ((ProcessFlag & 3)!=3) ) select Convert(Integer,1) else select Convert(Integer,0) ";
            UnsolvedBillsExists  = ( int )CCommon.IsNull(Command.GetScalar(UnsolverBillsCmdText), (int)0);
        }
        Command.Close();
        Connection.Close();
        if (IsFullAccess < 1)
        {
            CCommon.Print(CAbc.CRLF + "  Для работы программы пользователю необходим полный доступ в Скрудже !");
            return;
        }
        InfNBU_OutPath = InfNBU_OutPath.Trim();
        if (InfNBU_OutPath.Length == 0)
        {
            Err.Print(CCommon.Now().ToString() + "Ошибка определения выходного каталога для ОДБ." + CAbc.CRLF + CAbc.CRLF);
        }
        if (UnsolvedBillsExists == 1)
        {
            SavedColor        = CConsole.BoxColor;
            CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE;
            CConsole.ShowBox("", "Имеются непpоведенные документы", "", "  Пpоведите их или удалите !", "");
            CConsole.ClearKeyboard();
            CConsole.ReadChar();
            CConsole.BoxColor = SavedColor;
            CConsole.Clear();
            CConsole.ShowCursor();
        }
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        if (OutputDir != null)
        {
            OutputDir = ScroogeDir + "\\" + OutputDir.Trim();
            if (!CCommon.DirExists(OutputDir))
            {
                CCommon.MkDir(OutputDir);
            }
            if (CCommon.DirExists(OutputDir))
            {
                OutputDir += "\\" + CCommon.StrD(DayDate, 8, 8).Replace("/", "").Replace(".", "");
                if (!CCommon.DirExists(OutputDir))
                {
                    CCommon.MkDir(OutputDir);
                }
                if (!CCommon.DirExists(OutputDir))
                {
                    OutputDir = ScroogeDir + "\\";
                }
            }
            LogFileName = OutputDir + "\\" + LogFileNames[Mode - 1];
        }
        else
        {
            LogFileName = ScroogeDir + "\\" + LogFileNames[Mode - 1];
        }
        Err.LogTo(LogFileName);
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        //	Основной цикл программы
        do
        {
            System.Console.Title = "  " + Titles[Mode - 1] + "  " + CCommon.StrD(DayDate, 8, 8) + "        |   " + ServerName + "." + DataBase;
            string[] FilesForMEDOC = CCommon.GetFileList(InfNBU_OutPath + "\\@*.*");
            if (FilesForMEDOC != null)
            {
                if (FilesForMEDOC.Length > 0)
                {
                    CConsole.GetBoxChoice(
                        ""
                        , "В каталоге " + InfNBU_OutPath
                        , "Найдены файлы для налоговой  @*.*"
                        , "Не забудьте их отправить!"
                        , ""
                        );
                }
            }
            if (!LoadHistory(Mode))
            {
                Err.Print(CCommon.Now().ToString() + "Ошибка получения с сервера истории работы программы !");
            }
            Choice = CConsole.GetMenuChoice(MenuNames);
            if (Choice > 0)
            {
                Err.Print(CCommon.Now().ToString() + "\t< " + MenuNames[Choice - 1] + "   ( " + UserCode + " ) " + CAbc.CRLF);
                if (!SaveHistory(Mode, Choice))
                {
                    Err.Print("Ошибка сохранения на сервере истории работы программы !");
                }
                switch (MenuKinds[Choice - 1].Trim().ToUpper())
                {
                case    "EXE.COPY": {
                    Result = StartExeCopy(
                        MacroSubstitution(MenuCommands[Choice - 1])
                        , MacroSubstitution(
                            DateSubstitution(
                                MenuParams[Choice - 1]
                                )
                            )
                        );
                    break;
                }

                case    "SQL.CMD": {
                    Result = StartSqlCmd(
                        DateSubstitution(
                            MenuCommands[Choice - 1]
                            )
                        );
                    break;
                }

                case    "SQL.RS": {
                    Result = StartSqlRS(
                        DateSubstitution(
                            MenuCommands[Choice - 1]
                            )
                        );
                    break;
                }

                case    "SQL.ROUTINE": {
                    Result = StartSqlRoutine(
                        DateSubstitution(
                            MenuCommands[Choice - 1]
                            )
                        );
                    break;
                }

                case    "EXC": {
                    Result = StartExc(ScroogeDir
                                      , MacroSubstitution(
                                          DateSubstitution(
                                              MenuCommands[Choice - 1]
                                              )
                                          )
                                      );
                    break;
                }

                case    "URL.IE": {
                    Result = StartUrl(
                        DateSubstitution(
                            MenuCommands[Choice - 1]
                            )
                        );
                    break;
                }

                default: {
                    break;
                }
                }
                Err.Print(CCommon.Now().ToString() + "\t " + MenuNames[Choice - 1] + "   ( " + Result.ToString() + " ) > " + CAbc.CRLF);
            }
        } while (Choice != 0);
    }