image_pdfimage_print

Один из способов вызвать функцию 1С из JavaScript для обычных и управляемых форм

Оригинал статьи:
http://x1c.ru/kak_visvat_1c_is_js/

Это статья для Специалистов по 1С.

Иногда к нам обращаются с вопросом по поводу того, как из JavaScript’а в ПолеHTMLДокумента вызвать функцию 1С.

В этой статье мы приведем сразу 2 примера:

  • вызов функции JavaScript в ПолеHTMLДокумента из 1С
  • вызов функции 1С из JavaScript в ПолеHTMLДокумента

В первом случае функция вызывается достаточно просто:

ЭтаФорма.Элементы.хНТМЛ.Документ.parentWindow.MyFunction ();

Второй случай чуть сложнее. Суть его реализации заключается в следующем:

  1. Объявить экспортную функцию в форме (с ключевым словом Экспорт).
  2. Передать ссылку на форму (обычную или управляемую) в переменную JavaScript.
  3. В нужный момент вызвать из JavaScript нашу экспортную функцию как обычный метод формы.

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

 

Координы мыши внутри поля 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С:Предприятие.

Включаем звук в 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.
Ну вы понимаете к чему я клоню — пора делать простые игрушки.

Воронка продаж современными средствами SVG графики.

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

Задела меня статья на мисте о воронке продаж «Воронка продаж типовыми средствами 1С (без использования Html, .Net etc.)» Задела не тем, что там все хорошо и есть что изучать, а тем что большинство не изучая методы и средства конкретной реализации пытаются найти способы реализовать графику средствами исключительно внутри 1С. Не объясняя и не показывая поэтапно, как сделана эта графика. На какой библиотеке она основана и как реализована. А тайную информацию про ImageMagik читаем в руководстве администратора стр.238. Если посмотреть на эту графику 1C в веб клиенте через средства разработки (есть уже во всех браузерах), то легко заметим что график это просто картинка:

voronka0

Поэтому в 1С до 8.3.3.721 графики всегда строются на сервере и передаются картинкой. А хотелось бы равняться на современные тенденции и строить графики на клиенте передавая с сервера только данных для построения графика.

Поэтому мы пойдем по другому пути. Пойдем от стандартной графики в интернете основанной на Scalable Vector Graphics (SVG) и затем ее уже будем реализовывать в 1С в поле HtmlДокумента.

Для начала прочитаем вступительную статью про SVG графику например: http://ruseller.com/lessons.php?rub=28&id=1602

Итак, начнем по шагам:

  1. Сначала нарисуем эллипсы, из которых будет состоять наша воронка (из оригинала).  Точнее только верхная крышка у нас эллипс. В htmlполе надо записать в body следующий код:
    <svg viewBox=»0 0 1400 1400″ xmlns=»http://www.w3.org/2000/svg» version=»1.1″>
    <ellipse cx=»200″ cy=»100″ rx=»100″ ry=»20″
    style=»fill:yellow;stroke:purple;stroke-width:1″/>
    </svg>В 1С в тонком клиенте Windows 8.3.3.721 так не будет работать, в вэб клиенте все работает. В библиотеке raphaeljs для старого движка IE есть методы работы с SVG элементами. Добавляем в функцию onload:

    voronka1
  2. Остальные уровни это не полные эллипсы а только нижние дуги от эллипсов. В htmlполе надо записать в body следующий код:

    <svg viewBox=»0 0 1400 1400″ xmlns=»http://www.w3.org/2000/svg» version=»1.1″>
    <path d=»M 100 200
    A 100 20 0 1 0 300 200″
    fill=»none» stroke=»red» stroke-width=»1″ />
    </svg>
    В 1С в тонком клиенте Windows 8.3.3.721 так не будет работать, в вэб клиенте все нормально. В библиотеке raphaeljs для старого движка IE есть методы работы с SVG элементами. Добавляем в функцию onload:

    voronka2
  3. Теперь построим боковые стороны от вернего полуэлипса до нижнего. В htmlполе надо записать в body следующий код:
    <svg viewBox=»0 0 1400 1400″ xmlns=»http://www.w3.org/2000/svg» version=»1.1″>
    <path d=»M 50 100
    A 150 20 0 1 0 350 100
    L 300, 200
    A 100 20 0 0 1 100 200Z»
    fill = «none» stroke=»red» stroke-width=»1″ />
    </svg>
    В 1С в тонком клиенте Вы сами понимаете… Добавляем в функцию onload и градиент раскраски для оживления (fill: «0-#f00-#400»):

    voronka3
  4. Теперь собираем весь код для обработки для библиотеке Рафаэля:
    [wpdm_file id=12]
    Код для вставки:

    voronka4

    Получилось патриотично!

Да мы не рассказали, а как так волшебным образом SVG графика заработала в старом движке. Просто раньше у Microsoft развивала библиотеку VML и ее приоритетная реализация работает со старыми движками. А библиотека raphaeljs позволила нам сделать шаг от старых браузеров в новые открытые стандарты HTML.

Для очень ленивых обработка для 1С (требует подключение к интернету — берет скрипты с этого сайта) на infostart.ru http://infostart.ru/public/199275/

Когда размер имеет значение. Определение размера поля 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.

Расшифровки в 1С из графиков Рафаэля(raphaeljs)

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

Читая на досуге писание библиотеки Raphaelsj — RaphaëlJs Tutorial: http://cancerbero.mbarreneche.com/raphaeltut/

Задумаемся над интеграцией графиков Рафаэль и 1С. Что нам хочется? Хочется, чтобы нажатие на элемент графика можно было отловить в 1с и точно сказать на каком элементе мы нажали. Дальше внутри кода 1С мы сможем сделать что нам надо. Можно открыть форму пересчитать суммы или обновить график.

Возьмем обработку из предыдущей статьи Моя “Доминикана” или Я и Рафаэль.

В поле для кода наберем или скопируем следующий пример:

Наши идентификаторы элементов графика подчеркнуты. В коде 1С напишем обработку нажатия на поле HTML.

И все начинает работать!
Наложение фигур работает правильно.
Но есть нюанс, который вы наверно сразу заметили. Во всех браузерах(вэб клиентах) границы фигур определяются правильно. В тонком клиенте Windows границы расширяются до квадрата содержащего фигуру. Плохо, но видимо движок в тонком клиенте очень специфичный. Бороться с этим не получиться, просто будем знать специфику.

Второй метод заключается в инициализации внутри htmlПоля события click. Пример:

Но не все так безоблачно становиться с новыми версия 1С 8.3. Передача параметров становиться нестабильной. Для работы во всех версиях 1С прдлагаю использовать строковой параметр window.event.data и почутать данные в 1С следующим образом:

 

P.S.

Так постепенно 1С становиться понятнее. Хотя некоторые ответственные товарищи утверждают, что это магия

Моя «Доминикана» или Я и Рафаэль.

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

Привет ‘Доминикане’ в Тайланде (http://infostart.ru/dominikana/) из пыльной и грязной Москвы.

dominicana1C-2

Конечно черепашка здесь не причем. А Вы о ком подумали? Я подумал вместе со статистикой. Нет сегодня мы попробуем использовать очень интересную библиотеку на JavaScript. Называется она Raphaël [‘ræfeɪəl] . Она достаточно популярна, имеет хорошую документацию и самое главное выводит графики внутри 1С. Спасибо создателю библиотеки Dmitry Baranovskiy за его открытую лицензию и незабываем его благодарить.

Видео с разработчиком:

http://events.yandex.ru/events/yac/2012/talks/371/

 

Кто не хочет копаться во внутренностях представляем готовые обработки работающие с этим сайтом:

http://infostart.ru/public/190734/

http://infostart.ru/public/191306/

http://infostart.ru/public/191307/

 

А тех, кто засучил рукава и не боиться javascript кода. Прошу. Обработка на infostart.ru http://infostart.ru/public/191248/.

Пример анимации

Смотрим. Нравиться? Есть поле для изменения кода на javascript, начнем экспериментировать…

 

Примеры кода для экспериментов. Вставляйте в поле для кода и нажимайте обновить:

Пример 1: Начало

raphaeljs1

Пример 2: Анимация

raphaeljs2
Пример 3: Отслеживание событий

raphaeljs3
Пример 4: Псевдотрехмерность

raphaeljs4
Библиотека достаточно маленькая, это хорошо. Но примеры в ней я бы назвал слишком низкоуровневыми. Поэтому автор развивает дополнительный проект http://g.raphaeljs.com/

Р.S. Вот так незаметно для себя я стал поклонником этой библиотеки…

 

Встроенный браузер в 1С. Надеемся на webkit?

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

В первые увидев ПолеHTML документа в обычном приложении можно подумать, что это полноценный браузер в 1С. Что-то подсказывает, что нет.

Проверим что нам напишет по поводу браузера простая проверка или внутреннее свойство ИнформацияПрограммыПросмотра (8.2.17.153):

  1. Локальная машина — Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
  2. Толстый клиент — Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)
  3. Тонкий клиент — Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)
  4. Web-клиент — Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Без комментариев. Смотрим у думаем.

Для тех кто не верит, дадим ссылку на особенности IE7: http://htmlbook.ru/content/khaki-dlya-ie7

Пробуем написать простой браузер для толстого клиента(прикрепленный ВэбБрайзер1С.epf) и начнем тестировать. Введем www.1c.ru и сразу получим ошибку стилей…(обычная корпоративная система Win7x64, IE9).

И воспроизвести ошибку в режиме ie7 не удастся. Значит дело не в номере движка. Погуляем еще по сайтам и заметим, что ошибки не так уж заметны. v8.1c.ru и Инфостарт не выдают ошибок…

Залезаем в документацию 1C толстого клиента: Описание объекта, в целом, определяется стандартом World Wide Web Consortium (W3C) Document Object Model (DOM) Level 1 (http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/) Но, объект имеет особенности, связанные с реализацией. ПолеHTMLДокумента реализовано с использованием WebBrowser Control https://msdn.microsoft.com/en-us/library/aa752127(v=vs.85).aspx. Тип свойства документ соотвествует типу HTMLDocument http://msdn.microsoft.com/en-us/library/ms531073(VS.85).aspx. Вот где здесь точно собака порылась…

Кто любит аналоги с исходными кодами — отсылаю в примеры Qt: http://doc.qt.io/qt-5/activeqt-activeqt-webbrowser-example.html

Ошибки это плохо. Сделаем новую форму ФормаОбычнаяActivеX. И вставим туда ActiveX элемент Browser. Немного поколдуем с кнопками, что выглядело как в первоначальной форме. Запускаем www.1c.ru баз, опять ошибка. Нет ну так не пойдет. По логике интернет программирования, есть ошибка она просто что-то не делает, а не напрягает пользователя. Поэтому отыскиваем в нашем объекте свойство Silent и устанавливаем его в Истина. Ура! Момент истины, www.1c.ru открывается без ошибок. Поставим эту форму по умолчанию. И посмотрим на версию движка: «Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)» — а он старый.

Теперь займемся тонким клиентом. Здесь у нас есть только свойство Данные типа строка, типа текст страницы. Посмотрим как это сделано в типовых конфигурациях. Внутренние ссылки работают, а внешние вызываются по ПерейтиПоСсылке во внешнем браузере. Что это значит, это не облом, это философия такая. И разумное объяснение может упирается в безопасность и рабоспособность старого движка, а не разумное в маркетинг(Наш тонкий клиент круче чем все вэб-браузеры мира…). Но даже по безопасности видна явная дырка. Скрипты на странице работают, если их загрузить отдельно. Пока в версии 8.3.3.721 так и ничто не говорит чтобы что-то измениться.

Для любителей смотреть ошибки в скриптах — сделаем эту возможность в тонком клиенте. Поставим начальную страницу, чтобы сразу не ругался v8.1c.ru. Скачивайте — наслаждайтесь. Даже можно запустить демо 8.3 внутри тонкого клиента (про вынос мозга — см. выше).

Такси внутри
Браузер тонкого клиента с такси внутри.

 

Обработку можно скачать на инфостарте http://infostart.ru/public/191248/

Установка принудительной эмуляции IE11:
1. Устанавливаем Internet Explorer 11
2. Идем в реестр: HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATUR E_BROWSER_EMULATION
3. Добавляем 1cv8.exe — REG_DWORD — 11001

JQuery Mobile

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

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

А теперь попробуйте это сделать с сайтами по тематике 1С:

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

Мы посмотрим  на 1С-Битрикс ,которая идет усиленная работа над мобильной версией сайта.

 

И дадим ссылку на одну из популярных библиотек для этих целей:

JQueryMobile: http://jquerymobile.com

Видео

Новшества в v1.3 (русское описание)

http://ruseller.com/lessons.php?id=1650

И подождем появления 1С 8.3.5. Что она сможет нам показать в этом плане.

 

HTML5 Canvas в 1С 8.3 или Google нам поможет.

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

Добрался я для написания маленьких тестов для 1С в плане web графики. Версии 1С 8.2.61 и 8.3.3.641.

Зайдем на http://www.w3schools.com/html/html5_canvas.asp и перенесем примеры в обработку 1С.

Скачать обработкe можно на инфостарте http://infostart.ru/public/174856

Результаты не радуют. 1С в Internet Explorer, как и в тонком клиенте Windows не работает ничего. Видно проверка в 1С идет именно на IE и все замещается и не работает. Без библиотеки excanvas.js она просто ругается, но и она не спасает. Все остальные браузеры показывают правильный результат. Видно руки 1С туда не дошли, как и в тонком клиенте на Linux.

HTML51CIE9
Меня 1C научила никогда не отступать от решения задачи, насколько сложной она не казалась с первого раза. Для этого надо понять, а как работает библиотека excanvas. Посмотреть на пример в http://infostart.ru/public/57648/. Да вспомнить, что до html5 Microsoft усиленно толкала свою систему VML (http://msdn.microsoft.com/en-us/library/ee384217%28v=vs.85%29.aspx). Вот она и прекрасно работает со старыми версиями движков IE. И excanvas это эмуляция функций обрисовки графиков html5 через эту систему. Значит 1С надо немного помочь. Посмотрев как эта библиотека работает в старых IE, получилось решение что нужно добавить в для 1С. Делаем дополнительный флаг «Довесок для 1С». Тестируем обработку HTML5-1С-min (см. вложение к статье). Ура, заработало. Делаем 1С ближе к HTML5.

Любителям «Такси» тоже сделаем картинку, пусть проверяютHTML51CThinkTaxiGood

Но таким методом не получиться протащить видео и звук в HTML5. Здесь мы отсылаем читателя к дальнейшим разработкам:  Звук и Видео на Windows.

 

И из дополнительного, что очень хочется сделать — показ катринок заменяя значение src в поле image.

СтраницаНТML = »
|< html >
|< head >
|< /head >
|< body >
|< div > Тест страницы < /div >
|< div > < img src='»+СсылкаНаКартинку+»‘/ > Тест картинки < / div >
|< / body >
|< / html > «;

А переменной СсылкаНаКартинку можно получить с помощью функций:

  • ПолучитьНавигационнуюСсылку
  • ПоместитьВоВременноеХранилище

И для полноты картины посмотрим как сама 1С выводит свои графики:

 

 

 

 

Просто делает динамически картинку во временном хранилище и ее показываем.