В практике работы с программой «1С:Бухгалтерия 8.3» нередко возникают ситуации, когда розничный чек ошибочно получает статус «Пробит». Это может произойти из-за технического сбоя при связи с онлайн-кассой, когда данные в информационную базу записались, а физической печати чека на ККТ не произошло. В таких случаях пользователь сталкивается с проблемой: документ заблокирован для редактирования, а на форме красуется надпись о том, что чек уже фискализирован. Простое удаление или пометка на удаление здесь не помогут, так как логика программы жестко привязывает статус к определенным реквизитам и записям в регистрах.
В рамках данной статьи мы подробно разберем, как программно и интерактивно «снять» этот статус, очистить служебные данные и вернуть документу вид «непробитого» чека. Рассмотрим механизмы проверки статуса и способы безопасной корректировки данных.
Прежде чем переходить к активным действиям, нам необходимо понять, каким образом 1С определяет, пробит чек или нет. Проанализируем программный код, который управляет видимостью баннера «Чек пробит». Как правило, в конфигурациях на управляемых формах за это отвечает логика, прописанная в модуле формы документа. Рассмотрим пример логического выражения, которое определяет состояние документа:
Элементы.ГруппаБаннерПробитЧек.Видимость = ЗначениеЗаполнено(Объект.НомерЧекаККМ)
И НЕ ЭтоВозврат
И Форма.ЕстьПравоВводаЧекаКоррекции
И НЕ Форма.ЭтоЧекКоррекции
И ПечатьФискальныхДокументовВызовСервера.ЕстьФискальныеОперацииПоДокументу(Объект.Ссылка, Истина);
Из этого фрагмента кода мы можем сделать важные выводы. Для того чтобы статус «Пробит» исчез, должны быть соблюдены (или, точнее, нарушены) следующие условия:
ЕстьФискальныеОперацииПоДокументу проверяет наличие записей в специальном регистре сведений. Если там есть активная запись, связанная с вашим документом, баннер будет отображаться в любом случае, даже если вы очистите номер чека.Таким образом, наша задача сводится к двум основным этапам: очистке реквизитов внутри самого документа и удалению соответствующих записей в регистрах системы.
Рассмотрим самый доступный способ для пользователя или администратора — групповую обработку. Посмотрим, как правильно настроить этот инструмент, чтобы увидеть скрытые поля.
Зайдем в раздел Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов. В поле «Изменять» выберем тип документа «Розничный чек» (или «Приходный кассовый ордер», если чек пробивался из него). Прежде чем искать нужные поля, выполним критически важную настройку:
Теперь в списке реквизитов найдем и изменим следующие значения:
НомерЧекаККМ — установим значение 0 или просто очистим поле.ДатаЧекаККМ — очистим значение даты.СтатусЧекаККМ — если данный реквизит присутствует в вашей версии конфигурации, установим его в состояние «Не пробит».После внесения изменений нажмем «Изменить реквизиты». Однако, как показывает практика, одного этого действия часто бывает недостаточно из-за работы функций вызова сервера, которые проверяют физическое наличие связей с кассой.
Выясним причину, по которой даже после очистки номера чека статус может сохраняться. Как мы уже выяснили выше, программа обращается к функции ПечатьФискальныхДокументовВызовСервера.ЕстьФискальныеОперацииПоДокументу. Эта функция анализирует регистр сведений «Фискальные операции».
Проанализируем ситуацию: в этом регистре хранится полная информация о транзакции, отправленной на ККТ, включая XML-пакет данных и ответ от кассы. Чтобы окончательно убрать статус «Пробит», нам нужно удалить связь документа с этим регистром.
Для этого выполним следующие действия:
После удаления записи из этого регистра и очистки реквизитов НомерЧекаККМ, система перестанет видеть документ как фискализированный.
Если вы программист, то быстрее всего будет воспользоваться внешней обработкой «Консоль кода» или создать небольшую временную обработку. Рассмотрим пример кода, который выполняет комплексную очистку документа:
ОбъектДок = ДокументСсылка.ПолучитьОбъект();
ОбъектДок.НомерЧекаККМ = 0;
ОбъектДок.ДатаЧекаККМ = '00010101';
// Если есть реквизит СтатусЧекаККМ
// ОбъектДок.СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.ПустаяСсылка();
ОбъектДок.ОбменДанными.Загрузка = Истина;
ОбъектДок.Записать();
// Очистка регистра
НаборЗаписей = РегистрыСведений.ФискальныеОперации.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Документ.Установить(ДокументСсылка);
НаборЗаписей.Записать(); // Записываем пустой набор, тем самым удаляя старые записи
Использование свойства ОбменДанными.Загрузка = Истина позволяет обойти стандартные проверки при записи объекта, что критично, когда документ находится в закрытом периоде или имеет установленные блокировки.
Проанализируем последствия данных манипуляций. Важно понимать разницу между исправлением ошибки в учетной системе и отменой операции на фискальном накопителе:
Подводя итог, можно сказать, что статус «Пробит» в 1С:Бухгалтерии 8.3 — это динамическая величина, зависящая от комбинации реквизитов документа и данных в регистре «Фискальные операции». Последовательная очистка этих данных гарантированно возвращает документу исходное состояние.