Внешние печатные формы в 1С:Предприятие — это отдельные файлы (.ert или .epf), которые позволяют гибко настраивать вывод документов на печать без изменения основной конфигурации. Их редактирование требуется, когда стандартный макет не подходит под бизнес-процессы компании: нужно добавить логотип, изменить порядок полей, скорректировать шрифты или добавить дополнительные реквизиты. Однако работа с внешними формами имеет свои нюансы: от правильного открытия в конфигураторе до сохранения без потери связей с базой.
Эта статья поможет разобраться, как редактировать внешнюю печатную форму в 1С 8.3 и 1С 8.2, даже если вы не профессиональный программист. Мы рассмотрим пошаговый процесс — от поиска файла формы на диске до тестирования изменений в пользовательском режиме. Особое внимание уделим типичным ошибкам, которые приводят к потере данных или некорректному выводу документов. А для опытных пользователей приведём примеры кода для расширенной настройки.
1. Где хранятся внешние печатные формы в 1С
Прежде чем редактировать форму, её нужно найти. Внешние печатные формы могут храниться в трёх местах:
- 📁 Каталог шаблонов базы данных — обычно это подпапка
ExtFormsилиTemplatesв директории информационной базы. Путь можно узнать в конфигураторе черезФайл → Открыть → Выбрать каталог ИБ. - 💾 Локальный компьютер пользователя — если форма была сохранена вручную, она может лежать в любой папке (часто на рабочем столе или в
Документы). - ☁️ Сервер 1С — в файловом варианте работы или на веб-сервере (для клиент-серверных баз). Доступ требует прав администратора.
Чтобы точно определить расположение:
- Откройте 1С:Предприятие в режиме конфигуратора (
Запуск → Конфигуратор). - Перейдите в
Файл → Открытьи выберите тип файловВнешние печатные формы (.ert, .epf). - Если форма прикреплена к документу, её путь можно увидеть в свойствах объекта метаданных (например, в справочнике
Дополнительные отчёты и обработки).
Если форма не находится, проверьте настройки прав доступа в Администрирование → Пользователи. Возможно, ваша учётная запись не имеет прав на просмотр внешних файлов.
Важно: в клиент-серверном варианте работы пути к формам могут отличаться от файлового. Например, в 1С:Управление торговлей 11 внешние формы часто хранятся в подкаталоге Ext\PrintForms на сервере. Уточните расположение у администратора базы, если не уверены.
2. Как открыть внешнюю печатную форму для редактирования
Для редактирования формы её нужно открыть в конфигураторе или в внешнем редакторе (например, в Notepad++ для простого текстового редактирования). Рассмотрим оба способа.
Способ 1: Редактирование в конфигураторе 1С
Это самый надёжный метод, так как конфигуратор проверяет синтаксис и предлагает подсказки:
- Запустите 1С:Предприятие в режиме конфигуратора.
- Выберите
Файл → Открытьи укажите путь к файлу формы (.ertили.epf). - Если форма прикреплена к базе, найдите её в дереве метаданных:
Общие → Дополнительные отчёты и обработки. - Дважды кликните на форму — откроется встроенный редактор.
Способ 2: Редактирование во внешнем редакторе
Подходит для быстрых правок (например, изменения текста или параметров макета). Используйте программы вроде Notepad++, Sublime Text или Visual Studio Code с плагином для синтаксиса 1С:
- 📄 Откройте файл
.ertкак текстовый документ. - 🔍 Найдите нужные разделы по ключевым словам (например,
&НаСервере,Макет.Параметры). - ⚠️ Не изменяйте структуру модуля (например, порядок процедур) — это может привести к ошибкам при компиляции.
Предупреждение: если форма содержит бинарные данные (например, встроенные картинки), редактирование во внешнем редакторе может их повредить. В таких случаях используйте только конфигуратор.
3. Структура внешней печатной формы: что можно редактировать
Внешняя печатная форма в 1С состоит из нескольких ключевых частей. Понимание структуры поможет избежать ошибок при редактировании:
| Компонент | Описание | Что можно изменить |
|---|---|---|
| Модуль формы | Содержит процедуры и функции на языке 1С, отвечающие за логику формирования документа. | Добавлять новые процедуры, изменять алгоритмы заполнения данных, корректировать условия вывода. |
| Макет | Визуальная часть формы (таблицы, текстовые блоки, изображения). Хранится в формате .mxl или .xls. |
Изменять расположение полей, шрифты, цвета, добавлять логотипы, редактировать шапку/подвал. |
| Параметры | Настройки, передаваемые форме при вызове (например, ДокументОбъект, Период). |
Добавлять новые параметры, изменять типы данных (например, с Строка на Число). |
| Реквизиты | Дополнительные данные, используемые в форме (например, Логотип, Подпись). |
Добавлять новые реквизиты, изменять их свойства (видимость, доступность). |
Наиболее частые правки касаются макета и модуля. Например:
- 🖼️ В макете: добавление логотипа компании в шапку документа, изменение шрифта для сумм.
- 📝 В модуле: корректировка процедуры
ПриКомпоновкеРезультатадля фильтрации строк таблицы.
Пример кода для добавления логотипа
// В процедуре "ПриКомпоновкеРезультата" макета:
Макет.Параметры.Вставить("Логотип", Новый Картинка(ПутьКФайлуЛоготипа));
Макет.Область("Шапка").Параметры.Логотип = Макет.Параметры.Логотип;
Внимание: если форма использует внешние данные (например, подгружает курсы валют из интернета), убедитесь, что после редактирования не нарушились связи с источниками. Например, изменение имени параметра ДатаКурса на ДатаАктуальности может привести к ошибке, если этот параметр используется в запросе к внешнему API.
4. Пошаговая инструкция по редактированию формы
Рассмотрим универсальный алгоритм редактирования на примере добавления нового реквизита в печатную форму Счёт на оплату.
Сделать резервную копию файла формы|Проверить права доступа к каталогу|Открыть форму в конфигураторе|Убедиться, что база не заблокирована другими пользователями-->
Шаг 1: Резервное копирование
Перед любыми изменениями сохраните оригинальную версию формы. Для этого:
- Скопируйте файл
.ertв отдельную папку (например,Backup_ПечатныеФормы). - Если форма прикреплена к базе, экспортируйте её через
Файл → Сохранить как.
Шаг 2: Редактирование макета
Допустим, нужно добавить строку с условиями оплаты в нижнюю часть счёта:
- Откройте форму в конфигураторе и перейдите на вкладку
Макеты. - Выберите макет
ПечатнаяФормаи нажмитеРедактировать. - Добавьте новую текстовую область внизу таблицы с данными. Задайте ей имя, например,
УсловияОплаты. - В свойствах области укажите источник данных — реквизит документа или статический текст.
Шаг 3: Изменение модуля
Теперь свяжем новую область с данными:
Процедура ПриКомпоновкеРезультата(ДокументОбъект, Результат)
// Добавляем условия оплаты из реквизита документа
Макет.Область("УсловияОплаты").Параметры.Текст = ДокументОбъект.УсловияОплаты;
КонецПроцедуры
Шаг 4: Тестирование
Проверьте изменения в пользовательском режиме:
- Откройте документ, для которого предназначена форма (например,
Счёт на оплату). - Нажмите
Печать → Ваша форма. - Убедитесь, что новые данные отображаются корректно.
Всегда тестируйте форму на копии базы перед применением в рабочей среде. Ошибки в печатных формах могут блокировать печать документов для всех пользователей.
Если форма не открывается или выдаёт ошибку, проверьте:
- 🔹 Синтаксис кода (например, не забыты ли точки с запятой).
- 🔹 Права на файлы (возможно, после сохранения форма стала доступна только для чтения).
- 🔹 Связи с метаданными (если изменили имя параметра, обновите его во всех процедурах).
5. Типичные ошибки и как их избежать
При редактировании внешних печатных форм пользователи часто сталкиваются с одними и теми же проблемами. Вот самые распространённые ошибки и способы их решения:
⚠️ Внимание: Если после редактирования форма перестала открываться, проверьте версию платформы 1С. Формы, созданные в 1С 8.3.20, могут не работать в 8.3.15 из-за изменений в языке запросов.
| Ошибка | Причина | Решение |
|---|---|---|
Ошибка компиляции модуля |
Опечатка в коде, пропущенная запятая или точка с запятой. | Проверьте синтаксис в конфигураторе (подсветятся красным ошибки). Используйте отладчик (F5). |
Не найден макет "ПечатнаяФорма" |
Изменено имя макета в модуле, но не в файле формы. | Убедитесь, что имена макетов совпадают в коде и в свойствах формы. |
| Данные не выводятся в печатной форме | Неверно указан источник данных для области макета. | Проверьте привязку параметров в процедуре ПриКомпоновкеРезультата. |
Доступ запрещён при сохранении |
Недостаточно прав на запись в каталог формы. | Запустите конфигуратор от имени администратора или измените права на папку. |
Ещё одна частая проблема — исчезновение логотипа после редактирования. Это происходит, если:
- 🖼️ Картинка была вставлена как внешний файл, а путь к ней изменился.
- 🔄 Формат логотипа не поддерживается (используйте
.pngили.jpg). - 📁 Файл логотипа был перемещён или удалён.
Чтобы избежать потери логотипа, встраивайте его непосредственно в макет формы через конфигуратор (Вставить → Картинка → Из файла) и выбирайте опцию Хранить в макете.
6. Расширенные возможности: программное редактирование
Для опытных пользователей и разработчиков 1С доступны более гибкие способы редактирования форм с использованием встроенного языка. Например, можно динамически изменять макет в зависимости от условий или подгружать данные из внешних источников.
Пример 1: Динамическое изменение шрифта
Допустим, нужно выделять просроченные счета красным цветом:
Процедура ПриКомпоновкеРезультата(ДокументОбъект, Результат)
Если ДокументОбъект.ДатаОплаты < ТекущаяДата() Тогда
Макет.Область("Сумма").Параметры.ЦветТекста = Новый Цвет(255, 0, 0); // Красный
КонецЕсли;
КонецПроцедуры
Пример 2: Добавление данных из справочника
Если в счёте нужно выводить контактное лицо клиента, которого нет в стандартных реквизитах:
Процедура ПриКомпоновкеРезультата(ДокументОбъект, Результат)
Контрагент = ДокументОбъект.Контрагент;
КонтактноеЛицо = Контрагент.КонтактноеЛицо.Наименование;
Макет.Область("Контакты").Параметры.Контакт = КонтактноеЛицо;
КонецПроцедуры
Для работы с внешними данными (например, курсами валют) можно использовать HTTP-запросы:
Функция ПолучитьКурсВалюты(Валюта, Дата)
URL = "https://api.exchangerate-api.com/v4/latest/" + Валюта;
HTTPСоединение = Новый HTTPСоединение(URL);
Ответ = HTTPСоединение.Получить();
Возврат JSON.Прочитать(Ответ.ПолучитьТекст()).rates.RUB; // Пример для рубля
КонецФункции
⚠️ Внимание: При использовании внешних API убедитесь, что сервер 1С имеет доступ в интернет, а в настройках платформы разрешены HTTP-запросы (Администрирование → Настройки программы → Прочие настройки).
Пример 3: Многостраничные формы
Если документ не помещается на один лист, настройте автоматический перенос:
Макет.Параметры.АвтоПереносСтраниц = Истина;
Макет.Область("Таблица").Параметры.ПереноситьНаСледующуюСтраницу = Истина;
Для сложных форм (например, с динамическим количеством строк) используйте вложенные таблицы и настройку МинимальнаяВысотаСтроки.
7. Сохранение и обновление формы в базе
После редактирования форму нужно сохранить и обновить в базе данных. Этот процесс зависит от того, как форма подключена к конфигурации.
Способ 1: Обновление через конфигуратор
Если форма хранится как внешний файл:
- Сохраните изменения в конфигураторе (
Файл → Сохранить). - Обновите форму в базе:
- Откройте
Дополнительные отчёты и обработки. - Найдите вашу форму и нажмите
Обновить.
- Откройте
Сервис → Очистить кэш), если изменения не применяются.Способ 2: Замена файла вручную
Если форма подключена через путь к файлу:
- Закройте все сеансы 1С, работающие с этой формой.
- Замените старый файл
.ertна отредактированный. - Перезапустите 1С:Предприятие.
- 📤 Экспортируйте форму в файл.
- 📥 Импортируйте её на каждом сервере через
Администрирование → Обмен данными. - 🔄 Перезагрузите 1С (иногда кэш не обновляется сразу).
- 🔧 Проверьте привязку формы к документу в метаданных (
Общие → Печатные формы). - 📌 Убедитесь, что имя файла формы совпадает с указанным в настройках.
- 🚀 Кэширование данных: Если форма часто использует одни и те же справочники (например,
Номенклатура), загружайте их один раз в начале процедуры и используйте локальные переменные. - 📊 Оптимизация запросов: Избегайте вложенных циклов по большим таблицам. Используйте
ОБЪЕДИНИТЬвместо нескольких отдельных запросов. - 🖼️ Сжатие изображений: Логотипы и подписи в формате
.pngзанимают меньше места, чем.bmp. - 📄 Ленивая загрузка: Если форма многостраничная, подгружайте данные для следующей страницы только при её формировании.
Важно: если форма используется в распределённой базе (например, с несколькими филиалами), обновление нужно провести на всех узлах. Для этого:
После обновления формы проверьте её работу в тестовом режиме (Сервис → Отладка → Тестирование и исправление). Это поможет выявить скрытые ошибки до использования в боевой базе.
Если после обновления форма не отображается в списке печатных форм:
8. Оптимизация и ускорение печатных форм
Если печатная форма работает медленно (например, при формировании большого счёта), используйте следующие приёмы оптимизации:
Пример оптимизированного кода для загрузки номенклатуры:
Процедура ПриКомпоновкеРезультата(ДокументОбъект, Результат)
// Загружаем номенклатуру один раз
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В (&СписокНоменклатуры)";
Запрос.УстановитьПараметр("СписокНоменклатуры", ДокументОбъект.ТабличнаяЧасть.ВыгрузитьКолонку("Номенклатура"));
РезультатЗапроса = Запрос.Выполнить();
ТаблицаНоменклатуры = РезультатЗапроса.Выгрузить();
// Используем предварительно загруженные данные
Для Каждого Строка Из ДокументОбъект.ТабличнаяЧасть Цикл
НайденнаяНоменклатура = ТаблицаНоменклатуры.Найти(Строка.Номенклатура);
Если НайденнаяНоменклатура <> Неопределёно Тогда
Макет.Область("СтрокаТаблицы").Параметры.Артикул = НайденнаяНоменклатура.Артикул;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для форм с большим количеством строк (например, Акт выполненных работ с сотнями позиций) используйте постраничное формирование:
Макет.Параметры.ПостраничныйВывод = Истина;
Макет.Параметры.КоличествоСтрокНаСтранице = 30;
Это уменьшит нагрузку на сервер и ускорит печать.
FAQ: Частые вопросы по редактированию печатных форм
Можно ли редактировать внешнюю печатную форму без конфигуратора?
Да, но с оговорками. Простые правки (например, изменение текста или параметров макета) можно сделать в текстовом редакторе типа Notepad++. Однако для изменений в модуле или сложных макетов лучше использовать конфигуратор, так как он проверяет синтаксис и предлагает подсказки по коду.
Если у вас нет доступа к конфигуратору, попробуйте:
- Сделать резервную копию файла формы.
- Открыть его в Notepad++ и найти нужный раздел по ключевым словам.
- После редактирования проверить форму в тестовом режиме.
Для редактирования макетов в формате .mxl можно использовать специализированные инструменты, например, 1C:Enterprise Development Tools (EDT).
Почему после редактирования форма перестала открываться?
Наиболее вероятные причины:
- 🔹 Ошибка синтаксиса в модуле (пропущена точка с запятой, опечатка в имени процедуры).
- 🔹 Несовместимость версий — форма редактировалась в новой версии 1С, а база работает на старой.
- 🔹 Повреждение файла (например, при сохранении в неподходящей кодировке).
- 🔹 Отсутствие прав на чтение/запись файла.
Чтобы восстановить работоспособность:
- Вернитесь к резервной копии формы.
- Проверьте файл на наличие ошибок в конфигураторе.
- Убедитесь, что версия платформы 1С совпадает с версией, в которой редактировалась форма.
Как добавить в форму данные, которых нет в документе?
Если нужно вывести в печатной форме данные, отсутствующие в основном документе (например, текущий курс доллара или контактное лицо контрагента), используйте один из методов:
- Добавление реквизита в документ:
- Откройте конфигуратор и добавьте новый реквизит в метаданные документа.
- Обновите форму, чтобы она могла получать это значение.
Минус: требует изменения конфигурации, что не всегда возможно.
Контрагент = ДокументОбъект.Контрагент;
КонтактноеЛицо = Контрагент.КонтактноеЛицо.Наименование;
Подходит, если данные хранятся в связанных справочниках.
КурсДоллара = ПолучитьКурсВалюты("USD", ТекущаяДата());
Используйте для динамических данных (например, курсов валют).
Если данные статичные (например, реквизиты компании), добавьте их как параметры макета:
Макет.Параметры.Вставить("АдресКомпании", "г. Москва, ул. Ленина, д. 1");
Как сделать, чтобы форма автоматически подставляла текущую дату?
Чтобы в печатной форме всегда отображалась актуальная дата, используйте функцию ТекущаяДата() в модуле формы. Например:
Процедура ПриКомпоновкеРезультата(ДокументОбъект, Результат)
Макет.Область("ДатаПечати").Параметры.Дата = ТекущаяДата();
КонецПроцедуры
Если нужно выводить дату в определённом формате (например, 01 января 2026 г.), используйте функцию Формат():
Макет.Область("ДатаПечати").Параметры.ТекстДата = Формат(ТекущаяДата(), "ДФ='dd MMMM yyyy г.'");
Для многопользовательских баз учитывайте, что ТекущаяДата() берётся с сервера 1С, а не с локального компьютера пользователя.
Можно ли вернуть стандартную печатную форму после редактирования?
Да, для этого:
- Удалите внешнюю печатную форму из списка дополнительных отчётов (
Администрирование → Печатные формы). - Если форма была прикреплена как файл, удалите или переименуйте её в каталоге хранения.
- Очистите кэш 1С (
Сервис → Очистить кэш). - Перезапустите 1С:Предприятие.
После этого система будет использовать стандартную форму из конфигурации. Если стандартная форма была изменена,