Проблемы с кассой у клиента 77 при переходе на ДТО 10
У клиента заменили АТОЛ ДТО 8 на ДТО 10, потому что ДТО 8 уже не поддерживается. Пришлось перенастраивать оборудование.
Первая проблема — настройка обработки обслуживания
Скачал обработку обслуживания кассы frATOL54_comm.ert с Инфостарта: https://infostart.ru/1c/tools/1350696
Установил ее в 1С:
Также рекомендую статью: https://infostart.ru/1c/articles/991465
Пришлось немного адаптировать обработку, заменил код получения ставки НДС, благо клиент работал без НДС:
Отлаживать было сложно, после каждой ошибки нужно было закрывать 1С, т.к. 1С считала что чек открыт и выдавала ошибку о том, что не может начать новый чек.
При пробитии реализации выдавало предупреждение, не мешающее работе:
Не удалось записать в документ реквизиты чека ККМ: Объект заблокирован: Реализация ТН00005538 (15.11.24)
Проблема озвучена на Мисте, но решили пока оставить так.
Вторая проблема — фамилия кассира.
Дополнительно возникла проблем с тем, что вместо ФИО кассира печатался «Системный администратор».
Все же пришлось поискать, откуда вызывается обработка обслуживания, искал по всем текстам по «Кассир»:
Можно поискать и по «печатать_чек», вызывается из глобальной процедуры глФРПечататьЧек:
Однако оказалось, что по кнопке печати чека вызывается дополнительная внешняя печатная форма FR54_ПечатьЧека.ERT, а у нее уже своя процедура глФРПечататьЧек:
Функция глФРПечататьЧек(СписокТоваров, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека, ПУП, Кассир) Экспорт
В итоге сделал следующую доработку:
Код на 77:
//Осипов - доработка +++ ВыбКассир = ""; ВыбКасса = глЗначениеПоУмолчанию("ОсновнаяКасса"); Кассир = ""; Если ПустоеЗначение(ВыбКасса) = 0 Тогда ВыбКассир = ВыбКасса.КассирККМ.Получить(ТекущаяДата()); //Если ПустоеЗначение(ВыбКассир) = 1 Тогда //ВыбКассир = Фирма.ЮрЛицо.Кассир.Получить(ДатаДок); //КонецЕсли; Кассир = глФамилияИмяОтчество(ВыбКассир); Параметры.Установить("Кассир" , Кассир); КонецЕсли; //---
Можно было выводить и автора из документа, но это было бы немного объёмнее, клиента устроило так.
Третья проблема. Не печатается отчет без гашения
Для печати Х и Z-отчетов используется обрабокта fr54_настройки:
В обработке обслуживания просто не предусмотрена печать Х-отчета, это процесс «отчет_без_гашения»:
Добавляем в обработку обслуживания поддержку отчета без гашения, все работает:
ИначеЕсли Процесс = "отчет_без_гашения" Тогда Объект = Парам.Получить("Объект"); Кассир = Парам.Получить("Кассир"); ПарольАдминистратора = Парам.Получить("ПарольАдминистратора"); Объект.setParam(1021, СокрЛП(Кассир)); //fptr.setParam(1203, '123456789047'); Объект.operatorLogin(); Объект.setParam(Объект.LIBFPTR_PARAM_REPORT_TYPE, Объект.LIBFPTR_RT_X); Объект.report(); Объект.checkDocumentClosed();
Четвертая проблема. Безнал печатается как нал
Смотрим в fr54_ПечатьЧека.ert как реализована печать чека по безналу, используя поля СуммаЧека и Получено:
ЧекПробитККМ = глФРПечататьЧек(Список, СуммаЧека, ?((Получено=0)и(ПризнакОплатыКартой=0),СуммаЧека,Получено), Скидка, ПризнВозврата, НомерСекции, НомерЧека); //тщи ?(Получено=0,Итог("Сумма"),Получено) -> ?((Получено=0)и(ПризнакОплатыКартой=0),Итог("Сумма"),Получено) //если Получено < СуммаЧека, то значит оплата идет по банковской карте
Чтобы разобраться, какая сумма оплачена картой, можно подсмотреть в процедуре:
Или тут:
В обработке frATOL54_comm.ert разделение нал/безнал тоже есть:
Но в ней же не реализована поддержка оплаты безналом и возврат:
//Осипов Если СуммаЧека>Получено Тогда //??? предусмотреть чтение реквизитов ОплаченоНаличными, ОплаченоЭлектронными и т.д. (также в модулях доков) Картой = СуммаЧека-Получено; Налом = Получено; ОплатаКартой = 1; Иначе Картой = 0; Налом = Получено; ОплатаКартой = 0; КонецЕсли; //Закрыть чек //Если ПризнВозврата=0 Тогда //Осипов, оплата и налом и безналом Сообщить("Сумма чека: " + СуммаЧека + " Получено: " + Получено + " Налом: " + Налом + " Картой: " + Картой); Если Налом <> 0 Тогда //Оплата налом Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_TYPE, Объект.LIBFPTR_PT_CASH); //Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_SUM, СуммаЧека); Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_SUM, Налом); Объект.payment(); КонецЕсли; Если Картой <> 0 Тогда //Оплата картой Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_TYPE, Объект.LIBFPTR_PT_ELECTRONICALLY); //Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_SUM, СуммаЧека); Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_SUM, Картой); Объект.payment(); КонецЕсли;
И доделал еще для возврата:
//Осипов - всегда безнал в реализации Если Докум.Вид() = "Реализация" Тогда Получено = 0; //Налом ПризнакОплатыКартой = 1; //Картой КонецЕсли; //Осипов - всегда безнал в возврате Если Докум.Вид() = "ВозвратОтПокупателя" Тогда Получено = 0; //Налом ПризнакОплатыКартой = 1; //Картой КонецЕсли; Сообщить("Вид: " + Докум.Вид() + " Сумма чека: " + СуммаЧека + " Получено: " + Получено + " ПризнакОплатыКартой: " + ПризнакОплатыКартой);
Пример информационных сообщений:
В итоге после череды ошибочных чеков у клиента все заработало!
Среда: ТиС 7.70.997 Объем: 1.5 час
Свежие комментарии