1с создать html документ

Обновлено: 04.07.2024

Программное формирование HTML-документа, содержащего ссылки на объекты базы данных 1С
В данной статье рассматривается способ программного формирования HTML документа, содержащего ссылки на объекты базы данных 1С, такие как справочники, документы и т.д. Показан пример построения обработчика события OnClick ПоляHTMLДокумента, для обработки клика на html-ссылке.

Заключение
Обратите внимание что ссылку я формировал следующим образом:
<ИмяОбъектаМетаданных>-<УникальныйИдентификатор> это сделано для того, чтобы в обработчике onclick можно было определить к какому объекту метаданных относится данный УникальныйИдентификатор, потому что имея ТОЛЬКО УникальныйИдентификатор невозможно определить к какому объекту метаданных он относиться. Точнее возможно, но уж слишком долго и неудобно – путем перебора всех метаданных в цикле, для каждого объекта метаданных выполнять попытку <ОбъектМетаданных>.ПолучитьСсылку(Новый УникальныйИдентификатор(НашУникальныйИдентификатор))
Хотя в нашем примере только один справочник, и указывать его вид было необязательно, и так понятно что это УникальныйИдентификатор элемента справочника Номенклатура, но вдруг Вам потребуется работать с несколькими справочниками, вот тут то мой способ задания ссылки Вам и пригодится.
P.S. Платформа 8.2 имеет встроенный механизм работы со ссылками на объекты БД и данная задача наверняка упростится, но это уже другая тема.
Источник

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 01.11.2011   Прочитано: 28825

Распечатать

Похожие FAQ

Еще в этой же категории

Как обновить динамический список или реквизит на форме клиента?  19
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список

Как на управляемой форме разместить список регистра сведений с отбором?  18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка?  14
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма

Программное создание таблицы значений с условным оформлением  12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора

Заполнение списка значений в элементе поле выбора на форме  10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами

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

"Создан документ такой-то"

"Изменен документ такой-то" и т.д.

То, что в форме есть элемент управления именуемый ПолеHTMLДокумента я конечно знал, но вот представилась возможность познакомиться с ним поближе. Было решено реестр обработанных документов выводить в виде html документа содержащего ссылки на эти самые документы, а по клику на ссылке открывать форму соответствующего документа. Здесь мне многие могут возразить: "А почему бы для этих целей не использовать обычный макет, выводимый в табличный документ, а для открытия документов использовать расшифровку? И чем Ваш способ лучше?" Отвечаю: Конечно можно использовать, и мой способ ничем не лучше. Он просто другой. Ведь у хорошего программиста для решения одной задачи должно быть в арсенале несколько инструментов :)

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

Создаем новый отчет, его форму, на форме размещаем элемент управления ПолеHTMLДокумента.

Текст модуля формы:


Процедура ДобавитьТекстHTML ( ТекстHTML , Элемент );
// Ссылку будем формировать хитро:
// Предполагаем что символ "-" не входит в имена объектов метаданных,
// учавствующих в формировании html
// Тогда ссылка будет иметь следующий вид:
// Номенклатура-d341d377-b3b1-11dc-a100-0011d85708ff
// Передавать нашу ссылку будем через атрибут id
СсылкаНаЭлемент = Элемент . Метаданные (). Имя + "-"
+ Элемент . Ссылка . УникальныйИдентификатор ();
ТекстHTML . ДобавитьСтроку ( "<A " + СсылкаНаЭлемент + """ href= """
+ Элемент + """ >" + Элемент + "</A><BR>" );
КонецПроцедуры

Процедура ДействияФормыСформировать ( Кнопка )
Запрос = Новый Запрос ( "
|ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура" );
ТекстHTML = Новый ТекстовыйДокумент ;
Выборка = Запрос . Выполнить (). Выбрать ();
Пока Выборка . Следующий () Цикл
ДобавитьТекстHTML ( ТекстHTML , Выборка . Ссылка );
КонецЦикла;
ЭлементыФормы . ПолеHTMLДокумента . УстановитьТекст ( ТекстHTML . ПолучитьТекст ());
КонецПроцедуры

Ну вот html мы сформировали, теперь что бы ссылки "ожили" надо написать обработчик события OnClick элемента управления ПолеHTMLДокумента.

Процедура ПолеHTMLДокументаonclick ( Элемент , pEvtObj )
htmlElement = НайтиСсылку ( pEvtObj . srcElement );
// Анализируем если произошло нажание не ссылку
Если htmlElement <> Неопределено Тогда
// Если у ссылки есть идентификатор
Если СокрЛП ( htmlElement . id ) <> "" Тогда
// Получаем ссылку из атрибута id
СсылкаНаЭлемент = htmlElement . id ;
Разделитель = Найти ( СсылкаНаЭлемент , "-" );
Если Разделитель > 0 Тогда
// Получаем тип элемента
ТипЭлемента = Лев ( СсылкаНаЭлемент , Разделитель - 1 );
// Получаем УникальныйИдентификатор
ГУИД = Сред ( СсылкаНаЭлемент , Разделитель + 1 );
Справочники [ ТипЭлемента ]. ПолучитьСсылку (Новый УникальныйИдентификатор ( ГУИД )). ПолучитьФорму (). Открыть ();
КонецЕсли;
// Отказ от стандартной обработки клика
pEvtObj . returnValue = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Функция НайтиСсылку ( Элемент )
Врем = Элемент ;
Пока Врем <> Неопределено Цикл
Если НРег ( Врем . tagName ) = "a" Тогда
Возврат Врем ;
КонецЕсли;
Врем = Врем . parentElement ;
КонецЦикла;
Возврат Неопределено;
КонецФункции

Всё можно пробовать! см. Рис.1

Заключение

Обратите внимание что ссылку я формировал следующим образом:

<ИмяОбъектаМетаданных>-<УникальныйИдентификатор> это сделано для того, чтобы в обработчике можно было определить к какому объекту метаданных относится данный УникальныйИдентификатор, потому что имея ТОЛЬКО УникальныйИдентификатор невозможно определить к какому объекту метаданных он относиться. Точнее возможно, но уж слишком долго и неудобно - путем перебора всех метаданных в цикле, для каждого объекта метаданных выполнять попытку <ОбъектМетаданных>.ПолучитьСсылку(Новый УникальныйИдентификатор(НашУникальныйИдентификатор))

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

Стандартный для 1с интерфейс не всегда может удовлетворить заказчика. В этом случае возникает необходимость реализовывать некоторые формы с использованием HTML.
Как известно, встроенный в 1с объект "поле табличного документа" работает с использованием старых технологий. В результате, страничка, написанная в сторонней IDE в 1с может отображаться как угодно, но только не так как требуется.
Когда у меня появилась задача сделать рабочий стол на HTML я сразу понял, что писать веб-код необходимо сразу на платформе 1с, что бы видеть результат Online и корректировать его.
Для меня веб-программирование заканчивается знанием тега <a>. Разнообразные глюки и особенности веб-среды мне просто неизвестны, поэтому сразу видеть что получается - самое то.

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

ВНИАМНИЕ! не нашел необходимого пункта в характеристиках публикации.

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

История версий

0.2

0.3

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

0.4

-- Исправлены ошибки.
-- Поле результата обновляется при изменении в любом из полей настроек.
-- Добавлено копирование строк в дереве блоков.

0.5

-- Исправлены ошибки распознавания файлов.
-- Неиспользуемые стили сохраняются закомментированными.

0.6

-- Скорректированы обработчики обновления результата. Срабатывало не всегда.

-- Наведен порядок в функциях.

-- Добавлено копирование классов с сохранением настроек стиля применительно к новому классу.
-- Добавлены обработчики событий onCick.
-- Закомментированные стили теперь загружаются.

0.7

-- Исправлены выявленные ошибки

-- Релиз адаптирован для работы в немодальном режиме

-- Тестировалось только на платформе 8.3.5

Ждите релиз 0.8:

-- работа с даными 1с без динамического формирования кода HTML

-- отображение картинок без сохранения картинки в файл

-- сохранение и восстановление обработчиков нажатия кнопок и гиперссылок на языке 1с.

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

Разработка рассчитана на div-верстку и использование таблиц стилей.

Основной объект - это дерево блоков div, где корневым элементом выступает body (хоть это и не div, но хранится все в одном дереве).

В этом же дереве описываются блоки обычного текста.


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

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

Особенность первого релиза - регистрозависимость. Что бы добавить описание ранее созданного класса к новому div пишите имя класса в том же регистре, что и ранее.

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

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


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

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

Поддерживаются скрипты - обратите внимание на соотв. закладку.

ВНИМАНИЕ! Гарантировать, что можно распознать любую веб-страничку я не буду .

Планы по развитию инструмента:

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

Добавить таблицу цветов

Подмена путей к картинкам
Копировать наборы стилей в новый класс
Упрощение подбора свойств

Автоматическое обновление результирующей странички при любых изменениях настроек

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

Выбор цвета из таблиц веб-цветов.

Хочу сделать встроенный набор элементов управления в стиле 1с: кнопки, закладки и проч.

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

Программное формирование HTML-документа, содержащего ссылки на объекты базы данных 1С
В данной статье рассматривается способ программного формирования HTML документа, содержащего ссылки на объекты базы данных 1С, такие как справочники, документы и т.д. Показан пример построения обработчика события OnClick ПоляHTMLДокумента, для обработки клика на html-ссылке.

Заключение
Обратите внимание что ссылку я формировал следующим образом:
<ИмяОбъектаМетаданных>-<УникальныйИдентификатор> это сделано для того, чтобы в обработчике onclick можно было определить к какому объекту метаданных относится данный УникальныйИдентификатор, потому что имея ТОЛЬКО УникальныйИдентификатор невозможно определить к какому объекту метаданных он относиться. Точнее возможно, но уж слишком долго и неудобно – путем перебора всех метаданных в цикле, для каждого объекта метаданных выполнять попытку <ОбъектМетаданных>.ПолучитьСсылку(Новый УникальныйИдентификатор(НашУникальныйИдентификатор))
Хотя в нашем примере только один справочник, и указывать его вид было необязательно, и так понятно что это УникальныйИдентификатор элемента справочника Номенклатура, но вдруг Вам потребуется работать с несколькими справочниками, вот тут то мой способ задания ссылки Вам и пригодится.
P.S. Платформа 8.2 имеет встроенный механизм работы со ссылками на объекты БД и данная задача наверняка упростится, но это уже другая тема.
Источник

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 01.11.2011   Прочитано: 28824

Распечатать

Похожие FAQ

Еще в этой же категории

Программное создание таблицы значений с условным оформлением  12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора

Заполнение списка значений в элементе поле выбора на форме  10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Поле выбора

Как ограничить список выбора?  8
Ограничим список элементов, установив отбор в открываемой форме //Пример 1 Процедура СтатьяПДРНачалоВыбора(Элемент, СтандартнаяОбработка) ФормаВыбора = Справочники.ПрочиеДоходыИРасходы.ПолучитьФормуВыбора(, Элемент); ЭлементОтбораВидПДР = Форма Реквизит

Как активизировать, перевести фокус на необходимый элемент на форме?  6
//Текущему Элементу формы присваиваем элемент котровый необходимо активизировать ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТабличноеПоле; Посмотреть все в категории Работа с Формой (Диалог) и её элементами

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