Заменить только вручную выделенное слово в своём документе

Учебные задачи

Выделите Книга в первой строке. Код читает реальные границы, восстанавливает их без угадывания индексов и заменяет слово; вторая строка остаётся.

Где и как запускать

Полный модуль собственной обычной формы. Только толстый клиент с обычными формами; экспортный обработчик Нажатие получает инициирующий Элемент, хотя базовое событие Кнопка.Нажатие дополнительных параметров не имеет.

Подготовка

  1. Создайте отдельную внешнюю обработку с обычной формой. Запускайте толстым клиентом в режиме обычных форм.

  2. Добавьте реквизит УчебныйДокумент (ТекстовыйДокумент), ПолеТекстовогоДокумента с именем УчебноеПолеТекста и Данные = УчебныйДокумент.

  3. Добавьте кнопку УчебнаяКоманда вне поля. ПриОткрытии свяжите с процедурой из полного модуля; Нажатие кнопки вручную не назначайте.

  4. Каждый урок заменяет полный модуль отдельной копии. Две строки создаются в памяти; файлы не открываются и не сохраняются.

Процедура ПриОткрытии()
    УчебныйДокумент = Новый ТекстовыйДокумент;
    УчебныйДокумент.УстановитьТекст("Книга: 3" + Символы.ПС + "Ручка: 1");
    Кнопка = ЭтаФорма.ЭлементыФормы.УчебнаяКоманда;
    Кнопка.Заголовок = "Проверить собственный текст";
    Кнопка.УстановитьДействие("Нажатие", Новый Действие("ВыполнитьУчебнуюПроверку"));
КонецПроцедуры

Процедура ВыполнитьУчебнуюПроверку(Элемент) Экспорт
    Поле = ЭтаФорма.ЭлементыФормы.УчебноеПолеТекста;
    Если Поле.ВыделенныйТекст <> "Книга" Тогда
        Сообщить("Сначала выделите только слово Книга в первой строке");
        Возврат;
    КонецЕсли;
    НачалоСтроки = 0;
    НачалоКолонки = 0;
    КонецСтроки = 0;
    КонецКолонки = 0;
    Поле.ПолучитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки);
    Сообщить(СтрШаблон("Начало: %1/%2; конец: %3/%4", НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки));
    Поле.УстановитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки);
    Если Поле.ВыделенныйТекст <> "Книга" Тогда
        ВызватьИсключение "После восстановления изменилось выделение";
    КонецЕсли;
    Поле.ВыделенныйТекст = "Учебная книга";
    ТекстПослеЗамены = УчебныйДокумент.ПолучитьТекст();
    Сообщить(СтрНайти(ТекстПослеЗамены, "Учебная книга: 3") > 0);
    Сообщить(СтрНайти(ТекстПослеЗамены, "Ручка: 1") > 0);
    Сообщить(Поле.ВыделенныйТекст = "");
КонецПроцедуры

Разбор по шагам

  1. Сначала проверяется точное выделение Книга. Без него свойство при записи вставляло бы текст в курсор, чего этот урок не делает.

  2. ПолучитьГраницыВыделения заполняет четыре переменные. Начальные нули — только инициализация, не предположение о базе нумерации.

  3. УстановитьГраницыВыделения получает эти же фактические координаты; затем выделение повторно проверяется.

  4. Запись ВыделенныйТекст заменяет текущий фрагмент и сбрасывает выделение согласно локальной справке.

  5. ПолучитьТекст читает собственный документ, два поиска подтверждают новую первую строку и неизменную вторую.

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

  1. После верного выделения вывод координат и три Истина. Текст: Учебная книга: 3; следующая строка Ручка: 1.

  2. Без выделения или с другим выделением только подсказка, без вставки. Для повторения заново откройте свою форму.

Ожидаемый результат

Выполнена конкретная замена с проверкой границ, сброса выделения и сохранности остального текста.

На что обратить внимание

  1. Не путайте ПолеТекстовогоДокумента с многострочным ПолеВвода.

  2. При отсутствии выделения запись свойства вставляет текст в текущую позицию.

  3. Это работа в памяти, не сохранение текстового файла.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.