Skip to content
metadata & data engine (лёгкий javascript клиент 1С - платформа автономных и гибридных веб-приложений)
JavaScript CSS Other
Find file
Latest commit 33d9918 @unpete unpete Merge pull request #45 from oknosoft/develop
v0.10.208
Failed to load latest commit information.
data v0.10.208
designer v0.9.201
dist v0.10.208
doc v0.9.199
examples v0.10.208
lib v0.10.208
node_modules v0.9.197
server v0.9.201
spec v0.9.201
src v0.10.208
LICENSE.en.md v0.9.207
LICENSE.ru.md v0.9.207
README.en.md v0.10.208
README.md v0.10.208
bower.json v0.10.208
gulpfile.js v0.10.208
history.md v0.10.208
index.html v0.10.208
metadata_service_worker.js v0.9.197
package.json v0.10.208

README.md

Движок метаданных для браузера

English version

Metadata.js - это библиотека для разработки бизнес-ориентированных и учетных offline-first браузерных приложений

Она предоставляет веб-программисту:

  • высокоуровневые data-объекты, схожие по функциональности с документами, регистрами и справочниками платформы 1С
  • инструменты декларативного описания метаданных и автогенерации интерфейса, схожие по функциональности с метаданными и формами платформы 1С

Предпосылки

Проект начинался с реализации лёгкого javascript клиента 1С (в дополнение к толстому, тонкому и веб-клиентам) и предназначался для чтения и редактирования данных, расположенных на сервере 1С с большим числом подключений (дилеры или интернет-витрина с сотнями анонимных либо авторизованных внешних пользователей). Позже, была реализована математика, позволяющая использовать в качестве сервера не только платформу 1С, но и собственное хранилище данных на базе CouchDB, NodeJS и PostgreSQL.

Стандартный web-клиент 1С для реализации проекта Заказ дилера не проходил по ряду ограничений:

  • Медленно на реальных (плохих) интернет-каналах
  • Скудная функциональность в работе с данными традиционного клиента 1С (на стороне клиента 1С недоступны объекты данных и метаданных - только ДанныеФормыСтруктура и ДанныеФормыКоллекция)
  • Интерфейсные ограничения традиционного клиента 1С
  • Небезопасно пускать гостей и дилеров в управленческую учетную базу. RLS и группы доступа никто не отменял, но система, в которой к критичным данным нельзя обратиться в принципе, будет надежнее системы, где доступ к этим данным ограничен паролем.

Концепция и философия

В metadata.js предпринята попытка дополнить лучшее из современных технологий обработки данных инструментами, которых нам не хватало в повседневной работе

Структура системы на базе metadata.js

Структура metadata.js в браузере

Используем самое ценное от 1С

  • Эффективная модель Метаданных со ссылочной типизацией и подробным описанием реквизитов
  • Высокоуровневая объектная модель данных. Предопределенное (при необходимости, переопределяемое) поведение Документов, Регистров, Справочников и Менеджеров объектов, наличие стандартных реквизитов и событий, повышает эффективность разработки в разы по сравнению с фреймворками, оперирующими записями реляционных таблиц
  • Автогенерация форм и элементов управления

Чтобы предоставить разработчику на javascript инструментарий, подобный 1С-ному, на верхнем уровне фреймворка реализованы классы:

  • AppEvents, обслуживающий события при старте программы, авторизацию пользователей и состояния сети
  • Meta - хранилище метаданных конфигурации
  • DataManager с наследниками RefDataManager, EnumManager, InfoRegManager, CatManager, DocManager - менеджеры объектов данных - аналоги 1С-ных ПеречислениеМенеджер, РегистрСведенийМенеджер, СправочникМенеджер, ДокументМенеджер
  • DataObj с наследниками CatObj, DocObj, EnumObj, DataProcessorObj - аналоги 1С-ных СправочникОбъект, ДокументОбъект, ОбработкаОбъект

Дополняем возможностями ES6 и Web UI

  • При разработке фреймворка, было решено отказаться от поддержки устаревших браузеров и смело использовать ServiceWorkers, Promises и Observers. Это позволило сократить объём кода javascript, улучшить его структуру и повысить эффективность
  • Для визуализации данных, в текущей реализации, использованы компоненты dhtmlx. Любители ExtJS, Angular, Dojo, Webix, SAP UI5 и т.д. - могут при необходимости подключить нужные визуальные компоненты к нашим объектам данных

Отличия от конкурентов

Metadata.js не конкурирует с клиентскими Web UI и клиент-серверными (в том числе, реактивными) фреймворками, а дополняет их новой абстракцией в виде Объектов и Менеджеров данных. Использование этих классов упрощает разработку сложных интерфейсов бизнес-приложений

Установка и подключение библиотеки

npm install --save metadata-js  # node
bower install --save metadata   # bower

Для браузера, подключите таблицы стилей fontawesome, dhtmlx, metadata и скрипты alasql, dhtmlx, metadata

<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/fontawesome/latest/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/g/metadata(dhx_web.css+metadata.css)">
<script src="//cdn.jsdelivr.net/g/alasql,metadata(dhtmlx.min.js+metadata.min.js)"></script>

Web-приложение к серверу 1С - это просто

  • Подключите скрипт с файлами описания метаданных (см. демо) и получите полнофункциональное приложение с бизнес-логикой, реализованной средствами 1С в конфигураторе 1С и отзывчивым интерфейсом, который автоматически сгенерирует библиотека metadata.js
  • С фреймворком metadata.js легко создавать системы на сотни и даже тысячи рабочих мест, используя высокоуровневые инструменты платформы 1С на сервере, сочетая их с гибкостью, эффективностью и доступностью браузерных технологий

Для типовых конфигураций на полной поддержке используется rest-сервис odata

Файлы описания метаданных, в этом случае, формируются внешней обработкой, входящей в комплект поставки

Если внесение изменений в типовую конфигурацию допустимо, используется http-сервис библиотеки интеграции

На клиенте и сервере в этом случае, доступны дополнительные функции оптимизации вычислений, трафика и кеширования

Презентация

Обзор metadata.js

Примеры

  • Приложение code examples дополняет документацию простыми примерами использования и настройки компонентов фреймворка а так же, примерами подключения к типовым конфигурациям 1С
  • На примере Заказа покупателя в УНФ, расмотрено:
    • Как сформировать файлы описания метаданных
    • Как выгрузить статические данные перечислений и справочников для кеширования на клиенте
    • Как по описанию метаданных сформировать SQL-файл для создания таблиц data-объектов в памяти браузера
    • Какие и в какой последовательности возникают события при старте приложения, при авторизации и построении начальной страницы
    • В каких файлах размещать и как подключать модификаторы метаданных и обработчики событий data-объектов
    • Пример обработки события "при изменении номенклатуры или характеристики в строке табличной части заказа" - получает из регистра срез последних цены и подставляет полученную цену в редактируемую строку документа
  • Пример Счет и отгрузка для Бухгалтерии предприятия, иллюстрирует аналогичное предыдущему подключение к типовой конфигурации БП 3.0.

Тесты

Первые автоматические тесты добавлены к проекту в Августе 2015. Покрытие кода тестами пока составляет менее 1%, но начало положено.
Разработку нового функционала и работу над ошибками планируется вести через тестирование

Благодарности

  • Andrey Gershun, author of AlaSQL - Javascript SQL database library
  • Авторам PouchDB и CouchDB - NoSQL database and data synchronization engine
  • Авторам dhtmlx - a beautiful set of Ajax-powered UI components
  • Прочим авторам за их замечательные инструменты, упрощающие нашу работу

Лицензия

Библиотека metadata.js имеет две схемы лицензирования:

  • Для некоммерческих Open Source проектов доступна лицензия AGPL-3.0
  • Коммерческая лицензия на разработчика позволяет использовать и распространять ПО в любом количестве неконкурирующих продуктов, без ограничений на количество копий

Данная лицензия распространяется на все содержимое репозитория, но не заменеют существующие лицензии для продуктов, используемых библиотекой metadata.js

(c) 2014-2016, компания Окнософт (info@oknosoft.ru)

Something went wrong with that request. Please try again.