Разработка и Конфигурация · 10 мин
Как в 1С заменить текст: практическое руководство
Как заменить текст в 1С: функция СтрЗаменить, поиск и замена в конфигураторе, групповая обработка строк в данных. Примеры кода, ошибки и проверка результата.
Замена текста в 1С — задача, которая встречается в трёх разных ситуациях: при редактировании кода конфигурации, при программной обработке строк в данных и при массовом исправлении значений в справочниках или документах. В каждом случае применяются свои инструменты: встроенный поиск конфигуратора, функция СтрЗаменить() в языке 1С или обработки группового изменения реквизитов.
Выбор способа зависит от того, где находится текст. Если нужно переименовать переменную или процедуру во всех модулях — достаточно штатного поиска конфигуратора. Если требуется заменить подстроку в значении реквизита при выполнении программы — используется СтрЗаменить(). Если нужно исправить данные, уже записанные в базу (например, убрать лишние символы из наименований), потребуется обработка с обходом объектов.
Ошибки при замене текста опасны по-разному: в коде некорректная замена ломает работу конфигурации, а в данных — приводит к порче информации, которую сложно восстановить без резервной копии. Поэтому перед массовыми операциями всегда делается копия базы или выгрузка в файл.
Где именно нужна замена: определяем сценарий
Прежде чем выбирать инструмент, определите, с каким текстом вы работаете. Код конфигурации хранится в модулях объектов, общих модулях, модулях форм — он редактируется только через конфигуратор или EDT. Данные (наименования, комментарии, адреса) хранятся в базе и изменяются либо вручную в пользовательском режиме, либо программно.
Отдельный случай — текст в макетах, шаблонах печатных форм и сообщениях пользователю. Такие строки тоже находятся внутри конфигурации и ищутся через глобальный поиск, но менять их нужно внимательно: часть сообщений может быть задействована в проверках и обработчиках ошибок.
Заменять через поиск конфигуратора с проверкой синтаксиса
Заменять программно через СтрЗаменить или обработку
Искать глобальным поиском по конфигурации
Поиск и замена текста в конфигураторе
В конфигураторе доступны два режима: поиск в текущем модуле и глобальный поиск по всей конфигурации. Для замены внутри одного модуля откройте его и нажмите Ctrl+H — появится диалог «Замена». Укажите искомый текст, текст замены и направление поиска. Кнопка «Заменить всё» обрабатывает весь модуль сразу.
Для замены по всей конфигурации используйте меню «Правка → Глобальная замена» (в некоторых версиях платформы — через «Глобальный поиск» с последующей заменой). В диалоге можно ограничить область: искать во всех модулях, только в выбранных объектах, включать или не включать строки в формах и макетах. Результат выводится списком, и замену можно выполнять выборочно, что безопаснее полной автоматической замены.
Обратите внимание на флажки «Учитывать регистр» и «Слово целиком». Без «Слово целиком» замена короткого фрагмента, например «Сумма», может затронуть идентификаторы вроде «СуммаДокумента» или «СуммаНДС» — это частая причина синтаксических ошибок после замены. Всегда проверяйте список найденных вхождений перед нажатием «Заменить всё».
- 1Откройте глобальный поиск (Ctrl+Shift+F) и найдите все вхождения текста
- 2Просмотрите список результатов и исключите лишние места
- 3Выполните замену с включённым флажком «Слово целиком», если заменяете идентификатор
- 4После замены запустите проверку конфигурации (Конфигурация → Проверка конфигурации)
- 5Обновите конфигурацию базы данных и протестируйте затронутые функции
Функция СтрЗаменить: замена текста программно
Во встроенном языке 1С замена подстроки выполняется функцией СтрЗаменить(). Она принимает три параметра: исходную строку, подстроку поиска и подстроку замены — и возвращает новую строку, в которой все вхождения заменены. Исходная строка при этом не изменяется: результат нужно присвоить переменной.
ИсходнаяСтрока = "Счёт № 12 от 01.03 (черновик)";
Результат = СтрЗаменить(ИсходнаяСтрока, "(черновик)", "");
// Результат: "Счёт № 12 от 01.03 "
Функция заменяет все вхождения подстроки, а не только первое. Если нужно заменить только одно вхождение, комбинируйте СтрЗаменить с функциями СтрНайти(), Лев(), Сред() и СтрДлина(): найдите позицию подстроки и соберите новую строку из частей. Для сложных шаблонов (например, удаления всех цифр) в тонком клиенте доступны регулярные выражения через COM-объект VBScript.RegExp в Windows, однако в веб-клиенте и на Linux этот способ недоступен — там логику реализуют перебором символов.
Учтите, что СтрЗаменить чувствительна к регистру: «Счёт» и «счёт» — разные подстроки. Если регистр неизвестен, приведите копию строки к одному регистру через НРег() или ВРег() для поиска позиции, а замену выполняйте по найденным координатам в исходной строке.
Массовая замена текста в данных базы
Когда текст нужно исправить в уже записанных объектах — например, убрать лишний префикс из наименований номенклатуры или заменить устаревшее слово в комментариях документов — применяют обработку с обходом данных. Общая схема: запросом выбираются объекты, у каждого проверяется и изменяется реквизит, объект записывается.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка, Наименование
|ИЗ Справочник.Номенклатура
|ГДЕ Наименование ПОДОБНО ""%ООО%""";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Наименование = СтрЗаменить(Объект.Наименование, "ООО", "ООО ");
Объект.Записать();
КонецЦикла;
Во многих типовых конфигурациях есть штатная обработка «Групповое изменение реквизитов» (раздел «Администрирование»). Она позволяет изменить значение реквизита у отобранных объектов без программирования, но работает с установкой фиксированного значения, а не с заменой подстроки. Для замены части текста всё равно потребуется произвольный алгоритм — в этой обработке есть режим выполнения произвольного кода на сервере.
Замена текста в запросах и через ПОДОБНО
В языке запросов 1С нет функции замены подстроки напрямую. Можно фильтровать записи по шаблону с помощью оператора ПОДОБНО (например, найти все наименования, содержащие нужный фрагмент), но саму замену придётся выполнять уже в коде после выборки — через СтрЗаменить() — и записывать объект обратно.
Если замена нужна только для отображения (например, в отчёте), иногда проще обработать строку при выводе результата запроса, не трогая данные в базе. Это безопасный вариант, когда исходные значения должны остаться неизменными.
Сравнение вариантов
Подходит для кода и текстов конфигурации; не работает с данными базы
Универсально для строковых значений; требует написания кода и записи объектов
Подходит для установки одинакового значения без программирования; замена подстроки — только через произвольный алгоритм
Быстрый разовый вариант для администратора; требует аккуратности и резервной копии
Проверка результата и типичные ошибки
После замены в коде обязательно выполните проверку конфигурации с включённой проверкой логической целостности и поиском некорректных ссылок. Затем вручную пройдите сценарии, где использовался заменённый текст: откройте формы, запустите печатные формы, выполните типовые операции.
После замены в данных проверьте выборочно несколько объектов: корректно ли отображается новый текст, не появились ли двойные пробелы, обрезанные слова или потерянные символы. Если замена затрагивала поля, участвующие в обмене данными, убедитесь, что синхронизация с другими системами проходит без ошибок.
Как проверить результат
Проверка конфигурации проходит без ошибок
Синтаксические ошибки в модулях, где выполнялась замена
Текст изменён как ожидалось, лишних пробелов и обрезков нет
Двойные пробелы, потерянные символы, не все объекты обработаны
Совпадает с числом найденных запросом записей
Обработано меньше — были ошибки записи или блокировки
Часто задаваемые вопросы
Заменяет ли СтрЗаменить все вхождения или только первое?
Функция заменяет все вхождения подстроки в строке. Если нужно заменить только первое вхождение, найдите его позицию через СтрНайти() и соберите строку из частей: Лев() + подстрока замены + часть после найденного фрагмента.
Можно ли заменить текст в базе без программирования?
Частично. Штатная обработка «Групповое изменение реквизитов» в типовых конфигурациях умеет устанавливать реквизиту одно и то же значение у множества объектов, но заменить часть строки без кода она не может — для этого в ней предусмотрен режим произвольного алгоритма, который уже требует написания небольшого фрагмента кода.
Почему после замены в конфигураторе появились ошибки?
Чаще всего причина — замена без флажка «Слово целиком»: фрагмент совпал с частью других идентификаторов. Откройте проверку конфигурации, посмотрите список ошибок и отмените замену (Ctrl+Z в модуле или восстановление из копии), затем повторите с корректными параметрами поиска.
Как заменить текст с учётом переносов строк?
Перенос строки в 1С задаётся через Символы.ПС (и Символы.ВК для возврата каретки). Например, для замены перевода строки на пробел: СтрЗаменить(Текст, Символы.ПС, " "). В конфигураторе многострочный поиск поддерживается ограниченно, поэтому в коде такие замены надёжнее делать программно.
Работает ли СтрЗаменить в веб-клиенте и на мобильной платформе?
Да, СтрЗаменить — базовая функция встроенного языка и доступна везде: на сервере, в тонком, толстом и веб-клиенте. Недоступны в веб-клиенте лишь внешние средства вроде COM-объектов для регулярных выражений.
Как найти, где в конфигурации используется конкретная строка?
Используйте глобальный поиск (Ctrl+Shift+F) с областью «Вся конфигурация». Он находит текст в модулях, макетах, правах и других местах. Для поиска только в строковых литералах уточните параметры поиска в диалоге.
Что важно запомнить
Замена текста в 1С выполняется тремя путями: поиск и замена в конфигураторе для кода, функция СтрЗаменить для строк в программе, обработки — для массового исправления данных. Перед массовыми операциями делайте резервную копию, замену идентификаторов проводите с флажком «Слово целиком», а результат всегда проверяйте на небольшой выборке.