В процессе разработки и сопровождения конфигураций на платформе «1С:Предприятие 8» специалисты часто сталкиваются с ограничением стандартного реквизита Наименование, максимальная длина которого по умолчанию ограничена 150 символами. В реальном бизнесе названия контрагентов, номенклатуры или индивидуальных достижений могут быть значительно длиннее. Попытка записать строку большей длины приводит к ее обрезанию.
В этой статье мы подробно разберем, как правильно обойти это ограничение, не нарушая логику работы системы. Мы рассмотрим различные варианты: от классического добавления собственного реквизита до современных подходов с использованием расширений конфигурации и механизмов Библиотеки стандартных подсистем (БСП).
---
Разберем типичную ошибку начинающих разработчиков, с которой столкнулся автор темы на форуме. При добавлении нового поля на форму элемента справочника данные не сохраняются после закрытия формы. Выясним причину этого поведения.
Интерфейс управляемой формы работает с реквизитами формы, но для того чтобы данные физически записались в базу данных SQL или файловую базу, этот реквизит должен быть частью объекта базы данных (самого справочника). Если вы создали реквизит на вкладке «Реквизиты» в редакторе формы, он будет существовать только в памяти этой формы во время ее работы.
Выполним правильную последовательность действий по шагам:
ИндивидуальныеДостижения).Строка и зададим необходимую длину (например, 1000 символов или отметим флажок «Неограниченная длина»).Объект (он выделен жирным шрифтом). Развернем его структуру.ПутьКДанным созданного элемента формы теперь будет корректно указано: Объект.НаименованиеПолное.---
Проанализируем предупреждение из сообщения 4 форума о возможном конфликте имен. Почему крайне не рекомендуется называть новый реквизит справочника словом ПолноеНаименование?
Это связано с историей развития платформы и стандартами кодирования фирмы «1С»:
ПолноеНаименование(), который возвращал строку пути элемента с учетом всех его родителей в иерархических справочниках.ПолноеНаименование зарезервировано у многих системных объектов метаданных. Использование этого имени для прикладного реквизита справочника может приводить к трудночитаемому коду и неожиданным ошибкам при обращении к свойствам объектов через точку в общих модулях.НаименованиеПолное. Большинство типовых конфигураций спроектированы под это имя. Автоматические обработчики БСП часто ищут реквизит именно с таким именем для вывода в печатные формы или для синхронизации данных.Поэтому всегда называйте свой новый реквизит НаименованиеПолное. Это гарантирует отсутствие конфликтов с платформой и упростит интеграцию с другими подсистемами.
---
Представим ситуацию: ваша конфигурация находится на поддержке («на замке»), и вы не хотите снимать ее с поддержки ради изменения длины одного поля, ведь это сильно усложнит последующие обновления. Платформа «1С:Предприятие 8.3» позволяет решить эту проблему изящно с помощью расширений конфигурации. Для упрощения обслуживания системы после внесения подобных изменений применяется инструмент для автоматического архивирования и обновления баз 1С в «тихом» режиме.
Рассмотрим, как изменить длину стандартного реквизита Наименование без изменения основной конфигурации:
Наименование.При этом физическая таблица в SQL-базе перестроится автоматически, длина поля увеличится, а основная конфигурация останется полностью типовой и готовой к легким обновлениям в один клик.
---
Если мы пошли по пути создания нового реквизита НаименованиеПолное, мы столкнемся со следующей проблемой: в списках выбора, отчетах, динамических списках и полях ввода система по-прежнему будет отображать старое, обрезанное наименование из стандартного реквизита Наименование.
Чтобы новое длинное наименование отображалось везде автоматически без переписывания интерфейсов всех форм конфигурации, нам необходимо переопределить представление объекта на уровне платформы.
Разберем, как это сделать. Нам нужно прописать специальный код в Модуле менеджера нашего справочника. Откроем модуль менеджера и создадим два обработчика событий:
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
// Отключаем стандартную генерацию полей платформой
СтандартнаяОбработка = Ложь;
// Указываем платформе, что для формирования представления
// нам обязательно понадобятся данные нашего нового реквизита
Поля.Добавить("НаименованиеПолное");
Поля.Добавить("Наименование"); // Оставим стандартное на случай, если полное не заполнено
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
// Отключаем стандартное формирование представления платформой
СтандартнаяОбработка = Ложь;
// Проверяем заполненность нашего длинного реквизита
Если ЗначениеЗаполнено(Данные.НаименованиеПолное) Тогда
Представление = Данные.НаименованиеПолное;
Иначе
// Если длинное наименование не заполнено, возвращаем стандартное краткое
Представление = Данные.Наименование;
EndЕсли;
КонецПроцедуры
После сохранения этого кода во всех списках, полях ввода и отчетах платформа начнет автоматически выводить текст из нашего нового реквизита НаименованиеПолное.
---
В сообщении 7 пользователь обратил внимание на то, что нужного справочника нет в списке настройки дополнительных реквизитов в режиме предприятия. Если конфигурация построена на базе БСП, мы можем вывести этот справочник в интерфейс настройки свойств без изменения структуры таблиц БД напрямую.
Для интеграции справочника в подсистему свойств выполним следующие шаги в Конфигураторе:
ДополнительныеРеквизиты. В нее добавим реквизиты:
Свойство (Тип: ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения)Значение (Тип: Характеристика.ДополнительныеРеквизитыИСведения)ТекстоваяСтрока (Тип: Строка, длина неограничена)ДополнительныеРеквизитыИСведения. В его свойстве «Тип значения характеристик» найдем список типов и установим флажок напротив ссылки нашего справочника СправочникСсылка.ИндивидуальныеДостижения.НаборыДополнительныхРеквизитовИСведений. Нам нужно программно или через специальную обработку создать в нем предопределенный элемент с именем вида Справочник_ИндивидуальныеДостижения.ПриСозданииНаСервере пропишем интеграционный код БСП:
// Подключаем автогенерацию элементов управления для доп. реквизитов на форме
ПараметрыВыводаСвойств = УправлениеСвойствами.ПараметрыВыводаСвойств();
ПараметрыВыводаСвойств.ИмяГруппыДляРазмещения = "ГруппаДополнительныеРеквизиты";
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыВыводаСвойств);
После выполнения этих шагов в режиме «1С:Предприятие» в разделе администрирования появится наш справочник, и обычные пользователи смогут самостоятельно добавлять к нему реквизиты неограниченной длины без привлечения программистов. В качестве альтернативы можно использовать готовое решение для добавления произвольного набора свойств к справочникам.