Рассмотрим распространенную задачу: в базе данных ведется учет от лица нескольких организаций, например, ООО и индивидуального предпринимателя (ИП). Возникает потребность распечатать договор с контрагентом из документа (например, ЗаключениеДоговора). У организаций совершенно разные реквизиты (свидетельства о регистрации, ИНН, ОГРН, руководители), но создавать под каждую отдельный макет печатной формы нерационально. Проанализируем ситуацию и выясним, как правильно настроить систему, чтобы при печати автоматически подставлялись данные соответствующей организации.
Прежде чем приступать к написанию внешних печатных форм (ВПФ) и сложных запросов, посмотрим на современные возможности самой конфигурации 1С:Бухгалтерия 3.0. Зачастую задачу можно решить полностью без программирования с помощью типового функционала.
Разберем по шагам, как настроить печать через встроенный механизм:
{Полное наименование организации}, {ИНН}, {Реквизиты руководителя}.Как это работает на практике? При формировании печатной формы из документа система сама определит, какая организация указана в реквизите Организация. Подсистема автоматически соберет нужные данные и корректно заменит параметры на значения. Никаких дополнительных условий писать не нужно!
Решение проблемы со склонениями: При использовании единого макета часто возникает проблема с падежами (например, «в лице Директора Иванова...» для ООО или «в лице Индивидуального предпринимателя Петрова...» для ИП). В 1С:БП 3.0 встроен механизм автоматического склонения ФИО и должностей (настраивается в карточке контрагента или договора по ссылке «Склонения»). Программа сама поставит должность и фамилию в родительный падеж.
Если штатного функционала недостаточно (требуется сложная логика, специфические расчеты или нестандартный макет), мы создаем Внешнюю печатную форму. Разберем типичные ошибки начинающих разработчиков на этом пути и посмотрим, как их исправить.
Типичная ошибка (Жесткие условия в коде):
Начинающие программисты часто пытаются извлечь все данные сразу, а потом фильтровать их условиями вида:
Если ВыборкаИзЗапроса.ОрганизацияНаименование = "НаименованиеООО" Тогда
// Заполняем параметры для ООО
Иначе
// Заполняем параметры для ИП
КонецЕсли;
Это в корне неверный подход. Макет не должен определять, какие данные в него вставлять. Макет просто выводит то, что вы передаете в его параметры (именованные области и ячейки).
Как правильно: Не нужно получать данные по всем организациям. Мы формируем запрос, в который передаем параметр отбора — ссылку на организацию из конкретного документа. Таким образом, запрос вернет реквизиты только нужной организации (ООО или ИП), и нам останется лишь передать результат в макет без всяких условий Если...Тогда.
Ошибка при обращении к реквизитам справочника:
Часто возникает проблема при попытке извлечь специфичные данные, например, свидетельство о регистрации ИП. Разработчик пытается обратиться к реквизиту напрямую:
Свидетельство = Справочники.Организации.СвидетельствоСерияНомер;
В результате получаем ошибку: Поле объекта не обнаружено. Почему это происходит? Справочники.Организации — это менеджер справочника, у него нет данных конкретных элементов (записей). Чтобы получить данные, необходимо обратиться к реквизитам через ссылку на конкретный элемент или (что гораздо правильнее и оптимальнее) вытащить это поле через запрос.
Проанализируем самый грамотный подход для разработчиков — использование процедур и функций Библиотеки стандартных подсистем (БСП) и общих модулей типовой конфигурации.
В современных конфигурациях данные, такие как свидетельства о регистрации, ОГРН, адреса или данные руководителей, могут храниться не просто в реквизитах справочника, а в различных регистрах сведений (для хранения истории изменений). Писать каждый раз громоздкие запросы к этим регистрам — плохая практика.
Разберем, какие общие модули помогают получить нужную информацию:
СведенияОбОрганизациях (или СведенияОЮрФизЛице, в зависимости от релиза Бухгалтерии). Вы передаете в функцию ссылку на организацию и дату (чтобы получить актуального на момент документа директора), а функция возвращает готовую Структуру со всеми заполненными полями.УправлениеКонтактнойИнформацией.УправлениеПечатью.Подведем итог: При необходимости создать один шаблон договора для ООО и ИП, в первую очередь рассмотрите типовой инструмент «Шаблоны договоров». Если требуется программирование ВПФ, откажитесь от хардкода условий по наименованиям. Используйте параметризированные запросы с отбором по ссылке на организацию или, что еще лучше, обращайтесь к типовым общим модулям БСП для получения готовых структур с реквизитами юридических лиц и индивидуальных предпринимателей.