Библиотека Интернет Индустрии I2R.ru |
|||
|
Методика быстрого сворачивания периода больших баз в системе 1С:Предприятие 7.7Данная методика проверена на тестовой базе, размер которой за месячный период составил 67 Мб. Эта часть той базы, о которой ведется речь в статье. Остатки переносились на середину месяца. К сожалению проверить на большой базе пока не удалось поскольку ранее переданная статья содержала ошибки, и поэтому первая попытка оказалась неудачной. Будем пробовать еще раз. Теперь осталось выяснить только то сколько времени займет данный процесс. З.Ы. При проверке не пользовался обработкой clear.ert - все делал ручками.
Так что смотрите внимательно! Сворачивание периода известно в 1С:Кругах под разными названиями какой из них вам ближе решайте сами. Мне известны следующие:
И так далее. Смысл термина в следующем. В течение длительного периода работы информационная база (любая, будь-то бухгалтерия, торговля или смешанная - з/п и компоненту расчет не рассматриваем) имеет тенденцию увеличиваться в размере по вполне понятным причинам. Думаю их вам объяснять не надо. Заметим только, что скорость роста для разных баз различается и зависит от объема документов вносимых в базу в единицу времени (например, за день), а также от количества и размера аналитических таблиц (так назовем регистры, бухгалтерские итоги вместе с планом счетов). Чем меньше единица учета (в количественном выражении) и чем больше обороты фирмы, тем больше количество вносимых документов, чем сложнее отчеты получаемые в системе, чем больше их количество, тем больше размер аналитических таблиц. При проектировании информационной системы ее подразделяют на две составляющие: транзакционную и аналитическую. Первый тип систем предназначен для ввода большого объема информации в реальном режиме времени, второй тип предназначен для проведения анализа данных полученных в транзакционных системах. Какая же связь такого разделения с темой статьи? Самая непосредственная - процедура свертки периода, является частью процесса по переводу данных из транзакционной системы в аналитическую. Дело в том, что обычно в транзакционных системах объем информации хранится за небольшой текущий период (например, месяц - все зависит от интенсивности ввода). Чем больше размер информационной базы, тем менее комфортной становится работа в такой системе - замедляется ввод документов, формирование отчетов также замедляется. В случае с 1С особенно это заметно в DBF формате, меньше в SQL, но все равно и здесь имеется некоторое замедление. Рост базы также приводит к ее более частому "падению", опять же это больше характерно для DBF формата. Поэтому периодически данные из транзакционной системы необходимо передавать в аналитическую систему, удаляя при этом лишние данные. Сегодня у всех на слуху технологии OLAP - как раз-то они и предназначены для создания таких (аналитических) систем. В том числе данные технологии активно применяются в связке с 1С. Но статья не об этом. Итак, после того как данные будут переданы в аналитическую систему, нам необходимо удалить их из нашей транзакционной системы. Что ж, неплохо было бы если фирма 1С предоставила такой инструмент в составе своей системы. Но! Как всегда НО. Имеющиеся средства не подходят для обработки больших баз. Подчеркиваю БОЛЬШИХ. Большой я считаю базу размером не менее 500 Мб (вместе с индексами), даже ближе (и больше) к 1 Гб. Но именно для таких баз обычно необходима процедура свертки периода. Почему же не подходят стандартные средства? Уточнюсь, что под ними я понимаю обработку wrap.ert, которая позволяет произвести "свертку" бухгалтерских итогов (для оперативного учета, таковой нет). Итак:
Возможно это не все причины, но перечисленные выше - основные. Таким образом необходимо избавиться от недостатков, которые несет за собой применение стандартных методов. Хочу добавить, что все это не теория (то есть пп. 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) Делаем пометку на удаление документов.
2) Удаляем проводки и операции
3) Если в вашей конфигурации есть периодические реквизиты, которые изменяются документами (с помощью метода УстановитьРеквизитСправочника), то можно (точнее нужно) удалить значения этих реквизитов: delete from 1sconst where objid <> ' 0 ' and date <= А and iddoc <> ' ' 4) Удаляем ссылки между подчиненными и документами и значения граф отбора. Эти данные находятся в таблице 1SCRDOC. В графе CHILDID находятся ссылки на документы, который после их удаления будут недействительными. Поэтому нужно выполнить такой запрос:
4. Пакуем таблицы, в которых удаляли записи. Здесь тоже быстрее будет воспользоваться не-1С методами. Данный метод можно использовать только для формата DBF:
5. Переносим проводки и операции сделанные датой Б + 1 на дату Х
6. Все. Теперь у нас практически рабочая база. Можно опять взяться за стандартные методы. Нужно восстановить индексы - просто запускаем 1С-ку монопольно. 7. Итоги можно пока не пересчитывать. Запускаем поиск удаленных объектов. Если вы удалили документы сразу как было описано в п. 3, то этот пункт можно пропустить. 8. Пересчитываем итоги. Хорошо бы пересчет итогов по колонкам был бы в разделе "Пересчет служебных данных", но уж что имеем :(. Все! База готова. Остается сверить получившуюся базу с ее копией (надеюсь ее-то вы не забыли сделать - мало ли что ;). 9. Упс. Забыл ради чего мы это все затевали. Если посмотреть на размер базы, то он уменьшился не на столько на сколько хотелось бы (скорее всего). Почему? Правильно! В DBF формате записи не удаляются непосредственно, а помечаются на удаление. У нас остались лишние данные в таблице 1SJOURN и в таблицах документов (файлы проводок и операций мы упаковали сами). Что же нужно сделать? Правильно запустить упаковку данных. Впрочем данный пункт не стоит делать отдельно - просто объедините его с п. 8, поставив галочку "Упаковка таблиц информационной базы", когда будете пересчитывать итоги в режиме конфигуратора. Вот теперь точно все! Уффф. На заметку. Даты в DBF формате записываются в виде {d 'YYYY-MM-DD'} Используемое в статье собственное и доработанное ПО:
|
|
2000-2008 г. Все авторские права соблюдены. |
|