gifts2017

Связка ККМ (Феликс-РК) АТОЛ драйвера и 1С 7.7 - глюки взаимодействия

Опубликовал Константин (Fisherru) в раздел Оборудование - ККМ

Честно сказать, не посмотрел, что там в стандартной обработке печати фискального чека из 1С (говорят, не всё там круто), но то, что было оттуда вынесено (не мной) в нашу самописную конфу - работало глючно. Когда дошли руки - переписал.

Все началось с http://forum.infostart.ru/forum9/topic7856/message59191/#message59191

Честно сказать, не посмотрел, что там в стандартной обработке печати фискального чека из 1С (говорят, не всё там круто), но то, что было оттуда вынесено (не мной) в нашу самописную конфу - работало глючно. Когда дошли руки - переписал.

Вот что было:

Объект.ПолучитьСостояние();
НомерЧека = Объект.НомерЧека;
Объект.ЗакрытьЧек();

Если Объект.ResultCode <> 0 Тогда //ошибка
    Предупреждение("Код ошибки: "+Строка(Объект.ResultCode)+" "+Объект.ResultDescription);
    Возврат 0;
Иначе
    Возврат 1;
КонецЕсли;

При этом часто ResultCode был 0, хотя чек не закрывался.

После долгих экспериментов написал такой код, для большей устойчивости

Объект.ПолучитьСостояние();
НомерЧека = Объект.НомерЧека;
Объект.ЗакрытьЧек();

ТекРезультат=Объект.Результат;
ОписаниеРезультата=Объект.ОписаниеРезультата;

ТекСостояние=Объект.ПолучитьСостояние();

ТекРезультат=Объект.Результат;
ОписаниеРезультата=Объект.ОписаниеРезультата;

БылаОшибка=0;
Если ТекРезультат <> 0 Тогда //ошибка
    БылаОшибка=1;
Иначе
    Если (Объект.СостояниеЧека<>0) ИЛИ (ТекСостояние<>0) Тогда
        ОписаниеРезультата="";
        ТекРезультат=0;

        Если ТекСостояние<>0 Тогда
            Если ТекСостояние=-1 Тогда
                ОписаниеРезультата="Нет связи с ККМ";
            ИначеЕсли ТекСостояние=-3807 Тогда
                ОписаниеРезультата="Нет бумаги";
            Иначе
                ОписаниеРезультата="Неизвестная ошибка";
            КонецЕсли;
            ТекРезультат=ТекСостояние;
            БылаОшибка=1;
        Иначе
            Если Объект.НетСвязиСПринтеромЧеков = 1 Тогда
                ОписаниеРезультата="Нет связи с ККМ";
                БылаОшибка=1;
            ИначеЕсли Объект.УстройствоВключено = 0 Тогда
                ОписаниеРезультата="ККМ не включена";
                БылаОшибка=1;
            ИначеЕсли Объект.КрышкаОткрыта = 1 Тогда
                ОписаниеРезультата="Открыта крышка";
                БылаОшибка=1;
            ИначеЕсли Объект.НаличиеЧековойЛенты=0 Тогда
                ОписаниеРезультата="Нет Чековой Ленты";
                БылаОшибка=1;
            ИначеЕсли Объект.НетБумаги = 1 Тогда
                ОписаниеРезультата="Нет Бумаги";
                БылаОшибка=1;
            ИначеЕсли Объект.ОшибкаПерегревПечатающейГоловки = 1 Тогда
                ОписаниеРезультата="Перегрев печатающей головки";
                БылаОшибка=1;
            Иначе
                ОписаниеРезультата="Чек не закрыт";
                БылаОшибка=1;
            КонецЕсли;
        КонецЕсли;

    КонецЕсли;
КонецЕсли;

Если БылаОшибка=1 Тогда
    ГлСформироватьСписокПараметровСбояККМ("При закрытии чека",ТекРезультат,ОписаниеРезультата, Объект, НомерНакладной);
    Предупреждение("Ошибка ККМ : "+ТекРезультат+" - "+ОписаниеРезультата);
    Возврат 0;
КонецЕсли;

Возврат 1;

Процедура ГлСформироватьСписокПараметровСбояККМ - это я веду список ошибок ККМ для передачи их в офис и дальнешего анализа

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Константин (Fisherru) 11.02.09 15:19
Прошу прощения за безобразное отображение кода,
но, к сожалению, при написании статьи не нашёл как обозначить
кусок кода в тексте :-(
2. Александр Градский (Cobranet123) 11.02.09 20:18
А можешь обработку то полученную выложить?
3. Константин (Fisherru) 12.02.09 08:59
К статье невозможно приложить обработку.
Кроме того, наша обработка в некоем смысле является собственностью компании
и её как-бы выкладывать нельзя в целом виде ;)
Но вы не печальтесь. Мы её слизали из типовой Демо-торговли ;)
находится она в паке \DemoDB\ExtForms\Equip
называется fr_comm.ert
Просто мы выкинули лишнее и заточили под наш формат чека:
скидки, проценты, сколько до нового и прочее...
в ней есть функция //********************************************************************************
Функция ПечататьЧек(Объект, Пароль, СписокТоваров, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека, ДлинаСтроки)

в ней в конце идёт команда
Объект.ЗакрытьЧек();
Далее анализ результатов.
Вот этот анализ я собственно расширил и углубил :)
И поделился с народом, чтоб не наступали на мои грабли,
когда чек не закрылся, а возвращается ответ что все хорошо
и документ проводится...
4. Константин (Fisherru) 18.02.09 14:30
Кстати, сейчас протестил статистику сбоев по нашим 110 магазинам
за один и тот же интервал времени до и после внедрения новой более защищённой
версии.
Так вот в старой редакции проверки корректности закрытия чека (от 1С)
пропускалось (не отлавливалась) половина всех сбоев ККМ.
Грубо, в старой редакции 500 ПОЙМАННЫХ сбоев за интервал, в новой более 1000 ПОЙМАННЫХ.
То есть программа сейчас практически не допускает проведения документов по лживому ответу от драйвера. Если уж ККМ не пробил чек, то и 1С-ина фиг документ проведёт.
5. Константин (Fisherru) 18.02.10 14:11
На самом деле все гораздо запущеннее :(
Фискальники (ККМ) самые лживые электронные устройства которые я видел...
особенно глючен, казалось бы удобный в эксплуатации Fprint-5200K
периодически проскакивают сбои:
1. чек пробился, а фискальник говорит об ошибке - кассир тупит и снова жмет "регистрация" - получаем задвоение чека по кассе - бывает редко
2. чек типа пробился, а фискальник говорит что все хорошо и возвращает номер чека, а при следующей регистрации отменяет предыдущий - получаем отсутствие этой суммы в кассе - бывает крайне редко
Вот так...
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа