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

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

Как в 1С заменить текст: практическое руководство

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

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

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

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

Где именно нужна замена: определяем сценарий

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

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

Текст в модулеКод конфигурации

Заменять через поиск конфигуратора с проверкой синтаксиса

Текст в реквизите объектаДанные базы

Заменять программно через СтрЗаменить или обработку

Текст в печатной формеМакет или шаблон

Искать глобальным поиском по конфигурации

Поиск и замена текста в конфигураторе

В конфигураторе доступны два режима: поиск в текущем модуле и глобальный поиск по всей конфигурации. Для замены внутри одного модуля откройте его и нажмите Ctrl+H — появится диалог «Замена». Укажите искомый текст, текст замены и направление поиска. Кнопка «Заменить всё» обрабатывает весь модуль сразу.

Для замены по всей конфигурации используйте меню «Правка → Глобальная замена» (в некоторых версиях платформы — через «Глобальный поиск» с последующей заменой). В диалоге можно ограничить область: искать во всех модулях, только в выбранных объектах, включать или не включать строки в формах и макетах. Результат выводится списком, и замену можно выполнять выборочно, что безопаснее полной автоматической замены.

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

Безопасная замена в конфигураторе
  1. 1
    Откройте глобальный поиск (Ctrl+Shift+F) и найдите все вхождения текста
  2. 2
    Просмотрите список результатов и исключите лишние места
  3. 3
    Выполните замену с включённым флажком «Слово целиком», если заменяете идентификатор
  4. 4
    После замены запустите проверку конфигурации (Конфигурация → Проверка конфигурации)
  5. 5
    Обновите конфигурацию базы данных и протестируйте затронутые функции

Функция СтрЗаменить: замена текста программно

Во встроенном языке 1С замена подстроки выполняется функцией СтрЗаменить(). Она принимает три параметра: исходную строку, подстроку поиска и подстроку замены — и возвращает новую строку, в которой все вхождения заменены. Исходная строка при этом не изменяется: результат нужно присвоить переменной.

ИсходнаяСтрока = "Счёт № 12 от 01.03 (черновик)";

Результат = СтрЗаменить(ИсходнаяСтрока, "(черновик)", "");

// Результат: "Счёт № 12 от 01.03 "

Функция заменяет все вхождения подстроки, а не только первое. Если нужно заменить только одно вхождение, комбинируйте СтрЗаменить с функциями СтрНайти(), Лев(), Сред() и СтрДлина(): найдите позицию подстроки и соберите новую строку из частей. Для сложных шаблонов (например, удаления всех цифр) в тонком клиенте доступны регулярные выражения через COM-объект VBScript.RegExp в Windows, однако в веб-клиенте и на Linux этот способ недоступен — там логику реализуют перебором символов.

Учтите, что СтрЗаменить чувствительна к регистру: «Счёт» и «счёт» — разные подстроки. Если регистр неизвестен, приведите копию строки к одному регистру через НРег() или ВРег() для поиска позиции, а замену выполняйте по найденным координатам в исходной строке.

Массовая замена текста в данных базы

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

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Ссылка, Наименование

|ИЗ Справочник.Номенклатура

|ГДЕ Наименование ПОДОБНО ""%ООО%""";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Объект = Выборка.Ссылка.ПолучитьОбъект();

Объект.Наименование = СтрЗаменить(Объект.Наименование, "ООО", "ООО ");

Объект.Записать();

КонецЦикла;

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

Замена текста в запросах и через ПОДОБНО

В языке запросов 1С нет функции замены подстроки напрямую. Можно фильтровать записи по шаблону с помощью оператора ПОДОБНО (например, найти все наименования, содержащие нужный фрагмент), но саму замену придётся выполнять уже в коде после выборки — через СтрЗаменить() — и записывать объект обратно.

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

Сравнение вариантов

Поиск в конфигураторе

Подходит для кода и текстов конфигурации; не работает с данными базы

СтрЗаменить в коде

Универсально для строковых значений; требует написания кода и записи объектов

Групповое изменение реквизитов

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

Обработка на консоли кода

Быстрый разовый вариант для администратора; требует аккуратности и резервной копии

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

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

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

Типичные ошибки
01
Замена без флажка «Слово целиком» — повреждаются похожие идентификаторы и код перестаёт компилироваться
02
Вызов СтрЗаменить без присваивания результата — изменения теряются
03
Массовая замена в данных без резервной копии — невозможно откатить ошибку
04
Замена без учёта регистра — часть вхождений пропускается или заменяется лишнее
05
Запись объектов в цикле без обработки исключений — обработка прерывается на первом заблокированном объекте, и часть данных остаётся необработанной
Контрольные точки

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

Код после замены
Норма

Проверка конфигурации проходит без ошибок

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

Синтаксические ошибки в модулях, где выполнялась замена

Данные после обработки
Норма

Текст изменён как ожидалось, лишних пробелов и обрезков нет

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

Двойные пробелы, потерянные символы, не все объекты обработаны

Количество обработанных объектов
Норма

Совпадает с числом найденных запросом записей

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

Обработано меньше — были ошибки записи или блокировки

Часто задаваемые вопросы

Заменяет ли СтрЗаменить все вхождения или только первое?

Функция заменяет все вхождения подстроки в строке. Если нужно заменить только первое вхождение, найдите его позицию через СтрНайти() и соберите строку из частей: Лев() + подстрока замены + часть после найденного фрагмента.

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

Частично. Штатная обработка «Групповое изменение реквизитов» в типовых конфигурациях умеет устанавливать реквизиту одно и то же значение у множества объектов, но заменить часть строки без кода она не может — для этого в ней предусмотрен режим произвольного алгоритма, который уже требует написания небольшого фрагмента кода.

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

Чаще всего причина — замена без флажка «Слово целиком»: фрагмент совпал с частью других идентификаторов. Откройте проверку конфигурации, посмотрите список ошибок и отмените замену (Ctrl+Z в модуле или восстановление из копии), затем повторите с корректными параметрами поиска.

Как заменить текст с учётом переносов строк?

Перенос строки в 1С задаётся через Символы.ПС (и Символы.ВК для возврата каретки). Например, для замены перевода строки на пробел: СтрЗаменить(Текст, Символы.ПС, " "). В конфигураторе многострочный поиск поддерживается ограниченно, поэтому в коде такие замены надёжнее делать программно.

Работает ли СтрЗаменить в веб-клиенте и на мобильной платформе?

Да, СтрЗаменить — базовая функция встроенного языка и доступна везде: на сервере, в тонком, толстом и веб-клиенте. Недоступны в веб-клиенте лишь внешние средства вроде COM-объектов для регулярных выражений.

Как найти, где в конфигурации используется конкретная строка?

Используйте глобальный поиск (Ctrl+Shift+F) с областью «Вся конфигурация». Он находит текст в модулях, макетах, правах и других местах. Для поиска только в строковых литералах уточните параметры поиска в диалоге.

Итог

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

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