Как вывести счет на оплату в печатную форму Акта об оказанных услугах в 1С 8.3?

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

При оформлении документов реализации и оказания услуг часто возникает необходимость отображать в печатной форме не только реквизиты договора, но и сведения о документе-основании — например, о счете на оплату. В типовых конфигурациях на платформе 1С:Предприятие 8.3 (таких как «Бухгалтерия предприятия» или «Бухгалтерия некоммерческой организации») печатная форма Акта об оказанных услугах по умолчанию может выводить только номер и дату договора. Рассмотрим, как программно скорректировать вывод данных, чтобы счет на оплату выводился в печатную форму с новой строки.

Выясним причину поведения системы

Разберем логику работы алгоритма печати. При формировании печатной формы платформа вызывает функцию печати (как правило, ПечатьАктаОбОказанииУслуг в модуле менеджерa документа или общем модуле). В этой функции формируется структура данных для заполнения параметров макета.

Для области «Получатель» или «Покупатель» параметр Основание заполняется представлением договора:


ДанныеПечатьПолучатель = Новый Структура;
ДанныеПечатьПолучатель.Вставить("ПредставлениеПолучателя", ПредставлениеПолучателя);
ДанныеПечатьПолучатель.Вставить("Получатель", СведенияОДокументе.Получатель);
ДанныеПечатьПолучатель.Вставить("Основание", СведенияОДокументе.ПредставлениеДоговора);
ОбластьМакета.Параметры.Заполнить(ДанныеПечатьПолучатель);

Поскольку в параметр Основание передается исключительно СведенияОДокументе.ПредставлениеДоговора, данные о документе-основании (счете) в финальный табличный документ не попадают, даже если реквизит СчетНаОплатуПокупателю или ДокументОснование заполнен в самом документе.

Шаги по доработке кода печати

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

  1. Найдем функцию печати. В конфигураторе откроем модуль менеджера документа РеализацияТоваровУслуг или общий модуль печати (например, ПечатьТорговыхДокументов) и перейдем к функции ПечатьАктаОбОказанииУслуг.

  2. Локализуем заполнение параметров области макета. Найдем место, где формируется структура ДанныеПечатьПолучатель.

  3. Модифицируем заполнение параметра «Основание». Добавим к представлению договора сведение о документе-основании. Чтобы информация о счете выводилась с новой строки, используем системную константу Символы.ПС (перевод строки).

Посмотрим на итоговый пример кода modification:


// Формирование структуры параметров для области получателя
ДанныеПечатьПолучатель = Новый Структура;
ДанныеПечатьПолучатель.Вставить("ПредставлениеПолучателя", ПредставлениеПолучателя);
ДанныеПечатьПолучатель.Вставить("Получатель", СведенияОДокументе.Получатель);

// Объединяем договор и документ-основание через перевод строки
ТекстОснования = СведенияОДокументе.ПредставлениеДоговора;
Если ЗначениеЗаполнено(СведенияОДокументе.ДокументОснование) Тогда
    ТекстОснования = ТекстОснования + Символы.ПС + СведенияОДокументе.ДокументОснование;
КонецЕсли;

ДанныеПечатьПолучатель.Вставить("Основание", ТекстОснования);

// Заполняем параметры области макета
ОбластьМакета.Параметры.Заполнить(ДанныеПечатьПолучатель);
ТабличныйДокумент.Вывести(ОбластьМакета);

Альтернативный вариант: вывод счета в заголовок документа

Если согласно стандартам вашей организации номер счета должен выводиться не в строке «Основание», а непосредственно рядом с заголовком акта, проанализируем вариант заполнения шапки документа:


ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ДанныеПечатьЗаголовок = Новый Структура("ТекстЗаголовка, ТекстЗаголовкаИсправления");

ТекстЗаголовка = НСтр("ru='Акт № %1 от %2 г.'");
НомерДокумента = СведенияОДокументе.НомерДокумента;
ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    ТекстЗаголовка, 
    НомерДокумента, 
    Формат(СведенияОДокументе.ДатаДокумента, "ДФ='дд ММММ гггг'")
);

// Добавляем информацию о счете к заголовку
Если ЗначениеЗаполнено(СведенияОДокументе.ДокументОснование) Тогда
    ТекстЗаголовка = ТекстЗаголовка + " (" + СведенияОДокументе.ДокументОснование + ")";
КонецЕсли;

ДанныеПечатьЗаголовок.Вставить("ТекстЗаголовка", ТекстЗаголовка);
ОбластьМакета.Параметры.Заполнить(ДанныеПечатьЗаголовок);
ТабличныйДокумент.Вывести(ОбластьМакета);

Важные настройки макета и отладка

Для корректного отображения многострочного текста в печатной форме обратим внимание на следующие технические детали:

  1. Свойство ячейки «Размещение текста». В макете печатной формы (в Конфигураторе или через редактирование макетов печатных форм) выделите ячейку параметра Основание. В палитре свойств убедитесь, что для свойства «Размещение» установлено значение «Переносить» (Wrap). Если задано «Забивать» или «Зарезать», вторая строка с номером счета не отобразится.

  2. Высота строки. Убедитесь, что у строки макета не установлена фиксированная высота, иначе платформа не сможет автоматически увеличить высоту строки под две линии текста.

  3. Анализ параметров через отладку. Чтобы узнать, какие именно реквизиты содержатся внутри структуры СведенияОДокументе, установите точку останова (нажатием клавиши F9) на строке вывода области макета. Запустите сеанс в режиме отладки (F5) и сформируйте печать. После остановки программы нажмите Shift + F9 и введите СведенияОДокументе для просмотра доступных полей структуры.

Рекомендация по обновляемости: Чтобы не вносить изменения непосредственно в типовую конфигурацию поставщика, данные доработки рекомендуется выполнять с помощью Расширения конфигурации (.cfe) или путем создания Внешней печатной формы (ВПФ). Это позволит безопасно обновлять релизы конфигурации в будущем.

← На главную