В процессе автоматизации рабочих мест кассиров часто возникает необходимость жесткого контроля последовательности действий: сначала оплата и пробитие чека на фискальном регистраторе, и только потом — печать «Товарного чека». Давайте вместе разберемся, как реализовать этот запрет и избежать несанкционированной печати.
При стандартной настройке 1С, когда пользователь нажимает кнопку печати, платформа инициирует цепочку вызовов. Даже если вы создали внешнюю печатную форму (ВПФ), система 1С до вызова вашего кода успевает проверить состояние документа. Она видит, что он не проведен, и предлагает пользователю его записать и провести автоматически. Эти стандартные вопросы «встроены» в механизмы управления печатью конфигурации и срабатывают до передачи управления в ваш программный код.
Если задача стоит запретить печать, не прибегая к сложным изменениям структуры (расширениям), мы можем добавить проверку непосредственно в модуль объекта нашей внешней печатной формы. Рассмотрим, как это сделать по шагам.
Нам необходимо внедрить проверку статуса документа в процедуру формирования печатной формы. Мы будем проверять, является ли документ ЧекККМ проведенным и какой у него установлен статус. Если условия не соблюдены, мы должны прервать выполнение и уведомить пользователя.
Посмотрим на пример реализации кода:
Процедура Печать(МассивОбъектов, ПараметрыПечати) Экспорт
Для Каждого ТекущийОбъект Из МассивОбъектов Цикл
// Проверка проведения документа
Если Не ТекущийОбъект.Проведен Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Сначала произведите оплату!");
Возврат;
КонецЕсли;
// Проверка статуса чека (например, для Розницы)
Если ТекущийОбъект.СтатусЧека <> ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.Пробит") Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Печать возможна только после статуса 'Чек пробит'!");
Возврат;
КонецЕсли;
КонецЦикла;
// Далее следует логика заполнения табличного документа
КонецПроцедуры
Использование метода Возврат внутри цикла позволяет остановить процесс формирования печатной формы, не вызывая ошибок системы, связанных с попыткой вывода пустого документа.
Хотя правка ВПФ — самый простой путь, она не избавляет от всех системных вопросов, которые задает платформа 1С перед запуском печати. Чтобы полностью исключить появление вопросов «Для выполнения команды... данные будут записаны», рекомендуется использовать Расширение конфигурации.
Рассмотрим преимущества этого метода:
&Перед, мы можем установить Отказ = Истина, если условия не выполнены. Это блокирует дальнейший вызов стандартных процедур печати.Пример логики для расширения:
&Перед("Печать")
Процедура Расширение_ПередПечатью(Команда, ПараметрыКоманды, Отказ)
Если Не Команда.Объект.Проведен Тогда
Отказ = Истина;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Печать товарного чека запрещена до пробития чека ККМ.");
КонецЕсли;
КонецПроцедуры
Частая проблема при попытке «тихой» отмены печати — возникновение ошибок в журнале регистрации. Чтобы этого избежать, при работе с ВПФ убедитесь, что вы не вызываете метод СформироватьПечатнуюФорму(), если проверка не пройдена. Если вы используете метод с пустой формой, вы лишь маскируете ошибку, но не решаете архитектурную задачу.
Важно: Всегда проверяйте не только состояние Проведен, но и конкретный статус фискализации объекта ЧекККМ. Использование метода ПредопределенноеЗначение гарантирует, что ваш код будет корректно работать при обновлении конфигурации.
Подводя итог: если вам нужно быстрое решение — встраивайте проверку в модуль объекта ВПФ через Возврат. Если вы хотите сделать систему надежной, «чистой» и исключить любые системные сообщения — создавайте расширение с использованием обработчика событий Перед вызовом команды печати.