ФорматированнаяСтрока

Типы · FormattedString

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

Примеры платформы

Реквизит1 = Новый ФорматированнаяСтрока(
    "Товар ",
    Новый ФорматированнаяСтрока(Наименование, , WebЦвета.Красный),
    " отсутствует на складе");
Полное описание, параметры и ограничения

ФорматированнаяСтрока (FormattedString)

ФорматированнаяСтрока (FormattedString)

Доступен, начиная с версии 8.3.1.

Конструкторы:
На основании описания форматирования
На основании строк

Описание:

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

цвет фона,

шрифт текста,

картинки,

гиперссылки.
Значения этого типа являются немутабельными.
Примечание. Если форматированная строка не помещается в отведенном для нее поле, то элементы, неуместившиеся по высоте:
в веб-клиенте будут обрезаны,

в тонком клиенте отображены не будут.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/ui}. Имя типа XDTO: FormattedString.

Пример:

Реквизит1 = Новый ФорматированнаяСтрока(
"Товар ",
Новый ФорматированнаяСтрока(Наименование, , WebЦвета.Красный),
" отсутствует на складе");

Использование в версии:

Доступен, начиная с версии 8.3.1.

Методическая информация

Практические примеры

Ограничить вывод форматированной памятки через её поле

Запрещаем интерактивные операции вывода для собственного форматированного поля, сохраняя доступ к тексту памятки внутри учебной формы.

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

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

Подготовка

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

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

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

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

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

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

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

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

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

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

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

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

  1. Собственный документ создаётся в памяти и связан с одним управляемым полем.

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

  3. Не вызываем методы печати и записи у документа. Ограничение интерфейса само по себе не запрещает программному коду прочитать текст.

  4. Проверяем наличие названия и суммы после настройки вывода, а команды поля осматриваем вручную.

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

  1. Ожидаются три Истина. Памятка остаётся видимой в собственной форме.

  2. Не путайте отсутствие команды сохранения с шифрованием: свой текст по-прежнему доступен через ПолучитьТекст.

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

Настройка интерфейса отделена от сохранения, содержимого и прав доступа.

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

  1. ИспользованиеВывода не заменяет серверную проверку прав.

  2. Не используйте такую настройку как средство защиты персональных или коммерческих данных.

  3. В этом уроке нет файла, отправки или печатного задания.

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

Получить закладки выделения и заменить собственное слово в памятке

Выделение форматированного текста определяется закладками, а не четырьмя номерами строк и колонок. Меняем Книга на КНИГА и восстанавливаем диапазон по числовым позициям.

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

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

Подготовка

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. ПолучитьГраницыВыделения возвращает два объекта ЗакладкаФорматированногоДокумента через переменные.

  3. До изменения переводим закладки в числовые позиции. Длину пяти букв проверяем по ВыделенныйТекст, а реальные позиции выводим диагностически: справка этого метода не объявляет разность границ длиной строки.

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

  5. Новая строка имеет ту же длину, поэтому границы диапазона сохраняются. Метод установки выделения принимает две новые закладки.

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

  1. После правильного выделения ожидаются три Истина: длина текста 5, выделенное КНИГА и нетронутая сумма 750, а также строка фактических позиций.

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

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

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

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

  1. Не подставляйте четыре координаты обычного текста в метод форматированного поля.

  2. Закладки удалённого или изменённого фрагмента не следует молча считать действительными.

  3. При замене текстом другой длины нужно пересчитать конечную позицию; этот урок использует только равную длину.

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

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

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

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

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