Выселение. Приватизация. Перепланировка. Ипотека. ИСЖ

Форматированный документ предназначен для оформление текста. Его можно выделить жирным, подчеркнуть, увеличить/уменьшить шрифт, центрировать и т.д. Также можно добавить картинку. Т.е. в 1С теперь можно отформатировать текст, примерно, как в MS Word и др. подобным программам. Это может быть удобно при оформлении различных договоров или, например, при редактировании электронного письма. Таким образом, у нас есть возможность привести текстовый документ в тот вид, который мы пожелаем.

В синтакс-помощнике есть описание .
Объект ФорматированныйДокумент (FormattedDocument) имеет одноименный тип данных, который поддерживает функционирование данного объекта и имеет следующие методы:
Вставить (I_nsert)
Добавить (Add)
Записать (Write)
ПолучитьHTML (GetHTML)
ПолучитьЗакладкуКонца (GetEndBookmark)
ПолучитьЗакладкуНачала (GetBeginBookmark)
ПолучитьЗакладкуПоПозиции (GetPositionBookmark)
ПолучитьПозициюПоЗакладке (GetBookmarkPosition)
ПолучитьТекст (GetText)
Удалить (Delete)
УстановитьHTML (SetHTML)

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

Есть одна важная особенность этого типа. Нельзя задавать тип «Форматированный документ» для реквизита объекта (справочника, документа и др.). Но есть возможность указывать его для реквизитов формы.



Возникает вопрос, как же нам сохранить те изменения при форматировании текста, которые сделал пользователь? Для этого применяется специальный объект «ХранилищеЗначения», который может содержать в себе любой тип данных, в том числе и «форматированный документ». Таким образом, в базе данных сам объект будет храниться как «Хранилище значения», далее при открытии формы необходимо будет извлечь объект из хранилища, отобразить его на форме используя тип «ФорматированныйДокумент». Если пользователь решит сохранить изменения, то при записи объекта нужно снова взять объект «форматированный документ» и записать его в хранилище.

Пример работы
Возьмем за основу каркасную конфигурацию, создадим в ней справочники «Контрагенты» и «Договоры». Установим справочник «Договоры» подчиненным справочнику «Контрагенты» и создадим реквизит «Текст» с типом ХранилищеЗначения.

Создадим форму элемента справочника «Договоры» и добавим на нее новый реквизит, который назовем «ТекстДоговора», укажем тип данных «ФорматированныйДокумент». Обратите внимание, что реквизит «Текст» с типом «ХранилищеЗначения» на форму поместить нельзя.
Создадим также командную панель (меню) содержащую необходимые кнопки для управления форматированным документом. Для этого надо добавить в форму «Группа – Командная панель» и указать в свойстве «Источник команд» реквизит формы «ТекстДоговора» с типом ФорматированныйДокумент.


Запускаем отладчик, проверяем, что у нас получилось…

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

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

Пропишем эту связь программно в модуле формы. Опишем алгоритм.

1. При открытии формы, необходимо будет обратиться к реквизиту объекта «Текст», чтобы прочитать из него данные и записать их в форматированный документ «Текст договора».
2. При записи объекта, берем содержимое форматированного документа и помещаем его в реквизит объекта «Текст» с типом «ХранилищеЗначения».

Таким образом у нас будет возникать эффект, что все изменения производимые пользователем, будут сохраняться в базе данных.
Нам понадобятся следующие обработчики событий:
- событие ПриЧтенииНаСервере(ТекущийОбъект)
оно удобно тем, что при ошибочном внесении изменений в данные формы, можно нажать кнопку «Перечитать» и вернутся к исходным данным.
Код 1C v 8.2 УП &НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ТекстДоговора = ТекущийОбъект.Текст.Получить();
КонецПроцедуры
- событие ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Код 1C v 8.2 УП &НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект.Текст = Новый ХранилищеЗначения(ТекстДоговора);
КонецПроцедуры
Т.к. реквизит Текст у нас имеет тип «ХранилищеЗначений», надо учесть нюансы работы с ним… В случае чтения объекта используем метод Получить(), а в случае записи используем конструктор объекта Новый ХранилищеЗначения(<Значение>, <АлгоритмСжатияДанных>).

На этом пока всё. В следующий раз попробую рассказать про использование шаблонов для вставки параметров в текст форматированного документа, например, вместо %Контрагент% вставлять наименование контрагента.
Сергей (SirYozha)

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

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

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

А ведь было бы прикольно, нажать ctrl+prtscr (alt+prtscr), и вставлять содержимое из буфера в нужную позицию документа, где находится курсор.

После изучения определенного количества неплохих, но достаточно старых публикаций, сделал вывод что штатная вставка ctrl+v для картинов не работает,

методы, типа

ХОбъект = Новый COMОбъект(«htmlfile»); Результат = хОбъект.ParentWindow.ClipboardData.Getdata(«Text»);

работают только с текстом,

варианты с подключением к эксель, копипастом в него, и сохранением в файл - ресурсоемки, да и не везде эксель доступен.

Остались варианты с внешними компонентами.

компонент тоже немного, давным давно (в 2009), пользователь gudun_ku выложил компоненту clipboard.dll для этой цели.

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

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

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

Собственно этими знаниями и решил поделится, дабы облегчить жизнь тем, кто столкнется с подобной задачей.

Сама компонента находится в общих макетах, макет называется - ОбщиеМакеты.КомпонентаПолученияКартинкиИзБуфера

ОбщийМодуль.РаботаСКартинкамиКлиент

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

// Устанавливает компоненту сканирования Процедура УстановитьКомпоненту(ОбработчикРезультата) Экспорт // Продолжение установки компоненты Процедура НачатьУстановкуВнешнейКомпонентыПродолжение(ПараметрыВыполнения) Экспорт// Продолжение установки компоненты Процедура НачатьПодключениеВнешнейКомпонентыПродолжение(Подключена, ПараметрыВыполнения) Экспорт // Проинициализировать компоненту сканирования Функция ПроинициализироватьКомпоненту() Экспорт // Вернет версию компоненты сканирования Функция ВерсияКомпоненты() Экспорт

Также нужно не забыть про глобальную переменную

которая объявлена в модуле управляемого приложения

Перем КомпонентаПолученияКартинкиИзБуфера Экспорт; // компонента получения картинки из буфера обмена

Собственно, это и все что нам нужно для работы.

Делаем команду, вставка из буфера, и прописываем код

&НаКлиенте Процедура ВставитьИзБуфера(Команда) КомпонентаУстановлена = РаботаСКартинкамиКлиент.ПроинициализироватьКомпоненту(); Если Не КомпонентаУстановлена Тогда Обработчик = Новый ОписаниеОповещения("ВставитьКартинкуИзБуфераЗавершение", ЭтотОбъект); РаботаСКартинкамиКлиент.УстановитьКомпоненту(Обработчик); Возврат; КонецЕсли; ВставитьКартинкуИзБуфераЗавершение(Истина, Неопределено); КонецПроцедуры &НаКлиенте Процедура ВставитьКартинкуИзБуфераЗавершение(Результат, ПараметрыВыполнения) Экспорт Если Результат = Истина Тогда ПутьКФайлу = КомпонентаПолученияКартинкиИзБуфера.ПолучитьКартинкуИзБуфера(); Если Не ПустаяСтрока(ПутьКФайлу) Тогда Картинко = Новый Картинка(ПутьКФайлу); УдалитьФайлы(ПутьКФайлу); ПозицияНачала = 0; ПозицияОкончания = 0; Элементы.Описание.ПолучитьГраницыВыделения(ПозицияНачала,ПозицияОкончания); Начало = ФорматированныйДокумент.ПолучитьПозициюПоЗакладке(ПозицияНачала); ВставитьКартинкуВФорматированныйДокумент(Картинко,Начало); Иначе ПоказатьПредупреждение(,НСтр("ru = "Буфер обмена не содержит картинки"")); КонецЕсли; КонецЕсли; КонецПроцедуры

Так как метод вставки картинки доступен только на сервере, то там и выполняем

&НаСервере Процедура ВставитьКартинкуВФорматированныйДокумент(Кар,Позиция) Закладка = ФорматированныйДокумент.ПолучитьЗакладкуПоПозиции(Позиция); ФорматированныйДокумент.Вставить(Закладка,Кар, Тип("КартинкаФорматированногоДокумента")); КонецПроцедуры

Результат достигнут, все работает.

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

для ленивых прикладываю cf-файл с примером работы

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

Компонента

Через эксель

Труды Поручика

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

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

Прошу учесть, что это моя первая публикация. Итак, начнем…

Предназначение

Форматированный документ предназначен для оформление текста. Его можно выделить жирным , подчеркнуть , увеличить /уменьшить шрифт, центрировать и т.д. Также можно добавить картинку. Т.е. в 1С теперь можно отформатировать текст, примерно, как в MS Word и др. подобным программам. Это может быть удобно при оформлении различных договоров или, например, при редактировании электронного письма. Таким образом, у нас есть возможность привести текстовый документ в тот вид, который мы пожелаем.

В синтакс-помощнике есть описание.
Объект ФорматированныйДокумент (FormattedDocument) имеет одноименный тип данных, который поддерживает функционирование данного объекта и имеет следующие методы:

Вставить (Insert)
Добавить (Add)
Записать (Write)
ПолучитьHTML (GetHTML)
ПолучитьЗакладкуКонца (GetEndBookmark)
ПолучитьЗакладкуНачала (GetBeginBookmark)
ПолучитьЗакладкуПоПозиции (GetPositionBookmark)
ПолучитьПозициюПоЗакладке (GetBookmarkPosition)
ПолучитьТекст (GetText)
Удалить (Delete)
УстановитьHTML (SetHTML)

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

Есть одна важная особенность этого типа. Нельзя задавать тип «Форматированный документ» для реквизита объекта (справочника, документа и др.). Но есть возможность указывать его для реквизитов формы.

Возникает вопрос, как же нам сохранить те изменения при форматировании текста, которые сделал пользователь? Для этого применяется специальный объект «ХранилищеЗначения», который может содержать в себе любой тип данных, в том числе и «форматированный документ». Таким образом, в базе данных сам объект будет храниться как «Хранилище значения», далее при открытии формы необходимо будет извлечь объект из хранилища, отобразить его на форме используя тип «ФорматированныйДокумент». Если пользователь решит сохранить изменения, то при записи объекта нужно снова взять объект «форматированный документ» и записать его в хранилище.

Пример работы

Возьмем за основу каркасную конфигурацию, создадим в ней справочники «Контрагенты» и «Договоры». Установим справочник «Договоры» подчиненным справочнику «Контрагенты» и создадим реквизит «Текст» с типом ХранилищеЗначения.

Создадим форму элемента справочника «Договоры» и добавим на нее новый реквизит, который назовем «ТекстДоговора», укажем тип данных «ФорматированныйДокумент». Обратите внимание, что реквизит «Текст» с типом «ХранилищеЗначения» на форму поместить нельзя.
Создадим также командную панель (меню) содержащую необходимые кнопки для управления форматированным документом. Для этого надо добавить в форму «Группа - Командная панель» и указать в свойстве «Источник команд» реквизит формы «ТекстДоговора» с типом ФорматированныйДокумент.

Запускаем отладчик, проверяем, что у нас получилось…

Все бы хорошо, но есть некоторые проблемы:

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

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

Пропишем эту связь программно в модуле формы. Опишем алгоритм.

1. При открытии формы, необходимо будет обратиться к реквизиту объекта «Текст», чтобы прочитать из него данные и записать их в форматированный документ «Текст договора».
2. При записи объекта, берем содержимое форматированного документа и помещаем его в реквизит объекта «Текст» с типом «ХранилищеЗначения».

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

Нам понадобятся следующие обработчики событий:

Событие ПриЧтенииНаСервере(ТекущийОбъект)

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ТекстДоговора = ТекущийОбъект. Текст. Получить();
КонецПроцедуры

- событие ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект. Текст = Новый ХранилищеЗначения(ТекстДоговора);
КонецПроцедуры

Т.к. реквизит Текст у нас имеет тип «ХранилищеЗначений», надо учесть нюансы работы с ним… В случае чтения объекта используем метод Получить(), а в случае записи используем конструктор объекта Новый ХранилищеЗначения(,).

На этом пока всё. В следующий раз попробую рассказать про использование шаблонов для вставки параметров в текст форматированного документа, например, вместо %Контрагент% вставлять наименование контрагента.

Благодарю за внимание!

upd

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

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

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

Форматирование документа выполняется с помощью команд командной панели форматированного документа.

Кратко перечислим предоставляемые возможности форматирования.

Изменение шрифта

Шрифт документа можно изменить двумя способами:

● Выберите команду Изменение Шрифта и в диалоге Выбор шрифта выберите шрифт, размер шрифта, стиль начертания (Жирный, Подчеркнутый, Наклонный, Зачеркнутый) и нажмите кнопку OK.

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

Выбор цвета фона и текста

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

Текст форматированного документа может содержать ссылки.

Выделите объект (текст или картинку), выберите пункт Вставить гиперссылку. На экран выводится диалог формирования В поле Ссылка укажите адрес гиперссылки и нажмите кнопку ОK.

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

Вставка картинки

В форматированный документ можно вставлять картинки.

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

Вставка символов

Используйте команду Вставить символ для добавления в текст символов из списка.

Вставка списка

Используйте команду Маркированный список, чтобы начать маркированный список, или Нумерованный список, чтобы начать нумерованный. Введите текст.

Чтобы добавить следующий элемент списка, нажмите клавишу Enter.

Чтобы завершить список, нажмите клавишу Enter дважды, или нажмите клавишу Backspace, чтобы удалить последний маркер или цифру списка.

Настройка выравнивания

Текст документа может быть выровнено по левому краю, по правому краю или по ширине документа.

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

Текст с отступами

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

Выделите текст и нажмите кнопку Увеличить отступ, чтобы увеличить отступ или Уменьшить отступ, если необходимо его уменьшить.

Междустрочный интервал

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

Операции перетаскивания

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

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

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

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

Процесс перетаскивания производится с помощью мыши и в основных приемах совпадает со стандартным, применяемым в Microsoft Windows.

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

Возможность простого (без обработки) перетаскивания представлена в таблице.

Нет - указывает на невозможность простого перетаскивания.

Да - простое перетаскивание возможно.

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

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

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

При этом действуют следующие правила перетаскивания:

● Если перемещается строка снизу на строку, расположенную над перемещаемой, то она вставляется перед строкой, на которую перемещается.

● Если перемещается строка вверху на строку, расположенную ниже, то она вставляется после строки, на которую перемещается.

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

● Чтобы переместить строку перед последней, нужно переместить ее перед предпоследней, если строка перемещается сверху.

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

Помимо операций перетаскивания между элементами управления «1С:Предприятие» позволяет осуществлять перетаскивание данных из других приложений в элементы управления. Также можно перетащить мышью текст и список файлов.


Похожая информация.




Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ:
Выселение. Приватизация. Перепланировка. Ипотека. ИСЖ