Имя: Пароль:
1C
1С v8
Конфигурация "БИТ:Красота". Не бьётся нулевой чек.
,
0 IKSparrow
 
09.07.15
15:30
Исходная стойка такая:
Конфигурация БИТ Красота (Проф) 2.0.7.6
Движок 8.2.18.104
ФР Штрих-М-ФР-К
Драйвер кассы: 4.12.0.357

Печатаем нулевой чек (например, покупка за счет фирмы или 100% скидка). Начинает печататься шапка чека, затем чек аннулируется и 1С выдает ошибку A3h - "Некорректное состояние ЭКЛЗ".

Пригласили ребят из ЦТО, посмотрели ЭКЛЗ - полный порядок. Этот момент исключаем.

Путем долгих изысканий в интернете, напоролся на аналогичную проблему (но не на решение), где человек описывает, что якобы 1С неправильные команды посылает драйверу. Отладчиком посмотрел процедуру печати чека. Но там нет никаких команд. Просто набор входных параметров - данные для печати, строки чека и, вообщем-то, все. Всю обработку берет на себя драйвер.

Собственно вопрос - сталкивался ли кто-нибудь с такой ошибкой и как решали проблему?

p.s.> Запрет на пробивку нулевых чеков на кассе снят.
p.p.s.> ФР других производителей (несколько точек) работают в такой ситуации идеально. Никаких проблем. А тут как-будто ФР проклятый...
1 Garykom
 
гуру
09.07.15
15:33
Еще Меркурий попробовать советую... их грабли заодно выясните, хотя все вряд ли
2 mTema32
 
09.07.15
15:34
(0) Драйвер пробовал менять?
3 Garykom
 
гуру
09.07.15
15:34
Но вообще тупой вопрос, а зачем 0-й чек выводить?

В смысле это же не является продажей в данном случае!

Но если очень хочется делать пробивку 1 копейки (и тут же автоматом возврат этой копейки)
4 Ёпрст
 
09.07.15
15:35
драйвер штриховский ?
5 IKSparrow
 
09.07.15
15:44
(2) Еще нет, не могу, так как точка пробивает нал/безнал. Только вечером смогу попробовать.
(3) Почему не является? Услуги оказаны? Оказаны. Значит чек должен быть предоставлен.
(4) Да.
6 Garykom
 
гуру
09.07.15
15:48
(5) если деньги не взяты, то документу об оказании услуг выдавать необязательно

потому что чек - это сделка, а сделка безвозмездная это немного другое
7 IKSparrow
 
09.07.15
15:49
(6) ну у нас принято пробивать :(
8 Alize
 
09.07.15
16:12
1. дата/время проверить в эклз
2. техобнуление это ЦТО
или привет эклз ,но цто терять деньги за эклз не хочет если она намахнулась, так что они всегда будут говорить полный порядок. отнести им пусть тестируют , и вам отдают рабочий, с  отчетами, и тестовыми прогонами по фискалке и эклз .
с Z и Х отчетами.
а так не ясно что у вас там с эклз .
9 Alize
 
09.07.15
16:13
а да X-отчет снимается?
10 IKSparrow
 
09.07.15
16:16
(9) Снимается :(
11 Alize
 
09.07.15
16:23
к цто
12 Alize
 
09.07.15
16:24
тестами прогнать эклз вы не сможете не вскрываю аппарат (
13 Alize
 
09.07.15
16:25
*вскрывая
14 IKSparrow
 
09.07.15
16:27
Ну в общем, подытоживая, вряд ли тут виновата 1С?
Драйвер вечером я обновлю, посмотрю на результат.
15 Torquader
 
09.07.15
21:40
Во-первых, у Штрих-М-ФР-К в таблицах включается и выключается режим разрешения нулевого чека, а также возможность продажи по нулевой цене (когда скидка 100%).
Во-вторых, если печатать чек через команды продажи (как положено), то скидку 100% сделать может не получиться, так как сумма переходит в ноль.

P.S. на аппарате нулевой чек пробивается командой "Регистрация:Количество=1 Сумм=0" и "Закрыть чек".
16 IKSparrow
 
10.07.15
10:48
(14) Драйвер обновил, увы, результатов не добился :(
17 IKSparrow
 
10.07.15
10:52
(15) Ну вот по отладчику у меня стопорится на процедуре закрытия чека, процедура штатная, девственно чистая (руками еще не лазил).

Функция ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры) Экспорт

    Результат = Истина;

    СуммаНаличнойОплаты     = 0;
    СуммаБезналичнойОплаты1 = 0;
    СуммаБезналичнойОплаты2 = 0;

    Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл
        Если ТаблицаОплат[ИндексОплаты][0].Значение = 0 Тогда
            СуммаНаличнойОплаты = СуммаНаличнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
        ИначеЕсли ТаблицаОплат[ИндексОплаты][0].Значение = 1 Тогда
            СуммаБезналичнойОплаты1 = СуммаБезналичнойОплаты1 + ТаблицаОплат[ИндексОплаты][1].Значение;
        Иначе
            СуммаБезналичнойОплаты2 = СуммаБезналичнойОплаты2 + ТаблицаОплат[ИндексОплаты][1].Значение;
        КонецЕсли;
    КонецЦикла;

    Результат = ОбъектДрайвера.ЗакрытьЧек(ПараметрыПодключения.ИДУстройства,
                                          СуммаНаличнойОплаты,
                                          СуммаБезналичнойОплаты1,
                                          СуммаБезналичнойОплаты2);
    Если НЕ Результат Тогда
        ВыходныеПараметры.Очистить();
        ВыходныеПараметры.Добавить(999);
        ВыходныеПараметры.Добавить("");
        ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);

        ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
    КонецЕсли;

    Возврат Результат;

КонецФункции


ОбъектДрайвера.ЗакрытьЧек(ПараметрыПодключения.ИДУстройства,
                                          СуммаНаличнойОплаты,
                                          СуммаБезналичнойОплаты1,
                                          СуммаБезналичнойОплаты2);

На этой строчке и получается Результат = Ложь, что инициирует отмену чека.

Вообще, в аналогичной ситуации рекомендуют поставить заглушку в виде "Результат = Истина".
Попробовать смогу только вечером.
Чем может грозить такая заглушка?
18 Галахад
 
гуру
10.07.15
10:56
А из самого драйвера получается пробить нулевой чек?
19 IKSparrow
 
10.07.15
11:03
(18) Да.
20 Галахад
 
гуру
10.07.15
11:36
Может так покатит?

РезультатКоманды = "";
КомандаКВыполнению =     "29" +
            " 1E 00 00 00" +
            " 00 00 00 00 00" +
            " 00 00 00 00 00" +
            " 00 00 00 00 00" +
            " 00 00 00 00 00" +
            " 00 00" +
            " 00" +
            " 00" +
            " 00" +
            " 00";            
КомандаВыполнена = Объект.Драйвер.DeviceControlHEX(Объект.ИДУстройства, КомандаКВыполнению, РезультатКоманды);
21 Галахад
 
гуру
10.07.15
11:37
То есть так:
РезультатКоманды = "";
КомандаКВыполнению =     "85" +
            " 1E 00 00 00" +
            " 00 00 00 00 00" +
            " 00 00 00 00 00" +
            " 00 00 00 00 00" +
            " 00 00 00 00 00" +
            " 00 00" +
            " 00" +
            " 00" +
            " 00" +
            " 00";            
КомандаВыполнена = Объект.Драйвер.DeviceControlHEX(Объект.ИДУстройства, КомандаКВыполнению, РезультатКоманды);
22 IKSparrow
 
10.07.15
11:43
(20) Сейчас не имею возможности попробовать. Попробую снова вечером. А этот код я должен использовать вместо ОбъектДрайвера.ЗакрытьЧек?