Да, об этом часто спрашивают, и в будущих версиях планируем добавить такие интеграции. Основной нюанс в том, что сами сценарии интеграций могут быть очень разными. Поэтому пока мы на коммерческой основе дорабатываем такого рода интеграции.
К сожалению, мне тяжело сказать, так как я видел 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С будем указывать на его недостатки и показывать как надо было делать на самом деле. В конце концов, из разработчиков на lsFusion сейчас очень многие - бывшие 1Совцы. Не все же 1Совцы - адепты 1С, которые ни при каких обстоятельствах не будут смотреть альтернативы.
То есть, если в Microsoft Excel пользователь может сделать ячейку с формулой и просуммировать ящики с рублями, то надо эту функцию в Excel нафиг вырубить ? Пусть на калькуляторе считает ? Такая логика ?
Или может пусть пользователь сам решает, что ему суммировать ?
Причем здесь киллер фича ? Просто мелкое удобство, которое даже в платформе 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
Соответственно, клиентский код, который непосредственно рисует канбан и отвечает за работу с бэкэндом просто использует эту библиотеку :
А теперь внимание вопрос. Допустим "обертку" Вы напишите на Элементе. А можно ли там использовать сторонние JS библиотеки и тесно с ними работать (а именно, обращаться к функциям / объектом / методам, а также менять DOM) ? И как потом поддерживать эту кашу из кода, где половина написана на Элементе, а половина на JS.
В общем 1С, как всегда все делает по-своему, видя во всем фатальный недостаток. И непонятно зачем платформа 1С вообще нужна при разработке приложений с нуля, когда есть открытый и бесплатный lsFusion, который в разы лучше.
Что-то мне подсказывает, что в Элемент есть что-то большее, чем описано в статье. Потому что из статьи все выглядит просто как немного другой синтаксис JS. Не очень понятно, чем он лучше того же TypeScript.
Я вижу, что 1С продолжает изобретать велосипед вместо того, чтобы брать уже готовое. Вот что мешало просто сделать поддержку JS на клиенте, как сделано в том же lsFusion ?
Правильно ли я понял, что 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...
Вот недостатки первого подхода :
Вам постоянно на время работы пользователя нужно хранить все 10К записей в памяти (в lsFusion пользователю будет показываться только "видимое" окно через LIMIT), что забивает память. При сохранении вам нужно будет опять же все эти изменения загнать назад в базу через INSERT/UPDATE/DELETE, при этом нужно отслеживать, что изменилось в этих 10К, а что нет (ORM это умеют, но это опять же допрасходы).
Дополнительней перегруз по CPU/сети, чтобы гонять это все туда/назад между базой и сервером приложений.
Вы не будете видеть "параллельных" изменений этой таблицы на сервере. То есть, если кто-то туда записал, то Вы видите копию своих 10К, и узнаете что что-то не так только при сохранении.
И самый главный недостаток. Если Вам нужно посчитать максимум по этим 10К без учета изменений, то понятно что Вы сделаете SELECT MAX. Но при этом у вас будет код и на Java, где Вы через for будете считать эту сумму. То есть одна и та же логика вычисления суммы будет в 2х местах (в виде запроса и в виде for'а). Это называется семантический разрыв и создает проблемы уже в логике / разработке.
Да, у второго подхода есть тоже недостатки, а именно более высокое количество запросов к PostgreSQL и плохая масштабируемость. Но накладные расходы на первые 2 проблемы выше могут быть еще больше, чем допнагрузка на PostgreSQL (учитывая, что не нужно гонять туда-сюда 10К.).
Что касается потери связи, то редко кто хранит изменения/логику прямо на клиенте (в браузере). Иначе тогда еще придется дополнительно проверять, что кто-то вам в браузере не подменил/пересчитал то, чего не надо. Как в примере, выше вы же не будете доверять расчет максимума клиенту, а потом доверительно писать его в базу, если там вам его надо хранить. Но при этом lsFusion умеет в обрыв связи. Можете сами подключиться на демку : https://demo.lsfusion.org/mycompany-ru , зайти куда-нибудь, даже что-то поменять, потом выдернуть шнур и через секунд 30 вернуть назад.
Учитывая, что программистам 1С проще всего сразу начать писать на lsFusion, то разве плохо "зацепить" 1С-программистов, чтобы они знали, что есть бесплатная альтернатива ?
А то часто в разных обсуждениях 1С очень жалуются на поведение монополиста разработчика платформы. Ведь хорошо, когда есть конкурент, так же ? Это подталкивает монополиста шевелиться...
Я же ответил ему. Но могу более подробно ответить и Вам, если объясните, что именно Вы имеете ввиду под "диким перенасыщенным". Можете даже в сравнении с типовыми конфигурациями 1С. Желательно со скринами.
У пользователя глаза и голова не болят. Меньше тратить придется на медицину для сотрудников. Плюс человек будет лучше видеть, а значит эффективнее выполнять свою работу.
Да, об этом часто спрашивают, и в будущих версиях планируем добавить такие интеграции. Основной нюанс в том, что сами сценарии интеграций могут быть очень разными. Поэтому пока мы на коммерческой основе дорабатываем такого рода интеграции.
К сожалению, мне тяжело сказать, так как я видел ERPNext достаточно поверхностно. Больше смотрел Odoo (и многое взято оттуда). Но, в любом случае, там есть определенные отличия в функционале.
Но ключевое отличие от ERPNext в том, что MyCompany построен на базе lsFusion и гораздо лучше дорабатывается за счёт высокоуровнего подхода (фактически low-code). Например, можно легко добавить отдельный модуль одним файлом, в котором можно добавлять любые события, действия, расширять формы, добавлять свои поля и логику. Вот в этой статье мы вкратце описывали, как это делается на lsFusion.
Лучше всего MyCompany использовать как базу, от которой можно создавать/развивать своё решение. Хотя конечно же есть пользователи, которые используют ванильную версию.
На данный момент, есть возможность импорта большинства справочников и некоторых других объектов из файлов Excel определенного шаблона. Учитывая, что импорт - это разовое действие, то из 1С можно просто выгрузить в Excel, а потом вставить в шаблон (который тоже можно сгенерировать в самом приложении на форме Администрирование / Миграция). Но если будет запрос на импорт именно из 1С (как я понимаю, речь идет о EnterpriseData), то можно будет доработать. На данный момент импорт из Excel также имеет свои плюсы. Например, можно преобразовать данные и т.д.
Сейчас, к сожалению, без ssh-консоли архитектурно не очень получится. Служба не может перезагрузить сама себя - нужен launcher, которого пока нет. Можно, конечно, работать в этом направлении, но пока это не совсем та целевая аудитория. Предполагается, что администратор системы имеет совсем базовые навыки работы с ssh-консолью. Соответственно, запустить скрипт ему не составит труда :
Кроме того, если что-то пойдет не так, то он просто сможет посмотреть логи в /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С будем указывать на его недостатки и показывать как надо было делать на самом деле. В конце концов, из разработчиков на lsFusion сейчас очень многие - бывшие 1Совцы. Не все же 1Совцы - адепты 1С, которые ни при каких обстоятельствах не будут смотреть альтернативы.
То есть, если в Microsoft Excel пользователь может сделать ячейку с формулой и просуммировать ящики с рублями, то надо эту функцию в Excel нафиг вырубить ? Пусть на калькуляторе считает ? Такая логика ?
Или может пусть пользователь сам решает, что ему суммировать ?
https://lsfusion.org/ru/compare
А вот что у нас. Сравните количество плюсиков.
Разгром 1С просто в одну калитку.
Но если серьезно, то писали же и проблемы 1С, и почему lsFusion лучше.
Причем здесь киллер фича ? Просто мелкое удобство, которое даже в платформе 1С не смогли сделать. А в бесплатном и открытом lsFusion смогли.
Скрин - это должен делать пользователь ? У всех пользователь есть доступ к конфигуратору ? Или всегда надо иметь под рукой своего программиста 1С ? И опять же, мне нужно рассчитывать постоянно с учётом изменений - это нагружает сервер, а просто в определенный момент на определенном отборе.
Если что, то в lsFusion вообще все списки динамические. И ни одна таблица никогда в память даже сервера приложений не загружается. Только видимая часть. И прекрасно считаются и суммы и количества записей. Просто не смогли разработчики платформы 1С нормально реализовать. А в lsFusion - смогли.
Причем здесь user friendly ? User friendly - это дать пользователю такой механизм. И если он нажмет на таблице с миллиардами записей, то он сам решит подождать ему или нет. Если надо запретить на больших таблицах - то можно включить governor. Но мы никогда не включаем. Даже если пользователь нажмет подсчет количества, то ему через какое-то время надоест ждать, он закроет форму и запрос автоматически отменится.
Шардинг тут при чем ? Интерфейс гораздо более продвинутый, чем в 1С. Даже кроме самых простых подсчетов, которые не смог сделать 1С, в lsFusion можно сделать pivoting абсолютно любой таблицы. 1Су до этого как до луны.
Что же касается контролов, то как я писал выше - можно без проблем подключить любую JS библиотеку из сотен тысяч и нарисовать все, что угодно. В 1С же только то, что соизволил сделать 1С в своём Элемент.
Там сумма считается по той колонке, на которой стоял, и исходя из всех примененных в данный момент фильтров. То есть, например, на форме с текущими остатками можно сделать любой отбор (например, по наименованию) и просуммировать по количеству. Можно туда вывести колонку с себестоимостью - тогда будет себестоимость и т.д.
Но суть в том, что в абсолютно любой таблице можно посчитать сумму по абсолютно любой колонке. Вне зависимости от того, сколько там записей. И это будет сделано через SELECT SUM WHERE, а не путём перегона через ORM всей таблицы и расчета на application server'e.
Что значит вывести, если нужно ? И причем здесь строки в табличных частях. Речь шла про ЛЮБУЮ таблицу на любой форме. lsFusion так умеет, а супер-пупер 1С так может ? Где там вот эти кнопки :
Maven - это для Java и бэкенда. Для JS есть npmjs, Github и куча всего другого. Просто набираете в гугл javascript library <что угодно> и находите библиотеку на любой случай жизни. 1Су только мечтать о таком количестве библиотек.
Oracle поддерживает и не такое "говно мамонта". Собственно, как и 1С. Но это не значит, что сейчас это широкои используется.
Тут как с 1С. Да, многие продолжают по инерции писать на 1С. Но продвинутые разработчики давно перешли на lsFusion.
Вы представляете сколько всего JS библиотек в мире, и сколько оберток в 1С ? Если мне понадобится нарисовать календарик с каким-то функционалом, то я смогу выбирать из десятков платных и бесплатных JS-библиотек, которые его уже нарисовали. Сколько под них оберток есть в Элементе ?
По поводу скрина c 1C печать штрих-кодом, то zxing не только печатать умеет, он распознавать их из изображения умеет. Например, вот недавно использовал надстройку на ней, которая по активному видеопотоку умеет распозновать QR-кода на беджах (причем там есть несколько js-библиотек для этого). Это тоже встроено в Печать штрих-кодов в 1С ?
Servlet, Java server pages, Java server faces уже умерли очень давно и их практически никто в современной веб-разработке не использует. Тем более с полной перегрузкой страниц.
Издеваетесь, да ? Про Maven ничего не слышали ? И вообще смешно сравнивать количество разных библиотек под все случаи жизни на Java с тем, что есть под 1С. Под Java есть практическ все и очень легко интегрируется в тот же lsFusion. А вот в 1С сбоку что-то вставить - это просто вынос мозга.
Десктоп GUI умер тоже хз сколько лет назад. Непонятно зачем вспоминать всякие JavaFx. Сейчас только веб-интерфейс. А вот там такое раздолье, что 1Су даже не снилось.
В 1С в разы интерфейс хуже, чем в бесплатном и открытом lsFusion. Там даже количество записей в таблице посчитать нельзя. Не говоря уже про сумму по колонке.
Про дизайн вообще молчу. В lsFusion используется Bootstrap - де-факто стандарт современной веб-разработки. А в 1С - привет 2000м. Только сейчас начали у lsFusion копировать, и сделали что-то поприличнее. И даже темную тему смогли.
Ну от того, что Вы в своем пузыре не видели MyCompany, то это не значит, что никто не видел.
Просто часто, чтобы добавить то, что идет вразрез с логикой УТ, придется удалять что-то. И вот тогда, когда нужно будет как-то сделать, чтобы все старое не поломалось, приходит настоящая боль 1С.
В каком смысле ? Перекодируют js в Элемент ? И как они потом новые версии поддерживают ? Давайте вот, например, zxing-js портирован ? Это одна из самых популярных библиотек по работе со штрих-кодами. А там над ней еще надстроек дофигища.
Эээ, Вы о чем ? Какой Java и Net в браузере ? Речь сейчас шла исключительно о GUI в браузере, чтобы, например, рисовать всякое специфическое. И тут важно, что есть куча бесплатных (и платных) JS библиотек именно под визуализацию. Например, нарисовать диаграмму Ганта, или какой-нибудь хитрый календарь.
Вообще никто ничего никогда с нуля не разрабатывает ? Интересная позиция...
Как я понимаю, в Вашем мире есть один сплошной 1С. А как же живут другие программисты, которые не на 1С ? Наверное, сидят на работе и просто получают зарплату ни за что...
Как я понимаю, в Вашем мире бухгалтерия и налоговая отчётность - это основа мироздания и всех систем в мире. И все задачи строятся только от них. А других задач у бизнеса не существует.
Есть, например, MyCompany, которую мы часто берем за основу для заказных разработок. И часто к ней проще что-то добавить, чем что-то вырезать из того же УТ (монстра спагетти-кода).
Тут же не в этом проблема. Проблема в том, что в мире есть миллион библиотек на все случаи жизни, написанные именно на JS (есть даже открытые библиотеки по распознаванию лица).
Простой пример, чтобы не говорить о сферическом коне в вакууме. Если зайти на демку MyCompany : https://demo.lsfusion.org/mycompany-ru , то первым открывается окно с канбаном задач. Чтобы перетягивать задачи просто используется внешняя открытая и бесплатная библиотека dragula.js : https://github.com/bevacqua/dragula
Соответственно, клиентский код, который непосредственно рисует канбан и отвечает за работу с бэкэндом просто использует эту библиотеку :
А теперь внимание вопрос. Допустим "обертку" Вы напишите на Элементе. А можно ли там использовать сторонние JS библиотеки и тесно с ними работать (а именно, обращаться к функциям / объектом / методам, а также менять DOM) ? И как потом поддерживать эту кашу из кода, где половина написана на Элементе, а половина на JS.
В общем 1С, как всегда все делает по-своему, видя во всем фатальный недостаток. И непонятно зачем платформа 1С вообще нужна при разработке приложений с нуля, когда есть открытый и бесплатный lsFusion, который в разы лучше.
Есть конечно и уже давно. Вот, например, открытая и бесплатная платформа : 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/
Не совсем. Да, 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...
Вот недостатки первого подхода :
Вам постоянно на время работы пользователя нужно хранить все 10К записей в памяти (в lsFusion пользователю будет показываться только "видимое" окно через LIMIT), что забивает память. При сохранении вам нужно будет опять же все эти изменения загнать назад в базу через INSERT/UPDATE/DELETE, при этом нужно отслеживать, что изменилось в этих 10К, а что нет (ORM это умеют, но это опять же допрасходы).
Дополнительней перегруз по CPU/сети, чтобы гонять это все туда/назад между базой и сервером приложений.
Вы не будете видеть "параллельных" изменений этой таблицы на сервере. То есть, если кто-то туда записал, то Вы видите копию своих 10К, и узнаете что что-то не так только при сохранении.
И самый главный недостаток. Если Вам нужно посчитать максимум по этим 10К без учета изменений, то понятно что Вы сделаете SELECT MAX. Но при этом у вас будет код и на Java, где Вы через for будете считать эту сумму. То есть одна и та же логика вычисления суммы будет в 2х местах (в виде запроса и в виде for'а). Это называется семантический разрыв и создает проблемы уже в логике / разработке.
Да, у второго подхода есть тоже недостатки, а именно более высокое количество запросов к PostgreSQL и плохая масштабируемость. Но накладные расходы на первые 2 проблемы выше могут быть еще больше, чем допнагрузка на PostgreSQL (учитывая, что не нужно гонять туда-сюда 10К.).
Что касается потери связи, то редко кто хранит изменения/логику прямо на клиенте (в браузере). Иначе тогда еще придется дополнительно проверять, что кто-то вам в браузере не подменил/пересчитал то, чего не надо. Как в примере, выше вы же не будете доверять расчет максимума клиенту, а потом доверительно писать его в базу, если там вам его надо хранить. Но при этом lsFusion умеет в обрыв связи. Можете сами подключиться на демку : https://demo.lsfusion.org/mycompany-ru , зайти куда-нибудь, даже что-то поменять, потом выдернуть шнур и через секунд 30 вернуть назад.
Учитывая, что программистам 1С проще всего сразу начать писать на lsFusion, то разве плохо "зацепить" 1С-программистов, чтобы они знали, что есть бесплатная альтернатива ?
А то часто в разных обсуждениях 1С очень жалуются на поведение монополиста разработчика платформы. Ведь хорошо, когда есть конкурент, так же ? Это подталкивает монополиста шевелиться...
Спасибо за предложение. Но многое из этого мы уже делали в нашем блоге.
"Культовая" статья с проблемами 1С (1.8K комментариев): Почему не 1С ?.
Как это решается в lsFusion : Почему lsFusion, а не 1С ?
Примеры как решать типовые задачи :
Управление параметрами в бизнес-приложениях по аналогии с системой контроля версий
Работа с иерархиями в lsFusion
Как могли бы выглядеть регистры в 1С при наличии ООП
Строим интерфейс по вводу документов через подбор
Ну и небольшие примеры приложений :
Расчет странового коэффициента УЕФА
Организуем собственный мини-тотализатор на матчи ЧЕ 2020 по футболу
Я же ответил ему. Но могу более подробно ответить и Вам, если объясните, что именно Вы имеете ввиду под "диким перенасыщенным". Можете даже в сравнении с типовыми конфигурациями 1С. Желательно со скринами.
У пользователя глаза и голова не болят. Меньше тратить придется на медицину для сотрудников. Плюс человек будет лучше видеть, а значит эффективнее выполнять свою работу.