Как вывести реквизит из расширения в печатную форму?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке дополнительных функций через расширения конфигурации часто возникает задача вывода данных, добавленных в расширение, в стандартные или внешние печатные формы. Разберем, почему при обращении к реквизитам расширения мы можем получать Неопределено и как правильно организовать работу с такими данными.

Анализ проблемы доступности данных

Первое, на что стоит обратить внимание — это область видимости объектов расширения. Если внешняя печатная форма не видит реквизиты, добавленные в расширении, это чаще всего указывает на нарушение контекста выполнения или настройки безопасности. Давайте разберем по шагам, что именно нужно проверить.

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

Диагностика через отладку

Прежде чем менять код, давайте научимся понимать, где именно пропадают данные. В модуле внешней печатной формы, там, где вы пытаетесь получить данные из ХранилищеЗначений, добавьте контрольную точку и проверьте содержимое переменной.

Рассмотрим пример типичной ошибки, когда мы получаем пустое значение:


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

Если вы видите Неопределено, это означает, что либо данных по данной ссылке нет, либо у текущего сеанса пользователя нет прав на чтение данных из этого реквизита. Убедитесь, что реквизит имеет необходимые права доступа в настройках расширения.

Правильная работа с запросами

Часто ошибкой является попытка обращения к реквизиту напрямую через точку, в то время как печатная форма использует Запрос. Помните, что реквизиты расширений в запросах доступны так же, как и штатные реквизиты, но только если расширение подключено и активно.

Попробуйте получить данные через Запрос вместо прямого обращения к ссылке:


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

Если в результате запроса значение поля пустое, значит, проблема не в механизме расширений, а в том, что в базе данных для конкретного элемента номенклатуры значение в этот реквизит не было записано.

Рекомендации по выводу на печать

Когда вы убедились, что данные получены (проверка ТипЗнч() показала, что это ДвоичныеДанные), можно приступать к выводу в табличный документ. Мы рекомендуем использовать следующий подход:

  1. Получите двоичные данные из хранилища.
  2. Используйте метод Новый Картинка(Данные) для преобразования данных в объект, который понимает табличный документ.
  3. Добавьте рисунок в коллекцию рисунков области макета через метод Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка).

Разберем пример программного вывода:


ДанныеИзХранилища = Выборка.ДанныеКартинки.Получить();
Если ЗначениеЗаполнено(ДанныеИзХранилища) Тогда
    КартинкаДляПечати = Новый Картинка(ДанныеИзХранилища);
    ОбластьРисунка = ОбластьМакета.Рисунки.ИмяРисункаВМакете;
    ОбластьРисунка.Картинка = КартинкаДляПечати;
КонецЕсли;

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

← На главную