Как реализовать проведение документа по бухгалтерскому и налоговому учету при печати с предварительным просмотром

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

В практике автоматизации на базе 1С:Управление производственным предприятием (УПП) 1.3 часто возникают задачи, где бизнес-логика требует жесткой связки между получением бумажного носителя и отражением операции в регламентированном учете. Рассмотрим ситуацию, когда кладовщики оформляют «Перемещение товаров» только в управленческом учете, а бухгалтер требует, чтобы в момент распечатки формы ТОРГ-13 документ автоматически проводился по БУ и НУ. Основная сложность здесь заключается в том, что у пользователя может не быть прав на бухгалтерский учет, а стандартное окно предварительного просмотра платформы 1С:Предприятие 8.2/8.3 не предоставляет штатных событий для перехвата нажатия кнопки «Печать».

В этой статье мы подробно разберем, как обойти эти ограничения, настроить предварительный просмотр и обеспечить корректное проведение документа, используя программные механизмы платформы.

Анализ технической проблемы предварительного просмотра

Разберем, почему стандартный подход вызывает трудности. Когда мы используем метод ТабличныйДокумент.Показать(), управление передается в стандартное окно просмотра платформы. Проблема в том, что в коде 1С невозможно отследить, нажал ли пользователь на иконку принтера в этом окне или просто закрыл его. Следовательно, мы не можем гарантировать, что документ проведется только при фактической печати.

Проанализируем ситуацию: если проводить документ до показа формы, а пользователь передумает печатать и закроет окно, документ останется проведенным в БУ. Если пытаться провести после, то мы не узнаем, была ли распечатка. Единственный надежный способ — подмена стандартного окна предпросмотра собственной формой-посредником.

Решение 1: Создание собственной формы предварительного просмотра

Для реализации полноценного контроля нам необходимо создать обработку или добавить в документ вспомогательную форму, которая будет имитировать окно предварительного просмотра. Рассмотрим этот процесс по шагам:

  1. Создадим новую форму, назовем ее ФормаПредпросмотра.
  2. Разместим на ней элемент Поле табличного документа.
  3. Добавим собственные кнопки «Печать» и «Закрыть».

Теперь мы можем полностью контролировать поведение системы. Разберем пример кода, который должен выполняться при нажатии кнопки «Печать» на этой форме:


Процедура КоманднаяПанельПечать(Кнопка)
    
    // Получаем объект документа для редактирования
    ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект();
    
    // Устанавливаем признаки отражения в учете
    ДокОбъект.ОтражатьВБухгалтерскомУчете = Истина;
    ДокОбъект.ОтражатьВНалоговомУчете = Истина;
    
    Попытка
        // Пытаемся провести документ
        // Используем режим записи "Проведение"
        ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
        
        // Если проведение прошло успешно, отправляем на физический принтер
        ЭлементыФормы.ПолеТабличногоДокумента.Напечатать(РежимИспользованияПринтера.ПечатьСЗапросом);
        
        Сообщить("Документ успешно проведен в БУ/НУ и отправлен на печать.");
        ЭтаФорма.Закрыть();
        
    Исключение
        // Если возникли ошибки (например, не заполнены счета учета или не хватает остатков)
        Сообщить("Ошибка при проведении документа: " + ОписаниеОшибки(), СтатусСообщения.Важное);
    КонецПопытки;

КонецПроцедуры

Решение 2: Работа с правами доступа через привилегированный режим

Как отмечалось в обсуждении, у кладовщиков часто нет прав на проведение документов по бухгалтерским регистрам. Чтобы не расширять их полномочия вручную (что небезопасно), выясним, как использовать привилегированный режим. Это позволяет выполнить процедуру проведения игнорируя проверку прав текущего пользователя.

Для этого логику проведения следует вынести в общий модуль с установленным флагом «Привилегированный». Посмотрим на пример такой функции:


// В общем модуле (Привилегированном)
Процедура ПровестиДокументИзПечати(ДокументСсылка) Экспорт
    
    УстановитьПривилегированныйРежим(Истина);
    
    ДокОбъект = ДокументСсылка.ПолучитьОбъект();
    ДокОбъект.ОтражатьВБухгалтерскомУчете = Истина;
    ДокОбъект.ОтражатьВНалоговомУчете = Истина;
    
    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
    
    УстановитьПривилегированныйРежим(Ложь);
    
КонецПроцедуры

Важно помнить: УстановитьПривилегированныйРежим работает только на стороне сервера или в специальных модулях. В УПП 1.3 при работе в обычном приложении убедитесь, что вызов идет корректно согласно архитектуре конфигурации.

Решение 3: Реализация через внешнюю печатную форму (ВПФ)

Если мы хотим избежать внесения изменений в типовую конфигурацию (чтобы облегчить будущие обновления), лучше всего использовать механизм внешних печатных форм. Проанализируем, как внедрить логику проведения в модуль внешней обработки.

В функции Печать(), которая является точкой входа для ВПФ, мы можем реализовать алгоритм проверки состояния документа. Если документ уже проведен в БУ, мы просто выводим форму. Если нет — запускаем процесс проведения.

Рассмотрим структуру кода в модуле внешней обработки:


Функция Печать() Экспорт

    ТабДок = Новый ТабличныйДокумент;
    ДокументОбъект = СсылкаНаОбъект.ПолучитьОбъект();

    // Проверяем, нужно ли допроводить документ
    Если Не (ДокументОбъект.ОтражатьВБухгалтерскомУчете И ДокументОбъект.Проведен) Тогда
        
        // Вызываем логику проведения (возможно через привилегированный модуль)
        Попытка
            ПровестиДокументБухгалтером(ДокументОбъект);
        Исключение
            // Если не удалось провести, возвращаем пустой табдок или сообщение
            Возврат ТабДок; 
        КонецПопытки;
        
    КонецЕсли;

    // Формируем макет ТОРГ-13 (стандартный код формирования)
    // ... здесь идет заполнение ТабДок ...

    Возврат ТабДок;

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

Риски и важные моменты

Выясним причины, по которым к такому решению нужно подходить с осторожностью. Проведение документа в момент печати — это транзакционная операция. Рассмотрим основные риски:

Совет: Чтобы обеспечить максимальный комфорт пользователям, в форме предпросмотра всегда выводите статус: "Документ будет проведен в БУ/НУ после нажатия кнопки Печать". Это снимет лишние вопросы у персонала и исключит случайные ошибки учета.

Таким образом, сочетание внешней печатной формы, привилегированного режима и кастомной формы предпросмотра позволяет элегантно решить задачу автоматизации бухгалтерских процессов на складе, сохраняя при этом контроль над последовательностью действий пользователя.

← На главную