Как правильно подключить внешнюю форму печати этикеток в документ Поступление товаров и услуг для УТ 10.3

Программист 1С v8.3 (Обычные формы) Управленческий учет Торговля и дистрибуция
← На главную

При разработке внешних печатных форм для конфигураций на обычных формах, таких как Управление торговлей 10.3, программисты часто сталкиваются с типовой ошибкой: «Метод объекта не обнаружен (Печать)». Эта проблема особенно актуальна, когда стандартный функционал печати этикеток и ценников не удовлетворяет требованиям бизнеса (например, нужно добавить артикул, изменить центрирование или логику вывода штрихкодов) и требуется создание внешней обработки.

В этой статье мы подробно разберем, как правильно структурировать код внешней обработки, чтобы система 1С могла корректно к ней обращаться, и как организовать передачу данных из документа ПоступлениеТоваровУслуг непосредственно в форму печати этикеток.

Выясняем причину ошибки «Метод объекта не обнаружен (Печать)»

Проанализируем механизм взаимодействия системы с внешними обработками. Когда вы регистрируете обработку в справочнике «Внешние обработки» и привязываете её к конкретному документу, программа ожидает, что в Модуле объекта этой обработки существует строго определенная «точка входа».

Основная причина ошибки заключается в том, что разработчик либо забыл добавить функцию Печать(), либо разместил её в модуле формы вместо модуля объекта, либо не указал ключевое слово Экспорт. Для системы внешняя обработка — это объект, и она пытается вызвать метод этого объекта программно. Если метод не помечен как экспортный в модуле объекта, он остается «невидимым» для вызывающего кода конфигурации.

Шаг 1. Настройка модуля объекта

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

Прежде всего, убедитесь, что в реквизитах обработки создан реквизит СсылкаНаОбъект с типом ДокументСсылка.ПоступлениеТоваровУслуг (или соответствующим вашему документу типом).

Разберем пример кода, который должен быть в модуле объекта:


Перем СсылкаНаОбъект Экспорт;

Функция Печать() Экспорт
    // Здесь мы определяем, что именно должна делать обработка при нажатии кнопки печать
    // В случае с этикетками, нам чаще всего нужно открыть форму для настройки параметров
    
    Форма = ПолучитьФорму("Форма"); // Укажите имя вашей основной формы
    
    // Передаем ссылку на документ в форму, чтобы она знала, откуда брать товары
    Форма.СсылкаНаОбъект = СсылкаНаОбъект;
    
    // Открываем форму обработки
    Форма.Открыть();
    
    // Возвращаем Неопределено, так как для этикеток формирование ТабДока 
    // обычно происходит позже, после нажатия кнопки в самой форме
    Возврат Неопределено;
КонецФункции

Важный момент: Если вы создаете обычную печатную форму (например, ТОРГ-12), функция Печать() должна возвращать ТабличныйДокумент. Однако для этикеток в УТ 10.3 стандартным поведением является открытие промежуточного окна, где пользователь может выбрать шаблон или уточнить количество этикеток. Поэтому мы используем метод Открыть() и возвращаем Неопределено.

Шаг 2. Получение данных из документа в модуле формы

Теперь, когда мы открыли форму обработки из модуля объекта, нам нужно «подтянуть» в неё список товаров из документа поступления. Проанализируем, как это сделать в модуле формы. Обычно это реализуется в процедуре ПриОткрытии() или в специализированном методе заполнения.

Рассмотрим по шагам логику заполнения внутренней таблицы товаров обработки на основе данных из СсылкаНаОбъект:


Процедура ПриОткрытии()
    Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
        ЗаполнитьТаблицуТоваровИзДокумента();
    КонецЕсли;
КонецПроцедуры

Процедура ЗаполнитьТаблицуТоваровИзДокумента()
    // Очищаем текущий список товаров в обработке (если он есть)
    Товары.Очистить();
    
    // Формируем запрос к табличной части документа
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	ПоступлениеТоваровУслугТовары.Номенклатура,
    |	ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
    |	ПоступлениеТоваровУслугТовары.Количество,
    |	ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры,
    |	ПоступлениеТоваровУслугТовары.Номенклатура.Артикул КАК Артикул
    |ИЗ
    |	Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
    |ГДЕ
    |	ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        НоваяСтрока = Товары.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
        // Здесь можно добавить специфическую логику, например, расчет количества этикеток
    КонецЦикла;
КонецПроцедуры

Использование запроса — это наиболее правильный и производительный путь получения данных. Так мы можем сразу вытащить Артикул номенклатуры, даже если его нет непосредственно в табличной части документа.

Шаг 3. Нюансы для Базовой версии УТ 10.3

Проанализируем ситуацию с Базовой версией. Хотя в ней нельзя менять саму конфигурацию, работа с внешними печатными формами полностью поддерживается. Главное ограничение — вы не сможете внедрить код внутрь модуля документа ПоступлениеТоваровУслуг. Поэтому вся логика (подготовка макета, вывод артикула, центрирование) должна быть сосредоточена исключительно внутри вашей внешней обработки.

Если вы копировали встроенную обработку «ПечатьЭтикеток», обратите внимание на экспортные процедуры в модуле формы. В типовой УТ 10.3 печать реализована через сложную структуру вызовов. Чтобы ваша внешняя форма работала стабильно, старайтесь максимально упростить код, оставляя только те части, которые отвечают за заполнение макета и вывод его на печать.

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

Если вы внесли изменения в код (добавили Экспорт), но ошибка «Метод объекта не обнаружен» сохраняется, проверьте следующие моменты:

  1. Обновление файла в справочнике: 1С кэширует внешние обработки. После каждого изменения кода в конфигураторе необходимо зайти в справочник «Внешние обработки», открыть вашу запись и заново выбрать файл (нажать кнопку «Заменить файл внешней обработки»).
  2. Соответствие имен: Проверьте, что функция называется именно Печать, а не ПечатьЭтикеток или как-то иначе. В стандартном механизме внешних печатных форм имя функции жестко прописано в коде конфигурации.
  3. Тип Ссылки: Убедитесь, что реквизит СсылкаНаОбъект имеет тип, совпадающий с документом, из которого вызывается печать. В противном случае возникнет ошибка приведения типов еще до вызова функции печати.

Итог

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

← На главную