Длина строки в 1С: как расширить поле, реквизит и наименование

· 9 мин

Содержание

Пользователь вставляет длинное примечание в поле, а 1С молча обрезает его на двадцать пятом символе. Или ругается на ввод. Причина одна: у реквизита задана строка ограниченной длины. Чтобы увеличить количество символов, откройте реквизит в Конфигураторе, в свойстве Тип у строки поставьте нужную длину (или 0 — неограниченная) и обновите конфигурацию базы данных.

Дальше всё зависит от того, где лежит поле. В своей конфигурации правка занимает минуту. В типовой (Бухгалтерия, ЗУП, УТ) её придётся снять с поддержки либо обойти через расширение. Разберём все варианты, а заодно то, что ломается после увеличения длины.

Откуда берётся ограничение на длину строки

У каждого реквизита, измерения и ресурса есть тип. Если тип — Строка, у него есть квалификатор: длина и признак допустимой длины.

  • 🔹 Фиксированная — значение всегда добивается пробелами до заданной длины.
  • 🔹 Переменная — хранится ровно то, что ввели, но не больше лимита.
  • 🔹 Неограниченная — длина 0, текст любого размера.

Поэтому «ограничение» не баг платформы. Разработчик выбрал длину под типичное значение: для ИНН хватит двенадцати знаков, для комментария нет. В типовых конфигурациях длины подобраны под обычные сценарии, и именно их люди пытаются расширить.

Лимит есть и у стандартных реквизитов. У справочников это Наименование и Код, у документов — Номер. Их длина настраивается не в реквизитах, а в свойствах самого объекта.

Для тех, кто не пишет в Конфигураторе, есть простое правило: если значение не помещается в поле, а в других местах вводится без проблем, дело в типе реквизита, а не в форме.

Как изменить длину реквизита в Конфигураторе

Работает для собственной конфигурации и для типовой, снятой с поддержки.

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

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

Увеличение длины безопасно, уменьшение — нет. Если сделать поле короче, чем уже лежащие в нём данные, платформа предупредит об усечении, а часть значений обрежется без возврата. Перед любым уменьшением сделайте копию базы .

Наименование, код и номер

Эти поля меняются в свойствах объекта, а не в реквизитах.

Что менятьГде найти свойствоЗамечание
Наименование справочникаДлина наименованияУ платформы есть верхний предел
Код справочникаДлина кодаТип кода — строка или число
Номер документаДлина номераВлияет на нумерацию и маски

В диалоге Конфигуратор не даст ввести значение выше допустимого, так что предел вы увидите сразу. Если наименование нужно очень длинное, обычно проще добавить отдельный реквизит Полное наименование неограниченной длины.

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

Пример из практики: в справочнике договоров наименование стоит на 100 символах, а юристы вписывают туда предмет договора целиком. Увеличивать наименование до предела не нужно. Заведите реквизит Предмет договора неограниченной длины и оставьте наименование коротким: так списки остаются читаемыми, а текст не теряется.

Что произойдёт при обновлении

Платформа сама перестроит таблицу в базе. В файловой базе это занимает секунды, в серверной на большой таблице — дольше, потому что идёт реструктуризация. Данные сохраняются. Формы подхватывают новую длину автоматически: поле ввода берёт ограничение из типа реквизита.

Если на форме поле выглядит узким, а текст длинный, откройте свойства элемента формы и включите Многострочный режим. Длина строки при этом не меняется — меняется только отображение.

Неограниченная длина: когда она нужна и чем грозит

Тип «строка неограниченной длины» подходит для комментариев, описаний, технических заданий, текстов писем, ответов внешних сервисов. Ограничений на размер значения у вас фактически нет.

У неё есть цена, и её лучше знать заранее.

  • 🔸 В серверных СУБД такое поле хранится иначе, чем обычная строка, и обращение к нему тяжелее.
  • 🔸 В запросах с неограниченной строкой нельзя сравнивать, группировать и сортировать так же свободно, как с обычной.
  • 🔸 Индекс по такому реквизиту не построить.
  • 🔸 Отбор по нему в динамических списках работает хуже или недоступен.

Поэтому правило такое: если значение по смыслу короткое (артикул, номер паспорта, код региона), давайте ему конкретную длину с запасом. Неограниченную оставляйте под свободный текст.

Вторая крайность тоже вредна: строка в 1000 символов «на всякий случай» в каждом реквизите раздувает таблицы и замедляет выборки по сравнению с 50.

Расширения: как добавить поле, не трогая типовую конфигурацию

Типовая конфигурация стоит на поддержке. Изменить в ней тип реквизита можно только после снятия с поддержки, а после этого каждое обновление релиза придётся сливать вручную. Для коротких правок это плохая сделка.

Расширение конфигурации (появились в платформе 8.3.6) — аккуратный выход, но с оговоркой.

Расширение не умеет менять тип уже существующего реквизита типовой конфигурации. Оно умеет добавить в заимствованный объект новый реквизит. Поэтому схема такая:

  1. Создайте расширение: Конфигурация → Расширения конфигурации → Добавить.
  2. Заимствуйте нужный объект (справочник, документ) в расширение.
  3. Добавьте в него новый реквизит типа Строка, длина 0.
  4. Выведите реквизит на форму: форму тоже нужно заимствовать.
  5. Загрузите расширение в базу и обновите конфигурацию БД.

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

Если же нужно именно изменить существующий реквизит (например, потому что его читает типовой отчёт), остаётся снятие с поддержки либо договорённость с разработчиком конфигурации. Прикинуть заранее стоит, готовы ли вы потом объединять изменения при каждом обновлении.

Длинные строки в запросах и коде

После того как поле стало длиннее, всплывают две проблемы: запросы и программные константы.

Запросы

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

ВЫБРАТЬ
    Док.Ссылка КАК Ссылка,
    ВЫРАЗИТЬ(Док.Комментарий КАК СТРОКА(200)) КАК КомментарийКратко
ИЗ
    Документ.РеализацияТоваровУслуг КАК Док

Функция ПОДСТРОКА(Док.Комментарий, 1, 200) решает ту же задачу и сразу обрезает значение. Если вам нужен весь текст, не группируйте по нему: достаньте его отдельным запросом или обращением к реквизиту ссылки.

При приведении ВЫРАЗИТЬ ... КАК СТРОКА(200) всё, что длиннее, будет отрезано. Для отбора по началу текста это нормально, для вывода пользователю — нет.

Программное создание описания типа

Когда реквизит создаётся из кода (динамический список, табличный документ, параметры обработки), длину задают через квалификатор:

Квалификатор = Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная);
Описание = Новый ОписаниеТипов("Строка", , Квалификатор);

Ноль в первом параметре снова означает неограниченную длину. Любое другое число — ограничение.

Срез значения при записи

Если часть данных приходит извне (из файла, обмена, веб-сервиса), а реквизит ограничен, длинное значение обрежется при записи объекта. Проверьте длину заранее:

Если СтрДлина(Текст) > 150 Тогда
    Сообщить("Текст длиннее допустимого, будет усечён: " + СтрДлина(Текст));
КонецЕсли;

Лучше, чем молча потерять хвост описания.

Хранение больших текстов: строка, текст или файл

Если вы увеличиваете поле ради очень больших объёмов (договор целиком, выгрузка, лог), строка неограниченной длины — не всегда лучший вариант. Сравните.

СпособКогда подходитМинусы
Строка неограниченной длиныКомментарии, описания, тексты до нескольких страницНет индекса, ограничения в запросах
Хранилище значенияДвоичные данные, картинки, сериализованные объектыНе читается запросом как текст, нужен код
Присоединённый файлДокументы, сканы, большие выгрузкиОтдельный механизм, хранится вне реквизитов

Простой ориентир: текст, который человек читает и правит в карточке, — строка неограниченной длины. Всё, что целиком не нужно в отборах и отчётах, — файл или хранилище значения.

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

Что ломается после увеличения длины

Расширили поле, обновили базу — и что-то стало работать иначе. Чаще всего это такие случаи.

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

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

Если не помогло

Поле всё равно не принимает длинный текст. Проверьте по порядку:

  • 🔍 вы обновили конфигурацию БД, а не только сохранили конфигурацию;
  • 🔍 пользователь запускает ту же базу, а не копию со старой структурой;
  • 🔍 в форме нет собственного ограничения: у элемента может стоять Максимальная длина, которая меньше длины реквизита;
  • 🔍 у поля формы нет реквизита-копии (форма обработки со своим реквизитом) с короткой строкой.

Последний пункт встречается чаще, чем кажется: правите реквизит объекта, а форма работает с собственным реквизитом формы.

Диагностика: выберите симптом

Частые вопросы

Можно ли увеличить длину наименования в типовом справочнике?
Да, через свойство Длина наименования самого справочника, но только в конфигурации, снятой с поддержки, и в пределах, которые допускает платформа. В расширении это свойство не изменить, поэтому там заводят отдельный реквизит.
Что значит длина 0 у строки?
Это строка неограниченной длины. В неё помещается текст любого размера, но у такого реквизита есть ограничения в запросах и отборах.
Пропадут ли данные, если я увеличу длину?
Нет. Увеличение длины данные не затрагивает, платформа лишь перестраивает таблицу. Опасно уменьшение: значения длиннее нового лимита будут усечены.
Нужно ли останавливать работу пользователей при смене длины?
Для обновления структуры базы нужен монопольный доступ, поэтому да. На большой серверной базе реструктуризация таблицы может занять заметное время.
Как увеличить поле без доступа к Конфигуратору?
Никак: тип реквизита меняется только в Конфигураторе. Если прав нет, обратитесь к администратору или программисту, который отвечает за конфигурацию.