Разработка и Конфигурация · 9 мин
Как увеличить длину строки в 1С
Как увеличить длину строки в 1С: изменение реквизита в конфигураторе, неограниченная длина, ВЫРАЗИТЬ в запросах, риски потери данных и проверка результата.
Ограничение длины строки — одна из самых частых причин ошибок вида «значение обрезано» или жалоб пользователей на то, что наименование товара, комментарий или адрес «не помещается» в поле. В 1С длина строки задаётся в нескольких местах: в свойствах реквизита объекта конфигурации, в типах данных запроса, в СКД и в программном коде. Увеличить длину можно почти всегда, но способ зависит от того, где именно задано ограничение.
Главный сценарий — изменение свойства «Длина» у реквизита типа «Строка» в конфигураторе с последующим обновлением конфигурации базы данных. Однако есть нюансы: при уменьшении длины данные могут быть усечены, неограниченная строка не всегда подходит, а в запросах и отчётах длина задаётся отдельно через конструкцию ВЫРАЗИТЬ.
Ниже разобраны все рабочие способы: от типового изменения реквизита до обработки строк программно, с указанием рисков и способов проверки результата.
Где в 1С задаётся длина строки
Прежде чем что-то менять, нужно понять, какое именно ограничение мешает. В типовых ситуациях длина строки задана в одном из четырёх мест: в свойствах реквизита объекта (справочника, документа, регистра), в квалификаторах строки в запросе, в настройках поля СКД или в параметрах команды интерфейса. Ошибка «строка обрезана» при вводе в форму почти всегда означает ограничение реквизита, а усечение в отчёте — ограничение в запросе или СКД.
Определить источник помогает простая проверка: если данные обрезаются уже при сохранении объекта — проблема в реквизите; если в базе значение полное, а в отчёте усечено — проблема в запросе или схеме компоновки. От этого зависит, какой из разделов ниже применять.
Откройте свойства реквизита в конфигураторе и проверьте «Длина»
Проверьте ВЫРАЗИТЬ и настройки полей схемы компоновки
Ищите Лев(), Сред() или фиксированные форматы в модуле обмена
Увеличение длины строки реквизита в конфигураторе
Основной способ — изменение свойства «Длина» у реквизита типа «Строка». Порядок действий одинаков для справочников, документов, регистров сведений и других объектов. Работа выполняется в конфигураторе и требует прав на изменение конфигурации, а также монопольного доступа при обновлении (в клиент-серверном режиме возможно динамическое обновление, но для изменения структуры таблиц оно не всегда применимо).
Откройте конфигуратор, в дереве конфигурации найдите нужный объект, раскройте ветку «Реквизиты» (или «Измерения», «Ресурсы» для регистров), дважды щёлкните по реквизиту. В палитре свойств найдите поле «Длина» и укажите новое значение, например 150 вместо 50. Сохраните конфигурацию (Ctrl+S) и выполните обновление конфигурации базы данных через меню «Конфигурация — Обновить конфигурацию базы данных».
- 1Сделайте резервную копию базы перед изменением структуры
- 2Откройте конфигуратор и найдите объект с нужным реквизитом
- 3В палитре свойств реквизита увеличьте значение «Длина»
- 4Сохраните конфигурацию и обновите конфигурацию базы данных
- 5Проверьте в режиме Предприятия, что длинное значение сохраняется полностью
Если реквизит входит в типовую конфигурацию на поддержке, изменение потребует снятия объекта с поддержки или будет потеряно при обновлении. В таких случаях оцените альтернативу: добавить собственный дополнительный реквизит через механизм «Дополнительные реквизиты и сведения» — там длина строки обычно больше, а изменения не затрагивают типовую структуру.
Неограниченная длина: когда ставить и когда нет
В палитре свойств реквизита есть флажок «Неограниченная длина». При его установке строка хранится без фиксированного ограничения (фактически как текстовое поле большого размера), а свойство «Длина» становится недоступным. Это удобно для комментариев, описаний, XML-пакетов и других потенциально длинных текстов.
Однако у неограниченных строк есть ограничения. Их нельзя использовать в некоторых контекстах: например, такой реквизит не может быть измерением регистра, не индексируется обычным образом и может замедлять запросы при соединениях и группировках. Для наименований, кодов и других коротких значимых полей лучше задавать разумную фиксированную длину — она работает быстрее и позволяет платформе строить индексы.
Увеличение длины строки в запросах через ВЫРАЗИТЬ
Когда строка усекается в отчёте или результате запроса, причина обычно в том, что платформа вычисляет длину итогового поля по выражению. Например, при объединении (ОБЪЕДИНИТЬ) двух полей разной длины или при использовании строкового литерала тип результата может оказаться короче данных. В этом случае длину задают явно через конструкцию ВЫРАЗИТЬ.
Синтаксис: ВЫРАЗИТЬ(Поле КАК Строка(200)). Такое выражение приводит значение к строке заданной длины, и итоговое поле не будет усечено до меньшего размера. Аналогично в СКД: в наборе данных на вкладке «Поля» или в выражении вычисляемого поля укажите приведение к нужной длине, либо задайте тип поля в настройках схемы.
ВЫБРАТЬ
ВЫРАЗИТЬ(Товары.Наименование КАК Строка(150)) КАК Наименование
ИЗ
Справочник.Товары КАК ТоварыУчтите, что ВЫРАЗИТЬ не увеличивает фактические данные — если в базе значение уже обрезано реквизитом, запрос вернёт только то, что хранится. Сначала приведите в порядок сам реквизит, затем — выражения в запросах.
Программная работа со строками и типичные ограничения
В коде на встроенном языке строки сами по себе не имеют ограничения длины — переменная может содержать текст практически любого размера. Ограничения возникают только при записи в реквизиты с фиксированной длиной: лишние символы молча отсекаются. Поэтому при программном формировании значений стоит контролировать длину функцией СтрДлина() до присвоения.
Если нужно намеренно уместить значение в существующее поле, используйте Лев(Значение, N), но осознанно: обрезанные наименования могут нарушить обмены, печатные формы и поиск дублей. Более безопасный подход — расширить реквизит, а не подгонять данные под старое ограничение.
Риски и проверка результата
Увеличение длины — безопасная операция для существующих данных: старые значения не пострадают, изменится только структура таблицы. Опасно обратное действие — уменьшение длины: при реструктуризации платформа усечёт значения, и восстановить их можно будет только из резервной копии. Поэтому перед любыми изменениями структуры делайте выгрузку базы или бэкап средствами СУБД.
После обновления проверьте результат в режиме Предприятия: введите в поле значение заведомо длиннее старого ограничения, сохраните объект, закройте и откройте заново. Если значение сохранилось полностью — изменение применено. Дополнительно проверьте отчёты и обмены, где это поле используется.
Как проверить результат
Значение сохраняется целиком после перезаписи объекта
Строка обрезается до старой длины — обновление конфигурации БД не выполнено
Полное значение выводится без усечения
В отчёте обрезано — нужно поправить ВЫРАЗИТЬ или поле СКД
Длинные значения передаются полностью
В приёмнике усечение — там тоже нужно увеличить длину реквизита
FAQ
Можно ли увеличить длину строки без конфигуратора?
Для типовых реквизитов — нет, изменение длины возможно только в конфигураторе. Но во многих типовых конфигурациях есть механизм «Дополнительные реквизиты», который администратор может настроить в режиме Предприятия: там доступны строковые поля с достаточной длиной без доработки конфигурации.
Что произойдёт с данными при увеличении длины строки?
Ничего: существующие значения сохранятся полностью, изменится только максимально допустимый размер. Риск потери данных существует только при уменьшении длины — тогда значения усекаются при реструктуризации.
Почему после увеличения длины в конфигураторе поле всё равно обрезает?
Чаще всего не выполнено обновление конфигурации базы данных (конфигурация БД осталась старой) либо ограничение задано в другом месте — в запросе отчёта, в СКД или в коде обмена. Проверьте, что конфигурация БД обновлена, и пройдите цепочку от ввода до отображения.
Сколько символов можно задать в свойстве «Длина»?
Платформа позволяет задавать достаточно большие значения фиксированной длины, но разумный ориентир — реальные потребности: для наименований обычно хватает 100–150 символов, для адресов — 250–500. Если нужен произвольный текст, лучше использовать неограниченную длину, помня о её ограничениях для индексов и измерений.
Что делать, если реквизит типовой и конфигурация на поддержке?
Варианты: включить возможность изменения для конкретного объекта (изменение сохранится, но потребует контроля при обновлениях), использовать дополнительные реквизиты и сведения либо расширение конфигурации. Расширение — предпочтительный способ: оно не затрагивает типовую конфигурацию и упрощает последующие обновления.
Что важно запомнить
Длина строки увеличивается в свойствах реквизита в конфигураторе с последующим обновлением конфигурации базы данных; в запросах и СКД — через ВЫРАЗИТЬ(Поле КАК Строка(N)). Увеличение безопасно для данных, уменьшение — нет. Неограниченную длину применяйте только для описательных текстов, не участвующих в индексах и измерениях, и всегда делайте резервную копию перед изменением структуры.