Рано или поздно перед каждым администратором и архитектором систем на базе 1С:ERP Управление предприятием встает вопрос оптимизации производительности и уменьшения объема базы данных. Ежедневный ввод сотен документов, накопление исторических данных за несколько лет, расширение номенклатуры — все это приводит к раздуванию таблиц СУБД, падению скорости проведения документов и формированию отчетов в разы дольше обычного.
Естественным желанием руководства и ИТ-отдела становится проведение свертки базы данных. Например, завершить текущий финансовый год, отрезать всю историю прошлых лет и начать вести учет «с чистого листа» в новой, легкой и быстрой базе, перенеся туда только актуальные остатки. Однако на практике классическая свертка для системы класса ERP превращается в сложнейший технологический квест. В этой статье мы подробно разберем, почему стандартная свертка «на месте» часто не работает, какие подводные камни вас ожидают и как правильно реализовать перенос остатков.
Начиная с версии 1С:ERP 2.4.6, фирма «1С» добавила в конфигурацию встроенный помощник «Свертка информационной базы» (его можно найти в разделе НСИ и администрирование — Сервис). Этот инструмент предназначен для автоматического создания документов ввода остатков и удаления неиспользуемых документов за прошлые периоды.
Казалось бы, решение есть прямо «из коробки». Но почему практикующие специалисты называют запуск этого механизма на реальных базах «кошмаром»? Дело в том, что данный помощник является универсальным техническим средством. Он не способен учесть особенности кастомизации вашей конкретной системы, а также сложные взаимосвязи в учете. Если ваша база содержит доработки (измененные регистры, новые реквизиты, кастомные бизнес-процессы) или если в ведении учета за прошлые периоды были допущены методологические ошибки, стандартная свертка гарантированно завершится аварийно или исказит данные.
Давайте проанализируем основные архитектурные сложности 1С:ERP, которые делают классическую свертку чрезвычайно рискованной процедурой:
Опыт крупных внедрений доказывает: вместо того чтобы пытаться «сворачивать» и чистить рабочую базу на месте, гораздо эффективнее и безопаснее выполнить перенос остатков в новую, чистую информационную базу. Этот подход исключает накопление системного «мусора», битых ссылок и позволяет войти в новый период с чистой базой метаданных.
Рассмотрим по шагам, как правильно организовать этот процесс:
Перед тем как выгружать остатки, необходимо навести идеальный порядок в старой базе. Сделайте копию рабочей базы и выполните на ней следующие действия:
Создайте абсолютно чистую базу той же версии конфигурации. Перенесите в нее только нормативно-справочную информацию (НСИ) — справочники контрагентов, номенклатуры, договоров, физических лиц и т.д. Для этого рекомендуется использовать стандартный универсальный формат обмена EnterpriseData или специализированные правила переноса. На этом этапе очень полезно провести аудит справочников: избавиться от дублей и пометить на удаление то, что давно не используется.
В новой базе остатки должны быть зафиксированы с помощью документов семейства ВводНачальныхОстатков. Напишем пример алгоритма на встроенном языке 1С, который разработчик может использовать для анализа или автоматизации сверки остатков товаров на складах перед их переносом. Проанализируем данный программный код:
// Пример запроса для проверки остатков товаров на складах перед переносом
Процедура ПроверитьОстаткиТоваровНаСкладах(ДатаСвертки) Export
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Характеристика КАК Характеристика,
| ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ПериодСвертки, ) КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.ВНаличииОстаток < 0";
Запрос.УстановитьПараметр("ПериодСвертки", Новый Граница(ДатаСвертки, ВидГраницы.Включая));
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаписьЖурналаРегистрации("СверткаБазы.ОтрицательныеОстатки",
УровеньЖурналаРегистрации.Предупреждение,
,
,
"Обнаружен отрицательный остаток: Номенклатура " + Выборка.Номенклатура + ", Склад: " + Выборка.Склад + " в количестве: " + Выборка.Количество);
КонецЦикла;
Иначе
Сообщить("Отрицательных остатков по складу не обнаружено. База готова к выгрузке.");
EndIf;
КонецПроцедуры
Для непосредственного переноса остатков по всем разделам учета (взаиморасчеты, денежные средства, основные средства, товары) лучше использовать готовые протестированные обработки от профильных разработчиков или официальные правила переноса данных. Это сэкономит сотни часов ручной работы.
После проведения документов ВводНачальныхОстатков в новой базе необходимо выполнить тотальную выверку. Сравните отчеты в старой и новой базах на дату свертки:
Старую рабочую базу ни в коем случае нельзя удалять. Переведите ее в режим «Только для чтения» (Read-only) для всех пользователей, кроме администратора. Она будет служить вам надежным архивом для сдачи корректирующих деклараций, предоставления документов по требованиям налоговых органов и детального анализа прошлых периодов.
Подводя итог, можно сказать: «свертка» 1С:ERP — это проект внедрения в миниатюре. Подходите к этой задаче системно, избегайте поспешных решений с типовой сверткой «в лоб» на живой базе, всегда делайте резервные копии и отдавайте предпочтение методу переноса остатков в новую чистую базу.