Обновить
31
Алексей@CrushBy

Программист

28
Подписчики
Отправить сообщение

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

К сожалению, мне тяжело сказать, так как я видел ERPNext достаточно поверхностно. Больше смотрел Odoo (и многое взято оттуда). Но, в любом случае, там есть определенные отличия в функционале.

Но ключевое отличие от ERPNext в том, что MyCompany построен на базе lsFusion и гораздо лучше дорабатывается за счёт высокоуровнего подхода (фактически low-code). Например, можно легко добавить отдельный модуль одним файлом, в котором можно добавлять любые события, действия, расширять формы, добавлять свои поля и логику. Вот в этой статье мы вкратце описывали, как это делается на lsFusion.

Лучше всего MyCompany использовать как базу, от которой можно создавать/развивать своё решение. Хотя конечно же есть пользователи, которые используют ванильную версию.

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

На данный момент, есть возможность импорта большинства справочников и некоторых других объектов из файлов Excel определенного шаблона. Учитывая, что импорт - это разовое действие, то из 1С можно просто выгрузить в Excel, а потом вставить в шаблон (который тоже можно сгенерировать в самом приложении на форме Администрирование / Миграция). Но если будет запрос на импорт именно из 1С (как я понимаю, речь идет о EnterpriseData), то можно будет доработать. На данный момент импорт из Excel также имеет свои плюсы. Например, можно преобразовать данные и т.д.

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

Сейчас, к сожалению, без ssh-консоли архитектурно не очень получится. Служба не может перезагрузить сама себя - нужен launcher, которого пока нет. Можно, конечно, работать в этом направлении, но пока это не совсем та целевая аудитория. Предполагается, что администратор системы имеет совсем базовые навыки работы с ssh-консолью. Соответственно, запустить скрипт ему не составит труда :

apt-get update lsfusion6-server lsfusion6-client

service lsfusion6-server stop
wget http://download.lsfusion.org/solutions/mycompany-6.0.jar -O /var/lib/lsfusion/mycompany.jar
service lsfusion6-server start

Кроме того, если что-то пойдет не так, то он просто сможет посмотреть логи в /var/log/lsfusion6-server .

Если нужно, чтобы все работало само по кнопкам без консоли, то я думаю, что таким пользователям лучше выбирать облачные решение. MyCompany же нацелена на пользователей-адинистраторов open-source. А такие люди привыкли работать к консолью, и у MyCompany похожий принцип работы, как и у других linux приложений (скачали, остановили/запустили службу, посмотрели логи).

А как реализовано обновление если есть свои изменения?

Важно понимать, что MyCompany базируется на платформе lsFusion, то есть разрабатывается и запускается как классическое Java-приложения (в виде службы). Исходный код в виде lsf-файлов - это фактически просто "ресурсы" с точки зрения Java архитектуры, а платформа - просто библиотека (подключаемая через maven) в виде одного jar-файла.

Соответственно, доработка идет так же, как и любого другого Java-приложения. Делается fork, затем добавляются свои модули (или изменяются базовые, что не очень рекомендуется).

Затем, как правило, из них собирается jar-файл. Это можно делать либо через maven, либо через artifact в IDEA, либо через Jenkins. В интернете миллион инструкций как это делать для Java-проектов. Для MyCompany все делается точно также.

На практике, иногда мы даже не собираем jar-файлы, а просто делаем git pull в папку /var/lib/lsfusion. И так как она находится в classpath, то lsf внутри нее также прекрасно считываются. Но такой способ подходит только, если нет java-файлов и не надо их компилировать (хотя, как правило, их и нет и все реализуется чисто на lsf-коде).

Есть конечно и самый простой вариант, когда lsf-файлы тупо подкидываются в папку /var/lib/lsfusion. Так можно делать, если просто немного надо изменить. Но если требуется много доработок, то так конечно же не стоит делать.

Разгром 1С просто в одну калитку

Вы же понимаете, что это был сарказм с моей стороны ? Я следующим же предложением писал "Но если серьезно"...

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

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

То есть, если в Microsoft Excel пользователь может сделать ячейку с формулой и просуммировать ящики с рублями, то надо эту функцию в Excel нафиг вырубить ? Пусть на калькуляторе считает ? Такая логика ?

Или может пусть пользователь сам решает, что ему суммировать ?

https://lsfusion.org/ru/compare

А вот что у нас. Сравните количество плюсиков.

Разгром 1С просто в одну калитку.

Но если серьезно, то писали же и проблемы 1С, и почему lsFusion лучше.

Это киллер фича что ли?

В 1С это делается так

Причем здесь киллер фича ? Просто мелкое удобство, которое даже в платформе 1С не смогли сделать. А в бесплатном и открытом lsFusion смогли.

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

Просто нужно учитывать что списки по большим таблицам в 1С динамический (ленивое чтение) . Таблицы которые полностью подгружаются в память есть только как часть ссылочных метаданных (документ , справочник).

Если что, то в lsFusion вообще все списки динамические. И ни одна таблица никогда в память даже сервера приложений не загружается. Только видимая часть. И прекрасно считаются и суммы и количества записей. Просто не смогли разработчики платформы 1С нормально реализовать. А в lsFusion - смогли.

И если захотите произвольно суммировать по таблицы из миллиарда записей, это будет не очень user friendly

Причем здесь user friendly ? User friendly - это дать пользователю такой механизм. И если он нажмет на таблице с миллиардами записей, то он сам решит подождать ему или нет. Если надо запретить на больших таблицах - то можно включить governor. Но мы никогда не включаем. Даже если пользователь нажмет подсчет количества, то ему через какое-то время надоест ждать, он закроет форму и запрос автоматически отменится.

Расскажите про используемые продвинутые технологии. Может шардинг используете, а интерфейс чего такой скудный ? Бесплатных контролов не хватило?

Шардинг тут при чем ? Интерфейс гораздо более продвинутый, чем в 1С. Даже кроме самых простых подсчетов, которые не смог сделать 1С, в lsFusion можно сделать pivoting абсолютно любой таблицы. 1Су до этого как до луны.

Что же касается контролов, то как я писал выше - можно без проблем подключить любую JS библиотеку из сотен тысяч и нарисовать все, что угодно. В 1С же только то, что соизволил сделать 1С в своём Элемент.

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

Но суть в том, что в абсолютно любой таблице можно посчитать сумму по абсолютно любой колонке. Вне зависимости от того, сколько там записей. И это будет сделано через SELECT SUM WHERE, а не путём перегона через ORM всей таблицы и расчета на application server'e.

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

Что значит вывести, если нужно ? И причем здесь строки в табличных частях. Речь шла про ЛЮБУЮ таблицу на любой форме. lsFusion так умеет, а супер-пупер 1С так может ? Где там вот эти кнопки :

Вы в Мавене gui библиотеки найдете с формочками и компонентами? Там максимум для бэкэнда можно набрать чегото более менее стандартного и общепринятого

Maven - это для Java и бэкенда. Для JS есть npmjs, Github и куча всего другого. Просто набираете в гугл javascript library <что угодно> и находите библиотеку на любой случай жизни. 1Су только мечтать о таком количестве библиотек.

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

Oracle поддерживает и не такое "говно мамонта". Собственно, как и 1С. Но это не значит, что сейчас это широкои используется.

Тут как с 1С. Да, многие продолжают по инерции писать на 1С. Но продвинутые разработчики давно перешли на lsFusion.

Как обычно делают обертку и встраивают в Gui фреймворк

Вы представляете сколько всего JS библиотек в мире, и сколько оберток в 1С ? Если мне понадобится нарисовать календарик с каким-то функционалом, то я смогу выбирать из десятков платных и бесплатных JS-библиотек, которые его уже нарисовали. Сколько под них оберток есть в Элементе ?

Давайте вот, например, zxing-js портирован ? Это одна из самых популярных библиотек по работе со штрих-кодами. А там над ней еще надстроек дофигища.

По поводу скрина c 1C печать штрих-кодом, то zxing не только печатать умеет, он распознавать их из изображения умеет. Например, вот недавно использовал надстройку на ней, которая по активному видеопотоку умеет распозновать QR-кода на беджах (причем там есть несколько js-библиотек для этого). Это тоже встроено в Печать штрих-кодов в 1С ?

Servlet, Java server pages, Java server faces уже умерли очень давно и их практически никто в современной веб-разработке не использует. Тем более с полной перегрузкой страниц.

Трудно живут. Каждый день приходится делать какой то велосипед. Поэтому постоянно клеют куски кода из разных мест, косты на разработку огромные. В той же Java нет единого маркетплейса по библиотекам. Все нужно искать по гуглам.

Издеваетесь, да ? Про Maven ничего не слышали ? И вообще смешно сравнивать количество разных библиотек под все случаи жизни на Java с тем, что есть под 1С. Под Java есть практическ все и очень легко интегрируется в тот же lsFusion. А вот в 1С сбоку что-то вставить - это просто вынос мозга.

Для Gui в Java несмотря на JavaFx и прочие улучшения , чтото красивое можно только на Java фрейморках типа этогого https://www.jmix.ru/

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

Это кстати хорошо видно по платформе 1С

В 1С в разы интерфейс хуже, чем в бесплатном и открытом lsFusion. Там даже количество записей в таблице посчитать нельзя. Не говоря уже про сумму по колонке.

Про дизайн вообще молчу. В lsFusion используется Bootstrap - де-факто стандарт современной веб-разработки. А в 1С - привет 2000м. Только сейчас начали у lsFusion копировать, и сделали что-то поприличнее. И даже темную тему смогли.

Только УТ все видели, на ней работает 100500 организаций. А фузиновская MyCompany - это что-то типа "неуловимого зверя Цыгея" - шкуру от него видели, а живьем никто не видел...

Ну от того, что Вы в своем пузыре не видели MyCompany, то это не значит, что никто не видел.

Да и зачем вырезать что-то из УТ? все ненужное отключается, и просто не видно в интерфейсах.

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

1С как правило портирует библиотеке которые считает удобными в язык. Напр библиотеки для XML в 1С точно удобнее чем в Java . Откуда они их портировали не могу сказать.

В каком смысле ? Перекодируют js в Элемент ? И как они потом новые версии поддерживают ? Давайте вот, например, zxing-js портирован ? Это одна из самых популярных библиотек по работе со штрих-кодами. А там над ней еще надстроек дофигища.

А по поводу JS библиотек. Ну да их куча, почему то никого не смущают что фронтендеры пихают JS во все места не обращая внимания на то что используется Java или Net и как то поддерживают "эту кашу" с отдельным подразделением DevOps

Эээ, Вы о чем ? Какой Java и Net в браузере ? Речь сейчас шла исключительно о GUI в браузере, чтобы, например, рисовать всякое специфическое. И тут важно, что есть куча бесплатных (и платных) JS библиотек именно под визуализацию. Например, нарисовать диаграмму Ганта, или какой-нибудь хитрый календарь.

Потому что никто с нуля не разрабатывает (хотя на 1С это приятно, занимаешься только бизнес задачей а не стеком)

Вообще никто ничего никогда с нуля не разрабатывает ? Интересная позиция...

А обычно берут одну из множества типовых конфигураций (типа 1С Бухгалтерия, 1СУПП, 1С Erp и т.д.) и дописывают к ней подсистему.

Как я понимаю, в Вашем мире есть один сплошной 1С. А как же живут другие программисты, которые не на 1С ? Наверное, сидят на работе и просто получают зарплату ни за что...

Вот у Fusion есть функционал бухгалтерии для РФ со всем фаршем налоговой отчетности и работающее из коробки?

Как я понимаю, в Вашем мире бухгалтерия и налоговая отчётность - это основа мироздания и всех систем в мире. И все задачи строятся только от них. А других задач у бизнеса не существует.

Есть, например, MyCompany, которую мы часто берем за основу для заказных разработок. И часто к ней проще что-то добавить, чем что-то вырезать из того же УТ (монстра спагетти-кода).

Тут же не в этом проблема. Проблема в том, что в мире есть миллион библиотек на все случаи жизни, написанные именно на JS (есть даже открытые библиотеки по распознаванию лица).

Простой пример, чтобы не говорить о сферическом коне в вакууме. Если зайти на демку MyCompany : https://demo.lsfusion.org/mycompany-ru , то первым открывается окно с канбаном задач. Чтобы перетягивать задачи просто используется внешняя открытая и бесплатная библиотека dragula.js : https://github.com/bevacqua/dragula

Соответственно, клиентский код, который непосредственно рисует канбан и отвечает за работу с бэкэндом просто использует эту библиотеку :

element.drake = dragula();
...
element.drake.on("drop", function(el, target, source, sibling) {
  if (el.task.status !== target.status.id.toString())
    controller.changeProperty("status", el.task, target.status.id);
                taskKanbanReorder(controller, target.children);
});

А теперь внимание вопрос. Допустим "обертку" Вы напишите на Элементе. А можно ли там использовать сторонние JS библиотеки и тесно с ними работать (а именно, обращаться к функциям / объектом / методам, а также менять DOM) ? И как потом поддерживать эту кашу из кода, где половина написана на Элементе, а половина на JS.

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

P.P.S. Мне показалось или? Автор камушков в 1С накидал, а решение-то какое? "Есть конкретное предложение: надо что-то предпринять!" ?

Есть конечно и уже давно. Вот, например, открытая и бесплатная платформа : https://habr.com/ru/companies/lsfusion/articles/707286/

И на ее основе открытое и бесплатное решение для небольшого бизнеса : https://mycompany.lsfusion.org/ru

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

Я вижу, что 1С продолжает изобретать велосипед вместо того, чтобы брать уже готовое. Вот что мешало просто сделать поддержку JS на клиенте, как сделано в том же lsFusion ?

https://docs.lsfusion.org/ru/How-to_Custom_components_properties/

https://docs.lsfusion.org/ru/How-to_Custom_components_objects/

Правильно ли я понял, что DDL над временной таблицей - это только TRUNCATE? Судя по флеймграфу, это не относится к изменению структуры/констрейнтов на таблице.

Не совсем. Да, TRUNCATE будет чаще всего происходить, но часто и CREATE / DROP. Временные таблицы то относятся к конкретному подключению. Есть пул подключений, который используется для разных целей. Учитывая, что изменения, сделанные пользователем на форме, хранятся во времянках, то они часто надолго "прилипают" к пользователям, как только он начала изменять что-то. Соответственно, временные таблицы тоже. Временные таблицы внутри соединения тоже фактически пулятся (в зависимости от того, сколько ключей нужно и какого типа эти ключи). Соответственно, время от времени создаются новые и удаляются старые.

А можно совсем конкретный пример для понимания?

Давайте приведу пример немного вырожденный, но зато простой. Предположим у Вас список (таблица) из 10.000 объектов (записей). И Вам нужно показать ее пользователю на экран, где он может листать ее, добавлять/удалять объекты и вводить числовое поле (фактически такой большой Excel). И Вам нужно показывать пользователю, например, максимум по этому числовому полю.

Есть два варианта, как это сделать.

Первый вариант, как обычно делают большинство (ORM-подход). Вы считываете эти 10К на клиента (а чаще всего на сервер приложений, допустим работающий на Java), и там через for считаете сумму. Соответственно, при изменениях пользователем значений Вы, не трогая PostgreSQL, меняете в памяти значения и рассчитываете заново.

Второй вариант (как делает lsFusion) - это вы создаете временную таблицу на сервере, куда записываете только ключи и значения, которые пользователь изменил. А затем сумму считаете через SELECT MAX(COALESCE(temp.numeric_field,table.numeric_field)) FROM table FULL JOIN temp ON...

Вот недостатки первого подхода :

  1. Вам постоянно на время работы пользователя нужно хранить все 10К записей в памяти (в lsFusion пользователю будет показываться только "видимое" окно через LIMIT), что забивает память. При сохранении вам нужно будет опять же все эти изменения загнать назад в базу через INSERT/UPDATE/DELETE, при этом нужно отслеживать, что изменилось в этих 10К, а что нет (ORM это умеют, но это опять же допрасходы).

  2. Дополнительней перегруз по CPU/сети, чтобы гонять это все туда/назад между базой и сервером приложений.

  3. Вы не будете видеть "параллельных" изменений этой таблицы на сервере. То есть, если кто-то туда записал, то Вы видите копию своих 10К, и узнаете что что-то не так только при сохранении.

  4. И самый главный недостаток. Если Вам нужно посчитать максимум по этим 10К без учета изменений, то понятно что Вы сделаете SELECT MAX. Но при этом у вас будет код и на Java, где Вы через for будете считать эту сумму. То есть одна и та же логика вычисления суммы будет в 2х местах (в виде запроса и в виде for'а). Это называется семантический разрыв и создает проблемы уже в логике / разработке.

Да, у второго подхода есть тоже недостатки, а именно более высокое количество запросов к PostgreSQL и плохая масштабируемость. Но накладные расходы на первые 2 проблемы выше могут быть еще больше, чем допнагрузка на PostgreSQL (учитывая, что не нужно гонять туда-сюда 10К.).

Что касается потери связи, то редко кто хранит изменения/логику прямо на клиенте (в браузере). Иначе тогда еще придется дополнительно проверять, что кто-то вам в браузере не подменил/пересчитал то, чего не надо. Как в примере, выше вы же не будете доверять расчет максимума клиенту, а потом доверительно писать его в базу, если там вам его надо хранить. Но при этом lsFusion умеет в обрыв связи. Можете сами подключиться на демку : https://demo.lsfusion.org/mycompany-ru , зайти куда-нибудь, даже что-то поменять, потом выдернуть шнур и через секунд 30 вернуть назад.

Учитывая, что программистам 1С проще всего сразу начать писать на lsFusion, то разве плохо "зацепить" 1С-программистов, чтобы они знали, что есть бесплатная альтернатива ?

А то часто в разных обсуждениях 1С очень жалуются на поведение монополиста разработчика платформы. Ведь хорошо, когда есть конкурент, так же ? Это подталкивает монополиста шевелиться...

Я же ответил ему. Но могу более подробно ответить и Вам, если объясните, что именно Вы имеете ввиду под "диким перенасыщенным". Можете даже в сравнении с типовыми конфигурациями 1С. Желательно со скринами.

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

Информация

В рейтинге
5 322-й
Откуда
Минск, Минская обл., Беларусь
Работает в
Зарегистрирован
Активность