1с форматированный документ вставить текст

Обновлено: 05.07.2024

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

Для работы с форматированным документом предназначен объект ФорматированныйДокумент, с помощью которого можно выполнять программную обработку документа, и поле вида Поле форматированного документа, который предназначен для интерактивного изменения форматированного документа.

В информационной базе форматированный документ рекомендуется хранить в реквизите типа ХранилищеЗначения, в который помещается объект типа ФорматированныйДокумент.

Для того чтобы предоставить пользователю возможность интерактивного изменения документа, следует выполнить следующие шаги:

  • Создать реквизит формы типа ФорматированныйДокумент и установить для него свойство Сохраняемые данные.
  • Создать элемент формы типа Поле ввода вида Поле форматированного документа и связать его с ранее созданным реквизитом.
  • При чтении данных формы (обработчик ПриЧтенииНаСервере()) загрузить в реквизит формы документ (метод УстановитьHTML()), который необходимо редактировать, предварительно получив его из информационной базы.
  • Перед записью данных формы (обработчик ПередЗаписьюНаСервере()) получить результат (метод ПолучитьHTML()) редактирования документа и поместить его в реквизит, сохраняемый в информационной базе.

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

  • содержимое документа считается одной последовательностью символов;
  • перенос строки считается одним символом;
  • картинка считается одним символом.

Если положение символа, с которым связана закладка, изменится, то закладка будет отслеживать положение связанного символа. Если удаляется символ, с которым связана закладка, то закладка пытается привязаться к следующему символу, а если этого символа нет ‑ закладка будет указывать на конец документа. Если заменить целиком весь форматированный документ, то все закладки в этом документе станут невалидными.

С помощью закладок можно получать и устанавливать выделение или позицию курсора в редакторе, добавлять и удалять элементы текста в документе (собственно текст, картинка, перевод строки).

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

Приведем пример получения и установки выделения в редакторе форматированного документа.

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

Если в форматированном документе присутствуют гиперссылки и форматированный документ отображается в режиме Только просмотр, то гиперссылки доступны для перехода. Переход выполняется в новом окне веб-браузера.

Также имеется возможность программного доступа к тексту форматированного документа. Сам текст состоит из объектов типа ПараграфФорматированногоДокумента, который доступен через свойство Элементы объекта ФорматированныйДокумент. При этом каждый параграф состоит из объектов типа

  • ТекстФорматированногоДокумента,
  • ПереводСтрокиФорматированногоДокумента
  • КартинкаФорматированногоДокумента (элементы форматированного документа).

Доступ к этой коллекции обеспечивается через свойство Элементы объекта ПараграфФорматированногоДокумента. Границей элемента не обязательно является граница слова.

Например, следующий пример показывает перебор всех параграфов форматированного документа, содержащих текст, и отдельную обработку каждого параграфа.

Обработка элементов форматированного документа, входящего в состав параграфа, может оказаться полезной в том случае, если нужно, например, убрать все оформление в виде курсива или полужирного шрифта.

При программной работе с текстом также могут помочь методы ПолучитьЭлементы() и СформироватьЭлементы(). Эти методы возвращают массив элементов форматированного документа. Чтобы увидеть разницу в работе этих методов, рассмотрим пример форматированного документа, содержащего следующую строку: 012 456 890. Строка состоит из 11 символов, где на месте символов 4 и 8 расположены пробелы. Необходимо получить элементы, которые расположены между позициями 2 и 9 этого документа.

Разница в работе этих методов будет в том, что метод ПолучитьЭлементы() возвращает все элементы, которые попадают между заданными закладками (включая все граничные элементы), т. е. рассматриваемом примере будет выведен следующий текст:

Другими словами, при использовании метода СформироватьЭлементы() система формирует набор элементов таким образом, чтобы он включал в себя только то содержимое форматированного документа, которое ограничено закладками.

Такой результат будет даже в том случае, если полученный, после вызова СформироватьЭлементы(), набор элементов никак не изменялся.

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

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

Редактирование текстовых документов

В режиме редактирования текстовых документов редактор поддерживает все стандартные функции редактирования текста:
  • создание нового документа или открытие одного из существующих документов;
  • ввод и редактирование текста;
  • сохранение отредактированного текста;
  • печать текста.

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

Редактор текста и модуля

В дальнейшем быстрый переход по закладкам возможен по сочетанию клавиш или команде меню:

Редактор текста и модуля

Редактирование текстов модулей

Редактирование текстов модулей может выполняться в процессе создания формы объекта прикладного решения, непосредственно при разработке модулей объектов или всего приложения, и при редактировании внешнего текстового файла, содержащего текст модуля.

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

Выделение цветом синтаксических конструкций

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

Редактор текста и модуля

Разработчик может использовать цвета выделения, установленные по умолчанию, или настроить их самостоятельно. В общем случае система сама отслеживает необходимость включения режима выделения цветом. Однако в ситуации, когда система «не знает» о том, что редактируется текст модуля (например, если редактируется внешний текстовый файл, содержащий текст модуля), разработчик может включить режим выделения цветом вручную, используя меню конфигуратора:

Редактор текста и модуля

Группировка

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

Редактор текста и модуля

Свернутый текст замещается специальным маркером, который позволяет просмотреть содержимое свернутой группы в виде подсказки:

Редактор текста и модуля

Разработчику предоставляется возможность настраивать режим группировки, указывая, какие синтаксические конструкции могут группироваться, и каким должно быть исходное состояние группировки (свернутая или развернутая) при открытии документа. Таким образом, он может настроить, например, использование группировок «по максимуму»:

Редактор текста и модуля

Области

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

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

Редактор текста и модуля

Области могут быть вложены друг в друга или в другие группируемые конструкции языка.

Операции с блоками

Редактор позволяет выполнять ряд операций над выделенными блоками текста модуля: автоматическое форматирование, изменение отступа, добавление/удаление комментариев и переносов строк.

Редактор текста и модуля

Форматирование модуля

Хорошим стилем написания модулей считается использование синтаксического отступа для выделения управляющих конструкций встроенного языка. Редактор позволяет автоматически форматировать текст при его вводе, и кроме этого, выполнять автоматическое форматирование уже введенного текста.

Редактор текста и модуля

Результат автоматического форматирования:

Редактор текста и модуля

Увеличение/уменьшение отступа

Наряду с автоматическим форматированием всего выделенного текста, редактор поддерживает также операции сдвига выделенного блока вправо или влево на шаг табуляции.

Это облегчает ручное форматирование больших фрагментов кода.

Добавление/удаление комментариев

Также редактор содержит очень удобную для разработчика функцию автоматической (одним нажатием мыши) установки и снятия комментариев на выделенный текст. Такая возможность часто используется при отладке модулей:

Редактор текста и модуля

Добавление/удаление переноса строки

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

Таким образом, отладив запрос в консоли запросов, разработчик может просто скопировать текст запроса из консоли, вставить его в модуль и одним движением добавить перенос строки ко всем строкам текста запроса:

Редактор текста и модуля

Переход по процедурам и функциям

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

Редактор текста и модуля

Редактор текста и модуля

Если установить курсор на той процедуре, которая еще отсутствует в модуле, и нажать Перейти, конструктор автоматически вставит в текст модуля заголовок предопределенной процедуры.

Переход к определению процедур и функций

Редактор позволяет автоматически переходить к определению процедуры или функции, использованной в тексте модуля. Для этого достаточно установить курсор на имени нужной функции в теле модуля и выполнить команду контекстного меню или нажать «горячую» клавишу. В окне редактора будет открыт текст искомой процедуры или функции:

Редактор текста и модуля

Контекстная подсказка

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

Редактор текста и модуля

Контекстная подсказка также работает и для параметров некоторых методов, если эти параметры задаются строковыми литералами.

Редактор текста и модуля

Копирование имен объектов и реквизитов

При написании текста модуля разработчик может просто перетаскивать мышью имена объектов или их реквизитов из дерева метаданных в нужное место модуля:

Редактор текста и модуля

Проверка модуля

Редактируемый модуль может быть проверен на правильность использования синтаксических конструкций встроенного языка, корректность обращений к методам и свойствам объектов «через точку», а также на корректность некоторых параметров, имеющих тип «Строка»:

Редактор текста и модуля

Кроме этого конфигуратор поддерживает выполнение полной проверки всех модулей, содержащихся в прикладном решении.

В процессе работы с модулем разработчик имеет возможность получать контекстную подсказку по встроенному языку, используя синтакс-помощник. Для этого достаточно установить курсор на интересующий элемент языка и нажатием комбинации клавиш (или по контекстному меню) перейти к описанию этого элемента языка в синтакс-помощнике.

Ограничение доступа к модулю

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

Редактор текста и модуля

Использование шаблонов

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

Доброго времени суток, коллеги! Это новый объект, который появился в версии платформы 1С 8.2.11. И конечно же первый вопрос, который возникает, что нового он несет и какой новый функционал он добавляет. На изображении к этой статье продемонстрирован пример работы с этим объектом, само предназначение, я думаю вы можете придумать сами.

Предназначение объекта

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

Вы можете увидеть, что все базовые возможности, которые присущи всем текстовым процессорам стали доступными. До этого релиза (8.2.11) не было возможности этого сделать, используя стандартные средства. А теперь это стандартные возможности платформы, которые очень просто поместить на абсолютно любую форму. В форматированном документе появились номерованные списки, маркированные списки, ссылка, различные шрифты. Также, в этот форматированный документ можно вставить какую-нибудь картинку.

Список элементов форматированного списка

Список всех элементов форматированного списка

Самый часто используемый пример, это редактирование и отправка электронных писем. Если у вас почтовый клиент встроен в одну из конфигураций, то очень удобно использовать форматированный документ для того, чтобы отправлять и принимать письма. То есть читать их в соответствующем оформлении, а также этот объект можно будет применять, чтобы оформить некоторые документы, которые будут печататься. Например: договоры, трудовые договоры и прочие документы. А дальше мы рассмотрим, как работать с объектом типа данных – форматированный документ.

Тип данных – форматированный документ

Тип данных форматированный документ в Синтаксис-помощнике

Информация из Синтаксис-помощника о свойствах и методах типа данных ФорматированныйДокумент

Информация о типах данных реквизита объекта метаданных

Свойства реквизита со всеми доступными ему типами данных

Размещение форматированного документа на форме

Реквизит объекта ХранилищеЗначения (Недоступен в данных формы)

Список реквизитов формы с типами значений

Форма договора с текстовым полем типа ФорматированныйДокумент

Редактирование текста договора в форматированном документе

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

Вывод командной панели на форму

Командная панель с перечнем кнопок для форматирования документа

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

Форма реквизита с установленным Свойством СохраняемыеДанные

Свойство СохраняемыеДанные влияет на модифицированность формы

Этот флаг как раз и будет влиять на то, что свойства модифицированности будут выставляться в значение Истина, если данный реквизит будет как-то меняться. Более того, данный флаг означает, что если форма открывается в режиме только для чтения (read only), то и этот реквизит будет открываться в этом же режиме.

Сохранение форматированного документа в БД

Во-первых, при открытии формы необходимо будет обращаться к реквизиту объекта и заполнять тем значением, которое там хранится – значением форматированного документа. Во-вторых, при записи элемента мы берем содержимое форматированного документа и помещаем в хранилище значения. Таким образом у нас будет возникать эффект того, что все действия, которые пользователь делает с нашим форматированным документом сохраняются в базе данных.

Теперь давайте разберемся какие же обработчики событий нам необходимо будет выбрать. В частности, первое событие. В момент открытия формы мы должны обратиться к значению, которое содержится в хранилище значения. Итак, какие у нас обработчики есть вообще.

Список обработчиков событий в порядке вызова

Обработчики событий в порядке их вызова для модуля формы элемента справочника

Свойства и методы форматированного документа

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

Интерфейс (управляемый) -> Поле формы -> Расширение форматированного документа.

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

Итак, создадим команду, неважно как она будет называться. Поместим эту команду в командную панель и опишем обработчик действия. Естественно, данный метод получит границы выделения доступные клиенту поскольку он относится непосредственно к полю.

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

То есть метод «ПолучитьГраницыВыделения» все-таки процедура, а не функция. Давайте простим разработчикам платформы такой Синтаксис-помощник. В эту процедуру нужно передать два параметра любого типа данных. То есть, скорее все здесь имелось в виду то, что в переданные параметры возвращается выделенный фрагмент. В них и вернется выделенный фрагмент.

Тип данных закладка форматированного документа

Табло показывает, что возвращаемое значение является специальным типом форматированного документа

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

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

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

Вставка текста в форматированный документ

Сейчас давайте решим задачу вставки в форматированный документ. Допустим, вставим в документ наименование текущего владельца. Сначала вставим конкретную позицию, начало выделения. А потом попытаемся вставить наименование текущего владельца вместо наших специальных маркеров. Итак, решая данную задачу, обратимся к Синтаксис-помощнику.

Описание метода Вставить() объекта форматированный документ

Подробное описание метода Вставить() из Синтаксис-помощника

Если запустить приложение и обратиться к договору, выделив фрагмент текста, затем нажав на кнопку «Получить границы», то произойдет вставка названия контрагента в начало строки. Но нужно, чтобы система анализировала данную строчку и вместо неё вставляла название контрагента. Как это сделать? Если посмотреть в Синтаксис-помощник, то увидим, что метода поиска какого-либо текста нет, но удалить какой-либо текст мы можем.

На следующем видео (2 минуты) вы можете увидеть, как работает, то что мы сделали:

HTML-редактор используется для создания пользовательских описаний в виде HTML-документов. Окно редактора содержит три закладки, позволяющие осуществлять просмотр и редактирование документа.

На закладке Редактирование документ отображается в текстовом и графическом виде:

Редактор HTML-документа

На закладке Текст разработчик имеет возможность редактировать HTML-текст документа:

Редактор HTML-документа

Закладка Просмотр предназначена для отображения документа в том виде, в котором он будет показан пользователю:

Редактор HTML-документа

Работа с HTML-документом напоминает работу в обычном текстовом редакторе, однако HTML-редактор предоставляет ряд дополнительных возможностей, которые обусловлены использованием формата HTML:

Форматирование текста

Текст HTML-документа можно форматировать: устанавливать его стиль, абзацные отступы, выбирать размер шрифта, параметры, гарнитуру и т. д.:

Редактор HTML-документа

При копировании текста из других текстовых редакторов (например, Word) HTML-редактор сохраняет исходное форматирование текста.

Таблицы

В HTML-документ можно вставлять таблицы и редактировать как параметры отдельных ячеек таблицы, так и изменять внешний вид и параметры всей таблицы:

Редактор HTML-документа

Картинки

В HTML-документе могут быть размещены картинки. Разработчик имеет возможность задавать размеры картинки, ее положение и толщину рамки вокруг картинки:

Редактор HTML-документа

Надписи

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

Читайте также: