gifts2017

Принципы выполнения Выгрузки / Загрузки данных при обрезании базы данных удаленного магазина

Опубликовал Константин (Fisherru) в раздел Обработки - Свертка базы

Тема данная была поднята в http://infostart.ru/projects/4207/
Там был пример формирования "правильного" BAT-файла (и сам он), который самостоятельно последовательно выполнит ряд действий приводящих к обрезанию БД удалённого магазина и кусок кода для 1С, чтобы она правильно и в нужной последовательности отрабатывала свои запуски в пакетном режиме из BAT-файла.
По просьбе трудящихся, там же выложены болванки (*.ert) выгрузки/загрузки данных.
Здесь же описывается то, как производятся эти действия.

Изначально данная тема была поднята в http://infostart.ru/projects/4207/. Рекомендую начать оттуда, так как здесь только продолжение темы. Кроме того, там все исходники.

Краткое описание предыдущих серий:

1С 7.7 DBF, самописная конфигурация. Удалённый магазин (>100 шт). 1-2 кассы. 300 - 800 документов продажи в день. При достижении 500 Мб начинаются тормоза.

Надо обрезать БД. При этом:

  1. Оставить в БД документы за 1-2 последних месяца.
  2. Слить много мелких продаж за Один день в Один документ, кроме последних 1-2 дней - их оставляем как есть.
  3. Максимально почистить периодику, оставив Входные цены также за 1-2 последних месяца для отчетов, а Розничную цену на ТА.
  4. Выгрузить остаки на начало оставляемого периода.
  5. Выгрузить нумерацию не выгружаемых (не проведенных), но уже использованных документов, чтобы она не сбилась после чистки.
  6. Корректно загрузить всё это.

Вот как-то так.....

Порядок выгрузки:

  1. Выгрузим номер следующего за текущим перемещения в магазине.

    Для чего? Заявки магазинов в центр делаются как не проведённые перемещения, если выгружаем только проведённые документы (в последней версии выгружаем все), то после обрезания эти не проведенные магазинские перемещения теряются и номер нового (после обрезания) перемещения слетает в 000001, а такой документ в центре уже есть, поэтому и сохраняем следующий номер. При загрузки делаем пустое перемещение с этим номером и пометкой на удаление, чтоб восстановить нумерацию

  2. Выгружаем Остатки товаров из регистра на вечер ДатаНачалаБазы-1

  3. Выгружаем Цены - поскольку грохаем 1SCONST.DBF.

    Так как цены, особенно входные, которые рассчитываются у нас по среднему, меняются очень часто, изначально была написана обработка "ЧисткаПериодики", но отказались от неё, так как на конкретном магазине занимает 12-20 мин - долго!

    Поэтому - просто выгружаем цены. Причём, чтобы в магазине можно было делать отчёты по прибыли за оставленный период – Входную цену выгружаем с историей с ДатаНачалаБазы-1 по ТА (за весь оставляемый период). А розничную цену только на ТА, так как в заднем числе продажи не делаются.

  4. Выгружаем Константы - поскольку грохаем 1SCONST.DBF, а ручками их потом лениво ставить.

    При загрузке констант, если константа – это Дата – были проблемки с идентификацией века, поскольку мы отказались от выгрузки таких констант, а ставим их принудительно в модуле загрузки – то есть, забили на это. Вы проверьте у себя.

  5. Выгружаем документы.

    Зачем ? Обрезать "под ноль" - нельзя, так как в магазины периодически повторно перевыгружаются скорректированные документы закупа, корректирующие остатки. Поэтому оставляем в магазине все документы за 1-2 месяца. Остальное прибиваем.

    Нюансы:
    • При формировании DBF-ок для выгрузки документов, чтобы не размножать количество полей в DBF для различных реквизитов различных документов, время от времени используем ОДНО поле для хранения различных реквизитов различных документов.
    • Документы выгружаются в двух вариантах:
      1. отдельные накладные ПРОДАЖ объединяются в ОДИН большой документ за ОДИН день (для максимального уменьшения размеров БД) – это за период с ДатыНачалаБазы (новой) по ТА-1. Все остальные документы выгружаются по отдельности - ВыгрузкаСводныхДокументов
      2. С ТА-1 по ТА, то есть последние 1 или 2 дня ВСЕ документы выгружаем по отдельности. Сделано для того, чтобы, если последняя ночная выгрузка документов в офис «потерялась» по дороге, чтоб можно было перевыгрузить. – ВыгрузкаДокументовПоОтдельности

  6. Формируем «ОтчетОстаткиТоваровСуммой» по входным ценам на ТА, чтобы в дальнейшем сверить с тем, что получилось после обрезания.

При загрузке всё повторяется в том же порядке.

Есть нюансы:

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

Замечание.

Мы объединяем отдельные накладные ПРОДАЖ в ОДИН большой документ за ОДИН день, для уменьшения объёма базы. В офисе они всегда так и хранятся. А в магазине делаем при обрезании, чтоб максимально уменьшить объем базы. Потому что при хранении кучи мелких документов база данных в РАЗЫ быстрее пухнет, чем при хранении одного большого.

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа