Почему не формируется печатная форма документа «Комплектация номенклатуры» в 1С:УПП?

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

В процессе работы с конфигурацией «1С:Управление производственным предприятием» (УПП, редакция 1.3) на платформе «1С:Предприятие 8.2» (или в режиме совместимости на 8.3) пользователи часто сталкиваются с неприятной ситуацией. При попытке распечатать документ Комплектация номенклатуры система никак не реагирует: на экран не выводится печатная форма, не возникает видимых ошибок, а принтер молчит. При этом другие документы в системе печатаются в штатном режиме.

В этой статье мы подробно проанализируем причины такого поведения системы, разберем сопутствующие ошибки, возникающие при отладке (в частности, сбой обращения к ХранилищеПараметровВнешнихРегламентированныхОтчётов), и рассмотрим пошаговые методы устранения этой проблемы.

Причина 1: Специфика встроенной бизнес-логики и видов операций документа

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

  1. Комплектация номенклатуры (сборка или разборка номенклатурных позиций на складе).
  2. Выпуск продукции (упрощенное отражение выпуска готовой продукции без использования сложного производственного учета).

Разработчики фирмы «1С» заложили встроенный макет печатной формы только для первого вида операции — «Комплектация номенклатуры». Для операции «Выпуск продукции» встроенного макета в типовой конфигурации УПП 1.3 не предусмотрено вовсе. Когда пользователь нажимает кнопку печати, алгоритм модуля документа проверяет текущий вид операции. Не находя соответствующего макета или обработчика для «Выпуска продукции», программа просто прерывает выполнение процедуры без вывода предупреждающих сообщений.

Посмотрим на пример упрощенного кода в модуле документа, иллюстрирующий эту логику:


Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПечать = Ложь) Экспорт
    
    // Проверяем вид операции документа
    Если ЭтотОбъект.ВидОперации = Перечисления.ВидыОперацийКомплектацияНоменклатуры.Комплектация Тогда
        ТабДокумент = ПечатьКомплектации(ИмяМакета);
        Возврат ТабДокумент;
    ИначеЕсли ЭтотОбъект.ВидОперации = Перечисления.ВидыОперацийКомплектацияНоменклатуры.ВыпускПродукции Тогда
        // Для выпуска продукции встроенная печатная форма не предусмотрена!
        // Возвращаем Неопределено, из-за чего экран формы печати не открывается
        Возврат Неопределено;
    КонецЕсли;

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

Для решения этой проблемы на практике мы можем пойти двумя путями:

Причина 2: Сбой кэша метаданных и ошибка обращения к общему модулю

Иногда при попытке отладить процесс печати и пошагово пройти алгоритм в конфигураторе разработчик натыкается на непредвиденную ошибку времени выполнения:

Ошибка при получении значения атрибута контекста (ХранилищеПараметровВнешнихРегламентированныхОтчётов) в модуле ОбщийМодуль.РегламентированнаяОтчетность.Модуль...

Эта ошибка напрямую не связана с макетом комплектации, но блокирует работу механизмов печати. Проанализируем ситуацию: почему платформа спотыкается на обращении к этому атрибуту? Выделим три ключевые причины:

  1. Повреждение локального кэша платформы: При некорректном завершении сеанса 1С или сбоях сети файлы локального кэша метаданных на компьютере пользователя забиваются некорректными ссылками. При попытке инициализировать механизмы печати внешних или встроенных форм система считывает поврежденные данные из кэша.
  2. Проблемы с правами доступа: Объект ХранилищеПараметровВнешнихРегламентированныхОтчётов является частью подсистемы регламентированной отчетности. Даже если у пользователя установлены «Полные права», в некоторых нетиповых или измененных ролях могут отсутствовать права на чтение конкретных системных регистров или справочников, где хранятся параметры отчетов.
  3. Нарушение логической целостности базы данных: При обновлении конфигурации или сбое СУБД могут нарушиться внутренние индексы таблиц, из-за чего платформа физически не может прочитать значение реквизита.

Пошаговая инструкция по устранению проблем с печатью

Рассмотрим подробнее комплекс шагов, которые помогут полностью восстановить работоспособность печати и устранить системные ошибки.

Шаг 1. Очистка кэша платформы «1С:Предприятие»

Если при попытке печати или в процессе отладки возникает ошибка обращения к контексту общего модуля, первым делом выполним глубокую очистку кэша. Для этого выполним следующие действия:

  1. Полностью закроем все запущенные сеансы «1С:Предприятия» на компьютере пользователя.
  2. Откроем проводник Windows и перейдем по следующим путям (где ИмяПользователя — учетная запись в ОС):
    • C:\Users\ИмяПользователя\AppData\Local\1C\1Cv82
    • C:\Users\ИмяПользователя\AppData\Roaming\1C\1Cv82
    Примечание: Если используется платформа 8.3, папка в конце пути будет называться 1Cv8.
  3. Удалим все папки с буквенно-цифровыми наименованиями (например, a3b2c1d0-e5f6-...). Именно в них хранится временный кэш конфигурации.
  4. Запустим 1С заново и проверим печать.

Шаг 2. Тестирование и исправление информационной базы

Для устранения внутренних сбоев логической целостности и восстановления индексов таблиц базы данных запустим утилиту тестирования в Конфигураторе:

  1. Откроем базу в режиме Конфигуратор под пользователем с административными правами.
  2. В главном меню перейдем в раздел Администрирование — Тестирование и исправление...
  3. Установим флажки напротив следующих пунктов:
    • Реиндексация таблиц информационной базы;
    • Проверка логической целостности;
    • Проверка физической целостности;
    • Реструктуризация таблиц информационной базы.
  4. Нажмем кнопку Выполнить. Перед началом процедуры обязательно создайте резервную копию базы данных!

Шаг 3. Использование программного обхода ограничений прав (для разработчиков)

Если детальный анализ прав показал, что ошибка чтения атрибута ХранилищеПараметровВнешнихРегламентированныхОтчётов происходит из-за жестких ограничений безопасности, мы можем временно запустить исполнение кода в привилегированном режиме. Посмотрим на пример модификации кода общего модуля:


// Перед обращением к проблемному атрибуту включаем привилегированный режим
УстановитьПривилегированныйРежим(Истина);

Попытка
    ПараметрыХранилища = РегламентированнаяОтчетность.ХранилищеПараметровВнешнихРегламентированныхОтчётов;
Исключение
    ПараметрыХранилища = Неопределено;
    ЗаписатьЛогОшибки(ОписаниеОшибки());
КонецПопытки;

// Обязательно отключаем привилегированный режим после выполнения операции
УстановитьПривилегированныйРежим(Ложь);

Шаг 4. Подключение внешней печатной формы для операции «Выпуск продукции»

Чтобы пользователи могли печатать документ комплектации с операцией «Выпуск продукции», выполним разработку и подключение внешней формы:

  1. Создадим новую внешнюю обработку в Конфигураторе и настроим в ее модуле стандартную функцию экспортного интерфейса Печать().
  2. Добавим в обработку макет печатной формы, содержащий необходимые поля (например, поля выпуска готовых изделий, перечень комплектующих материалов, подписи ответственных лиц).
  3. Сохраним обработку в формате .epf.
  4. В режиме «1С:Предприятие» перейдем в меню: Сервис — Дополнительные отчеты и обработки — Дополнительные внешние печатные формы.
  5. Создадим новую запись, загрузим наш файл .epf и укажем в табличной части документ Комплектация номенклатуры.

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

← На главную