Меркурий МСК и не фискальный документ.

Модели:
Меркурий-114.1К, Меркурий 115Ф, Меркурий 119Ф, Меркурий 130ф, Меркурий MS-K
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Меркурий МСК и не фискальный документ.

Сообщение Cramac »

Всем привет. Делаю ПО для работы с данной кассой. Фискальные документы делаются, проблем нет. Сейчас понадобилось сделать печать не фискального (для вывода с терминала приема карт).
Вроде как печатает, но после распечатки не фискального документа, возникает проблема с фискальными (чеками)
Содержимое чека печатается и зависает. Помогает только перезапуск кассы.
Что я делаю не так? ПО на c#

Чек печатаю вот так:

Код: Выделить всё

       private int PrintCheck(TxMercOperType OperT, DataRowCollection sale, double nal)
        {
            axMercuryFPrtX1.ExternalPulse(1, 127, 127, 1);
            int flags = 0;
            int iv = 0;
            try
            {
                axMercuryFPrtX1.OpenDay(1, cinfo.NameOperator.Substring(Math.Min(38, cinfo.NameOperator.Length)), true, MercFPrtX.TxMercProtocol.mprBS);
                axMercuryFPrtX1.OpenFiscalDoc(OperT);
                /*for (int I = 1; I <= 4; I++)
                    axMercuryFPrtX1.AddHeaderLine(I, flags, 1, iv++);*/

                axMercuryFPrtX1.AddSerialNumber(flags, 0, iv++);
                axMercuryFPrtX1.AddDateTime(flags, 0, iv++);
                axMercuryFPrtX1.AddOperInfo(MercFPrtX.TxMercOperInfo.moiNumberName, flags, 0, iv++);
                axMercuryFPrtX1.AddDocNumber(flags, 0, iv++);
                axMercuryFPrtX1.AddAccount("", flags, 0, iv++);
                axMercuryFPrtX1.AddReceiptNumber(flags, 0, iv++);
                axMercuryFPrtX1.AddTaxPayerNumber(flags, 0, iv++);

                foreach (DataRow row in sale)
                {
                    string Name = row["Name"].ToString();
                    if (Name.Length >= Convert.ToInt32(Config.LimitSimv))
                        Name = Name.Substring(0, Convert.ToInt32(Config.LimitSimv) - 1);
                    axMercuryFPrtX1.AddCustom(Name, 16 + 64 + flags, 0, iv++);

                    decimal cyPrice = Convert.ToDecimal(row["Cost"]);
                    decimal Skid = Convert.ToDecimal(row["Skidka"]);
                    int Quant = Convert.ToInt32(Convert.ToDouble(row["Nums"]) * 1000.0);
                    int prec = 3;

                    int ID = Convert.ToInt32(row["ID"]);
                    axMercuryFPrtX1.AddItem(TxMercItemType.mitItem, cyPrice, false, 2, ID, 0, Quant, prec, 0, "шт", flags, 0, iv++, 0);
                    axMercuryFPrtX1.AddItem(TxMercItemType.mitAmountAdj, -Skid, false, 2, ID, 1000, 4 * 100, 2, 0, "шт", flags, 0, iv++, 0);
                }

                axMercuryFPrtX1.AddTotal(flags, 0, iv++, 0);

                decimal cyCash, cyCashless;
                cyCash = Convert.ToDecimal(nal);
                cyCashless = 0;
                axMercuryFPrtX1.AddPay(MercFPrtX.TxMercPayType.mptCash, cyCash, cyCashless, "", flags, 0, iv++, 0);

                axMercuryFPrtX1.AddChange(flags, 0, iv++, 0);
                axMercuryFPrtX1.PrintFiscalDocBuffer();

                axMercuryFPrtX1.CloseFiscalDoc();

                return 1;
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message + "\r\nПродажа не будет осуществлена.");
                return 1;
            }
        }
не фискальный документ так:

Код: Выделить всё

        private int PrintNotFiscal(string data)
        {
            axMercuryFPrtX1.ExternalPulse(1, 127, 127, 1);

            try
            {
                axMercuryFPrtX1.PrintNonFiscal(data, true, true); 
                axMercuryFPrtX1.FeedAndCut(0,true);

                return 1;
            }
            catch (Exception ee)
            {
                Log.Write(ee.Message + "\r\n Проблема с печатью не фискального документа.");
                return 1;
            }
        }
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Меркурий МСК и не фискальный документ.

Сообщение slan »

Добрый день. Вы бы для начала указали каким драйвером пользуетесь
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

когда устанавливал - ФР Меркурий 1.9.0.0
запускаю утилиту WinExpert.exe оно показывает - версия компонента для работы 1.7 (101)
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Меркурий МСК и не фискальный документ.

Сообщение slan »

Данный драйвер давным давно не поддерживается. Не думаю, что кто-нибудь на этом форуме способен Вам с ним помочь.
Актуальный на данный момент драйвер версии 2.х, но он не совместим со старым
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

а не подскажите где можно скачать актуальную версию драйвера?

И может подскажите как это сделать на ней?
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Меркурий МСК и не фискальный документ.

Сообщение slan »

Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

спасибо, буду изучать новый драйвер.
Может есть примеры печати фискального и не фискального документа?

а то в предыдущей версии были примеры, а тут что то нет.
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Меркурий МСК и не фискальный документ.

Сообщение slan »

Соединяетесь с фр при помощи метода Подключить. Далее в случае фискального чека: ОткрытьЧек -> НапечататьФискСтроку ->ЗакрытьЧек. В случае нефискального чека: НапечататьНефискСтроку, открывать и закрывать чек можно, но необязательно (для нефискального чека там попросту заглушки)
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

спасибо, принцип тот же.
Обновил драйвер до последней 1.9.1.1
не помогло.
Буду пробовать на 2 версии.
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

Нет ли где посмотреть примеры ПО на каком нить языке под новый драйвер (как это было в 1.9)
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

Подскажите еще в таком. Что то в новом драйвере куда меньше методов.
Так вот, чем заменить:

Открытие дня и фискального чека

Код: Выделить всё

 axMercuryFPrtX1.OpenDay(1, cinfo.NameOperator.Substring(Math.Min(38, cinfo.NameOperator.Length)), true, MercFPrtX.TxMercProtocol.mprBS);
          axMercuryFPrtX1.OpenFiscalDoc(OperT);
заменил одним

Код: Выделить всё

msk.OpenCheck(DevId, true, false, true, out CheckNum, out SessionNum);
реквизиты:

Код: Выделить всё

                axMercuryFPrtX1.AddSerialNumber(flags, 0, iv++);
                axMercuryFPrtX1.AddDateTime(flags, 0, iv++);
                axMercuryFPrtX1.AddOperInfo(MercFPrtX.TxMercOperInfo.moiNumberName, flags, 0, iv++);
                axMercuryFPrtX1.AddDocNumber(flags, 0, iv++);
                axMercuryFPrtX1.AddAccount("", flags, 0, iv++);
                axMercuryFPrtX1.AddReceiptNumber(flags, 0, iv++);
                axMercuryFPrtX1.AddTaxPayerNumber(flags, 0, iv++);
полагаю что автоматом должны ставится, те что запрограммированы? А как быть с именем кассира?

Дальше шел набор позиций в чеке в цикле:

Код: Выделить всё

            axMercuryFPrtX1.AddCustom(Name, 16 + 64 + flags, 0, iv++);
                    axMercuryFPrtX1.AddItem(TxMercItemType.mitItem, cyPrice, false, 2, ID, 0, Quant, prec, 0, "шт", flags, 0, iv++, 0);
                    axMercuryFPrtX1.AddItem(TxMercItemType.mitAmountAdj, -Skid, false, 2, ID, 1000, 4 * 100, 2, 0, "шт", flags, 0, iv++, 0);
заменяется одной командой - PrintFiscalStringEx ?

Код: Выделить всё

axMercuryFPrtX1.AddTotal(flags, 0, iv++, 0);
Итого, так же автоматом вставится?

Код: Выделить всё

                axMercuryFPrtX1.AddPay(MercFPrtX.TxMercPayType.mptCash, cyCash, cyCashless, "", flags, 0, iv++, 0);
                axMercuryFPrtX1.AddChange(flags, 0, iv++, 0);
Наличные и сдача, как забить? Наличные указываются в CloseCheck а сдача?

Код: Выделить всё

                axMercuryFPrtX1.PrintFiscalDocBuffer();
                axMercuryFPrtX1.CloseFiscalDoc();
печать фискального буфера и закрытие чека заменяется одной
CloseCheck
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

по новой документации печать фискального документа получилась такой:

Код: Выделить всё

        private int PrintCheck2(DataRowCollection sale, double nal)
        {
            var msk = new FPDrv1C2();
            msk.OpenCashDrawer(DevId);

            try
            {
                msk.OpenCheck(DevId, true, false, true, out CheckNum, out SessionNum);

                foreach (DataRow row in sale)
                {
                    string Name = row["Name"].ToString();
                    if (Name.Length >= Convert.ToInt32(Config.LimitSimv))
                        Name = Name.Substring(0, Convert.ToInt32(Config.LimitSimv) - 1);

                    double cyPrice = Convert.ToDouble(row["Cost"]);
                    double Skid = Convert.ToDouble(row["Skidka"]);
                    double Quant = Convert.ToDouble(row["Nums"]);
                    double amount = 0;

                    msk.PrintFiscalStringEx(DevId, Name, Quant, cyPrice, amount, -Skid, 0, 0);
                }
                msk.CloseCheck(DevId, nal, 0, 0);

                return 1;
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message + "\r\nПродажа не будет осуществлена.");
                return 1;
            }
        }
Правильно ли я понял последовательность методов?

UPD: опробовав на рабочей кассе, чек не напечатался. Не заработало внесение, печать фискального документа (чека)

Не фискальный документ:

Код: Выделить всё

        private int PrintNotFiscal2(string data)
        {
            var msk = new FPDrv1C2();

            msk.OpenCashDrawer(DevId);
            
            try
            {
                msk.PrintNotFiscalString(DevId, data);
                msk.MoveCheck(DevId,2);
                msk.CutCheck(DevId);

                return 1;
            }
            catch (Exception ee)
            {
                Log.Write(ee.Message + "\r\n Проблема с печатью не фискального документа.");
                return 1;
            }
        }
Х-отчет

Код: Выделить всё

                var msk = new FPDrv1C2();
                msk.OpenCashDrawer(DevId);
                msk.PrintXReport(DevId);
Вопрос по Х-отчету. Как НЕ печатать нулевые позиции? И почему то у меня чек продублировался, сначала вывел Кассир 01, потом секция №2 и все тоже самое повторил.
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

надо было изначально использовать
msk.GetLastError(out ErrorDescription);

сразу стало понятно почему не печатался чек. Проблема была в отделе, я передавал 0 а надо было больше нуля
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Меркурий МСК и не фискальный документ.

Сообщение slan »

Cramac писал(а):Вопрос по Х-отчету. Как НЕ печатать нулевые позиции?
Свойство ТипОтчета, страница 2 документации
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Меркурий МСК и не фискальный документ.

Сообщение slan »

Cramac писал(а):А как быть с именем кассира?
Метод РегистрацияКассира
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

Спасибо, со всем вроде разобрался, не сработало только синхронизация времени кассы с ПК.

Код: Выделить всё

        private string ConnectKKM2()
        {
                DateTime saveNow = DateTime.Now;

                pData[0] = Convert.ToInt32(Config.ComPort);      //порт
                pData[1] = Convert.ToInt32(Config.PortSpeed);   //скорость
                pData[2] = Config.KKMcod;  //пароль
                pData[3] = 1;       //секция
                pData[4] = false;    //печатать ли налоги
                pData[5] = 3;       //протокол
                msk.Open(pData, out DevId);
                msk.SetDateTime(DevId, saveNow.ToString("ddMMyyyy"), saveNow.ToString("HHmm"));
                msk.ReportType = 4;
                return DevId;
        }
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Меркурий МСК и не фискальный документ.

Сообщение slan »

Cramac писал(а):Спасибо, со всем вроде разобрался, не сработало только синхронизация времени кассы с ПК.
Какая ошибка выдаётся?
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

синхронизацию времени запустил после внесения, видимо из за этого.
ККМ ID - 1 Последняя ошибка ККМ - Не закрыта смена.
В остальном все нормально, спасибо. Могу выложить что получилось, для тех кто будет искать :)
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Меркурий МСК и не фискальный документ.

Сообщение slan »

Естественно из-за этого, в документации написано ж - при закрытой смене
Аватара пользователя
Cramac
Сообщения: 27
Зарегистрирован: 14 май 2015, 14:23

Re: Меркурий МСК и не фискальный документ.

Сообщение Cramac »

Еще раз спасибо. На новом драйвере вроде как моя изначальная проблема ушла.
Ответить