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