Как исправить ошибку «Внешняя обработка не может быть прочитана текущей версией программы» при печати документов в 1С?

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

При попытке сформировать или распечатать накладную, счет или любой другой документ с использованием внешней печатной формы пользователи и разработчики нередко сталкиваются с системным сбоем. Платформа 1С выдает сообщение: «Не удалось сформировать внешнюю печатную форму! Ошибка при вызове метода контекста (Создать): Ошибка подключения внешних метаданных: Ошибка загрузки документа. Внешняя обработка не может быть прочитана текущей версией программы».

Проанализируем контекст возникновения данной неполадки в программном коде конфигурации. Обычно формирование печатной формы выполняется через выгрузку двоичных данных из базы во временный файл и последующее создание объекта внешней обработки:


Функция НапечататьВнешнююФорму(Ссылка, ИсточникМакета) Экспорт
    ДвоичныеДанные = ИсточникМакета.СсылкаНаВнешнююОбработку.ХранилищеВнешнейОбработки.Получить();
    Если ДвоичныеДанные = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли;

    ИмяФайла = ПолучитьИмяВременногоФайла("epf");
    Попытка
        ДвоичныеДанные.Записать(ИмяФайла);
        Обработка = ВнешниеОбработки.Создать(ИмяФайла);
        Обработка.СсылкаНаОбъект = Ссылка;
        ТабДокумент = Обработка.Печать();
        УдалитьФайлы(ИмяФайла);
    Исключение
        ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось сформировать внешнюю печатную форму!");
    КонецПопытки;
    Возврат ТабДокумент;
КонецФункции

Сбой происходит ровно на строке вызова метода ВнешниеОбработки.Создать(ИмяФайла). Разберем детально причины этого поведения и пошаговый алгоритм устранения проблемы.

Причины возникновения ошибки

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

  1. Неконвертированный формат предыдущей версии платформы: если информационная база переносилась с платформы «1С:Предприятие 8.1» на «8.2» или «8.3», файлы обработок внутри справочника дополнительных печатных форм остаются сохраненными в старом бинарном формате. Метод ВнешниеОбработки.Создать() в режиме предприятия требует файл текущей версии и не производит его автоматическую фоновую конвертацию.
  2. Несовместимость форматов сверху вниз: если обработка была сохранена в более новой платформе (например, в 8.3 или в релизе с более высоким номером сборки), запустить ее на более старой версии платформы 8.2 технически невозможно, так как обратная совместимость структуры метаданных платформой не поддерживается.
  3. Повреждение бинарных данных: сбой при выгрузке или загрузке информационной базы, аварийное завершение сеанса или ошибки СУБД могут привести к повреждению данных в реквизите ХранилищеЗначения. В таком случае метод ДвоичныеДанные.Записать() создает битый файл.
  4. Блокировка временного файла: антивирусное ПО или средства безопасности операционной системы могут блокировать только что созданный файл в системной директории %TEMP% на время фонового сканирования.

Пошаговое решение проблемы: выгрузка и пересохранение обработки

Рассмотрим основной и самый надежный способ решения проблемы, когда файл обработки остался в формате предыдущей платформы. Наша задача — выгрузить файл на диск, открыть его в Конфигураторе нужной версии платформы для автоматической конвертации и загрузить обратно в систему.

  1. Запустим программу 1С в режиме «1С:Предприятие» под учетной записью с административными правами.
  2. Перейдем в список дополнительных печатных форм. В конфигурации «Управление торговлей 10.3» (и аналогичных типовых решениях на обычных формах) этот список доступен через меню «Сервис» — «Внешние печатные формы и обработки» — «Внешние печатные формы».
  3. Найдем в списке нужную печатную форму, открываем карточку элемента справочника.
  4. Выгрузим файл обработки из информационной базы на локальный диск: нажимаем кнопку действия с файлом (кнопка «Заменить файл внешней обработки» или «Экспорт»/«Сохранить как...») и сохраняем файл с расширением .epf в удобную папку.
  5. Закроем окно выбора и сеанс предприятия (или свернем его).
  6. Запустим Конфигуратор той версии платформы 1С, на которой сейчас работает база (например, 8.2 или 8.3).
  7. В главном меню Конфигуратора выберем команду «Файл» — «Открыть» и укажем сохраненный ранее файл .epf. При открытии Конфигуратор автоматически распознает старый формат файла и выполнит его конвертацию под текущую версию платформы.
  8. После успешного открытия нажимаем «Файл» — «Сохранить» (или комбинацию клавиш Ctrl + S) и закрываем файл обработки в Конфигураторе.
  9. Возвращаемся в режим «1С:Предприятие», снова открываем карточку проблемной внешней печатной формы.
  10. Нажимаем кнопку загрузки (кнопка выбора файла или «Заменить файл внешней обработки») и загружаем обновленный сконвертированный файл .epf обратно в реквизит справочника.
  11. Записываем элемент справочника, нажав кнопку «ОК».

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

Альтернативные сценарии и диагностика

Разберем другие возможные варианты развития событий, если простое пересохранение не привело к желаемому результату:

  1. Обработка создана в 8.3, а рабочая база запускается на платформе 8.2: Конфигуратор 8.2 откажется открывать такой файл. В этом случае необходимо открыть обработку в Конфигураторе 8.3, создать параллельно новую чистую внешнюю обработку в Конфигураторе 8.2 и перенести модули, реквизиты и макеты вручную через буфер обмена. Формы документов для обычного приложения потребуется создать заново.
  2. Запуск базы на более новой платформе: если конфигурация позволяет, рекомендуется запускать базу данных под управлением актуального релиза платформы 8.3, установив необходимый режим совместимости в свойствах конфигурации.
  3. Проверка прав и директории временных файлов: если файл во временной папке блокируется, очистим локальный кэш пользователя (каталоги AppData\Local\1C и AppData\Roaming\1C), а также добавим каталог %TEMP% и файлы с расширением .epf в список доверенных исключений локального антивируса.
← На главную