Показ 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 параметри:
- Елемент у якого сталася подія (саме поле HTML документа)
- Об'єкт подія
- Ознака виконання стандартної поведінки
Щоб викликати подію при натисканні потрібно виконати наступний 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.
Проаналізуємо, що ми бачимо:
- Відкрилося пошукове вікно з посиланням на сайт, при цьому пошук здійснюється за допомогою пошукової системи, призначеної за умовчанням;
- Обробка працює, інтернет-сторінки відкриваються, переходи за посиланнями здійснюються;
- При виклику ресурсу виникла помилка сценарію.
Із чим пов'язана помилка? З тим, що Поле HTML документа – це фактично типовий Internet Explorer, причому не самої останньої версіїщо не підтримує більшість сучасних ресурсів. Так що сайти, які не підтримують режим сумісності, відкриватимуться з помилками у сценарії.
Для зручності користувача можна на формі створити навігаційні команди "Вперед" та "Назад", які описуватимуть відповідні переміщення.
Створення посилання на об'єкт бази даних
Завдання полягає в наступному:
- Створити список будь-яких об'єктів, допустимо елементи довідника «Співробітники»;
- Одержати посилання кожний їх;
- Відкривати їх безпосереднім натисканням на відповідне посилання.
Створимо нашу обробку та форму на ній.
Докладніше розглянемо, що ми зробили:
- Створили текстовий документ, що містить «тіло» нашого сайту;
- Початок та закінчення документа, а також тіло нашого ХТМЛ документа ми описали за допомогою відповідних тегів;
- Записали у нього кожного співробітника;
- У записах співробітників у нас міститься інформація, яка нам знадобиться пізніше, коли ми відкриватимемо елементи, клацаючи на ПІБ співробітників;
- Встановили нашому полю текст, який визначає структуру.
Спробувавши зараз активувати будь-яку з наявних гіперпосилань, ми зіткнемося з тим, що «Така сторінка не знайдена» (Рис.8)
мал.8
Продовжимо описувати обробник.
Створимо процедуру, яка обробляє клік мишки за посиланням на елемент довідника (Рис.9).
мал.9
Розглянемо її докладніше:
- Насамперед відключимо стандартну обробку клацання за гіперпосиланням;
- Отримаємо рядок, що характеризує наш елемент, для цього Дані Події отримаємо значення параметра Element.id;
- Розділимо отриманий рядок відповідно до правил, за якими ми його формували (назва довідника та унікальний ідентифікатор, розділені між собою тире);
- Отримуємо посилання на елемент, використовуючи функцію Повернення Посилання;
- Відкриваємо елемент за отриманим посиланням.
Протестуємо виконання створеного коду.
Оскільки в налаштуваннях нашої програми заборонено використання модальних вікон, виконання наведеного вище коду завершилося помилкою (Мал.10). Інакше все відпрацювало б нормально.
Рис.10
Зайдемо в конфігураторі в меню Текст->Рефакторинг->Нерекомендовані синхронні дзвінки->Перетворити дзвінки модуля. Через деякий час текст нашого модуля буде виглядати як на Рис.11
Рис.11
Опробувавши обробку ще раз можна переконатися, що все працює нормально і при натисканні на посилання відкривається відповідний елемент довідника.
Деякі пояснення до коду. Статистика говорить, що в межах однієї бази є малоймовірним існування елементів з однаковими ідентифікаторами, однак платформа може гарантувати унікальність тільки в межах однієї таблиці. Саме тому ми формували посилання з двох частин.
Пара слів про Javascript
Виклики функцій JS в ранніх версіях програми здійснювалися через параметр поля document.parentWindow.MyFunk(), однак сучасних браузерахця можливість була втрачена. Не спрацьовують також виклики через eval().
Вихід полягає у використанні спеціальної функції fireEvent, яка є універсальним механізмом обміну даними між 1С та Javascript.
Питання: Не відображається код HTML у Полі HTML Документу 1С керовані форми
Доброго вам дня! Підкажіть хто-небудь, створюю зовнішню обробку, створив форму, у формі створив Поле, у формі створив Реквізит (Тип: Рядок не обмежена), шлях до даних: Реквізит (Вид: Поле HTML Документа), в Модулі прописав програмно:
&На Клієнті
Процедура Поле1ДокументСформовано(Елемент)
Цей Об'єкт. Реквізит = "
Wellcome
Що я зробив не так?
Відповідь:Кому потрібна дана ідея, забирайте, готовий робочий та стабільний ланцюжок, перевірено в 1С: Роздріб 8/2.2 керовані форми!
Питання: Поле HTML документа ЕлементиФорми.ІЕ.Документ.getElementsByClassName()
Історія така ЕлементиФорми.ІЕ.Документ.getElementsByClassName("loginform__input-border") нормально повертає потрібний елемент а ось
ЕлементиФорми.ІЕ.Документ.getElementsByClassName("loginform__input-field ng-dirty ng-valid ng-touched") ні як не знаходить
тобто. не працює коли в імені є прогалини...
чому?
Відповідь:() А форм багато на сторінці? Якщо ні, то отримай масив форм та вибери потрібну.
Запитання: очищується реквізит форми (поле html-документа)
Відповідь:
Питання: Як працювати з Поле HTML документа?
Підкажіть, як можна реалізувати наступні дії, або дайте посилання на матеріал.
Є необхідність програмно заповнити поля на формі сайту, авторизуватися та проводити програмне наступне заповнення полів на сайті.
???
Додано через 5 годин 9 хвилин
Потрібно програмно заповнити input"и і натиснути кнопку.
Додано через 16 годин 29 хвилин
Як заповнити поля розібрався. Є ідеї, як по кнопці клікнути?
Додано через 1 годину 17 хвилин
У всьому розібрався. Тему можна закрити/видалити)
Відповідь:Через кому. Нині часу немає. У другій половині дня або ввечері відпишусь.
Питання: Поле HTML-документа (не знову, а знову)
Всім привіт.
Керовані форми. Самописна конфа. Дістали помилки сценаріїв при відображенні інтернет-сторінки в полі HTML-документа. Ні, я не намагаюся зробити всередині 1С повноцінний браузер (відсилання до загальної форми "Обозреватель" у типових), але якісь елементарні форми, наприклад, форму авторизації на гугле, треба виводити. І виводити хотілося б по-людськи, щоб користувач не дивувався лайкою з приводу скриптів.
Що робилося:
Налаштовувався IE на вінді, щоб ігнорував скрипти. Допомогло. Але не пройшло узгодження через незручність налаштування кожного клієнтського комп'ютера.
Викидалися скрипти з вмісту отриманої за адресою сторінки при настанні події Документсформовано. Не допомогло. Лайки встигають вискочити перед носом користувача до того, як скрипти викинуті.
Документ вирушав формуватися на сервері. Потім HTML-код очищався від скриптів та відправлявся на клієнта у поле HTML-документа. Допомогло. Але натискання кнопок та інша робота з формою на клієнті були утруднені - багато дій вимагають контексту, що залишився на сервері (кукі). І навіть якщо залишити скрипти для потрібних кнопок і перетягнути куки з сервера на клієнт, неможливо відстежити всі можливі переходи та варіанти вмісту "чужих" сторінок, і всіляких редиректів, які можуть виникати. Потенційна халтура детектед.
Колупалися типові щодо реалізації виведення чужого HTML. Не допомогло. Або не все ще "проковиряно", або розробники вендора не пов'язуються з невідомим HTML, або припиняють висновок у веб-клієнті, а проблеми зі скриптами, що залишилися, ігнорують.
Допоможіть.
Відповідь:() цінна інформація, дякую
Запитання: Допоможіть відкрити сайт через поле HTML документа
Добрий день. Є сайт
Що не підтримує старі браузери.
Його потрібно відкрити у полі HTML документа.
Пробував робити режим сумісності:
Сайт = "
Можливо, я неправильно використовую теги для сумісності.
Заздалегідь дякую
Відповідь:() Дякую, допомогло.
Не міг знайти ключ реєстру для Win 10.
Питання: Поле HTML-документа та картинка
Це глюк чи...?
При вставці з буфера обміну замість картинки хрестик. У властивостях зображення адреса показується у вигляді "cid:image001.jpg@01D0C0A8.FD63F6D0". Пробував копіювати з outlook і браузера
Відповідь:додай картинку в картинки, а потім у поле html.
Запитання: Як звернутися до реквізиту табличної частини документа? (керована форма 1С 8.3.11)
Привіт Всім Досвіду розробки в 1 С 8 .3 поки мало тому прошу поради Є документ з табличною частиною РозмірнаСітка з реквізитами ті самі розміри тільки з довідника
хотілося б циклом заповнити колонку Розмір тим більше, що найменування повністю збігаються, як мені звернеться до реквізиту табличної частини РозмірнаСітка?
Через Об'єкт.РозмірнаСітка.Розмір каже, що поле не виявлено? підкажіть, як правильно реалізувати процедуру?
Процедура ЗаполнитьШаблонНаСервере() Запит = Новий Запит; Запрос.Текст = "ВИБРАТИ | Розміри Вікової Групи. Характеристика Номенклатури. Найменування ЯК Шаблон Групи | З | РегістрВідомостей.РозміриВіковоїГрупи ЯК РозміриВіковоїГрупи |ДЕ | РозміриВіковоїГрупи.ЦільоваГрупа = &ЦільоваГрупа | |Упорядковувати за | Розміри Вікової Групи. Порядок В списку "; Для кожного Стр з ТЗ цикл ЗначенняШаблона=Стр.ШаблонГрупи;Об'єкт.РозмірнаСітка.Розмір = ЗначенняШаблона;
Відповідь:Круто все заробило Дякую
Питання: Помилка при розрахунку суми поточного рядка табличної частини у керованій формі документа
Підкажіть, що не так?
Чому не спрацьовує підрахунок?
(Документ.ПриходнаяНакладная.Форма.ФормаДокумента.Форма(5,23)): Змінна не визначена (ЕлементиФорми)
РядокТаблічноїЧастини=<>>ЕлементиФорми.Матеріали.ПоточніДані;
Відповідь:Код у модулі форми?
В керованих формах замість ЕлементиФорми використовується Елементи
Добрий день. Питання виникло таке. З процедури документа я викликаю форму елемента довідника, заповнюю її і записую і потрібно щоб після запису в процедуру, яке все це викликало посилання на створений елемент.
Код процедури наступний:
Код 1C | ||
|
Відомо, що форма об'єкта довідника відкривається у цій ділянці коду