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 нашу экспортную функцию как обычный метод формы.

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

 

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:

 

 

Безопасность и удобство это концы одной палки.

Поймали ковбои трех индейцев: вождя племени, простого индейца и индейца по прозвищу Орлиный Глаз, заперли их в сарае и поставили охрану. День проходит, второй проходит, на третий день смотрят — сбежали индейцы. Ковбои в погоню, поймали их и спрашивают, как им удалось сбежать. А вождь им отвечает: «День мы сидим, другой день сидим, а на третий день Орлиный Глаз заметил, что у сарая нет одной стены.»

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

Безопасный режим в 1С(http://its.1c.ru/db/v83doc#bookmark:dev:TI000000185)  это хорошо.

Наверное для кого-то будет откровением, но безопасный режим работает только на Сервере!!!

ВНИМАНИЕ! В клиент-серверном варианте вызов метода не оказывает влияния при работе на стороне клиента.

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

То все его локальные файлы в данной директории будут скопированны в внутрь базы 1C. Все будет работать в безопасном режиме!!!

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

Обсуждение на мисте: https://fotki.yandex.ru/next/users/sikuda/album/160087/view/560276?page=0  закрыто Волшебником и ник заблокирован за «публикацию алгоритма взлома» на языке 1С.

Если рассматривать 1С тонкий клиент подключенный через интернет базе 1с по аналогии с web вэб браузером, который открыл страницу html. То в вэб-браузере на клиенте из открытой страницы Вы не сможете сделать запрос к другому сайту. Принцип одинакового источника (англ. same origin policy). В тонком же клиенте в среде 1С вы имеете доступ к базе и к любому источнику в Интернете.
В браузере зайдя на плохой сайт Вы не боитесь потерять данные, в тонком клиенте Вы не сможете запускать чужой не проверенный код явно или косвенно.

Все вышеприведенное нормальное поведение программы в локальной сети. Но если мы влезаем в интернет, то по безопасности тонкий клиент 1С я не рекомендую к использованию. И если использовать, то с дополнительной настройкой VPN.

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

praemonitus praemunitus.

А то пишут, пишут… («Межсайтовый скриптинг») конгресс, немцы какие-то… Голова пухнет. Взять все, да и поделить(бери и работай)!

 

Предыдущее исследование безопасности: http://sikuda.ru/archives/1074

P.S.

Кстати функция НайтиФайлы наWindows 10 не работает — вылетает исключение.

 

Прогресс не стоит на месте

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

Если у Вас не запускается в Linux apache в связке с 1С

sudo /etc/init.d/apache2 restart
* Restarting web server apache2 [fail]
* The apache2 configtest failed.
Output of config test was:
apache2: Syntax error on line 231 of /etc/apache2/apache2.conf: Cannot load /opt/1C/v8.3/i386/wsap22.so into server: /opt/1C/v8.3/i386/wsap22.so: undefined symbol: ap_rputs
Action ‘configtest’ failed.
The Apache error log may have more information.

Знайте прогресс не стоит на месте и версия 1С 8.3.6 (2015 год) и apache 2.4 (2012 год) несовместимы. Надо делать обновление до версии 2.2.

Возможно для обновления надо будет набрать:

sudo apt-get upgrade
apt-cache showpkg apache2 | grep 2.2
apt-get install apache2=2.2.22-1ubuntu1

How to check my current version of Linux Mint — cat /etc/linuxmint/info

Но практически все дистрибутивы уже не содержат apache 2.2, а выпиливать 2.4 и вставить 2.2 это надо быть фанатиком…

И последним гвоздем в ваше хорошее настроение будет то, что все нововведения от 1С

  • HTTP сервисы
  • REST интерфейс
  •   старые Web сервисы

Все работают через Веб сервер!

А кто сказал, что импортозамещение будет сделать  легко?

Ставим 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! Недоверяйте Вашу безопастность никому и спите спокойно.

Когда размер имеет значение. Определение размера поля 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С становиться понятнее. Хотя некоторые ответственные товарищи утверждают, что это магия