На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » Бизнес-софт » 1С:Предприятие

Методика быстрого сворачивания периода больших баз в системе 1С:Предприятие 7.7

Klerk.Ru

Данная методика проверена на тестовой базе, размер которой за месячный период составил 67 Мб. Эта часть той базы, о которой ведется речь в статье. Остатки переносились на середину месяца. К сожалению проверить на большой базе пока не удалось поскольку ранее переданная статья содержала ошибки, и поэтому первая попытка оказалась неудачной. Будем пробовать еще раз. Теперь осталось выяснить только то сколько времени займет данный процесс.

З.Ы. При проверке не пользовался обработкой clear.ert - все делал ручками. Так что смотрите внимательно!

Сворачивание периода известно в 1С:Кругах под разными названиями какой из них вам ближе решайте сами. Мне известны следующие:

1. Перенос остатков
2. "Урезание" базы
3. Закрытие периода

И так далее. Смысл термина в следующем. В течение длительного периода работы информационная база (любая, будь-то бухгалтерия, торговля или смешанная - з/п и компоненту расчет не рассматриваем) имеет тенденцию увеличиваться в размере по вполне понятным причинам. Думаю их вам объяснять не надо. Заметим только, что скорость роста для разных баз различается и зависит от объема документов вносимых в базу в единицу времени (например, за день), а также от количества и размера аналитических таблиц (так назовем регистры, бухгалтерские итоги вместе с планом счетов). Чем меньше единица учета (в количественном выражении) и чем больше обороты фирмы, тем больше количество вносимых документов, чем сложнее отчеты получаемые в системе, чем больше их количество, тем больше размер аналитических таблиц.

При проектировании информационной системы ее подразделяют на две составляющие: транзакционную и аналитическую. Первый тип систем предназначен для ввода большого объема информации в реальном режиме времени, второй тип предназначен для проведения анализа данных полученных в транзакционных системах. Какая же связь такого разделения с темой статьи? Самая непосредственная - процедура свертки периода, является частью процесса по переводу данных из транзакционной системы в аналитическую. Дело в том, что обычно в транзакционных системах объем информации хранится за небольшой текущий период (например, месяц - все зависит от интенсивности ввода). Чем больше размер информационной базы, тем менее комфортной становится работа в такой системе - замедляется ввод документов, формирование отчетов также замедляется. В случае с 1С особенно это заметно в DBF формате, меньше в SQL, но все равно и здесь имеется некоторое замедление. Рост базы также приводит к ее более частому "падению", опять же это больше характерно для DBF формата. Поэтому периодически данные из транзакционной системы необходимо передавать в аналитическую систему, удаляя при этом лишние данные. Сегодня у всех на слуху технологии OLAP - как раз-то они и предназначены для создания таких (аналитических) систем. В том числе данные технологии активно применяются в связке с 1С. Но статья не об этом.

Итак, после того как данные будут переданы в аналитическую систему, нам необходимо удалить их из нашей транзакционной системы. Что ж, неплохо было бы если фирма 1С предоставила такой инструмент в составе своей системы. Но! Как всегда НО. Имеющиеся средства не подходят для обработки больших баз. Подчеркиваю БОЛЬШИХ. Большой я считаю базу размером не менее 500 Мб (вместе с индексами), даже ближе (и больше) к 1 Гб. Но именно для таких баз обычно необходима процедура свертки периода. Почему же не подходят стандартные средства? Уточнюсь, что под ними я понимаю обработку wrap.ert, которая позволяет произвести "свертку" бухгалтерских итогов (для оперативного учета, таковой нет). Итак:

1. Если перенос остатков осуществляется не на последнюю рабочую дату (то есть дата, после, которой нет проводок), то при переносе остатков задним числом производится пересчет остатков.

2. Отмена проведения / пометка на удаление документов также приводит к пересчету остатков.

3. Удаление документов по одному, с внесением изменений в индексы очень медленно. Даже применение транзакций спасает слабо.

Возможно это не все причины, но перечисленные выше - основные. Таким образом необходимо избавиться от недостатков, которые несет за собой применение стандартных методов. Хочу добавить, что все это не теория (то есть пп. 1-3) - у наших клиентов имеется база размер, которой уже близок к 2 Гб, попытки использования стандартных методов не увенчались успехом (не дождались завершения обработки, попытка запуска ее на домашнем компьютере привела к его зависанию). Пришлось искать обходные методы в результате чего и появилась данная методика.

Итак задача.

Входные данные:

База формата DBF. Дата (А), на которую необходимо перенести бухгалтерские остатки, а также удалить все лишние документы до данной даты. Конец текущего расчетного периода (Б).

Необходимое ПО:

1С:Предприятие 7.7, доработанная обработка переноса остатков 1C wrap.ert, любое приложение для выполнение SQL запросов для DBF баз (MS Query, DB Explorer из поставки Delphi). В качестве приложения для выполнения SQL запросов можно использовать ВК ToySQL (или Rainbow, ODBCSQL или технологию ADO), просто подключаясь к обрабатываемой базе из другой базы (см. ссылку на обработку в конце статьи).

Решение

0. Делаем копию базы.

1. Переносим остатки. Обычным образом создаем ручные операции, но дату операции устанавливаем не А, а Б + 1, при этом пометку на удалению документов не производим. Таким образом мы избавляемся от ненужного пересчета. На дату Б + 1 не должно быть ни документов, ни операций. Здесь в принципе можно использовать любую дату из будущего периода. Точнее чтобы не было пересчета, то дата должна находится за пределами текущего расчетного периода.

2. Удаляем все индексные файлы, а также файлы бухгалтерских итогов: 1SACCSEL.DBF, 1SBKTTL.DBF, 1SBKTTLC.DBF, 1SSBSEL.DBF. Начиная с данного этапа прекращаем пользоваться стандартными методами

3. Выполняем следующие запросы:

1) Делаем пометку на удаление документов.

Update 1sjourn set ismark='*', closed=4 where date <= А

Если можно удалить все (!) документы сразу (то есть в будущем периоде нет ссылок на документы из прошлого), что бывает очень редко, то можно удалять сразу

Delete from 1sjorun where date <= А

При этом сначала нужно удалить записи из связанных таблиц документов (dh*, dt*)

Delete from dh* d from 1sjourn j where d.iddoc = j.iddoc and j.date <= А

Так для каждой таблицы документа и его табличной части. Для SQL Server можно написать скрипт перебирающий таблицы документов и выполняющий данный запрос для каждой из них.

2) Удаляем проводки и операции

delete from 1sentry where date <= А
delete from 1soper where date <= А

3) Если в вашей конфигурации есть периодические реквизиты, которые изменяются документами (с помощью метода УстановитьРеквизитСправочника), то можно (точнее нужно) удалить значения этих реквизитов:

delete from 1sconst where objid <> '    0   ' and date <= А and iddoc <> '        '

Вообще полезно удалить периодические реквизиты независимо от того записываются они из документов или нет. Это можно сделать так:

delete from 1sconst where objid <> '    0   ' and date <= А

4) Удаляем ссылки между подчиненными и документами и значения граф отбора. Эти данные находятся в таблице 1SCRDOC. В графе CHILDID находятся ссылки на документы, который после их удаления будут недействительными. Поэтому нужно выполнить такой запрос:

delete from 1scrdoc where childdate <= А

Данная операция может быть выполнена вместе с пересчетом итогов (галочка "Пересчет служебных данных"), но опять же "ручной" способ будет быстрее поскольку никаких пересчетов делать не надо

4. Пакуем таблицы, в которых удаляли записи. Здесь тоже быстрее будет воспользоваться не-1С методами. Данный метод можно использовать только для формата DBF:

pack 1soper
pack 1sentry
pack 1sconst
pack 1scrdoc

Если вы удаляли записи из таблиц документов, то данный оператор нужно вызвать для всех этих таблиц и для таблицы 1SJOURN (п. 9 тогда можно пропустить).

5. Переносим проводки и операции сделанные датой Б + 1 на дату Х

Update 1sentry set date = А where date = Б + 1
Update 1sentry set date = А where date = Б + 1
Update 1sjourn set date = А where date = Б + 1

Здесь важно чтобы на дату Б + 1 не было документов кроме созданных ручных операций. Иначе эти документы также перенесутся на дату Х.

6. Все. Теперь у нас практически рабочая база. Можно опять взяться за стандартные методы. Нужно восстановить индексы - просто запускаем 1С-ку монопольно.

7. Итоги можно пока не пересчитывать. Запускаем поиск удаленных объектов. Если вы удалили документы сразу как было описано в п. 3, то этот пункт можно пропустить.

8. Пересчитываем итоги. Хорошо бы пересчет итогов по колонкам был бы в разделе "Пересчет служебных данных", но уж что имеем :(. Все! База готова. Остается сверить получившуюся базу с ее копией (надеюсь ее-то вы не забыли сделать - мало ли что ;).

9. Упс. Забыл ради чего мы это все затевали. Если посмотреть на размер базы, то он уменьшился не на столько на сколько хотелось бы (скорее всего). Почему? Правильно! В DBF формате записи не удаляются непосредственно, а помечаются на удаление. У нас остались лишние данные в таблице 1SJOURN и в таблицах документов (файлы проводок и операций мы упаковали сами). Что же нужно сделать? Правильно запустить упаковку данных. Впрочем данный пункт не стоит делать отдельно - просто объедините его с п. 8, поставив галочку "Упаковка таблиц информационной базы", когда будете пересчитывать итоги в режиме конфигуратора. Вот теперь точно все! Уффф.

На заметку.

Даты в DBF формате записываются в виде {d 'YYYY-MM-DD'}

Используемое в статье собственное и доработанное ПО:

1. Модифицированная обработка wrap.ert, позволяющая переносить остатки на другую дату, не удаляя документы. В обработке предусмотрен вызов функции для установки дополнительных реквизитов операции как документа (УстановитьФирму).

2. Обработка по удалению документов, проводок из базы с помощью компоненты ToySQL

3. Компонента ToySQL

Шемякин Павел
Klerk.Ru

Подпишитесь на рассылку
Все о WEBСтроительстве
Подписка на Subscribe.Ru
Дискуссионная рассылка
для веб-мастеров

Подписка на MailList.Ru
Подписка на Content.Mail.Ru

Другие разделы
ASP
1С:Предприятие
Финансовые программы
Управление предприятием
CRM системы
Новое в разделе
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100