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

Программист 1С v8.3 (Обычные формы) Налоговый учет IT и автоматизация бизнеса
← На главную

При обновлении старых конфигураций или доработке регламентированной отчетности программисты 1С часто сталкиваются с необходимостью массовой замены одной строки кода на целый блок текста. Стандартный механизм поиска и замены в Конфигураторе (клавиши Ctrl + H) при попытке вставить символ переноса строки часто ведет себя непредсказуемо: вместо реального разрыва строки он вставляет спецсимвол «квадратик» или просто игнорирует перенос, сваливая весь текст в одну длинную нечитаемую строку. Рассмотрим подробнее, какими методами можно решить эту задачу, избегая ручной правки в сотнях мест.

Метод 1. Использование регулярных выражений в платформе 8.3

Если вы работаете в современных версиях платформы 1С:Предприятие 8.3, то встроенный механизм поиска уже поддерживает регулярные выражения. Это самый быстрый способ сделать многострочную замену, не выходя из Конфигуратора. Разберем этот процесс по шагам:

  1. Нажмите Ctrl + Shift + H для вызова глобального поиска и замены или Ctrl + H для замены в текущем окне.
  2. В поле «Искать» введите текст, который нужно заменить.
  3. В поле «Заменить на» введите нужный текст, используя управляющие символы. Для вставки переноса строки используйте \n (в некоторых случаях \r\n).
  4. Обязательно установите флаг Использовать регулярные выражения.

Проанализируем пример. Если нам нужно заменить ДобавитьСтрокуОписанияВвода на комментарий и эту же функцию, строка замены будет выглядеть так:

// Изменено \n ДобавитьСтрокуОписанияВвода

При выполнении операции платформа интерпретирует \n как команду перехода на новую строку и корректно сформирует структуру модуля.

Метод 2. Работа через внешние текстовые редакторы

Если стандартный конфигуратор не справляется или вы работаете на старой платформе, где регулярные выражения не поддерживаются, оптимальным решением станет использование продвинутых текстовых редакторов, таких как Notepad++, Sublime Text или Visual Studio Code. Выясним, как это сделать без разборки всей конфигурации.

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

  1. Откройте нужный модуль (например, модуль объекта регламентированного отчета).
  2. Перейдите в меню Текст — Сохранить текст в файл... и сохраните его в формате .txt или .bsl.
  3. Откройте полученный файл во внешнем редакторе.
  4. В Notepad++ выберите режим поиска Расширенный или Регулярные выражения.
  5. В поле поиска введите старую строку, а в поле замены — новую, используя \r\n для обозначения конца строки.
  6. Сохраните файл после замены.
  7. Вернитесь в Конфигуратор и выберите Текст — Прочитать текст из файла....

Этот метод гарантирует, что все символы переноса будут расставлены корректно, так как внешние редакторы строго следуют стандартам кодировок UTF-8 и Windows-1251.

Метод 3. Автоматизация через объект ТекстовыйДокумент

Когда замен слишком много и они разбросаны по разным объектам, можно написать небольшую внешнюю обработку. Проанализируем ситуацию: нам нужно программно обработать текст. Для этого в 1С используется объект ТекстовыйДокумент. Посмотрим на пример кода, который выполняет такую задачу:


ПутьКФайлу = "C:\Temp\ModuleText.txt";
ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.Прочитать(ПутьКФайлу);

СтароеЗначение = "ДобавитьСтрокуОписанияВвода";
// Формируем многострочный текст с использованием стандартной константы
НовоеЗначение = "// prozorov 14.12.2021 ++" + Символы.ПС 
               + "//РегламентированнаяОтчетность.ДобавитьСтрокуОписанияВвода" + Символы.ПС 
               + "ДобавитьСтрокуОписанияВвода";

ВесьТекст = ТекстДок.ПолучитьТекст();
ВесьТекст = СтрЗаменить(ВесьТекст, СтароеЗначение, НовоеЗначение);

ТекстДок.УстановитьТекст(ВесьТекст);
ТекстДок.Записать(ПутьКФайлу);

Использование функции СтрЗаменить в сочетании с Символы.ПС (перенос строки) — это самый надежный программный способ, так как платформа сама подставит нужный символ, соответствующий текущей операционной системе.

Метод 4. Разбор конфигурации на исходные файлы

Для крупных проектов и массовых правок во всей конфигурации сразу (например, при глобальном рефакторинге) лучше всего подходит метод разборки конфигурации. Рассмотрим этот подход подробнее. Современные средства разработки позволяют выгрузить всю конфигурацию в файлы формата .xml и .bsl (тексты модулей).

  1. Используйте команду Конфигурация — Выгрузить конфигурацию в файлы....
  2. После выгрузки вы получите иерархию папок, где каждый программный модуль представлен отдельным текстовым файлом.
  3. С помощью функции Find in Files (Поиск в файлах) в VS Code или Notepad++ вы сможете заменить текст во всех модулях конфигурации за один клик.
  4. Загрузите измененные файлы обратно через Конфигурация — Загрузить конфигурацию из файлов....

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

Метод 5. Хитрость с промежуточным текстовым документом

Если вам нужно сделать замену быстро и только в одном модуле, а регулярные выражения недоступны, попробуйте воспользоваться "буфером обмена". Разберем этот лайфхак:

  1. Создайте внутри Конфигуратора новый текстовый файл (Файл — Новый — Текстовый документ).
  2. Напишите в нем образец того, на что вы хотите заменить (все три или четыре строки).
  3. Выделите этот текст и скопируйте его.
  4. В окне замены (Ctrl + H) вставьте скопированный блок в поле «Заменить на».

В некоторых версиях платформы Конфигуратор позволяет "проглотить" символ переноса строки из буфера обмена, даже если вы не можете ввести его туда вручную с клавиатуры. Если же в поле замены отображается спецсимвол, попробуйте сначала заменить искомую строку на уникальный маркер, например #МАРКЕР#, а затем вторым проходом заменить этот маркер на нужный текст через внешний редактор.

Выясним причину, почему стандартная замена иногда вставляет странные символы. Это происходит из-за различий в обработке символов возврата каретки (CR) и перевода строки (LF). Конфигуратор 1С в режиме обычного текстового поля ввода не всегда понимает, что нажатие Enter должно трактоваться как пара символов CR+LF. Именно поэтому использование специализированных инструментов или программного метода через Символы.ПС является более предпочтительным и безопасным для целостности программного кода.

← На главную