image_pdfimage_print

К докладу «Создание виджетов(widgets) в 1С» на Event 2015

Доброго времени суток!

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

1-. Самое интересное поле, которое можно вставлять в интерфейс 1С, — это поле HTML документа.

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

2-. Поле это работает пока в старом режиме совместимости. А любой web-дизайнер Вам расскажет кучу страшных историй о совместимости верстки под ie7, ie8 и стандарты современных браузеров. Но проблема не только в показе контекста, большая проблема в том, что старый режим совместимости не может отработать новые функции и свойства современных технологий. И самое плохое, что могут выскакивать ошибки. А для пользователя это совсем неприемлемо.

  • CSS 3 да и CSS 2 отобразится не так, как хотелось бы.
  • <canvas> или ускоритель двухмерной графики — забудьте (http://www.w3schools.com/canvas/default.asp)
  • <svg> не работает
  • остальные примочки HTML5 за бортом

Многие могут возразить, что мы можем добавить чудо-строку в HTML для изменения уровня совместимости  <meta http-equiv=»X-UA-Compatible» content=»IE=edge» />. Но и здесь все не радостно. Стилевое оформление начинает работать, но основной контекст все равно будет при старом режиме.

И продолжая негатив Ж:)

3-.  В 1С в управляемых формах остался один интерактивный метод взаимодействия с полем <ПриНажатии>. <ПриИзменении> и <ДокументСформирован> реагируют уже на изменение контекта, а при событии ПриНажатии, если его не прерывать, доходит до владельца в 1С.

 

В общем, все плохо и руки опускаются, что-либо делать. И теперь будем подниматься вверх, используя опыт и различные наработки.

1+. Поле НТМL работает во всех клиентах  и версиях 1С.

2+. Конечно, приходится использовать библиотеки, совместимые с ie7 или позволяющие подправить код для режима совместимости.

В частности, используем Raphaeljs (http://raphaeljs.com/), которая позволяет рисовать как старыми методами ie, так и и для вэб-клиетов средствами svg

3+. Любые события в HTML можно эмулировать событием ПриНажатии. Конечно, это не волшебная палочка, и проблему быстродействия взаимодействия это не решит, но нормальную работу это обеспечит. И один из интересных методов, заключается в обработке событий ПриНажатии для невидимых элементов. В отличие от 1С невидимые элементы присутствуют в интерфейсе и могут использоваться для взаимодействия с пользователем.

Ну, я надеюсь, у Вас появилась надежда на что-то работающее.

 

Р.S. привожу текст, как он был создан до конференции, и обработки к нему. Новые идеи после конференции требуют дополнительного осмысления.

Обработки на Инфостарте: http://infostart.ru/public/370984/

 

Сравниваем скорость работы динамики внутри 1С и в современных браузерах:

О сколько нам ошибок чудных готовят…

«Никому про наш секрет не говори,
А стекляшек разноцветных набери.
Ты зажмурься и три раза повернись,
А теперь глаза открой и удивись!»
— из детской песни.

Доброго времени суток!

 

1. Осторожно переход на 8.3.7. Конфигурация на 8.3.7 в режиме совместимости 8.2 никогда не вернется на старые версии!

ВыгрузкаЗагрузка1С

 

2. Опять мне пришлось столкнуться с проблемами идентицикации сервисов 1С. Благодаря 1С 8.3 у нас появились http сервисы, а методы работы для них остались такие же как для web-сервисов.

Также было замечано, что http сервисы возращают ошибку 403, а web-сервис ошибку 500. Ошибка исправлется переустановкой всех прав для пользователя 1С под которым они должны работать. И дальнейшем убирание ненужных, типа

Права1С-Сервисы“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — 
Сама 1С рекомендовала замену версии 8.3.6 (8.3.6.2237 и ниже) на версию 8.3.6.2299 платформы «1С:Предприятие 8» http://www.1c.ru/news/info.jsp?id=20420

Хорошая статья по авторизации http://www.bizkit.ru/2013/05/24/1722/

И пример на инфостарте http://infostart.ru/public/302876/

И моя старая статья http://sikuda.ru/archives/376

 

3. И немного позитива для 8.3.6 (при запуске программы из директории common)

1С не обнаружена
Это для тех кто забыл подправить ярлыки 1С.

 

4. Немного тестирования на 8.3.7

Вход в 1С
Это вообще одиночный фантом.

 

5. Медитации тестовых новых версий….

1c84down

1c84fulldown

JSON в 1С. Филосовские размышления.

Старый серый ослик Иа-Иа стоял один-одинёшенек в заросшем чертополохом уголке Леса, широко расставив передние ноги и свесив голову набок, и думал о Серьёзных Вещах. Иногда он грустно думал: “Почему?”, а иногда: “По какой причине?”, а иногда он думал даже так: “Какой же отсюда следует вывод?” И неудивительно, что порой он вообще переставал понимать, о чём же он, собственно, думает. — А. Милн. Винни-Пух и Все-Все-Все…

Доброго времени суток!

Фирма 1С в 8.3.6 предоставила средства для работы с JSON. И дало первое описание (http://v8.1c.ru/o7/201410json/index.htm).

Мы видим несколько основных сценариев использования JSON.
Во-первых, это интеграция с внешними системами через их HTTP интерфейсы: Google Calendar, Salesforce.com, REST интерфейс 1С:Предприятия, SharePoint и т.д.
Во-вторых, это организация собственного HTTP интерфейса прикладного решения.
В-третьих, обмен файлами JSON с внешними системами. Формирование конфигурационных, настроечных файлов. Использование их в процедурах обмена данными, например, с интернет-магазинами.
В-четвертых, это использование файлов JSON для обмена данными между разными приложениями 1С:Предприятия.

 

1. Потоковое чтение и запись JSON

Вот для чего JSON точно не предназначен, так это для потоковой записи. Зачем заменять xml и xml:schema? кто видел огромные файлы JSON? Ладно если кто захочет так его использовать — пусть будет возможность.

2. Сериализация примитивных типов и коллекций в JSON

Отлично. Даже использование двух объектов(ЧтениеJSON и ПрочитатьJSON) вместо одного приемлемо.

Самой 1С обязательно исправить в примере: ОткрытьФайл -> УстановитьСтроку(«[ … ]»). это примитивные типы, какие внешние файлы, зачем?

А ситуация с записью не сразу и разберешься:

 

А если Вы хотите работать с JSON в старых версиях 1C:

 

 

Координы мыши внутри поля html в 1С.

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

Доброго времени суток!

Для любителей выполнять javascript внутри 1С расскажем о нескольких тонкостях с которыми приходиться встречаться.

1. Инициализация внутри html поля происходит два раза. То есть два раза вызывается код. Чтобы этого избежать надо проверить на размер поля отображения, если он нулевой — можно код не выполнять.

2.Координаты мыши внутри поля html определяются отдельно внутри 1С и для вэб-клиента. Чтобы их совместить необходимо написать

3. И для любителей полноты картины Клиент Линекса(Linux client): это layerX, layerY.

Для тех суровых парней, которые мужественно преодолевают глюки

 

P.S.

И кусочек документации от 1С для проникновенности об «Ограничение использования поля HTML документа». http://its.1c.ru/db/v8std/content/2149184379/hdoc (у кого есть доступ в ИТС)

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

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

2. Допустимый пример использования поля с HTML-документом: вывод в формах различных пользовательских инструкций, встроенной справки, путеводителей с оформлением и картинками, которые предназначены только для просмотра информации.

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

Ставим WordPress на IIS и Windows Server.

Доброго времени суток!

Нравиться мне WP (WordPress) все больше и больше. http://www.forum.mista.ru/topic.php?id=696364. Поэтому надо поставить себе тестовый сервер. А какие у нас здесь сервера — Windows 2008 R2. И так приступим:

  1.   Дистрибутив php для Windows VC11 x86 Non Thread Safe http://windows.php.net/download. Не забутьте на Windows Server поставить Visual C++ Redistributable for Visual Studio, а то долго будете искать проблему.
  2. PHP Manager for IIS
  3. MySQL, лучше сразу MariaDB
  4. И сам WordPress

WP рекомендует нам устанавливать на Apache или Nginx (http://wordpress.org/about/requirements/), но если Вам не разрешают их устанавливать то этот пост точно для Вас.

И так Установка на IIS 7.5, 8:

  1. Добавляем роль Вэб сервер.
  2. Ставим флажок в папке «Разработка приложений» над пунктом CGI.
  3. Распаковываем папку с php.
  4. Даем права для испольнения над директории в которой у Вас распакован php. Пользователю IIS_USR  даем права
    • Чтение и выполнение
    • Список содержимого папки
  5. Устанавливаем PHP Manager
  6. Устанавливаем MariaDB и создаем базу.
  7. Распаковываем WP в поддиректорию wwwroot и колдуем с wp_config.php

И несколько полезных советов:

  1. Для прямого обновления и скачивая плагинов добавим параметр в wp_config.php — define(‘FS_METHOD’, ‘direct’); и директории wp-content даем права пользователю IUSR на изменение.
  2. Если у Вас севреру закрыт доступ в интернет, то Вам надо дать доступ на сайт api.wordpress.com для обновлений, тем  и плагинов .

 

Рекомендуемые plugins:

WP CLONE — быстрый backup и restore данных. Одна большая кнопка, пока несбывшаяся мечта в 1С.

Несколько полезных заклинаний для Linux(Ubuntu, Mint):

1. Перезапуск апача — sudo /etc/init.d/apache2 restart

2. Установка прав на директорию интернет сайта —  sudo chown -R «owner»:»group» «dir»

И ссылка на полную инструкцию:
http://community.linuxmint.com/tutorial/view/486
https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-14-04

Включаем звук в 1С. Доступно и всерьез.

Доброго времени суток!

Просматривая возможности вывода звука в html5 http://w3schools.com/html/html5_audio.asp я задумался как с этим  обстоит дело в 1С.

Начнем по порядку.

1. Когда в 1С не было управляемых форм, вывод звука основывался на системных вызовах Windows. Можно было зарегистрировать специальный ActiveX и вызвать его специальную функцию (http://www.modber.ru/catalog/item2121.html, http://infostart.ru/public/58136/). Например в http://infostart.ru/public/85155/ используется DynamicWrapperX и следующий код:

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

2. Поэтому, вооружившись только средствами интернета, будем воспроизводить звуки в 1С.
Начнем работать с  тэгом audio. В интернете у всех уже современные браузеры и все работает. Но мы же будем звучать из 1С. Значит первое что нам надо — это воспроизвести звук в тонком клиенте. Так как поле HTML в 1С работает в режиме совместимости IE7, то мы воспользуемся старый тэгом для IE bgsound.

Мы можем хранить звук в виде макетов двоичных данных. И использовать их внутри HTML поля. подобным образом:

/* И добавить скрипт в страницу */

Можно использовать вместо тэга bgsound использовать embed или object, но это все-таки неявные ActiveX элементы (http://infostart.ru/public/90660)

3. А как нам работать в web клиенте? Правильно, в web клиенте 1С работает все по другому, ближе к современным стандартам. Возьмем в руки тэг audio, попробуем сделать данные во временном хранилище и получим полным облом. Так пока сделать звук не удалось.

Но мы используем другой метод, не столь распространенный. Надо превратить звук в текст. Скажете сказки? Нет читаем спецификации и доделываем.
http://jsfiddle.net/sikuda/eY8Ba/

Обработка доступна на Инфостарте  http://infostart.ru/public/248770/

Р.S.
Ну вы понимаете к чему я клоню — пора делать простые игрушки.

Вначале Internet Explorer 11 и 1C были не вместе.

 

Доброго времени суток!

Движения в сторону новых браузеров Microsoft фирма 1С стала совершать( IE10 http://sikuda.ru/internet-explorer-10-dlya-windows-7-vyishel/) . Но мир не стоит не месте. появился новый IE11 и Microsoft всем обновила браузер на компьютере.

Сначала IE11 не входил в список поддерживаемых браузеров 1С.
Bad1CBrowser

 

 

 

 

 

Теперь он добавлен в список Microsoft Internet Explorer 8.0, 9.0(x86), 10(x86), 11(x86) для Windows (http://v8.1c.ru/requirements/)

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

«Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko»

Или вообще прикинуться Chome

Chome — userAgent «Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36»

Это мы оставим на разборки MS — Google, а сами займемся 1С.

 

Что-же у нас в тонком клиенте:  У нас все стабильно и это хорошо:

UserAgent1C

 

И если некоторые и предлагают для html поля прописывать строчку совместимости с новой версией <meta http-equiv=’X-UA-Compatible’ content=’IE=Edge’ /> то это меняет картину только отчасти:

UserAgent1C-Comp

Да первая инициализация поля html происходит с новым userAgent, но выполнение основного контента и обработка событий внутри поля находиться в режиме совместимости IE7.  Так. что воздержимся от таких половинчатых решений и будем жить в режиме совместимости и надеяться на 1С 8.5 и выше

Обработка 1С для проверки на сайте Инфостарт:  http://infostart.ru/public/171763/

IE глазами дизайнера
Internet Explorer

 

 

Сказ о том, как показать в браузере картинку с локального диска.

«Делегаты! Если у меня когда-нибудь будут дети, я повешу им на стену портрет прокуратора Иудеи Понтия Пилата, чтобы дети росли чистоплотными. Прокуратор Понтий Пилат стоит и умывает руки — вот какой это будет портрет.»

Венедикт Ерофеев. Москва-Петушки

Доброго времени суток!

Здесь на форуме Mista.ru я стокнулся с формулировкой вопроса «как отобразить картинку, лежащую на локальном диске пользователя» И понял, что понимание безопасности в интернете у 1С людей отсутствует как класс. Поэтому еще раз здесь приведу пример, того как должна работать интернет безопасность и что не так в 1С.

Человек не понимал, что ActiveX в интернете не работает. НИКАК!

Он пытался из браузера вызвать следующий код

Что же нам выдают браузеры при запуске локального файла на компьютере:

IE10 при запуске локального файла 1) спрашивает запуска небезопасных элементов 2) И делает свое темное дело.

ActiveX-IE10

Firefox — ошибка

ActiveX-FirefoxChrome — ошибка

ActiveX-ChromeА заходя на старницу сайта из интернета http://sikuda.ru/1c/activeX_Oblom.html получаем ошибку для всех браузеров (смотреть в отладке — F12)

ActiveX-IE10-out1

 

А теперь о том что не так в 1С: 1. Да браузер не может загружать Вашу страницу в интернете и одновреммено показать Вам и например локальную картинку. http://sikuda.ru/1c/chudaki.html

1. Потому, что он работает с сайтом и у него нет одновременного доступа к локальным данным!

БраузерЛюбой

2. В тонком клиенте Windows 1C это не так. Здесь Вы видите одновременно и картинку с сайта и локальную картинку на диске пользователя.То есть внутри тонкого клиента 1с код обработки может получить доступ к локальному ресурсу. То есть прочитать данные Вашего компьютера без вашего мнения. Это плохо!

ТонкийКлиент1С

Для недоверчевых пишем инструкцию, как это проверить:

1. Создадим картинку на локальном диске C:TempBadIE.jpg
2. Берем обработку из статьи http://sikuda.ru/vstroennyj-brauzer-v-1s-kto-zdes/
3. Заходим в тонким клиентом 1С 8.2.18.102 на ws=»http://trade.demo.1c.ru/trade»;;
4. Открываем обработку 1. Вводим  адрес http://sikuda.ru/1c/chudaki.html .

 

Здесь мы имеем ситуацию смены идеологии безопасности. Когда на смену локальным и локально сетевым информационным системам приходят глобальные системы. Для большинства естественно, что запускаемая программа имеет полный доступ к локальному диску. Но если эта программа берет данные из интернета? А если эта программа может выполнить код загруженный из интернета? И передать ваши локальные данные в интернет? Это меняет идеологию безопастности программы полностью. Видим ли в 1С озабоченность безопасностью клиентов? У них только движения по безопасности сервера.

А в сухом остатке это класический открытый XSS. в поле html.

Если мы начинаем смотреть на 1С как на сервис https://1cfresh.com то неконтролируемое взаимодействие локальных и интернет ресурсов будет огромной дырой в безопасности.
Но всем некогда, все работают http://www.forum.mista.ru/topic.php?id=679824 и мне это напоминает историю с безопасностью Windows при распространении интернета.

Продолжение исследование безопасности: http://sikuda.ru/archives/1715
Р.S.

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

Градиенты градиенты, а я маленький такой.

Доброго времени суток!

Рисование графики в 1С с помощью javascript библиотеки Raphael затягивает. И сегодня мы более подробно осветим тему заполнение цветом различных фигур и использовании градиентов.

Начальная обработка для 1С на infostart: http://infostart.ru/public/191248/

 

А теперь в поле для заполнения кода вставим:

Ну подумаешь красный шар. Эка невидаль. Его нарисовать можно и другими средствами. Их целый вагон.
Хорошо. А теперь последнюю строку заменим на другую:

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

red_ball

В документации к Raphael написано:

Линейный градиент пишется в формате: “‹угол›-‹цвет›[-‹цвет›[:смещение (‹offset›]]*-‹цвет”, например: “90-#fff-#000” — наклон 90° градиент от белого к черному или “0-#fff-#f00:20-#000” — наклон 0° градиент от белого через красный (на 20%) до черного.
Радиальный градиент записывается: “r[(‹fx›, ‹fy›)]‹цвет›[-‹цвет›[:смещение (‹offset›]]*-‹цвет”, например: “r#fff-#000” — градиент от белого к черному или “r(0.25, 0.75)#fff-#000” градиент от белого до черного с точки фокусировки на 0.25, 0.75. Точка фокуса координаты находятся в диапазоне 0..1. Радиальные градиенты могут быть применены только к кругу и эллипсу.

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

<svg xmlns=»http://www.w3.org/2000/svg» style=»left: 0px; top: 0px; overflow: hidden; position: absolute;» width=»640″ height=»480″ version=»1.1″ xmlns=»http://www.w3.org/2000/svg»><desc>Created with Rapha?l 2.1.0</desc>
<defs>
<radialGradient id=»0r_0.25__0.75__f00-_400″ fx=»0.25″ fy=»0.75″>
<stop stop-color=»#ff0000″ offset=»0%» />
<stop stop-color=»#440000″ offset=»100%» />
</radialGradient>
</defs>
<circle style=»opacity: 1; fill-opacity: 1;» opacity=»1″ fill=»url(#0r_0.25__0.75__f00-_400)» fill-opacity=»1″ stroke=»#000″ cx=»200″ cy=»200″ r=»150″ />
</svg>

Здесь я советую на будущее погрузиться и узнать немного о CSS3 и SVG для градиентов: htmlbook, www.w3schools.com

 

И сделаем имитацию, как это работает внутри тонкого клиента 1С. Переустанавливаем(F12) режим браузера в совместимый и режим документов в IE7:

<?xml:namespace prefix = «rvml» ns = «urn:schemas-microsoft-com:vml» />
<rvml:shape style=»HEIGHT: 1px; POSITION: absolute; LEFT: 0px; FILTER: ; TOP: 0px; WIDTH: 1px» raphael=»true» raphaelid=»0″ coordsize = «21600,21600» filled = «t» fillcolor = «red» stroked = «t» strokecolor = «black» path = » ar1080000,1080000,7560000,7560000,4320000,1080000,4320000,1080000 x e»><rvml:stroke opacity = «1» miterlimit = «8»></rvml:stroke>
<rvml:skew on = «t» matrix = «1,0,0,1,0,0» offset = «-.5,-.5»></rvml:skew>
<rvml:fill rotate=»false» type = «gradientTitle» color2 = «#400» angle = «0» focus = «100%» focusposition = «.25,.75» focussize = «0,0» method = «none» colors = «0 red»></rvml:fill>
</rvml:shape>

Технологии Microsoft VML и Raphael помогают нам, получить практически такую-же картинку, что и в предыдущем примере.

Но одно разочарование нас все-таки ждет. В тонком клиенте 1C Linux градиент не работает. Может там просто webkit старый? Ну как обычно поворчим на 1С…

id=»0r_0.25__0.75__f00-_400″ fx=»0.25″ fy=»0.75″>

Когда размер имеет значение. Определение размера поля html в 1С в пикселях.

Доброго времени суток!

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

  1. Определяем размер для разных режимов
  2. Проверяем на 0.
  3. Инициализация элемента html проходит несколько этапов, но именно последний выдаст нам не нулевой размер контейнера.
  4. Вызываем этот код в функциях window.onload = function() и window.onresize = function() в javascript.

Кусок кода на javascript для html поля:

P.S. Вот так можно потихонечку можно обжиться внутри 1С с программирование на javascript.