Записки про metadata.js

31.07.18

Разработка - Языки и среды

Отличительные особенности разработки на metadata.js

Разрабатывать на metadata.js – нифига не просто. По крайней мере мне, закоренелому, или даже закостенелому 1Снику.

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

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

Но, тем не менее, пересесть на metadata.js вполне возможно. В процессе этой пересадки я, как 1Сник, постоянно делаю некоторые наблюдения и маленькие открытия. Не всемирного масштаба, а так, «для себя». Зная, что я не один такой, я стал записывать эти открытия, отличающие разработку на metadata.js от 1С. Возможно, они для кого-то окажутся полезными.

Изложу некоторые из них.

 

Метаданные «на лету»

 

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

Взять те же вычисляемые свойства. Захотел, чтобы у справочника "Номенклатура" было свойство, вычисляемое на лету, с учетом контекста - на здоровье!

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

И все, свойство доступно их любого места! Хоть через точку, хоть запросом (спасибо, alasql). Видно в формах - и элемента, и списка.

Жаль, в 1С так нельзя пока.

Наряду с вычисляемыми свойствами, в metadata.js можно на лету корректировать метаданные.

Вот в 1С, например, все привыкли к работе с доп.свойствами. В УПП они хранились в регистре сведений, сейчас хранятся в табличной части объекта.

А в metadata.js их можно выпрямить - развернуть таб.часть свойств в реквизиты объекта. Причем, хранить в базе данных можно, как и раньше, в виде таб.части, а при получении объекта в ОЗУ - выпрямлять.

Ну и, соответственно, пользоваться доп.свойствами, как обычными реквизитами - показывать в формах, делать по ним отбор и сортировку, и т.д.

Можно вываливать в объект все доп.свойства, можно - определенный перечень, не важно. Можно даже сделать список выпрямляемых свойств зависимым от контекста. Можно делать вычисляемые доп.свойства, и т.д.

В итоге метаданные становятся невероятно гибкими. Они не возвышаются, как гранитный монумент, доступный только сложными способами избранным.

 

Производительность

 

Когда в 2015 и 2016 годах Евгений Маляров, автор metadata.js, рассказывал о возможностях платформы, была одна проблема - отсутствовали реальные внедрения и, соответственно, подтверждение его слов.

Главное, что было не доказанным - реальная способность системы, созданной на metadata.js, держать сотни и тысячи пользователей.

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

Пока можно привести две цифры - 400 и 700. Столько пользователей держит приложение «Заказ дилера», созданное на metadata.js, у двух наших клиентов.

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

Количество пользователей продолжает активно расти. Думаю, до конца этого года кто-то из клиентов перевалит за 1000 пользователей.

 

Табличные части

 

Прикольно в metadata.js работать с табличными частями, например - сворачивать их.

В 1С ведь как? При свертке перечисляем колонки, по которым надо сгруппировать, и колонки, по которым посчитать итог. Тут внимание - итогом может быть только сумма.

А в metadata.js итогом может быть целый ворох функций. Максимум, минимум, среднее и т.д.

А еще - внимание - можно подсунуть свою функцию, которая лежит где-то в стороне, и вычисляет агрегат по нужным вам правилам. Хоть медиану считайте.

Код функции свертки лежит в открытом виде, как и весь остальной код metadata.js. В платформе 1С, увы, пока такого нет.

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

А для получения метаданных придется таскать с собой объект или ссылку, которому принадлежит табличная часть, потому что у табличной части нет реквизита вроде «Владелец» или «Объект». Так же, как у строки таб.части нет реквизита типа "Табличная часть".

В metadata.js у строки есть владелец (owner) - таб.часть, и у таб.части есть owner - объект. Соответственно, можно, имея строку таб.части, не сходя с места добраться до объекта.

Просто приятные мелочи.

 

Offline

 

После 1С никак не могу привыкнуть к тому, что решения на metadata.js могут работать без связи с сервером. Даже вообще без Интернета.

Так получается благодаря разным способам кеширования. Например, номенклатура у нас с типом кеширования «ram». Это значит, что при первом старте приложения, подключенного к интернету, весь справочник номенклатуры грузится в ОЗУ, и сохраняется в базе данных браузера (кажется, она называется IndexedDB).

В следующий раз, если интернета нет, будет использован справочник из базы браузера. Можно оформлять документы, рисовать изделия - в общем, работать. Все, что нужно (в том числе цены) есть в локальной базе браузера.

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

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

Что важно: вся работа ведется в том же браузерном приложении, что и в офисе. Это не отдельная, мобильная версия, которую надо устанавливать и запускать обмен.

В моем 1Сном мозге такое пока не уложилось. Должен ведь быть сервер! И с ним должна быть связь! А если связи нет, то должна быть распределенная база данных, со всем вытекающим геморроем с обменами!

 

Настоящее единство

 

Опять же, после 1С в голове не укладывается новый класс задач, которые решает metadata.js - единая информационная система для компании и ее клиентов.

В практике работы с 1С УПП и Документооборота часто возникал вопрос: как запустить в систему, например, поставщиков? Приходилось делать на сайте, который на битриксе, личные кабинеты поставщиков.

Но личный кабинет на сайте - это не информационная система. Что там может поставщик? Какие-нибудь статичные файлы посмотреть, вроде потребностей, или договор согласовать, или протокол цен. Как говорится, пост-лайк-коммент.

Запустить его в свою систему нельзя по объективным причинам. Во-первых, доп. лицензии нужны. Во-вторых, если это УПП, то только через RDP, а это зло. Если даже это не УПП, а что-то с тонким или веб-клиентом, то все равно нужны лицензии.

Аналогичные трудности - если нужно, например, организовать единое информационное пространство для работы с заказчиком над совместным проектом.

Веб-приложений для управления проектами полно, но там все достаточно скучно - задачи, этапы, графики. Если хочется видеть что-то про взаиморасчеты, затраты, отгрузки, закупки и т.д. - придется городить огород. А это не всегда возможно - сервис управления проектами не даст себя портить программистам.

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

А в metadata.js работа компании с клиентами и поставщиками в одном приложении - один из базовых принципов. Например, в решении «Заказ дилера» такой подход заложен прямо в названии.

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

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

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

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

 

СУБД

 

Мозг никак не привыкнет к работе с СУБД, которая практикуется в metadata.js.

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

А в metadata.js, по сути, у тебя есть все и ничего - CouchDB. Типовое приложение работает тремя базами - ram, doc и remote. Где они лежат - вообще не важно. Одна может быть в локальной сети, вторая в Германии, третья в Москве. А со стороны приложения работа с ними совершенно идентична.

И нет никакой разницы, «моя» это база или «чужая» - интерфейс взаимодействия абсолютно одинаков. Я долго тупил на этом месте, потому что парадигма 1С прочно в голове засела. Все пытался узнать - а как вон с той базой мне соединяться? Какой там интерфейс, API? На что получал ответ - точно такой же. Если знаешь строку подключения, логин и пароль, то все операции со всеми базами выполняются одинаково.

Причем, есть несколько способов работы с ними. Рекомендуемый - через конструкции metadata.js. Например, хочешь выбрать документы определенного типа за период - обращаешься к соответствующему методу менеджера документов, ровно как в 1С. А дальше работает адаптер (PouchDB), который сходит в нужные базы CouchDB и притащит документы.

Другой способ - обращаться не через менеджер, а прям к базе запрос делать, через API CouchDB. Тут уже полная свобода.

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

Сервис планирования, например, вообще стоит отдельно от основного приложения и у него нет «своей» базы. К нему обращается, например, заказ, и говорит - запланируй меня, в смысле производство. Сервис планирования сам сходит в нужные базы, возьмет данные (загрузку, мощности и т.д.) и выдаст результат в заказ.

 

Резюме

 

Понятно, что многие из вас – асы в веб-разработке, и написанное в публикации покажется наивным лепетом зеленого гимназиста. Я на звание веб-разработчика не претендую, равно как и на должность программиста на metadata.js. Не дорос еще.

Но многие, опять же, такие же, как я – почти чистые 1Сники. Я это точно знаю по опыту общения с ребятами, которые пытаются чего-то сделать на metadata.js.

Metadata.js стоит посередине между 1С и веб. Это – ее преимущество. Но это же – и ее беда. 1Сник не понимает веб, вебщик не понимает 1С. Потому сообщество разработчиков, пока еще, очень невелико – лишь десятки человек.

Данная публикация, как и мои «записки 1Сника», из которых она собрана – это взгляд на платформу metadata.js со стороны паттернов разработки 1С. Вообще, я не планировал эти материалы публиковать в виде статьи – просто записывал, чтобы не забыть, в facebook. Но вчера ребята попросили написать что-нибудь про metadata.js, вот я и исполняю.

Если подобные материалы вам интересны, я это учту. Ну и, соответственно, учту, если не интересны.

См. также

Языки и среды Программист Платформа 1С v8.3 Бесплатно (free)

Будем писать свои скрипты на питоне и запускать их на 1С.

15.04.2024    4030    YA_418728146    13    

62

Мобильная разработка Языки и среды 1С:Элемент Программист Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    18310    ROk_dev    74    

43

Языки и среды Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

16.01.2024    7327    SeiOkami    25    

61

Языки и среды Программист Бесплатно (free)

Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.

08.08.2023    4205    acvatoris    6    

15

Языки и среды Программист Платформа 1С v8.3 Россия Бесплатно (free)

Написание статического анализатора для 1С традиционным способом на Си.

30.06.2023    3496    prohorp    15    

12

Языки и среды Программист Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    2313    0    kembrik    2    

7

Языки и среды Программист Платформа 1С v8.3 Бесплатно (free)

При работе с 1С ORM (object relation mapping) все время преследует ощущение постоянного создания монолитного приложения — один раз привязался к какой либо сущности (например, справочник Контрагенты), и весь код заполнен ссылками на эту конкретную реализацию. Можно ли независимо разрабатывать в ORM совместимые между собой справочник «Контрагентов» и использующий его документ «Платежное поручение», но при этом избежать жестких зависимостей? Спасут ли нас микросервисы? Пример на аннотациях Java демонстрирует, как это возможно делать.

13.03.2023    1305    1CUnlimited    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Timur.V 80 31.07.18 10:21 Сейчас в теме
Не хватает ссылок, для тех, кто первый раз читает про metadata.js

Metadata.js для построения дешевых высоконагруженных сервисов
https://infostart.ru/public/535370/

Hello world на metadata.js
https://infostart.ru/public/540168/
pm74; TreeDogNight; Gureev; Kochergov; +4 Ответить
2. yogaga 31.07.18 10:33 Сейчас в теме
Все это очень хорошо, но решён ли вопрос с актуальной документацией для разработчика?
3. 1c-intelligence 12849 31.07.18 10:45 Сейчас в теме
(2) нет, на документацию времени решительно не хватает.
4. unpete 577 31.07.18 10:50 Сейчас в теме
(3)
на документацию времени решительно не хватает
его не хватает не только на документацию, но и на базовый функционал - по полю ввода, динсписку и компоновке, задачи в github висят годами
5. 1c-intelligence 12849 31.07.18 10:52 Сейчас в теме
(4) так, тсс, здесь не исповедальня и не жалобная книга.
9. yogaga 31.07.18 11:43 Сейчас в теме
(3)Это проблема - как тогда JS-разработчику использовать фреймворк на сторонних проектах?
10. 1c-intelligence 12849 31.07.18 11:49 Сейчас в теме
(9) проблема, кто спорит. Точнее - задача, которую надо решить. Решим когда-нибудь.
11. yogaga 31.07.18 12:11 Сейчас в теме
(10) Для вас - задача, а для других проблема :)) Хотя, если нет планов более-менее широкого распространения, то нормально.
CSiER; pm74; +2 Ответить
13. unpete 577 31.07.18 14:46 Сейчас в теме
(9)
как тогда JS-разработчику использовать фреймворк на сторонних проектах?
Подключиться к нашему проекту и разработать те разделы документации, которые востребованы в первую очередь.
Код мы комментируем тщательно, но автоописание API через JSDoc - это ведь, не документация. Нужен художественный текст с интересными примерами.
14. yogaga 31.07.18 15:54 Сейчас в теме
(13) Это, конечно, хорошо. Но это тогда должен быть энтузиаст, заказчик оплачивать доработку фреймворка, вместо реализации проекта, не будет.
15. unpete 577 31.07.18 21:18 Сейчас в теме
(14)
должен быть энтузиаст, заказчик
С этим особых проблем нет - денег хватает. Трудность в том, что задачи по платформе некому делегировать. Готовых специалистов нет, а однобокий Гуру в 1С или JS не хочет (не может себе позволить) на год-два превращаться в стажера.
20. yogaga 01.08.18 07:44 Сейчас в теме
(15) Понятно. На текущий момент получается, что для запуска своего проекта на метадате надо сначала присоединиться к разработке метадаты.
21. 1c-intelligence 12849 01.08.18 08:15 Сейчас в теме
(20) мнения по этому поводу разделяются. Один парень считает, что... Ну, выше почитайте, что считает этот парень.
Второй парень считает, что ждать, во-первых, нечего, а во-вторых - бессмысленно. Платформа никогда не будет "законченной", "готовой", "полностью документированной" и т.д. Надо просто брать и делать.

Ну и не забывать, что платформа - открытая. Это означает, что, делая любой проект на metadata.js, вы не заметите, как стерлась грань между платформой и приложением.

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

А тут все едино. Просто файлы с кодом приложения лежат в одной папке, а файлы с кодом платформы - в другом.
22. yogaga 01.08.18 08:34 Сейчас в теме
(21) Допустим, мы начинаем проект на метадате. Идеальным видится команда из 1С-ника и JS-ка. Если с 1С-ником всё вроде понятно - он может разобраться с концепцией метадаты, но использовать грамотно сразу не сможет. Средний JS-ник же привык работать с хорошо документированными фреймворками, и "въехать" в метадату без документации и качественных примеров ему будет тяжело (и неинтерсно, скорее всего). JS-ник выше среднего не будет работать на голом энтузиазме, ему бабло рубить надо. И вот вопрос - а кто сможет "взять и делать"? Пока - никто, кроме компании Окнософт, имхо.
23. 1c-intelligence 12849 01.08.18 08:43 Сейчас в теме
(22) лично мое мнение - лучше получится у 1Сника, потому что объектная модель больше похожа на 1С.
Самый подходящий персонаж - фикса 1С. Правильная фикса, при желании, может организовать себе уйму свободного времени. Если потратить его на выполнение несложного проекта на metadata.js, то польза будет обоюдной - и фиксе, и его работодателю.
24. yogaga 01.08.18 09:02 Сейчас в теме
(23) А нужна ли метадата для несложных проектов? И соотношение затраченного времени и полученного результата будет не очень хорошим.
То, что это работа на перспективу понятно, но, как написано в (15) 1-2 года работы "стажером" - это очень много. Я сейчас вижу потребность у бизнеса в подобном продукте, но "продать" бизнесу метадату на текущий момент очень сложно...
25. 1c-intelligence 12849 01.08.18 09:36 Сейчас в теме
(24) 1-2 года - это мнение "того парня".
Лично мне кажется, что успех как раз кроется в несложных проектах. Несложная там реализация, а не выхлоп.

Банальный пример, который мы сейчас сами будем делать, чтобы помочь одному знакомому фиксе в обретении успеха - сделать красивую смотрелку цифр и графиков на метадате, а цифры будут из 1С. Делать такую смотрелку на 1С не интересно, потому что все равно криво получится. А на метадате будет красиво. И сделать несложно. А начальник будет доволен. Ну и фиксе хорошо.
26. yogaga 01.08.18 09:57 Сейчас в теме
(25) Да вот в том и проблема, что без вашей помощи "с нуля" даже такое реализовать будет очень сложно. Хотя, если выложите этот проект в готовом к применению виде - уже будет намного проще.
27. 1c-intelligence 12849 01.08.18 09:59 Сейчас в теме
(26) да, так и собираемся сделать (выложить, в смысле).
28. user1025004 01.08.18 10:47 Сейчас в теме
(23)
фикса

Штатный программист обычно называется "фикси". А "фикса" это металлическая коронка на зубе.
29. 1c-intelligence 12849 01.08.18 11:06 Сейчас в теме
(28) ценное замечание. Ну а чо.
48. nyam-nyam 02.08.18 10:15 Сейчас в теме
(28)А может быть фикса это женский пол фикси?
СергейК; +1 Ответить
30. unpete 577 01.08.18 12:25 Сейчас в теме
(22)
Средний JS-ник же привык работать с хорошо документированными фреймворками
А можно пример? Какой такой JS фреймворк не про интерфейс, а про ссылочную типизацию и распределенные данные? С подписками на события, модификаторами, допреквизитами.
imho, выбор у этого "Среднего JS-ник" простой: писать движок данных с нуля или задействовать нашу математику. Поправьте, если ошибаюсь.
32. yogaga 01.08.18 12:41 Сейчас в теме
(30) Я не про возможности фреймворка, я про отсутствие качественной документации и небольшое количестве примеров.
33. unpete 577 01.08.18 13:00 Сейчас в теме
(32)Если знаете нормально документированный инструмент, решающий схожие задачи на JS - подскажите, возьму с него пример или вообще переключусь на более проработанное решение. Пока, я альтернатив не вижу.
35. yogaga 01.08.18 13:09 Сейчас в теме
(33) При чем тут схожие задачи? У вас есть проблема с документацией, вы проблему признаёте. Иван пытается проблему как-то решить. Я же просто говорю, что на данном этапе "продать" метадату бизнесу кому-то, кроме компании Окнософт, будет очень сложно. Надеюсь, что проблема в конечном итоге будет решена в обозримом будущем.
36. unpete 577 01.08.18 13:15 Сейчас в теме
(35) Сейчас метадата не предназначена для "продажи бизнесу". Она может быть полезна программисту, если он хочет расширить кругозор. На большее мы не претендуем.
38. yogaga 01.08.18 13:17 Сейчас в теме
(36) Но в будущем вы планируете претендовать на большее? Или нет?
47. unpete 577 01.08.18 17:14 Сейчас в теме
(38)
будущем вы планируете претендовать на большее? Или нет?
Где там матери и ее кастрюлям уцелеть в перспективе, удлиняемой жизнью сына
12. unpete 577 31.07.18 14:40 Сейчас в теме
(2)
вопрос с актуальной документацией

(6) Там не обмен и вообще не УРБД. Если есть реальные задачи, тогда есть смысл расширить кругозор, но это потребует много времени - комментариями на инфостарте тут не ограничишься.
6. Ziggurat 50 31.07.18 11:07 Сейчас в теме
Так получается благодаря разным способам кеширования. Например, номенклатура у нас с типом кеширования «ram». Это значит, что при первом старте приложения, подключенного к интернету, весь справочник номенклатуры грузится в ОЗУ, и сохраняется в базе данных браузера (кажется, она называется IndexedDB).

Делал УРБД, в общих чертах представляю как это организовано в 1С. Напиши, пожалуйста, если есть возможность, каким образом происходит синхронизация: например у нас есть три версии одного документа/справочника созданного в центральной базе, сделаны офлайн изменения на разных ПК, ПК одновременно получили доступ к основной базе и начали синхронизацию - как прогнозировать какая версия из этих трех документов останется в базе?
7. TODD22 19 31.07.18 11:09 Сейчас в теме
(6)Скорее всего "версией" рулит CouchDB при обмене. Хотя наверное можно и самому в процесс вмешаться.
19. 1c-intelligence 12849 01.08.18 07:25 Сейчас в теме
(7) сейчас, насколько я знаю, внутрь процесса управления версиями CouchDB глубоко залезть нельзя. Указать rev (идентификатор версии) можно, таким образом сказав CouchDB, что это тот же самый объект. Но в механизмы сравнения версий доступа нет.
8. leemuar 21 31.07.18 11:30 Сейчас в теме
(6) как написал TODD22 возможны 2 варианта - отдать разруливание серверу CochDB, либо написать функцию на JS, разруливающую такие конфликты.
16. CheBurator 2712 31.07.18 22:29 Сейчас в теме
Оффлайн.
в оффлайне "вносят" данные в базу.
за вреям оффлайна поменялась "структура" базы. Добавлены новые реквизиты, которые обязательно должны быть заполнены, причем заполняет юзверь, интерактивно. Что будет при сливе оффлайновых данных в базу? как отработает заполнение обязательных данных?
17. Sapiens_bru 4 01.08.18 07:22 Сейчас в теме
(16) Не знаю как это разруливается именно в metadata, но в похожих по смыслу веб проектах используется для обмена информацией набор данных типа 1С Структура. Где идёт перечисление всех свойств и их значений. Получив неполную структуру данных сервер всё равно пишет её в БД, ровно как и получив избыточную - пишет те поля, которые знакомы базе.

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

То есть программист-конфигураст создающий новое обязательное интерактивное свойство должен предусмотреть некое значение по умолчанию, если всё же пользователь не задаст свойство. Либо же программист разработчик платформы предусмотрит значения по умолчанию для всех возможных типов данных. Как например это сделано в платформе 1С с пустой датой, булевым - Ложь, ПустаяСсылка итд.
18. 1c-intelligence 12849 01.08.18 07:24 Сейчас в теме
(16) для хранения данных используется CouchDB, она не табличная, и про метаданные ничего не знает. Поэтому структура данных в двух разных объектах одного типа может различаться, это совершенно нормально.
Про метаданные знает приложение. Оно запросит объект из CouchDB (сырые данные, по сути), и заполнит этими данными объект, соответствующий метаданными. Отсутствующий реквизит будет на месте, только не будет заполнено его значение.

Ну и, не забываем, что это поведение можно переопределять. Например, заполнять отсутствующие реквизиты любыми значениями.
31. unpete 577 01.08.18 12:34 Сейчас в теме
(16)В мире NoSQL куча проблем, но вот этой "структура базы" - там нет.
как отработает заполнение обязательных данных?
Нормально отработает. Представьте, что база - это вы и вам принесли накладную на старом бланке или вообще, написанную от руки. Вы ведь, сможете понять, что там написано?
34. unpete 577 01.08.18 13:06 Сейчас в теме
(16)У нас, структура хранения данных не тождественна структуре метаданных прикладного решения.
Если перевести на 1С-ный язык, у вас может быть одна база SQL, к которой одновременно подключены УТ и Бухгалтерия. При этом, они будут иметь общие справочники, состав реквизитов у которых будет разный. У номенклатуры может быть склад по умолчанию, видимый только из УТ и счет учета, видимый только из БП.
А еще, изоляция данных и метаданных, позволяет делать вот такие штуки - прозрачно для прикладного программиста
37. CheBurator 2712 01.08.18 13:16 Сейчас в теме
ну, веб - это вообще отдельная песня. Интернет - на 95% куча ..овна, и базы там такие же (не от хорошей жизни, конечно).
39. pm74 203 01.08.18 13:35 Сейчас в теме
(0) Иван спасибо за статью. После отпуска буду пробовать разобраться с метадатой. Как раз появится больше свободного времени (я надеюсь), т.к перехожу полностью на удаленку.
Пока интересуют следующие моменты.
Есть ли в метадате какой то аналог регистров накопления (остатки , обороты ), и /или каким образом их можно синхронизировать с регистрами в 1с.
Вобще по большей части интересуют пока вопросы синхронизации различных объектов с 1с и настройка прав доступа к объектам в метадате.
40. 1c-intelligence 12849 01.08.18 13:40 Сейчас в теме
(39) аналог регистров накопления - индексы. Это временное решение, вроде мы хотим сделать регистры более полноценными. Пока просто задач насущных нет на эту тему.
41. yogaga 01.08.18 14:13 Сейчас в теме
(40) Лучше займитесь документацией, пользы от этого будет больше, чем от аналогов регистров. Ведь метадата даже близко не для замены 1С :))
42. 1c-intelligence 12849 01.08.18 14:18 Сейчас в теме
(41) мне вот кажется, что документация ничем не поможет.
Как-то так в жизни постоянно получается, что захочешь - сделаешь без документации, а не захочешь - не сделаешь с документацией.
43. yogaga 01.08.18 14:32 Сейчас в теме
(42) А вот разработчики реакта, ангулара и т.п почему-то так не считают...
44. 1c-intelligence 12849 01.08.18 14:33 Сейчас в теме
(43) да кто их разберет, нерусей
45. yogaga 01.08.18 14:36 Сейчас в теме
(44)Хорошо, ваш продукт - вам решать, что и как с ним делать. Решили оставить его уделом немногих энтузиастов - тоже выбор.
46. unpete 577 01.08.18 15:41 Сейчас в теме
(43) 1. Зачем противопоставлять? React мы активно используем для рисования интерфейса, есть возможность рендерить картинку с помощью vue, ember, angular или сырого dom - как человеку удобнее.
2. Большая часть документации по react, redux, router и т.д., написана вовсе не разработчиками, а совсем другими энтузиастами, решившими заработать на модной теме.
49. ifilll 02.08.18 10:45 Сейчас в теме
Не "привыкательный" мозг получается однако ;)
50. kiruha 388 02.08.18 14:52 Сейчас в теме
Пока можно привести две цифры - 400 и 700. Столько пользователей держит приложение «Заказ дилера», созданное на metadata.js, у двух наших клиентов.

Как решается вопрос с лицензиями ?
Есть ли какая то позиция 1С ?
52. yogaga 02.08.18 15:13 Сейчас в теме
(50) А кто сказал, что эти клиенты работают с 1С? Из того, что их данные каким-то образом используются в 1С, не следует, что они работают с 1С.
51. Sybr 242 02.08.18 15:06 Сейчас в теме
Не понимаю, зачем городить какие-то промежуточные абстракции между 1С и вебом. Очень похоже, что вы пытаетесь выдать локальную разработку за универсальное решение. Во многих крупных организациях есть подобные штуки, например на ASP.Net.
55. unpete 577 02.08.18 18:58 Сейчас в теме
(51)
зачем городить какие-то промежуточные абстракции между 1С и вебом
Так никто и не городит абстракций "между".
Автор говорит, что метадата - для тех задач, которые либо никак не решаются с помощью 1С и традиционного веб, либо решаются крайне неэффективно. Это не замена и не прослойка, а специализированный инструмент для новых задач, за решение которых пока мало кто берётся.
53. Ibrogim 1327 02.08.18 17:07 Сейчас в теме
Добрый день.

Давно присматриваюсь метадате

Что есть:
Есть ребята которые сидят в лесу и бурят скважину, у них нет интернета. В экселевский несложный документ заносят данные, потом когда интернет появляется отправляют этот экселевский документ в центр. В центре этот документ загружают в базу на 1С.

Вопросы:
1. смогу ли я сделать (metadata.js) некую локальную базу, в которую офлайн смогут ребята вносить данные и при наличии интернета чтобы эти данные сами синхронизировались с 1С ?
2. Сколько человекодней мне примерно понадобиться чтобы разобраться и это реализовать ?
p.s. имею небольшие знания по php, jquery, ajax (например https://infostart.ru/public/385143 https://infostart.ru/public/543838 https://infostart.ru/public/465073/)
Спасибо !
54. unpete 577 02.08.18 18:52 Сейчас в теме
(53) Сможете, но со стереотипами php, jquery, ajax придётся расстаться - у нас совсем другой подход к работе с данными.
56. unpete 577 02.08.18 19:03 Сейчас в теме
(53) По описанию, ваша задача решается за несколько часов, а у нас, иногда случаются приступы альтруизма. Можем сделать работающий стенд с исходниками в github абсолютно бесплатно.
57. Ibrogim 1327 02.08.18 20:20 Сейчас в теме
(56) Спасибо за ответ! Я тогда уточню все детали и вам напишу. Если попаду в приступ альтруизма - замечательно, если нет, буду ковыряться сам.
Хотя в любом случае ваша направление очень меня интересует ! Это реально круто, вы молодцы!
58. gudun_ku 62 23.04.19 11:12 Сейчас в теме
Решил попробовать.
Не могу установить последний найденный релиз

npm install -g metadata-js@0.12.231

Error while executing:
C:\Program Files\Git\cmd\git.EXE ls-remote -h -t https://github.com/unpete/react-panels.git
remote: Repository not found.
fatal: repository 'https://github.com/unpete/react-panels.git/' not found
59. gudun_ku 62 24.04.19 09:21 Сейчас в теме
(58)
Отвечу сам себе: npm install -g metadata-js@0.12.225.
Далее: нужен Python 2.7 установленный локально.
Windows - переменные окружения не прокатят, нужно путь задать к python в npm config.
npm config set python c:\\python\python.exe
gulp 4 не прокатит - нужно установить 3 версию. Но там тоже есть проблемы
Оставьте свое сообщение