При разработке и кастомизации печатных форм в конфигурации «1С:Управление торговлей, редакция 10.3» (УТ 10.3) разработчики часто сталкиваются с задачей вывода официального юридического названия компании. По умолчанию в различных списках и журналах документов отображается краткое (рабочее) наименование, например, ООО "Вега". Однако для регламентированных документов (таких как ТОРГ-12, Счет-фактура или Акт об оказании услуг) законодательство требует указывать полное юридическое название — Общество с ограниченной ответственностью "ВЕГА".
В этой статье мы подробно разберем, как устроено хранение этих данных в системе, проанализируем различные программные методы получения полной строки названия организации и выясним, какой из способов является наиболее производительным и правильным с точки зрения стандартов разработки «1С».
Для начала проанализируем структуру справочника Организации (а также аналогичного ему справочника Контрагенты). В системе за хранение названия организации отвечают два разных реквизита:
ООО "Вега".Строка неограниченной длины (или очень большой длины), куда заносится официальное наименование организации согласно учредительным документам. Именно этот реквизит используется для подстановки в печатные формы.Давайте пошагово рассмотрим четыре различных способа вывода этого реквизита в печать, начиная от самых простых и заканчивая профессиональными решениями, использующими механизмы конфигурации.
Если вам необходимо быстро внести изменения в несложную внешнюю печатную форму, самым очевидным решением кажется получение значения напрямую из ссылки на объект. Мы можем обратиться к реквизиту НаименованиеПолное через точку от реквизита организации в документе.
Рассмотрим пример кода:
// Получаем ссылку на организацию из документа
ОрганизацияСсылка = СсылкаНаОбъект.Организация;
// Напрямую считываем полное наименование
ПолноеНазвание = ОрганизацияСсылка.НаименованиеПолное;
// Выводим результат в параметр макета печатной формы
ОбластьМакета.Параметры.НазваниеОрганизации = ПолноеНазвание;
Важная деталь: Этот метод чрезвычайно прост в написании, но имеет существенный архитектурный недостаток. Обращение «через точку» к реквизитам ссылочного типа (Организация.НаименованиеПолное) заставляет платформу выполнять скрытый отдельный SQL-запрос к базе данных для извлечения информации. Если этот код будет выполняться внутри цикла (например, при групповой печати десятков документов), система начнет генерировать сотни лишних запросов, что критически снизит производительность.
Чтобы избежать падения производительности при пакетной обработке данных, правильным решением будет получение полного наименования организации в общем запросе печатной формы. Этот метод позволяет за один единственный запрос к СУБД получить все нужные данные документа вместе с реквизитами связанных справочников.
Рассмотрим структуру такого запроса:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка,
| РеализацияТоваровУслуг.Организация.НаименованиеПолное КАК ПолноеНаименованиеОрганизации
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
// Заполняем параметр области макета значением из выборки запроса
ОбластьМакета.Параметры.ПредставлениеПоставщика = Выборка.ПолноеНаименованиеОрганизации;
КонецЕсли;
Использование запросов — это стандарт разработки «1С». СУБД моментально соединяет таблицы документов и справочников на сервере и возвращает готовое текстовое поле, что обеспечивает максимальное быстродействие.
В типовых конфигурациях, включая «Управление торговлей 10.3», разработчики фирмы «1С» заложили универсальные механизмы получения сведений о контрагентах и организациях. Главное преимущество этого подхода заключается в том, что юридические сведения организации (включая название, адреса, телефоны, ИНН и КПП) могут меняться с течением времени. Стандартные функции учитывают историю изменений на определенную дату.
Для извлечения сведений об организации используется специализированный общий модуль УправлениеКонтактнойИнформацией и его функция СведенияОЮрФизЛице. Она возвращает структуру, в которой содержатся все необходимые реквизиты, актуальные на дату проведения документа.
Посмотрим на пример практической реализации данного метода:
// 1. Получаем структуру сведений на точную дату документа
ДатаДокумента = СсылкаНаОбъект.Дата;
ОрганизацияСсылка = СсылкаНаОбъект.Организация;
СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ОрганизацияСсылка, ДатаДокумента);
// 2. Извлекаем полное наименование из полученной структуры
// В структуре за полное название отвечает свойство "ПолноеНаименование"
ПолноеНазваниеОрг = СведенияОбОрганизации.ПолноеНаименование;
// 3. Передаем значение в макет
ОбластьМакета.Параметры.Поставщик = ПолноеНазваниеОрг;
Почему этот способ лучше остальных? Внутри функции СведенияОЮрФизЛице происходит не просто чтение реквизита. Функция обращается кэшированно к регистрам сведений, считывает информацию о контактных лицах, ответственных сотрудниках и юридическом названии компании, учитывая периодичность данных. Если полгода назад ваше предприятие переименовалось, то при печати старых документов программа выведет старое название, а при печати новых — новое.
Зачастую в печатных формах требуется вывести не просто название организации, а целую информационную строку, включающую ИНН, КПП, адрес и телефон (например: Общество с ограниченной ответственностью "ВЕГА", ИНН 7701020304, КПП 770101001, 101000, г. Москва, ул. Ленина, д. 1).
Для красивого форматирования и сборки такой строки в УТ 10.3 предусмотрена замечательная функция общего модуля ФормированиеПечатныхФорм.ОписаниеОрганизации. Она принимает структуру сведений, полученную на предыдущем шаге, и собирает из нее строку по заданному шаблону.
Проанализируем пример комплексного формирования строки поставщика:
// Шаг 1: Получаем структуру сведений
СведенияОбОрг = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(СсылкаНаОбъект.Организация, СсылкаНаОбъект.Дата);
// Шаг 2: Формируем строку, содержащую Полное наименование, ИНН и КПП организации
// Во втором параметре через запятую перечисляем свойства, которые нужно включить в строку
СтрокаОписания = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрг, "ПолноеНаименование,ИНН,КПП");
// Шаг 3: Если нужно вывести только полное наименование без реквизитов:
// СтрокаОписания = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрг, "ПолноеНаименование");
// Выводим подготовленную красивую строку в параметры печати
ОбластьМакета.Параметры.ПоставщикПредставление = СтрокаОписания;
Данный подход позволяет гибко настраивать состав выводимой информации без ручной конкатенации строк, проверки на пустые значения ИНН/КПП и расстановки запятых — встроенная функция модуля сделает все проверки автоматически и сформирует красивый, презентабельный текст.
Для закрепления материала определимся, когда какой метод следует применять: