Синтаксис и применение Расширение форматированного документа в платформе 1С:Предприятие. Описание и примеры кода.
Практические примеры
Настроить поле форматированной памятки и отделить стиль от текста
Памятка содержит Книга: 3 × 250 = 750. Размеры и шрифт поля настраиваем отдельно от форматирования отдельных фрагментов самого документа.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте внешнюю обработку УчебныеПоляДокументов85 с пустой управляемой основной формой. Запускайте в тонком клиенте Windows; веб-клиент в этот урок не входит.
Не создавайте вручную УчебныйДокумент, ПолеДокумента или учебную команду. Модуль программно добавляет их при открытии формы.
В свойствах формы → События назначьте ПриСозданииНаСервере. Вставьте весь код одного урока на уровне модуля, сохраните свою EPF и откройте её в учебной базе.
Поле связано с реквизитом УчебныйДокумент типа ФорматированныйДокумент. Объект документа содержит данные, элемент ПолеДокумента отвечает за отображение и пользовательские действия.
Документ создаётся заново из собственных констант. Книга: 3 штуки по 250, сумма 750. Реальные документы, справочники, файлы, сертификаты и сетевые адреса не используются.
Каждый урок запускайте в отдельной копии формы. Изменения текста и оформления живут в памяти открытой учебной формы; код не сохраняет документ в файл, не печатает и не пишет в базу.
Размеры и ограничения элемента задаются на сервере создания формы. Кнопка выполняет клиентские проверки или явно описанное учебное изменение.
Фактический вид и запуск в 1С не проверены. Настройки компоновки формы, масштаб интерфейса и версия клиента могут влиять на отображение; сверяйте его вручную.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовыеРеквизиты = Новый Массив;
НовыеРеквизиты.Добавить(Новый РеквизитФормы("УчебныйДокумент", Новый ОписаниеТипов("ФорматированныйДокумент")));
ЭтаФорма.ИзменитьРеквизиты(НовыеРеквизиты);
Документ = Новый ФорматированныйДокумент;
Документ.УстановитьФорматированнуюСтроку(Новый ФорматированнаяСтрока("Книга: 3 × 250 = 750"));
ЭтаФорма.УчебныйДокумент = Документ;
Поле = Элементы.Добавить("ПолеДокумента", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеФорматированногоДокумента;
Поле.ПутьКДанным = "УчебныйДокумент";
Поле.АвтоМаксимальнаяВысота = Ложь;
Поле.АвтоМаксимальнаяШирина = Ложь;
Поле.Высота = 12;
Поле.Ширина = 80;
Поле.МаксимальнаяВысота = 24;
Поле.МаксимальнаяШирина = 110;
Поле.РастягиватьПоВертикали = Истина;
Поле.РастягиватьПоГоризонтали = Истина;
Поле.ЦветТекста = Новый Цвет(20, 65, 95);
Поле.ЦветРамки = Новый Цвет(95, 120, 145);
Поле.Шрифт = Новый Шрифт("Arial", 12);
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить учебный документ";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Поле = Элементы.ПолеДокумента;
Сообщить(Не Поле.АвтоМаксимальнаяВысота И Не Поле.АвтоМаксимальнаяШирина);
Сообщить(Поле.Высота = 12 И Поле.Ширина = 80);
Сообщить(Поле.МаксимальнаяВысота = 24 И Поле.МаксимальнаяШирина = 110);
Сообщить(Поле.РастягиватьПоВертикали И Поле.РастягиватьПоГоризонтали);
Сообщить(Поле.ЦветТекста = Новый Цвет(20, 65, 95));
Сообщить(Поле.ЦветРамки = Новый Цвет(95, 120, 145));
Сообщить(ТипЗнч(Поле.Шрифт) = Тип("Шрифт"));
Сообщить(СтрНайти(УчебныйДокумент.ПолучитьТекст(), "750") > 0);
КонецПроцедуры
Разбор по шагам
Содержимое ФорматированныйДокумент устанавливаем через ФорматированнаяСтрока без индивидуального шрифта и цвета фрагментов.
Само поле имеет свои размер, максимумы, цвета и шрифт. Настраиваем его после привязки к документу.
Если отдельный фрагмент документа получил своё оформление, оно может отличаться от общего стиля поля; это не ошибка расчёта суммы.
У поля вне таблицы не используем ЦветФона: установленная справка ограничивает применение этого свойства размещением в таблице.
Кнопка проверяет свойства представления и сохранённый текст суммы. Внешний вид проверяем в открытой форме.
Как проверить результат
Ожидаются восемь Истина. Строка собственного расчёта остаётся Книга: 3 × 250 = 750.
Для сравнения оформите отдельно слово Книга в документе: локальный стиль фрагмента и общий шрифт поля изучайте раздельно.
Ожидаемый результат
Собственная памятка показана в настроенном управляемом поле без неверного применения фона вне таблицы.
На что обратить внимание
Это ФорматированныйДокумент, не строка HTML и не DOM браузера.
Не приравнивайте логические размеры поля к пикселям или размерам печатной страницы.
Свойства поля не вычисляют сумму: 750 задана собственным учебным содержимым.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Получить закладки выделения и заменить собственное слово в памятке
Выделение форматированного текста определяется закладками, а не четырьмя номерами строк и колонок. Меняем Книга на КНИГА и восстанавливаем диапазон по числовым позициям.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте внешнюю обработку УчебныеПоляДокументов85 с пустой управляемой основной формой. Запускайте в тонком клиенте Windows; веб-клиент в этот урок не входит.
Не создавайте вручную УчебныйДокумент, ПолеДокумента или учебную команду. Модуль программно добавляет их при открытии формы.
В свойствах формы → События назначьте ПриСозданииНаСервере. Вставьте весь код одного урока на уровне модуля, сохраните свою EPF и откройте её в учебной базе.
Поле связано с реквизитом УчебныйДокумент типа ФорматированныйДокумент. Объект документа содержит данные, элемент ПолеДокумента отвечает за отображение и пользовательские действия.
Документ создаётся заново из собственных констант. Книга: 3 штуки по 250, сумма 750. Реальные документы, справочники, файлы, сертификаты и сетевые адреса не используются.
Каждый урок запускайте в отдельной копии формы. Изменения текста и оформления живут в памяти открытой учебной формы; код не сохраняет документ в файл, не печатает и не пишет в базу.
Размеры и ограничения элемента задаются на сервере создания формы. Кнопка выполняет клиентские проверки или явно описанное учебное изменение.
Фактический вид и запуск в 1С не проверены. Настройки компоновки формы, масштаб интерфейса и версия клиента могут влиять на отображение; сверяйте его вручную.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовыеРеквизиты = Новый Массив;
НовыеРеквизиты.Добавить(Новый РеквизитФормы("УчебныйДокумент", Новый ОписаниеТипов("ФорматированныйДокумент")));
ЭтаФорма.ИзменитьРеквизиты(НовыеРеквизиты);
Документ = Новый ФорматированныйДокумент;
Документ.УстановитьФорматированнуюСтроку(Новый ФорматированнаяСтрока("Книга: 3 × 250 = 750"));
ЭтаФорма.УчебныйДокумент = Документ;
Поле = Элементы.Добавить("ПолеДокумента", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеФорматированногоДокумента;
Поле.ПутьКДанным = "УчебныйДокумент";
Поле.ТолькоПросмотр = Ложь;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Заменить своё слово";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Поле = Элементы.ПолеДокумента;
Если Поле.ВыделенныйТекст <> "Книга" Тогда
Сообщить("Выделите только слово Книга в собственной памятке");
Возврат;
КонецЕсли;
Начало = Неопределено;
Конец = Неопределено;
Поле.ПолучитьГраницыВыделения(Начало, Конец);
Если ТипЗнч(Начало) <> Тип("ЗакладкаФорматированногоДокумента") ИЛИ ТипЗнч(Конец) <> Тип("ЗакладкаФорматированногоДокумента") Тогда
ВызватьИсключение "Не получены закладки собственного выделения";
КонецЕсли;
ПозицияНачала = УчебныйДокумент.ПолучитьПозициюПоЗакладке(Начало);
ПозицияКонца = УчебныйДокумент.ПолучитьПозициюПоЗакладке(Конец);
Сообщить(СтрДлина(Поле.ВыделенныйТекст) = 5);
Сообщить("Позиции выделения: " + Строка(ПозицияНачала) + " … " + Строка(ПозицияКонца));
Поле.ВыделенныйТекст = "КНИГА";
НовоеНачало = УчебныйДокумент.ПолучитьЗакладкуПоПозиции(ПозицияНачала);
НовыйКонец = УчебныйДокумент.ПолучитьЗакладкуПоПозиции(ПозицияКонца);
Поле.УстановитьГраницыВыделения(НовоеНачало, НовыйКонец);
Сообщить(Поле.ВыделенныйТекст = "КНИГА");
Сообщить(СтрНайти(УчебныйДокумент.ПолучитьТекст(), "750") > 0);
КонецПроцедуры
Разбор по шагам
Перед нажатием выделяем ровно Книга. Любое другое выделение вызывает только инструкцию, без замены.
ПолучитьГраницыВыделения возвращает два объекта ЗакладкаФорматированногоДокумента через переменные.
До изменения переводим закладки в числовые позиции. Длину пяти букв проверяем по ВыделенныйТекст, а реальные позиции выводим диагностически: справка этого метода не объявляет разность границ длиной строки.
После записи ВыделенныйТекст старые закладки изменённого фрагмента не используем: заново получаем их по сохранённым позициям.
Новая строка имеет ту же длину, поэтому границы диапазона сохраняются. Метод установки выделения принимает две новые закладки.
Как проверить результат
После правильного выделения ожидаются три Истина: длина текста 5, выделенное КНИГА и нетронутая сумма 750, а также строка фактических позиций.
Нажмите без нужного выделения: памятка не изменится. Повторный исходный опыт выполняйте после нового открытия формы.
Ожидаемый результат
Выделение форматированного документа разобрано с правильными объектами границ и явным сохранением позиций.
На что обратить внимание
Не подставляйте четыре координаты обычного текста в метод форматированного поля.
Закладки удалённого или изменённого фрагмента не следует молча считать действительными.
При замене текстом другой длины нужно пересчитать конечную позицию; этот урок использует только равную длину.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.