Работа с внешними печатными формами в 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на компьютере пользователя. Подходит для тестирования. - 🔗 Хранилище конфигурации — если форма прикреплена к объекту метаданных (например, к документу РеализацияТоваровУслуг) через механизм внешних обработок.
Для регистрации формы в системе используйте один из методов:
- Через меню
Файл → Открыть → Внешняя печатная форма(в управляемом приложении). - Программно, с помощью метода
ПодключитьВнешнююОбработку()(пример кода ниже). - Через настройку печатных форм в справочнике Дополнительные отчёты и обработки (для типовых конфигураций).
Если форма не отображается в списке доступных — проверьте права доступа к папке ExtForms. Пользователь 1С должен иметь права на чтение и выполнение файлов.
Важно: имя файла формы должно совпадать с именем, указанным в её свойствах (поле Имя в модуле объекта). Например, если в коде формы прописано:
&НаКлиенте
Процедура ПриСозданииНаКлиенте(Отказ, СтандартнаяОбработка)
ЭтоФорма.Имя = "ПечатнаяФормаСчетаУправляемая";
КонецПроцедуры
то файл должен называться ПечатнаяФормаСчетаУправляемая.epf. Иначе система не сможет её идентифицировать.
2. Способ 1: Открытие через меню «Файл» (для управляемого приложения)
Самый простой способ — открыть форму вручную через стандартное меню. Этот метод подходит для разовых задач или тестирования новой формы. Инструкция:
- Откройте документ, для которого нужна печатная форма (например, Счёт на оплату).
- Перейдите в меню
Файл → Открыть → Внешняя печатная форма. - В открывшемся окне выберите файл формы (
.epf) из каталогаExtFormsили личной папки пользователя. - Нажмите
Открыть. Форма откроется в отдельном окне с привязкой к текущему документу.
Если форма не появляется в списке, проверьте:
- ✅ Расширение файла (должно быть
.epfдля управляемых форм). - ✅ Права доступа к папке (пользователь 1С должен иметь права на чтение).
- ✅ Соответствие версии платформы (формы, созданные в 1С 8.3.20, могут не открываться в 8.3.15).
Файл формы имеет расширение .epf
Папка ExtForms доступна для чтения
Имя файла совпадает с именем в коде формы
Версия платформы совместима с формой-->
Ограничение метода: форма открывается только для текущего сеанса и не сохраняется в списке доступных печатных форм документа. Для постоянного подключения используйте следующий способ.
3. Способ 2: Подключение через «Дополнительные отчёты и обработки»
В типовых конфигурациях (1С:Бухгалтерия 3.0, 1С:УТ 11, 1С:ЗУП 3.1) внешние печатные формы регистрируются через справочник Дополнительные отчёты и обработки. Это позволяет сделать форму доступной всем пользователям без правки конфигурации.
Алгоритм подключения:
- Откройте справочник через меню
Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. - Создайте новый элемент с типом
Печатная форма. - Укажите:
- 📌 Наименование — отображаемое имя (например, «Счёт с логотипом»).
- 📌 Объект — документ, к которому привязана форма (например, СчётНаОплату).
- 📌 Файл — путь к файлу
.epf(можно указать относительный путь от каталога базы).
- Сохраните и обновите список печатных форм (может потребоваться перезапуск клиента).
- 🔹
Объект— текущий документ (например, СчётНаОплату), который передаётся в форму. - 🔹
Печать()— экспортная процедура в модуле внешней формы, которая обрабатывает вывод.
После этого форма будет доступна в меню печатных форм документа (кнопка Печать → Дополнительно). Преимущество метода — централизованное управление формами и возможность назначать права доступа на уровне ролей.
Как обновить список печатных форм без перезапуска?
Используйте команду в консоли отладки:
ОбновитьДополнительныеОтчетыИОбработки();
Эта процедура перезагрузит кэш внешних обработок для текущего пользователя.
Если форма не появляется в списке после регистрации, проверьте:
| Проблема | Решение |
|---|---|
Форма не отображается в меню Печать |
Проверьте, что в свойствах формы указан корректный Объект (документ/справочник). |
| Ошибка «Не найден обработчик» | Убедитесь, что в модуле формы есть экспортная процедура Печать(). |
| Форма открывается, но без данных | Проверьте передачу параметров в процедуру Печать() (пример ниже). |
4. Способ 3: Программное открытие формы из кода
Для автоматизации открытия внешних форм используйте встроенные методы платформы. Ниже приведён универсальный код, который работает в управляемом приложении для любой внешней формы:
&НаКлиенте
Процедура ОткрытьВнешнююПечатнуюФорму(Команда)
ПутьКФайлу = "C:\ExtForms\ПечатнаяФормаСчета.epf"; // Путь к файлу формы
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);
// Передаём текущий документ в форму
ПараметрыФормы = Новый Структура("Объект", Объект);
Обработка.Печать(ПараметрыФормы);
КонецПроцедуры
Где:
Для обычного приложения (8.2) используйте альтернативный код:
Процедура ОткрытьФорму()
ПутьКФайлу = "C:\ExtForms\ПечатнаяФорма.ert";
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);
Обработка.ОткрытьФорму(Объект.Ссылка);
КонецПроцедуры
Всегда проверяйте, что в модуле внешней формы есть экспортная процедура Печать() (для управляемого приложения) или ОткрытьФорму() (для обычного). Без неё форма не откроется.
Типичные ошибки при программном открытии:
⚠️ Внимание: Если путь к файлу содержит кириллические символы, используйте функциюНРег()для преобразования пути в верхний регистр или укажите путь в формате\\?\C:\...(например,\\?\C:\ExtForms\форма.epf). Это решает проблему с кодировкой в Windows.
5. Способ 4: Открытие через командный интерфейс (для разработчиков)
Если вы разрабатываете конфигурацию и хотите интегрировать внешнюю форму в стандартный интерфейс, добавьте команду в подсистему документов. Например, для документа СчётНаОплату:
- Откройте конфигуратор и найдите объект
Документ.СчётНаОплату. - Перейдите на закладку
Командыи создайте новую команду с именемПечатьВнешняяФорма. - В модуле объекта добавьте обработчик команды:
&НаКлиентеПроцедура ПечатьВнешняяФорма(Команда)
ПутьКФайлу = КаталогПрограммы() + "\ExtForms\СчётСЛого.epf";
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);
Обработка.Печать(Новый Структура("Объект", ЭтотОбъект));
КонецПроцедуры
- Добавьте команду в форму документа через
Действия → Печать.
После обновления конфигурации пользователи увидят новую кнопку в меню печатных форм. Этот метод удобен для постоянного подключения формы без использования справочника Дополнительные отчёты и обработки.
Через меню "Файл"|Через "Дополнительные отчёты и обработки"|Программно из кода|Через командный интерфейс|Не использую внешние формы-->
Для динамического определения пути к файлу формы (например, если формы хранятся на сетевом диске) используйте функцию КаталогИнформационнойБазы():
ПутьКФайлу = КаталогИнформационнойБазы() + "\ExtForms\ПечатнаяФорма.epf";
6. Способ 5: Открытие формы из отчёта или обработки
Внешние печатные формы можно вызывать не только из документов, но и из отчётов или обработок. Например, если вам нужно распечатать данные из отчёта Ведомость по товарам в пользовательском формате, используйте следующий подход:
- Создайте внешнюю печатную форму с процедурой, принимающей таблицу значений или результат запроса.
- В модуле отчёта добавьте кнопку с обработчиком:
&НаКлиентеПроцедура ПечатьВнешняя(Команда)
РезультатЗапроса = ПолучитьДанныеДляПечати(); // Ваш метод получения данных
ПутьКФайлу = "C:\ExtForms\ВедомостьТоваров.epf";
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);
Обработка.Печать(Новый Структура("Данные", РезультатЗапроса));
КонецПроцедуры
Пример модуля внешней формы для обработки таблицы значений:
&НаКлиенте
Процедура Печать(Параметры) Экспорт
Данные = Параметры.Данные; // Таблица значений из отчёта
ТабДок = Новый ТабличныйДокумент;
Область = ТабДок.Область();
// Формируем печатную форму на основе Данные
...
ТабДок.Показать();
КонецПроцедуры
Этот метод удобен для создания универсальных печатных форм, которые можно использовать в разных отчётах. Например, одна и та же форма может выводить данные как из Ведомости по товарам, так и из Акта сверки, если передавать в неё структурированные данные.
7. Диагностика ошибок: почему форма не открывается
Если внешняя печатная форма не открывается, причины могут быть как техническими (неверный путь, права доступа), так и программными (ошибки в коде формы). Рассмотрим типичные ошибки и способы их устранения:
| Ошибка | Причина | Решение |
|---|---|---|
Ошибка при открытии файла |
Неверный путь или отсутствие прав | Проверьте путь к файлу и права доступа к папке ExtForms. |
Не найден обработчик 'Печать' |
В модуле формы нет экспортной процедуры Печать() |
Добавьте процедуру в модуль объекта формы. |
Ошибка при вызове метода объекта |
Несовместимость версий платформы | Обновите форму до актуальной версии 1С или используйте совместимый режим. |
| Форма открывается пустой | Не переданы параметры (объект или данные) | Проверьте передачу параметров в процедуру Печать(). |
Для диагностики используйте отладчик 1С:
- Установите точку останова в процедуре
Печать()внешней формы. - Запустите открытие формы в режиме отладки (
Ctrl+F5). - Проверьте, какие параметры передаются в форму и где происходит сбой.
⚠️ Внимание: Если форма работала ранее, но перестала открываться после обновления 1С, проверьте журнал регистрации (Администрирование → Журнал регистрации). Часто ошибки связаны с изменением API платформы (например, в 8.3.21 были изменены методы работы с табличными документами).
Для сложных случаев используйте протокол технологического журнала:
// Включение технологического журнала (для конфигуратора)
ТехнологическийЖурнал.УровеньДетализации = УровеньДетализацииТехнологическогоЖурнала.Отладка;
8. Оптимизация: как ускорить работу с внешними формами
Если внешние печатные формы открываются медленно или тормозят систему, воспользуйтесь следующими советами:
- ⚡ Кэширование форм: Храните часто используемые формы в памяти с помощью менеджера внешних обработок:
Обработка = ВнешниеОбработки.Получить("ИмяФормы"); // Кэшированная версия - ⚡ Минимизация данных: Передавайте в форму только необходимые данные (например, не весь документ, а только реквизиты для печати).
- ⚡ Асинхронная загрузка: Для больших форм используйте фоновое формирование:
&НаКлиентеПроцедура ПечатьАсинхронно(Команда)
ВыполнитьФоновоеЗадание("ФормированиеПечатнойФормы", Новый Структура("Объект", ЭтотОбъект));
КонецПроцедуры
Для ускорения разработки используйте шаблоны внешних форм. Например, шаблон для печати документа с логотипом компании:
Шаблон внешней печатной формы с логотипом
&НаКлиенте
Процедура Печать(Параметры) Экспорт
Объект = Параметры.Объект;
ТабДок = Новый ТабличныйДокумент;
Макет = ДвоичныеДанныеИзФайла(КаталогПрограммы() + "\Templates\Шапка.mxl");
ОбластьШапки = ТабДок.Область();
ОбластьШапки.ЗаполнитьМакетом(Макет);
// Заполняем данные из объекта
ОбластьШапки.Параметры.Заполнить(Объект);
ТабДок.Показать();
КонецПроцедуры
В этом примере логотип и шапка документа хранятся в отдельном файле макета (.mxl), что упрощает редактирование.
Для массовой печати документов используйте пакетное формирование:
&НаСервере
Процедура ПечатьПачка(МассивДокументов)
Для Каждого Документ Из МассивДокументов Цикл
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);
Обработка.Печать(Новый Структура("Объект", Документ));
КонецЦикла;
КонецПроцедуры
Для ускорения печати больших пакетов документов используйте фоновые задания и разделяйте процесс на этапы (например, по 50 документов за раз).
FAQ: Частые вопросы по работе с внешними печатными формами
Как сделать внешнюю форму доступной только определённым пользователям?
Используйте механизм ролей в справочнике Дополнительные отчёты и обработки:
- Откройте форму элемента справочника с вашей печатной формой.
- На закладке
Праваукажите роли, которым разрешено использование формы (например, Бухгалтер или Руководитель). - Сохраните изменения и обновите права пользователей.
Альтернативно можно проверять права прямо в коде формы:
Если НЕ Пользователь.Роли.Найти("Бухгалтер") Тогда
Предупреждение("Доступ запрещён!");
Возврат;
КонецЕсли;
Можно ли редактировать внешнюю форму без конфигуратора?
Да, для этого:
- Откройте файл формы (
.epf) в текстовом редакторе (например, Notepad++). - Найдите блок
<Модуль>и отредактируйте код. - Сохраните файл и перезапустите 1С.
Для удобства используйте специализированные инструменты, такие как 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");