При работе в 1С:Управление нашей фирмой (УНФ) часто возникает ситуация, когда в одной базе ведется учет по нескольким организациям с разными правовыми формами, например, ООО и ИП. Типовые печатные формы не всегда удовлетворяют требованиям бизнеса, особенно когда нужно кардинально изменить шапку документа или состав подписей для предпринимателя и юридического лица. Рассмотрим подробно, как решить задачу разделения макетов и программной логики печати на примере счета на оплату.
Прежде чем приступать к правкам, нам необходимо выяснить, какой объект в конфигурации отвечает за формирование нужного нам документа. В 1С:УНФ версии 1.6 и выше логика печати счета на оплату сосредоточена в специализированных объектах. Проанализируем структуру конфигурации и найдем нужное место.
Для счета на оплату основным объектом является обработка ПечатьСчетНаОплату. Именно в ее модуле менеджера или модуле объекта (в зависимости от конкретного релиза) находится процедура, которая собирает данные из документа и выводит их в табличный документ на основе макета.
Чтобы найти это место, выполним следующие шаги:
ПечатьСчетНаОплату.СформироватьПечатнуюФормуСчетаНаОплату.Проанализируем ситуацию: если нам нужно, чтобы у ИП и ООО были совершенно разные шапки (например, у ИП нет логотипа или другие контактные данные), самым правильным решением будет создание двух разных областей в макете. В 1С макет разбит на горизонтальные секции (области). Мы можем добавить свои собственные.
Рассмотрим, как это реализовать в макете:
ЗаголовокООО, а другую — ЗаголовокИП.Пример кода для выбора области может выглядеть следующим образом:
Если ДанныеОбъекта.Организация.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо Тогда
ОбластьЗаголовок = Макет.ПолучитьОбласть("ЗаголовокООО");
Иначе
ОбластьЗаголовок = Макет.ПолучитьОбласть("ЗаголовокИП");
КонецЕсли;
Одной из часто встречающихся сложностей является вывод логотипа. В 1С нельзя создать два рисунка с одинаковым именем (например, Логотип) даже в разных областях одного макета, если эти области редактируются одновременно. Если мы создадим в области для ООО рисунок Логотип, а в области для ИП — ЛоготипИП, типовой код печати может выдать ошибку, так как он ищет конкретное имя Логотип.
Выясним причину ошибки: когда мы обращаемся к свойству через точку ОписаниеОбласти.ОбластьМакета.Рисунки.Логотип, система ожидает, что объект с таким именем существует всегда. Если в текущей области (например, для ИП) рисунка с именем Логотип нет, программа «упадет» с ошибкой «Поле объекта не обнаружено».
Чтобы программа работала гибко и не выдавала ошибок при отсутствии логотипа в той или иной части макета, проанализируем способ обращения к коллекции рисунков. Вместо жесткого указания имени через точку, мы можем использовать обращение через квадратные скобки и переменную.
Рассмотрим пример кода, который корректно обработает ситуацию:
// Определяем имя логотипа в зависимости от условий
ИмяЛоготипа = "Логотип"; // Стандартное имя
Если ТипОрганизации = "ИП" Тогда
ИмяЛоготипа = "Логотип2"; // Имя рисунка в области для ИП
КонецЕсли;
// Проверяем наличие рисунка в коллекции перед выводом
Если ОписаниеОбласти.ОбластьМакета.Рисунки.Найти(ИмяЛоготипа) <> Неопределено Тогда
ОписаниеОбласти.ОбластьМакета.Рисунки[ИмяЛоготипа].Картинка = Новый Картинка(ДанныеКартинки);
КонецЕсли;
Важный нюанс: использование конструкции Рисунки[ТвояПеременная] позволяет избежать синтаксической ошибки на этапе компиляции и дает возможность подставлять имя объекта во время выполнения кода. Это универсальный способ работы с элементами макета.
Профессиональный подход к разработке в 1С подразумевает минимизацию изменений в основной конфигурации. Если мы снимем файл ПечатьСчетНаОплату с поддержки, при следующем обновлении 1С:УНФ нам придется вручную объединять код, что трудозатратно и чревато ошибками.
Разберем по шагам, как сделать внешнюю печатную форму:
ПечатьСчетНаОплату.СведенияОВнешнейОбработке(), чтобы система распознала ее как печатную форму..epf в пользовательском режиме через раздел Администрирование — Печатные формы, отчеты и обработки.Этот метод позволяет сохранить конфигурацию на полной поддержке, что значительно упрощает эксплуатацию системы в будущем.
Прежде чем приступать к программированию, стоит проверить, задействованы ли штатные механизмы. В последних версиях 1С:УНФ для каждой организации в справочнике Организации на вкладке Печать можно загрузить свой логотип и факсимильную подпись.
Если в макете используется стандартный параметр Логотип, система сама подставит туда картинку, привязанную к конкретной организации, выбранной в документе «Счет на оплату». Разделение логики требуется только в том случае, если визуальное расположение элементов в счете для ИП должно быть принципиально иным, нежели для ООО.
Для успешного редактирования печатных форм в УНФ мы проанализировали три пути: прямое редактирование кода в конфигурации, использование динамического обращения к рисункам макета через Рисунки[Имя] и создание внешних печатных форм. Рекомендуется использовать именно внешние печатные формы, так как это гарантирует стабильность работы системы при обновлениях и позволяет реализовать любую сложность дизайна для различных типов контрагентов и собственных организаций.