Утилита закрытия периода и очистки базы данных
Информация является ценнейшим активом предприятия. Обрезка базы данных -- крайняя мера, когда другие подходы не дают нужного результата. По состоянию на 2014 год, при использовании сервера Firebird 2.5, для файлов баз данных размером до 100 Гб приемлемой производительности можно достичь использованием одних лишь аппаратных средств: многопроцессорных серверов, RAID контроллеров, SSD устройств и т.п. Более подробно о настройке сервера см. статью Рекомендуемая конфигурация сервера базы данных.
Содержание |
Предостережение!
- После обработки утилитой закрытия периода на определенную дату, детальные отчеты за всю историю предприятия придется строить по двум базам данных, сводя итоговые цифры вручную в электронных таблицах.
- Убедитесь, что перед началом обработки базы данных вы создали архивную копию и сохранили ее в нескольких экземплярах в надежных местах.
Установка
- Утилита не требует отдельной установки и состоит из одного выполняемого файла gsDBSqueeze.exe, который следует расположить рядом с файлом gedemin.exe.
- Если утилита используется автономно, то для подключения к базе данных понадобится клиентская часть сервера Firebird или комплект файлов встроенного сервера.
- Для работы утилиты требуется новейшая версия библиотеки gudf.dll (скачать 32-х или 64-х разрядную версию).
Обработка базы данных
Шаг 1. Database Connection
- 1. расположение файла БД:
- locale - локально на вашем компьютере
- locale - локально на вашем компьютере
- remote - удаленно на сервере
- remote - удаленно на сервере
- 2. подключение к БД:
- host - имя/IP-адрес сервера
- host - имя/IP-адрес сервера
- default port - значение RemoteServicePort в firebird.conf (3050 по умолч.)
- default port - значение RemoteServicePort в firebird.conf (3050 по умолч.)
- password - пароль пользователя администратор (masterkey по умолч.)
- database - путь к БД в формате LFS(Local File System):
Диск:[\Каталог][\Файл]
- где Диск — буква диска, Каталог — имя каталога на диске, Файл — имя файла в каталоге или на диске.
Шаг 2. Squeeze Settings
- 1. Укажите дату, до которой Вы хотите удалить документы (дату закрытия периода).
- 2. Снимать галочку с Сохранить бухгалтерское и складское сальдо, вычисленное программой НЕ рекомендуется.
- 3. Если Вы хотите ограничить множество документов, которые будут обрабатываться программой (если удовлетворят условию удаления - будут удалены), то выберете их типы, нажав на кнопку Выбрать типы документов.
- В появившемся окне осуществите выбор необходимых типов путем двойного клика по записи в таблице.
- Нажмите Принять для завершения выбора.
- Выберете необходимый тип ограничения: исключение либо обработка документов только с выбранными типами.
Параметры данной страницы Squeeze Settings можно сохранить в файл конфигурации или загрузить из уже существующего файла.
Шаг 3. Options
- Доступны следующие опции:
- сохранение журнала выполнения программы (log) в файл (рекомендуется выбрать, для возможности анализа ошибок)
- создание backup-файла БД, по завершению ее обработки программой
- восстановление в новую restore-БД из этого backup-файла.
! Пути к директориям для сохранения файлов backup/restore должны быть указаны в формате LFS, т.к. они должны располагаться на той же машине, что и обрабатываемая БД.
! Путь к директории для сохранения log-файла должен быть в формате UNC(Uniform Naming Convention):
\\Сервер\СетевойКаталог[\ОтносительныйПуть]
- где Сервер — сетевое имя компьютера, СетевойКаталог — сетевое имя общего каталога на этом компьютере, а ОтносительныйПуть — путь к каталогу.
- где Сервер — сетевое имя компьютера, СетевойКаталог — сетевое имя общего каталога на этом компьютере, а ОтносительныйПуть — путь к каталогу.
На этом шаге выбор завершен и Вы можете запустить процесс обработки БД.
Перед запуском Вы можете перейти на вкладку Statistics:
- здесь отображены свойства БД и такие первоначальные характеристики, как размер файла и количество записей в основных таблицах.
Рассмотрим подробнее.
Основными таблицами являются: GD_DOCUMENT, AC_ENTRY, INV_MOVEMENT, INV_CARD.
Раздел Number of records in a table:
- информация о количестве записей в таблицах.
Раздел Number of processing records:
- GD_DOCUMENT - количество записей с датой < выбранной Вами ранее даты.
- AC_ENTRY, INV_MOVEMENT, INV_CARD - количество записей, связанных с этими документами.
! Размер БД уменьшится только после операций backup и restore, так как Firebird использует версионность записей.
Если Вы выбрали эти опции, то по завершению этих операций в разделе DB File Size будет указан размер restore-файла БД.
Для разъединения, чтобы, например, переподключиться к другой БД, необходимо на странице Database Сonnection нажать Disconnect.
Для корректного разъединения с БД, когда процесс обработки уже был запущен, нажмите кнопку STOP - программа прервет обработку БД по завершению текущей операции, которая выполняется.
Нажмите кнопку Go! для запуска обработки БД.
Принцип действия
- 1. Вычисление остатков за период до указанной даты.
- 1.1. Вычисление бухгалтерского сальдо в разрезе компании, счета, валюты, аналитик:
SELECT accountkey, 'C', --< accountpart companykey, currkey, ABS(SUM(debitncu) - SUM(creditncu)), --< creditncu ABS(SUM(debitcurr) - SUM(creditcurr)), --< creditcurr ABS(SUM(debiteq) - SUM(crediteq)), --< crediteq CAST(0.0000 AS DECIMAL(15,4)), --< debitncu CAST(0.0000 AS DECIMAL(15,4)), --< debitcurr CAST(0.0000 AS DECIMAL(15,4)), --< debiteq /*активные аналитики счета*/ FROM AC_ENTRY WHERE entrydate < :ClosingDate GROUP BY accountkey, companykey, currkey, /*активные аналитики счета*/ HAVING (SUM(debitncu) - SUM(creditncu)) < CAST(0.0000 AS DECIMAL(15,4)) OR (SUM(debitcurr) - SUM(creditcurr)) < CAST(0.0000 AS DECIMAL(15,4)) OR (SUM(debiteq) - SUM(crediteq)) < CAST(0.0000 AS DECIMAL(15,4)) UNION ALL SELECT accountkey, 'D', --< accountpart companykey, currkey, CAST(0.0000 AS DECIMAL(15,4)), --< creditncu CAST(0.0000 AS DECIMAL(15,4)), --< creditcurr CAST(0.0000 AS DECIMAL(15,4)), --< crediteq ABS(SUM(debitncu) - SUM(creditncu)), --< debitncu ABS(SUM(debitcurr) - SUM(creditcurr)), --< debitcurr ABS(SUM(debiteq) - SUM(crediteq)) --< debiteq /*активные аналитики счета*/ FROM AC_ENTRY WHERE entrydate < :ClosingDate GROUP BY accountkey, companykey, currkey, /*активные аналитики счета*/ HAVING (SUM(debitncu) - SUM(creditncu)) > CAST(0.0000 AS DECIMAL(15,4)) OR (SUM(debitcurr) - SUM(creditcurr)) > CAST(0.0000 AS DECIMAL(15,4)) OR (SUM(debiteq) - SUM(crediteq)) > CAST(0.0000 AS DECIMAL(15,4))
- 1.2. Вычисление складского сальдо:
SELECT im.contactkey, ic.goodkey, im.cardkey, doc.companykey, SUM(im.debit - im.credit) AS Balance, FROM inv_movement im JOIN GD_DOCUMENT doc ON im.documentkey = doc.id JOIN INV_CARD ic ON im.cardkey = ic.id WHERE im.movementdate < :ClosingDate, AND im.disabled = 0,
- если были выбраны типы для ограничения обрабатываемого множества документов:
AND doc.documenttype IN/NOT IN (:Типы_Выбранные_Пользователем_На_Форме)
GROUP BY im.contactkey, im.cardkey, ic.goodkey, doc.companykey
- 2. Перепривязка карточек, необходимых для этого складского сальдо, на наш документ, который будет хранить сальдо:
MERGE INTO inv_card ic USING ( SELECT DISTINCT c.id FROM DBS_TMP_INV_SALDO s --< вычисленное выше складское сальдо JOIN INV_CARD c ON c.id = s.cardkey ) inp ON inp.id = ic.id WHEN MATCHED THEN UPDATE SET firstdocumentkey = :SaldoDocKey, documentkey = :SaldoDocKey
- 3. Очистка от неактуальных данных:
- AC_ENTRY_BALANCE
DELETE FROM ac_entry_balance
SET GENERATOR gd_g_entry_balance_date TO 0
- INV_BALANCE
DELETE FROM inv_balance
- AC_RECORD и INV_MOVEMENT, связанные с удаляемыми документами.
- 4. Создание множества, содержащего идентификаторы записей таблиц, составляющих единое целое с gd_document, которые должны остаться.
- 5. Подготовка БД к удалению записей:
- удаление FKs
- удаление PKs
- деактивация индексов
- дективация триггеров.
- 6. Удаление из gd_document и таблиц, составляющих с ним единое целое, записей.
- Условие удаления: отсутствие идентификатора записи в созданном нами множестве.
- Удаление записи inv_card: отсутствие записей inv_movement, связанных с ней.
- 7. Очистка GD_RUID от записей c несуществующими xID.
- 8. Сохранение сальдо за период до указанной даты.
- 9. Восстановление БД.
- 10. Сохранение складского сальдо за весь период:
INSERT INTO inv_balance ( cardkey, contactkey, balance, goodkey) SELECT m.cardkey, m.contactkey, SUM(m.debit - m.credit), m.goodkey FROM inv_movement m WHERE m.disabled = 0 GROUP BY m.cardkey, m.contactkey, m.goodkey