Заменить выделенное слово Книга и восстановить выделение

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

Пользователь выделяет своё слово, код получает реальные координаты выделения, меняет регистр и восстанавливает тот же диапазон. Индексы строк и колонок не угадываются.

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

Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте внешнюю обработку УчебныеПоляДокументов85 с пустой управляемой основной формой. Запускайте в тонком клиенте Windows; веб-клиент в этот урок не входит.

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

  3. В свойствах формы → События назначьте ПриСозданииНаСервере. Вставьте весь код одного урока на уровне модуля, сохраните свою EPF и откройте её в учебной базе.

  4. Поле связано с реквизитом УчебныйДокумент типа ТекстовыйДокумент. Объект документа содержит данные, элемент ПолеДокумента отвечает за отображение и пользовательские действия.

  5. Документ создаётся заново из собственных констант. Книга: 3 штуки по 250, сумма 750. Реальные документы, справочники, файлы, сертификаты и сетевые адреса не используются.

  6. Каждый урок запускайте в отдельной копии формы. Изменения текста и оформления живут в памяти открытой учебной формы; код не сохраняет документ в файл, не печатает и не пишет в базу.

  7. Размеры и ограничения элемента задаются на сервере создания формы. Кнопка выполняет клиентские проверки или явно описанное учебное изменение.

  8. Фактический вид и запуск в 1С не проверены. Настройки компоновки формы, масштаб интерфейса и версия клиента могут влиять на отображение; сверяйте его вручную.

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

    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Заменить своё выделение";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Поле = Элементы.ПолеДокумента;
    Выделение = Поле.ВыделенныйТекст;
    Если Выделение <> "Книга" Тогда
        Сообщить("Выделите только слово Книга в первой строке собственной памятки");
        Возврат;
    КонецЕсли;
    НачалоСтроки = 0;
    НачалоКолонки = 0;
    КонецСтроки = 0;
    КонецКолонки = 0;
    Поле.ПолучитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки);
    Сообщить(НачалоСтроки = КонецСтроки);
    Сообщить(КонецКолонки > НачалоКолонки);
    Поле.ВыделенныйТекст = ВРег(Выделение);
    Поле.УстановитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки);
    Сообщить(Поле.ВыделенныйТекст = "КНИГА");
    Сообщить(СтрНайти(УчебныйДокумент.ПолучитьТекст(), "Сумма: 750") > 0);
КонецПроцедуры

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

  1. Перед нажатием кнопки мышью выделяем только Книга, без перевода строки. Для любого другого выделения код завершается без замены.

  2. ПолучитьГраницыВыделения заполняет четыре выходные переменные: строки и колонки начала и конца.

  3. Проверяем, что наш фрагмент однострочный и конец колонки расположен после начала. Не считаем нумерацию с 0 или 1 по предположению.

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

  5. Восстанавливаем диапазон фактическими координатами и проверяем новый текст и нетронутую сумму в другой строке.

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

  1. После правильного выделения ожидаются четыре Истина и выделенное КНИГА.

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

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

Разобрана управляемая замена конкретного собственного фрагмента с сохранением его диапазона.

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

  1. ЭтаФорма.Элементы — управляемая форма; не подставляйте ЭлементыФормы обычного клиента.

  2. Не восстанавливайте старый конец диапазона после замены произвольной строкой другой длины.

  3. Изменён только документ в памяти формы; текстовый файл не сохраняется.

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

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

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

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

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