В практике администрирования и сопровождения систем на платформе 1С:Предприятие 7.7 часто возникает задача разделения учета. Если в одной информационной базе велось несколько юридических лиц, а теперь требуется передать базу сторонней организации или просто «облегчить» её, оставив данные только по одной фирме, нам необходимо выполнить комплекс технических мероприятий. Процесс этот не ограничивается простым удалением записей и требует понимания структуры хранения данных 7.7.
Рассмотрим подробнее основные методы решения этой задачи, проанализируем программные способы удаления и разберем технологическую последовательность действий для сохранения целостности базы данных.
Самый очевидный способ — написать небольшую обработку, которая переберет все документы в базе и удалит те, которые не относятся к нужной нам организации. Разберем код, который часто предлагают на технических форумах, и выясним его особенности.
Посмотрим на пример кода для пометки объектов на удаление:
Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Фирма = ВыбФирма Тогда
// Эту организацию мы оставляем, пропускаем итерацию
Продолжить;
КонецЕсли;
// Помечаем документ на удаление (мягкое удаление)
Док.Удалить(0);
КонецЦикла;
Проанализируем этот алгоритм. Использование метода Удалить(0) является наиболее безопасным. В этом случае документ не исчезает физически сразу, а лишь помечается на удаление. Это позволяет нам в дальнейшем воспользоваться стандартным механизмом «Удаление помеченных объектов». Рассмотрим, почему это важно: стандартная процедура проверяет ссылки на этот документ в других объектах. Если, например, на основании удаляемого документа выписан другой документ, который относится к «нужной» фирме, система не даст совершить ошибку.
Существует и более радикальный вариант с использованием Удалить(1), который подразумевает непосредственное физическое удаление объекта из базы данных:
Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Фирма <> ОставляемаяФирма Тогда
Док.Удалить(1); // Прямое удаление без проверок
КонецЕсли;
КонецЦикла;
Важно: Мы крайне не рекомендуем использовать прямое удаление Удалить(1) в рабочих базах без предварительного создания резервной копии. В 1С 7.7 прямое удаление документа программным кодом может оставить «сиротские» записи в таблицах проводок и регистрах, что приведет к фатальным ошибкам при последующем пересчете итогов. Кроме того, в базе останутся битые ссылки вида <Объект не найден>.
Если документов в базе очень много (за несколько лет учета), процедура простого удаления может затянуться на десятки часов. В такой ситуации эффективнее применить метод свертки. Разберем этот процесс по шагам:
Wrap.ert. Она позволяет свернуть базу, удалив старые документы и создав вместо них входящие остатки.Этот метод хорош тем, что он не просто удаляет записи, а пересчитывает конечное сальдо, что гарантирует правильность данных в «новой» базе.
Удаление одних лишь документов недостаточно для полной очистки базы. Выясним причину: данные об организациях хранятся в иерархических связях справочников. Чтобы база стала действительно «чистой», необходимо проанализировать следующие объекты:
1. Справочники «Банковские счета», «Склады», «Подразделения». Многие из этих элементов имеют реквизит Владелец или Фирма. После удаления документов необходимо запустить поиск ссылок на ненужную организацию и каскадно пометить на удаление связанные элементы этих справочников.
2. Бухгалтерские операции и проводки. В конфигурации «Бухгалтерский учет 7.7» организация часто выступает в роли разделителя учета. Если вы удаляете данные программно, обязательно проверьте, не остались ли «пустые» операции без документов. Проанализируем ситуацию: если документ удален физически, а операция осталась (такое случалось при сбоях в 7.7), итоги по счетам будут неверными.
3. Константы и настройки пользователей. Не забудьте изменить значения в меню «Сервис» — «Настройки пользователя» или в константах (например, ОсновнаяФирма). Если там останется ссылка на удаленный объект, программа будет выдавать ошибки при создании новых документов.
После того как мы программно или вручную удалили лишние данные, база физически не уменьшится в размере, а индексы могут стать неактуальными. Поэтому выполним следующие действия в режиме Конфигуратор:
Резюме: Процесс удаления организации из 1С 7.7 требует осторожности. Оптимальный путь — программная пометка на удаление документов через Удалить(0) с последующим использованием стандартного монопольного удаления объектов и обязательным тестированием базы в Конфигураторе.