Утилита закрытия периода и очистки базы данных
Установка
- Утилита не требует отдельной установки и состоит из одного выполняемого файла gsDBSqueeze.exe, который следует расположить рядом с файлом gedemin.exe.
- Если утилита используется автономно, то для подключения к базе данных понадобится клиентская часть сервера Firebird или комплект файлов встроенного сервера.
- Для работы утилиты требуется новейшая версия библиотеки gudf.dll (скачать 32-х или 64-х разрядную версию).
Последовательность действий
Ниже описаны шаги, требующие выбора.
шаг: 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):
Диск:[\Каталог][\Файл]
- где Диск — буква диска, Каталог — имя каталога на диске, Файл — имя файла в каталоге или на диске.
шаг: Squeeze Settings
- 1. Укажите дату, до которой Вы хотите удалить документы (дату закрытия периода).
- 2. Снимать галочку с Сохранить бухгалтерское и складское сальдо, вычисленное программой НЕ рекомендуется.
- 3. Если Вы хотите ограничить множество документов, которые будут обрабатываться программой (если удовлетворят условию удаления - будут удалены), то выберете их типы, нажав на кнопку Выбрать типы документов.
- В появившемся окне осуществите выбор необходимых типов путем двойного клика по записи в таблице.
- Нажмите Принять для завершения выбора.
- Выберете необходимый тип ограничения: исключение либо обработка документов только с выбранными типами.
Параметры данной страницы Squeeze Settings можно сохранить в файл конфигурации или загрузить из уже существующего файла.
шаг: 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. Вычисление складского сальдо в разрезе: inv_card.companykey, inv_movement.contactkey, inv_movement.cardkey:
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. Перепривязка карточек, необходимых для этого складского сальдо, на наш документ, который будет хранить сальдо:
UPDATE inv_card c SET c.firstdocumentkey = :SaldoDocKey, c.documentkey = :SaldoDocKey WHERE EXISTS( SELECT * FROM DBS_TMP_INV_SALDO s --< вычисленное выше складское сальдо WHERE s.cardkey = c.id)
- 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 и таблиц, составляющих с ним единое целое, записей.
- Условие удаления: отсутствие идентификатора записи в созданном нами множестве.
- 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