Очередная попытка взаимодействия с JavaScript из клиента 1С. Расширение "Подключаемые Скрипты"

0. 60 09.02.21 18:00 Сейчас в теме
Хотелось бы поделиться своими наработками в части использования возможностей HTML + JS из клиента 1С.
Показанная в статье идея будет интересна тем, кто использует карты Yandex... или ещё какие-нибудь HTML извращения в конфигурациях 1С.
Тестировал подход в тонком клиенте на версии платформы 8.3.18.1289, но должно работать на любой 8.3.14+ (движок webkit).

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. John_d 3144 10.02.21 09:47 Сейчас в теме
за статью плюс.
я так делал взаимодействие с js:
https://infostart.ru/1c/articles/1355214/
Что думаете о моем способе?
2. savelievD 60 10.02.21 10:53 Сейчас в теме
(1) имеется в виду использовать какой-нибудь объект DOM модели документа, для передачи в него текста и последующего чтения этих данных из 1С? Как по мне, то в такой схеме инициатором события может быть только 1С, что существенно ограничивает возможности. Ну а вообще конечно - всё зависит от задачи, которую хотим решить. Если способ работает, то почему бы и нет))
9. John_d 3144 11.02.21 09:19 Сейчас в теме
(2) можете подсказать как пользоваться расширением.
Что нажимать чтобы получить результат?
Нажимаю на кнопки получаю разные ошибки
Прикрепленные файлы:
10. savelievD 60 11.02.21 09:33 Сейчас в теме
(9) расширение предоставляет в основном программный интерфейс, для разработки своих решений. У вас открыта форма тестирования. Текст, который вы вводите в поле будет выполнен не в 1С, а в javascript. попробуйте
alert("Привет мир")
11. John_d 3144 11.02.21 10:04 Сейчас в теме
(10) ошибку выдает
Прикрепленные файлы:
12. savelievD 60 11.02.21 10:07 Сейчас в теме
(11) жми сюда..
Прикрепленные файлы:
13. John_d 3144 11.02.21 10:09 Сейчас в теме
(11) а все понял нужно зеленую кнопку нажимать.
Но я бы хотел получить результат как у вас в статье. Какие действия нужно сделать чтобы получить ответ от сокета?
Прикрепленные файлы:
14. savelievD 60 11.02.21 10:21 Сейчас в теме
(13) ещё раз повторю - это форма для тестирования и делал я её на скорую руку, просто, чтобы показать как это работает.
Если хочется попробовать, то проверь/укажите свой адрес сокет сервера в процедуре "КомандаНовыйВебСокет".
далее по нажатию на кнопку КомандаНовыйВебСокет в контексте js будет создана переменная "f", которой присвоится новый объект WebSocket. далее через строку ввода команды можно посылать данные серверу - f.send("Привет мир"). при получении сообщений от сервера они выведутся в сообщение на клиенте. закрыть сокет можно командой f.close(). ну или вызвав процедуру пс_СкриптыКлиент.ЗакрытьСокет(сюда передать переменную внешний объект - ссылку на сокет)
3. VitaliyCeban 414 10.02.21 12:09 Сейчас в теме
Насчет библиотек: Делаю РМК (на основе РМК из Розницы) на HTML + Vue.js. Естественно, там куча файлов. Хранить всё это в 1С не разумно, да и отладка - сущий ад.

Пошел по другому пути: разрабатываю в Visual Studio Code, как обычный проект Vue, с хранением в репозитории Git. Отладка в Google Chrome (это дает: отладку javascript / HTML / CSS, доступ к DOM, доступ к console, замеры производительности, поключение расширений браузера конкретно для отладки Vue). Ничего этого при разработке прямо в 1С - нет.

На стороне 1С, при включенном режиме разработки (константа 1С) в поле HTML документа загружен минимальный документ-прослойка, который общается с Chrome по WebSocket-у (при запуске отладки проекта на Vue, запускается простенький WebSocket-сервер, единственная функция которого - переправлять сообщения от одного клиента другому, и к нему подключаются документ из Chrome и документ из поля html документа).

Когда настает момент сделать production версию, весь Vue проект собирается в один единственный файл (и html, и css, и js), и уже этот файл помещаю в макет обработки 1С. Константу "Включен режим разработки" выключаю, и в поле HTML документа открывается уже не прослойка, а этот полноценный макет, и общаюсь уже не по websocket, а непосредственно вызовом функций. Программный интерфейс у прослойки и у собранной production версии - одинаковый, РМК на стороне 1С даже не знает (кроме момента выбора - какой макет загружать - dev или prod) где открыт документ, в поле HTML или в Chrome.
unichkin; portwein; JohnyDeath; AleksandrFil; +4 Ответить
4. savelievD 60 10.02.21 12:23 Сейчас в теме
(3) Интересное решение. Раз так много логики зашито в РМК, то думаю лучше делать морду РМ в виде микросервиса, а не запаковывать всё это дело в макет 1С.
5. VitaliyCeban 414 10.02.21 12:33 Сейчас в теме
(4) Так смысл в том чтобы работать в тонком клиенте 1С, а не в браузере (хотя и это можно, пока только в режиме разработки). Работать в 1С нужно для того, чтобы можно было бесшовно открывать нативные объекты/формы 1С. Например, те же отчеты на СКД. На данном этапе, скажем, форма простой оплаты у меня уже на html, а форму комбинированной оплаты я еще не переделал, и пока открывается 1Сная форма, "бесшовно". А если перейти на связку "браузер + http-сервис" - думаю что быстродействие будет страдать, надо будет играться с пулом сеансов и временем засыпания сеанса 1С. Ну и СКД не сделать, разве что только визуализацию готового отчета в PDF.
6. savelievD 60 10.02.21 12:47 Сейчас в теме
(5)я и имел в виду работать через клиента 1с. Просто храниш в константе адрес микросервиса. И открываешь его в поле хтмл документа)
7. VitaliyCeban 414 10.02.21 12:54 Сейчас в теме
(6) Ну это уже не универсально, надо будет на клиентской машине разворачивать собственно этот микро-веб-сервер, и еще поддерживать его запущенное состояние. А в текущей реализации, в production режиме никакие приложения, помимо 1С - запускать не нужно. С макетом работает почти отлично - разве что нашел (не)один баг в платформе, из макета документ открывается в Quirks Mode (BackCompat), а если по URL - то в Standards Mode (тут зарепортил: https://partners.v8.1c.ru/forum/topic/1970293 ), но можно обойти.
8. savelievD 60 10.02.21 12:58 Сейчас в теме
(7)во всем есть свои плюсы и минусы) микросервис можно дорабатывать без обновления 1с, если не нарушать api. Да и поднимать его не на клиенте а на сервере. Но это более глобальная разработка)
15. AleksandrFil 11.02.21 22:05 Сейчас в теме
(3) Интересно было бы посмотреть как визуально выглядит ваше РМК на Vue. И еще, сборка проекта на Vue в один файл каким образом осуществляется?
17. VitaliyCeban 414 11.02.21 22:56 Сейчас в теме
16. VitaliyCeban 414 11.02.21 22:55 Сейчас в теме
Видео РМК см. в вложении. Продолжаю активно разрабатывать.
Снималось на экране с разрешением 1024х768, чтобы симулировать реальные условия рабочего места. Точнее, на FullHD мониторе, с разрешением 1024х768, странно почему разрешение видео получилось 1512x1080.

Сборка осуществляется с помощью Vue CLI, который в свою очередь использует Webpack.
Часть файла vue.config.js, ответственная за сборку в один файл: https://pastebin.com/hmfqZWDQ
Прикрепленные файлы:
SLRestoran.mp4
pm74; Neitron4ik; Dach; AleksandrFil; JohnyDeath; +5 Ответить
18. AleksandrFil 12.02.21 10:32 Сейчас в теме
(16) Очень круто! Насколько я понимаю это тиражное решение?
20. Neitron4ik 12.02.21 16:01 Сейчас в теме
19. Dach 306 12.02.21 14:46 Сейчас в теме
(16) Красиво! А статью не планируете написать?
21. portwein 15.02.21 09:44 Сейчас в теме
Интересное решение.
Но я в какой то момент понял, что если решение требует участия технологий не относящихся к 1С, то такие решение лучше всего выносить в отдельную разработку не на 1С. Так повышается удобство разработки и поддержки, главное изначально определить некий контракт и описание api микросервиса и далее четко его соблюдать. Сам сервис не обязательно писать на чем то тяжелом (Java/Spring), иногда достаточно простого сервиса на Node/Express - эта связка тоже очень неплохо держит нагрузку. А уже сам сервис общается с 1С посредством http запросов и отдает только нужную информацию.
Оставьте свое сообщение
Вопросы с вознаграждением