При разработке внешних печатных форм (ВПФ) для конфигураций на обычных формах, таких как 1С:Управление торговлей 10.3, программисты часто сталкиваются с ошибками регистрации или выполнения кода. Самая распространенная из них — Метод объекта не обнаружен (Печать). Ситуация осложняется тем, что современные справочники и форумы часто предлагают решения для управляемых форм (БСП), которые категорически не подходят для «старой» архитектуры. Рассмотрим подробно, как правильно создать и зарегистрировать ВПФ в УТ 10.3, чтобы избежать подобных проблем.
В конфигурациях на обычных формах механизм подключения внешних обработок жестко регламентирован. Система ищет в модуле объекта обработки конкретную экспортную точку входа. Проанализируем основные причины, почему система «не видит» ваш код:
Печать — это процедура. В УТ 10.3 (и других конфигурациях того поколения) Печать — это обязательно функция, которая возвращает ТабличныйДокумент.Экспорт, она останется инкапсулированной внутри модуля и не будет доступна внешнему механизму печати.СсылкаНаОбъект.Рассмотрим эталонный пример оформления модуля объекта. Выясним, какие элементы являются обязательными. Скопируйте этот шаблон в свою обработку, заменив логику формирования документа на свою.
Перем СсылкаНаОбъект Экспорт; // Обязательная переменная, куда система передаст ссылку на документ
Функция Печать() Экспорт
// Создаем объект табличного документа
ТабДок = Новый ТабличныйДокумент;
// Получаем макет из состава внешней обработки
Макет = ПолучитьМакет("Макет"); // Убедитесь, что макет в обработке называется именно так
// Здесь должна быть логика заполнения макета данными из СсылкаНаОбъект
// Например:
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакета.Параметры.ТекстЗаголовка = "Печать для документа: " + СокрЛП(СсылкаНаОбъект);
ТабДок.Вывести(ОбластьМакета);
// Важно: функция ОБЯЗАТЕЛЬНО должна возвращать табличный документ
Возврат ТабДок;
КонецФункции
Часто разработчики пытаются сэкономить время и вызывают типовые процедуры из общих модулей, например: УправлениеРозничнойТорговлей.НапечататьЭтикеткиИзДокумента(Ссылка). Проанализируем ситуацию: этот метод внутри конфигурации жестко запрограммирован на обращение к встроенной обработке «ПечатьЭтикеток», которая находится в метаданных. Если вы используете этот вызов, система проигнорирует вашу внешнюю обработку и откроет стандартное окно.
Чтобы работала именно ваша версия с отцентрированными этикетками, необходимо перенести код формирования этикеток из типовой обработки внутрь вашей внешней обработки. Если же задача состоит в том, чтобы просто открыть модифицированную форму вашей обработки, используйте следующий подход в функции Печать:
Функция Печать() Экспорт
// Получаем форму текущей внешней обработки
Форма = ЭтотОбъект.ПолучитьФорму("Форма");
// Передаем данные на форму, если это необходимо
Форма.ДокументОбъект = СсылкаНаОбъект;
// Открываем форму
Форма.Открыть();
// Возвращаем пустой ТабДок, чтобы система не выдала ошибку "Результат не возвращен"
Возврат Новый ТабличныйДокумент;
КонецФункции
Разберем, как выполнить задачу по центрированию текста и самой этикетки. Для этого используются свойства ячеек табличного документа. Проанализируем программную настройку этих свойств:
// Пример программной настройки области макета для центрирования
Область = Макет.ПолучитьОбласть("Строка");
Ячейка = Область.Область("R1C1"); // Координаты ячейки
// Горизонтальное центрирование
Ячейка.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
// Вертикальное центрирование
Ячейка.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
// Если нужно центрировать всю этикетку на листе при печати
ТабДок.АвтоМасштаб = Истина;
ТабДок.ЦентрироватьПоГоризонтали = Истина;
ТабДок.ЦентрироватьПоВертикали = Истина;
После того как код написан, важно правильно зарегистрировать файл в информационной базе. Процесс в УТ 10.3 отличается от современных версий:
.epf файл.Печать() не найдена или не является экспортной в модуле объекта.ПоступлениеТоваровУслуг), к которому привязывается форма.Резюмируем: Основная сложность работы с УТ 10.3 заключается в соблюдении старых стандартов разработки. Помните, что использование УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию (советы из БСП) здесь недопустимо и приведет к ошибке Обращение к процедуре как к функции. Используйте только классическую функцию Печать() и экспортную переменную СсылкаНаОбъект.