- 1С html. Cоздание поля html документа
- Размещение реквизитов на форме
- Получение данных
- Заполнение стилей 1с html поля
- Создание тела html документа в 1с 8
- Вывод изображения в html
- Вывод текстового реквизита в html
- Вывод ссылки в html
- Вывод таблицы в html 1с
- Обработка нажатия на ссылку
- Поле HTML документа в управляемом и обычном приложении
- Обычное приложение
- Управляемое приложение
- Поле HTML документа в управляемом и обычном приложении в 1С 8.3, 8.2
- Поле HTML документа — этот элемент позволяет выводить на форму HTML страницы, полученные по URL адресу.
- ПолеHTMLДокумента в обычном приложении
- ПолеHTMLДокумента в управляемом приложении
- Веб браузер в 1С
1С html. Cоздание поля html документа
В статье на примере будут описаны все этапы создания поля html документа. В 1с html поле позволяет представить данные, которые не требуется редактировать, в более эстетичном виде. Разработчик может применить возможности html для создания и настройки формы справочника или бизнес-процесса (как делается в конфигурации Документооборот).
Рассмотрим пример. Разработаем обработку, которая будет представлять элемент справочника Пользователи в виде поля html документа. Для разработки примера я использовал демо БСП 3.1 (управляемое приложение).
Выведем в документ следующие поля справочника:
- Наименование и Комментарий в виде текста;
- ФизическоеЛицо и Подразделение в виде ссылок;
- Фотографию пользователя;
- Контактную информацию в виде таблицы.
Размещение реквизитов на форме
Для начала создадим внешнюю обработку и добавим форму. На форме создадим два реквизита Пользователь (тип СправочникСсылка.Пользователи) и ПредставлениеHTML (тип Строка неограниченной длины). Перетащим реквизиты в дерево элементов. Для элемента ПредставлениеHTML выберем вид Поле HTML документа и отключим отображение заголовка. Должно получится так:
Теперь поработаем над программной частью формы:
- Заполнять html поле данными будем при изменении пользователя. Поэтому создадим для него обработчик события ПриИзменении;
- Работа же с самим полем потребует перехода на сервер, так как нам необходимо выполнять запрос и получать данные из хранилища значений. Поэтому для заполнения данных html создадим функцию ЗаполнитьHTMLПредставление с директивой НаСервереБезКонтекста. В качестве параметра передадим в нее ссылку на пользователя;
В итоге должно получиться следующее:
&НаКлиенте Процедура ПользовательПриИзменении(Элемент) ПредставлениеHTML = ЗаполнитьHTMLПредставление(Пользователь); КонецПроцедуры &НаСервереБезКонтекста Функция ЗаполнитьHTMLПредставление(Пользователь) КонецФункции
Получение данных
Во входные параметры функции ЗаполнитьHTMLПредставление мы передаем только ссылку на пользователя, поэтому для начала надо собрать все данные, необходимые для вывода в html документ. Для этого воспользуемся запросом, который вынесем в отдельную процедуру. Приводить текст процедуры здесь я не буду, чтобы не занимать много места. Ознакомиться с ним можно во внешней обработке, ссылка на которую находится внизу статьи.
Функция возвращает структуру, в которой содержится две выборки. Первая, ВыборкаДанных — содержит одну строку с основными данными пользователя. Вторая, ВыборкаКонтактов — содержит контактную информацию пользователя, в разрезе двух полей: Вид и Представление. Вызов функции получения данных выглядит так:
&НаСервереБезКонтекста Функция ЗаполнитьHTMLПредставление(Пользователь) ДанныеПользователя = ПолучитьДанныеПользователя(Пользователь); Данные = ДанныеПользователя.ВыборкаДанных; Контакты = ДанныеПользователя.ВыборкаКонтактов; Если Не Данные.Следующий() Тогда Возврат ""; КонецЕсли; .
Заполнение стилей 1с html поля
Теперь в функции ЗаполнитьHTMLПредставление будем описывать html документ. Начнем с обязательных тегов и . После чего перейдем к заполнению стилей (тег ), которые будут применяться во всем документе, а также в отдельных его блоках.
HTMLТекст = " | | | |";
Рассмотрим заполнение стилей более подробно:
Создание тела html документа в 1с 8
После описания стилей займемся формированием тела документа. Для этого используем тег .
Вывод изображения в html
Начнем с вывода фотографии пользователя. В элементе справочника она хранится в реквизите Фотография, в виде хранилища значения. Его мы получили вместе с остальными данными пользователя, при помощи запроса.
ДвоичныеДанныеФотографии = Данные.Фотография.Получить(); Base64ДанныеФотографии = Base64Строка(ДвоичныеДанныеФотографии); HTMLТекст = HTMLТекст + "";
Разберем представленный код:
- Хранилище содержит двоичные данные изображения, их необходимо получить. Используем для этого метод Получить(), который распаковывает данные хранилища;
- В html мы можем вывести изображение либо указав ссылку на него, либо использовав его двоичные данные, в кодировке base64. Для этого используем метод Base64Строка;
- После подготовки данных, можно выводить их в документ.
- Используем тег , применяемый для вывода изображений;
- Атрибут src указывает адрес выводимого изображения или его данные. У нас это двоичные данные, поэтому в дополнение к ним необходимо использовать префикс data:image/ и указание типа данных base64.
Для того чтобы отделить изображение от следующей информации, используем тег
. Он означает начало нового абзаца. При описании стилей мы указали, что перед началом нового абзаца устанавливается отступ в 10 пикселей.
Вывод текстового реквизита в html
После фотографии выведем основные данные пользователя в следующем формате:
Начнем с имени пользователя:
HTMLТекст = HTMLТекст + ""; HTMLТекст = HTMLТекст + "Полное имя: "; HTMLТекст = HTMLТекст + ""; HTMLТекст = HTMLТекст + Данные.Наименование; HTMLТекст = HTMLТекст + "
";
Разберем представленный код:
- Для того, чтобы имя реквизита не сливалось с его содержанием, выделим его другим цветом. Для этого используем свойство , позволяющее изменять характеристики текста. В нашем случае это цвет color.
- После вывода данных используем тег
. Он предназначен для перехода на следующую строку.
Вывод ссылки в html
Теперь выведем в документ физлицо пользователя. Так как оно представлено ссылочным типом, оформим его в виде ссылки.
ШаблонНавигационнойСсылки = "%2"; HTMLТекст = HTMLТекст + ""; HTMLТекст = HTMLТекст + "Физическое лицо: "; HTMLТекст = HTMLТекст + ""; НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Данные.ФизическоеЛицо); ФизическоеЛицо = СтрШаблон(ШаблонНавигационнойСсылки, НавигационнаяСсылка, Данные.ФизическоеЛицо); HTMLТекст = HTMLТекст + ФизическоеЛицо; HTMLТекст = HTMLТекст + "
";
Разберем представленный код:
Далее нам необходимо будет вывести еще один текстовый реквизит и еще один ссылочный. Для того чтобы не дублировать код вынесем добавление реквизита в html в отдельную, универсальную процедуру.
&НаСервереБезКонтекста Процедура ДобавитьРеквизит(HTMLТекст, Подпись, Значение) HTMLТекст = HTMLТекст + ""; HTMLТекст = HTMLТекст + Подпись + ": "; HTMLТекст = HTMLТекст + ""; Если ТипЗнч(Значение) = Тип("Строка") Тогда HTMLТекст = HTMLТекст + Значение; Иначе ШаблонНавигационнойСсылки = "%2"; НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Значение); HTMLТекст = HTMLТекст + СтрШаблон(ШаблонНавигационнойСсылки, НавигационнаяСсылка, Значение); КонецЕсли; HTMLТекст = HTMLТекст + "
"; КонецПроцедуры
Вывод всех реквизитов будет выглядеть следующим образом:
ДобавитьРеквизит(HTMLТекст, "Полное имя", Данные.Наименование); ДобавитьРеквизит(HTMLТекст, "Физическое лицо", Данные.ФизическоеЛицо); ДобавитьРеквизит(HTMLТекст, "Подразделение", Данные.Подразделение); ДобавитьРеквизит(HTMLТекст, "Комментарий", Данные.Комментарий);
Вывод таблицы в html 1с
Осталось вывести таблицу контактной информации пользователя. Это делается довольно просто.
HTMLТекст = HTMLТекст + ""; //Шапка таблицы HTMLТекст = HTMLТекст + ""; HTMLТекст = HTMLТекст + "Вид "; HTMLТекст = HTMLТекст + "Описание "; HTMLТекст = HTMLТекст + " "; //Тело таблицы Пока Контакты.Следующий() Цикл HTMLТекст = HTMLТекст + ""; HTMLТекст = HTMLТекст + "" + Контакты.Вид + " "; HTMLТекст = HTMLТекст + "" + Контакты.Представление + " "; HTMLТекст = HTMLТекст + " "; КонецЦикла; HTMLТекст = HTMLТекст + "
";
На этом формирование поля html документа в 1с завершено. Осталось только закрыть теги и вернуть сформированный текст.
HTMLТекст = HTMLТекст + "