Работа с внешними печатными формами в 1С:Предприятие — одна из самых востребованных задач как для разработчиков, так и для опытных пользователей. Внешние формы позволяют гибко настраивать вывод документов без изменения основной конфигурации, что критично для типовых решений (1С:Бухгалтерия, 1С:УТ, 1С:ЗУП). Однако процесс их подключения и открытия часто вызывает вопросы: где хранить файлы форм, как правильно зарегистрировать их в системе, и почему форма может не открываться despite корректных настроек.

В этой статье мы разберём 5 проверенных способов открытия внешних печатных форм — от ручного вызова через меню до программного открытия из кода. Особое внимание уделим типичным ошибкам (например, Ошибка при открытии формы: Не найден обработчик), способам их диагностики и обхода. Для наглядности приведём актуальные примеры кода для платформы 8.3.22+, которые работают как в управляемом, так и в обычном приложении. Если вы только начинаете работать с внешними формами — начните с раздела «Подготовка», если же форма не открывается despite всех усилий — сразу переходите к блоку «Диагностика ошибок».

1. Подготовка: где хранить и как регистрировать внешние формы

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

  • 📁 Каталог шаблонов — стандартная папка ExtForms в каталоге информационной базы (например, C:\Program Files\1cv8\srvinfo\ВашаБаза\ExtForms). Формы здесь доступны всем пользователям.
  • 👤 Личный каталог пользователя — папка AppData\Roaming\1C\1Cv8\ExtForms на компьютере пользователя. Подходит для тестирования.
  • 🔗 Хранилище конфигурации — если форма прикреплена к объекту метаданных (например, к документу РеализацияТоваровУслуг) через механизм внешних обработок.

Для регистрации формы в системе используйте один из методов:

  1. Через меню Файл → Открыть → Внешняя печатная форма (в управляемом приложении).
  2. Программно, с помощью метода ПодключитьВнешнююОбработку() (пример кода ниже).
  3. Через настройку печатных форм в справочнике Дополнительные отчёты и обработки (для типовых конфигураций).
💡

Если форма не отображается в списке доступных — проверьте права доступа к папке ExtForms. Пользователь должен иметь права на чтение и выполнение файлов.

Важно: имя файла формы должно совпадать с именем, указанным в её свойствах (поле Имя в модуле объекта). Например, если в коде формы прописано:

&НаКлиенте

Процедура ПриСозданииНаКлиенте(Отказ, СтандартнаяОбработка)

ЭтоФорма.Имя = "ПечатнаяФормаСчетаУправляемая";

КонецПроцедуры

то файл должен называться ПечатнаяФормаСчетаУправляемая.epf. Иначе система не сможет её идентифицировать.

2. Способ 1: Открытие через меню «Файл» (для управляемого приложения)

Самый простой способ — открыть форму вручную через стандартное меню. Этот метод подходит для разовых задач или тестирования новой формы. Инструкция:

  1. Откройте документ, для которого нужна печатная форма (например, Счёт на оплату).
  2. Перейдите в меню Файл → Открыть → Внешняя печатная форма.
  3. В открывшемся окне выберите файл формы (.epf) из каталога ExtForms или личной папки пользователя.
  4. Нажмите Открыть. Форма откроется в отдельном окне с привязкой к текущему документу.

Если форма не появляется в списке, проверьте:

  • ✅ Расширение файла (должно быть .epf для управляемых форм).
  • ✅ Права доступа к папке (пользователь должен иметь права на чтение).
  • ✅ Соответствие версии платформы (формы, созданные в 1С 8.3.20, могут не открываться в 8.3.15).

Файл формы имеет расширение .epf

Папка ExtForms доступна для чтения

Имя файла совпадает с именем в коде формы

Версия платформы совместима с формой-->

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

3. Способ 2: Подключение через «Дополнительные отчёты и обработки»

В типовых конфигурациях (1С:Бухгалтерия 3.0, 1С:УТ 11, 1С:ЗУП 3.1) внешние печатные формы регистрируются через справочник Дополнительные отчёты и обработки. Это позволяет сделать форму доступной всем пользователям без правки конфигурации.

Алгоритм подключения:

  1. Откройте справочник через меню Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки.
  2. Создайте новый элемент с типом Печатная форма.
  3. Укажите:
    • 📌 Наименование — отображаемое имя (например, «Счёт с логотипом»).
    • 📌 Объект — документ, к которому привязана форма (например, СчётНаОплату).
    • 📌 Файл — путь к файлу .epf (можно указать относительный путь от каталога базы).
  4. Сохраните и обновите список печатных форм (может потребоваться перезапуск клиента).
  5. После этого форма будет доступна в меню печатных форм документа (кнопка Печать → Дополнительно). Преимущество метода — централизованное управление формами и возможность назначать права доступа на уровне ролей.

    Как обновить список печатных форм без перезапуска?

    Используйте команду в консоли отладки:

    ОбновитьДополнительныеОтчетыИОбработки();

    Эта процедура перезагрузит кэш внешних обработок для текущего пользователя.

    Если форма не появляется в списке после регистрации, проверьте:

    Проблема Решение
    Форма не отображается в меню Печать Проверьте, что в свойствах формы указан корректный Объект (документ/справочник).
    Ошибка «Не найден обработчик» Убедитесь, что в модуле формы есть экспортная процедура Печать().
    Форма открывается, но без данных Проверьте передачу параметров в процедуру Печать() (пример ниже).

    4. Способ 3: Программное открытие формы из кода

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

    &НаКлиенте
    

    Процедура ОткрытьВнешнююПечатнуюФорму(Команда)

    ПутьКФайлу = "C:\ExtForms\ПечатнаяФормаСчета.epf"; // Путь к файлу формы

    Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);

    // Передаём текущий документ в форму

    ПараметрыФормы = Новый Структура("Объект", Объект);

    Обработка.Печать(ПараметрыФормы);

    КонецПроцедуры

    Где:

    • 🔹 Объект — текущий документ (например, СчётНаОплату), который передаётся в форму.
    • 🔹 Печать() — экспортная процедура в модуле внешней формы, которая обрабатывает вывод.

Для обычного приложения (8.2) используйте альтернативный код:

Процедура ОткрытьФорму()

ПутьКФайлу = "C:\ExtForms\ПечатнаяФорма.ert";

Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);

Обработка.ОткрытьФорму(Объект.Ссылка);

КонецПроцедуры

💡

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

Типичные ошибки при программном открытии:

⚠️ Внимание: Если путь к файлу содержит кириллические символы, используйте функцию НРег() для преобразования пути в верхний регистр или укажите путь в формате \\?\C:\... (например, \\?\C:\ExtForms\форма.epf). Это решает проблему с кодировкой в Windows.

5. Способ 4: Открытие через командный интерфейс (для разработчиков)

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

  1. Откройте конфигуратор и найдите объект Документ.СчётНаОплату.
  2. Перейдите на закладку Команды и создайте новую команду с именем ПечатьВнешняяФорма.
  3. В модуле объекта добавьте обработчик команды:
    &НаКлиенте
    

    Процедура ПечатьВнешняяФорма(Команда)

    ПутьКФайлу = КаталогПрограммы() + "\ExtForms\СчётСЛого.epf";

    Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);

    Обработка.Печать(Новый Структура("Объект", ЭтотОбъект));

    КонецПроцедуры

  4. Добавьте команду в форму документа через Действия → Печать.

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

Через меню "Файл"|Через "Дополнительные отчёты и обработки"|Программно из кода|Через командный интерфейс|Не использую внешние формы-->

Для динамического определения пути к файлу формы (например, если формы хранятся на сетевом диске) используйте функцию КаталогИнформационнойБазы():

ПутьКФайлу = КаталогИнформационнойБазы() + "\ExtForms\ПечатнаяФорма.epf";

6. Способ 5: Открытие формы из отчёта или обработки

Внешние печатные формы можно вызывать не только из документов, но и из отчётов или обработок. Например, если вам нужно распечатать данные из отчёта Ведомость по товарам в пользовательском формате, используйте следующий подход:

  1. Создайте внешнюю печатную форму с процедурой, принимающей таблицу значений или результат запроса.
  2. В модуле отчёта добавьте кнопку с обработчиком:
    &НаКлиенте
    

    Процедура ПечатьВнешняя(Команда)

    РезультатЗапроса = ПолучитьДанныеДляПечати(); // Ваш метод получения данных

    ПутьКФайлу = "C:\ExtForms\ВедомостьТоваров.epf";

    Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);

    Обработка.Печать(Новый Структура("Данные", РезультатЗапроса));

    КонецПроцедуры

Пример модуля внешней формы для обработки таблицы значений:

&НаКлиенте

Процедура Печать(Параметры) Экспорт

Данные = Параметры.Данные; // Таблица значений из отчёта

ТабДок = Новый ТабличныйДокумент;

Область = ТабДок.Область();

// Формируем печатную форму на основе Данные

...

ТабДок.Показать();

КонецПроцедуры

Этот метод удобен для создания универсальных печатных форм, которые можно использовать в разных отчётах. Например, одна и та же форма может выводить данные как из Ведомости по товарам, так и из Акта сверки, если передавать в неё структурированные данные.

7. Диагностика ошибок: почему форма не открывается

Если внешняя печатная форма не открывается, причины могут быть как техническими (неверный путь, права доступа), так и программными (ошибки в коде формы). Рассмотрим типичные ошибки и способы их устранения:

Ошибка Причина Решение
Ошибка при открытии файла Неверный путь или отсутствие прав Проверьте путь к файлу и права доступа к папке ExtForms.
Не найден обработчик 'Печать' В модуле формы нет экспортной процедуры Печать() Добавьте процедуру в модуль объекта формы.
Ошибка при вызове метода объекта Несовместимость версий платформы Обновите форму до актуальной версии или используйте совместимый режим.
Форма открывается пустой Не переданы параметры (объект или данные) Проверьте передачу параметров в процедуру Печать().

Для диагностики используйте отладчик :

  1. Установите точку останова в процедуре Печать() внешней формы.
  2. Запустите открытие формы в режиме отладки (Ctrl+F5).
  3. Проверьте, какие параметры передаются в форму и где происходит сбой.
⚠️ Внимание: Если форма работала ранее, но перестала открываться после обновления , проверьте журнал регистрации (Администрирование → Журнал регистрации). Часто ошибки связаны с изменением API платформы (например, в 8.3.21 были изменены методы работы с табличными документами).

Для сложных случаев используйте протокол технологического журнала:

// Включение технологического журнала (для конфигуратора)

ТехнологическийЖурнал.УровеньДетализации = УровеньДетализацииТехнологическогоЖурнала.Отладка;

8. Оптимизация: как ускорить работу с внешними формами

Если внешние печатные формы открываются медленно или тормозят систему, воспользуйтесь следующими советами:

  • Кэширование форм: Храните часто используемые формы в памяти с помощью менеджера внешних обработок:
    Обработка = ВнешниеОбработки.Получить("ИмяФормы"); // Кэшированная версия
  • Минимизация данных: Передавайте в форму только необходимые данные (например, не весь документ, а только реквизиты для печати).
  • Асинхронная загрузка: Для больших форм используйте фоновое формирование:
    &НаКлиенте
    

    Процедура ПечатьАсинхронно(Команда)

    ВыполнитьФоновоеЗадание("ФормированиеПечатнойФормы", Новый Структура("Объект", ЭтотОбъект));

    КонецПроцедуры

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

Шаблон внешней печатной формы с логотипом

&НаКлиенте

Процедура Печать(Параметры) Экспорт

Объект = Параметры.Объект;

ТабДок = Новый ТабличныйДокумент;

Макет = ДвоичныеДанныеИзФайла(КаталогПрограммы() + "\Templates\Шапка.mxl");

ОбластьШапки = ТабДок.Область();

ОбластьШапки.ЗаполнитьМакетом(Макет);

// Заполняем данные из объекта

ОбластьШапки.Параметры.Заполнить(Объект);

ТабДок.Показать();

КонецПроцедуры

В этом примере логотип и шапка документа хранятся в отдельном файле макета (.mxl), что упрощает редактирование.

Для массовой печати документов используйте пакетное формирование:

&НаСервере

Процедура ПечатьПачка(МассивДокументов)

Для Каждого Документ Из МассивДокументов Цикл

Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);

Обработка.Печать(Новый Структура("Объект", Документ));

КонецЦикла;

КонецПроцедуры

💡

Для ускорения печати больших пакетов документов используйте фоновые задания и разделяйте процесс на этапы (например, по 50 документов за раз).

FAQ: Частые вопросы по работе с внешними печатными формами

Как сделать внешнюю форму доступной только определённым пользователям?

Используйте механизм ролей в справочнике Дополнительные отчёты и обработки:

  1. Откройте форму элемента справочника с вашей печатной формой.
  2. На закладке Права укажите роли, которым разрешено использование формы (например, Бухгалтер или Руководитель).
  3. Сохраните изменения и обновите права пользователей.

Альтернативно можно проверять права прямо в коде формы:

Если НЕ Пользователь.Роли.Найти("Бухгалтер") Тогда

Предупреждение("Доступ запрещён!");

Возврат;

КонецЕсли;

Можно ли редактировать внешнюю форму без конфигуратора?

Да, для этого:

  1. Откройте файл формы (.epf) в текстовом редакторе (например, Notepad++).
  2. Найдите блок <Модуль> и отредактируйте код.
  3. Сохраните файл и перезапустите .

Для удобства используйте специализированные инструменты, такие как 1C:Enterprise Development Tools (EDT) или Снегопат.

Как передать в форму данные из нескольких документов?

Передавайте данные в виде структуры или таблицы значений:

Параметры = Новый Структура();

Параметры.Вставить("Документ1", Документ1);

Параметры.Вставить("Документ2", Документ2);

Обработка.Печать(Параметры);

В модуле формы разберите параметры:

Док1 = Параметры.Документ1;

Док2 = Параметры.Документ2;

Почему форма открывается медленно при первом запуске?

Это связано с компиляцией формы при первом открытии. Чтобы ускорить процесс:

  • 🔹 Предварительно откройте форму в тестовом режиме.
  • 🔹 Используйте кэширование (метод ВнешниеОбработки.Получить()).
  • 🔹 Оптимизируйте код формы (уберите тяжёлые операции из процедуры ПриСозданииНаКлиенте).
Как экспортировать печатную форму в PDF автоматически?

Используйте метод ЗаписатьPDF() табличного документа:

ТабДок = Обработка.Печать(Параметры);

ТабДок.ЗаписатьPDF("C:\Temp\Счёт.pdf");

Для отправки по email:

Письмо = Новый ПочтаMail;

Письмо.Текст = "Счёт во вложении";

Письмо.Вложения.Добавить("C:\Temp\Счёт.pdf");

Письмо.Отправить("client@example.com");