Не фискализируются чеки после обновления 1с розница
Добрый день, возникла проблема после обновления 1с розница до релиза 2.3.8.27 чеки становятся в очередь и не фискализируются, после пробития товара в окне рмк номенклатура остаётся на экране, кассы совершенно разные возникает хаотично у многих клиентов, как базовые так и профф, помогает только очистка регистра сведений "очередь чеков," все возможные манипуляции с драйверами, настройками уже проводили, как победить х. з
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(8)Как я понял программисты 1С добавили так называемую отложенную фискализацию. Если при продаже возникает какая либо ошибка. Будь это сбой УТМ или недоступность ККТ, то программа просто этот чек игнорирует и ставит его в очередь на фискализацию. Они внедрили новую ерунду, но забыли сделать так что бы она работала.
(10)Дело не в кассах. У меня Атол 30, 11Ф. Штрихи. Разницы нет. Сам механизм работает "каряво".
Надо пробовать писать в саппорт. Но я думаю что они скажут что всё так и задумано. Но такая работа нам не нужна. Последнее время у них всё печально по обновлениям. Не важно какой ПП. В каждом какие то глюки.
Если вдруг сможете решить проблему, отпишитесь пожалуйста.
Я на данный момент вижу только одно решение. Переезд на Фронтол. Там я давно уже не видел каких то глобальных проблем.
Фронтол отлично выполняет свою основную задачу - касса торгует, а не висит, выпадает в ошибки, ругается на карявые патчи, которые наоборот должны что то исправлять.
Надо пробовать писать в саппорт. Но я думаю что они скажут что всё так и задумано. Но такая работа нам не нужна. Последнее время у них всё печально по обновлениям. Не важно какой ПП. В каждом какие то глюки.
Если вдруг сможете решить проблему, отпишитесь пожалуйста.
Я на данный момент вижу только одно решение. Переезд на Фронтол. Там я давно уже не видел каких то глобальных проблем.
Фронтол отлично выполняет свою основную задачу - касса торгует, а не висит, выпадает в ошибки, ругается на карявые патчи, которые наоборот должны что то исправлять.
С такой же проблемой решили обновить до 2.3.9.23. Проблема не ушла, и даже стала немного хуже, так как рандомно выскакивает ошибка "нет доступных ккт для фискализации чека", и кассиру нужно добить чек еще раз. Есть и битые чеки, когда создается не проведенный документ Чек, с статусом Пробитый.
(15) х.з что делать у нас пока локализовалась только на одной точке, на всех других вроде норм, после обновления ушла, на этой одной поднят веб сервер iis компы по тонкому клиенту работают, и кассы дрянь касс Вики принт 57 , програмист мой приедет с морей будет колдовать
Получилось что нить придумать. У нас 2.3.8.27 точек 100 все работают на облаке по тонкому клиенту... чего я только не видел с 1 июня когда мы обновились на этот релиз чтобы он сгорел... и просто 1с зависает (уходит в фон) и нет доступных ККТ и по банку вышли а наш товарный не вышел. Это явно проблема связи 1с с ККТ... Что делать не понятно
(17) ничего пока . у нас 400 точек )) базовые и профф и рибы периодически проблема вылезает то там то тут , чаще всего дриммкасс ,будем пробовать менять юсб подключение на железный ком , вы попробуйте расширение написать , которое старую схему работы вернет ( без очереди фискализации ) нам не вариант .
Кто-нибудь смог решить проблему? Чеки пробиваются, но при этом висят в статусе "чек в очереди" , в журнале чеков висят, как не проведенные, нет номера смены, номера чека и статуса тоже нет. приходиться подключаться ставить статус на "пробитый", тогда при закрытии смены чеки попадают в ОРП.
Проблемма когда выходит ошибка " нет доступных ККТ для фискализации чека" - 1с не может получить некоторые параметры, из-за того как сама много обробатывает чек, прежде чем его фискализировать. а что бы в очереди не стоял чек - нужно ставить в параметрах ккт галочку "автоматическая фискализация" и галочка отчаться от ккт не должна стоять. проблемму с битыми (непроведенными чеками решил регламентным заданием после 20 - 00 чеки проводятся, которые со статусом пробитый но не проведеный) кому нужен код скину)
Еще есть такой трабл 1с не всегда получает ответ от ккт (по эквайрингу) что слип чеки вышли и происходит что оплата не прошла. У на Атол 60+ точек. Сервисники сказали проблемма - в датчиках бумаги и крышки (но я думаю скорее бумаги) на плати коротится датчик бумаги с землей) и он больше не реагирует на бумагу.
(28) Не могу сказать, используется ли регистр "Очередь чеков ККТ", но я попробовал поставить эту галку, не помогло. 1С Розница ПРОФ 2.3.8.27 + Атол 55Ф подключенный через ethernet.
В коде конфигурации нашел только 1 потенциальное решение:
В функции ПолучитьДоступноеККТДляФискализации(...) Общего модуля МенеджерОборудованияКлиент есть следующий код:
Думаю на счёт того, чтобы убрать условие, но сам еще не проверял. Судя по коду очевидно, что проблема именно в этом условии, то есть в получении параметров из ККТ.
В коде конфигурации нашел только 1 потенциальное решение:
В функции ПолучитьДоступноеККТДляФискализации(...) Общего модуля МенеджерОборудованияКлиент есть следующий код:
Если УстройствоКодыНалогообложения.Найти(Строка(СистемаНалогообложения)) <> Неопределено
И УстройствоОрганизацияИНН = ОрганизацияИНН Тогда
ИдентификаторУстройстваККТ = Устройство.Ссылка;
Прервать;
КонецЕсли;
Думаю на счёт того, чтобы убрать условие, но сам еще не проверял. Судя по коду очевидно, что проблема именно в этом условии, то есть в получении параметров из ККТ.
(31)18.платформа самый последний релиз, у клиента дрянь касс вика 57 , там нет галочек, одна касса на кабеле юсб - ком ( в компорт кассы и юсб компа) вторая виртуальный ком, поднят веб сервер на головном компе, кассовые компы на веб сервере по тонкому клиенту, елинственая проблемма не бьются больше одной пачки сигарет по куаркоду, одна пробивается, на предьидущем релизе розницы этой проблемы не было, патчи все стоят
1с Розница. У нас релиз 2.3.9.37 и платформа 8.3.18.1616 - чеки уходят в отложенные по непонятным причинам, то уходят в ОФД в 1с висят не пробитыми, то наоборот((( ФФД 1.0
Открытие/закрытие смены через РМК - не всегда успешно, в основном зависает окно, приходится через режим менеджера открывать/закрывать смену. Чеки только через групповое изменение реквизитов приходится делать пробитыми.
Подскажите кто обновился розницы 2.3.9.37 и платформу обновили до версии 8.3.18.563 все работает, ФФД до 1.2 стоит обновляться?
Открытие/закрытие смены через РМК - не всегда успешно, в основном зависает окно, приходится через режим менеджера открывать/закрывать смену. Чеки только через групповое изменение реквизитов приходится делать пробитыми.
Подскажите кто обновился розницы 2.3.9.37 и платформу обновили до версии 8.3.18.563 все работает, ФФД до 1.2 стоит обновляться?
(62)
пока не работало 1.2 нормально с маркировкой. никак. сейчас вроде уже поддержано - дрова 10.9.0.4 и последняя розница. но на живую не трогаю. жду теста.. или коллегу выше - что бы проверил )
рупповое изменение реквизитов приходится делать пробитыми.
Подскажите кто обновился розницы 2.3.9.37 и платф
Подскажите кто обновился розницы 2.3.9.37 и платф
пока не работало 1.2 нормально с маркировкой. никак. сейчас вроде уже поддержано - дрова 10.9.0.4 и последняя розница. но на живую не трогаю. жду теста.. или коллегу выше - что бы проверил )
Не фига не работает. Обновились до последней версии. ККТ атол 52ф. Не один чек пробить не можем ))
Чек не напечатан на устройстве для печати чеков.
Дополнительное описание: Нет доступных ККТ для фискализации чека.
Пробовали все что могли. База ккт видит, но чеки не пробивает.
Чек не напечатан на устройстве для печати чеков.
Дополнительное описание: Нет доступных ККТ для фискализации чека.
Пробовали все что могли. База ккт видит, но чеки не пробивает.
(65) Обновились до версии 1С Розницы 2.3.9.42 и ....
1. Из формы документа Чек ККМ - пробить не возможно , пишет ошибку - Нет доступных ККТ для фискализации чека.
Зато чек провести можно .
2. Пробивать этот чек нужно идти в РМК , выбрать - пробить не пробитый чек. И чек пробит - фискализирован.
3. Узнали про "Очередь чеков" . Вся в ошибках.
4. Из РМК чеки пробиваются через раз , или совсем не пробиваются . ну конечно если перезагрузить клиент 1С то тогда работает.
Но от силы 2 чека , а вот на третий чек опять ошибка .
Второй день боли страданий и унижений.
Откатиться на версию 2.3.6.17 не можем. Увы и ах!
1. Из формы документа Чек ККМ - пробить не возможно , пишет ошибку - Нет доступных ККТ для фискализации чека.
Зато чек провести можно .
2. Пробивать этот чек нужно идти в РМК , выбрать - пробить не пробитый чек. И чек пробит - фискализирован.
3. Узнали про "Очередь чеков" . Вся в ошибках.
4. Из РМК чеки пробиваются через раз , или совсем не пробиваются . ну конечно если перезагрузить клиент 1С то тогда работает.
Но от силы 2 чека , а вот на третий чек опять ошибка .
Второй день боли страданий и унижений.
Откатиться на версию 2.3.6.17 не можем. Увы и ах!
Провели обновление розницы на релиз 2.3.9.37, платформа 8.3.18.1563. И также столкнулись с ошибкой. В магазинах стали в течение дня выскакивать сообщения "нет доступных ККТ для фискализации чека". Стал разбираться: сделал через расширение запись данных для пробивки чека перед выводом сообщения об ошибке и обнаружил, что магазин 1 пытается фискализировать чек магазина 2 на оборудовании магазина 2, а магазин 2 - фискализировать чек магазина 1 на оборудовании магазина1. При этом магазин 1 каким-то образом фискализирует свой чек на своей кассе, у второго выскакивает ошибка о недоступности кассы. Касс много. Происходит это с чеками, которые в очереди печати чеков появляются в одно и тоже время с точностью до секунды. Будем разбираться дальше, но видимо придется как-то возвращать печать сразу на кассу без этой очереди.
(69)Можете написать если решили проблему ?
При обращении в техподдрежку 1С нас тупо пинают : Апрививку сделали ? А ПЦР сдали ? А может у вас драйвер не тот , а может прошивка ни та , а может проблема с ФН , а может ... просто - А может ?
Такое ощущение что набрали кучу студентов в 1С , и те занимаются разработкой!
При обращении в техподдрежку 1С нас тупо пинают : А
Такое ощущение что набрали кучу студентов в 1С , и те занимаются разработкой!
(70)В общем модуле ОборудованиеЧекопечатающиеУстройстваВызовСервера есть функция ЧекиВОчередиНаФискализацию. Содержит запрос
Она возвращает список чеков для фискализации. С ней уже приходилось сталкиваться в Розница 2.3.7.22, в этой версии были случаи задвоения чеков, хоть и не часто, но были. Причина: в этой версии розницы в очередь писались чеки, которые по мнению 1С при пробивке на кассе завершались ошибкой. При этом если по кассе на самом деле чек проходил нормально при повторной обработке очереди чек отправлялся на кассу еще раз. Тогда в условии выборки убрал отбор чеков со статусом с ошибкой. Задвоений не стало.
В версии 2.3.9.37 чеки с ошибкой больше в очередь не пишутся, поэтому задвоения и штатным запросом нет.
Но этим запросом вытягиваются все чеки из очереди для фискализации, получается "мне, не мне - все мне".
Возможно это и нужно для реализации механизмы печати на ККТ, не подключенное к рабочему месту. Но мне не нужно, у меня каждое рабочее место печатает чек на своей кассе. Добавил в условие отбора "ОчередьЧековККТ.ТорговыйОбъект = &ТорговыйОбъект", где Запрос.УстановитьПараметр("ТорговыйОбъект",ПараметрыСеанса.ТекущийМагазин);
Ошибки "нет доступных ККТ для фискализации чека" прекратились. Точнее может такие и будут, но уже когда реально ККТ будет недоступна.
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ОчередьЧековККТ.ИдентификаторЗаписи КАК ИдентификаторЗаписи,
| ОчередьЧековККТ.ТипДокумента КАК ТипДокумента,
| ОчередьЧековККТ.ТипРасчета КАК ТипРасчета,
| ОчередьЧековККТ.Организация КАК Организация,
| ОчередьЧековККТ.СтатусЧека КАК СтатусЧека,
| ОчередьЧековККТ.ТорговыйОбъект КАК ТорговыйОбъект,
| ОчередьЧековККТ.ДокументОснование КАК ДокументОснование,
| ОчередьЧековККТ.Сумма КАК Сумма,
| ОчередьЧековККТ.ДанныеЧека КАК ДанныеЧека
|ИЗ
| РегистрСведений.ОчередьЧековККТ КАК ОчередьЧековККТ
|ГДЕ
| (ОчередьЧековККТ.СтатусЧека = ЗНАЧЕНИЕ(Перечисление.СтатусЧекаККТВОчереди.Новый)) ИЛИ
| (ОчередьЧековККТ.СтатусЧека = ЗНАЧЕНИЕ(Перечисление.СтатусЧекаККТВОчереди.Ошибка))
|УПОРЯДОЧИТЬ ПО ОчередьЧековККТ.Дата УБЫВ");
ПоказатьОна возвращает список чеков для фискализации. С ней уже приходилось сталкиваться в Розница 2.3.7.22, в этой версии были случаи задвоения чеков, хоть и не часто, но были. Причина: в этой версии розницы в очередь писались чеки, которые по мнению 1С при пробивке на кассе завершались ошибкой. При этом если по кассе на самом деле чек проходил нормально при повторной обработке очереди чек отправлялся на кассу еще раз. Тогда в условии выборки убрал отбор чеков со статусом с ошибкой. Задвоений не стало.
В версии 2.3.9.37 чеки с ошибкой больше в очередь не пишутся, поэтому задвоения и штатным запросом нет.
Но этим запросом вытягиваются все чеки из очереди для фискализации, получается "мне, не мне - все мне".
Возможно это и нужно для реализации механизмы печати на ККТ, не подключенное к рабочему месту. Но мне не нужно, у меня каждое рабочее место печатает чек на своей кассе. Добавил в условие отбора "ОчередьЧековККТ.ТорговыйОбъект = &ТорговыйОбъект", где Запрос.УстановитьПараметр("ТорговыйОбъект",ПараметрыСеанса.ТекущийМагазин);
Ошибки "нет доступных ККТ для фискализации чека" прекратились. Точнее может такие и будут, но уже когда реально ККТ будет недоступна.
(76) Я РИБ не использую, поэтому однозначно утверждать не могу, но в форумах встречал, что расширения по РИБ распространяются плохо, поэтому снимают конфигурацию с поддержки и вносят изменения в неё, такие изменения вроде как проходят по РИБ нормально (с оговоркой что сам не пробовал)
(72) Долго бился. потом оказалось, что неправильно скорректировал запрос. Приложу всю процедуру модуля, вдруг кому пригодится.
Еще мне не нравилось здесь
что данные очереди чеков берутся из глобальной переменной, а не из параметров сеанса. Т.е. в случае одновременного пробития по веб-клиенту на 2 -х машинах, данные могут перезаписаться , если использовать наш, дописанный алгоритм ...
&Вместо("ЧекиВОчередиНаФискализацию")
Функция Расш1_ЧекиВОчередиНаФискализацию()
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ОчередьЧековККТ.ИдентификаторЗаписи КАК ИдентификаторЗаписи,
| ОчередьЧековККТ.ТипДокумента КАК ТипДокумента,
| ОчередьЧековККТ.ТипРасчета КАК ТипРасчета,
| ОчередьЧековККТ.Организация КАК Организация,
| ОчередьЧековККТ.СтатусЧека КАК СтатусЧека,
| ОчередьЧековККТ.ТорговыйОбъект КАК ТорговыйОбъект,
| ОчередьЧековККТ.ДокументОснование КАК ДокументОснование,
| ОчередьЧековККТ.Сумма КАК Сумма,
| ОчередьЧековККТ.ДанныеЧека КАК ДанныеЧека
|ИЗ
| РегистрСведений.ОчередьЧековККТ КАК ОчередьЧековККТ
|ГДЕ
| (ОчередьЧековККТ.СтатусЧека = ЗНАЧЕНИЕ(Перечисление.СтатусЧекаККТВОчереди.Новый)
| ИЛИ ОчередьЧековККТ.СтатусЧека = ЗНАЧЕНИЕ(Перечисление.СтатусЧекаККТВОчереди.Ошибка))
| И ОчередьЧековККТ.ТорговыйОбъект = &ТорговыйОбъект
|
|УПОРЯДОЧИТЬ ПО
| ОчередьЧековККТ.Дата УБЫВ");
ЧекиНаФискализацию = Новый Массив();
Запрос.УстановитьПараметр("ТорговыйОбъект",ПараметрыСеанса.ТекущийМагазин);
//
ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации("Отладка ",,, "Текущий магазин:" + ПараметрыСеанса.ТекущийМагазин);
//
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеЧека = Новый Структура;
ДанныеЧека.Вставить("ИдентификаторЗаписи");
ДанныеЧека.Вставить("ТипДокумента");
ДанныеЧека.Вставить("ТипРасчета");
ДанныеЧека.Вставить("СтатусЧека");
ДанныеЧека.Вставить("Организация");
ДанныеЧека.Вставить("ТорговыйОбъект");
ДанныеЧека.Вставить("Сумма");
ДанныеЧека.Вставить("ДокументОснование");
ЗаполнитьЗначенияСвойств(ДанныеЧека, Выборка);
ДанныеЧека.Вставить("ДанныеЧека", Выборка.ДанныеЧека.Получить());
ЧекиНаФискализацию.Добавить(ДанныеЧека);
//
ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации("Отладка ",,, "Добавлен в очередь чек: " + Выборка.ДокументОснование );
КонецЦикла;
Возврат ЧекиНаФискализацию;
КонецФункции
ПоказатьЕще мне не нравилось здесь
Процедура ФискализацияЧековВОчереди_Начало()
ДанныеОчереди = глПодключаемоеОборудование.ДанныеОчереди;
что данные очереди чеков берутся из глобальной переменной, а не из параметров сеанса. Т.е. в случае одновременного пробития по веб-клиенту на 2 -х машинах, данные могут перезаписаться , если использовать наш, дописанный алгоритм ...
(89) Да, но мы еще и этот кусок дописали.
Там получается при пробитии очередь чеков магазина суется в глобальную переменную . И Чисто теоретически может подхватиться другим магазином.
Процедура ФискализацияЧековВОчереди_Начало()
ДанныеОчереди = глПодключаемоеОборудование.ДанныеОчереди;
Там получается при пробитии очередь чеков магазина суется в глобальную переменную . И Чисто теоретически может подхватиться другим магазином.
(90) А здесь вместо глобальной переменной вы как начали данные очереди получать?
До процедуры ФискализацияЧековВОчереди_Начало() вызывается функция ФискализацияЧековВОчереди(), где как раз заполняются данные очереди.
До процедуры ФискализацияЧековВОчереди_Начало() вызывается функция ФискализацияЧековВОчереди(), где как раз заполняются данные очереди.
ДанныеОчереди = Новый Структура();
ДанныеОчереди.Вставить("Кассир" , ТекущийКассир.Кассир);
ДанныеОчереди.Вставить("КассирИНН" , ТекущийКассир.КассирИНН);
ДанныеОчереди.Вставить("ЧекиВОчереди" , ЧекиВОчереди);
ДанныеОчереди.Вставить("СписокУстройств", СписокУстройств);
ДанныеОчереди.Вставить("НомерЧека" , 0);
глПодключаемоеОборудование.ДанныеОчереди = ДанныеОчереди;
Показать
(91) Мы не могли найти в чем причина и на всякий случай еще раз вызывали эту процедуру. Точнее ее копию.
Т.е. все перепробовали и была гипотеза, что между этими процедурами успевал вклиниться еще одна точка с пробитием.
В итоге так и оставили.
Если вам вдруг поможет, напишите, пожалуйста. Интересно было бы знать, есть такой глюк или нет.
Т.е. все перепробовали и была гипотеза, что между этими процедурами успевал вклиниться еще одна точка с пробитием.
В итоге так и оставили.
Если вам вдруг поможет, напишите, пожалуйста. Интересно было бы знать, есть такой глюк или нет.
&Вместо("ФискализацияЧековВОчереди_Начало")
Процедура Расш1_ФискализацияЧековВОчереди_Начало()
ДанныеОчереди = глПодключаемоеОборудование.ДанныеОчереди;
// ++st Сергей Иванов 60824 05.05.2022
Попытка
ДанныеОчереди = ПолучитьДанныеОчереди();
ТекстОписания = преобразоватьСписокУтройств(ДанныеОчереди.ЧекиВОчереди[0].ДанныеЧека);
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации("Отладка ",, "Получил данные очереди: " + ТекстОписания ,,Истина);
исключение
ДанныеОчереди = глПодключаемоеОборудование.ДанныеОчереди;
ТексОшибки = "Произошла ошибка при заполнении данных очереди - " + ОписаниеОшибки();
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации("Отладка ",, ТексОшибки ,,Истина);
КонецПопытки;
// --st Сергей Иванов 60824 05.05.2022
Если ДанныеОчереди.НомерЧека < ДанныеОчереди.ЧекиВОчереди.Количество() Тогда
ЧекВОчереди = ДанныеОчереди.ЧекиВОчереди[ДанныеОчереди.НомерЧека];
ДанныеОчереди.НомерЧека = ДанныеОчереди.НомерЧека + 1;
Если ЧекВОчереди.ДанныеЧека <> Неопределено Тогда
ОбщиеПараметры = ЧекВОчереди.ДанныеЧека;
СтатусДокументаИзменен = Ложь;
МенеджерОборудованияВызовСервераПереопределяемый.ПроверитьСтатусДокументаОснования(ОбщиеПараметры, СтатусДокументаИзменен);
Если СтатусДокументаИзменен Тогда
ЧекВОчереди.СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Фискализирован");
КонецЕсли;
Иначе
ФискализацияЧековВОчереди_Начало();
Возврат;
КонецЕсли;
Если ЧекВОчереди.СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Новый")
Или ЧекВОчереди.СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Ошибка") Тогда
Если ПустаяСтрока(ОбщиеПараметры.Кассир) Тогда
ОбщиеПараметры.Кассир = ДанныеОчереди.Кассир;
ОбщиеПараметры.КассирИНН = ДанныеОчереди.КассирИНН;
КонецЕсли;
ИдентификаторУстройстваККТ = ПолучитьДоступноеККТДляФискализации(ОбщиеПараметры, ДанныеОчереди.СписокУстройств);
// ++st Сергей Иванов 60824 05.05.2022
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации("Отладка ",, "Идентификатор устройства:" + ИдентификаторУстройстваККТ ,,Истина);
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации("Отладка ",, "Кол-во доступных устройств:" + ДанныеОчереди.СписокУстройств.Количество() ,,Истина);
Если МенеджерОборудованияКлиентПовтИсп.ИспользуетсяЧекопечатающиеУстройства() Тогда
МодульОборудованиеЧекопечатающиеУстройстваВызовСервера = ОбщегоНазначенияКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваВызовСервера");
МодульОборудованиеЧекопечатающиеУстройстваКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиент");
// ++st Сергей Иванов 60824 05.05.2022
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации("Отладка ",, "Зашло 1" ,,Истина);
Если НЕ ЗначениеЗаполнено(ИдентификаторУстройстваККТ) Тогда
// ++st Сергей Иванов 60824 05.05.2022
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации("Отладка ",, "Упало в ошибку" ,,Истина);
ТекстСообщения = НСтр("ru='Нет доступных ККТ для фискализации чека.'");
СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Ошибка");
МодульОборудованиеЧекопечатающиеУстройстваВызовСервера.ЗаписатьСтатусЧекаВОчереди(ОбщиеПараметры, СтатусЧека, Неопределено, ТекстСообщения);
// ++st Сергей Иванов 60824 05.05.2022
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации("Отладка ",,преобразоватьСписокУтройств(ОбщиеПараметры),,Истина);
//
Иначе
СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Фискализируется");
МодульОборудованиеЧекопечатающиеУстройстваВызовСервера.ЗаписатьСтатусЧекаВОчереди(ОбщиеПараметры, СтатусЧека, ИдентификаторУстройстваККТ);
Если ОбщиеПараметры.Свойство("ЕстьАлкогольнаяПродукцияЕГАИС") И ОбщиеПараметры.ЕстьАлкогольнаяПродукцияЕГАИС Тогда
ОповещениеПослеОткрытииЧека = Новый ОписаниеОповещения("ФискализацияЧековВОчереди_ПослеОткрытияЧека", ЭтотОбъект, ОбщиеПараметры);
ОповещениеПриОшибкеПечатиЧека = Новый ОписаниеОповещения("ФискализацияЧековВОчереди_ПослеОшибкиПечатиЧека", ЭтотОбъект, ОбщиеПараметры);
ДополнительныеПараметры = МенеджерОборудованияКлиентСервер.ДополнительныеПараметрыОперации();
ДополнительныеПараметры.Вставить("ОповещениеПослеОткрытииЧека", ОповещениеПослеОткрытииЧека);
ДополнительныеПараметры.Вставить("ОповещениеПриОшибкеПечатиЧека", ОповещениеПриОшибкеПечатиЧека);
Иначе
ДополнительныеПараметры = Неопределено;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ФискализацияЧековВОчереди_Завершение", ЭтотОбъект, ОбщиеПараметры);
УникальныйИдентификатор = Новый УникальныйИдентификатор;
Если ОбщиеПараметры.Свойство("СформироватьЧекКоррекции") И ОбщиеПараметры.СформироватьЧекКоррекции Тогда
МодульОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФормированиеЧекаКоррекцииНаФискальномУстройстве(ОписаниеОповещения, УникальныйИдентификатор, ИдентификаторУстройстваККТ, ОбщиеПараметры, ДополнительныеПараметры);
Иначе
МодульОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаНаФискальномУстройстве(ОписаниеОповещения, УникальныйИдентификатор, ИдентификаторУстройстваККТ, ОбщиеПараметры, ДополнительныеПараметры);
КонецЕсли;
Возврат;
КонецЕсли;
КонецЕсли;
Иначе
ФискализацияЧековВОчереди_Начало();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПолучитьДанныеОчереди(РазрешенаАвтоматическаяФискализация = Истина)
ПоддерживаемыеТипыВО = Новый Массив();
ПоддерживаемыеТипыВО.Добавить("ПринтерЧеков");
ПоддерживаемыеТипыВО.Добавить("ККТ");
СписокУстройств = МенеджерОборудованияВызовСервера.ОборудованиеПоПараметрам(ПоддерживаемыеТипыВО,,,,, РазрешенаАвтоматическаяФискализация);
Если СписокУстройств.Количество() = 0 Тогда
Возврат неопределено;
КонецЕсли;
Если МенеджерОборудованияКлиентПовтИсп.ИспользуетсяЧекопечатающиеУстройства() Тогда
МодульОборудованиеЧекопечатающиеУстройстваВызовСервера = ОбщегоНазначенияКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваВызовСервера");
ЧекиВОчереди = МодульОборудованиеЧекопечатающиеУстройстваВызовСервера.ЧекиВОчередиНаФискализацию();
Если ЧекиВОчереди.Количество() = 0 Тогда
Возврат неопределено;
КонецЕсли;
КонецЕсли;
Кассир = "";
ВыполненаСтандартнаяОбработка = Истина;
МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияИмяКассира(Кассир, ВыполненаСтандартнаяОбработка);
Кассир = ?(Не ВыполненаСтандартнаяОбработка, Кассир, НСтр("ru='Администратор'"));
КассирИНН = "";
ВыполненаСтандартнаяОбработка = Истина;
МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияИННКассира(КассирИНН, ВыполненаСтандартнаяОбработка);
КассирИНН = ?(Не ВыполненаСтандартнаяОбработка, КассирИНН, "");
ДанныеОчереди = Новый Структура();
ДанныеОчереди.Вставить("Кассир" , Кассир);
ДанныеОчереди.Вставить("КассирИНН" , КассирИНН);
ДанныеОчереди.Вставить("ЧекиВОчереди" , ЧекиВОчереди);
ДанныеОчереди.Вставить("СписокУстройств", СписокУстройств);
ДанныеОчереди.Вставить("НомерЧека" , 0);
Возврат ДанныеОчереди;
КонецФункции
Функция преобразоватьСписокУтройств(Структура)
Текст = "";
Для каждого Элемент Из Структура Цикл
//добавим разделитель после предыдущего значения
Текст = Текст + ?(НЕ ПустаяСтрока(Текст), Символы.ПС, "");
//добавим представление ключа и значения:
Текст = Текст + Элемент.Ключ + " = " + Элемент.Значение;
КонецЦикла;
Возврат Текст
КонецФункции
Показать
(92) Пока что тестирую процедуру только с измененным запросом. На текущий момент результат положительный.
Скорее всего проблема в том что в момент появления записи в РС Очередь чеков ККТ со статусом "Не фискализирован" до момента смены статуса на "Фискализирован" к РС может обратиться другая касса(например другого магазина), которая запросом получит этот чек, считает данные очереди и попытается найти данное устройство подключенное к своему рабочему месту, в результате получит ошибку. Нужно будет посмотреть в какой момент создаются записи в данный РС.
Скорее всего проблема в том что в момент появления записи в РС Очередь чеков ККТ со статусом "Не фискализирован" до момента смены статуса на "Фискализирован" к РС может обратиться другая касса(например другого магазина), которая запросом получит этот чек, считает данные очереди и попытается найти данное устройство подключенное к своему рабочему месту, в результате получит ошибку. Нужно будет посмотреть в какой момент создаются записи в данный РС.
(76) Я РИБ не использую, поэтому однозначно утверждать не могу, но в форумах встречал, что расширения по РИБ распространяются плохо, поэтому снимают конфигурацию с поддержки и вносят изменения в неё, такие изменения вроде как проходят по РИБ нормально (с оговоркой что сам не пробовал)
Странная ошибка вообще
ИдентификаторУстройстваККТ бывает не заполнен при
1. "чужой" чек (что должно лечится (72)
2. нет кассы в реквизитах чека, а вот почему их иногда нет это вопрос.
ИдентификаторУстройстваККТ бывает не заполнен при
1. "чужой" чек (что должно лечится (72)
2. нет кассы в реквизитах чека, а вот почему их иногда нет это вопрос.
Скрытый текст |
---|
ИдентификаторУстройстваККТ = ПолучитьДоступноеККТДляФискализации(ОбщиеПараметры, ДанныеОчереди.СписокУстройств);
Если НЕ ЗначениеЗаполнено(ИдентификаторУстройстваККТ) Тогда
ТекстСообщения = НСтр("ru='Нет доступных ККТ для фискализации чека.'");
//////////////////////////////////////////////////////////// Показать |
Работаю уже как второй кассир, лечу "нет доступных ККТ для фискализации чека" под админом провожу и пробиваю чеки в ручную (покупателю нужен чек, стоит и ждет)
8.3.18.1363
Розница, редакция 2.3 (2.3.10.61)
Атол 55Ф последние драйвера (какие только не пробовал)
Нашел кто-нибудь решение?
8.3.18.1363
Розница, редакция 2.3 (2.3.10.61)
Атол 55Ф последние драйвера (какие только не пробовал)
Нашел кто-нибудь решение?
Дело действительно в глобальной переменной , и процедуре ("ФискализацияЧековВОчереди_Начало"). В (92) не совсем корректно отрабатывает кэширование этой очереди(её я тоже пробовал). Поэтому пошёл простым путём и начал сечь чужие чеки через определение магазина. Следом вылезла такая же ошибка если 1 магазин а там две кассы, тогда было решено завести 2 отдельных физлица на каждую из этих касс (Раньше заходили под одним) поэтому у меня есть условие на физлицо .
Чуть ниже место где надо исправить код процедуры, версия клиент серверная, работают одновременно 80 человек полёт нормальный.
P.S. Можно было немного модифицировать подход из поста (92) но не было времени
Чуть ниже место где надо исправить код процедуры, версия клиент серверная, работают одновременно 80 человек полёт нормальный.
P.S. Можно было немного модифицировать подход из поста (92) но не было времени
&Вместо("ФискализацияЧековВОчереди_Начало")
Процедура ХМ_ФискализацияЧековВОчереди_Начало()
ДанныеОчереди = глПодключаемоеОборудование.ДанныеОчереди;
Если ДанныеОчереди.НомерЧека < ДанныеОчереди.ЧекиВОчереди.Количество() Тогда
ЧекВОчереди = ДанныеОчереди.ЧекиВОчереди[ДанныеОчереди.НомерЧека];
ДанныеОчереди.НомерЧека = ДанныеОчереди.НомерЧека + 1;
//Громов С.В + //Попытка исправить ошибку Когда чеки лезут из другой ККМ в очередь чеков
Если ЧекВОчереди.ТорговыйОбъект <> ХМ_ОбщегоНазначенияВызовСервера.ТекущийМагазин()//В общем модуле определяю текущий магазин
Или ЧекВОчереди.ДанныеЧека.Кассир <> ХМ_ОбщегоНазначенияВызовСервера.ИмяФизлица() Тогда //В общем модуле получаю !!Наименование физлица из параметров сеанса
ФискализацияЧековВОчереди_Начало();
Возврат;
КонецЕсли;
//-
Если ЧекВОчереди.ДанныеЧека <> Неопределено Тогда
ОбщиеПараметры = ЧекВОчереди.ДанныеЧека;
СтатусДокументаИзменен = Ложь;
МенеджерОборудованияВызовСервераПереопределяемый.ПроверитьСтатусДокументаОснования(ОбщиеПараметры, СтатусДокументаИзменен);
Если СтатусДокументаИзменен Тогда
ЧекВОчереди.СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Фискализирован");
КонецЕсли;
Иначе
ФискализацияЧековВОчереди_Начало();
Возврат;
КонецЕсли;
Показать
Всех приветствую. На релизе 1С розница 2.3.13.18 последняя на текущий момент, продолжаются проблемы с фискализацией чеков на ККТ. Нет доступных ККТ для фискализации чека. Проблему удалось решить добавив код в расширение общие модули (ОборудованиеЧекопечатающиеУстройстваВызовСервера). У нас в магазинах стоят по 2-3 кассы и чеки становясь в очередь не могли быть зафискализированы на своей ККТ и попадали на другие кассы. Пример кода ниже:
&Вместо("ЧекиВОчередиНаФискализацию")
Функция Расш1_ЧекиВОчередиНаФискализацию()
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ОчередьЧековККТ.ИдентификаторЗаписи КАК ИдентификаторЗаписи,
| ОчередьЧековККТ.ТипДокумента КАК ТипДокумента,
| ОчередьЧековККТ.ТипРасчета КАК ТипРасчета,
| ОчередьЧековККТ.Организация КАК Организация,
| ОчередьЧековККТ.СтатусЧека КАК СтатусЧека,
| ОчередьЧековККТ.ТорговыйОбъект КАК ТорговыйОбъект,
| ОчередьЧековККТ.ДокументОснование КАК ДокументОснование,
| ОчередьЧековККТ.Сумма КАК Сумма,
| ОчередьЧековККТ.ДанныеЧека КАК ДанныеЧека,
| ОчередьЧековККТ.ТипПакетнойОперации КАК ТипПакетнойОперации,
| ОчередьЧековККТ.ЭквайринговыйТерминал КАК ЭквайринговыйТерминал,
| ОчередьЧековККТ.ПараметрыПакетнойОперации КАК ПараметрыПакетнойОперации
|ИЗ
| РегистрСведений.ОчередьЧековККТ КАК ОчередьЧековККТ
|ГДЕ
| ((ОчередьЧековККТ.СтатусЧека = ЗНАЧЕНИЕ(Перечисление.СтатусЧекаККТВОчереди.Новый)) ИЛИ
| (ОчередьЧековККТ.СтатусЧека = ЗНАЧЕНИЕ(Перечисление.СтатусЧекаККТВОчереди.Ошибка)))
| И ОчередьЧековККТ.ТорговыйОбъект = &ТорговыйОбъект
| И ОчередьЧековККТ.ДокументОснование.КассаККМ.РабочееМесто = &РабочееМесто
|УПОРЯДОЧИТЬ ПО ОчередьЧековККТ.Дата УБЫВ");
Запрос.УстановитьПараметр("ТорговыйОбъект",ПараметрыСеанса.ТекущийМагазин);
Запрос.УстановитьПараметр("РабочееМесто", ПараметрыСеанса.РабочееМестоКлиента);
ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации("Отладка ",,, "РабочееМестоКлиента:" + ПараметрыСеанса.РабочееМестоКлиента);
ЧекиНаФискализацию = Новый Массив();
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеЧека = Новый Структура;
ДанныеЧека.Вставить("ИдентификаторЗаписи");
ДанныеЧека.Вставить("ТипДокумента");
ДанныеЧека.Вставить("ТипРасчета");
ДанныеЧека.Вставить("СтатусЧека");
ДанныеЧека.Вставить("Организация");
ДанныеЧека.Вставить("ТорговыйОбъект");
ДанныеЧека.Вставить("РабочееМесто");
ДанныеЧека.Вставить("Сумма");
ДанныеЧека.Вставить("ДокументОснование");
ДанныеЧека.Вставить("ТипПакетнойОперации");
ДанныеЧека.Вставить("ЭквайринговыйТерминал");
ДанныеЧека.Вставить("ДанныеЧека", Новый Структура());
ДанныеЧека.Вставить("ПараметрыПакетнойОперации", Новый Структура());
ЗаполнитьЗначенияСвойств(ДанныеЧека, Выборка);
ХранилищеДанныеЧека = ДанныеЧека.ДанныеЧека;
Если ТипЗнч(ХранилищеДанныеЧека) = Тип("ХранилищеЗначения") Тогда
ДанныеЧека.ДанныеЧека = ХранилищеДанныеЧека.Получить();
КонецЕсли;
ХранилищеПараметрыПакетнойОперации = ДанныеЧека.ПараметрыПакетнойОперации;
Если ТипЗнч(ХранилищеПараметрыПакетнойОперации) = Тип("ХранилищеЗначения") Тогда
ДанныеЧека.ПараметрыПакетнойОперации = ХранилищеПараметрыПакетнойОперации.Получить();
КонецЕсли;
ЧекиНаФискализацию.Добавить(ДанныеЧека);
КонецЦикла;
Возврат ЧекиНаФискализацию;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот