1с форматированный документ вставить таблицу
Форматированный документ предназначен для оформление текста. Его можно выделить жирным, подчеркнуть, увеличить/уменьшить шрифт, центрировать и т.д. Также можно добавить картинку. Т.е. в 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) Выделить нужное количество ячеек и вставить, форматирование только будет не из оригинальной таблицы. Ну или свою область нарисовать и программно выводить.
(3) почему то не получается. Не выресовывает.
(1) походу никак, видимо форматированный документ - это достаточно урезанный html.
Сделал один и тот же текст страницы, подпихнул его в поле HTML и в поле Форматированного документа.
Результат на скрине.
Как мы видим ФД - просто игнорит таблицу
(12) так в самом письме скорее всего, форматированный документ - это лишь для ввода пользователем,
а физически, наверняка это html документ, который потом из этого форматированного документа вычленяется.
В каких то конфигурациях, даже переключатель режимов просмотра есть.
Почему бы не сделать всё в ТабДоке, сохранить во временный файл в формате HTML, получить текст HTML из файла.
Прикрепил скрин с ожидаемым результатом. Хотелось чтобы так отображалось в документе Исходящее электронное письмо.
(17)
ну, как я и говорил.
реквизит письма там обычный текст, а не форматированный документ.
Форматированный документ - это лишь для удобства редактирования применяется, на форме.
А при записи объекта - из него извлекается текст - и сохраняется в реквизите - ТекстHTML
(17) ну а если ты прямо хочешь у себя в базе, открывая форму письма исходящего - лицезреть именно с таблицами, тогда придется дорабатывать документ, и запиливать отображение письма в поле HTML.
(19)спасибо большое) А что нужно сделать для того, чтобы так стало отображаться, можете в двух словах описать?
а источником и для того и для другого у тебя один и тот же реквизит ТекстHTML будет.
Только все это надо делать, там чтобы функционал документа не попортить. Переключатель режимов там сделать, или на вкладках разных. уж там как фантазии и умения хватит
Начиная с версии 8.2.11 в платформе появился новый объект – Форматированный документ. Так как не нашел на Инфостарте ни одного упоминания об этой функциональности, решил опубликовать небольшую статейку о том, что это за объект и какой функционал он добавляет.
Начиная с версии 8.2.11 в платформе появился новый объект – Форматированный документ. Так как не нашел на Инфостарте ни одного упоминания об этой функциональности, решил опубликовать небольшую статейку о том, что это за объект и какой функционал он добавляет.
Прошу учесть, что это моя первая публикация. Итак, начнем…
Предназначение
Форматированный документ предназначен для оформление текста. Его можно выделить жирным, подчеркнуть , увеличить / уменьшить шрифт, центрировать и т.д. Также можно добавить картинку. Т.е. в 1С теперь можно отформатировать текст, примерно, как в MS Word и др. подобным программам. Это может быть удобно при оформлении различных договоров или, например, при редактировании электронного письма. Таким образом, у нас есть возможность привести текстовый документ в тот вид, который мы пожелаем.
В синтакс-помощнике есть описание.
Объект ФорматированныйДокумент (FormattedDocument) имеет одноименный тип данных, который поддерживает функционирование данного объекта и имеет следующие методы:
Вставить (Insert)
Добавить (Add)
Записать (Write)
ПолучитьHTML (GetHTML)
ПолучитьЗакладкуКонца (GetEndBookmark)
ПолучитьЗакладкуНачала (GetBeginBookmark)
ПолучитьЗакладкуПоПозиции (GetPositionBookmark)
ПолучитьПозициюПоЗакладке (GetBookmarkPosition)
ПолучитьТекст (GetText)
Удалить (Delete)
УстановитьHTML (SetHTML)
Доступен во всех типах приложения: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Нельзя указать новый тип данных в качестве типа реквизита.
Есть одна важная особенность этого типа. Нельзя задавать тип «Форматированный документ» для реквизита объекта (справочника, документа и др.). Но есть возможность указывать его для реквизитов формы.
Возникает вопрос, как же нам сохранить те изменения при форматировании текста, которые сделал пользователь? Для этого применяется специальный объект «ХранилищеЗначения», который может содержать в себе любой тип данных, в том числе и «форматированный документ». Таким образом, в базе данных сам объект будет храниться как «Хранилище значения», далее при открытии формы необходимо будет извлечь объект из хранилища, отобразить его на форме используя тип «ФорматированныйДокумент». Если пользователь решит сохранить изменения, то при записи объекта нужно снова взять объект «форматированный документ» и записать его в хранилище.
Пример работы
Возьмем за основу каркасную конфигурацию, создадим в ней справочники «Контрагенты» и «Договоры». Установим справочник «Договоры» подчиненным справочнику «Контрагенты» и создадим реквизит «Текст» с типом ХранилищеЗначения.
Создадим форму элемента справочника «Договоры» и добавим на нее новый реквизит, который назовем «ТекстДоговора», укажем тип данных «ФорматированныйДокумент». Обратите внимание, что реквизит «Текст» с типом «ХранилищеЗначения» на форму поместить нельзя.
Создадим также командную панель (меню) содержащую необходимые кнопки для управления форматированным документом. Для этого надо добавить в форму «Группа – Командная панель» и указать в свойстве «Источник команд» реквизит формы «ТекстДоговора» с типом ФорматированныйДокумент.
Запускаем отладчик, проверяем, что у нас получилось…
Все бы хорошо, но есть некоторые проблемы:
Во-первых, если ввести текст и отформатировать его должным образом, то признак модифицированности для формы не возникает. Таким образом, случайно нажав на кнопку закрытия формы, система не задавая вопросов закрывает ее без всякого сохранения.
Для того чтобы подобные неприятности не случались, необходимо установить флаг у свойства «Сохраняемые данные» реквизита формы «ТекстДоговора». В результате, при любом изменении данных в реквизите «ТекстДоговора», будет устанавливаться признак модифицированности формы, а при ее закрытии система спросит: «Сохранить изменения?».
Во-вторых. Попытаемся закрыть форму и сохранить введенные данные. Заново открыв сохраненный договор, видим что текст введенный в форму договора отсутствует. Почему так происходит?
Все дело в том, что мы делаем изменения в реквизите формы, который у нас никак не связан с реквизитом объекта. Давайте настроим связь между реквизитом формы «Текст договора» с типом данных «ФорматированныйДокумент» и реквизитом объекта «Текст» с типом «ХранилищеЗначения».
Пропишем эту связь программно в модуле формы. Опишем алгоритм.
- При открытии формы, необходимо будет обратиться к реквизиту объекта «Текст», чтобы прочитать из него данные и записать их в форматированный документ «Текст договора».
- При записи объекта, берем содержимое форматированного документа и помещаем его в реквизит объекта «Текст» с типом «ХранилищеЗначения».
Таким образом у нас будет возникать эффект, что все изменения производимые пользователем, будут сохраняться в базе данных.
Нам понадобятся следующие обработчики событий:
оно удобно тем, что при ошибочном внесении изменений в данные формы, можно нажать кнопку «Перечитать» и вернутся к исходным данным.
- событие ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Т.к. реквизит Текст у нас имеет тип «ХранилищеЗначений», надо учесть нюансы работы с ним… В случае чтения объекта используем метод Получить(), а в случае записи используем конструктор объекта Новый ХранилищеЗначения(, ).
На этом пока всё. В следующий раз попробую рассказать про использование шаблонов для вставки параметров в текст форматированного документа, например, вместо %Контрагент% вставлять наименование контрагента.
Начиная с версии 8.2.11 в платформе появился новый объект – Форматированный документ. Так как не нашел на Инфостарте ни одного упоминания об этой функциональности, решил опубликовать небольшую статейку о том, что это за объект и какой функционал он добавляет.
(4) Red_Devil, скажем так, о "форматированном документе" действительно узнал из курса "Профессиональное программирование в 1С 8.2" от двух замечательных авторов Евгения Гилева и Фарита Насипова. Но не вижу ничего страшного в том, чтобы поделиться знаниями с другими людьми.
(5) Программная обработка форматированного документа реализована слабо, согласен.
(4) (9) Подскажите хотя бы в каком разделе курса? Оч. нужны подробности, на вскидку по содержанию не нашел, а видосов там просто вагон. Спасибо!
И ни один из популяризаторов не говорит о том, что изменение содержания и форматирования содержания на уровне встроенного языка не реализовано. Хотите управлять программно - разгадывайте формат хранения документа в HTML и собирайте документ тегами вручную.
А нельзя ли ссылки на картинки дать не с ЖЖ, а с самого инфостарта или более-менее благонадёжного сайта? У меня на работе порезан ЖЖ, в частности.
Спасибо. Полезная статья.
Замечена некорректная работа с текстом, вставленным из Word - вот пример если его попробовать залить:
Побольше бы таких первых публикаций :)
На данный момент обьект работает не стабильно и ОЧЕНЬ медленно. Попробуйте вставить туда 5 фото и проверить время открытия в тонком клиенте. При большом количесте инфы часть ее теряется при сохранении. Форматирование тоже иногда слетает. Сам пользуюсь, но только от того, что не хочу использовать внешние компоненты.
Вопрос:
Поддерживает ли форматированный документ многомерные списки?
В процессе редактирования не получилось.
Увеличение уровня отступа выполняется, а дальнейшее уменьшение уровня отступа начинает нумерацию сначала.
Я вот одного не понимаю: а что, в 8.1 с полем HTML документа никто не работал? По описанию - практически ничем не отличается. Разве что картинку можно теперь вставить без геморроя.
Что было замечено при программном переносе данных с сайта в форматированный документ.
Получаю html документ с сайта, выбираю нужный кусок. В html-коде присутствует следующее:
"font-size: 10pt; color: black; line-height: 150%; font-family: Arial" Патент №
"font-size: 10pt; color: black; line-height: 150%; font-family: Arial" Дата регистрации
После выполнения у форматированного документа УстановитьHTML()
"line-height: 150%" заменяется на "line-height: 150" (съедается процент) и следовательно очень большие интервалы у меня между строк
Так что лучше использовать "line-height: 1.5".
А у меня почему то «Командная панель» не активная и не получается форматировать текст? «Источник команд» реквизита формы «ТекстДоговора» с типом ФорматированныйДокумент я указал.
Да и текст введенный в «ТекстДоговора» не сохраняется. Процедуры в модуль формы добавил. Что может быть не так?
(21) Несколько часов потратил на поиск решения подобной проблемы - поле форматированного документа было доступно только на просмотр. Эта же конфигурация на другом компьютере работала нормально.
Нашел - было отключено выполнение активных сриптов в настройках безопасности Internet Explorer
Но при включении скриптов в другой форме с HTML документом начинают выскакивать ошибки выполнения сценариев
А показывать HTML страницы в форматированном документе не получается по нормальному - вообще корявит всю страницу до жути.
Т.е. 1Ска опять жутко косячит.
И что делать не могу сообразить, в одном случае мне нужен форматированный документ, так как надо дать пользователю возможность создавать форматированный текст, а в другом случае мне нужен нормальный просмотр веб-страниц с возможностью перехода по ссылкам и без всяких ошибок выполнения скрипта
Если использовать ПолеформатированногоДокумента в управляемой форме, запущенной в обычном режиме, то картинки не отображаются. Сохраняешь стр на диск как html, а они там есть.
(22) adapter, столкнулся с подобной ситуацией.
Но дело оказалось немного в другом.
Если получать данные на клиенте, то картинки не отображаются, если на сервере - все ок.
Например, вот так не работает:
И даже так не работает:
Работает только так:
Ок. Ну допустим, сделали в форматированном документе шаблон, например, договора. А как его на печать вывести?
Публикации 2 года, а где же обещанные:
"В следующий раз попробую рассказать про использование шаблонов для вставки параметров в текст форматированного документа, например, вместо %Контрагент% вставлять наименование контрагента."
идея сначала понравилась, но за 2 года так этот объект и не получил развития.
таблицу стилей CSS?
Вместо "" можете вставить свое определение стилей
(30) adapter,
Тут даже не нужна своя таблица стилей и достаточно добавить 1 строку, например, при открытии формы с объектом html
При сохранении/восстановлении значения через форматированный документ терялись переносы строк. Абзацы сохранялись, а если в тексте были символы переноса строки, они терялись.
Оказалось, что после вставки из Word символы переноса строк в HTML превращались в тэг . При открытии этот тэг удалялся. Очевидно, как закрывающий тэг без открывающего считался ошибочным.
Вылечивается например ПередЗаписью примерно так:
ТекстОригинал.ПолучитьHTML(ТекущийОбъект.ТекстОригинал, мСтруктураОригинал);
ТекущийОбъект.ТекстОригинал = СтрЗаменить(ТекущийОбъект.ТекстОригинал, "", "
");
(31) oks-nt,
Большое спасибо! Долго не мог понять в чем дело. Кстати, эту ошибку метода ПолучитьHTML исправили в 8.3.5.1068
В младших релизах вместо вызова
надо использовать функцию:
Спасибо, хороший материал, как раз в тему!
Попробовал на 8.3.6 все работает, жду обещанных продолжений по этой теме :)
это нужно делать дополнительную обработку, т.к. я нигде не нашел такой возможности?
А цвет фона, текста сохраняет у вас? У меня не сохраняет, все остальные выравнивание, наклонность шрифтов и т.д., сохраняет
Если вставить картинку в тонком клиенте, то в веб клиенте она не отобразится, и наоборот. Проблема возникает не во всех форматированных документах, лишь в некоторых формах. Картинка ссылается на несуществующую url в e1cib. Видимо это как то связано с параметром formUUID. Кто нибудь решал подобную проблему?
На формах вычитал, что 1С работает по стандарту html 1.0 который и обрезает теги таблицы. Может можно как-то его изменить?
Коллеги, ФорматированныйДокумент даже в релизе 8.3.11.3034 полная хрень. Если задумали использовать его для масштабных задач, одумайтесь. Придумайте альтернативу. Иначе наживете себе проблему, решать которую будет сложно.
Подскажите пожалуйста, может кто сталкивался: 1С:Предприятие 8.3, учебная версия (8.3.8.1933)
На управляемой форме 3 поля: ФорматированныйДокумент и два ПолеВвода. Если активировать ПервоеПолеВвода (установить на нем курсор), и программно сменить фокус Этаформа.ТекущийЭлемент = Элементы.ВтороеПолеВвода;
то фокус меняется, обратно также со второго поля на первое, а вот если курсор в Документе то смена фокуса не происходит.
Это глюк элемента ФорматированныйДокумент или у меня что-то может блокировать смену фокуса?
Например, есть 2 ситуации:
1. Если фокус в полях, вызываем диалоговое окно, закрываем его, тыкаем мышкой в документ, - вылетает ошибка сценария ИЕ, если отключить сценарии в ИЕ то документ вообще не работает на ввод и чтение (кнопки тусклые). Поэтому настройки ИЕ не трогаю, ошибку как-то умудрился обойти путем переключения фокуса ввода программно после закрытия диалогового окна.
2. Если изначально фокус в документе, вызываем диалог, закрываем его, и также ошибка, но обойти уже не получается, так как не сменить программно фокус.
Фокус не меняется независимо от того есть диалог или нет.
Пока не могу понять как сценарии могут влиять на фокус элемента формы 1С. Сможете протестировать как у вас дела с фокусом?))
В такси нет функции драг-энд-дроп. Можно как обещали на презенации 1с 8? Сделать одно окно список сотрудников, другое карточку текущего сотрудника а третью - сам форматированный документ. И перетаскивать мышкой поля из карточки сотрудника в договор ( и из связанных с ним регистров сведений - адрес, данные паспорта) ? Или надо копипастить? А как скопипастить адрес из нескольких полей 1с в одну строку? Это на каждую ячейку надо нажимать?
И доп.реквизиты-сведения тоже нужны.
А нельзя сделать универсальную печать к каждому справочнику или документу с выводом всех полей и связанных реквизитов в читабельном виде (с галочками что выводить а что нет)?
Или все это уже есть в 1С Документооборот? А мне в БП 3 надо..
И чтоб шаблон моего договора сохранить отдельно куда нибудь, а результат - в справочник или документ (чтобы спросило куда это прицепить или сохранить в файл?)
Колонтитулы с нумерацией строк - нашла, в просмотре печати. А можно в колонтитулы добавить имя пользователя/компьютера/базы данных?
А изменить текст в колонтитуле всего страниц на "Листов: 3" вместо 3 (это не по ГОСТ).
Я понимаю какая радость от возможности вставить сюда картинку, но вот гиперссылка, без возможности использовать никакие объекты базы для вставки это уже печалька.
Почему его нельзя вызвать из меню создать новый?
Почему в PDF оно сохраняет без картинок и в word не сохраняет совсем.
Почему рисунки показываются на предварительном просмотре но не печатаются (потому что галочка в настройках печатать фон и рисунки не установлена). Предварительный просмотр должен соответствовать распечатке.
Куда-то колонтитулы пропадают при изменении режимов страниц и масштаба.
И пока все.
Огромное спасибо автору за статью.
Что-то мне подсказывает, что в пдф сохранять придётся через COM ворда или какой-нибудь PDFCreator. А насчёт вставки ссылок - да, недоделано явно. Вставка скудная, отлова события клика нет ваще, действительно печалька.
Кроме прочего в статье присутствует пример создания таблицы с любым количеством колонок и столбцов. Несколько строк с форматированием текста и таблицы. Создание "объединенных" ячеек.
В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ.
Тестировалось на Office 2007.
Исп. переменные: "ПутьКФайлу" - строка. Полное имя файла в формате MSWord.
"Ссылка" - ДокументСсылка (в моем случае - счет).
Похожие FAQ
Еще в этой же категории
Как в excel сохраненный из 1С вставить новый лист? 15
Я думаю, все сталкивались с однолистовым excel файлом из 1С, у которого на первый взгляд, нет возможности добавить листы. Все не так страшно - их просто скрыли или, что чаще всего - даже не отображали (обусловлено созданием файла из стороннего прил Как сформировать документ в Word из 1С? (Active Document) 14
ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _ Давайте рассмотрим на примерах как это делается! =) Мне известно 2 способа: 1. Путем замены шаблонного текста в макете Wordа. 2. Путем вставки текста с помощью закладок в Wo Экспорт и Импорт данных 1С - Microsoft Excel 12
Экспорт Процедура ОсновныеДействияФормыЭкспорт(Кнопка) - выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel с указанным именем, используя преобразование данных к типу число и типу строка; Процедура Основ Преобразование XLS в MXL 10
Конвертация таблиц из Excel в MXL - скачать Converter Excel v MXL: Для 8.х - Для 7.7 - // Выбор файла Microsoft Excel Procedure FileNameStartChoice(Element, StdProcessing) StdProcessing = False; DialogFile = New FileDialog(FileDialogMode. Работа с MS Word через OLE 10
В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и опис Посмотреть все в категории Работа с Microsoft Office и OpenOffice
Читайте также: