Как настроить разные печатные формы для ООО и ИП в 1С:УНФ?

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

При работе в 1С:Управление нашей фирмой (УНФ) часто возникает ситуация, когда в одной базе ведется учет по нескольким организациям с разными правовыми формами, например, ООО и ИП. Типовые печатные формы не всегда удовлетворяют требованиям бизнеса, особенно когда нужно кардинально изменить шапку документа или состав подписей для предпринимателя и юридического лица. Рассмотрим подробно, как решить задачу разделения макетов и программной логики печати на примере счета на оплату.

Где найти программный код формирования печатной формы

Прежде чем приступать к правкам, нам необходимо выяснить, какой объект в конфигурации отвечает за формирование нужного нам документа. В 1С:УНФ версии 1.6 и выше логика печати счета на оплату сосредоточена в специализированных объектах. Проанализируем структуру конфигурации и найдем нужное место.

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

Чтобы найти это место, выполним следующие шаги:

  1. Откроем конфигуратор и перейдем в ветку Обработки.
  2. Найдем ПечатьСчетНаОплату.
  3. Перейдем в Макеты — здесь хранится визуальный шаблон счета.
  4. Перейдем в Модуль менеджера — именно здесь описана функция СформироватьПечатнуюФормуСчетаНаОплату.

Разделение областей макета для ООО и ИП

Проанализируем ситуацию: если нам нужно, чтобы у ИП и ООО были совершенно разные шапки (например, у ИП нет логотипа или другие контактные данные), самым правильным решением будет создание двух разных областей в макете. В 1С макет разбит на горизонтальные секции (области). Мы можем добавить свои собственные.

Рассмотрим, как это реализовать в макете:

  1. Выделим строки, отвечающие за заголовок счета.
  2. Назовем одну область ЗаголовокООО, а другую — ЗаголовокИП.
  3. В коде программы добавим условие, которое будет проверять тип организации и выбирать нужную область макета.

Пример кода для выбора области может выглядеть следующим образом:


Если ДанныеОбъекта.Организация.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо Тогда
    ОбластьЗаголовок = Макет.ПолучитьОбласть("ЗаголовокООО");
Иначе
    ОбластьЗаголовок = Макет.ПолучитьОбласть("ЗаголовокИП");
КонецЕсли;

Проблема одинаковых имен рисунков (логотипов) в макете

Одной из часто встречающихся сложностей является вывод логотипа. В 1С нельзя создать два рисунка с одинаковым именем (например, Логотип) даже в разных областях одного макета, если эти области редактируются одновременно. Если мы создадим в области для ООО рисунок Логотип, а в области для ИП — ЛоготипИП, типовой код печати может выдать ошибку, так как он ищет конкретное имя Логотип.

Выясним причину ошибки: когда мы обращаемся к свойству через точку ОписаниеОбласти.ОбластьМакета.Рисунки.Логотип, система ожидает, что объект с таким именем существует всегда. Если в текущей области (например, для ИП) рисунка с именем Логотип нет, программа «упадет» с ошибкой «Поле объекта не обнаружено».

Решение: Динамическое обращение к коллекции Рисунки

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

Рассмотрим пример кода, который корректно обработает ситуацию:


// Определяем имя логотипа в зависимости от условий
ИмяЛоготипа = "Логотип"; // Стандартное имя
Если ТипОрганизации = "ИП" Тогда
    ИмяЛоготипа = "Логотип2"; // Имя рисунка в области для ИП
КонецЕсли;

// Проверяем наличие рисунка в коллекции перед выводом
Если ОписаниеОбласти.ОбластьМакета.Рисунки.Найти(ИмяЛоготипа) <> Неопределено Тогда
    ОписаниеОбласти.ОбластьМакета.Рисунки[ИмяЛоготипа].Картинка = Новый Картинка(ДанныеКартинки);
КонецЕсли;

Важный нюанс: использование конструкции Рисунки[ТвояПеременная] позволяет избежать синтаксической ошибки на этапе компиляции и дает возможность подставлять имя объекта во время выполнения кода. Это универсальный способ работы с элементами макета.

Использование внешних печатных форм (ВПФ)

Профессиональный подход к разработке в 1С подразумевает минимизацию изменений в основной конфигурации. Если мы снимем файл ПечатьСчетНаОплату с поддержки, при следующем обновлении 1С:УНФ нам придется вручную объединять код, что трудозатратно и чревато ошибками.

Разберем по шагам, как сделать внешнюю печатную форму:

  1. В конфигураторе создадим новую внешнюю обработку.
  2. Скопируем в нее макет и модуль из типовой обработки ПечатьСчетНаОплату.
  3. Добавим в модуль обработки стандартную экспортную функцию СведенияОВнешнейОбработке(), чтобы система распознала ее как печатную форму.
  4. Внесем все необходимые правки в код макета и алгоритм формирования.
  5. Подключим полученный файл .epf в пользовательском режиме через раздел Администрирование — Печатные формы, отчеты и обработки.

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

Использование штатных возможностей УНФ для логотипов

Прежде чем приступать к программированию, стоит проверить, задействованы ли штатные механизмы. В последних версиях 1С:УНФ для каждой организации в справочнике Организации на вкладке Печать можно загрузить свой логотип и факсимильную подпись.

Если в макете используется стандартный параметр Логотип, система сама подставит туда картинку, привязанную к конкретной организации, выбранной в документе «Счет на оплату». Разделение логики требуется только в том случае, если визуальное расположение элементов в счете для ИП должно быть принципиально иным, нежели для ООО.

Резюме

Для успешного редактирования печатных форм в УНФ мы проанализировали три пути: прямое редактирование кода в конфигурации, использование динамического обращения к рисункам макета через Рисунки[Имя] и создание внешних печатных форм. Рекомендуется использовать именно внешние печатные формы, так как это гарантирует стабильность работы системы при обновлениях и позволяет реализовать любую сложность дизайна для различных типов контрагентов и собственных организаций.

← На главную