Как обойти ограничение длины наименования справочника в 1С и правильно добавить новый реквизит?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки и сопровождения конфигураций на платформе «1С:Предприятие 8» специалисты часто сталкиваются с ограничением стандартного реквизита Наименование, максимальная длина которого по умолчанию ограничена 150 символами. В реальном бизнесе названия контрагентов, номенклатуры или индивидуальных достижений могут быть значительно длиннее. Попытка записать строку большей длины приводит к ее обрезанию.

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

---

Вариант 1. Классический путь: добавление реквизита в метаданные справочника

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

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

Выполним правильную последовательность действий по шагам:

  1. Откроем конфигурацию в режиме «Конфигуратор».
  2. В дереве метаданных найдем нужный нам справочник (например, ИндивидуальныеДостижения).
  3. Развернем ветку справочника и найдем подраздел «Реквизиты». Нажмем правую кнопку мыши и выберем пункт «Добавить».
  4. В свойствах нового реквизита укажем имя (о правилах выбора имени поговорим ниже), выберем тип данных Строка и зададим необходимую длину (например, 1000 символов или отметим флажок «Неограниченная длина»).
  5. Теперь перейдем к форме элемента справочника. В правом верхнем углу в окне «Реквизиты» найдем основной реквизит формы — Объект (он выделен жирным шрифтом). Развернем его структуру.
  6. Мы увидим наш добавленный реквизит внутри структуры объекта. Перетащим его мышкой на дерево элементов формы (в левую верхнюю часть редактора). Платформа автоматически создаст поле ввода и свяжет его с базой данных. В свойстве ПутьКДанным созданного элемента формы теперь будет корректно указано: Объект.НаименованиеПолное.

---

Вариант 2. Конфликт имен: почему именно «НаименованиеПолное», а не «ПолноеНаименование»

Проанализируем предупреждение из сообщения 4 форума о возможном конфликте имен. Почему крайне не рекомендуется называть новый реквизит справочника словом ПолноеНаименование?

Это связано с историей развития платформы и стандартами кодирования фирмы «1С»:

Поэтому всегда называйте свой новый реквизит НаименованиеПолное. Это гарантирует отсутствие конфликтов с платформой и упростит интеграцию с другими подсистемами.

---

Вариант 3. Современный подход: использование расширений конфигурации

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

Рассмотрим, как изменить длину стандартного реквизита Наименование без изменения основной конфигурации:

  1. В меню Конфигуратора выберем пункт «Конфигурация» — «Расширения конфигурации».
  2. Добавим новое расширение (укажем назначение «Адаптация» или «Дополнение»).
  3. В дереве основной конфигурации найдем наш справочник, нажмем по нему правой кнопкой мыши и выберем команду «Добавить в расширение».
  4. Перейдем в окно созданного расширения. Найдем в заимствованном справочнике стандартный реквизит Наименование.
  5. Откроем его палитру свойств и просто изменим длину со стандартных 150 на нужное нам значение (например, 500).
  6. Сохраним расширение и обновим конфигурацию базы данных.

При этом физическая таблица в SQL-базе перестроится автоматически, длина поля увеличится, а основная конфигурация останется полностью типовой и готовой к легким обновлениям в один клик.

---

Вариант 4. Настройка нового реквизита как основного представления

Если мы пошли по пути создания нового реквизита НаименованиеПолное, мы столкнемся со следующей проблемой: в списках выбора, отчетах, динамических списках и полях ввода система по-прежнему будет отображать старое, обрезанное наименование из стандартного реквизита Наименование.

Чтобы новое длинное наименование отображалось везде автоматически без переписывания интерфейсов всех форм конфигурации, нам необходимо переопределить представление объекта на уровне платформы.

Разберем, как это сделать. Нам нужно прописать специальный код в Модуле менеджера нашего справочника. Откроем модуль менеджера и создадим два обработчика событий:


Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
	
	// Отключаем стандартную генерацию полей платформой
	СтандартнаяОбработка = Ложь;
	
	// Указываем платформе, что для формирования представления 
	// нам обязательно понадобятся данные нашего нового реквизита
	Поля.Добавить("НаименованиеПолное");
	Поля.Добавить("Наименование"); // Оставим стандартное на случай, если полное не заполнено
	
КонецПроцедуры

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	// Отключаем стандартное формирование представления платформой
	СтандартнаяОбработка = Ложь;
	
	// Проверяем заполненность нашего длинного реквизита
	Если ЗначениеЗаполнено(Данные.НаименованиеПолное) Тогда
		Представление = Данные.НаименованиеПолное;
	Иначе
		// Если длинное наименование не заполнено, возвращаем стандартное краткое
		Представление = Данные.Наименование;
	EndЕсли;
	
КонецПроцедуры

После сохранения этого кода во всех списках, полях ввода и отчетах платформа начнет автоматически выводить текст из нашего нового реквизита НаименованиеПолное.

---

Вариант 5. Подключение справочника к механизму «Дополнительные реквизиты» БСП

В сообщении 7 пользователь обратил внимание на то, что нужного справочника нет в списке настройки дополнительных реквизитов в режиме предприятия. Если конфигурация построена на базе БСП, мы можем вывести этот справочник в интерфейс настройки свойств без изменения структуры таблиц БД напрямую.

Для интеграции справочника в подсистему свойств выполним следующие шаги в Конфигураторе:

  1. Создание табличной части: В нашем справочнике создадим табличную часть с именем ДополнительныеРеквизиты. В нее добавим реквизиты:
    • Свойство (Тип: ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения)
    • Значение (Тип: Характеристика.ДополнительныеРеквизитыИСведения)
    • ТекстоваяСтрока (Тип: Строка, длина неограничена)
    Совет: структуру этой табличной части можно быстро скопировать из любого типового справочника (например, «Номенклатура» или «Контрагенты»).
  2. Регистрация типа в ПВХ: Найдем в дереве метаданных План видов характеристик ДополнительныеРеквизитыИСведения. В его свойстве «Тип значения характеристик» найдем список типов и установим флажок напротив ссылки нашего справочника СправочникСсылка.ИндивидуальныеДостижения.
  3. Создание предопределенного элемента: Перейдем в справочник НаборыДополнительныхРеквизитовИСведений. Нам нужно программно или через специальную обработку создать в нем предопределенный элемент с именем вида Справочник_ИндивидуальныеДостижения.
  4. Внедрение кода в форму: В модуле формы элемента нашего справочника в процедуре ПриСозданииНаСервере пропишем интеграционный код БСП:
    
    // Подключаем автогенерацию элементов управления для доп. реквизитов на форме
    ПараметрыВыводаСвойств = УправлениеСвойствами.ПараметрыВыводаСвойств();
    ПараметрыВыводаСвойств.ИмяГруппыДляРазмещения = "ГруппаДополнительныеРеквизиты";
    УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыВыводаСвойств);
    

После выполнения этих шагов в режиме «1С:Предприятие» в разделе администрирования появится наш справочник, и обычные пользователи смогут самостоятельно добавлять к нему реквизиты неограниченной длины без привлечения программистов. В качестве альтернативы можно использовать готовое решение для добавления произвольного набора свойств к справочникам.

← На главную