В процессе ведения управленческого и бухгалтерского учета пользователи часто сталкиваются с тем, что стандартной длины наименования договора в 1С (которая по умолчанию во многих типовых конфигурациях, таких как 1С:Управление торговлей 10.3 или 1С:Бухгалтерия предприятия, составляет всего 50 символов) критически не хватает. Официальные названия договоров, особенно государственных контрактов с длинными номерами и формулировками, требуют гораздо большего пространства для ввода информации. Попытки изменить этот параметр напрямую в форме элемента ни к чему не приводят. В этой статье мы подробно разберем, как решить эту задачу, рассмотрим ограничения платформы, возможные последствия для обменов данными и предложим лучшие варианты реализации.
Если ваша конфигурация уже снята с поддержки (или включена возможность изменения с сохранением поддержки), мы можем отредактировать длину стандартного реквизита напрямую в метаданных справочника. Разберем этот процесс по шагам:
Справочники и раскройте ее.ДоговорыКонтрагентов и дважды кликните по нему левой кнопкой мыши. Перед вами откроется окно редактирования свойств объекта.F7 или выбрав синюю пиктограмму на панели инструментов. Согласитесь с изменениями структуры таблиц базы данных.Если при попытке изменить длину поле ввода оказывается затененным (неактивным), это означает, что конфигурация находится на полной поддержке поставщика («на замке») или база является узлом распределенной информационной базы (УРИБ), в котором изменения структуры метаданных заблокированы.
Чтобы разрешить редактирование, перейдите в меню Конфигурация -> Поддержка -> Настройка поддержки, нажмите кнопку Включить возможность изменения и установите правила поддержки для нужного объекта (или всей конфигурации) в значение «Объект поставщика редактируется с сохранением поддержки».
Важно помнить, что платформа «1С:Предприятие 8» накладывает жесткое системное ограничение на длину стандартного реквизита Наименование для любых справочников. Максимально возможная длина, которую вы можете установить в Конфигураторе, составляет 150 символов.
Сделать это стандартное поле длиннее платформа физически не позволит. Такое ограничение обусловлено тем, что поле Наименование автоматически индексируется в системе управления базами данных (СУБД) для обеспечения высокой скорости полнотекстового поиска и сортировки. Создание слишком длинных индексируемых полей привело бы к колоссальному увеличению объемов индексов в СУБД и серьезному падению производительности всей системы.
Если вы работаете на современной платформе 1С 8.3 (начиная с версии 8.3.18 и в режиме совместимости не ниже 8.3.17), то вам вовсе не обязательно снимать основную конфигурацию с поддержки. Вы можете решить задачу с помощью механизма расширений конфигурации. Проанализируем, как это сделать:
УвеличениеДлиныДоговоров) и снимите флажки «Активно» и «Безопасный режим» на время настройки.ДоговорыКонтрагентов, кликните по нему правой кнопкой мыши и выберите команду Добавить в расширение.F7).Благодаря этому методу основная конфигурация остается на полной поддержке поставщика, что существенно облегчает дальнейший процесс автоматического обновления типового решения.
Прежде чем принимать решение об изменении длины стандартного реквизита, необходимо тщательно проанализировать ИТ-ландшафт вашей компании. Если ваша информационная база обменивается данными с другими конфигурациями (например, 1С:Управление торговлей синхронизируется с 1С:Бухгалтерией предприятия), увеличение длины наименования договора в одной базе неизбежно приведет к следующим проблемам:
Чтобы избежать проблем с производительностью, трудностей при обновлении и потенциальных сбоев в обменах данными, разработчики рекомендуют использовать альтернативный архитектурный подход. Мы можем оставить стандартное индексируемое наименование коротким (использовать его в качестве «рабочего» названия для быстрого поиска внутри программы), а для вывода полной информации использовать дополнительный реквизит.
Разберем по шагам реализацию этого подхода:
ДоговорыКонтрагентов новый реквизит с именем ПолноеНаименование (или НаименованиеДляПечати) с типом данных Строка неограниченной длины (или фиксированной длины, например, 300 символов). Так как этот реквизит не индексируется, он не будет замедлять работу СУБД.Наименование на созданный реквизит ПолноеНаименование.Посмотрим на пример программного кода, который можно использовать при формировании печатной формы для вывода полного наименования договора, если оно заполнено пользователем, или стандартного наименования в противном случае:
Если ЗначениеЗаполнено(ВыборкаДоговора.ПолноеНаименование) Тогда
ОбластьМакета.Параметры.ДоговорПредставление = ВыборкаДоговора.ПолноеНаименование;
Иначе
ОбластьМакета.Параметры.ДоговорПредставление = ВыборкаДоговора.Наименование;
КонецЕсли;
Использование этого обходного пути гарантирует абсолютную стабильность системы при обновлении, исключает любые конфликты при обмене данными через стандартные планы обмена и ЭДО, а также сохраняет быстродействие базы данных на исходном высоком уровне.