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