Hello world на metadata.js

29.06.17

Разработка - Инструментарий разработчика

Про браузерные offline-first приложения можно написать миллионы слов. Сэкономлю своё и ваше время и перейду сразу к делу. В статье не будет рекламы и агитации за новые технологии, не будет критики традиционных или попсовых решений. Рассмотрим по шагам разработку простейшей программы на metadata.js. Постараюсь сделать акцент не на том «как это сделано», а «почему сделано именно так»

Скачать файлы

Наименование Файл Версия Размер
mdhello.zip
.zip 48,78Mb
119
.zip 48,78Mb 119 Скачать

Демо-задача

Автономное веб-приложения для учета движения наличных денег:

  • Два справочника:
    • Кассы (считаем, что кошельки, контрагенты, подотчетники и т.д. – это просто разные кассы)
    • Статьи ДДС – для простейшей аналитики
  • Один документ: Перемещение денег (куда, откуда, статья, сумма)
  • Один отчет: Ведомость по денежным средствам

Приложение должно обеспечивать возможность ввода и редактирования документов как из веб-интерфейса, так и средствами 1С и сохранять работоспособность при недоступности сервера или поломках доступа в Интернет.

Чтобы не усложнять пример, ограничение прав на уровне записей не рассматриваем. Пользователь веб-приложения увидит и сможет изменять документы по всем кассам. В реальных задачах используется фильтрованная репликация, когда документы передаются в браузер с учетом RLS.

Результат

Живое демо доступно по ссылке: https://light.oknosoft.ru/helloworld/

  • Движок легко справляется с тысячами одновременных сеансов
  • Сервер 1С для обслуживания веб-клиентов не используется
  • Публикации SOAP и HTTP сервисов не требуется

Демо

Содержание

  • Подготовка базы 1С. Готовая dt-шка есть в прикрепленных файлах. Опишу, что именно делалось со стороны конфигуратора
  • Подготовка инфраструктуры. Для отладки и публикации, нужны установленный локально NodeJS, а так же серверы CouchDB и Nginx. CouchDB и Nginx могут располагаться как на локальном компьютере, так и удаленно на любом компьютере в Интернет
  • Настройка состава метаданных, а так же, синонимов и начальное заполнение, выполняются в режиме 1С:Предприятие
  • Подготовка веб-приложения. Структуру каталогов и необходимые файлы  развернём в любой удобной папке на локальном компьютере с помощью npm
  • Публикация веб-приложения. Рассмотрим необходимые и достаточные шаги для публикации приложения в Интернет
Важно! Текст сопровождается видеороликами. Предлагаю совмещать чтение с просмотром видео.
Одно без другого недостаточно информативно.

Шаг №1 CouchDB

Выбору CouchDB для back-end metadata.js предшествовала большая работа. В первую очередь, рассматривался PostgreSQL, ставились эксперименты с MySQL, Couchbase и MongoDB, но я не смог устоять перед уникальными возможностями CouchDB:

  • В разработку собственного движка синхронизации данных, я вложил не менее года, но когда увидел математику master-master репликации CouchDB, без сожаления выбросил своё творчество на помойку
  • Запас масштабируемости – есть примеры систем на кластере CouchDB  с посещаемостью 500 млн. запросов в сутки (до 10000 транзакций в секунду)
  • 100% HTTP API – не требуются никаких бинарных драйверов
  • Возможность подключить внешний низкоуровневый движок обработки запросов и построения индексов. Например, скрипт на NodeJS.
    Прочтите последний пункт еще раз: Metadata использует для хранения данных CouchDB, которая, в свою очередь, может использовать метадату для низкоуровневого построения индексов и агрегатов!!!

С установкой CouchDB проблем не возникнет – готовые образы виртуальных машин Linux для VMDK, OpenStack, Xen, Docker, ProxMox или установочный iso-файл можно взять, например, в turnkeylinux. Исходные тексты и дистрибутивы для всех платформ доступны официальном сайте couchdb.org

После установки, необходимо выполнить два действия:

  • Задать пароль администратора
  • Указать в секции httpd, слушать все ip-адреса (установить bind_address = 0.0.0.0). По умолчанию, служба CouchDB, слушает только localhost и обратиться к серверу снаружи невозможно

Первый запуск couchdb

Остальные настройки библиотека интеграции сделает из режима 1С:Предприятие.

Задачи CouchDB при взаимодействии с 1С:

  • CouchDB предоставляет 1C-ке http интерфейс для записи и чтения произвольных данных. Повторюсь, в ранних редакциях metadata, предпринимались попытки использовать для этих целей файловую систему или базу SQL. Эти подходы имели проблемы с версионированием и удобством отслеживания и синхронизации изменений. CouchDB чем то похожа на Git, где с версионированием всё хорошо, но Git – это не база данных. Map/reduce индекса на нём не построишь.
    Для простоты можно считать, что CouchDB – это такая штука, в которую 1С-ка в любой момент может без блокировок записать любой сериализуемый объект (в CouchDB запись и чтение неблокирующие. 1000 клиентов могут одновременно читать и писать одни и те же данные)
  • На начальном этапе и при изменении структуры конфигурации, 1С складывает в CouchDB подробное описание своих метаданных. По этому описанию, движкок metadata компилирует javascript-файлы с конструкторами объектов данных, Плюс, создаёт скрипты sql для таблиц в памяти браузера
  • Далее, при редактировании в 1С любого объекта, в подписке на событие «при записи», изменения этого объекта отправляются в CouchDB. Происходит подобие «регистрации изменений в плане обмена»
  • В фоновых заданиях, 1С-ка запрашивает у CouchDB список объектов, изменённых с момента последней синхронизации, читает и записывает изменённые объекты. При интенсивной работе, фоновые задачи репликации можно запускать в несколько потоков

Шаг №2 Nginx

Nginx используется в нашем проекте по прямому назначению: для отдачи статических файлов, балансировки нагрузки и редиректов http запросов к сервисам. Апологеты Apache или IIS, могут настроить те же функции средствами их любимых серверов, но лично мне, ближе синтаксис nginx.conf. Особенно, после того как в нём поддержаны сценарии javascript. Пример nginx.conf есть в прикрепленных файлах. В большинстве случаев, годятся настройки по умолчанию. Достаточно указать путь к папке с файлами веб-приложения.

В production-окружении, службы CouchDB, Apach и Nginx, обычно размещают на разных физических или виртуальных серверах. Рекомендуется перенаправлять браузеры клиентов с http на https, чтобы пароли и прочие данные веб-приложения передавались исключительно по шифрованному каналу.

Исходные тексты и дистрибутивы для всех платформ доступны официальном сайте nginx.org

Шаг №3 NodeJS

В нашей задаче, Node.js используется только на этапах подготовки и сборки проекта. С его помощью, мы развернём структуру папок и файлов приложения helloworld, а так же, скомпилируем итоговые файлы для публикации в Интернет.

Исходные тексты и дистрибутивы для всех платформ доступны официальном сайте nodejs.org

Шаг №4 IDE

Если у вас уже установлен любимый редактор кода javascript, этот абзац можно пропустить. Для остальных, предлагаю обратить внимание на WebStorm и NetBeans. WebStorm платный, NetBeans не требует денег за подписку. Выбор за вами.

Шаг №5 Файлы проекта

Создадим пустой каталог. Например, c:\www и перейдём в него в командном интерпретаторе. Предполагается, что nodejs уже установлен.
Выполним команды:

PS C:\users> cd c:\www
PS C:\www> npm install -g metadata-js@0.11.223

Metadata.js будет установлена глобально и зарегистриуется утилита командной строки metadata.

PS C:\www> npm install -g gulp-cli

Установит глобально и зарегистрирует утилиту командной строки менеджера задач gulp

PS C:\www> metadata init

Создаст начальную структуру проекта

PS C:\www> npm install

Установит дополнительные библиотеки (зависимости), необходимые движку metadata.js

Инсталляция потребует некоторого времени. Из Интернета загружается около 200Mb кода.
При установке зависимостей, могут появляться сообщения об ошибках. Обычно, это не мешает работе веб-приложения.

Мы в одном шаге от запуска демо-примера.
Если CouchDB установлен локально, на этом же компьютере, проект можно не пересобирать и сразу открыть файл c:\www\index.html в браузере Chrome. Должно открыться демо-приложение и ругнуться на отсутствие данных в CouchDB. Их мы подготовим на следующем шаге.

Если CouchDB установлен на другом компьютере в локальной или глобальной сети, необходимо пересобрать проект, предварительно, указав в настройках по умолчанию, строку подключения к серверу. Отредактировать файл настроек package.json можно любым текстовым редактором. Указываем в параметре config->couchdb тот же путь, который указан для этого параметра в 1С.

Чтобы перекомпилировать файлы проекта, выполним в командной строке:

PS C:\www> gulp full

Для отладки в файловом режиме, просто открываем c:\www\index.html в Chrome. Остальные браузеры блокируют исходящие запросы со страниц, открытых по протоколу file:///.

Чтобы наше приложение заработало в любом браузере локальной сети, достаточно поместить файлы из c:\www\ в папку веб-сервера. Папка не обязана быть корневой. Например, если корень apache или nginx смотрит на c:\www-data\, можно создать папку c:\www-data\helloworld\ и поместить в неё содержимое нашего проекта.  В браузере проект будет доступен по http://localhost/helloworld/ или http://имякомпьютера/helloworld/. На вебсервер нет необходимости переносить всю структуру проекта.
Достаточно скопировать папку dist и файлы index.html, cache.appcache и manifest.json.

Вместе со структурой папок, которую мы получили командой metadata init, в каждой папке был создан файл README.md, поясняющий назначение папки. Исходные тексты и шаблоны,  располагаются в иерархии папки src. Особый интерес представляют папки внутри src/modifiers. Там живут модули объектов и менеджеров наших документов и справочников, а так же, общие модули.

Работа прикладного программиста состоит в написании обработчиков событий «при создании», «при изменении реквизита», «перед записью» и т.д. объектов данных. Список событий, поддержанный менеджером данных см. в справочнике API

В демо-примере задействована единственная подписка на событие – при создании документа «ПеремещениеДенег». Обработчик живёт в файле src\modifiers\documents\doc_cash_moving.js и выполняет единственное действие: назначает номер новому документу

// Подписываемся на события
$p.doc.cash_moving.on({

   /**
    * Обработчик при создании документа
    */
   after_create: function (attr) {
      //Номер документа
      return this.new_number_doc();
   }
});

Клиентский код про формы в демке отсутствует - используются автоформы.
При необходимости, можно добавить обработчики на событие «при изменении реквизита» и пересчитывать одни поля при изменении других. Например, рассчитывать итог в табличной части или подставлять договор при изменении организации или контрагента.

Есть возможность полностью переопределить любую форму, добавив соответствующий метод в менеджере объекта.

Еще, в папке модификаторов есть несколько служебных модулей (cat_users_acl.js, cch_predefined_elmnts.js и cch_properties.js). Эти файлы – аналог модулей объектов из БСП, реализующих стандартную функциональность.

Шаг №6 конфигурация 1С

Можно взять готовую dt-шку из прикрепленных файлов и добавить в неё объекты прикладной задачи. Для полноты картины, рассмотрим, как делалась эта каркасная dt-шка:

  • Создаём пустую конфигурацию, присваиваем ей имя (в нашем случае «МетадатаДемо»), создаём подсистему «МетадатаДемо»
  • Т.к. библиотека интеграции использует БСП, производим сравнение-объединение с актуальной версией БСП с постановкой на поддержку
  • Включаем возможность внесения изменений в следующие объекты БСП:
    • Общие модули «ПодсистемыКонфигурацииПереопределяемый» и «УправлениеСвойствамиПереопределяемый»
    • Справочник «ВидыКонтактнойИнформации» – в него добавим предопределенные элементы, чтобы у наших касс появилась закладка с контактной информацией
    • Справочник «НаборыДополнительныхРеквизитовИСведений» – в него добавим предопределенные элементы, чтобы у наших касс появились настраиваемые дополнительные реквизиты
    • План видов характеристик «ДополнительныеРеквизитыИСведения» - при необходимости расширения состава типов дополнительных реквизитов
  • Добавляем общий модуль «ОбновлениеИнформационнойБазыМетадатаДемо» и указываем на него ссылку в модуле «ПодсистемыКонфигурацииПереопределяемый»

Рассмотренные шаги – стандартная процедура подключения БСП. Далее, подключаем библиотеку интеграции (cf-ка есть в прикрепленных файлах)

  • Производим сравнение-объединение с библиотекой интеграции с постановкой на поддержку
  • Включаем возможность внесения изменений в определяемые типы библиотеки интеграции и БСП  – изменим их состав после того, как в конфигурацию будут добавлены наши документы и справочники
  • Включаем возможность внесения изменений  в общий модуль «ИнтеграцияПереопределяемый» - в нём укажем ссылку на процедуру формирования начального образа данных. Так же, в этом модуле можно переопределить правила сериализации данных, но в демо-примере эта возможность не используется
  • Добавляем справочники «ДДС» и «Кассы» и документ «ПеремещениеДенг»
  • Добавляем общий модуль «ИнтеграцияМетадатаДемо» и реализуем в нём процедуру НачальноеЗаполнениеФинализация()

Объекты демо в 1С

Из-за внедренных библиотек БСП и Окнософт:Интеграция, конфигурация получается довольно толстой (400 общих модулей,  70 справочников,  100 регистров и т.д.), но при включенном отборе по подсистемам, объекты демо-задачи помещаются на один экран.

Важную роль при настройке конфигурации имеют определяемые типы библиотеки интеграции:

  • ИнтеграцияСсылка – в состав этого типа надо включить все ссылочные метаданные, которые потребуются веб-приложению. Для экономии трафика и памяти браузера, не рекомендуется включать в этот тип неиспользуемые метаданные. С другой стороны, важно не забывать про связанные ссылочные типы. Например, при добавлении справочника «Номенклатура», следует добавить справочники «Виды номенклатуры» и «Номенклатурные группы»
  • ИнтеграцияОбъект – включает авторегистрацию изменений. Если предыдущий тип определяет, можно ли в принципе передать в CouchDB некие данные, то текущий, указывает, должны ли изменения передаваться в CouchDB автоматически при записи каждого объекта
  • ИнтеграцияНаборЗаписей – аналогично предыдущему, но относится к регистрам сведений и накопления, а не к ссылочным типам
Важно: При переименовании конфигурации, для корректной работы БСП, не забываем переименовывать подсистему «МетадатаДемо» и отражаем изменения в общем модуле «ОбновлениеИнформационнойБазыМетадатаДемо».

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

Шаг №7 Связь с CouchDB и начальный образ данных

Важно! Настройку выполнять в такой последовательности:
  1. Задать адреса сервисов
  2. Включить CORS
  3. Настроить базы
  4. Выгрузить описание метаданных
  5. Зарегистрировать начальный образ

Запускаем 1С в режиме предприятия и открываем обработку «Интеграция: настройка»

Обработка настройки интеграции

На первой закладке необходимо указать:

  • Адрес (url) сервера CouchDB с префиксом баз проекта. В нашем случае, сервер крутится на компьютере с именем i980 порт 5984 и префикс = hw_. Префиксы позволяют разместить базы нескольких, разных по структуре или одинаковых проектов на одном сервере
  • Имя и пароль администратора CouchDB – с этими учетными данными, подсистема интеграции 1С будет взаимодействовать с CouchDB
  • В табличную часть «Пользователи», необходимо добавить минимум одного пользователя и указать для него пароль и роли на сервере CouchDB. Роли задаются в виде массива строк. Разработчик прикладного решения может при необходимости добавить произвольное число ролей. По умолчанию, в metadata.js используются роли:
    • doc_reader – может читать объекты из базы doc
    • ram_reader – может читать объекты из базы ram
    • doc_editor – может изменять объекты в базе doc, но для него действуют фильтры RLS
    • ram_editor – может изменять объекты в базе ram
    • doc_full - может изменять объекты в базе doc, RLS на него не распространяется
  • Галку «Active» на этапе начальной настройки можно снять. Она включает режим авторегистрации изменений, когда при записи любого объекта в 1С, изменения синхронно передаются в CouchDB
  • Галку «Check» на этапе начальной настройки можно снять. Она включает режим обязательного контроля регистрации изменений в CouchDB. Если галки Check и Active взведены, а сервер CouchDB выключен, при попытке записать документ или элемент справочника, включенный в состав обмена,  при записи возникнет ошибка – изменения записаны не будут
  • Поле «Zone» в демо-примере не используется. С его помощью, библиотека интеграции реализует функциональность, схожую с 1С:Fresh, когда к одной физической базе 1С подключено несколько абонентов (групп пользователей) с полностью изолированными или частично пересекающимися областями данных
  • Поле «Since» и кнопка «Прочитать» используются для отладки обратной связи с CouchDB
Важно: после внесения изменений на закладке «Адреса сервисов», необходимо записать изменения кнопкой «Записать URLS»

Состав метаданных

На второй закладке перечислены объекты метаданных 1С, которые должны быть доступны в веб-приложении. Список заполняется автоматически при первом старте, но разработчик может в любой момент добавить или удалить из этого списка любые классы данных.

Ряд объектов используются ядром metadata.js. Их удаление из состава обмена, испортит работу веб-приложения. Вот этот список:

  • Перечисление «ИнтеграцияСостоянияТранспорта»
  • Перечисление «ИнтеграцияТипКеширования»
  • Перечисление «ИнтеграцияТипСвёртки»
  • Справочник «Пользователи»
  • Справочник «ИнтеграцияПраваПользователей»
  • Справочник «ЗначенияСвойствОбъектов»
  • Справочник «ИдентификаторыОбъектовМетаданных»
  • Справочник «НаборыДополнительныхРеквизитовИСведений»
  • Справочник «Формулы»
  • План видов характеристик «ДополнительныеРеквизитыИСведения»
  • План видов характеристик «ПредопределенныеЭлементы»

Колонка «Кешировать» указывает, в какой базе CouchDB будут зарегистрированы изменения и способ обработки этих изменений браузером.

Устройство баз в NoSQL отличается от привычного реляционного. Главные особенности: права на чтение и фильтр репликации задаются для базы в целом, а не на конкретный тип объектоав. Metadata.js создаёт для каждого проекта три базы (ram, doc и meta), в которых хранит разные классы объектов.

  • ram – рекомендуется для справочников и прочих редко изменяющихся данных. Объекты с типом кеширования ram, загружаются в ОЗУ браузера при старте веб-приложения и доступны в синхронном режиме.  Изменения постоянно синхронизируются в одну сторону: из CouchDB в indexedDB и оперативную память браузера
  • doc – как правило, используется для документов. Внутри базы doc работает RLS, изменения синхронизируются в обе стороны между CouchDB, 1С и indexedDB браузера
  • doc_remote – объекты не кешируются в браузере и доступны только online. Чтение-запись через CouchDB
  • meta – используются для больших неразделенных классификаторов. Сюда можно положить классификатор банков или КЛАДР. В отличие от doc_remote, данные не дублируются в разных зонах в режиме разделения данных
  • e1cib – Не регистрировать в CouchDB. Этот режим можно рассматривать, как «лёгкий клиент 1С». Потребуется опубликовать rest http сервис библиотеки интеграции. Объекты будут доступны только online через стандартные http интерфейсы 1С.

Разработчику дана свобода при назначении типов кеширования. В экзотических случаях, можно держать документы в памяти, а за справочниками ходить на сервер.

Колонка «Свёртка» в текущей редакции библиотеки интеграции не используется.

Объекты, для которых взведена галка «Скрыть», не видны в автоматически генерируемом интерфейсе веб-приложения, но формы этих объектов полностью доступны через ссылочные реквизиты других объектов. Например, справочник «пользователи» спрятан в общем списке справочников, что не мешает выбрать пользователя в поле «ответственный» документа «перемещение денег».

Колонка «Разрешен IREST» в текущей редакции библиотеки интеграции не используется.

Синонимы

CouchDB может работать в качестве универсальной шины данных, к которой подключены разные ИБ 1С, сканеры, ТСД, АСУ и прочие «не 1С программы». Использование синонимов упрощает интеграцию с разнородными базами.

Указывать синонимы для новых объектов и реквизитов не обязательно. Проблем с русскоязычными названиями не возникает.  Разработчик самостоятельно принимает решение, нужны ли синонимы для его задачи. Если принято решение синонимы не использовать, в таблице синонимов необходимо сохранить записи, относящиеся к предопределенным реквизитам и объектам ядра metadata.js (см. список объектов предыдущего абзаца).

Регистрация

Настало время пошевелить CouchDB из 1С.

  1. Включаем CORS. Рекомендую по возможности не использовать кроссдоменные запросы в production. Всегда можно сделать проксирование через Nginx и перенаправить запросы к разным серверам таким образом, чтобы браузеру казалось, что все серверы располагаются в одном origin. Главная неприятность от CORS – снижение быстродействия из-за использования preflight запросов. Если сайт и сервер расположены в разных доменах, перед тем, как отправить реальный запрос серверу, браузер направляет ему запрос с методом OPTION, на который сервер должен ответить «да, я согласен обрабатывать запросы из чужого домена». Теряем драгоценные миллисекунды на каждом запросе.
    С другой стороны, использование CORS упрощает инфраструктуру и реализацию отказоустойчивости. Если основной сервер не отвечает, веб-приложение может самостоятельно отправить запрос на резервный сервер в другом дата-центре.
    CORS в CouchDB включается кнопкой «Включить CORS» на закладке «Регистрация». На маленьких экранах, эта кнопка может прятаться внутри кнопки «еще» левой табличной части.
  2. Создаём базы. При нажатии на кнопку «Настроить CouchDB» закладки «Регистрация»
    1. будут созданы три базы (doc, ram и meta)
    2. будут созданы пользователи и привязаны к базам
    3. в базах будут созданы или перезаполнены служебные документы с базовыми настройками
  3. Выполняем команду «Записать мета». Возвращаемся на закладку «Метаданные» и жмём кнопку. На основании списка метаданных к обмену и с учетом синонимов, будет сформирован и записан в CouchDB, объект описания метаданных
  4. Выполняем команду «Начальное заполнение». Это подготовительная команда выполняет цикл запросов и заполняет табличную часть ссылками на объекты, из которых будет составлен начальный образ данных. По умолчанию, регистрируются все объекты, включенные в состав обмена. Математику начальной регистрации можно дополнить и переопределить в процедурах «НачальноеЗаполнение» и «НачальноеЗаполнениеФинализация» общего модуля «ИнтеграцияМетадатаДемо».
  5. Выполняем команду «Зарегистрировать». По этой команде, список ссылок отправляется в CouchDB и начинает синхронизироваться со всеми подключенными веб-клиентами
  6. Любуемся результатом

В базы hw_* можно «провалиться» щелчком мыши и изучить содержимое записанных со стороны 1С объектов.

Все необходимые от 1С данные получены – можно переходить к сборке веб-приложения.

Шаг №8 Отчеты

Полностью автоматического формирования отчетов на текущий момент не нет. Доступна форма типового отчета со стандартной разбивкой на поле табличного документа и панель параметров. Данные для отчета можно получать из разных источников. В текущем примере, данные извлекаем из map/reduce индекса CouchDB. Про индексы в NoSQL поговорим в отдельной статье. Сейчас, предлагаю просто открыть в браузере /_utils/database.html?hw_0_doc/_design/doc/_view/cash_moving_date_cashbox#

Map/reduce индекс - аналог регистра накопления

Это индекс CouchDB, используемый в данном случае, как аналог регистра накопления 1С.
При записи каждого объекта, выполняется код похожий на обработчик проведения. Формируется составной индекс (дата + касса) и рассчитывает промежуточные итоги. Эти итоги используются при построении отчета.
Полный код отчета здесь не дублирую - он доступен в модуле src/modifiers/reports/rep_cash_moving.js

Шаг №9 Публикация в Интернет

Если у вас есть VPS, VDS или dedicated сервер, просто разверните на нём couchdb и nginx и скопируйте файлы проекта в подходящую директорию.

Если выделенного сервера нет, но хочется «пощупать» технологию, есть бесплатные хостинги CouchDB:

  • Smileupps. Сервис довольно тормозной, но вполне работоспособный. Для ознакомительных целей годится
  • IBM Cloudant, лично не тестировал, но там есть бесплатный тариф, при условии небольшого трафика

При включенном CORS, файлы проекта можно разместить на любом, дешевом или бесплатном хостинге. Никакой нагрузки на http сервер они не создают – это обычные статические файлы небольшого размера.

В CouchDB есть еще одна фича: он может работать http-сервером. То есть, можно построить back-end на голом CouchDB – без Apache и Nginx.

Итоги

Демо-задача решена. Понимаю, что в короткой статье невозможно рассмотреть даже вершину айсберга.
Если тема покажется аудитории интересной - голосуйте за продолжение. Буду по мере сил выкладывать новые материалы.

offline offline-first веб веб клиент веб приложение автономная работа javascript

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122153    670    389    

714

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7292    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    3537    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177747    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99347    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18112    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28109    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23602    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
100. alprk 10.11.16 11:01 Сейчас в теме
А будет ли работать на Node? Есть мысли о том чтобы попробовать использовать на сервере.
101. unpete 577 10.11.16 12:36 Сейчас в теме
(100) alprk,
будет ли работать на Node?
Конечно. Серверный режим поддержан как в стабильной версии v0.11, так и в новой v2. В v2 сделано совсем красиво. metadata-core ничего не знает не только про визуализацию, но и про способ организации данных, обеспечивая только абстрактный слой объектов и менеджеров данных ala1с. За доступ к данным отвечает отдельный адаптер и эти данные физически могут храниться в oracle, postgres, couchdb, 1c, голой файловой системе и т.д. https://www.npmjs.com/package/metadata-pouchdb
102. aeteros 13.11.16 22:29 Сейчас в теме
Добрый день. В демо-примере реализована синхронизация данных с 1С? У меня из веб приложения в couch db данные попали, а в 1С не приходят.
dimax.dm; +1 Ответить
103. unpete 577 14.11.16 09:42 Сейчас в теме
(102) aeteros,
синхронизация данных с 1С
Сбор изменений выполняется в регламентном задании ИнтеграцияСессии. Параметр Sinc в обработке ИнтеграцияПанельАдминистрирования должен быть заполнен > 0. Если регламентные задания отключены, изменения можно загрузить командой Прочитать из CouchDB обработки ИнтеграцияПанельАдминистрирования
104. aeteros 14.11.16 12:03 Сейчас в теме
(103) unpete, Спасибо, разобрался с sinc.
Попробовал добавить в демо - свой справочник и документ, в couch все передалось, проект пересобрал, но вот в chrome открывается первая версия файла index.html(изменил title для проверки). А вот в режиме инкогнито все ок, открывается новая сборка и вижу свой справочник с документом.
Что нужно почистить в chrome чтобы в обычном режиме новую сборку запускал?
106. unpete 577 14.11.16 15:51 Сейчас в теме
(104) aeteros, при любых изменениях файлов *.js, *.css и *.html не забывайте обновлять версию и состав в файле cache.appcache.
Почитайте статьи про appcache. Например, https://habrahabr.ru/company/paysto/blog/254619/ https://habrahabr.ru/post/151815/
Вообще, appcache объявлен устаревшей технологией. Хорошим тоном считается использование вместо него сервисворкеров - надо будет запланировать доработку механизма кеширования в metadata.js в 2017-2018 году.
105. aeteros 14.11.16 12:08 Сейчас в теме
И еще странное поведение с временем документов: в веб приложении время документа при создании "22:05", а в couch db оно записывается как "20:05", в 1С соответственно тоже попадает как "20:05", При создании в 1С и транспорте в couch и веб приложение все ок.
107. unpete 577 14.11.16 15:53 Сейчас в теме
(105) aeteros,
20:05 -- 22:05
Эта задача уже зарегистрирована в issues
108. alprk 15.11.16 12:22 Сейчас в теме
Насколько я понял, вы предлагаете использовать Node.js как View Server, нет ли проблем с его стабильностью? Проект couchjs выглядит заброшенным и автор открещивается от его использования в продакшене.
109. unpete 577 15.11.16 19:24 Сейчас в теме
(108) alprk,
предлагаете использовать Node.js как View Server
Если для вашей задачи это необходимо, в качестве View Server можно использовать Node.js, но это должна быть очень специальная задача. Расскажите, пожалуйста, какой индекс у вас не получается построить стандартными средствами?
110. alprk 17.11.16 17:34 Сейчас в теме
(109) unpete,
я видимо просто неверно понял это:
Возможность подключить внешний низкоуровневый движок обработки запросов и построения индексов. Например, скрипт на NodeJS.
Прочтите последний пункт еще раз: Metadata использует для хранения данных CouchDB, которая, в свою очередь, может использовать метадату для низкоуровневого построения индексов и агрегатов!!!

я представил себе map функцию на Node, которая использует npm-модуль metadata
111. unpete 577 17.11.16 19:48 Сейчас в теме
(110) alprk,
map функцию на Node, которая использует npm-модуль metadata
Такая возможность, действительно, есть, но в текущих проектах для построения индексов хватало встроенного в couchdb движка.
112. unpete 577 17.11.16 19:52 Сейчас в теме
(110) alprk, Для расширения возможностей couchdb, к ней можно подключиться с любой стороны:
  • Можно сзади, реализовав view server
  • Можно спереди, поставив прокси Node+metadata с бизнес-логикой
113. Region102 17.11.16 21:07 Сейчас в теме
Подскажите, а как можно проверить какую нагрузку выдержит http сервис 1с, т.е. не как у вас через couchdb, а напрямую. Просто есть проект в процессе типа fresh, т.е. одна база 1С а с ней работаю +100500 пользователей с мобильных приложений синхронизируя данные через http сервис, данных в принципе немного максимум каждый пользователь хранит 200-300 килобайт в базе, разворачивается все в AZURE т.е. нагрузка легко масштабируется, но как проверить реальное количество запросов которое выдержит http сервис 1С я не знаю. Если не получится напрямую, придется плотно изучить вашу разработку.
114. unpete 577 18.11.16 07:55 Сейчас в теме
(113) Region102,
какую нагрузку выдержит http сервис 1с, т.е. не как у вас через couchdb, а напрямую
Первое, что приходит в голову - написать скрипт, создающий 10-20 соединений и эмулирующий нагрузку от 10-20 пользователей. Далее, размещаем этот скрипт на некой веб-странице и открываем эту страницу на 100-200 устройствах - эффект будет как от нескольких тысяч реальных пользователей.
116. dimax.dm 09.12.16 15:25 Сейчас в теме
Решение просто гениальное!!! И что важно уже есть готовые примеры :)

Вопросы:
1. Установил HelloWorld. Изменения в 1С в легкого клиента попадают, а наоборот - нет.
Пробовал файловую и серверную версию базы 1С. Регламентное задание срабатывает.
В чем может быть причина что изменения с сайта не попадают в 1С?

2. Использование CouchDB и metadata.js для поставщика данных на несколько интернет магазинов как лучше реализовать? Возможно в этом случае лучше запускать metadata.js на сервере в node.js?

3. Данную связка для создания публично доступного api с авторизацией как лучше применить. Насколько понимаю в этом случае нужен сверху дополнительный слой на сервере который работает над metadata.js. Как видите это решение?

4. Насколько понимаю клиентское приложение на JS ходит за данными в http api cauchDB через интернет. Этот обмен шифруется?

5. В случае установки Nginx файлы, в частности картинки, которые хранятся в базе 1С будут кэшироваться?
117. unpete 577 09.12.16 19:28 Сейчас в теме
(116)
Регламентное задание срабатывает. В чем может быть причина что изменения с сайта не попадают в 1С
Код загрузки из couchdb можно пройти в конфигураторе по шагам. Регламентные задания запускать не обязательно - в обработке администрирования интеграции есть кнопка. Скорее всего, значение параметр since = 0. Укажите в поле since номер изменения, начиная с которого требуется прочитать данные. Далее, при каждом цикле обмена, значение будет увеличиваться автоматически

Использование CouchDB и metadata.js для поставщика данных на несколько интернет магазинов как лучше реализовать? Возможно в этом случае лучше запускать metadata.js на сервере в node.js
Есть разные сценарии. Metadata.js на сервере может пригодиться для построения сложных индексов или серверного рендеринга. В большинстве случаев, хватает возможностей metadata в браузере.

Данную связка для создания публично доступного api с авторизацией как лучше применить
Есть положительный опыт использования superlogin - со временем оформлю, как стандартный компонент для metadata v2

клиентское приложение на JS ходит за данными в http api cauchDB через интернет. Этот обмен шифруется?
Да

файлы, в частности картинки, которые хранятся в базе 1С будут кэшироваться
В нашем сценарии, присоединенные файлы и картинки хранятся в couchdb. На стороне 1С реализовано API, имитирующее работу с обычными присоединенными файлами.

PS:
Вопросы лучше регистрировать в issues
Продублировал данный ответ в github

PPS:
Если намерения серьезные, готов поучаствовать в совместном проекте
118. support 4484 09.12.16 19:40 Сейчас в теме
(117) Если здесь будут задавать вопросы, то внимания будет больше )
119. user659693_newlife2 22.12.16 12:39 Сейчас в теме
Добрый день! Поставил на сервер ваше приложение hello world. Всё работает. Хочу на базе него собрать приложение под наши нужны. Возникла проблема, не могу отключить окно авторизации. В файле default_settings.js убираю modal_dialog в false
			$p.iface.frm_auth({
				modal_dialog: false,
				try_auto: $p.wsql.get_user_param("zone") == $p.job_prm.zone_demo &&             $p.wsql.get_user_param("enable_save_pwd")
			});

но приложение умирает с ошибкой:
momentjs@2.14,alasql@0.3,pouchdb@6.0,jquery@2.2,metadata@0.11.220(dhtmlx.min.js+metadata.min.js):581 Uncaught (in promise) TypeError: Cannot read property 'attachForm' of undefined
at InterfaceObjs.$p.iface.frm_auth (https://cdn.jsdelivr.net/g/momentjs@2.14,alasql@0.3,pouchdb@6.0,jquery@2.2,metadata@0.11.220(dhtmlx.min.js+metadata.min.js):581:14020)
Пробовал перенести код из облака к себе и вырезать функцию $p.iface.frm_auth, но без нее данные не подтягиваются.... Надеюсь на помощь!
120. unpete 577 22.12.16 19:32 Сейчас в теме
(119) для отладки вместо momentjs@2.14,alasql@0.3,pouchdb@6.0,jquery@2.2,metadata@0.11.220(dhtmlx.min.js+metadata.min.js) можно указать momentjs@2.14,alasql@0.3,pouchdb@6.0,jquery@2.2,metadata@0.11.220(dhtmlx.min.js+metadata.js)
Смысл этого фрагмента кода: автоматический вход под гостевой записью для гостевой зоны ($p.wsql.get_user_param("zone") == $p.job_prm.zone_demo)
Способов авторизоваться и доставить на клиента начальный снапшот много - всё зависит от вашей задачи.
121. user659693_newlife2 23.12.16 11:06 Сейчас в теме
(120)
Моя задача:
Я встраиваю метадату в портал, это отдельная страница, где дилер будет работать(получать / изменять) документы из 1С. Так как дилер уже авторизовался в Битриксе, авторизация в метадате должна быть скрытой(планируется, что все дилеры будут работать под одной "системной" учёткой гостя ). Как такое сделать? :)
122. unpete 577 23.12.16 15:33 Сейчас в теме
Как такое сделать
В демо-примере helloworld как раз реализован нужный вам сценарий - пройдите по шагам в отладчике браузера процесс инициализации приложения - код снабжен подробными комментариями
123. alprk 11.01.17 10:42 Сейчас в теме
А есть сейчас какое-либо решение с авторизацией доступа к данным? Через RLS, либо как-то еще?
Ведь все пользователи подключаются к CouchDB, используя одну и ту же учетную запись...
124. unpete 577 11.01.17 14:23 Сейчас в теме
(123)
все пользователи подключаются к CouchDB, используя одну и ту же учетную запись
Странная гипотеза.
В стандартном сценарии, пользователи используют индивидуальные учетные записи.
Гостевая запись настроена в демо-примере, но на то он и демо-пример, чтобы к нему могли подключиться анонимусы.
125. alprk 11.01.17 14:35 Сейчас в теме
(124)

В стандартном сценарии, пользователи используют индивидуальные учетные записи.


Извините, упустил это.
126. alprk 11.01.17 14:41 Сейчас в теме
Но все-таки как насчет возможности, например, ограничить менеджера в записи изменений в не закрепленных за ним клиентов: в CouchDB такое можно сделать, скажем, через "validate_doc_update". А PouchDB ведь даст внести изменения и все сломается только при репликации. Хотя конечно можно продублировать код авторизации в коде формы.
Но вот как ограничить возможность просмотра записей вообще не понятно.
127. unpete 577 11.01.17 19:13 Сейчас в теме
(126) У объектов DataObj есть подписки на события - перед записью, при изменении реквизита.
По ограничениям на чтение, сейчас использую фильтрованную репликацию, при которой в браузер попадают только разрешенные текущему пользователю данные.
Запланирована замена фильтрованной репликации индивидуальными базами для групп пользователей на сервере - это повысит надёжность и безопасность.
128. unpete 577 11.01.17 19:20 Сейчас в теме
(126)
продублировать в коде формы
ВАЖНО! не в коде формы, а в js модуле объекта - документа или справочника.
Формы могут быть любыми, в том числе - внешними, написанными на других фреймворках. Metadata отвечает за согласованность и высокоуровневую работу с данными, а не за внешний вид экранных форм.
129. DAlik 12.01.17 09:38 Сейчас в теме
А вы не думали, как сделать возможность гостю пройти регистрацию в легком клиенте?
В виде какой-то формы для отправки запроса на создание учетной записи. Можно сделать обмен со справочником Внешние пользователи без создания пользователя ИБ. Само создание пользователя ИБ и уведомление на почту, можно оставить пока на ручнике администратору.
130. unpete 577 12.01.17 15:36 Сейчас в теме
(129)
регистрацию в легком клиенте
В составе metadata.js есть довольно крутой плагин регистрации и авторизации - кроме стандартной авторизации по паролю, поддержан вход с помощью oAuth2 социальных сетей facebook, google, yandex, vk и т.д.
131. DAlik 12.01.17 16:57 Сейчас в теме
Отлично. Надо попробовать. Останется придумать как вернуть учётку в 1С и связать её с пользователем ИБ.
132. AlexanderKai 14.02.17 13:41 Сейчас в теме
Интересная публикация.
Вы написали, что в CouchDB запись и чтение неблокирующие, как тогда, например, контролировать остатки?
И как я понял - есть синхронизация между базой 1С и CouchDB. Соответственно есть временные задержки и вероятность получения неконсистентного состояния. Как вы это обходите?
133. unpete 577 14.02.17 15:29 Сейчас в теме
(132)
как тогда, например, контролировать остатки
Эта задача не связана собственно с транзакцией записи. У нашего документа есть подписки на события (примерно такие же, как в 1С, например, перед записью). Никто не вправе запретить вам проверить остатки в обработчике этого события.

(132)
вероятность получения неконсистентного состояния
Metadata.js реализует шину данных. Информация в эту шину может поступать из браузеров, из 1С, из неких датчиков или других не 1с учетных систем. О какой неконсистентности речь? 1C - это всего лишь один из способов поместить данные в couchdb или прочитать из оттуда для своих отчетов.
134. AlexanderKai 14.02.17 17:25 Сейчас в теме
То есть metadata изначально разрабатывалась под формирование отчетов?
135. unpete 577 14.02.17 20:56 Сейчас в теме
(134)
разрабатывалась под формирование отчетов?
Нет, сложные отчеты удобнее формировать в 1С. metadata разрабатывалась для offline-first веб приложений.
136. user693175_vishnyamila 14.02.17 23:23 Сейчас в теме
Спасибо, довольно полезная информация!)
137. vlad1976 09.03.17 11:38 Сейчас в теме
У меня почему то работает только в браузере google chrome. во всех других "Ошибка сети или сервера. Запрос отклонен." как найти проблему?
138. unpete 577 09.03.17 15:29 Сейчас в теме
(137) Старая версия v0.12 (та, про которую написана статья), должна работать во всех браузерах, кроме IE.
В новой v2.0, требования к браузеру еще выше - задействован ES6 без транспиляции.
Сообщение "Ошибка сети или сервера. Запрос отклонен.", возникает, когда система не находит couchdb по указанному в параметрах подключения пути.
Проверьте в отладчике, по какому url движок mrtadata пытается найти couchdb. Кроме строки подключения, обратите внимание на префикс баз, зону и суффикс пользователя
139. salamankas 16.03.17 11:12 Сейчас в теме
Коллеги, пытаюсь опробовать рецепты данной статьи, но не могу скачать приложение "Hello world на metadata.js: mdhello.zip". Подскажите где ещё можно скачать ?
140. unpete 577 16.03.17 15:59 Сейчас в теме
(139)
где ещё можно скачать ?
Вся информация есть в github:
- библиотека интеграции https://github.com/oknosoft/metadata.js/tree/master/integration_1c
- helloworld v0.12 https://github.com/oknosoft/helloworld
- helloworld v2.0 https://github.com/oknosoft/helloworld/tree/v2
salamankas; +1 Ответить
141. dimax.dm 22.03.17 17:39 Сейчас в теме
В демо примере из статьи, попытался добавить в веб еще один документ (Телефонный звонок). В настройках интеграции на вкладки метаданные добавил документ, указал кешировать - doc, далее Запись meta. В браузере в разделе метаданные, новый документ не появился. Можно узнать подробней как добавить новый документ, справочник, регистр?
142. unpete 577 22.03.17 21:59 Сейчас в теме
(141)
подробней как добавить новый документ, справочник, регистр?
После изменения метаданных в 1С и записи их в couchdb, нужно выполнить gulp prebuild:meta, будет выполнен скрипт https://github.com/oknosoft/helloworld/blob/master/src/utils/prebuild.js, который скомпилирует файл https://github.com/oknosoft/helloworld/blob/master/tmp/prebuild.js с новыми метаданными. Далее - пересобрать проект - новые классы данных будут доступны в javascript.
143. dimax.dm 23.03.17 13:29 Сейчас в теме
Получилось, но выполнить пришлось gulp full
В настройке интеграции нажимал на вкладках Метаданные - запись meta и Регистрация - Зарегистрировать новые.
Новые документ и регистр в веб появились, но данных нет и при попытке добавить новый документ открывается добавление Перемещение денег.
Что не так?
144. unpete 577 23.03.17 22:00 Сейчас в теме
(143) Метаданные и интерфейс - слабо связанные сущности. Код helloworld v0.12 последний раз открывал в 2016 году. Возможно, там не настроено автоформирование дерева форм списков используемых метаданных.
Если менеджер и конструктор ваших новых данных есть в системе - можете писать про них любой код - подписки на события, модификаторы и т.д.
Автоформу списка можно открыть, например, набрав в консоли: $p.doc.имя_вашего_документа.frm_list()
145. dimax.dm 24.03.17 10:37 Сейчас в теме
На сколько понимаю автоформа нового списка документа формируется, но нет данных и возможности добавить новый документ. В консоли браузера Chrome Ctrl+Shift+I > Console?
146. dimax.dm 24.03.17 11:30 Сейчас в теме
Попробовал helloworld v2 есть явные улучшения. В списке нового документа теперь получается добавить документ и реквизиты его. Более того он появляется в 1С. Но,
1. некоторые реквизиты документа написаны как undefined
2. документы из 1С не попали в веб
Как исправить?
147. unpete 577 24.03.17 14:59 Сейчас в теме
(146)
Попробовал helloworld v2
Это вряд ли возможно. В helloworld v2 нет автоформ. На сегодня, metadata.v2 - это невизуальный движок данных с поддержкой ссылочной типизации и автономного режима. ui-часть для v2 пока малофункциональна.

(146)
Как исправить
Наверное, потратить чуть больше времени за знакомство с кодом metadata.js и библиотеки интеграции с 1С.
148. artik1994 24.03.17 15:21 Сейчас в теме
149. Alexsisit 205 04.05.17 20:19 Сейчас в теме
Добрый день. Пытаюсь настроить CouchDB по вашему примеру выдает такую ошибку

{Обработка.ИнтеграцияПанельАдминистрирования.Форма.Форма.Форма(529)}: CouchDB_Пользователи: (404) {"error":"not_found","reason":"Database does not exist."}

ВызватьИсключение "CouchDB_Пользователи: (" + HTTPОтвет.КодСостояния + ") " + HTTPОтвет.ПолучитьТелоКакСтроку();

подскажите где глянуть?
150. unpete 577 04.05.17 21:12 Сейчас в теме
(149) Судя по тексту, вы используете свежую версию библиотеки интеграции, а описание относится к коду, написанному около года назад.
Вижу два варианта:
- Использовать комплект файлов от ноября 2016, включая metadata@0.11.220
- Перед выполнением команды "Настроить couchdb", выполнить команду "Создать базы и пользователей". В старой версии, создание и настройка баз были в одном флаконе. Сейчас - это разные операции.
Ну, и отладчик никто не запрещал. Ставите точку останова в модуле ИнтеграцияСериализацияСервер и можно топать по шагам.
151. user652485_daniel.905 16.05.17 17:04 Сейчас в теме
(150) такая же ошибка как в (149). Так и непонятно как решить. ЧТо имеется ввиду под комплектом файлов? Файлов проекта или cf для 1С? Файлы проекта закачивал по схеме как вы пишите в инструкции вот вчера буквально.
"выполнить команду "Создать базы и пользователей"." - где эта команда? Нигде ее нет.
В отладчике идет в строки
urls = ИнтеграцияПовтИсп.urls();
_url = ИнтеграцияПовтИсп.ОбщегоНазначенияКлиентСервер().СтруктураURI(urls.http);
Если _url.Схема = "https" Тогда
HTTPСоединение = Новый HTTPСоединение(_url.Хост, _url.Порт, urls.username, urls.password,,, Новый ЗащищенноеСоединениеOpenSSL());
Иначе
HTTPСоединение = Новый HTTPСоединение(_url.Хост, _url.Порт, urls.username, urls.password);
КонецЕсли;
ПутьНаСервере = Лев(_url.ПутьНаСервере, ИнтеграцияПовтИсп.СтроковыеФункцииКлиентСервер().НайтиСимволСКонца(_url.ПутьНаСервере, "/"));

HTTPЗапрос = Новый HTTPЗапрос(ПутьНаСервере + "_config/httpd/enable_cors");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.УстановитьТелоИзСтроки("""true""");
HTTPОтвет = HTTPСоединение.Записать(HTTPЗапрос);
Если HTTPОтвет.КодСостояния > 201 Тогда
ВызватьИсключение "CouchDB_CORS: (" + HTTPОтвет.КодСостояния + ") " + HTTPОтвет.ПолучитьТелоКакСтроку();
КонецЕсли;

В ПутьНаСервере - пустая строка, адрес коучдб: http://localhost:5984/hw_
Что делать, как добить тестовый пример?
153. unpete 577 16.05.17 21:30 Сейчас в теме
(151)
В HTTPОтвет.КодСостояния соответственно пришло 400 и описание ошибки Database does not exist
400 как раз и означает, что по запрашиваемому вами пути нет базы. Чтобы заработало, базы надо создать. В обработке ИнтеграцияПанельАдминистрирования должны быть для этого команды.
Что делать, как добить тестовый пример?
Если решение вам действительно интересно, начните с чтения документации couchdb и API Metadata.js
154. user652485_daniel.905 16.05.17 21:40 Сейчас в теме
(153) Какие это команды? Там команд вроде как больше нет. Демобазу отсюда брал из прикрепленных файлов. Нам сейчас не интересно читать весь комплекс документации, интересно на практике показать заказчику ваше решение. И чем быстрее тем лучше. А вы отправляете документацию всю читать. Нехорошо как то получается. В чем причина ошибки то? Все делал по вашему видео. Вы же сами говорите что по нажатию на кнопки которые в обработки база создастся сама - но этого не происходит (к слову, у вас в видео видно что база заранее уже в коучдб есть)
155. unpete 577 17.05.17 15:00 Сейчас в теме
(154)
не интересно читать весь комплекс документации
Если ваш проект дешевле 3 млн. руб. или если знаете другой способ решить вашу задачу - не надо тратить время на метадату. Это довольно сложная платформа, требующая от разработчика высокой квалификации.
156. user652485_daniel.905 17.05.17 17:34 Сейчас в теме
(155) Настолько сложная, что HelloWorld, выложенный ЗДЕСЬ, не работает, и вы считаете это нормальным и вместо решения предлагаете "почитать документацию"? Знаете, как то неправильно так продвигать свой продукт. Я конечно понимаю что вам лень разбираться "забесплатно", но раз вы выложили статью в которой вроде как все работает, у комментаторов выше все работает, а с апреля примерно работать перестало, кажется очевидным что обновился один из компонентов всей связки и необходимо обновить остальные, иначе ВСЕ будущие последователи будут сталкиваться с одним и тем же.
А проекты заказчику вы также сдаете, в стиле - не нравится что есть ошибки - валите от меня? Наверно нет. Было бы корректным хотя бы разобраться в будущем, я же не требую прямо сейчас это сделать. Если вы хотя бы собираетесь дальше развивать это.

Из той же логики не работать "забесплатно": ну вот потрачу я время на изучение, в итоге после получения новых знаний у меня получится и заказчик скажет: ну нам эт не надо. И получится что потрачу время на изучение основ, которые вы и так знаете, но вам лень что то описать здесь. Причем по итогу мне эти знания в будущем ни к чему будут скорее всего.

Как то проще надо быть.
157. unpete 577 17.05.17 21:17 Сейчас в теме
(156)
как то неправильно так продвигать свой продукт
Я не продвигаю никаких "продуктов". Публикуя статью, я рассчитывал найти партнеров на этом форуме, но со временем осознал, что напрасно теряю время.
Если вы хотя бы собираетесь дальше развивать это
Проект развивается. К разработке подключились три новых человека, но с каждым коммитом, мы всё дальше от 1С.
158. Region102 18.05.17 05:22 Сейчас в теме
(156) Это публикация без поддержки, включите немного мозг и все заработает. Мои старые публикации тоже не работают и люди вполне резонно просят их допилить под их релизы, но это уже платный функционал.
160. FSerg 66 18.05.17 10:06 Сейчас в теме
(156) Господи, это опенсорс, человек бесплатно делится совершенно невероятным техническим решением/опытом! Как можно высказывать какие-то претензии? Можно пытаться вежливо, очень вежливо попросить помощи, но никак не обижаться на отсылку читать документацию.
161. unpete 577 18.05.17 10:37 Сейчас в теме
(156)
Из той же логики не работать "забесплатно"
Деньги тут совершенно не при чём. Если бы ответ на ваш вопрос был в оперативной памяти, вы его получили бы моментально.
Проблема в отсутствии времени. На текущий момент, портфель заказов примерно в 5 раз больше, чем я могу обслужить.
Поднял цену для клиентов до 4 тыс. руб. в час, но они он отстают: "хотим быстрее, хотим больше".
152. user652485_daniel.905 16.05.17 17:05 Сейчас в теме
В HTTPОтвет.КодСостояния соответственно пришло 400 и описание ошибки Database does not exist.
159. user736995 18.05.17 09:11 Сейчас в теме
Интересная статья! Спасибо!
162. salamankas 23.05.17 11:06 Сейчас в теме
Проект развивается. К разработке подключились три новых человека, но с каждым коммитом, мы всё дальше от 1С.

Евгений, опишите, пожалуйста, куда Вы двигаетесь от 1С?
Есть ли у команды IRC или что-то подобное..?
Есть ли соглашение о разработке?
163. unpete 577 23.05.17 14:59 Сейчас в теме
(162) Основной вектор описан по ссылкам https://github.com/oknosoft/metadata.js/blob/master/roadmap.md и https://github.com/oknosoft/metadata.js/issues/177
IRC нет, есть публичные и несколько закрытых репозиториев github
Соглашения о разработке нет. Я отказался от идеи зарабатывать на продажах платформы. Новые релизы публикуются под MIT.
164. user652485_daniel.905 08.06.17 11:54 Сейчас в теме
В общем, настроить коуч дб руками и создать в нем базу из его интерфейса оказалось проще, таким образом демка запустилась.
Однако, попытка внедрить в свою базу успехом не увенчалась.
Что сделал:
1)Добавил объекты из приложенного конфига.
2)В макете обработки сделал макет для своей конфигурации "УправлениеПредприятием".
3) Поправил макеты _design...
4) Добавил объекты как в демке+ свой документ в определяемые типы
5) Создал в коуче новые базы с другим префиксом
6) Выгрузил метаданные и объекты в коуч из 1с
7) поменял в проекте в package префикс базы.
8) получил ошибку при сборке:
[14:36:47] Finished 'injected' after 324 ms
{ error: 'not_found',
reason: 'missing',
name: 'not_found',
status: 404,
message: 'missing' }
(node:1652) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError in plugin 'metadata-prebuild'
Message:
Cannot read property 'enm' of undefined
(node:1652) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Не подскажете куда дальше двигаться? уже второй день сижу ищу..
165. unpete 577 08.06.17 15:31 Сейчас в теме
(164)
404 error: 'not_found
для сборки файла описания метаданных, строка подключения для nodejs, обычно отличается от той, что будет использоваться в браузере. В актуальных версиях конфигурационных файлов предусмотрены отдельные переменные couch_path и couch_local.
В репозитории htlloworld живут исходники двух вариантов демо-приложения - для v0.12 и v2.0.
Сейчас я не располагаю временем чтобы актуализировать файлы в этих репозитоиях. Исправить ошибки вы можете самостоятельно - включите в node отладку и пройдите код по шагам - сразу увидите проблемное место.
166. user652485_daniel.905 09.06.17 14:42 Сейчас в теме
(165)
{ error: 'unauthorized',
reason: 'Name or password is incorrect.',
name: 'unauthorized',
status: 401,
message: 'Name or password is incorrect.' }
(node:7164) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError in plugin 'metadata-prebuild'

А где логин и пароль прописывается для коуча в проекте? В package ни в своей версии ни в репозитории у вас не обнаружил...
167. unpete 577 09.06.17 19:19 Сейчас в теме
(166)
где логин и пароль прописывается для коуча в проекте?
Важно: не для коуча, а для конкретной базы. В актуальных версиях, база meta - публичная, доступна для чтения без пароля. При инициализации metaengine есть несколько триггеров, где вы можете указать логины и пароли для разных баз вашей системы (не обязательно couchdb - никто не посмеет запретить вам использовать postgres, couchbase или иное хранилище), но проще убрать пароли с базы meta, тем более, что данные там обычно не хранятся - только описание метаданных.
168. user652485_daniel.905 13.06.17 09:33 Сейчас в теме
Нет паролей на базе. Но ошибка все равно такая. Попробовал взять версию свежее с github скачал, но все равно ошибка
{ error: 'forbidden',
reason: 'You are not allowed to access this db.',
name: 'forbidden',
status: 403,
message: 'You are not allowed to access this db.' }

Что то недонастроено в коуче? Я уже в коде что только не пробовал менять.
169. unpete 577 13.06.17 12:38 Сейчас в теме
(168) Попробуйте сформулировать, чего вы от меня хотите.
Я дал вам открытый код, дал какую-то документацию.
Если нужно моё время, то оно не продаётся. Клиенты записываются в очередь на 2018 год и к выбору этих клиентов я подхожу очень разборчиво.
Повторю рекомендацию: включите отладчик и двигайтесь по коду nodejs по шагам.
170. user652485_daniel.905 13.06.17 13:20 Сейчас в теме
Я не js-разработчик, для меня это новая область знаний и я должен не только понять что то в ней, но еще и сразу понять как решить ошибку заложенную во фреймворк, у меня взгляд не такой широкий. Я даже не понимаю как в js отлаживать.
Вот есть база, условно, erp_meta. он в нее лезет и не может попасть?
Тут только это настраивается или еще где то в коде?
"config": {
"couchdb": "http://localhost:5986/erp_",
"rest_1c": "",
"zone": 0,
"zone_demo": 1,
"prefix": "erp_",
"suffix": "",
"attachment_max_size": 10000000
}

Потому что если не в коде, это сузит мне область поиска хотя бы.
171. unpete 577 13.06.17 17:49 Сейчас в теме
(170) Дмитрий, без обид: чтобы использовать нашу библиотеку нужна экспертная квалификация в js.
Предполагается, что человек разработал с десяток интернет-магазинов и столько же онлайн и оффлайн сервисов и веб-приложений на традиционных фреймворках.
Упёрся в ограничения, ощутил потребность в метаданных как на стороне клиента, так и сервера.
В этом случае, metadata поможет перепрыгнуть планку, казавшуюся слишком высокой для предыдущего инструментария.
Если ваша задача достаточно серьёзна (от 3 млн. руб.), я готов обсудить совместный проект - в очередь на 2018 год.
Если знакомитесь с метадатой просто для расширения кругозора, вряд ли смогу быть полезен.
172. user652485_daniel.905 15.06.17 20:17 Сейчас в теме
(171) Вывести свою базу в метадату теперь дело чести.
Я перечитал еще раз внимательно всю тему. Моя первая ошибка - я не заметил в комментариях упоминания что нужно коуч дб 1.6 брать, а не 2.0. После переустановки на эту версию, получилось прямо из 1с и базы создать, и заполнить их. При gulp full в нетбинсе все же ошибка:

(node:2092) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError in plugin 'metadata-prebuild'
Message:
Cannot read property 'enm' of undefined
(node:2092) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
{ error: 'not_found',
reason: 'missing',
name: 'not_found',
status: 404,
message: 'missing' }

Есть подозрение что связано это с вашим комментарием:
"в макете _design_meta не прописано создание объекта meta_patch
Ошибку признаю - исправлено в актуальной версии. Обращение к базе meta происходит только при пересборке ./tmp/prebuild.js. Полагаю, если человек добрался до изменения метаданных, он увидит 404 при отладке prebuild.js " Тем не менее исправление этого момента в макете 1с результата не дало...
173. user652485_daniel.905 16.06.17 12:00 Сейчас в теме
Получилось, когда из git вытащил более новую версию объектов для 1с, а не ту которую здесь
174. Biilsun 19.09.17 16:28 Сейчас в теме
Объединять документы в один возможно? Или проще создать объединений в УПП и его публиковать. Рассматриваю вариант объединить документы заказ поставщику и Заявку на оплату в УПП.
176. unpete 577 19.09.17 21:08 Сейчас в теме
(174) Вопрос точно про метадату? Мы термин "опубликовать" не используем, т.к. данные веб-приложения могут повторять 1С-ные, могут отличаться, а могут жить своей самостоятельной жизнью безо всякой 1С.
Методологически правильнее, когда один документ отражает оно событие и никогда не редактируется.
Если в вашем бизнеспроцессе одно событие должно иметь несколько учетных последствий, то лучше говорить не об объединении документов, а об алгоритме проведения.
175. user606894_schana1w3 19.09.17 17:23 Сейчас в теме
177. Chokerka 19.09.17 21:31 Сейчас в теме
Начала изучать!
И уже есть первые успехи!
178. Biilsun 27.09.17 13:57 Сейчас в теме
Есть ли пример интеграции со старыми конфигурациями? у меня УПП 1.3 и БСП 2.3 там нет
179. unpete 577 27.09.17 14:03 Сейчас в теме
(178) Старые конфигурации поддержаны. Желательно, чтобы платформа была >= 8.3.8, но при экзотических требованиях, можно запустить и на 8.2.19
180. Biilsun 02.10.17 13:41 Сейчас в теме
Какие модули БСП необходимы для интеграции integration_light_2_3_1_220? у меня УПП по этому БСП 2.3 там нет
181. unpete 577 02.10.17 18:18 Сейчас в теме
Актуальная integration_light имеет версию 2.3.6.233.
Если нужна помощь - объясните, что именно вы планируете сделать на метадате. Если подозрение, что вы ожидаете от платформы не то, для чего она предназначена.
182. Biilsun 03.10.17 09:05 Сейчас в теме
(181)
Планирую реализовать документы "Заявка на расходование денежных средств" и "Заказ поставщику" для УПП.
Сейчас уже перевел тестовую базу УПП с режима совместимости 8.2.13 до 8.3.8.
Пытался обновить старую БСП 1.2.4 которая присутствует в УПП, понимаю что она довольно сильно отличается от 2.3 и помимо неё придётся переписать пол УПП.
Думаю, накатить БСП 2.3 частично только те модули или процедуры которые необходимы для интеграции с metadata поэтому и спросил существует ли по типу карты зависимостей от модулей?
Или какие другие варианты интеграции есть? наверняка уже с УПП интеграцию проводил кто-то, так как конфигурация довольно еще популярна.

Крайний вариант реализовать промежуточную базу на БСП 2.3 которая будет интегрирована с metadata, а с ней уже реализовать обмен с рабочей УПП штатными способами.
183. unpete 577 03.10.17 12:02 Сейчас в теме
(182) Вы делаете интерфейс к 1С или автономное решение на метадате, к шине которого может подключаться 1С?
Метадату решили использовать v0.12 или v2.0?
Интерфейс делается для своих филиалов или там будут жить внешние пользователи?
Сколько ожидается пользователей и событий в день (если меньше 300, то проще пустить этих людей прямо в УПП и не париться с метадатой)?

наверняка уже с УПП интеграцию проводил кто-то
Конечно, есть несколько сборок с УТ10.3, УПП, КА 1.1, но оформлять их в отдельные комплекты поставки - лениво.

реализовать промежуточную базу на БСП 2.3
Это было бы ужасно. Надеюсь, вы так делать не будете.
184. Biilsun 04.10.17 10:25 Сейчас в теме
(183) Планирую автономное решение, пользователей будет около 80 человек в регионах (представители компании в "полях" большая текучка поэтому они рассматриваються как внешние), работают через ipad, в дальнейшим планирую остальные сервисы туда подтянуть.
185. unpete 577 04.10.17 12:46 Сейчас в теме
(184) Ок, задача классная, но начать предлагаю со стенда-прототипа. Добейтесь, чтобы у вас заработал helloworld v2 (релиза пока не было, внутри - сыро). Там всего два справочника и один документ без табчасти. Когда разберётесь с демкой, большинство вопросов по реальной задаче отвалятся сами.
186. Biilsun 05.10.17 09:12 Сейчас в теме
(185) запустил локально все заработало, думаю надо не от 1с начинать разрабатывать, экспортировать метаданные и потом пытаться заточить под metadata. Нужно разрабатывать непосредственно на metadata оглядываясь на 1с. Возник вопрос, есть ли документация и примеры по разработке объектов в metadata? можно ли непосредственно в проекте объекты разрабатывать минуя couchDB напрмер создавать классы на JavaScript описывая поля и поведение объекта?
187. unpete 577 05.10.17 13:33 Сейчас в теме
(186)
объекты разрабатывать минуя couchDB напрмер создавать классы на JavaScript описывая поля и поведение объекта?

Да, посмотрите, например, этот модуль, но редактировать метаданные в 1С, всё-таки, удобнее.
188. unpete 577 05.10.17 13:38 Сейчас в теме
(186)
создавать классы на JavaScript описывая поля и поведение объекта
И не забываем про модификаторы, как здесь. Никто не мешает дополнить и переопределить автокласс некого объекта метаданных
189. user839201 06.10.17 11:22 Сейчас в теме
Не получается на своей базе запустить.
Вот что делал в тестовой базе где все получилось.
1) Установил couchDB и настроил про инструкции из этой статьи
2)установил метадату в папку www на диск С выполнив команды из консоли согласно инструкции из статьи
3) скачал тесовую базу helloworld_0_3_4_225.dt и развернул, выполнил все настройки из инструкции из статьи тоже все хорошо
в файле package.json прописал пути и префикс до couchDB
далее выполнил C:\www>gulp full
открыл index.html все заработало.

Далее попытался к своей базе (Настроенная ЗУП 3.1.2.95) прикрутить
1) сделал выгрузку конфигурации из свой предыдущей Демо, произвел объединение с зупом, в настройках объединения поставил отбор по подсистеме Интеграция и МетадатаДемо и накатил изменения.
2) запустил в режиме предприятие произвел точно такие же настройки как с Демо базой единственное на вкладке "Метаданные" добавил два своих справочника
Путь и префикс остались прежними поэтому в настройках package.json не менял выполнил команду C:\www>gulp full
открываю index.html появляется окно авторизации ввожу имя пользователя пароль нажимаю ОК и ничего не происходит белый экран,
чистил кеш браузера не помогало, кнопка настройка в окне авторизации тоже не работает.
Посмотрел, что в консоли и обнаружил ошибку
Uncaught TypeError: Cannot read property '__define' of undefined
at app.js:635
at app.js:7
at app.js:9
вот сама строчка $p.cat.users_acl.__define({

возникло подозрение что отсутствует синоним "__define' " прошелся поиском все на месте (ПометкаУдаления)
почему пометка удаления может быть undefined?

подскажите пожалуйста, что я сделал не так?
190. unpete 577 06.10.17 11:44 Сейчас в теме
(189) Вы пытаетесь использовать v0.12, я очень давно не заглядывал в эту версию. Усилия направлены на v2.
v0.12 вполне работоспособна, но с лёгким стартом из коробки у неё трудности.
На 99%, проблема в несовпадении версий каких-то библиотек из npm с теми, что ожидает ваш код.
Воспользоваться метадатой, как черным ящиком в ближайшие годы - не получится. Если нужен результат, придется разобраться, как оно устроено изнутри.
191. dimax.dm 09.01.18 13:15 Сейчас в теме
Добрый день, Евгений!
Когда планируется релиз v2?
На сколько текущая версия близка к релизу?
Правильно понимаю что демо проекты на v0.12 достаточно легко можно перевести на v2?
192. unpete 577 09.01.18 16:09 Сейчас в теме
(191) v2-core давно production-ready. На нём крутятся реальные проекты. Более года как.
v2-ui научился рисовать адекватные интерфейсы ещё в декабре 2016.
Вообще, v2 - это много библиотек род разные задачи.
Если хотите строить микросервисы - берите и пользуйтесь.
Бизнес-логику в браузере и на сервере, так же, можете кодировать смело.
Автогенератора форм и отчётов в ближайшее время ждать не стоит - загружены другими задачами.
193. s_vidyakin 63 09.01.18 17:48 Сейчас в теме
(192)
Открыл hello-world
Документ Перемещение - пробую выбрать другого получателя, жму "Показать все" - браузер виснет намертво, предлагает завершить процесс
Закрыл hello-world
194. dimax.dm 15.01.18 21:47 Сейчас в теме
как обстоят дела с правами и их настройкой? есть ли примеры и/или что почитать?
есть ли и планируются ли еще примеры на v2 кроме helloworld?
195. unpete 577 16.01.18 09:09 Сейчас в теме
(194)
как обстоят дела с правами и их настройкой?
Дела обстоят хорошо, но для 1С-ника очень непривычно - подходы отличаются.
Для целей rls используется фильтрованная репликация или отдельные методы микросервиса.
Еще, с элементом служебного справочника Пользователи, ассоциирован Мандат - замороженная структура, в ключах которой имена объектов метаданных, а значения - строка разрешений (просмотр, изменение, редактирование, проведение и т.д.). Эту структуру можно использовать в интерфейсе и бизнеслогике.
планируются ли еще примеры на v2
Есть комплекс мероприятий по созданию сообщества разработчиков на metadata.js
196. dimax.dm 16.01.18 13:07 Сейчас в теме
правильно понимаю что фильтрация происходит на стороне couchdb?
197. unpete 577 16.01.18 16:44 Сейчас в теме
(196)
фильтрация происходит на стороне couchdb
Если используется адаптер couchdb то да, это один из вариантов. Еще, фильтрация может выполняться js-кодом микросервиса или другим, отличным от couchdb хранилищем данных.
198. leobrn 614 03.08.18 04:58 Сейчас в теме
Подскажите в чем может быть проблема, выходит ошибка при запуске:

Failed to compile
./src/index.js
Module parse failed: Unexpected token (46:11)
You may need an appropriate loader to handle this file type.
|
| render() {
| return <Provider store={store}>
| <RootView
| history={history}
199. unpete 577 03.08.18 07:39 Сейчас в теме
(198) Скорее всего, перепутаны версии пакетов npm - у вас babel внутри webpack не понимает jsx
Оставьте свое сообщение