Меркурий 130 и DrvMercFR.dll: серийный номер

Модели:
Меркурий-115Ф, Меркурий-119Ф, Меркурий-130Ф, Меркурий-180Ф, Меркурий-185Ф, Меркурий-МФ...
Аватара пользователя
Shtirlic
Сообщения: 377
Зарегистрирован: 18 фев 2011, 11:21

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение Shtirlic »

новая версия, поправил только QueryEcrDateTime(изменил формат вывода dd.mm.yy hh:mm:ss)
с SynchronazeDateTime, у ККМ нет функции записи даты, я здесь ни чего не сделаю, там видимо не так все просто учитывая отслеживание логики контроля дат.
про Connect после Disconnect если и в TestDll2.exe то большая вероятность, что старая DLL если только через DynamicWrapperX то не подскажу.
про frole пока не подскажу
Аватара пользователя
sergsen
Сообщения: 7
Зарегистрирован: 15 фев 2012, 21:28
Контактная информация:

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение sergsen »

Спасибо за быструю реакцию. QueryEcrDateTime работает. Еще бы сообразить, как эту информацию использовать.
Еще пожелания, если возможно. У драйвера 18 ошибка с расширенной 0 выходит слишком часто, даже там, где вроде бы должна быть иная детализация.
Пример: Вытаскиваю бумагу из кассы. Запрашиваю Х-отчет. После появления НБУ возвращает 18:0, хотя должна бы по логике 18:1(EXT_EE_END_OF_PAPER) или хотя бы 18:2(EXT_EE_PRN_ERROR). До НБУ возвращается 3(ERR_NO_RESPONSE)
Для CONNECT 18 ошибка не должна возвращаться, судя по описаниям, а возвращается
И вопрос, при каких условиях возвращается ERR_BLANKING_NEEDED? Если бы это происходило при открытии чека, было бы оптимально. А то опять же 18:0
Да, вот еще, судя по исходнику для внутренней функции RecodeErrorKKM у ERR_ECR_ERROR могут еще быть расширенные значения 8(EX_IAE_INVALID_OPER_TYPE) и 28(EX_IAE_TOTAL_OVERFLOW). Это потенциальные ошибки при обращении к библиотеке.
Аватара пользователя
Shtirlic
Сообщения: 377
Зарегистрирован: 18 фев 2011, 11:21

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение Shtirlic »

про ошибку 18, странно почему она у Вас так часто возникает, возможно проблемы в кабеле или может скорость связи большая.
Исходники не мои, помогаю чем могу, возможности переделать все исходники у меня пока нет.
Аватара пользователя
sergsen
Сообщения: 7
Зарегистрирован: 15 фев 2012, 21:28
Контактная информация:

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение sergsen »

Shtirlic писал(а):про ошибку 18, странно почему она у Вас так часто возникает, возможно проблемы в кабеле или может скорость связи большая.
Скорость 9600. На кабель тоже вначале грешил. Но эксперименты с лентой заставили рыть в другом направлении.
И если посмотреть на RecodeErrorKKM в drv_merc_main.cpp, то понятно, что там далеко не все ENET_ ошибки обрабатываются (н-р: ENET_PU_ERR, // 20 ФР: ошибка принтера).
Так как он нужный код вернет в случае ошибки принтера?
Shtirlic писал(а):Исходники не мои, помогаю чем могу, возможности переделать все исходники у меня пока нет.
В любом случае большое спасибо за помощь.
Аватара пользователя
Shtirlic
Сообщения: 377
Зарегистрирован: 18 фев 2011, 11:21

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение Shtirlic »

Да я тоже видел, что с кодами ошибок не все хорошо, чтоб все привести в порядок(а скорей всего просто некоторые ошибки выкинуть, потому, что ККМ их скорей всего просто не вернет) надо много времени, пока такой возможности нет. что касается конкретно ошибки принтера подозреваю, что ККМ сообщит это на свой дисплей и на ПК просто отвалится по таймауту, в этом случае диагностировать программно не получится(скорее только визуально с ККМ), мои рассуждения примерные, я не до конца понимаю какая проблема и боюсь, что если даже пойму, то боюсь не смогу смоделировать. Если все очень точно опишите по шагам и что получается и какие проблемы с лентой, то может, что то проясниться.
Аватара пользователя
sergsen
Сообщения: 7
Зарегистрирован: 15 фев 2012, 21:28
Контактная информация:

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение sergsen »

1. Нахожусь в главном меню экран ККМ - [ ? ], выдергиваю ленту, экран не меняется.
2. отправляю QueryEcrIdentEx, отрабатывает без ошибок, экран не меняется.
3. Отправляю запрос на печать X-отчета, сигнал, на экране [ НБУ ], ошибка 3
4. Еще раз X-отчет, сигнала нет, ошибка 18:0
5. Ставлю ленту, на экране [ НБУ ], X-отчет, сигнала нет, ошибка 18:0
6. Нажимаю <C>, на экране [ ? ], X-отчет отрабатывает.

Резюме: а что мы хотели в п.4?
В RecodeErrorKKM ошибка ENET_PU_ERR не описана и отрабатывает со стр. 233

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

      default: {
         if( err!=NULL ) *err=0; - это расширенный код ошибки =0
         return  ERR_ECR_ERROR; - это возвращается 18
      }
   }
Можно просто попробовать описать все ошибки ENET_ из DrvMercFR.h, а там тогда и смотреть, что не так. К примеру для ENET_PU_ERR до default вставляем:

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

      case ENET_PU_ERR: {
         if( err!=NULL ) *err=EXT_EE_PRN_ERROR;
         return ERR_ECR_ERROR;
      }
Только вот в описании заголовка я не нашел ENET_ для "закончилась чековая лента". А должна быть эта ошибка. Отловить ее можно, если попробовать изменить default на:

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

      default: {
         if( err!=NULL ) *err=err; - должен возвратить ENET_ в расширенной ошибке
         return  ERR_ECR_ERROR; - это возвращается 18
      }
   }
Аватара пользователя
Briarius
Сотрудник Инкотекс
Сотрудник Инкотекс
Сообщения: 386
Зарегистрирован: 17 май 2011, 17:37
Контактная информация:

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение Briarius »

Добавлю пару фраз. Касса не дает возможности обрабатывать некоторые ошибки по протоколу. Наличие бумаги или готовность принтера можно определить только перед выполнением команд печати документов. Если бумага кончилась в том же отчете, то комп никогда об этом не узнает, т.к. касса выйдет на ошибку и никакой связи с компом не будет поддерживать.. Издержки упрощений режима ФР и недостатка аппаратных ресурсов кассы дают о себе знать..
Аватара пользователя
sergsen
Сообщения: 7
Зарегистрирован: 15 фев 2012, 21:28
Контактная информация:

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение sergsen »

Briarius писал(а):Если бумага кончилась в том же отчете, то комп никогда об этом не узнает, т.к. касса выйдет на ошибку и никакой связи с компом не будет поддерживать..
Это не так критично, как при печати чека. Вот там действительно беда, т.к. недопечатанный чек подлежит закрытию программно. Ну а теперь прикиньте, как сис.админ, который должен разгребать ситуации в принципе и не должен ковырять закрытые для конечных пользователей исходники, сможет реагировать на недокументированную ошибку данного контекста.
Про кассира я уже не говорю, поколе это не его епархия.
Еще одна элементарная, но жизненная, ситуация: Если еще и в кассе по недосмотру запретили снимать Z-отчет без компа (опция 22 = не 1), то у массы народа появляется не обоснованная головная боль.

К разработчикам, если от кого-нибудь это зависит:
1. Сделайте GetStateKKM - внешней функцией драйвера, как у Штриха.
2. Убейте ущербную RecodeErrorKKM и возвращайте реальные коды ошибок, (поможете тем, кто должен регламентировать функции персонала, конечно, с документацией в комплекте, хотя бы для сервисных центров)
Аватара пользователя
Shtirlic
Сообщения: 377
Зарегистрирован: 18 фев 2011, 11:21

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение Shtirlic »

Понимаю Ваше недовольство. По Вашим требованиям нужен настоящий ФР, такой как Меркурий МСК ну или то, что Вы у штрихов увидели, только вот есть нюанс они дороже и это не какие то маркетинговые уловки, а все намного проще, в 130ке железо значительно слабей соответственно и цена ниже, но вот и реализовать полнофункциональный ФР сложнее(скорее не возможно). Да возможно прошивка для 130ки не идеальна, но вполне для своих задач нормальная, дальнейшая доводка бы тоже увеличила стоимость ККМ и из за железа все равно не смогла бы стать полнофункциональным ФР. Еще раз повторю, режим ФР вполне работоспособен и используется, но если хочется сделать серьезную систему, то эта ККМ не самый лучший вариант и для этого как раз и выпускаются обычные ФР.

Перейдем к ограничениям, если все таки нужно использовать 130ку.
При печати когда кончится бумага, то ККМ на экране напишет, что ошибка и нет бумаги, а ПРИ ПОКАЗЕ ЛЮБОЙ ОШИБКИ ККМ не общается с ПК и все кончается таймаутом, да это не хорошо, да это не позволит узнать причину по которой чек не был зарегистрирован и соответственно с регламентацией персонала сложности, но вот здесь как мне кажется и проходит грань, что если все таки нужна более серьезная работа то все таки нужно и железо использовать соответствующее. Вы наверное программист и возможно зададите вопрос, а почему нельзя было во время показа ошибки общаться с ПК, на сколько я знаю, во время реализации кода поддерживающего функции ФР шла борьба даже не за килобайты, а за байты кода и казалось бы не такая уж сложная модификация возможно требовала затрат на которые не смогли пойти, возможно еще какие проблемы и скорей всего связанные с ограничением железа. Возможно затратив какое то количество времени может бы и можно было бы как то усовершенствовать ПО, но стоимость ККМ могла бы получиться больше стоимости фискальников и смысл то какой.
по поводу RecodeErrorKKM она не вернет как я уже писал, что чек не напечатался из за ленты, потому, что ККМ не даст такой информации.

тут все просто если нужен полный функционал то используйте настоящий ФР, если простой учет то и 130 вполне подойдет.
Аватара пользователя
sergsen
Сообщения: 7
Зарегистрирован: 15 фев 2012, 21:28
Контактная информация:

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение sergsen »

Да я ничего против прошивки не имею. Ваша позиция насчет дешевизны и ограниченности функционала принимается однозначно.
Жаль, что мои слова восприняты как критика. Не считаю для себя возможным судить вашу работу, наоборот, с большим пиететом отношусь к тем возможностям, которые предоставил драйвер.
Предлагаю перенести обсуждение технических вопросов в личку или аську.
Аватара пользователя
Shtirlic
Сообщения: 377
Зарегистрирован: 18 фев 2011, 11:21

Re: Меркурий 130 и DrvMercFR.dll: серийный номер

Сообщение Shtirlic »

да не, не как критика, просто пытаюсь объяснить, что некоторые ошибки которые описаны(возможно на будущее), ККМ не сможет вернуть, ну и почему(из за ограничений) и как не переделывай DLL некоторые по любому будут идентифицироваться таймаутом.
Ответить