Информационный поток
Задания вакансии материалы разработки сообщения форума
Рубрики статей и материалов
Яндекс-директ

Встраиваем Silverlight-приложение в любую форму 1С: Предприятие

  • Добавить свою публикацию
  • для этого требуется регистрация

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

Сознательно не буду расписывать, что из себя представляет Silverlight, поскольку статья не о нем, точнее не совсем о нем, а о его интеграции в 1С. Достаточно будет сказать, что это что-то вроде Flash, но от Microsoft. А это значит, что мы имеем:

  • Широкие возможности для работы с мультимедиа, графикой, анимацией и т.д.
  • Возможность программирования на любом .NETязыке, дополнительно зная лишь немного XAML.
  • Поддержка IE от 6-й версии (именно это нам нужно!).

Последний пункт означает, что мы можем встроить Silverlight-приложение в поле HTML-документа. Этим и займемся, но сначала, в качестве примера, создадим простейшее приложение в Silverlight.

Создание Silverlight-приложения

Рассказывать буду на примере Visual Studio 2012, разница с прошлыми версиями несущественна. Создаем новый проект (File NewProject…). В левой части выбираем желаемый язык программирования (для полноценной работы с Silverlight нужен C# или VisualBasic), посередине из списка выбираем Silverlight Application, задаем имя проекта, если нужно – директорию, остальное можно не трогать, нажимаем ОК.

ИзображениеИзображение

Появится вот такое окошко:

Изображение

Здесь важно убрать единственную галочку, поскольку приложение у нас полностью локальное и в списке выбрать именно четвертую версию Silverlight, пятая не поддерживается в IE 6.

После создания проекта автоматически откроется окно редактора XAML. Это основное рабочее место по части разметки нашего приложения, если, конечно, не выводить всё программно (а такая возможность есть!). Увы, в рамках этой статьи невозможно будет пробежаться хотя бы по основам, на то есть соответствующие статьи на других ресурсах, моя же задача - отметить то, что необходимо для работы в нашей конфигурации. Поэтому примером будет банальный “Hello world!” с кнопкой.

В левой части экрана есть закладка Toolbox, где располагаются необходимые нам компоненты (в Common Silverlight Controls).

Изображение

Нам нужны TextBlock и Button. Расположим их произвольно на форме, VisualStudio сама сгенерирует необходимый XAML код. Справа внизу располагается палитра свойств выбранного компонента, где можно, например, задать выравнивание элементов относительно окна (Horizontal/Vertical Alignment), отступы, шрифт для нашего TextBlock и т.д. Нас интересует свойство Name, пусть будет “TextBlock1” (важно задать имя, иначе мы не сможем обратиться к объекту из кода) и Text у компонента TextBlock – его нужно очистить. Затем выберем нашу Button и в палитре свойств перейдем на закладку событий (маленькая кнопка со значком молнии). Мы хотим, чтобы нажатие на кнопку выводило на экран “HelloWorld!”, поэтому создадим событие Click, для чего дважды щелкнем в соответствующей строчке, обработчик события создастся автоматически и Visual Studio перенесет вас в файл “MainPage.xaml.cs” на строчку с обработчиком. Именно в этом файле будет писаться основной код, отвечающий как за обработку информации, так и за её визуализацию, причем в руках разработчика почти всё, что может быть реализовано с помощью XAML. К слову, мы могли бы по нажатию кнопки не просто изменять поле Text у компонента TextBlock, но и динамически создать сам объект, но это другая тема. Итак, добавим в обработчик события простой и прозрачный код:

Изображение

Запустим приложение (F5), для его открытия будет использоваться браузер, установленный по умолчанию. Убедимся, что все работает правильно. Итак, заготовка у нас есть, можно встраивать, но для начала разберемся, что нам нужно и как работает Silverlight-приложение. Для этого заходим в папку, которую вы указывали при создании проекта, далее проходим “silv-1c-application\Bin\Debug”, где видим 5 файлов:

Изображение

Нам нужны только 2 – “silv_1c_applicationTestPage.html” и “silv-1c-application.xap”. Первый – это пример, заготовка, создаваемая отладчиком Visual Studio, которая демонстрирует, как Silverlight-приложение встраивается в html-документ. Поскольку мы не собираемся помещать в html поле что-то еще, нам этого файла хватит и в таком виде. Второй – это, собственно, наше приложение, а вернее архив с ним (можете открыть в WinRAR и проверить), в него помещаются все необходимые библиотеки, так что разработчику не приходится волноваться о том, что у кого-то приложение не запустится. Переместите эти файлы в отдельное удобное для вас место.

1С: Предприятие

В нашей конфигурации создадим внешнюю обработку, так удобнее и добавим ей форму. В форме добавим реквизит, например, “ДокументHTML” типа Строка, длина, разумеется, неограниченная. И добавим поле, связанное с этим реквизитом, вид – “Поле HTMLдокумента”. Также нам потребуется два макета, один назовем, например “МакетСтраницы” – тип “Текстовый документ”, второй “XAP” – тип “Двоичные данные”. И сразу скопируем в первый макет текст файла “silv_1c_applicationTestPage.html”, а во второй поместим наш архив “silv-1c-application.xap”. И сразу пробежимся по первому файлу.

После стандартных объявлений html-документа идет код обработчика ошибок Silverlight, написанный на JavaScript – он нас не интересует, во всяком случае, пока. А вот в теле документа имеет смысл пробежаться по параметрам. Их список может расширяться, но рассмотрим только те, которые там уже есть.

Изображение

Итак:

  • "source"– наш *.xap файл. Важно, если вы захотите переименовать этот архив, то его новое имя необходимо вписать здесь.
  • "onError" – указывается обработчик ошибок Silverlight. Да, тот самый, что мы видели выше.
  • "background" – все просто, стандартный цвет фона. Если вы его не будете указывать в вашем приложении, то он будет браться из данного параметра.
  • "minRuntimeVersion" – важный параметр. Это минимальная версия Silverlight, которая должна быть установлена на компьютер, чтобы приложение запустилось, в противном случае вместо него выведется предложение скачать версию посвежее. Менять этот параметр не нужно, он нужен только для проверки версий и не более. Т.е. если вы разрабатывали приложение для пятой версии, а в параметре указали четвертую, никакой совместимости вы не добьетесь, просто программа не будет требовать установки пятой версии Silverlight, даже если её нет. Можете попробовать поставить заведомо неверное значение (например, 10 версии точно нет) и попробовать запустить приложение, Microsoft будет до посинения предлагать скачать новую версию.
  • autoUpgrade – как видно из названия, определяет автоматическое обновление Silverlight, если версия приложения новее установленной на компьютере библиотеки Silverlight.
  • И, наконец, картинка со ссылкой будут показаны, если приложение по каким-то причинам (чаще всего из-за несоответствия версий) не будет запущено. По умолчанию выведется логотип Silverlight с предложением установки.

Разобрались, вернемся к нашей форме и добавим еще реквизиты:

  • СтраницаHTML, тип – Строка, неограниченная, будет хранить текст страницы после получения его из макета.
  • XAP, тип – Произвольный, будет хранить архив *.xap после получения его из макета.

 Изображение

Теперь добавим для формы обработчик события “ПриСозданииНаСервере”, который будет содержать следующий код:

 

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	    //Получаем HTML-страницу из макета
	    МакетСтраницы = ПолучитьДанныеИзМакета("МакетСтраницы");
	    СтраницаHTML = МакетСтраницы.ПолучитьТекст(); //сохраняем текст из нее
	    //Получаем xap-файл для Silverlight из макета
	    XAP = ПолучитьДанныеИзМакета("XAP");
КонецПроцедуры
 
&НаСервере
Функция ПолучитьДанныеИзМакета(ИмяМакета)
	    Обработка = РеквизитФормыВЗначение("Объект");
	    Возврат Обработка.ПолучитьМакет(ИмяМакета);	
КонецФункции

 

Здесь всё довольно просто и не требует пояснения, мы извлекаем наши данные из макетов и сохраняем в реквизитах. Поскольку приложение будет исполняться на клиенте, нам их надо куда-то сохранить. Создаем обработчик формы ПриОткрытии.

 

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	//Формирование путей к файлам и имен
	Каталог = Новый Файл(КаталогВременныхФайлов() + "SilverlightApp\");
	Если Не Каталог.Существует() Тогда
		СоздатьКаталог(Каталог.ПолноеИмя);
	КонецЕсли;
	ВременныйКаталог = Каталог.ПолноеИмя; //Сохраняем путь в реквизит
	
	ИмяФайлаXAP = Каталог.ПолноеИмя + "silv-1c-application.xap"; //путь нашего архива
	ИмяФайлаСтраница = Каталог.ПолноеИмя + "silv_1c_applicationTestPage.html"; //путь html-страницы
	
	//Сохраняем страницу
	ТекстДокВрем = Новый ТекстовыйДокумент;
	ТекстДокВрем.УстановитьТекст(СтраницаHTML);
	ТекстДокВрем.Записать(ИмяФайлаСтраница);
	
	//Сохраняем xap-файл
	XAP.Записать(ИмяФайлаXAP);
	
	//Загружаем страницу в наше поле html-документа
	Элементы.ДокументHTML.Документ.location.href = ИмяФайлаСтраница;
КонецПроцедуры

 

Опять-таки код прозрачен. Стандартной функцией получаем каталог временных файлов, создаем в нем свой подкаталог, добавляем к нему имена двух наших файлов и сохраняем их. Затем остается только указать путь для нашего поля HTML документа. Можно запускать! Если у вас уже установлен пакет Silverlight, то вы увидите ваше приложение в поле, по нажатии на кнопку выводящее “HelloWorld!”. В противном случае вам будет предложено скачать пакет (он небольшой, установка моментальная).

Изображение 

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

 

 

&НаКлиенте
Процедура ПриЗакрытии()
	Если ЗначениеЗаполнено(ВременныйКаталог) Тогда
		Каталог = Новый Файл(ВременныйКаталог);
		Если Каталог.Существует() Тогда
			Попытка
				УдалитьФайлы(Каталог.ПолноеИмя);
			Исключение
				Сообщить(ОписаниеОшибки());
			КонецПопытки;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры


Увы, пока это не более чем два разных приложения, одно из которых помещено в другое. Взаимодействия между ними нет. Хотя даже в таком виде наше встроенное приложение смотрится гораздо лучше, чем то, которое было бы написано отдельно. И уже сейчас с помощью широчайших средств .NET и Silverlight можно воплощать практически любые фантазии заказчика, которые выходят за рамки платформы. Однако далее мы усовершенствуем приложение и заставим-таки 1С и Silverlight общаться друг с другом, но это тема отдельной статьи, тем более, что там придется немного повозиться с JavaScript.

 
0
Читайте также
Установка PostgreSQL 9.0.3-3.1C на Windows Server 2008 x64
"Windows Server 2008 x64 Как установить PostgreSQL 9.0.3-3.1C"
Взаимодействие ActiveX и управляемых форм
"Возможность использования ActiveX в управляемых формах"
Оператор "В ИЕРАРХИИ" в запросе
Принцип действия оператора в "Иерархии"
Разработки
Конфигурация для Кафе и Ресторанов
Автоманизация кафе и ресторанов УТ 10.3
Программа "СКЛАД"
"Программа для управления собственным складом"
Автоматизация отдела доставки 1С (УТ, УПП)
Надстройка для упрощения работы распределения заказов по курьерам
Еще от автора
≡ к списку статей