При работе с каталогами товаров в конфигурациях «1С:Управление торговлей», ERP или «Комплексная автоматизация» часто возникает потребность загружать длинные наименования из прайс-листов поставщиков или передавать подробные названия на сайт интернет-магазина. При попытке изменить свойство стандартного реквизита Наименование в конфигураторе разработчики сталкиваются с тем, что система не позволяет установить значение более 150 знаков. Разберем причины этого ограничения и рассмотрим корректные технические способы решения задачи.
В платформе «1С:Предприятие 8» для стандартного реквизита Наименование справочников установлено жесткое ограничение: его максимальная длина не может превышать 150 символов. Даже при снятии конфигурации с поддержки или включении возможности изменения задать число 255 или более в поле Длина на вкладке «Данные» невозможно.
Выясним причину такого поведения платформы. Стандартный реквизит Наименование автоматически включается в платформенные индексы таблиц СУБД для обеспечения быстрой сортировки, поиска по первым символам и автодополнения при вводе по строке. Ограничение длины предотвращает превышение предельного размера ключа индекса на уровне базы данных (MS SQL Server, PostgreSQL) и защищает систему от катастрофического падения производительности при операциях записи и обновления таблиц.
Попытки обойти это ограничение прямой модификацией типового реквизита не только технически невозможны, но и не имеют смысла, так как при последующих типовых обновлениях конфигурации внесенные изменения будут вызывать постоянные конфликты. Рассмотрим правильные архитектурные альтернативы.
В типовых прикладных решениях (включая УТ 11, КА и ERP) справочник Номенклатура содержит дополнительный реквизит НаименованиеПолное (или «Полное наименование»). В отличие от рабочего наименования, этот реквизит имеет тип Строка неограниченной длины.
Проанализируем разделение ролей между этими реквизитами:
Если внешняя обработка загрузки прайс-листов или модуль интеграции с сайтом обрезают длинные названия, правильнее доработать саму обработку или модуль выгрузки, перенаправив чтение данных на реквизит НаименованиеПолное, а в стандартное наименование записывать усеченную строку функцией Лев(СтрокаПрайса, 150).
Если длинные наименования приходят от внешних контрагентов и уникальны для каждого поставщика, не следует перегружать основной каталог 1С. В «1С:Управление торговлей 11» предусмотрен встроенный справочник НоменклатураПоставщиков (или регистр сопоставления номенклатуры контрагентов).
Разберем порядок работы с этим механизмом:
Если для интеграционных процессов требуется хранить специфическое длинное наименование (например, до 1000 символов) без снятия базы с поддержки, создадим отдельный реквизит с помощью механизма расширений конфигурации.
Разберем по шагам реализацию этой задачи:
Номенклатура.ДлинноеНаименованиеДляСайта с типом Строка (длина 1000, переменная).Посмотрим на пример переопределения представления объекта в модуле менеджера через расширение:
&Вместо("ОбработкаПолученияПолейПредставления")
Процедура Расш1_ОбработкаПолученияПолейПредставления(Поля, Данные, Описание)
Поля.Добавить("ДлинноеНаименованиеДляСайта");
Поля.Добавить("Наименование");
КонецПроцедуры
&Вместо("ОбработкаПолученияПредставления")
Процедура Расш1_ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ЗначениеЗаполнено(Данные.ДлинноеНаименованиеДляСайта) Тогда
Представление = Данные.ДлинноеНаименованиеДляСайта;
Иначе
Представление = Данные.Наименование;
КонецЕсли;
КонецПроцедуры
Такой подход полностью изолирует доработку от типового обновления конфигурации и сохраняет производительность базы данных при операциях со стандартным индексом.