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