Как в базе 1С 7.7 оставить только одну организацию и корректно удалить лишние данные

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

В практике администрирования и сопровождения систем на платформе 1С:Предприятие 7.7 часто возникает задача разделения учета. Если в одной информационной базе велось несколько юридических лиц, а теперь требуется передать базу сторонней организации или просто «облегчить» её, оставив данные только по одной фирме, нам необходимо выполнить комплекс технических мероприятий. Процесс этот не ограничивается простым удалением записей и требует понимания структуры хранения данных 7.7.

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

Метод 1: Программное удаление документов через встроенный язык

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

Посмотрим на пример кода для пометки объектов на удаление:


Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент() = 1 Цикл
    Если Док.Фирма = ВыбФирма Тогда
        // Эту организацию мы оставляем, пропускаем итерацию
        Продолжить;
    КонецЕсли;
    
    // Помечаем документ на удаление (мягкое удаление)
    Док.Удалить(0); 
КонецЦикла;

Проанализируем этот алгоритм. Использование метода Удалить(0) является наиболее безопасным. В этом случае документ не исчезает физически сразу, а лишь помечается на удаление. Это позволяет нам в дальнейшем воспользоваться стандартным механизмом «Удаление помеченных объектов». Рассмотрим, почему это важно: стандартная процедура проверяет ссылки на этот документ в других объектах. Если, например, на основании удаляемого документа выписан другой документ, который относится к «нужной» фирме, система не даст совершить ошибку.

Существует и более радикальный вариант с использованием Удалить(1), который подразумевает непосредственное физическое удаление объекта из базы данных:


Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент() = 1 Цикл
    Если Док.Фирма <> ОставляемаяФирма Тогда
        Док.Удалить(1); // Прямое удаление без проверок
    КонецЕсли;
КонецЦикла;

Важно: Мы крайне не рекомендуем использовать прямое удаление Удалить(1) в рабочих базах без предварительного создания резервной копии. В 1С 7.7 прямое удаление документа программным кодом может оставить «сиротские» записи в таблицах проводок и регистрах, что приведет к фатальным ошибкам при последующем пересчете итогов. Кроме того, в базе останутся битые ссылки вида <Объект не найден>.

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

Если документов в базе очень много (за несколько лет учета), процедура простого удаления может затянуться на десятки часов. В такой ситуации эффективнее применить метод свертки. Разберем этот процесс по шагам:

  1. Выбор даты свертки: Определяем дату, на которую будут сформированы остатки (например, начало текущего года).
  2. Использование специализированной обработки: Для 1С 7.7 существует стандартная обработка Wrap.ert. Она позволяет свернуть базу, удалив старые документы и создав вместо них входящие остатки.
  3. Фильтрация по организации: В настройках свертки (или путем модификации обработки) указывается конкретная фирма. Система сформирует остатки только по ней, а документы по остальным организациям будут просто удалены в процессе очистки истории.

Этот метод хорош тем, что он не просто удаляет записи, а пересчитывает конечное сальдо, что гарантирует правильность данных в «новой» базе.

Технологические нюансы и работа со справочниками

Удаление одних лишь документов недостаточно для полной очистки базы. Выясним причину: данные об организациях хранятся в иерархических связях справочников. Чтобы база стала действительно «чистой», необходимо проанализировать следующие объекты:

1. Справочники «Банковские счета», «Склады», «Подразделения». Многие из этих элементов имеют реквизит Владелец или Фирма. После удаления документов необходимо запустить поиск ссылок на ненужную организацию и каскадно пометить на удаление связанные элементы этих справочников.

2. Бухгалтерские операции и проводки. В конфигурации «Бухгалтерский учет 7.7» организация часто выступает в роли разделителя учета. Если вы удаляете данные программно, обязательно проверьте, не остались ли «пустые» операции без документов. Проанализируем ситуацию: если документ удален физически, а операция осталась (такое случалось при сбоях в 7.7), итоги по счетам будут неверными.

3. Константы и настройки пользователей. Не забудьте изменить значения в меню «Сервис» — «Настройки пользователя» или в константах (например, ОсновнаяФирма). Если там останется ссылка на удаленный объект, программа будет выдавать ошибки при создании новых документов.

Обязательные завершающие действия в Конфигураторе

После того как мы программно или вручную удалили лишние данные, база физически не уменьшится в размере, а индексы могут стать неактуальными. Поэтому выполним следующие действия в режиме Конфигуратор:

  1. Тестирование и исправление ИБ: Обязательно выберите пункты «Проверка ссылочной целостности» и «Пересчет итогов». Это «вылечит» базу от битых ссылок и приведет остатки в соответствие с реальностью.
  2. Упаковка таблиц (для DBF-версии): Только после этой процедуры файлы базы данных реально уменьшатся на диске, так как 1С 7.7 окончательно вычистит помеченные на удаление записи из физических файлов таблиц.
  3. Выгрузка и загрузка данных: Это лучший способ полностью перестроить структуру таблиц и индексов, избавившись от лишнего «мусора».

Резюме: Процесс удаления организации из 1С 7.7 требует осторожности. Оптимальный путь — программная пометка на удаление документов через Удалить(0) с последующим использованием стандартного монопольного удаления объектов и обязательным тестированием базы в Конфигураторе.

← На главную