Как уменьшить размер огромной таблицы бухгалтерских итогов _1cbkttl в 1С 7.7 на SQL Server?

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет
← На главную

При работе с информационными базами 1С:Предприятие 7.7, особенно теми, что эксплуатируются "с начала времен" на SQL Server, мы часто сталкиваемся с проблемой избыточного роста размера таблицы бухгалтерских итогов _1cbkttl. Эта таблица является критически важной для формирования отчетов, поскольку в ней хранятся предварительно рассчитанные остатки и обороты по синтетическим счетам и объектам аналитики. Чрезмерный размер _1cbkttl может привести к замедлению работы системы, увеличению времени формирования отчетов и общим трудностям в обслуживании базы данных. Давайте подробно рассмотрим причины возникновения этой проблемы и эффективные методы ее решения.

Прежде чем приступить к любым изменениям, мы должны обязательно сделать полную резервную копию информационной базы. Это правило является золотым стандартом для любых операций с базой данных, особенно для таких критически важных таблиц, как _1cbkttl. Все действия по оптимизации мы будем рассматривать как выполняемые на копии базы для тестирования, и только после успешной проверки переносить их на рабочую базу.

Причины большого размера таблицы _1cbkttl

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

  1. Накопление нулевых записей: С течением времени в таблице _1cbkttl скапливаются записи с нулевыми значениями оборотов и остатков. Эти записи часто являются результатом сторнирования, корректировок или закрытия счетов, когда движение по счету было, но итоговое сальдо или оборот по конкретной аналитике за период стал равен нулю. Такие записи не влияют на итоговые суммы, но значительно увеличивают физический размер таблицы. В некоторых случаях количество итогов может в разы превышать количество проводок, что приводит к быстрому росту таблицы.
  2. Длительная история учета: Базы данных, работающие десятилетиями, естественно накапливают огромный объем исторических данных. Каждый месяц, каждый квартал и каждый год добавляет новые итоги, даже если активность по некоторым счетам или аналитикам прекратилась.
  3. Настройки периодичности сохранения итогов: Если в конфигурации 1С 7.7 периодичность сохранения итогов для регистров установлена слишком часто (например, ежедневно для регистров с большим количеством движений), это может способствовать быстрому росту таблицы итогов.

Теперь, когда мы понимаем причины, давайте разберем методы, которые помогут нам уменьшить размер этой таблицы и оптимизировать работу системы.

Метод 1: Удаление нулевых записей в таблице _1cbkttl

Одним из наиболее эффективных и относительно безопасных способов уменьшения размера таблицы _1cbkttl является удаление записей, где все поля остатков и оборотов равны нулю. Такие записи являются "мусором" и не несут полезной информации для формирования отчетов, но занимают место.

Порядок действий:

  1. Создайте копию базы: Как мы уже говорили, это критически важно. Все эксперименты проводите на копии.
  2. Идентифицируйте ключевые поля: В таблице _1cbkttl хранятся поля, отвечающие за остатки и обороты. Это такие поля как OBDT1 (оборот дебет 1), OBKT1 (оборот кредит 1), OBDT2 (оборот дебет 2), OBKT2 (оборот кредит 2), OBDT3 (оборот дебет 3), OBKT3 (оборот кредит 3) и SD (сальдо). Нам необходимо найти записи, где все эти поля равны нулю.
  3. Выполните SQL-запрос на удаление: Для удаления нулевых записей вы можете использовать прямой SQL-запрос. Примерно такой запрос поможет нам:
    
    DELETE FROM _1cbkttl
    WHERE OBDT1 = 0 AND OBKT1 = 0
      AND OBDT2 = 0 AND OBKT2 = 0
      AND OBDT3 = 0 AND OBKT3 = 0
      AND SD = 0;
    

    Обратите внимание: данный запрос удалит записи, в которых все указанные поля имеют нулевые значения. В зависимости от структуры вашей базы и используемых субконто, вам может понадобиться корректировка списка полей. Перед выполнением DELETE, мы настоятельно рекомендуем сначала выполнить SELECT COUNT(*) с теми же условиями WHERE, чтобы оценить количество записей, которые будут удалены.

    
    SELECT COUNT(*) FROM _1cbkttl
    WHERE OBDT1 = 0 AND OBKT1 = 0
      AND OBDT2 = 0 AND OBKT2 = 0
      AND OBDT3 = 0 AND OBKT3 = 0
      AND SD = 0;
    
  4. Пересчитайте итоги (опционально): После удаления большого объема данных может быть полезно выполнить пересчет бухгалтерских итогов средствами 1С. Это поможет упорядочить данные и убедиться в их корректности. Однако, для SQL-баз на старых релизах платформы 1С 7.7 типовой пересчет итогов может работать некорректно, в таких случаях иногда используют внешние компоненты или скрипты.
  5. Сверьтесь с результатами: После выполнения удаления и, возможно, пересчета итогов, мы должны тщательно проверить корректность остатков и оборотов по ключевым счетам за все периоды. Используйте типовые отчеты 1С, такие как Оборотно-сальдовая ведомость, Анализ счета, Карточка счета. Убедитесь, что все суммы сходятся с вашей резервной копией до операции.
  6. Примените к рабочей базе: Если результаты проверки вас полностью устраивают, мы можем повторить эти действия на рабочей базе (после ее резервного копирования).

Метод 2: Свертка информационной базы

Свертка информационной базы — это штатная, но очень мощная операция в 1С 7.7, предназначенная для уменьшения объема данных путем удаления старых документов и движений, а также сохранения итоговых остатков на определенную дату. Это радикальный шаг, который позволяет значительно сократить объем базы.

Порядок действий:

  1. Создайте резервную копию: Опять же, это обязательно, так как процесс свертки необратим.
  2. Определите дату свертки: Мы должны выбрать дату, до которой все документы и движения будут удалены. Итоговые данные (остатки и обороты) на эту дату будут сохранены в регистрах. Выбор даты зависит от ваших потребностей в исторической аналитике. Например, мы можем свернуть базу до начала текущего или предыдущего финансового года.
  3. Выполните свертку через конфигуратор:
    • Запустите 1С:Предприятие 7.7 в монопольном режиме (обычно это делает администратор).
    • Откройте конфигуратор.
    • Перейдите в меню "Операции" -> "Свертка информационной базы".
    • Следуйте указаниям мастера свертки, указывая выбранную дату.
  4. Нестандартная свертка: Для очень больших баз или в случаях, когда типовая свертка работает некорректно (например, из-за значительных доработок конфигурации), мы можем применить нестандартную свертку. Это включает использование прямых SQL-запросов для удаления данных по определенным условиям. Такой подход требует глубоких знаний структуры базы 1С 7.7 и SQL Server. Он позволяет выборочно работать с наиболее нагруженными разделами учета и, в некоторых случаях, может не требовать полной остановки работы всей базы, если удаление происходит поэтапно.
  5. Свертка без потери аналитики: Часто возникает ситуация, когда нам нужна возможность анализа старых периодов, которые были свернуты. Для этого мы можем:
    • Создать отдельную архивную базу-копию до даты свертки и хранить ее для получения исторических данных.
    • Разрабатывать отчеты, которые могут формироваться через подключение к нескольким базам (актуальной и архивным) и выдавать консолидированные данные.
  6. Проверьте результаты: После свертки обязательно проверьте корректность остатков и оборотов на дату свертки и после нее, используя все доступные отчеты.

Метод 3: Архивирование старых периодов и создание новой рабочей базы

Этот подход похож на свертку, но может быть более гибким, если нам нужно полностью изолировать старые данные, но иметь к ним доступ. Мы сохраняем "историческую" базу для справки и создаем новую, "свежую" базу для текущей работы.

Порядок действий:

  1. Сделайте полную копию текущей базы: Эта копия станет вашей архивной базой. Мы назовем ее "База_Архив_До_2023_года", например.
  2. "Обрежьте" рабочую базу: В текущей рабочей базе (после ее резервного копирования) мы можем удалить все данные до определенной даты, оставив только актуальный период. Это можно сделать как с помощью штатной свертки (если она подходит), так и с помощью прямых SQL-запросов, удаляющих документы и движения за старые периоды. Этот процесс по сути превращает текущую базу в "свежую", обрезанную до последнего года или другого выбранного периода.
  3. Настройте доступ к архивной базе: Если вам нужна аналитика по старым периодам, вы можете настроить 1С таким образом, чтобы при необходимости можно было подключиться к архивной базе для получения исторических данных. Это может быть сделано путем создания ярлыков для запуска разных баз или разработки специальных обработок, которые "ходят" в архивную базу.
  4. Живите спокойно: Рабочая база станет значительно меньше, быстрее и удобнее в обслуживании. Архивную базу мы будем использовать только по мере необходимости.

Метод 4: Сжатие базы данных средствами SQL Server (Shrink)

После удаления большого объема данных из таблицы _1cbkttl (или других таблиц в результате свертки), физический размер файла базы данных на SQL Server может не уменьшиться автоматически. Это происходит потому, что SQL Server резервирует освободившееся место для будущих операций, чтобы обеспечить высокую производительность. Для фактического уменьшения размера файла мы можем выполнить операцию "Shrink" (сжатие) через SQL Server Management Studio.

Порядок действий:

  1. Убедитесь, что основные операции по удалению данных завершены: Выполните свертку или удаление нулевых записей.
  2. Запустите SQL Server Management Studio: Подключитесь к вашему экземпляру SQL Server.
  3. Сделайте резервную копию базы данных: Это дополнительная мера предосторожности перед сжатием.
  4. Выполните операцию сжатия:
    • В обозревателе объектов (Object Explorer) разверните "Базы данных" (Databases).
    • Щелкните правой кнопкой мыши по вашей базе 1С.
    • Выберите "Задачи" (Tasks) -> "Сжать" (Shrink) -> "База данных" (Database).
    • В открывшемся окне "Сжатие базы данных" (Shrink Database) вы можете выбрать опцию "Реорганизовать файлы перед освобождением неиспользуемого места" (Reorganize files before releasing unused space) и указать целевой процент свободного места.
    • Нажмите "ОК".

Важное примечание: Частое сжатие базы данных может привести к фрагментации индексов, что, в свою очередь, негативно скажется на производительности. Поэтому операцию "Shrink" рекомендуется выполнять только после удаления значительного объема данных и не использовать ее как рутинную задачу.

Метод 5: Настройка периодичности сохранения итогов

В 1С 7.7 мы можем настроить периодичность сохранения итогов для регистров (ежедневно, еженедельно, ежемесячно, ежеквартально, ежегодно). Если этот параметр установлен слишком часто для регистров с большим количеством движений, это может способствовать быстрому росту таблицы итогов.

Порядок действий:

  1. Запустите конфигуратор: В монопольном режиме.
  2. Откройте конфигурацию: Перейдите в "Конфигурация" -> "Открыть конфигурацию".
  3. Найдите регистры: Разверните ветку "Регистры".
  4. Проверьте свойства регистров: Для каждого бухгалтерского регистра (например, "Бухгалтерский") откройте свойства (правая кнопка мыши -> "Свойства").
  5. Оцените периодичность: Найдите параметр "Периодичность итогов". Если он установлен в "День" для регистров с очень активным движением, мы можем рассмотреть возможность его изменения на "Месяц" или "Квартал", если это не противоречит вашим потребностям в оперативной отчетности.

Внимание: Изменение периодичности итогов может повлиять на скорость формирования некоторых отчетов, которым требуются итоги за более короткие периоды. Мы должны тщательно оценить эти последствия перед изменением настройки.

Оптимизация SQL Server и переход на новые платформы

Производительность 1С 7.7 на SQL Server во многом зависит от правильной настройки самого SQL Server. Это включает в себя настройку оборудования, операционной системы, распределение серверных ролей, а также оптимизацию запросов и индексов. Системный администратор или DBA может выполнить следующие действия:

  1. Обновление статистики и реиндексация: Регулярное обновление статистики и перестроение/реорганизация индексов для таблицы _1cbkttl и других ключевых таблиц 1С могут значительно улучшить производительность запросов.
  2. Настройка параметров SQL Server: Оптимизация таких параметров, как объем памяти, использование tempdb, расположение файлов базы данных на быстрых дисках.

Хотя это радикальный шаг, переход на более новые версии 1С (например, 1С:Предприятие 8) предлагает значительно более эффективные механизмы работы с данными, лучшую поддержку оптимизации и более высокую производительность при больших объемах информации. Однако это требует значительных затрат на внедрение и переобучение пользователей.

Заключение

Уменьшение размера таблицы _1cbkttl в 1С 7.7 на SQL Server — это комплексная задача, требующая внимательного подхода и обязательного тестирования. Мы рассмотрели несколько методов: от удаления нулевых записей и свертки информационной базы до архивирования старых периодов и тонкой настройки SQL Server. Каждый из этих методов имеет свои преимущества и потенциальные риски. Выбирая подход, мы должны учитывать конкретные потребности вашего бизнеса в исторической аналитике, доступные ресурсы и квалификацию специалистов. Всегда помните о важности резервного копирования и тщательной проверке результатов на копии базы данных перед применением изменений к рабочей системе.

← На главную