Основная цель данной статьи – не получение инвайта, а возможность поделиться идеей и получить комментарии о ее целесообразности и перспективах от сообщества специалистов.
(Инвайт на эту статью я уже получил - спасибо неизвестному хабровому другу) Я когда-то работал программистом в проектном институте на экономическом факультете.
Мы сделали экономические расчеты для крупной организации (Башнефть).
Я обеспечил техническую поддержку этих расчетов.
Я столкнулся с тем, что по-настоящему удобного инструмента для этих целей не существует. У меня возникла идея такого инструмента — специального декларативного языка, напоминающего Пролог, — языка описания экономических расчетов.
Основная идея языка описания экономических расчетов — дать возможность описывать расчеты максимально близко к тому, как это делается в учебниках по экономике.
То есть что-то вроде: Прибыль = Выручка – Затраты Доход = Цена за единицу продукта * Количество_продукта И т. д. Пользователь описывает расчет в виде таких формул, а затем задает цель, то есть то, что ему нужно на самом деле посчитать.
После этого система строит дерево расчета.
Например, если нам нужно рассчитать прибыль, мы должны сначала рассчитать выручку и затраты.
Для расчета выручки необходимо определить цену за единицу продукции и количество продукции.
Для описания реальных экономических расчетов этот язык необходимо расширить.
Должны быть предусмотрены следующие возможности: 1. Извлечение данных из базы данных 2. Предоставьте описания различных вычислений в зависимости от контекста.
Для этого в язык вводятся следующие сущности: 1. Формулы с условиями: Перед группой формул или перед отдельной формулой можно поставить условие, при котором эту формулу можно использовать.
2. Источники данных: Выборки из базы данных предприятия, по которому происходит расчет. (Стандартный источник данных: запрос SQL, таблица DBF, файл csv и т. д.) Имя, поля – строковые, числовые, даты.
Источники данных используются только в функциях получения данных из базы данных.
3. Функции: Стандартная математика Работа с датами Извлечение данных из базы данных Агрегирующие функции: сумма, максимум, минимум и т.д. 4. Теги: Типы тегов: Число дата Куча Линия Теги нужны для описания контекста вычислений: Любой экономический расчет производится в некотором контексте: Под конкретный объект (Предприятие, цех, отдел.
), за определенный период-дату.
Кроме того, для расчета показателя объекта часто необходимо рассчитать показатели его подобъектов, например, чтобы рассчитать прибыль отдела, нужно посчитать прибыль всех подразделений отдела и сложить ее.
Для всего этого используется механизм тегов, их наследования и модификации.
То есть в самом начале расчета указывается список тегов, описывающих контекст расчета.
Прежде всего, это объект расчета (все предприятие или какое-либо из подразделений, дата и период, за который производится расчет).
В формулах есть возможность изменять теги контекста, изменять или добавлять теги.
В первой формуле следующего примера в строке: Прибыль = Сумма(Прибыль[Тип_Объекта=Мастерская], Код_Объекта=Набор_Извлечения(Список_Магазин, Код_Объекта, Родительский_Код=Код_Объекта)) В подстроке Прибыль[Object_Type=Цех] значение тега Object_Type меняется с НГДУ на Цех, так что дальнейшие расчеты проводит цех, а сумма этих расчетов попадает в ОГДУ.
Строка вида {[Object_Type=NGDU] означает, что все формулы в фигурных скобках можно использовать только в том случае, если Object_Type=NGDU. Пример: {[Object_Type=NGDU] Прибыль = Сумма(Прибыль[Тип_Объекта=Мастерская], Код_Объекта=Набор_Извлечения(Список_Магазин, Код_Объекта, Родительский_Код=Код_Объекта)) } {[Object_Type=Мастерская] Прибыль = Добыча_Нефти*Цена_Нефти – Расходы Добыча_Нефти=Сумма(Добыча_Нефти[Тип_Объекта=Скважина], Код_Объекта = Набор_Извлечения(Список_Скважин, Код_Объекта, Родительский_Код=Код_Объекта, Тип_Скважины=Нагнетание)) } {[Object_Type=Ну] Добыча_Нефти = Получить_Значение (Добыча_по_скважине, Добыча, Код_Скважины=Код_Объекта, Дата=Дата_Расчета) } Этот пример определяет: Прибыль нефтегазодобывающего цеха – это сумма прибыли входящих в него цехов.
Прибыль подразделения определяется как разница между выручкой от реализации нефти и затратами.
Добыча нефти по цеху определяется как сумма добычи по скважинам.
Также подразумевается наличие 3-х источников данных – таблиц выборок из базы данных предприятия: Список цехов представляет собой таблицу как минимум с двумя полями Object_Code и Parent_Code, определяющими, какой цех какому НГДУ принадлежит. Список скважин – аналог списка цехов, таблица, определяющая принадлежность скважин цехам.
Данные о добыче скважин за период – таблица минимум с 3 полями: Добыча, Ну_Код, Дата.
Чтобы запустить расчет для НГД с кодом 1, нужно ввести что-то вроде: Object_Type=НГДУ Код_объекта=1 Calculation_Date='01.01.2009' ? Выгода Основное ядро состоит из 3 модулей: 1.Редактирование формул для расчетов 2. Окно запроса 3. Модуль подключения источников данных.
Это вычислительное ядро.
Для удобства его можно расширить сервисными функциями.
Например, мне наиболее актуальными кажутся следующие варианты: 1. Запрос в виде таблицы, а не одного значения 2. Возможность ввода информации об объектах расчета не по кодам, а по именам, то есть организация справочников.
И т. д. Преимущества этого подхода: 1. Гибкость – после проведения расчета его можно легко переделать интуитивно понятным способом.
Более того, простые изменения могут быть внесены самими экономистами.
Также можно вести проект, начиная с бизнес-плана, постепенно заменяя данные формул, рассчитанных с помощью прогнозной модели, данными реальных показателей.
2. Универсальность – можно произвести расчет, который будет брать информацию из разных источников.
Очень актуально для крупных организаций, состоящих из множества относительно независимых «дочерних компаний».
3. Прозрачность – для любого конечного значения можно построить дерево расчета и показать все промежуточные значения.
Актуально для больших проектов, в которых неизбежны ошибки, первопричину которых обычно сложно найти.
Минусы: 1. Сложность обучения.
Тем не менее, это совершенно новый язык, хотя и довольно простой.
2. Сложность настройки расчетов.
Для небольших вычислений этот метод может оказаться слишком громоздким.
Есть еще одна проблема, которая останавливает меня от дальнейших шагов по реализации этого проекта.
Дело в том, что его использование имеет смысл только на относительно крупных объектах бизнеса.
Имею большой опыт разного рода внедрений в качестве исполнителя в проектах для подобных объектов и имею отличную идею что для продажи продукции таким клиентам используются весьма специфические технологии, о которых я, к сожалению, совершенно не знаю.
Может быть, здесь есть те, кто ими владеет и кому интересна эта идея? Теги: #язык программирования #стартап #идея для стартапа #идея для стартапа #Пролог #занимаюсь пиаром
-
Установка Памяти Ноутбука 101
19 Oct, 24 -
Третье Лето Открытого Исходного Кода
19 Oct, 24 -
Нужный Предмет Номер Один
19 Oct, 24