Длина строки в 1С: как расширить поле, реквизит и наименование
Содержание
Пользователь вставляет длинное примечание в поле, а 1С молча обрезает его на двадцать пятом символе. Или ругается на ввод. Причина одна: у реквизита задана строка ограниченной длины. Чтобы увеличить количество символов, откройте реквизит в Конфигураторе, в свойстве Тип у строки поставьте нужную длину (или 0 — неограниченная) и обновите конфигурацию базы данных.
Дальше всё зависит от того, где лежит поле. В своей конфигурации правка занимает минуту. В типовой (Бухгалтерия, ЗУП, УТ) её придётся снять с поддержки либо обойти через расширение. Разберём все варианты, а заодно то, что ломается после увеличения длины.
Откуда берётся ограничение на длину строки
У каждого реквизита, измерения и ресурса есть тип. Если тип — Строка, у него есть квалификатор: длина и признак допустимой длины.
- 🔹 Фиксированная — значение всегда добивается пробелами до заданной длины.
- 🔹 Переменная — хранится ровно то, что ввели, но не больше лимита.
- 🔹 Неограниченная — длина
0, текст любого размера.
Поэтому «ограничение» не баг платформы. Разработчик выбрал длину под типичное значение: для ИНН хватит двенадцати знаков, для комментария нет. В типовых конфигурациях длины подобраны под обычные сценарии, и именно их люди пытаются расширить.
Лимит есть и у стандартных реквизитов. У справочников это Наименование и Код, у документов — Номер. Их длина настраивается не в реквизитах, а в свойствах самого объекта.
Для тех, кто не пишет в Конфигураторе, есть простое правило: если значение не помещается в поле, а в других местах вводится без проблем, дело в типе реквизита, а не в форме.
Как изменить длину реквизита в Конфигураторе
Работает для собственной конфигурации и для типовой, снятой с поддержки.
- Откройте базу в режиме
Конфигуратор. - В дереве конфигурации найдите объект (справочник, документ, регистр) и откройте нужный реквизит двойным щелчком.
- В палитре свойств найдите
Тип, нажмите...и выберитеСтрока. - В поле
Длинавпишите число. Для неограниченной длины —0. - Проверьте
Допустимая длина. Для текстов почти всегда подходитПеременная. - Нажмите
ОКи выберитеКонфигурация → Обновить конфигурацию базы данных(клавишаF7).
Пока вы не обновили конфигурацию базы данных, пользователи видят старую структуру. Обновление структуры требует монопольного доступа: предупредите людей и делайте его вне рабочих часов.
Увеличение длины безопасно, уменьшение — нет. Если сделать поле короче, чем уже лежащие в нём данные, платформа предупредит об усечении, а часть значений обрежется без возврата. Перед любым уменьшением сделайте копию базы .
Наименование, код и номер
Эти поля меняются в свойствах объекта, а не в реквизитах.
| Что менять | Где найти свойство | Замечание |
|---|---|---|
| Наименование справочника | Длина наименования | У платформы есть верхний предел |
| Код справочника | Длина кода | Тип кода — строка или число |
| Номер документа | Длина номера | Влияет на нумерацию и маски |
В диалоге Конфигуратор не даст ввести значение выше допустимого, так что предел вы увидите сразу. Если наименование нужно очень длинное, обычно проще добавить отдельный реквизит Полное наименование неограниченной длины.
Для справочников с длинными названиями (товары, договоры, контрагенты) в типовых конфигурациях уже есть реквизит полного наименования. Проверьте, не лежит ли нужный текст именно там.
Пример из практики: в справочнике договоров наименование стоит на 100 символах, а юристы вписывают туда предмет договора целиком. Увеличивать наименование до предела не нужно. Заведите реквизит Предмет договора неограниченной длины и оставьте наименование коротким: так списки остаются читаемыми, а текст не теряется.
Что произойдёт при обновлении
Платформа сама перестроит таблицу в базе. В файловой базе это занимает секунды, в серверной на большой таблице — дольше, потому что идёт реструктуризация. Данные сохраняются. Формы подхватывают новую длину автоматически: поле ввода берёт ограничение из типа реквизита.
Если на форме поле выглядит узким, а текст длинный, откройте свойства элемента формы и включите Многострочный режим. Длина строки при этом не меняется — меняется только отображение.
Неограниченная длина: когда она нужна и чем грозит
Тип «строка неограниченной длины» подходит для комментариев, описаний, технических заданий, текстов писем, ответов внешних сервисов. Ограничений на размер значения у вас фактически нет.
У неё есть цена, и её лучше знать заранее.
- 🔸 В серверных СУБД такое поле хранится иначе, чем обычная строка, и обращение к нему тяжелее.
- 🔸 В запросах с неограниченной строкой нельзя сравнивать, группировать и сортировать так же свободно, как с обычной.
- 🔸 Индекс по такому реквизиту не построить.
- 🔸 Отбор по нему в динамических списках работает хуже или недоступен.
Поэтому правило такое: если значение по смыслу короткое (артикул, номер паспорта, код региона), давайте ему конкретную длину с запасом. Неограниченную оставляйте под свободный текст.
Вторая крайность тоже вредна: строка в 1000 символов «на всякий случай» в каждом реквизите раздувает таблицы и замедляет выборки по сравнению с 50.
Расширения: как добавить поле, не трогая типовую конфигурацию
Типовая конфигурация стоит на поддержке. Изменить в ней тип реквизита можно только после снятия с поддержки, а после этого каждое обновление релиза придётся сливать вручную. Для коротких правок это плохая сделка.
Расширение конфигурации (появились в платформе 8.3.6) — аккуратный выход, но с оговоркой.
Расширение не умеет менять тип уже существующего реквизита типовой конфигурации. Оно умеет добавить в заимствованный объект новый реквизит. Поэтому схема такая:
- Создайте расширение:
Конфигурация → Расширения конфигурации → Добавить. - Заимствуйте нужный объект (справочник, документ) в расширение.
- Добавьте в него новый реквизит типа
Строка, длина0. - Выведите реквизит на форму: форму тоже нужно заимствовать.
- Загрузите расширение в базу и обновите конфигурацию БД.
В итоге у пользователя рядом со старым коротким полем появляется новое длинное. Если нужно, старое скрывают с формы, а данные при желании переносят обработкой.
Если же нужно именно изменить существующий реквизит (например, потому что его читает типовой отчёт), остаётся снятие с поддержки либо договорённость с разработчиком конфигурации. Прикинуть заранее стоит, готовы ли вы потом объединять изменения при каждом обновлении.
Длинные строки в запросах и коде
После того как поле стало длиннее, всплывают две проблемы: запросы и программные константы.
Запросы
Если реквизит неограниченной длины, прямое сравнение или группировка по нему в запросе может дать ошибку. Лечится приведением к строке ограниченной длины:
ВЫБРАТЬ
Док.Ссылка КАК Ссылка,
ВЫРАЗИТЬ(Док.Комментарий КАК СТРОКА(200)) КАК КомментарийКратко
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
Функция ПОДСТРОКА(Док.Комментарий, 1, 200) решает ту же задачу и сразу обрезает значение. Если вам нужен весь текст, не группируйте по нему: достаньте его отдельным запросом или обращением к реквизиту ссылки.
При приведении ВЫРАЗИТЬ ... КАК СТРОКА(200) всё, что длиннее, будет отрезано. Для отбора по началу текста это нормально, для вывода пользователю — нет.
Программное создание описания типа
Когда реквизит создаётся из кода (динамический список, табличный документ, параметры обработки), длину задают через квалификатор:
Квалификатор = Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная);
Описание = Новый ОписаниеТипов("Строка", , Квалификатор);
Ноль в первом параметре снова означает неограниченную длину. Любое другое число — ограничение.
Срез значения при записи
Если часть данных приходит извне (из файла, обмена, веб-сервиса), а реквизит ограничен, длинное значение обрежется при записи объекта. Проверьте длину заранее:
Если СтрДлина(Текст) > 150 Тогда
Сообщить("Текст длиннее допустимого, будет усечён: " + СтрДлина(Текст));
КонецЕсли;
Лучше, чем молча потерять хвост описания.
Хранение больших текстов: строка, текст или файл
Если вы увеличиваете поле ради очень больших объёмов (договор целиком, выгрузка, лог), строка неограниченной длины — не всегда лучший вариант. Сравните.
| Способ | Когда подходит | Минусы |
|---|---|---|
| Строка неограниченной длины | Комментарии, описания, тексты до нескольких страниц | Нет индекса, ограничения в запросах |
| Хранилище значения | Двоичные данные, картинки, сериализованные объекты | Не читается запросом как текст, нужен код |
| Присоединённый файл | Документы, сканы, большие выгрузки | Отдельный механизм, хранится вне реквизитов |
Простой ориентир: текст, который человек читает и правит в карточке, — строка неограниченной длины. Всё, что целиком не нужно в отборах и отчётах, — файл или хранилище значения.
Ещё одна деталь: чем больше таких полей в справочнике, тем тяжелее его открывать списком. В списках лучше показывать короткий реквизит, а длинный держать только в карточке.
Что ломается после увеличения длины
Расширили поле, обновили базу — и что-то стало работать иначе. Чаще всего это такие случаи.
- Печатные формы. Макет рассчитан на короткий текст в ячейке. Длинное значение вылезает за границы или обрезается. Включите перенос по словам в ячейке макета и проверьте высоту строки.
- Выгрузка и обмен. Сторонняя система или формат (например, регламентированный отчёт) не принимает значение длиннее своего лимита. Увеличенное поле в вашей базе не расширяет чужое.
- Отчёты на СКД. Колонка с неограниченной строкой может не сортироваться и не участвовать в группировке. Выводите в отчёт короткий реквизит.
- Внешние обработки и расширения. Они используют старую длину в собственных описаниях типов. После правки конфигурации пересоберите их.
- Тестовая база не совпадает с рабочей. Измените структуру там и проверьте: данные, формы, отчёты.
Перед правкой типовой конфигурации выгрузите её структуру или хотя бы запишите, что и где меняли. Через год вы не вспомните, почему поле стало неограниченным.
Если не помогло
Поле всё равно не принимает длинный текст. Проверьте по порядку:
- 🔍 вы обновили конфигурацию БД, а не только сохранили конфигурацию;
- 🔍 пользователь запускает ту же базу, а не копию со старой структурой;
- 🔍 в форме нет собственного ограничения: у элемента может стоять
Максимальная длина, которая меньше длины реквизита; - 🔍 у поля формы нет реквизита-копии (форма обработки со своим реквизитом) с короткой строкой.
Последний пункт встречается чаще, чем кажется: правите реквизит объекта, а форма работает с собственным реквизитом формы.
ВЫРАЗИТЬ ... КАК СТРОКА(N) или используйте ПОДСТРОКА.Частые вопросы
Можно ли увеличить длину наименования в типовом справочнике?
Длина наименования самого справочника, но только в конфигурации, снятой с поддержки, и в пределах, которые допускает платформа. В расширении это свойство не изменить, поэтому там заводят отдельный реквизит.