Как вернуть возможность печати непроведенных документов в 1С:Комплексная автоматизация 2 и ERP

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

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

Почему в современных конфигурациях запрещена печать непроведенных документов?

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

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

Если мы попытаемся напечатать документ до его проведения, система столкнется со следующими проблемами:

Именно поэтому разработчики 1С на уровне БСП (Библиотеки стандартных подсистем) ввели жесткую проверку состояния документа перед выводом на печать.

Разбор механизма блокировки в коде

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

Рассмотрим процедуру ДобавитьКомандыПечати. Для каждой команды там создается описание, в котором есть параметр ПроверкаПроведенностиПередПечатью. По умолчанию для юридически значимых документов он установлен в значение Истина.

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

Способ 1: Модификация модуля менеджера через расширение

Это самый правильный технический путь, так как он позволяет сохранить типовую конфигурацию на поддержке. Мы воспользуемся механизмом "Изменение и контроль" для процедуры инициализации команд печати.

Выполним следующие действия:

  1. Создадим новое расширение или откроем существующее.
  2. Добавим в него модуль менеджера нужного нам документа (например, Документ.РеализацияТоваровУслуг).
  3. Найдем процедуру ДобавитьКомандыПечати.
  4. Изменим значение параметра проверки для интересующей нас команды.

Посмотрим на пример кода, который необходимо реализовать в расширении:


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

После такого изменения кнопка печати станет активной даже для непроведенного документа. Однако помните о риске пустых колонок ГТД!

Способ 2: Использование внешних печатных форм (ВПФ)

Если вы не хотите вносить изменения в расширения, можно использовать механизм внешних печатных форм. Это более гибкий вариант, который позволяет настроить доступность печати для каждого пользователя индивидуально через стандартные настройки прав БСП.

При регистрации внешней обработки в справочнике Дополнительные отчеты и обработки система считывает её параметры. В модуле объекта ВПФ, в функции СведенияОВнешнейОбработке, можно явно указать:


ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
// ... заполнение общих параметров ...
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Счет на оплату (непроведенный)'");
НоваяКоманда.Идентификатор = "СчетНаОплатуНепроведенный";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
// Важный момент:
НоваяКоманда.ПроверкаПроведенностиПередПечатью = Ложь; 

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

Способ 3: Глобальное отключение проверки в общем модуле

Существует еще один "быстрый" способ, упомянутый на форумах: найти общую проверку в модулях БСП и отключить её для всех документов сразу. Мы не рекомендуем этот метод для рабочих баз, так как он нарушает логику типового решения, но проанализируем его для понимания работы системы.

В общем модуле УправлениеПечатьюКлиент найдем процедуру ПроверитьПроведенностьДокументов. Если принудительно возвращать в ней результат проверки как "всегда успешно", система перестанет блокировать печать. Но это повлечет за собой ошибки во всех остальных документах системы, где проведение критически важно (например, в регламентированной отчетности).

Альтернативное решение: Работа со статусами

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

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

Это самый правильный методологический путь:

  1. Настроить использование статусов в функциональных опциях программы.
  2. Дать менеджеру права на проведение документа в промежуточном статусе.
  3. Печатать документ, когда он уже технически проведен в статусе "Черновик".

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

Резюме

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

← На главную