Изначально данная тема была поднята в //infostart.ru/projects/4207/. Рекомендую начать оттуда, так как здесь только продолжение темы. Кроме того, там все исходники.
Краткое описание предыдущих серий:
1С 7.7 DBF, самописная конфигурация. Удалённый магазин (>100 шт). 1-2 кассы. 300 - 800 документов продажи в день. При достижении 500 Мб начинаются тормоза.
Надо обрезать БД. При этом:
- Оставить в БД документы за 1-2 последних месяца.
- Слить много мелких продаж за Один день в Один документ, кроме последних 1-2 дней - их оставляем как есть.
- Максимально почистить периодику, оставив Входные цены также за 1-2 последних месяца для отчетов, а Розничную цену на ТА.
- Выгрузить остаки на начало оставляемого периода.
- Выгрузить нумерацию не выгружаемых (не проведенных), но уже использованных документов, чтобы она не сбилась после чистки.
- Корректно загрузить всё это.
Вот как-то так.....
Порядок выгрузки:
- Выгрузим номер следующего за текущим перемещения в магазине.
Для чего? Заявки магазинов в центр делаются как не проведённые перемещения, если выгружаем только проведённые документы (в последней версии выгружаем все), то после обрезания эти не проведенные магазинские перемещения теряются и номер нового (после обрезания) перемещения слетает в 000001, а такой документ в центре уже есть, поэтому и сохраняем следующий номер. При загрузки делаем пустое перемещение с этим номером и пометкой на удаление, чтоб восстановить нумерацию - Выгружаем Остатки товаров из регистра на вечер ДатаНачалаБазы-1
- Выгружаем Цены - поскольку грохаем 1SCONST.DBF.
Так как цены, особенно входные, которые рассчитываются у нас по среднему, меняются очень часто, изначально была написана обработка "ЧисткаПериодики", но отказались от неё, так как на конкретном магазине занимает 12-20 мин - долго!
Поэтому - просто выгружаем цены. Причём, чтобы в магазине можно было делать отчёты по прибыли за оставленный период – Входную цену выгружаем с историей с ДатаНачалаБазы-1 по ТА (за весь оставляемый период). А розничную цену только на ТА, так как в заднем числе продажи не делаются. - Выгружаем Константы - поскольку грохаем 1SCONST.DBF, а ручками их потом лениво ставить.
При загрузке констант, если константа – это Дата – были проблемки с идентификацией века, поскольку мы отказались от выгрузки таких констант, а ставим их принудительно в модуле загрузки – то есть, забили на это. Вы проверьте у себя. - Выгружаем документы.
Зачем ? Обрезать "под ноль" - нельзя, так как в магазины периодически повторно перевыгружаются скорректированные документы закупа, корректирующие остатки. Поэтому оставляем в магазине все документы за 1-2 месяца. Остальное прибиваем.
Нюансы: - При формировании DBF-ок для выгрузки документов, чтобы не размножать количество полей в DBF для различных реквизитов различных документов, время от времени используем ОДНО поле для хранения различных реквизитов различных документов.
- Документы выгружаются в двух вариантах:
- отдельные накладные ПРОДАЖ объединяются в ОДИН большой документ за ОДИН день (для максимального уменьшения размеров БД) – это за период с ДатыНачалаБазы (новой) по ТА-1. Все остальные документы выгружаются по отдельности - ВыгрузкаСводныхДокументов
- С ТА-1 по ТА, то есть последние 1 или 2 дня ВСЕ документы выгружаем по отдельности. Сделано для того, чтобы, если последняя ночная выгрузка документов в офис «потерялась» по дороге, чтоб можно было перевыгрузить. – ВыгрузкаДокументовПоОтдельности
- Формируем «ОтчетОстаткиТоваровСуммой» по входным ценам на ТА, чтобы в дальнейшем сверить с тем, что получилось после обрезания.
При загрузке всё повторяется в том же порядке.
Есть нюансы:
- Константы грузятся «ПриОткрытии», чтобы к началу загрузки документов уже был определен ТекущийМагазин и склад.
- При загрузке остатков используем документ «ВводОстатков» их дробим по 500 строк в одном документе. Поскольку, если строк в одном документе более 3000, то начинаются тормоза (а 500 цифра красивая :-))) ).
- Перед загрузкой документов снимаем всякие контроли (отрицательные остатки, заднее число, продажа ниже входа) установкой нужного значения в константах. По завершению, возвращаем всё на место.
- По завершению Загрузки, выставляем Константу ДатаНачалаБазы, чтобы если придёт скорректированный документ закупа, ранее этой даты, его не загружать, чтобы он не сбил начальные остатки.
- Выставляем Константу ДатаНачалаВыгрузок, чтобы магазин не смог случайно повторить выгрузку за тот период, где есть Сводные документы и не испортил данные в офисе.
Замечание.
Мы объединяем отдельные накладные ПРОДАЖ в ОДИН большой документ за ОДИН день, для уменьшения объёма базы. В офисе они всегда так и хранятся. А в магазине делаем при обрезании, чтоб максимально уменьшить объем базы. Потому что при хранении кучи мелких документов база данных в РАЗЫ быстрее пухнет, чем при хранении одного большого.