Gedemin Roadmap
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) (→Закрытие периода) |
SYSDBA (обсуждение | вклад) (→Парсер SQL, фильтрация) |
||
| (не показана 31 промежуточная версия 1 участника) | |||
| Строка 1: | Строка 1: | ||
| − | Настоящий roadmap является предворительным документом и представляет собой набор изменений и дополнений, которые планируется реализовать в версии Гедымин 2.0. Выход второй версии планируется на | + | Настоящий roadmap является предворительным документом и представляет собой набор изменений и дополнений, которые планируется реализовать в версии Гедымин 2.0. Выход второй версии планируется на 4 кв. 2008 г., хотя многие изменения будут появляться раньше в промежуточных версиях Гедымин 1.х. Обратите внимание, что данный список не является окончательным и будет постоянно изменяться и дополняться. |
== TgdcBase == | == TgdcBase == | ||
# Переработать механизм [[Сохранение в поток (постановка)|сохранения в поток]]. | # Переработать механизм [[Сохранение в поток (постановка)|сохранения в поток]]. | ||
| + | # Пересмотреть внутренние механизмы (например, кэш РУИДов) и заменить сортированные списки строк на хэш таблицы. | ||
| + | # Сделать из проводки нормальный бизнес-объект. | ||
| + | # Использовать визуальные настройки связанных гридов для выбора присоединямых таблиц по полям аттрибутам типа ссылка. | ||
== Интерфейсные компоненты == | == Интерфейсные компоненты == | ||
| + | |||
| + | # Добавить MDI интерфейс с докируемыми окнами. | ||
| + | # [http://code.google.com/p/gedemin/issues/detail?id=110 Дискуссия по новому интерфейсу] | ||
=== Грид === | === Грид === | ||
| Строка 14: | Строка 20: | ||
# Объединить визуальные настройки колонок и настройки компонентов для редактирования непосредственно в гриде. | # Объединить визуальные настройки колонок и настройки компонентов для редактирования непосредственно в гриде. | ||
# Показывать прикрепленные объекты во всплывающем окошке, как показываются примечания в Экселе. | # Показывать прикрепленные объекты во всплывающем окошке, как показываются примечания в Экселе. | ||
| + | # Реализовать редактирование в гриде при настроенном расширенном отображении. | ||
| + | # Адаптировать грид для отображения данных в режиме группировки. | ||
| + | # Реализовать темы оформления | ||
| + | # Централизованно хранить настройки гридов, привязанно к теме оформления. Для конкретного грида хранить только отличия в визуальных настройках от настроек темы | ||
| + | # Размеры колонок выставлять по размеру данных | ||
| + | # Реализовать редактирование полей в случае использования расширенного отображения | ||
=== Форма просмотра === | === Форма просмотра === | ||
| Строка 22: | Строка 34: | ||
=== Прочие компоненты === | === Прочие компоненты === | ||
| − | # Разработать визуальный компонент выбора диапазона дат. | + | # Разработать визуальный [[Компонент ввода диапазона дат (постановка)|компонент выбора диапазона дат]]. |
== База данных == | == База данных == | ||
| Строка 30: | Строка 42: | ||
# На уровне [[TIBCustomDataSet]] реализовать группировку записей и подсчет агрегатных значений. | # На уровне [[TIBCustomDataSet]] реализовать группировку записей и подсчет агрегатных значений. | ||
# Обрабатывать отключение от базы данных (обрыв связи, переподключение) без закрытия датасетов. | # Обрабатывать отключение от базы данных (обрыв связи, переподключение) без закрытия датасетов. | ||
| − | ## Реализовать скрытое переподключение при создании метаданных. Проверить, возможно с переходом на ФБ 2. | + | ## Реализовать скрытое переподключение при создании метаданных. (Проверить, возможно с переходом на ФБ 2.5 переподключение вообще не потребуется). |
# Изменить формат предствления записей в оперативной памяти с целью экономии места. | # Изменить формат предствления записей в оперативной памяти с целью экономии места. | ||
| − | === Firebird 2. | + | === Firebird 2.5 === |
| − | # Перевести БД на использование сервера Firebird 2. | + | # Перевести БД на использование сервера Firebird 2.5. |
| − | # Переделать основные бухгалтерские складские отчеты с использования одного громоздкого запроса на алгоритмическое построение на стороне сервера (используя возможности ФБ 2. | + | ## Перевести эталон. |
| + | ## Перевести стандартные настройки. | ||
| + | ## Встроить в инстолятор апгрейд базы данных. | ||
| + | # Переделать основные бухгалтерские складские отчеты с использования одного громоздкого запроса на алгоритмическое построение на стороне сервера (используя возможности ФБ 2.5). | ||
| + | # Адаптировать использование алиасов, вместо непосредственных путей к базам данных. | ||
| + | # Складскую и бухгалтерскую логику реализовать на стороне сервера с помощью динамического формирования кода в тригерах | ||
| + | # Скорректировать код обработки интервальных деревьев для того, чтобы исключить непроизвольное изменение полей LB, RB | ||
=== Закрытие и блокировка периода === | === Закрытие и блокировка периода === | ||
| Строка 42: | Строка 60: | ||
# Реализовать закрытие периода с возможностью выноса архивных данных в отдельную базу. | # Реализовать закрытие периода с возможностью выноса архивных данных в отдельную базу. | ||
# Усовершенствовать механизм [[Блокировка периода (постановка)|блокировки периода]]. | # Усовершенствовать механизм [[Блокировка периода (постановка)|блокировки периода]]. | ||
| + | |||
| + | === Склад === | ||
| + | # Бизнес объект работы с движением необходимо убрать и формировать движение либо через прямое добавление в таблицы, либо, еще лучше, напрямую через триггеры соответствующих таблиц (если придумать, что делать с признаками). Надо изучить оператор EXECUTE STATEMENT из Firebird 2.0. Возможно, он поможет решить проблему с признаками. Т.е. в самом триггере можно будет формировать код на основе текущей конфигурации БД и выполнять его. | ||
| + | # Таблица [[INV_CARD]] – разделить на две таблицы (признаки изменяемые и признаки фиксированные). Дать возможность удаления ненужных признаков (т.е. программа должна нормально понимать их отсутствие и должна быть возможность легко их добавить обратно, не вспоминая, как они назывались, и какого они были типа). | ||
| + | # Обязательно предусмотреть мягкое закрытие периода (т.е. архивирование данных с выводом сальдо). | ||
| + | # Для [[INV_BALANCE]] предусмотреть изменение данных журнального типа, для того, чтобы исключить блокировки при одновременной работе нескольких пользователей с одним и тем же товаром. Механизм должен работать подобно тому, как работает версионность записей в Интербейзе. Более подробно описано в задании №133. | ||
| + | # Продумать возможность ведения суммового и количественного учета. | ||
| + | |||
| + | === Бухгалтерия === | ||
| + | # Отказаться от таблицы [[AC_RECORD]] (из нее нам нужно только DOCUMENTKEY, RECORDKEY, COMPANYKEY), поле описание, может быть, хранить в отдельной таблице(оно заполняется достаточно редко). | ||
| + | # Аналитические признаки разделить на две группы: часто используемые и редко. Первые добавлять непосредственно в таблицу с проводками, а для вторых создавать отдельные таблицы для каждого признака. | ||
| + | # Сделать журналы документов для этого стандартизировать наименования полей применяемых в документах, например во всех документах, есть ссылка на [[GD_CONTACT]] или даже две, сделать их стандартными полями. | ||
| + | # Насколько оптимальна структура таблицы [[GD_DOCUMENT]]: id-parent? Ведь у нас для документа допускаются не более двух уровней вложенности: шапка-позиция? Может разделить на две таблицы: одну для шапок документов, другую для позиций? | ||
| + | |||
| + | === Прочее === | ||
| + | # Взять хотя бы десяток характерных баз и проанализировать использование полей в них. | ||
| + | ## Поле RESERVED убрать. | ||
| + | ## Поле DESCRIPTION почти нигде не используется. | ||
| + | # В таблице GD_DOCUMENT поля с суммами и ссылка на валюту не используются. Убрать их из базы. Или заставить всех их использовать. | ||
| + | # Интервальные деревья. Поскольку в Firebird 2.0 будет возможность объявлять глобальные переменные, то можно будет реализовать блокировку изменения полей LB, RB, так, чтобы менять их можно было только из триггера, но не вручную. | ||
| + | # Если накопление версий записей представляет такую угрозу производительности, то проанализировать использование и структуру таблиц и те из них, которые часто изменяются, но при этом, в которых меняется всего несколько полей, разбить на две таблицы: одна будет содержать постоянно изменяемые поля, а вторая — редко изменяемые. | ||
| + | |||
| + | == Бухгалтерия == | ||
| + | |||
| + | # Бухгалтерские отчеты должны иметь возможность работать с несколькими планами счетов. | ||
| + | # Журнал хозяйственных операций должен выводится в разрезе необходимого плана счетов (по умолчанию – активного). | ||
| + | # По любому списку документов необходимо выводить грид со списком проводок (как сейчас реализовано в настройках склада) – это должно быть по умолчанию. | ||
== Отчеты == | == Отчеты == | ||
| − | # Добавить ФастРепорт 4. | + | # Добавить ФастРепорт 4 и, по возможности, ФастКуб. |
| − | # Убрать промежуточное перекачивание данных в TClientDataSet перед передачей их в ФастРепорт. | + | # Убрать промежуточное перекачивание данных в TClientDataSet перед передачей их в ФастРепорт. Напрямую связывать данные запроса (TIBQuery, TIBDataSet) с отчетом. |
# Сделать динамическое формирование отчетов для печати данных из грида. | # Сделать динамическое формирование отчетов для печати данных из грида. | ||
| + | # Сделать отчеты динамическими. Автоматически, там где это возможно, устанавливать связи между клетками отчета и бизнес-объектами. Там, где автоматическое связывание невозможно, предусмотреть возможность простого программного связывания. Существующий механизм через написание отдельной скрипт функции не удобен. | ||
| + | ## Система построения отчетов, с показателями должна быть в самой платформе и сам процесс создания отчетов, необходимо как-то сделать прозрачней. Сейчас для этого (не учитывая показателей) необходимо: | ||
| + | ### Написать функцию, которая рассчитывает налог (это делается в конструкторе) | ||
| + | ### Написать функцию, которая рассчитанный налог подготавливает к печати | ||
| + | ### Нарисовать печатную форму. | ||
| + | ### При этом печатную форму можно проверить только из режима расчета налога, а в режиме его настройки это сделать нельзя. | ||
| + | # Пересмотреть интерфейсы BaseQueryList. Объединить добавление нового запроса, присваивание его текста и открытие в один метод. | ||
| + | # Автоматически формировать шаблон отчета на основании данных, поставляемых главной функцией. | ||
| + | # Создать дизайнер типовых отчетов | ||
== Среда разработки == | == Среда разработки == | ||
| Строка 55: | Строка 109: | ||
# Обновить SynEdit. Реализовать сворачивание кода. | # Обновить SynEdit. Реализовать сворачивание кода. | ||
# Реализовать возможность сравнения конфигураций двух баз данных. Перенос изменений между базами данных. | # Реализовать возможность сравнения конфигураций двух баз данных. Перенос изменений между базами данных. | ||
| + | # Реализовать механизм [[Контроль версии настроек (постановка)|контроля версий]] настроек. | ||
| + | # Необходимо все свести вместе. Т.е. создание документа, справочника, написание методов, редактирование формы, написание отчетов (печатных форм) с точки зрения разработчика должно быть единым процессом. | ||
| + | # Очень бы хотелось иметь полноценную подсказку по методам объектов (через CTRL_SPACE) сейчас это возможно только для глобальных объектов. | ||
| + | # При разработке, указывать какую подсистему мы разрабатываем и автоматом присваивать нужный префикс всем объектам БД. | ||
| + | # При создании таблицы справочника сразу добавлять поля Наименование и Код. | ||
| + | # Отказаться от создания оболочек на каждый класс Делфи. Создать класс прокси, который будет привязываться к объекту и поддерживать для него интерфейс IDispatch. | ||
| + | # Отказаться от путаницы макрос/скрипт функция. Упразднить макросы и ввести для скрипт-функции свойство "Отображается в меню" | ||
| + | # Отказаться от нашего отладчика. Использовать встроенный в Windows Script Host | ||
| + | # Переделать обработку исключений. Сделать ее похожей на VB On Error GoTo Label | ||
| + | # Перейти на редактор кода, который поддерживает сворачивание/разворачивание текста | ||
| + | # Переделать связку Делфи код/Код скрипта. Использовать хэширование вместо поиска по сортированным спискам | ||
| + | |||
| + | == Безопасность == | ||
| + | # Убрать непосредственное хранение паролей пользователя в таблице [[GD_USER]]. Хранить хэш MD5. | ||
| + | # Список баз данных должен храниться где-то централизованно, а не на каждом локальном компьютере. | ||
| + | # Архивным копированием надо управлять централизованно, а не так, что параметры автоматического архивирования хранятся в самой базе данных. | ||
| + | # Информация зависящая от пользователя должна в реестре храниться в CURRENT_USER а не в LOCAL_MACHINE | ||
| + | |||
| + | ==Хранилище== | ||
| + | |||
| + | # Внутренне перейти на использование хэшированных списков при обращении к значениям и папкам. | ||
| + | # Реализовать посегментное хранение данных в базе вместо записи одного большого блоба. | ||
| + | # Реализовать архивирование старой версии Хранилища. | ||
| + | |||
| + | ==Парсер SQL, фильтрация== | ||
| + | # Перейти на использование [[Парсер_SQL_в_Гедымине_(постановка)|одного парсера]] (сейчас у нас один парсер использует БО, второй -- фильтры, и в других местах используются свои функции разбора и анализа запроса) | ||
| + | # Интегрировать парсер с объектом с информацией о структуре БД | ||
| + | # Объединить панель фильтрации и фильтры в одну систему | ||
| + | |||
| + | == Установка == | ||
| + | |||
| + | # Перейти на использование Inno Setup вместо Install Shield. Собрать единую инстоляцию вместо разрозненных локальных установок. | ||
Текущая версия на 16:27, 18 января 2010
Настоящий roadmap является предворительным документом и представляет собой набор изменений и дополнений, которые планируется реализовать в версии Гедымин 2.0. Выход второй версии планируется на 4 кв. 2008 г., хотя многие изменения будут появляться раньше в промежуточных версиях Гедымин 1.х. Обратите внимание, что данный список не является окончательным и будет постоянно изменяться и дополняться.
Содержание |
[править] TgdcBase
- Переработать механизм сохранения в поток.
- Пересмотреть внутренние механизмы (например, кэш РУИДов) и заменить сортированные списки строк на хэш таблицы.
- Сделать из проводки нормальный бизнес-объект.
- Использовать визуальные настройки связанных гридов для выбора присоединямых таблиц по полям аттрибутам типа ссылка.
[править] Интерфейсные компоненты
- Добавить MDI интерфейс с докируемыми окнами.
- Дискуссия по новому интерфейсу
[править] Грид
- Объединить TgsDBGrid и TgsIBGrid в один компонент. Соответственно, объединить компоненты TgsColumn и TgsIBColumn.
- Убрать дублирование компонентов, используемых для редактирования данных в гриде.
- Реализовать каскадные стили (на подобии CSS) для представления визуальных настроек, вместо того, чтобы хранить настройки каждого грида индивидуально.
- Объединить визуальные настройки колонок и настройки компонентов для редактирования непосредственно в гриде.
- Показывать прикрепленные объекты во всплывающем окошке, как показываются примечания в Экселе.
- Реализовать редактирование в гриде при настроенном расширенном отображении.
- Адаптировать грид для отображения данных в режиме группировки.
- Реализовать темы оформления
- Централизованно хранить настройки гридов, привязанно к теме оформления. Для конкретного грида хранить только отличия в визуальных настройках от настроек темы
- Размеры колонок выставлять по размеру данных
- Реализовать редактирование полей в случае использования расширенного отображения
[править] Форма просмотра
- Объединить Панель поиска и Фильтры в один механизм. Привязать к фильтру визуальные настройки таблицы.
- Реализовать хранение и выбор нескольких визуальных настроек для каждого грида.
[править] Прочие компоненты
- Разработать визуальный компонент выбора диапазона дат.
[править] База данных
[править] Компоненты доступа IBX
- На уровне TIBCustomDataSet реализовать группировку записей и подсчет агрегатных значений.
- Обрабатывать отключение от базы данных (обрыв связи, переподключение) без закрытия датасетов.
- Реализовать скрытое переподключение при создании метаданных. (Проверить, возможно с переходом на ФБ 2.5 переподключение вообще не потребуется).
- Изменить формат предствления записей в оперативной памяти с целью экономии места.
[править] Firebird 2.5
- Перевести БД на использование сервера Firebird 2.5.
- Перевести эталон.
- Перевести стандартные настройки.
- Встроить в инстолятор апгрейд базы данных.
- Переделать основные бухгалтерские складские отчеты с использования одного громоздкого запроса на алгоритмическое построение на стороне сервера (используя возможности ФБ 2.5).
- Адаптировать использование алиасов, вместо непосредственных путей к базам данных.
- Складскую и бухгалтерскую логику реализовать на стороне сервера с помощью динамического формирования кода в тригерах
- Скорректировать код обработки интервальных деревьев для того, чтобы исключить непроизвольное изменение полей LB, RB
[править] Закрытие и блокировка периода
- Реализовать закрытие периода с возможностью выноса архивных данных в отдельную базу.
- Усовершенствовать механизм блокировки периода.
[править] Склад
- Бизнес объект работы с движением необходимо убрать и формировать движение либо через прямое добавление в таблицы, либо, еще лучше, напрямую через триггеры соответствующих таблиц (если придумать, что делать с признаками). Надо изучить оператор EXECUTE STATEMENT из Firebird 2.0. Возможно, он поможет решить проблему с признаками. Т.е. в самом триггере можно будет формировать код на основе текущей конфигурации БД и выполнять его.
- Таблица INV_CARD – разделить на две таблицы (признаки изменяемые и признаки фиксированные). Дать возможность удаления ненужных признаков (т.е. программа должна нормально понимать их отсутствие и должна быть возможность легко их добавить обратно, не вспоминая, как они назывались, и какого они были типа).
- Обязательно предусмотреть мягкое закрытие периода (т.е. архивирование данных с выводом сальдо).
- Для INV_BALANCE предусмотреть изменение данных журнального типа, для того, чтобы исключить блокировки при одновременной работе нескольких пользователей с одним и тем же товаром. Механизм должен работать подобно тому, как работает версионность записей в Интербейзе. Более подробно описано в задании №133.
- Продумать возможность ведения суммового и количественного учета.
[править] Бухгалтерия
- Отказаться от таблицы AC_RECORD (из нее нам нужно только DOCUMENTKEY, RECORDKEY, COMPANYKEY), поле описание, может быть, хранить в отдельной таблице(оно заполняется достаточно редко).
- Аналитические признаки разделить на две группы: часто используемые и редко. Первые добавлять непосредственно в таблицу с проводками, а для вторых создавать отдельные таблицы для каждого признака.
- Сделать журналы документов для этого стандартизировать наименования полей применяемых в документах, например во всех документах, есть ссылка на GD_CONTACT или даже две, сделать их стандартными полями.
- Насколько оптимальна структура таблицы GD_DOCUMENT: id-parent? Ведь у нас для документа допускаются не более двух уровней вложенности: шапка-позиция? Может разделить на две таблицы: одну для шапок документов, другую для позиций?
[править] Прочее
- Взять хотя бы десяток характерных баз и проанализировать использование полей в них.
- Поле RESERVED убрать.
- Поле DESCRIPTION почти нигде не используется.
- В таблице GD_DOCUMENT поля с суммами и ссылка на валюту не используются. Убрать их из базы. Или заставить всех их использовать.
- Интервальные деревья. Поскольку в Firebird 2.0 будет возможность объявлять глобальные переменные, то можно будет реализовать блокировку изменения полей LB, RB, так, чтобы менять их можно было только из триггера, но не вручную.
- Если накопление версий записей представляет такую угрозу производительности, то проанализировать использование и структуру таблиц и те из них, которые часто изменяются, но при этом, в которых меняется всего несколько полей, разбить на две таблицы: одна будет содержать постоянно изменяемые поля, а вторая — редко изменяемые.
[править] Бухгалтерия
- Бухгалтерские отчеты должны иметь возможность работать с несколькими планами счетов.
- Журнал хозяйственных операций должен выводится в разрезе необходимого плана счетов (по умолчанию – активного).
- По любому списку документов необходимо выводить грид со списком проводок (как сейчас реализовано в настройках склада) – это должно быть по умолчанию.
[править] Отчеты
- Добавить ФастРепорт 4 и, по возможности, ФастКуб.
- Убрать промежуточное перекачивание данных в TClientDataSet перед передачей их в ФастРепорт. Напрямую связывать данные запроса (TIBQuery, TIBDataSet) с отчетом.
- Сделать динамическое формирование отчетов для печати данных из грида.
- Сделать отчеты динамическими. Автоматически, там где это возможно, устанавливать связи между клетками отчета и бизнес-объектами. Там, где автоматическое связывание невозможно, предусмотреть возможность простого программного связывания. Существующий механизм через написание отдельной скрипт функции не удобен.
- Система построения отчетов, с показателями должна быть в самой платформе и сам процесс создания отчетов, необходимо как-то сделать прозрачней. Сейчас для этого (не учитывая показателей) необходимо:
- Написать функцию, которая рассчитывает налог (это делается в конструкторе)
- Написать функцию, которая рассчитанный налог подготавливает к печати
- Нарисовать печатную форму.
- При этом печатную форму можно проверить только из режима расчета налога, а в режиме его настройки это сделать нельзя.
- Система построения отчетов, с показателями должна быть в самой платформе и сам процесс создания отчетов, необходимо как-то сделать прозрачней. Сейчас для этого (не учитывая показателей) необходимо:
- Пересмотреть интерфейсы BaseQueryList. Объединить добавление нового запроса, присваивание его текста и открытие в один метод.
- Автоматически формировать шаблон отчета на основании данных, поставляемых главной функцией.
- Создать дизайнер типовых отчетов
[править] Среда разработки
- Реализовать хранение версий скрипт функции, а также возможность визуального сравнения двух версий одной скрипт функции.
- Скрипт функции методов одного класса хранить ввиде одного текста.
- Обновить SynEdit. Реализовать сворачивание кода.
- Реализовать возможность сравнения конфигураций двух баз данных. Перенос изменений между базами данных.
- Реализовать механизм контроля версий настроек.
- Необходимо все свести вместе. Т.е. создание документа, справочника, написание методов, редактирование формы, написание отчетов (печатных форм) с точки зрения разработчика должно быть единым процессом.
- Очень бы хотелось иметь полноценную подсказку по методам объектов (через CTRL_SPACE) сейчас это возможно только для глобальных объектов.
- При разработке, указывать какую подсистему мы разрабатываем и автоматом присваивать нужный префикс всем объектам БД.
- При создании таблицы справочника сразу добавлять поля Наименование и Код.
- Отказаться от создания оболочек на каждый класс Делфи. Создать класс прокси, который будет привязываться к объекту и поддерживать для него интерфейс IDispatch.
- Отказаться от путаницы макрос/скрипт функция. Упразднить макросы и ввести для скрипт-функции свойство "Отображается в меню"
- Отказаться от нашего отладчика. Использовать встроенный в Windows Script Host
- Переделать обработку исключений. Сделать ее похожей на VB On Error GoTo Label
- Перейти на редактор кода, который поддерживает сворачивание/разворачивание текста
- Переделать связку Делфи код/Код скрипта. Использовать хэширование вместо поиска по сортированным спискам
[править] Безопасность
- Убрать непосредственное хранение паролей пользователя в таблице GD_USER. Хранить хэш MD5.
- Список баз данных должен храниться где-то централизованно, а не на каждом локальном компьютере.
- Архивным копированием надо управлять централизованно, а не так, что параметры автоматического архивирования хранятся в самой базе данных.
- Информация зависящая от пользователя должна в реестре храниться в CURRENT_USER а не в LOCAL_MACHINE
[править] Хранилище
- Внутренне перейти на использование хэшированных списков при обращении к значениям и папкам.
- Реализовать посегментное хранение данных в базе вместо записи одного большого блоба.
- Реализовать архивирование старой версии Хранилища.
[править] Парсер SQL, фильтрация
- Перейти на использование одного парсера (сейчас у нас один парсер использует БО, второй -- фильтры, и в других местах используются свои функции разбора и анализа запроса)
- Интегрировать парсер с объектом с информацией о структуре БД
- Объединить панель фильтрации и фильтры в одну систему
[править] Установка
- Перейти на использование Inno Setup вместо Install Shield. Собрать единую инстоляцию вместо разрозненных локальных установок.