К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как изменить количество символов в строке 1С

Как изменить длину строки в 1С: настройка длины реквизита в конфигураторе, обрезка и дополнение строк кодом, риски сокращения длины и проверка результата.

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

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

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

Определите, какая именно задача перед вами

Прежде чем что-то менять, ответьте на вопрос: где должно измениться «количество символов»? Если пользователи не могут ввести длинное наименование, адрес или комментарий, потому что поле обрезает текст — это задача о длине реквизита в метаданных. Если у вас уже есть строка в переменной и её нужно укоротить, выровнять или дополнить до нужного размера — это задача встроенного языка.

Признак первой задачи: при вводе текста в форме 1С лишние символы просто не вводятся или отсекаются при записи, при этом в конфигураторе у реквизита задана конкретная длина. Признак второй: вы пишете обработку, отчёт или дорабатываете модуль, и строка в переменной не соответствует нужному формату — например, номер документа нужно дополнить нулями слева до 11 символов.

Маршрут решения

Как выбрать действие

Поле в форме не даёт ввести больше символов, чем заданоМеняйте длину реквизита в конфигураторе и обновляйте конфигурацию базы данных
Нужно обрезать или дополнить строку в коде обработки или модуляИспользуйте функции Лев(), Прав(), Сред(), дополнение через цикл или форматную строку
Нужно изменить длину в типовой конфигурации на поддержкеСнимайте объект с поддержки минимально необходимым образом или решайте задачу расширением, где это возможно

Изменение длины строкового реквизита в конфигураторе

Основной сценарий — изменить длину реквизита справочника, документа или другого объекта. Откройте конфигуратор, найдите нужный объект в дереве конфигурации и перейдите к реквизиту. Для штатных полей вроде «Наименование» длина задаётся в свойствах самого объекта на закладке «Данные» (поле «Длина наименования», «Длина кода» для строкового кода). Для добавленных реквизитов откройте палитру свойств реквизита и найдите «Длина» в составе типа «Строка».

Если у реквизита составной тип, длина строки задаётся через «Квалификаторы строки»: там же указывается, фиксированная строка или переменная, и допускается ли неограниченная длина. Установка флажка «Неограниченная длина» снимает лимит на ввод, но у таких строк есть особенности: в запросах и индексировании они ведут себя иначе, а в некоторых ситуациях платформа хранит их отдельно.

После изменения сохраните конфигурацию (Ctrl+S) и выполните обновление конфигурации базы данных (клавиша F7 или меню «Конфигурация → Обновить конфигурацию базы данных»). Платформа покажет окно реструктуризации со списком затрагиваемых таблиц — примите изменения. До завершения реструктуризации пользователи не должны работать в базе.

Порядок изменения длины реквизита
  1. 1
    Сделайте резервную копию базы (выгрузка в dt или средствами СУБД)
  2. 2
    Откройте конфигуратор и найдите нужный реквизит в дереве конфигурации
  3. 3
    В палитре свойств измените значение «Длина» или настройте «Квалификаторы строки»
  4. 4
    Сохраните конфигурацию и запустите обновление конфигурации базы данных (F7)
  5. 5
    Проверьте окно реструктуризации и подтвердите изменения
  6. 6
    Проверьте в режиме предприятия, что ввод и запись работают с новой длиной

Увеличение и уменьшение длины: в чём разница рисков

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

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

Программная обрезка и дополнение строк в коде

Для работы со строками в переменных встроенный язык предоставляет стандартные функции. Узнать текущую длину строки позволяет СтрДлина(Строка). Взять начало строки — Лев(Строка, N), конец — Прав(Строка, N), произвольный фрагмент — Сред(Строка, Начало, Длина).

Типовая задача обрезки с многоточием выглядит так: проверяем длину, и если она больше лимита, берём левую часть и добавляем многоточие. Дополнение строки до фиксированной длины (например, номера нулями слева) делается циклом или через функцию Формат() с форматной строкой вида "ЧЦ=11; ЧВН=" для чисел.

// Обрезка строки до 50 символов с многоточием

Если СтрДлина(Наименование) > 50 Тогда

Наименование = Лев(Наименование, 47) + "...";

КонецЕсли;

// Дополнение номера нулями слева до 11 символов

Пока СтрДлина(НомерСтрокой) < 11 Цикл

НомерСтрокой = "0" + НомерСтрокой;

КонецЦикла;

Учтите, что Лев() со значением больше длины строки просто вернёт всю строку без ошибки — отдельная проверка через СтрДлина() нужна, когда важно знать, произошла ли обрезка. Также помните, что переносы строк и непечатные символы тоже считаются символами и входят в длину.

Ограничения платформы и типовых конфигураций

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

Отдельная ситуация — типовые конфигурации на поддержке. Прямое изменение длины штатного реквизита потребует снятия объекта с поддержки, что усложнит будущие обновления. Часто практичнее альтернативы: использовать дополнительные реквизиты и сведения (механизм БСП), добавить собственный реквизит через расширение конфигурации или хранить длинный текст в штатном поле «Комментарий» либо в присоединённых файлах.

Варианты решения для типовой конфигурации

Изменение длины штатного реквизита

Прямое решение, но требует снятия объекта с поддержки и усложняет обновления

Расширение конфигурации

Позволяет добавить свой реквизит без изменения типового; изменить длину типового реквизита расширением обычно нельзя

Дополнительные реквизиты и сведения

Не требуют доработки вообще, настраиваются в режиме предприятия, но хранятся отдельно и медленнее в запросах

Неограниченная строка в собственном реквизите

Снимает лимит на ввод, но имеет ограничения в запросах и индексировании

Проверка результата и типичные ошибки

После изменения длины реквизита проверьте три вещи: ввод нового значения максимальной длины, корректность отображения старых данных и работу отчётов и обменов, где это поле участвует. Если реквизит передаётся в другие системы (обмен с сайтом, ЭДО, выгрузка в Excel), убедитесь, что принимающая сторона готова к новой длине — иначе обрезка случится уже там.

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

Типичные ошибки
01
Уменьшение длины без проверки существующих данных — значения обрезаются при реструктуризации безвозвратно
02
Изменение длины только в одном объекте — в связанных объектах и регистрах строка продолжает обрезаться
03
Забытые обмены и интеграции — принимающая система отсекает лишние символы молча
04
Неограниченная строка там, где нужен поиск и индексация — проблемы с запросами и производительностью
05
Обновление конфигурации базы в рабочее время — блокировка пользователей на время реструктуризации
Контрольные точки

Как проверить результат

Ввод значения новой максимальной длины
Норма

Все символы вводятся и сохраняются после записи

Тревожный признак

Ввод обрывается раньше лимита или значение обрезается при записи

Старые данные после реструктуризации
Норма

Значения отображаются полностью, как до изменения

Тревожный признак

Окончания строк потеряны (признак того, что длину уменьшили без проверки)

Отчёты, печатные формы, обмены
Норма

Поле выводится и передаётся целиком

Тревожный признак

Текст обрезан в макете или в файле обмена

FAQ

Как сделать поле неограниченной длины?

В свойствах реквизита откройте квалификаторы строки и установите признак неограниченной длины (длина при этом обнуляется). Учтите, что такие строки имеют ограничения при использовании в запросах, сравнениях и индексировании, поэтому для полей, по которым ищут, лучше задавать достаточную конечную длину.

Что будет с данными, если уменьшить длину реквизита?

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

Можно ли изменить длину наименования справочника без конфигуратора?

Нет, длина штатных полей «Код» и «Наименование» задаётся только в метаданных через конфигуратор. Если доработка невозможна, используйте дополнительные реквизиты или поле «Комментарий», доступные в режиме предприятия.

Как в коде узнать, что строка не влезет в реквизит?

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

Почему после увеличения длины данные всё равно обрезаются?

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

Итог

Что важно запомнить

Длина реквизита меняется в конфигураторе с последующим обновлением конфигурации базы данных; увеличение длины безопасно, уменьшение обрезает данные безвозвратно. Для строк в коде используются СтрДлина(), Лев(), Прав() и Сред(). Перед изменениями делайте копию и проверяйте связанные объекты, печатные формы и обмены.