Как разрешить печать внешней печатной формы (ВПФ) для непроведенного документа в 1С:УТ 11?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Стандартный механизм платформы 1С требует, чтобы документ был проведен перед тем, как для него можно будет сформировать и распечатать печатную форму. Это сделано для обеспечения целостности данных: именно в момент проведения выполняются все расчеты, проверки остатков и списание товаров. Однако в некоторых бизнес-процессах возникает необходимость распечатать документ (например, счет или коммерческое предложение) еще до его официального проведения. Давайте разберем, как обойти это ограничение для внешних печатных форм (ВПФ) в конфигурации "Управление торговлей 11", используя универсальный инструмент для обхода типовых ограничений или программные доработки, и какие риски это несет. В качестве готового инструмента подойдет расширение для печати непроведенных документов в УТ 11.

Решение 1: Глобальное отключение проверки через переопределяемый модуль (Рекомендуемый способ)

Наиболее правильный и универсальный способ — использовать механизм расширений и переопределяемых модулей. Этот подход позволяет вносить изменения в логику системы, не редактируя основную конфигурацию, что значительно упрощает дальнейшие обновления. Подробно этот метод описан в техническом руководстве по использованию модуля ДополнительныеОтчетыИОбработкиКлиентПереопределяемый.

В типовых конфигурациях существует специальный общий модуль ДополнительныеОтчетыИОбработкиКлиентПереопределяемый. Он предназначен как раз для таких доработок. Нам нужно в этом модуле создать или дополнить процедуру ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы.

Разберем по шагам:

  1. Создайте новое расширение конфигурации, если у вас его еще нет. Добавьте в него общий модуль ДополнительныеОтчетыИОбработкиКлиентПереопределяемый. Также вы можете использовать уже готовое расширение для печати непроведенных документов, которое позволяет включать и отключать эту возможность для отдельных пользователей.
  2. В модуле расширения создайте процедуру с аннотацией &Вместо или &После, в зависимости от ваших задач. Для полного отключения проверки используем перехват события.
  3. Внутри этой процедуры нужно установить параметр СтандартнаяОбработка в значение Ложь. Этот параметр говорит системе, что мы берем управление на себя и отменяем стандартные действия, включая проверку на проведение документа.

Посмотрим на пример кода:

Этот код отключает проверку для всех внешних печатных форм в системе.


Процедура ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(ПечатаемыеОбъекты, СтандартнаяОбработка) Экспорт
    // Отменяем стандартную обработку, которая включает проверку проведения.
    СтандартнаяОбработка = Ложь;
КонецПроцедуры

Такой подход очень гибкий. Вы можете добавить условия, чтобы проверка отключалась только для определенных документов, пользователей или конкретных ВПФ. Например, если нужно разрешить печать только для документа "Счет на оплату клиенту":


Процедура ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(ПечатаемыеОбъекты, СтандартнаяОбработка) Экспорт
    
    // Проверяем, что в массиве печатаемых объектов есть хотя бы один объект
    Если ПечатаемыеОбъекты.Количество() > 0 Тогда
        
        // Получаем тип первого объекта в массиве
        ТипПервогоОбъекта = ТипЗнч(ПечатаемыеОбъекты[0]);
        
        // Если это счет на оплату, то отключаем проверку
        Если ТипПервогоОбъекта = Тип("ДокументСсылка.СчетНаОплатуКлиенту") Тогда
            СтандартнаяОбработка = Ложь;
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Для таких точечных задач, как печать счета, можно не отключать проверку глобально, а воспользоваться готовыми внешними печатными формами — например, есть внешняя печатная форма счета с QR-кодом для УТ 11. Например, существуют решения для печати счета на оплату с картинками или для формирования счета с офертой, которые изначально спроектированы для работы с непроведенными документами.

Решение 2: Модификация кода самой ВПФ (Точечный способ)

Если вам нужно отключить проверку только для одной конкретной внешней печатной формы, можно внести изменения непосредственно в ее код — для этого можно использовать шаблон внешней печатной формы с отключенной проверкой. Этот проверенный временем способ реализации печати в 1С 8.3 более трудоемкий, но дает полный контроль над процессом.

Проанализируем шаги:

  1. Откройте файл ВПФ в режиме конфигуратора.
  2. Перейдите в модуль объекта и найдите процедуру СведенияОВнешнейОбработке().
  3. В этой процедуре найдите строку, где описывается ваша команда печати. Обычно она имеет тип ОткрытиеФормы. Вам нужно изменить его на ВызовКлиентскогоМетода.

    Было:

    Команда.ТипКоманды = "ОткрытиеФормы";

    Стало:

    Команда.ТипКоманды = "ВызовКлиентскогоМетода";
  4. Теперь перейдите в модуль формы вашей ВПФ.
  5. Создайте новую экспортную клиентскую процедуру с именем, которое вы указали в качестве обработчика команды на предыдущем шаге (например, Печать()). Эта процедура будет вызываться напрямую, минуя стандартный механизм.
  6. Внутри этой процедуры вам нужно самостоятельно реализовать всю логику: получить данные из объекта, сформировать табличный документ и вывести его на печать.

Этот способ полностью обходит стандартные проверки платформы, но требует от вас написания дополнительного кода по формированию печатной формы. Впрочем, многие готовые разработки, например, ВПФ для печати реализации с QR-кодом, уже содержат необходимый код и могут работать с непроведенными документами «из коробки».

Почему не работает способ для штатных печатных форм?

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

Посмотрим на пример такого кода для документа "Реализация товаров и услуг":


&После("ДобавитьКомандыПечати")
Процедура Расш_ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    ПараметрыОтбора = Новый Структура("Идентификатор", "РасходнаяНакладная");
    НайденныеСтроки = КомандыПечати.НайтиСтроки(ПараметрыОтбора);
          
    Для Каждого СтрокаНС Из НайденныеСтроки Цикл 
        // Отключаем проверку для конкретной штатной команды
        СтрокаНС.ПроверкаПроведенияПередПечатью = Ложь;
    КонецЦикла;    
    
КонецПроцедуры

Важно понимать, почему это не работает для ВПФ. Штатные команды печати добавляются в список непосредственно в модуле менеджера документа. А внешние печатные формы подгружаются и регистрируются другим, более общим механизмом подсистемы ДополнительныеОтчетыИОбработки. Процедура ДобавитьКомандыПечати конкретного документа просто "не видит" команды от ВПФ, поэтому изменить их свойство ПроверкаПроведенияПередПечатью таким образом невозможно.

Критически важные риски!

Прежде чем отключать проверку проведения, необходимо четко осознавать последствия. Эта проверка — не просто техническое ограничение, а важный элемент контроля целостности учета. Часто применяется программная модификация для объектов, не имеющих движений по регистрам, чтобы минимизировать риски при печати черновиков.

Проанализируем ситуацию из реальной практики:

Менеджер создает документ реализации на 5 единиц товара. На свободном остатке числится только 2 единицы, а еще 3 зарезервированы под заказ другого менеджера. Документ, естественно, не проводится из-за нехватки остатка. Однако, если разрешена печать непроведенных документов, менеджер распечатывает накладную на 5 единиц и отгружает товар клиенту.

Что происходит в итоге?

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

← На главную