Как увеличить длину наименования справочника свыше 150 символов и минимизировать доработку печатных форм в 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В конфигурациях 1С (в частности, в «1С:Управление торговлей 10.3») нередко возникает ситуация, когда наименование товара или его характеристики не помещается в стандартное поле. Длина описания составных характеристик, импортных товаров или сложных номенклатурных позиций может превышать 200–300 знаков, тогда как стандартный реквизит Наименование жестко ограничен платформой 1С:Предприятие величиной в 150 символов.

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

Ограничение стандартного реквизита «Наименование»

Платформа 1С не позволяет установить длину стандартного реквизита Наименование больше 150 символов для справочников и планов видов характеристик. Это базовое платформенное ограничение, поэтому просто изменить длину в свойствах объекта метаданных невозможно.

Стандартный реквизит автоматически индексируется и участвует в механизме «Ввод по строке». Если для хранения длинного описания создать реквизит типа Строка неограниченной длины, его нельзя будет проиндексировать и включить в поля ввода по строке. Оптимальным решением является добавление нового реквизита фиксированной длины, например НаименованиеПолное со строковым типом Строка(500) или Строка(1000).

Решение через переопределение механизма представления ссылки

Если в печатных формах и отчетах СКД выводятся ссылки на объекты (а не поле Ссылка.Наименование через точку), платформа автоматически обращается к представлению ссылки. Мы можем переопределить стандартное представление, чтобы вместо обрезанного стандартного наименования выводился новый реквизит с полным текстом.

Для этого в модуле менеджера справочника (например, Справочник.ХарактеристикиНоменклатуры) или через подписку на события для менеджера объекта реализуем два обязательных обработчика: ОбработкаПолученияПолейПредставления и ОбработкаПолученияПредставления.

  1. Объявление необходимых полей. Чтобы платформа получила данные за один запрос к СУБД, обязательно добавляем новый реквизит в состав полей представления:

    
    Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
        
        СтандартнаяОбработка = Ложь;
        Поля.Добавить("Наименование");
        Поля.Добавить("НаименованиеПолное");
        
    КонецПроцедуры
    
  2. Формирование текста представления. В обработчике представления подставляем длинное наименование, если оно заполнено:

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

Важно: если не использовать процедуру ОбработкаПолученияПолейПредставления, платформа будет считывать данные каждого объекта индивидуально. Это приведет к проблеме «N+1 запросов», что вызовет резкое зависание динамических списков и построения больших отчетов.

Настройка подписки на события для менеджера

Переопределить логику можно не только в модуле менеджера конкретного справочника, но и через общий механизм подписок на события. При создании подписки на событие ОбработкаПолученияПредставления в качестве источника необходимо выбирать не СправочникОбъект, а СправочникМенеджер соответствующего справочника.

Централизованная доработка печатных форм в УТ 10.3

Если в базе данных печатные формы обращаются к наименованию напрямую через запросы (например, выбирая Характеристика.Наименование), переопределения представлений может оказаться недостаточно. Однако переделывать каждый макет и каждый документ вручную нет необходимости.

В типовой «УТ 10.3» печать большинства унифицированных форм (ТОРГ-12, Счет-фактура, УПД, Счет на оплату, Расходная накладная) вынесена в специализированные функции общих модулей печати (например, ФормированиеПечатныхФорм). Достаточно скорректировать одну централизованную функцию формирования текста номенклатуры и характеристики:


Функция ПолучитьНаименованиеХарактеристикиДляПечати(ХарактеристикаСсылка) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ВЫБОР
        |       КОГДА Характеристики.НаименованиеПолное <> """" 
        |           ТОГДА Характеристики.НаименованиеПолное
        |       ИНАЧЕ Характеристики.Наименование
        |   КОНЕЦ КАК НаименованиеДляПечати
        |ИЗ
        |   Справочник.ХарактеристикиНоменклатуры КАК Характеристики
        |ГДЕ
        |   Характеристики.Ссылка = &ХарактеристикаСсылка";
    
    Запрос.УстановитьПараметр("ХарактеристикаСсылка", ХарактеристикаСсылка);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        Возврат Выборка.НаименованиеДляПечати;
    КонецЕсли;
    
    Возврат "";
    
КонецФункции

Особенности автоформирования характеристик

В «УТ 10.3» наименование характеристики формируется автоматически программным сложением значений ее свойств. При превышении лимита в 150 символов попытка записи в стандартный реквизит вызовет ошибку или усечение строки.

Для корректной работы скорректируем процедуру формирования наименования характеристики при записи: полную строку свойств записываем в новый реквизит НаименованиеПолное, а в стандартный реквизит Наименование помещаем усеченную до 150 символов строку (например, через Лев(ПолныйТекст, 150)). Это сохранит работоспособность стандартных списков выбора и автоподбора.

Влияние на обмены данными

При увеличении длины наименования обязательно проанализируем правила обмена (Конвертация данных, выгрузки на сайт, маркетплейсы, CommerceML, EDI и обмен с «1С:Бухгалтерией»):

  1. Если приемник ожидает стандартное поле длиной до 150 знаков, при выгрузке длинных строк возникнет ошибка валидации XSD-схемы либо текст обрежется на стороне базы-приемника.
  2. В правилах конвертации (ПКО/ПКС) необходимо явно сопоставить реквизит НаименованиеПолное с соответствующим расширенным полем в целевой системе (например, с полем НаименованиеПолное номенклатуры в «1С:Бухгалтерии»).
← На главную