Разработка и Конфигурация · 10 мин
Как изменить количество символов в строке 1С
Как изменить длину строки в 1С: настройка длины реквизита в конфигураторе, обрезка и дополнение строк кодом, риски сокращения длины и проверка результата.
Под «изменением количества символов в строке» в 1С обычно понимают две разные задачи. Первая — изменить длину строкового реквизита в метаданных конфигурации, например увеличить поле «Наименование» справочника с 50 до 150 символов. Вторая — программно обрезать, дополнить или ограничить строку в коде на встроенном языке. Подходы принципиально различаются: первая задача решается в конфигураторе и затрагивает структуру базы данных, вторая — функциями работы со строками и ничего в структуре не меняет.
Важно понимать последствия каждого пути. Увеличение длины реквизита — относительно безопасная операция: существующие данные не пострадают, изменится только ограничение на ввод. Сокращение длины — рискованная операция: при обновлении конфигурации базы данных значения, превышающие новый лимит, могут быть обрезаны, и восстановить утерянные окончания строк будет невозможно без резервной копии.
Ниже разобраны оба сценария: работа с длиной реквизита в конфигураторе, программная обработка строк, типовые ограничения платформы, проверка результата и типичные ошибки.
Определите, какая именно задача перед вами
Прежде чем что-то менять, ответьте на вопрос: где должно измениться «количество символов»? Если пользователи не могут ввести длинное наименование, адрес или комментарий, потому что поле обрезает текст — это задача о длине реквизита в метаданных. Если у вас уже есть строка в переменной и её нужно укоротить, выровнять или дополнить до нужного размера — это задача встроенного языка.
Признак первой задачи: при вводе текста в форме 1С лишние символы просто не вводятся или отсекаются при записи, при этом в конфигураторе у реквизита задана конкретная длина. Признак второй: вы пишете обработку, отчёт или дорабатываете модуль, и строка в переменной не соответствует нужному формату — например, номер документа нужно дополнить нулями слева до 11 символов.
Как выбрать действие
Изменение длины строкового реквизита в конфигураторе
Основной сценарий — изменить длину реквизита справочника, документа или другого объекта. Откройте конфигуратор, найдите нужный объект в дереве конфигурации и перейдите к реквизиту. Для штатных полей вроде «Наименование» длина задаётся в свойствах самого объекта на закладке «Данные» (поле «Длина наименования», «Длина кода» для строкового кода). Для добавленных реквизитов откройте палитру свойств реквизита и найдите «Длина» в составе типа «Строка».
Если у реквизита составной тип, длина строки задаётся через «Квалификаторы строки»: там же указывается, фиксированная строка или переменная, и допускается ли неограниченная длина. Установка флажка «Неограниченная длина» снимает лимит на ввод, но у таких строк есть особенности: в запросах и индексировании они ведут себя иначе, а в некоторых ситуациях платформа хранит их отдельно.
После изменения сохраните конфигурацию (Ctrl+S) и выполните обновление конфигурации базы данных (клавиша F7 или меню «Конфигурация → Обновить конфигурацию базы данных»). Платформа покажет окно реструктуризации со списком затрагиваемых таблиц — примите изменения. До завершения реструктуризации пользователи не должны работать в базе.
- 1Сделайте резервную копию базы (выгрузка в dt или средствами СУБД)
- 2Откройте конфигуратор и найдите нужный реквизит в дереве конфигурации
- 3В палитре свойств измените значение «Длина» или настройте «Квалификаторы строки»
- 4Сохраните конфигурацию и запустите обновление конфигурации базы данных (F7)
- 5Проверьте окно реструктуризации и подтвердите изменения
- 6Проверьте в режиме предприятия, что ввод и запись работают с новой длиной
Увеличение и уменьшение длины: в чём разница рисков
Увеличение длины — безопасная операция для данных. Существующие значения остаются нетронутыми, меняется только верхняя граница ввода. Единственное, что стоит учитывать: при очень большой базе и большом количестве записей реструктуризация таблицы может занять заметное время, поэтому выполняйте её в нерабочие часы.
Уменьшение длины — другое дело. Если в базе уже есть значения длиннее нового лимита, при реструктуризации они будут усечены, и «хвосты» строк потеряются безвозвратно. Перед сокращением длины выполните запрос или отчёт, который найдёт все значения, превышающие новый лимит, и решите судьбу каждого: перенести часть текста в другое поле, сократить вручную или отказаться от изменения.
Программная обрезка и дополнение строк в коде
Для работы со строками в переменных встроенный язык предоставляет стандартные функции. Узнать текущую длину строки позволяет СтрДлина(Строка). Взять начало строки — Лев(Строка, N), конец — Прав(Строка, N), произвольный фрагмент — Сред(Строка, Начало, Длина).
Типовая задача обрезки с многоточием выглядит так: проверяем длину, и если она больше лимита, берём левую часть и добавляем многоточие. Дополнение строки до фиксированной длины (например, номера нулями слева) делается циклом или через функцию Формат() с форматной строкой вида "ЧЦ=11; ЧВН=" для чисел.
// Обрезка строки до 50 символов с многоточием
Если СтрДлина(Наименование) > 50 Тогда
Наименование = Лев(Наименование, 47) + "...";
КонецЕсли;
// Дополнение номера нулями слева до 11 символов
Пока СтрДлина(НомерСтрокой) < 11 Цикл
НомерСтрокой = "0" + НомерСтрокой;
КонецЦикла;
Учтите, что Лев() со значением больше длины строки просто вернёт всю строку без ошибки — отдельная проверка через СтрДлина() нужна, когда важно знать, произошла ли обрезка. Также помните, что переносы строк и непечатные символы тоже считаются символами и входят в длину.
Ограничения платформы и типовых конфигураций
У строковых реквизитов есть платформенные рамки. Длина строки фиксированной или переменной длины задаётся в разумных пределах, а неограниченные строки не всегда можно использовать везде: например, в некоторых случаях они недоступны для индексирования и сравнения в запросах без приведения типов. Код справочника со строковым типом тоже имеет свою длину, и она влияет на нумерацию и сортировку.
Отдельная ситуация — типовые конфигурации на поддержке. Прямое изменение длины штатного реквизита потребует снятия объекта с поддержки, что усложнит будущие обновления. Часто практичнее альтернативы: использовать дополнительные реквизиты и сведения (механизм БСП), добавить собственный реквизит через расширение конфигурации или хранить длинный текст в штатном поле «Комментарий» либо в присоединённых файлах.
Варианты решения для типовой конфигурации
Прямое решение, но требует снятия объекта с поддержки и усложняет обновления
Позволяет добавить свой реквизит без изменения типового; изменить длину типового реквизита расширением обычно нельзя
Не требуют доработки вообще, настраиваются в режиме предприятия, но хранятся отдельно и медленнее в запросах
Снимает лимит на ввод, но имеет ограничения в запросах и индексировании
Проверка результата и типичные ошибки
После изменения длины реквизита проверьте три вещи: ввод нового значения максимальной длины, корректность отображения старых данных и работу отчётов и обменов, где это поле участвует. Если реквизит передаётся в другие системы (обмен с сайтом, ЭДО, выгрузка в Excel), убедитесь, что принимающая сторона готова к новой длине — иначе обрезка случится уже там.
Частая ошибка — изменить длину только в одном месте, когда похожие поля есть в нескольких объектах: например, наименование контрагента в справочнике увеличили, а в документе или регистре, куда оно копируется строкой, осталась старая длина, и данные обрезаются при записи. Вторая типичная ошибка — забыть про печатные формы: длинное наименование может не помещаться в отведённую область макета.
Как проверить результат
Все символы вводятся и сохраняются после записи
Ввод обрывается раньше лимита или значение обрезается при записи
Значения отображаются полностью, как до изменения
Окончания строк потеряны (признак того, что длину уменьшили без проверки)
Поле выводится и передаётся целиком
Текст обрезан в макете или в файле обмена
FAQ
Как сделать поле неограниченной длины?
В свойствах реквизита откройте квалификаторы строки и установите признак неограниченной длины (длина при этом обнуляется). Учтите, что такие строки имеют ограничения при использовании в запросах, сравнениях и индексировании, поэтому для полей, по которым ищут, лучше задавать достаточную конечную длину.
Что будет с данными, если уменьшить длину реквизита?
При обновлении конфигурации базы данных значения, превышающие новый лимит, будут обрезаны до новой длины. Потерянные символы не восстанавливаются, поэтому заранее найдите такие значения запросом с функцией длины строки и сделайте резервную копию.
Можно ли изменить длину наименования справочника без конфигуратора?
Нет, длина штатных полей «Код» и «Наименование» задаётся только в метаданных через конфигуратор. Если доработка невозможна, используйте дополнительные реквизиты или поле «Комментарий», доступные в режиме предприятия.
Как в коде узнать, что строка не влезет в реквизит?
Получите метаданные реквизита и прочитайте длину из квалификаторов строки, затем сравните с СтрДлина() вашего значения. При превышении обрежьте строку функцией Лев() или сообщите пользователю о проблеме до записи объекта.
Почему после увеличения длины данные всё равно обрезаются?
Чаще всего обрезка происходит в другом месте: реквизит с аналогичным назначением в документе, регистре или плане обмена сохранил старую длину, либо обрезку выполняет принимающая система при интеграции. Проверьте весь путь данных от ввода до хранения и передачи.
Что важно запомнить
Длина реквизита меняется в конфигураторе с последующим обновлением конфигурации базы данных; увеличение длины безопасно, уменьшение обрезает данные безвозвратно. Для строк в коде используются СтрДлина(), Лев(), Прав() и Сред(). Перед изменениями делайте копию и проверяйте связанные объекты, печатные формы и обмены.