Работа в облачном сервисе, таком как 1C:Fresh, накладывает определенные ограничения на привычные методы разработки. Самое главное из них — отсутствие прямого доступа к Конфигуратору. Если перед нами стоит задача вывести пользовательский дополнительный реквизит в печатную форму документа (например, в «Счет на оплату» или «Заказ покупателя»), стандартный подход с редактированием макета в конфигурации не сработает. Разберем детально, как решить эту задачу, используя доступные инструменты облачной версии 1С:УНФ.
Проанализируем самый простой и эффективный метод, который не требует навыков программирования и прохождения технического аудита. В 1С:УНФ встроен механизм работы с шаблонами в форматах .docx и .odt. Это штатный функционал, который идеально подходит для работы в облаке.
Разберем процесс по шагам:
{Объект.ИмяВашегоРеквизита}.Этот метод позволяет обойтись без внесения изменений в код и работает мгновенно. Рассмотрим ситуацию, когда вам необходимо более сложное оформление, которое не поддерживает Word. В этом случае перейдем к техническим методам.
Если нам требуется классическая печатная форма в формате MXL, придется создать внешний файл обработки (.epf). Как правильно заметили участники обсуждения, просто вставить параметр в макет недостаточно — необходимо назначить ему значение в коде модуля обработки.
Выясним причину, почему обычный «Параметр» в макете не заполняется сам собой. При формировании печатной формы вызывается процедура, которая обходит макет и явно указывает, какие данные поместить в каждую область. Для работы с дополнительными реквизитами нам потребуется обратиться к механизму ДополнительныеСведения или ДополнительныеРеквизиты.
Рассмотрим пример кода, который должен содержаться в модуле объекта внешней печатной формы для извлечения значения дополнительного реквизита:
// Функция для получения значения дополнительного реквизита
Функция ПолучитьЗначениеДопРеквизита(СсылкаНаОбъект, ИмяРеквизита)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
| Документ.ЗаказПокупателя.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты
|ГДЕ
| ДополнительныеРеквизиты.Ссылка = &Ссылка
| И ДополнительныеРеквизиты.Свойство.Наименование = &ИмяРеквизита";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
Запрос.УстановитьПараметр("ИмяРеквизита", ИмяРеквизита);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Возврат Выборка.Значение;
КонецЕсли;
Возврат "";
КонецФункции
После того как значение получено, его нужно передать в область макета:
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакета.Параметры.ВашПараметрИзМакет = ПолучитьЗначениеДопРеквизита(СсылкаНаДокумент, "МойДопРеквизит");
ТабДок.Вывести(ОбластьМакета);
Важное примечание для облака: созданную обработку нельзя просто запустить. В сервисе 1C:Fresh любая внешняя обработка должна пройти аудит. Это процесс проверки вашего кода специалистами 1С на предмет безопасности и производительности. Подготовьтесь к тому, что в коде нельзя использовать прямые обращения к файловой системе или небезопасные вызовы Выполнить().
Проанализируем современный способ доработки — использование расширений (.cfe). Расширение позволяет дополнить типовую логику формирования печатной формы, не изменяя саму конфигурацию. Это особенно удобно, когда нужно добавить одно поле в уже существующую сложную печатную форму, не переписывая её с нуля.
Посмотрим на алгоритм действий:
&После или &Вместо, перехватим процедуру заполнения данных для печати.Пример перехвата процедуры в расширении:
&После("СформироватьПечатнуюФорму")
Процедура Расш1_СформироватьПечатнуюФорму(ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати)
// Здесь мы можем дозаполнить параметры в уже сформированном ТабличномДокументе
// или модифицировать структуру данных перед выводом
КонецПроцедуры
Как и внешние обработки, расширения в 1C:Fresh подлежат обязательной модерации. Однако преимущество расширения в том, что оно более устойчиво к обновлениям программы, чем внешняя печатная форма, которая может «отвалиться» при малейшем изменении структуры метаданных.
Выясним, как технически загрузить готовое решение в облако. Если вы не являетесь партнером 1С, вам необходимо обладать правами Владельца абонента.
Разберем последовательность действий:
Резюме: Если вы новичок, настоятельно рекомендуем начать с первого способа (Word-шаблоны). Это сэкономит время на разработку и ожидание аудита. Если же требуется сложная логика и формат MXL, готовьте внешнюю печатную форму или расширение, соблюдая требования безопасности 1C:Fresh.