Как вытащить внешнюю печатную форму из 1С 8.2, если она не сохраняется на диск?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

Разработчики и администраторы систем 1С часто сталкиваются с ситуацией, когда в старую базу (например, «1С:Бухгалтерия предприятия 2.0» на платформе 8.2) много лет назад была добавлена внешняя печатная форма. Она исправно работает и выводит данные на печать, но при попытке сохранить её на диск с помощью стандартной кнопки «дискета» в интерфейсе управления внешними обработками система выдает ошибку или сообщает, что файл отсутствует в хранилище.

Давайте подробно разберем, почему возникает эта проблема, и рассмотрим несколько надежных способов извлечь работающую обработку из информационной базы для её последующего редактирования.

Выясняем причину проблемы

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

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

Ниже мы подробно разберем три практических метода извлечения файла.

Метод 1. Перехват файла во временном каталоге (самый быстрый способ)

Этот способ основан на особенностях работы самой платформы 1С. Чтобы запустить внешнюю обработку, система обязана временно сохранить её бинарные данные на жесткий диск компьютера пользователя, подключить через встроенный механизм платформы и выполнить процедуру печати. Мы можем «поймать» этот файл во временной папке операционной системы.

Давайте выполним этот процесс по шагам:

  1. Откройте в вашей операционной системе временную папку пользователя. Быстро перейти туда можно, нажав комбинацию клавиш Win + R, введя команду %TEMP% и нажав Enter. Также точный путь в среде 1С можно узнать через выполнение функции КаталогВременныхФайлов().
  2. Для удобства отсортируйте файлы в открывшейся папке по Дате изменения (по убыванию), чтобы новые файлы сразу появлялись в самом верху списка.
  3. Перейдите в программу 1С и запустите формирование проблемной печатной формы (например, откройте документ и нажмите кнопку печати). Важно: не закрывайте сформированное печатное окно!
  4. В момент генерации печатной формы платформа выгружает во временную папку файл с расширением .epf или временный файл .tmp со случайным именем (например, v8_3A4B_12.epf).
  5. Найдите этот файл вверху списка во временной папке, скопируйте его в любое безопасное место (например, на Рабочий стол) и переименуйте в удобное для вас название с расширением .epf.

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

Метод 2. Программная выгрузка файла (самый надежный способ)

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

Рассмотрим два варианта написания кода в зависимости от структуры хранения данных в вашей конфигурации.

Вариант А. Файл хранится в реквизите справочника «Внешние обработки»

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


СсылкаНаПФ = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Имя_Вашей_Печатной_Формы");
Если ЗначениеЗаполнено(СсылкаНаПФ) Тогда
    ДвоичныеДанные = СсылкаНаПФ.ХранилищеВнешнейОбработки.Получить();
    Если ДвоичныеДанные <> Неопределено Тогда
        ДвоичныеДанные.Записать("C:\Temp\extracted_print_form.epf");
        Сообщить("Успех! Файл сохранен в C:\Temp\extracted_print_form.epf");
    Иначе
        Сообщить("Внимание: Хранилище значения оказалось пустым!");
    EndIf;
Иначе
    Сообщить("Не удалось найти элемент справочника по указанному наименованию.");
КонецЕсли;

Вариант Б. Файл хранится в табличной части элемента справочника

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


СсылкаНаПФ = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Имя_Вашей_Печатной_Формы");
Если ЗначениеЗаполнено(СсылкаНаПФ) Тогда
    Для Каждого СтрокаТЧ Из СсылкаНаПФ.ПечатныеФормы Цикл
        ДвоичныеДанные = СтрокаТЧ.ХранилищеВнешнейОбработки.Получить();
        Если ДвоичныеДанные <> Неопределено Тогда
            ИмяФайла = ?(ЗначениеЗаполнено(СтрокаТЧ.ИмяФайла), СтрокаТЧ.ИмяФайла, "vneshnaya_forma.epf");
            ДвоичныеДанные.Записать("C:\Temp\" + ИмяФайла);
            Сообщить("Файл успешно извлечен и сохранен: " + ИмяФайла);
        КонецЕсли;
    КонецЦикла;
Иначе
    Сообщить("Элемент справочника не найден.");
КонецЕсли;

Этот метод гарантирует получение оригинального, неповрежденного файла .epf напрямую из базы данных SQL или файловой СУБД 1С.

Метод 3. Использование готовых групповых обработок выгрузки

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

Для решения этой задачи в сообществе разработчиков 1С существуют готовые универсальные инструменты. Вы можете воспользоваться бесплатными обработками для групповой выгрузки внешних обработок и отчетов. Они работают по следующему принципу:

Использование таких инструментов экономит время и позволяет быстро провести аудит всех используемых в системе внешних отчетов и обработок.

← На главную