Каждый практикующий специалист по внедрению и сопровождению систем на платформе «1С:Предприятие 8» рано или поздно сталкивается с ситуацией, когда стандартный, годами отлаженный функционал внезапно дает сбой. Одной из таких неприятных неожиданностей в конфигурациях «1С:Комплексная автоматизация 2» (КА) и «1С:Управление торговлей 11» (УТ) является появление системного сообщения «Печатная форма недоступна» при попытке вывести на печать Универсальный передаточный документ (УПД) или Счет-фактуру.
Особенно остро эта проблема проявляется в периоды законодательных изменений или сразу после обновления конфигурации на новый релиз. Давайте детально проанализируем эту проблему, разберем скрытые механизмы работы конфигураций КА и УТ, выясним истинные причины блокировки печати и выработаем пошаговый алгоритм устранения этой ошибки.
Для того чтобы понять природу возникновения ошибки, нам необходимо заглянуть «под капот» современных конфигураций ERP-линейки. Начиная с определенных версий (период перехода на ставку НДС 20%), разработчики фирмы «1С» кардинально оптимизировали механизмы работы с торговыми и налоговыми документами.
В систему был внедрен специализированный вспомогательный регистр сведений ДанныеОснованийСчетовФактур. Этот регистр выполняет роль связующего звена и кэша данных. Вместо того чтобы при формировании печатной формы УПД каждый раз динамически собирать тяжелым запросом информацию из различных табличных частей документов реализации, система обращается к подготовленным записям в этом регистре.
Если по какой-то причине при проведении документа-основания (например, РеализацияТоваровУслуг или АктВыполненныхРабот) записи в регистре ДанныеОснованийСчетовФактур не сформировались, то при попытке нажать кнопку «Печать» алгоритм формирования УПД или Счета-фактуры вернет отказ, и пользователь увидит сообщение «Печатная форма недоступна».
Дополнительно в коде конфигураций присутствует проверка служебной константы, регулирующей печать счетов-фактур по данным торговых документов. Если эта константа сбрасывается или перезаписывается, алгоритмы начинают работать в обход привычных реквизитов формы, ориентируясь исключительно на наличие движений по регистру оснований.
Рассмотрим подробнее ключевые факторы, из-за которых ломается механизм формирования печатной формы:
ВидыЗапасов, это может нарушить стандартную цепочку проведения. Так как виды запасов рассчитываются автоматически при проведении реализации, сбой в этом механизме блокирует создание движений по регистру оснований счетов-фактур.Записать(РежимЗаписиДокумента.Запись) или проводят документ с отключением стандартных обработчиков. В таком случае виды запасов не рассчитываются, движения по регистру ДанныеОснованийСчетовФактур не создаются, и печать становится недоступной.Проанализируем ситуацию на практике и разберем по шагам, как локализовать ошибку и вернуть пользователям возможность печатать документы.
Первым делом нам необходимо выяснить, действительно ли в регистре отсутствуют записи по проблемному документу. Для этого выполним следующие действия:
Данные оснований счетов-фактур.Документ-основание, выбрав нашу проблемную реализацию.Поскольку формирование записей регистра напрямую завязано на табличную часть видов запасов, проверим ее состояние. В форме документа «Реализация товаров и услуг» откроем меню Еще -> Открыть виды запасов. Если эта табличная часть пуста или заполнена некорректно, система не сможет определить параметры НДС для регистра оснований. Попробуем выполнить перезаполнение:
Если перепроведение документа не дает результатов и виды запасов не формируются, временно отключим активные расширения, влияющие на проведение торговых документов:
Активно у подозрительного расширения.Иногда корни проблемы лежат в плоскости методологии учета. Проанализируем настройки учетной политики организации. Перейдем в настройки параметров учета и проверим, создана ли актуальная запись учетной политики на текущий отчетный период. Часто пользователи забывают скопировать и продлить учетную политику на новый календарный год, из-за чего алгоритмы определения ставок НДС и налогообложения начинают отрабатывать некорректно.
Если проблема носит массовый характер и вызвана программным созданием документов из внешних систем, нам необходимо модифицировать код загрузки. Простой метод Записать() не вызовет нужных подписок на события проведения. Нам нужно обеспечить полноценный вызов механизмов проведения документов 1С. Рассмотрим пример кода, который принудительно инициирует расчет видов запасов и проведение:
// Пример программного проведения документа с расчетом видов запасов
ДокументОбъект = СсылкаНаРеализацию.ПолучитьОбъект();
// Установим режим проведения
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
// При необходимости вызываем процедуру расчета видов запасов программно
ПараметрыПроведения = РасчетСистемныхПараметров.ПолучитьПараметрыПроведения(ДокументОбъект);
РасчетВидовЗапасовСервер.СформироватьВидыЗапасовДокумента(ДокументОбъект, ПараметрыПроведения);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Использование правильных методов проведения гарантирует, что все подписки на события сработают штатно, регистр сведений ДанныеОснованийСчетовФактур будет заполнен актуальными данными, а пользователи смогут без препятствий печатать УПД и счета-фактуры.