27 мая 2010 г.

Увеличиваем отрыв!

Обработана информация за 2009 г. по использованию программного обеспечения на предприятиях, подчиняющихся Министерству сельского хозяйства и продовольствия:
По сравнению с 2008 г. использование Нивы (Гедымина) увеличилось, а 1С — сократилось. Стоит заметить, что опросный лист содержал графу Нива, но не содержал отдельной графы для решений на Гедымине. Например, все наши мясокомбинаты дружно отметили используемое ПО в графе Другое. Но, мы-то знаем на чем они работают :) Таким образом, реальные цифры должны выглядеть еще более оптимистично.

PS: 42 предприятия до сих пор используют Анжелику!

26 мая 2010 г.

Как избежать циклических кольцевых ссылок в реляционной базе данных?

Системная таблица RDB$DEPENDENCIES хранит связи между метаданными в базе. Попытка вытянуть все зависимости для заданного объекта с помощью WITH RECURSIVE в общем случае разбивается о бесконечные циклы. Можно ли решить задачу одним запросом исходя из существующей структуры RDB$DEPENDENCIES? Ничего лучше, чем контролировать уровень вложенности и прерывать поиск при достижении заданной глубины, пока не приходит в голову:

WITH RECURSIVE dep_tree AS (
  SELECT
    0 as lvl, 
    rdb$dependent_name, 
    rdb$dependent_type, 
    rdb$depended_on_name
  FROM
    rdb$dependencies
  WHERE
    rdb$depended_on_name = :depname
  UNION ALL
  SELECT
    (t.lvl + 1) as lvl, 
    d.rdb$dependent_name, 
    d.rdb$dependent_type, 
    d.rdb$depended_on_name
  FROM
    rdb$dependencies d JOIN dep_tree t 
      ON t.rdb$dependent_name = d.rdb$depended_on_name
        AND t.lvl < 5 )
SELECT DISTINCT 
  rdb$dependent_name, 
  rdb$dependent_type, 
  rdb$depended_on_name
FROM
  dep_tree

Глубину прекращения поиска мы задаем вручную (в примере -- это константа 5). Если задать слишком много, то запрос будет выполняться слишком долго. Задать мало -- и мы рискуем потерять объекты при большой глубине вложенности связей.

25 мая 2010 г.

Тестирование объектов для работы с метаданными

Как выяснилось, Гедымин прекрасно переносит переподключение к БД прямо из кода программы:
IBLogin.LogOff;
IBLogin.Login(False, True);
// параметры метода Login управляют считыванием 
// информации о базе данных из реестра 
// и отображением окна ввода пароля
Что позволяет легко создать тесты для TgdcMetaData объектов. Начало уже положено. Тестируем создание и корректное удаление интервального дерева.

22 мая 2010 г.

Код в SubVersion

В ветке Stable все последние изменения и СТАРЫЕ отчеты, с копированием данных через поток. В Trunk все последние изменения и НОВЫЕ отчеты.

2 мая 2010 г.

Ниве 2.0 быть

Вроде бы согласован вопрос о финансировании НИВЫ 2.0. Если все будет Ок, то через годик выйдет в свет единый комплекс объединяющий в себе бухгалтерский и производственный учет, бизнес планирование, специфические задачи вроде расчетов рационов кормления скота. Конкурирующих продуктов такого рода просто нет.

Восьмая группа

Та, что планировалась в январе, но состоялась только в апреле из-за потопа в учебном центре.