1з поле html документа передати параметри. Керовані форми: Поле HTML Документи та веб-клієнт

Робота з альтернативним інтерфейсом на керованих формах 1С доступна через HTML. Альтернативний інтерфейс може знадобитися, якщо стандартних елементів керування 1С недостатньо, але хочеться чогось більшого. У цій статті наведено деякі секрети роботи з веб-інтерфейсом на керованих формах 8.2.

Показ Html-сторінки на керованій формі 1С

Для показу Html-сторінки необхідно на форму вставити Поле Html Документа та в джерело даних помістити HTML-код. Потрібно мати на увазі наступне: тонкий і веб-клієнт на Internet Explorerпрацюють по-особливому. У цих двох випадках використовується Internet Explorer як сумісність з IE 7.
Перший секрет у тому, що тонкий клієнтможна перевести в режим сумісності із старшою версією IE. Для цього необхідно використовувати meta X-UA-Compatible. Так на Windows 7 після додавання


можна використовувати SVG-об'єкти, наприклад:

Перевести веб-клієнт IE на більш сучасну версію сумісності можна, помістивши веб-клієнт 1С в IFrame і задавши в батьківському html meta-тег сумісності. Приклад, як це можна зробити показаний тут:
Але при цьому не гарантується нормальна робота та відображення веб-клієнта, оскільки 1С спочатку проектувала веб-клієнт із розрахунку сумісності з IE6/7.
Другий секрет полягає в тому, що верстка HTML-макетів в режимі тексту без візуального редактора 1С псується після закриття макета в конфігураторі. Наприклад, якщо ви вставите svg-визначення на html-макеті, то після перевідкриття конфігуратора побачите зіпсований html (зверніть увагу на head-заголовок).

Тому якщо ваша верстка складніша, ніж показ малюнка, то раджу зберегти html-код ще й в іншому місці.

Зберігання всього поспіль у загальних картинках

Сучасна веб-сторінка не обмежена одним лише html. До неї на додачу йдуть картинки, js/css-файли. Традиційний підхід допускає зберігання та звернення до картинок, поміщених у загальні картинки конфігурації, але з js/css 1С-розробникам доводиться хитруватися. Текстові файлиабо записують в архів і розпаковують перед показом сторінки або повністю поміщають у html. Такий підхід не задіє вбудований практично в кожний браузер кеш для get-запитів.
Мій досвід полягав у тому, щоб помістити у загальні картинки java-скрипт. Цей досвід частково удався, тобто. всі браузери та тонкий клієнт запустили jQuery, крім IE. Якщо хтось знає секрет і зможе змусити працювати цей спосіб на IE, прошу, відписатися.Дії необхідно робити такі:
1. Створити загальну картинку та помістити в неї будь-яку картинку
2. На html-макеті в режимі редагування виділити будь-який текст і через меню Елементи-Посилання вибрати загальну картинку
3. Текст із посилання вставити в блок script
4. Замінити загальну картинку на JavaScript-вміст

Вбудований фреймворк 1С для веб-клієнта

Мало хто знає, що веб-клієнт 1С включає фреймворк, що спрощує роботу з елементами форм. Фреймворк працює на JavaScript. Звернення до нього можливе через parent.WebUI. функції його вимагають додаткових досліджень, але властивості виглядають так:


Теоретично цей фреймворк можна використовувати для виклику серверних процедур 1С. В цьому випадку відбудеться повна інтеграція html-поля з іншими елементами керованої форми, що спричинить платформну незалежність. Зараз Зворотній зв'язокдосягається за рахунок WebBrowser Control, який прив'язаний до Windows.

Ключове слово __STYLE__

Довго ламав голову, що означає ключове слово __STYLE__, яке 1С автоматично підставляє шаблон порожнього html-макета. Але дослідження запитів показало, що __STYLE__ нічим не замінюється, і цей запит сервер повертає 500 помилку: Internal Server Error.

Під час реалізації одного проекту, виникла потреба виконувати javascript(далі JS) код під управління об'єктом ПолеHTMLДокумента, з отриманням результату в 1С. Наведені приклади, у знайдених статтях, здалися не дуже зручними у використанні (особлива думка). Було прийнято рішення спробувати знайти інше, просте, рішення, на пошуки відводилося трохи більше 1 дня.

ДИВ.setAttribute("onclick", "alert("Координати");");

Виконаємо скрипт

ДИВ.click();

ТА ДА. все працює

Процедура ВиконатиСкрипт(ТекстСкрипт) ДИВ = Елементи.док.Документ.getElementById("TEST"); ДИВ.setAttribute("onclick", ТекстСкрипт); ДИВ.click(); КінецьПроцедури

Доповнення від 02.08.2016

У кометаріях був запропонований ще один спосіб виклику JS (дякую), якщо у вас є можливість змінювати код HTML документа, то можна прописати функцію в ньому і потім викликати її. передаючи до неї код на JS.

і потім в 1С:

Елементи.ПолеHTMLДокумента1.Документ.parentWindow.exec("alert("OK")");

Повернення результату JS до 1С

Для передачі результату скрипта в 1С з об'єкта Поле HTML документа будемо використовувати подію. Прив'яжемо до ПолеHTMLДокумента подію При Натисканні, яка отримує на вхід 3 параметри:

  1. Елемент у якого сталася подія (саме поле HTML документа)
  2. Об'єкт подія
  3. Ознака виконання стандартної поведінки

Щоб викликати подію при натисканні потрібно виконати наступний js код

Var evt = document.createEventObject(); // Створимо порожній об'єкт подія evt.propertyName = "функц1"; // у реквізит propertyName пропоную поміщати назву результату (щось подібне до типу, або назва функції від якої отримали дані) evt.data = "156"; //В реквізит data будемо передавати дані результату document.body.fireEvent("onclick", evt); // Виконаємо подію при натисканні ПолеHTMLДокумента

Виконавши цей js код у процедуру при натисканні другим параметром, прийде створений нами об'єкт подія. Що досить зручно обробляти.

Приклад аналізу відповіді.

&НаКлієнті // отримуємо ім'я та результат події Процедура ДокПріНатиску(Елемент, ДаніПодії, СтандартнаОбробка) Ім'яОперації = ДаніПодії.Event.propertyName; ДаніОперації = ДаніПодії.Event.data; Якщо Ім'яОперації = "" Тоді //не наша подія Повернення; КінецьЯкщо; Якщо Ім'яОперації = "Функц1" Тоді // обробка результат ІнакшеЯкщо Ім'яОперації = "функц2" Тоді // обробка результат //...... КінецьЯклі; КінецьПроцедури

Цей метод позбавляє використання обробників очікування і надає зручний ідентифікатор події. По ідентифікатору ми точно знаємо, які дані нам прийшли, і як їх розібрати.

Доповнення від 26.03.2016

І в цьому місці теж сталися непонятки (ошибка відтворюється тільки на плаформі 8.3.5.1570, але щоб запобігти цим ситуаціям у подальшому, наведу рішення) Сама причина -при повторному запуску форми з Поле HTML документа в момент виклику процедури при натисканні по полю HTML платформний виклик залипав і валив весь об'єкт COM (Відбулася виключна ситуація (htmlfile): Невизначена помилка). Рішенням стало відключення стандартного виконання події click, і відключення режиму спливу події. Як це зробити дивимося нижче.

// відключимо сплив події

Evt.cancelBubble = true;

// відключимо стандартну поведінку

Evt.returnValue = false;

У результаті передачі даних в 1с з JS ми отримаємо функцію.

Function return1c(name,data)( var evt = document.createEventObject(); evt.propertyName = name; evt.data = data; evt.cancelBubble = true; evt.returnValue = false; document.fireEvent("onclick",evt ););

Висновок.

Комбінуючи ці методи, ви зможете досить легко запускати необхідний js код, і отримувати дані в 1С, для подальшої обробки.

Приклад реалізації в

28
При інтеграції 1С з веб-сайтами завжди постає питання передачі деяких даних на веб-сервер. Будь то це передача параметрів запиту для отримання даних від веб-сервера в 1С або передача даних з 1С, які повинні бути збережені або якимось 14
У розробників на платформі 1С іноді виникає завдання взаємодії системи 1С: Підприємство з різними поштовими програмамита протоколами. 1С Підприємство 8.0 має досить зручні засоби для надсилання повідомлень, імпорту листів з поштового 9
Під час обміну даними з веб-сайтами часто використовується формат JSON. На жаль, у 1С немає стандартних процедур для роботи з цим форматом. У процесі реалізації одного з проектів мною було розроблено ряд процедур та функцій, що полегшують життя програ. 8
Формат JSON в 1С до версії 8.3.6 не реалізований, але нижче я наведу приклади функцій, які можна використовувати для повноцінної роботи JSON в 1С попередній версій. JSON (JavaScript Object Notation) це текстовий формат обміну даними. 5
У цій статті я спробую описати процес парсингу сайтів засобами 1С з прикладом. Ця стаття не є інструкцією для застосування, а лише демонструє можливості 1С. Що ми маємо? 1. Сайт в інтернеті, на якому розташовується список товарів

Платформа 1С є досить потужний інструмент, призначений для вирішення широкого кола завдань. У цій статті ми хочемо розповісти про один тип об'єкта, за допомогою якого можна:

  • Працювати із компонентами ActiveX;
  • Викликати Javascript;
  • Створювати та використовувати посилання на різні об'єкти бази даних.

Цей об'єкт називається в 1С поле HTML документа.

Елемент управління Поле HTML документа має одне суттєве обмеження у використанні – його не можна використовувати для розташованих у таблиці полів.

Створення власного браузера в 1С

Спробуймо за допомогою цього поля створити обробку, що відкриває посилання на ресурс в інтернеті:

Перевіримо, як це працює. Отримаємо картинку (Рис.4)
Рис.4.

Проаналізуємо, що ми бачимо:

  1. Відкрилося пошукове вікно з посиланням на сайт, при цьому пошук здійснюється за допомогою пошукової системи, призначеної за умовчанням;
  2. Обробка працює, інтернет-сторінки відкриваються, переходи за посиланнями здійснюються;
  3. При виклику ресурсу виникла помилка сценарію.

Із чим пов'язана помилка? З тим, що Поле HTML документа – це фактично типовий Internet Explorer, причому не самої останньої версіїщо не підтримує більшість сучасних ресурсів. Так що сайти, які не підтримують режим сумісності, відкриватимуться з помилками у сценарії.

Для зручності користувача можна на формі створити навігаційні команди "Вперед" та "Назад", які описуватимуть відповідні переміщення.

Створення посилання на об'єкт бази даних

Завдання полягає в наступному:

  • Створити список будь-яких об'єктів, допустимо елементи довідника «Співробітники»;
  • Одержати посилання кожний їх;
  • Відкривати їх безпосереднім натисканням на відповідне посилання.

Створимо нашу обробку та форму на ній.


Докладніше розглянемо, що ми зробили:

  1. Створили текстовий документ, що містить «тіло» нашого сайту;
  2. Початок та закінчення документа, а також тіло нашого ХТМЛ документа ми описали за допомогою відповідних тегів;
  3. Записали у нього кожного співробітника;
  4. У записах співробітників у нас міститься інформація, яка нам знадобиться пізніше, коли ми відкриватимемо елементи, клацаючи на ПІБ співробітників;
  5. Встановили нашому полю текст, який визначає структуру.

Спробувавши зараз активувати будь-яку з наявних гіперпосилань, ми зіткнемося з тим, що «Така сторінка не знайдена» (Рис.8)
мал.8

Продовжимо описувати обробник.

Створимо процедуру, яка обробляє клік мишки за посиланням на елемент довідника (Рис.9).

мал.9

Розглянемо її докладніше:

  1. Насамперед відключимо стандартну обробку клацання за гіперпосиланням;
  2. Отримаємо рядок, що характеризує наш елемент, для цього Дані Події отримаємо значення параметра Element.id;
  3. Розділимо отриманий рядок відповідно до правил, за якими ми його формували (назва довідника та унікальний ідентифікатор, розділені між собою тире);
  4. Отримуємо посилання на елемент, використовуючи функцію Повернення Посилання;
  5. Відкриваємо елемент за отриманим посиланням.

Протестуємо виконання створеного коду.

Оскільки в налаштуваннях нашої програми заборонено використання модальних вікон, виконання наведеного вище коду завершилося помилкою (Мал.10). Інакше все відпрацювало б нормально.

Рис.10

Зайдемо в конфігураторі в меню Текст->Рефакторинг->Нерекомендовані синхронні дзвінки->Перетворити дзвінки модуля. Через деякий час текст нашого модуля буде виглядати як на Рис.11

Рис.11

Опробувавши обробку ще раз можна переконатися, що все працює нормально і при натисканні на посилання відкривається відповідний елемент довідника.

Деякі пояснення до коду. Статистика говорить, що в межах однієї бази є малоймовірним існування елементів з однаковими ідентифікаторами, однак платформа може гарантувати унікальність тільки в межах однієї таблиці. Саме тому ми формували посилання з двох частин.

Пара слів про Javascript

Виклики функцій JS в ранніх версіях програми здійснювалися через параметр поля document.parentWindow.MyFunk(), однак сучасних браузерахця можливість була втрачена. Не спрацьовують також виклики через eval().

Вихід полягає у використанні спеціальної функції fireEvent, яка є універсальним механізмом обміну даними між 1С та Javascript.

Питання: Не відображається код HTML у Полі HTML Документу 1С керовані форми


Доброго вам дня! Підкажіть хто-небудь, створюю зовнішню обробку, створив форму, у формі створив Поле, у формі створив Реквізит (Тип: Рядок не обмежена), шлях до даних: Реквізит (Вид: Поле HTML Документа), в Модулі прописав програмно:

&На Клієнті
Процедура Поле1ДокументСформовано(Елемент)
Цей Об'єкт. Реквізит = "

Wellcome

"; КінецьПроцедури У результаті в Полі HTML Документу нічого не відображається (Пусто), хоча по ідеї має відображатися Wellcome, як я розумію за прочитаним на форумі.

Що я зробив не так?

Відповідь:Кому потрібна дана ідея, забирайте, готовий робочий та стабільний ланцюжок, перевірено в 1С: Роздріб 8/2.2 керовані форми!

Питання: Поле HTML документа ЕлементиФорми.ІЕ.Документ.getElementsByClassName()


Історія така ЕлементиФорми.ІЕ.Документ.getElementsByClassName("loginform__input-border") нормально повертає потрібний елемент а ось
ЕлементиФорми.ІЕ.Документ.getElementsByClassName("loginform__input-field ng-dirty ng-valid ng-touched") ні як не знаходить

тобто. не працює коли в імені є прогалини...

чому?

Відповідь:() А форм багато на сторінці? Якщо ні, то отримай масив форм та вибери потрібну.

Запитання: очищується реквізит форми (поле html-документа)


Генерую сторінку з полем HTML-документа. Користувач кликає по гіперперсликам, які відкриваються в згенерованих сторінках з полями html-документів.
Потім користувач закриває (програмно) вихідну сторінку, вона закривається, але чомусь всі поля html-документів у похідних сторінках очищаються (скидаються), тобто стають порожніми.
Ніхто не підкаже, може, чому? Як уникнути

Відповідь:

Ось це справді ідея!

Питання: Як працювати з Поле HTML документа?


Підкажіть, як можна реалізувати наступні дії, або дайте посилання на матеріал.
Є необхідність програмно заповнити поля на формі сайту, авторизуватися та проводити програмне наступне заповнення полів на сайті.
???

Додано через 5 годин 9 хвилин
Потрібно програмно заповнити input"и і натиснути кнопку.

Додано через 16 годин 29 хвилин
Як заповнити поля розібрався. Є ідеї, як по кнопці клікнути?

Додано через 1 годину 17 хвилин
У всьому розібрався. Тему можна закрити/видалити)

Відповідь:Через кому. Нині часу немає. У другій половині дня або ввечері відпишусь.

Питання: Поле HTML-документа (не знову, а знову)


Всім привіт.
Керовані форми. Самописна конфа. Дістали помилки сценаріїв при відображенні інтернет-сторінки в полі HTML-документа. Ні, я не намагаюся зробити всередині 1С повноцінний браузер (відсилання до загальної форми "Обозреватель" у типових), але якісь елементарні форми, наприклад, форму авторизації на гугле, треба виводити. І виводити хотілося б по-людськи, щоб користувач не дивувався лайкою з приводу скриптів.

Що робилося:
Налаштовувався IE на вінді, щоб ігнорував скрипти. Допомогло. Але не пройшло узгодження через незручність налаштування кожного клієнтського комп'ютера.
Викидалися скрипти з вмісту отриманої за адресою сторінки при настанні події Документсформовано. Не допомогло. Лайки встигають вискочити перед носом користувача до того, як скрипти викинуті.
Документ вирушав формуватися на сервері. Потім HTML-код очищався від скриптів та відправлявся на клієнта у поле HTML-документа. Допомогло. Але натискання кнопок та інша робота з формою на клієнті були утруднені - багато дій вимагають контексту, що залишився на сервері (кукі). І навіть якщо залишити скрипти для потрібних кнопок і перетягнути куки з сервера на клієнт, неможливо відстежити всі можливі переходи та варіанти вмісту "чужих" сторінок, і всіляких редиректів, які можуть виникати. Потенційна халтура детектед.
Колупалися типові щодо реалізації виведення чужого HTML. Не допомогло. Або не все ще "проковиряно", або розробники вендора не пов'язуються з невідомим HTML, або припиняють висновок у веб-клієнті, а проблеми зі скриптами, що залишилися, ігнорують.

Допоможіть.

Відповідь:() цінна інформація, дякую

Запитання: Допоможіть відкрити сайт через поле HTML документа


Добрий день. Є сайт
Що не підтримує старі браузери.

Його потрібно відкрити у полі HTML документа.
Пробував робити режим сумісності:

Сайт = "

";

Ще через