Какого «Убийцу 1С» я хочу?

В статье я распишу своё видение «убийцы 1С» — т.е. инструмента для быстрой разработки приложений баз данных (Rapid Application Development). Далее я буду называть эту гипотетическую платформу Free RAD.

Архитектура

Исполнимое приложение может быть бинарным (EXE) или Java, не особо критично.

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

Однопользовательское решение

Локальное приложение с базой данных в файле. База данных хранится в одном файле. Приложение состоит из исполнимого файла и набора библиотек, некоторые из которых отвечают за обработку данных в SQL.

Многопользовательское решение

Сервер приложений + SQL-сервер + клиентское приложение. Клиентским приложением может быть браузер, сервером приложений — веб сервер.

Лицензии и стоимость

Вообще предпочтителен полный Open Source, чтобы не зависеть от воли разработчика платформы. Если платформа и должна стоить денег, то она должна быть дешевле продуктов, которых я на ней разрабатываю. Т.е. если я продаю продукт за 5.000 рублей, то платформа не должна стоить пользователю дороже 2.000 рублей. Тогда я могу включить ее в стоимость продукта.

В идеале, конечно, бесплатная платформа.

Прикладные объекты

В 1с существует большое разнообразие таблиц — справочники, документы, регистры, планы обмена. Для RAD достаточно буквально нескольких объектов.

Таблица

Справочники и документы можно представить в виде таблицы. Можно (но не обязательно) добавить признак того, что это таблица документа или справочника для автоматического появления полей — наименование, номер, дата.

Для таблицы необходима возможность включения внешнего ключа и указания состава ключей таблицы.

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

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

Примеры таблиц

В примерах ключевые поля таблиц выделены жирным.

Справочник «Номенклатура» будет представлен таблице с полями:

  • Код — код товара
  • Наименование — наименование товара

Табличная часть товаров у документа «Приходная накладная» будет представлена таблицей с полями:

  • Документ — ссылка на приходную накладную
  • Номер — счетчик, номер строки
  • Товар — ссылка на номенклатуру
  • Количество
  • Цена
  • Сумма

Регистр сведений «Курсы валют» будет представлен таблицей с полями:

  • Дата — дата курса
  • Валюта — валюта
  • Курс — курс валюты

Регистр накопления «Товары на складах» будет представлен таблицей с полями:

  • Дата — дата движения
  • Документ — документ движения
  • Склад
  • Товар
  • Количество — количество движения товара, приход с плюсом, расход с минусом

Представления или виды (views)

На основе таблиц нужно получать виды. Для работы достаточно видов из требуются для одной таблицы, но если будет возможность объединять таблицы, будет еще лучше.

Виды для регистров сведений

Для регистров сведений нужен срез первых, срез последних на определенную дату. А также срез на каждую дату в заданном интервале дат.

Виды для регистров накопления

Для регистров сведений нужен итоговый начальный и конечный остаток на определенную дату. А также итоговый и начальный остаток на каждую дату/документ в заданном интервале дат.

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

Метаданные

Метаданные содержат описание всех прикладных объектов, т.е. в нашем случае таблиц.

Желательно, чтобы каждая таблица и поле таблицы имели уникальный guid, тогда операция переименования объектов таблицы происходит автоматически. Но можно обойтись и без этого. Guid можно хранить в атрибуте описания поля, как вариант.

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

При этом код может поставляться просто в виде нового файла кода.

Формы

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

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

Все формы рассчитываются на сервере, на клиент только отображаются.

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

Манипуляция данными и процессом выполнения

Манипуляция данных осуществляется за счет отправки SQL-запросов или команд на создание/изменение объектов.

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

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

Задача языка — управление объектами манипуляции данными (выборки, записи), управление элементами формы, формирование отчетов и т.п.

Отчеты

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

Отчеты можно сначала писать программно, а потом уже реализовать что-то вроде СКД.

Отчеты должны быть интерактивными, т.е. при щелчке на ячейке должно обрабатываться событие.

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

Модульность и расширяемость

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

Что касается прикладного кода, то локальный код, который должен сохраняться при обновлениях кода от поставщика, пишется в виде расширений.

При этом используются стандартные приемы аспектно-ориентированного программирования — выполнение до, после, вместо.

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

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 16

  1. CrashBy:

    Молодец, нужно еще добавить, что вся бизнес-логика должны кодироваться одной строчкой кода

  2. makfromkz:

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

  3. bob32:

    Ты хочешь платформу. Платформу разработать сложно и дорого. Вкладываться в это не будут. Нет просчитанных ROI (return of investment)

    Для мелких клиентов c простыми потребностями есть несколько путей
    — 1С и т.п аналоги
    — конкретное решение на базе open source-а (быстрей всего Python, .NET Core и т.д)
    — low code платформы (обычно платные и буржуйские), реинкарнация старых идей на современный, облачный лад

    По второму пути есть фрилансеры и мелкие конторы кто на таких заказах и специализируется.

    3-й путь стоит денег и не совсем для России.

    Ты не предлагаешь ничего нового. Спонсоров не найдешь.

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

      • bob32:

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

        Odoo, Cuba, фузину и т.д я смотрел. Более того, знаю как сделаны Visual Studio, Eclipse или VS Code.

        При решении мелких учетных задач, для каких тебе требуется платформа, мне проще сделать решение на базе React-а + Go (и/или Java), используя уже существующие библиотеки. Усилия по созданию новой платформы не оправданы.

        • То что тебе проще, не значит, что бизнесу лучше. Кто придет сопровождать твою нетленку после тебя?
          Нужен какой-то стандарт, который понимает некоторое количество программистов.
          Даже по Фузине уже появились вакансии.

          • bob32:

            Сопровождение проекта с нормальной архитектурой на базе open source решений не проблема для программиста. Все укладывается в типичные паттерны. Схемы БД выделены и версионируются. Сборка и деплой системы автоматизированы и распихано по докерам. Стандарты тут не нужны. Есть design patterns разработки подобных систем.

            Поддержка решения на базе платформы требует изучения платформы. Это займет даже больше времени (речь про небольшие задачи) А создание платформы для мелкого бизнеса (или точнее для мелких учетных задач) видимо не стоит затрачиваемых средств.

          • Серьезно? А что это за типичные паттерны, не подскажете?

          • bob32:

            Что-то на твой вопрос reply кнопки нет.

            Стандартных паттернов довольно много. Смотри по «Enterprise Integration Patterns», «Enterprise Patterns», просто «Design Patterns». Так же советую книги «Designing Data-Intensive Applications» и «Clean Architecture: A Craftsman’s Guide to Software Structure and Design». Русские переводы брать не стоит, только оригинал.

          • записал себе в задачи, но боюсь не одолею, ты бы смысл донес, аннотацию подхода.

          • fajij28770:

            конечно не оделеешь, ведь лучше еще 100500 бесполезных курсов личностного роста от инфоцыган пройти ))

  4. fajij28770:

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

  5. Serg:

    Да уж, набор каких-то наивных утверждений (база данных в одном файле), или то, что уже давно есть в известных продуктах (таблицы, вьюхи есть в любой реляционной БД). А «можно не типизированный язык, например Java» — разве Java не типизированный язык?

    • fajij28770:

      он, похоже, до сих пор путает Java и JavaScript )) хотя Java всегда был типизированным язок, а для JS сейчас есть TypeScript

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *