суббота, 8 июня 2013 г.

Модель предприятия

Модель (полный перечень бизнес процессов) предприятия описывается в простой табличной форме. По вертикали располагаются всевозможные направления деятельности. По горизонтали располагаются 7 (семь) этапов деятельности.  
Направления деятельности. Деятельность предприятия представляет собой бесконечный замкнутый процесс преобразования одних ценностей в другие. Функционально процессы разбаются по направлениям деятельности:
  1. Продажа;
  2. Производство;
  3. Хранение;
  4. Закупка;
  5. Финансы. 
Этапы (виды) деятельности. Деятельность по любому из направлений разбивается на семь последовательных этапов:
  1. Формирование нормативно-справочной информации (НСИ) - определение методологии (какие ценности в какие преобразуются, и в каком количественном отношении);
  2. Формирование проекта - определение технологии (какое количество ценностей необходимо получить, какое количество ценностей необходимо потратить, кто является МОЛ по ценностям);
  3. Экономический расчет проекта - бюджетирование (сколько стоят ценности, которые необходимо потратить; какая стоимость ценности, которую необходимо получить);
  4. Планирование - определение даты окончания проекта;
  5. Диспетчеризация - определение даты запуска проекта;
  6. Исполнение - фактическое завершение проекта;
  7. Бухгалтерский учет - расчет фактической стоимости полученной ценности. 
Общее количество процессов предприятия получается как произведение направлений деятельности на этапы деятельности.

среда, 13 февраля 2013 г.

Автофильтр OpenOffice (LibreOffice) Calc

Часто пользуюсь автофильтром в электронных таблицах. В OpenOffice (LibreOffice) регулярно сталкивался с проблемой:
  1. Выделяю заголовки столбцов;
  2. Выбираю пункт меню "Данные-Фильтр-Автофильтр";
  3. На сообщение: "Диапазон не содержит заголовков столбцов. Использовать первую строку в качестве заголовка столбца?" - нажимаю "Да";
  4. Фильтр включается, но, когда ставлю условия фильтрации, автофильтр пропадает вместе заголовками столбцов ! ! !
РЕШЕНИЕ нашел СЛЕДУЮЩЕЕ:
  1. Оказывается, автофильтр OpenOffice (LibreOffice) Calc требует, чтобы все заголовки столбцов были заполнены текстовыми (не пустыми, не числовыми, не логическими, ни другими) значениями;
  2. Если  в заголовке столбцов необходимо указать число (к примеру, вставить нумерацию столбцов), перед числом ставлю символ « ' » - апостроф, в этом случае число интерпретируется как текст;
  3. Если после выбора пункта меню "Данные-Фильтр-Автофильтр" выскочило сообщение "Диапазон не содержит заголовков столбцов. Использовать первую строку в качестве заголовка столбца?" - значит автофильтр не смог корректно распознать заголовки столбцов, и, возможно, включил их в состав данных. Снова проверяю заголовки.

среда, 12 ноября 2008 г.

Черный ящик - философский булыжник программиста

Наконец, после долгих сомнений, утвердил для себя концепцию построения информационных систем (ИС). Создавать компьютерные программы предлагаю из подготовленных заранее блоков - "Черных ящиков".
Идея Black Box (White Box) в IT не нова (уже стара и стала бесперспективной). Однако, опробовав на практике новые компоненты, предлагаю возродить идею.
На сайте daremanager.sf.net выложил общие схемы и исходники в SVN репозитории.

среда, 6 июня 2007 г.

Новый OpenSource проект

На www.sourceforge.net зарегистрировал новый исследовательский проект DaReManager. Исследования будут посвящены изучению общих принципов построения Информационных систем. Вернее, идеи уже готовы и опробованы в различных проектах. Осталось выстроить красивую теорию и реализовать в одном проекте.

понедельник, 4 июня 2007 г.

Хранимые процедуры с переменным числом параметров

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

> SELECT my_function('123 AS param1, 456 AS param2, 789 AS param3');

Значения входящих параметров внутри функции можно получить, составив запросы в следующем виде:

> SELECT INTO l_param1 rec.param1 FROM (SELECT 123 AS param1, 456 AS param2, 789 AS param3) AS rec;

> SELECT INTO l_param2 rec.param2 FROM (SELECT 123 AS param1, 456 AS param2, 789 AS param3) AS rec;

> SELECT INTO l_param3 rec.param3 FROM (SELECT 123 AS param1, 456 AS param2, 789 AS param3) AS rec;

Подробнее описано здесь: http://docs.google.com/Doc?id=ddzmh9s3_87dgw9rn

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

суббота, 24 марта 2007 г.

Вычисление параметризованных выражений

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

f(a,b,c) = a + b + c + 1, где a, b и с произвольные параметры.

Если под рукой не оказалось готового инструмента для вычисления параметризованных выражений, в качестве калькулятора воспользуйтесь какой-нибудь СУБД и ее могучим языком запросов SQL.

Рассмотрим этапы построения SQL запроса для вычисления параметризованного выражения:

1. Предположим, что f(a,b,c) необходимо вычислить для a=2, b=4 и с=6. Составим запрос:

> SELECT 2 AS a, 4 AS b, 6 AS c;

Получим таблицу значений входящих параметров:

+-----------+

| a | b | c |

+-----------+

| 2 | 4 | 6 |

+-----------+

2. Доработаем запрос:

> SELECT b FROM (SELECT 2 AS a, 4 AS b, 6 AS c) AS params;

Получим значение отдельного параметра:

+---+

| b |

+---+

| 4 |

+---+

3. Наконец, составим запрос, вычисляющий наше выражение:

> SELECT a + b + c + 1 AS result FROM (SELECT 2 AS a, 4 AS b, 6 AS c) AS params;

Получим результат:

+--------+

| result |

+--------+

| 13 |

+--------+



Остается только добавить, что использовать СУБД в качестве калькулятора можно для различных типов данных (числовых, логических, строковых, даты и тд.). Особенно интересны комбинированные выражения. Например на запрос:

> SELECT a OR (b = c) AS result

FROM (SELECT false AS a, 4 AS b, 6 AS c) AS params;

СУБД вернет нам:

+--------+

| result |

+--------+

| false |

+--------+

Приведенный пример работает в СУБД PostgreSQL, MySQL, SQLite и др.