Как сделать единый макет договора для разных организаций (ООО и ИП) в 1С:Бухгалтерия 3.0?

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

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

Способ 1: Использование типового механизма «Шаблоны договоров» (Без программирования)

Прежде чем приступать к написанию внешних печатных форм (ВПФ) и сложных запросов, посмотрим на современные возможности самой конфигурации 1С:Бухгалтерия 3.0. Зачастую задачу можно решить полностью без программирования с помощью типового функционала.

Разберем по шагам, как настроить печать через встроенный механизм:

  1. Перейдем в раздел Справочники — подраздел Покупки и продажи — Шаблоны договоров.
  2. Создадим новый шаблон. Перед нами откроется удобный текстовый редактор, напоминающий привычные офисные программы.
  3. Напишем или скопируем основной текст договора. Этот текст будет единым и для ООО, и для ИП.
  4. Вместо конкретных реквизитов (названия компании, ИНН, ФИО директора) воспользуемся кнопкой Вставить в текст. Программа добавит в документ универсальные параметры, обрамленные фигурными скобками, например: {Полное наименование организации}, {ИНН}, {Реквизиты руководителя}.

Как это работает на практике? При формировании печатной формы из документа система сама определит, какая организация указана в реквизите Организация. Подсистема автоматически соберет нужные данные и корректно заменит параметры на значения. Никаких дополнительных условий писать не нужно!

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

Способ 2: Создание Внешней печатной формы (ВПФ) и работа с запросами

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

Типичная ошибка (Жесткие условия в коде):
Начинающие программисты часто пытаются извлечь все данные сразу, а потом фильтровать их условиями вида:


Если ВыборкаИзЗапроса.ОрганизацияНаименование = "НаименованиеООО" Тогда
    // Заполняем параметры для ООО
Иначе
    // Заполняем параметры для ИП
КонецЕсли;

Это в корне неверный подход. Макет не должен определять, какие данные в него вставлять. Макет просто выводит то, что вы передаете в его параметры (именованные области и ячейки).

Как правильно: Не нужно получать данные по всем организациям. Мы формируем запрос, в который передаем параметр отбора — ссылку на организацию из конкретного документа. Таким образом, запрос вернет реквизиты только нужной организации (ООО или ИП), и нам останется лишь передать результат в макет без всяких условий Если...Тогда.

Ошибка при обращении к реквизитам справочника:
Часто возникает проблема при попытке извлечь специфичные данные, например, свидетельство о регистрации ИП. Разработчик пытается обратиться к реквизиту напрямую:

Свидетельство = Справочники.Организации.СвидетельствоСерияНомер;

В результате получаем ошибку: Поле объекта не обнаружено. Почему это происходит? Справочники.Организации — это менеджер справочника, у него нет данных конкретных элементов (записей). Чтобы получить данные, необходимо обратиться к реквизитам через ссылку на конкретный элемент или (что гораздо правильнее и оптимальнее) вытащить это поле через запрос.

Способ 3: Использование БСП и Общих модулей (Best Practice)

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

В современных конфигурациях данные, такие как свидетельства о регистрации, ОГРН, адреса или данные руководителей, могут храниться не просто в реквизитах справочника, а в различных регистрах сведений (для хранения истории изменений). Писать каждый раз громоздкие запросы к этим регистрам — плохая практика.

Разберем, какие общие модули помогают получить нужную информацию:

  1. Получение регистрационных данных организации:
    Для извлечения свидетельств о регистрации, ИНН, ОГРНИП и сведений о руководителях используются специализированные общие модули, например СведенияОбОрганизациях (или СведенияОЮрФизЛице, в зависимости от релиза Бухгалтерии). Вы передаете в функцию ссылку на организацию и дату (чтобы получить актуального на момент документа директора), а функция возвращает готовую Структуру со всеми заполненными полями.
  2. Получение контактной информации:
    Чтобы вытащить юридический или фактический адрес организации, телефон или email, не обращайтесь к табличным частям справочника напрямую. Воспользуйтесь общим модулем УправлениеКонтактнойИнформацией.
  3. Формирование самой печатной формы:
    Программная печать должна реализовываться по стандартам БСП с использованием общего модуля УправлениеПечатью.

Подведем итог: При необходимости создать один шаблон договора для ООО и ИП, в первую очередь рассмотрите типовой инструмент «Шаблоны договоров». Если требуется программирование ВПФ, откажитесь от хардкода условий по наименованиям. Используйте параметризированные запросы с отбором по ссылке на организацию или, что еще лучше, обращайтесь к типовым общим модулям БСП для получения готовых структур с реквизитами юридических лиц и индивидуальных предпринимателей.

← На главную