Как правильно выполнить свертку нетиповой базы «1С:Управление торговлей» и что делать с незакрытыми заказами?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Свертка информационной базы — это сложный процесс, который требует не только технических навыков, но и глубокого понимания бизнес-логики предприятия. Когда речь заходит о нетиповой конфигурации «1С:Управление торговлей» (УТ), стандартные механизмы могут давать сбои. Проанализируем, как подготовить план свертки, решить проблему «зависших» заказов и минимизировать риск потери данных.

Определяем цели и выбираем стратегию свертки

Прежде чем приступать к коду, выясним причину свертки. Обычно это замедление работы файловой базы или требование законодательства (например, переход на «Виртуальный склад»). Рассмотрим два основных подхода:

  1. Типовая свертка: Использование стандартной обработки «Свертка информационной базы». Она формирует документы ввода остатков и КорректировкаЗаписейРегистров (КЗР), после чего удаляет старые документы.
  2. Перенос в чистую базу: Создание новой пустой базы того же релиза, перенос справочников и ввод остатков вручную или с помощью обработки ВыгрузкаЗагрузкаДанныхXML.epf. Этот метод предпочтительнее для сильно измененных конфигураций, так как позволяет избавиться от накопленного «мусора» в системных таблицах.

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

Что делать с заказами, которые висят месяцами?

Основная проблема заказов при свертке заключается в том, что они делают движения по регистрам накопления, таким как ТоварыВРезервеНаСкладах, ЗаказыПокупателей и РазмещениеЗаказовПокупателей. Если просто удалить документ заказа, у которого есть остаток по регистру, возникнет «битый» остаток, который нельзя будет списать стандартными средствами.

Разберем алгоритм обработки заказов по шагам:

  1. Инвентаризация заказов: Совместно с менеджерами определим дату отсечки. Все заказы старше этой даты, по которым нет отгрузок, должны быть закрыты.
  2. Закрытие заказов: Воспользуемся обработкой «Закрытие заказов покупателей» (или аналогичной в вашей версии УТ). Она создаст документы, которые обнулят остатки в регистрах резервов.
  3. Анализ остатков: Проверим регистры. Если по заказу есть остаток в регистре ЗаказыПокупателей, значит, перед нами либо недопоставка, либо недоплата. Свертка должна перенести этот остаток в документ ввода остатков, сохранив ссылку на заказ как на объект аналитики.

Рассмотрим пример кода, который поможет нам быстро проанализировать, какие заказы имеют незакрытые остатки перед началом процедуры:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ЗаказыПокупателейОстатки.ЗаказПокупателя КАК Заказ,
    |	ЗаказыПокупателейОстатки.СуммаВзаиморасчетовОстаток КАК СуммаОстаток
    |ИЗ
    |	РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаСвертки, ) КАК ЗаказыПокупателейОстатки
    |ГДЕ
    |	ЗаказыПокупателейОстатки.СуммаВзаиморасчетовОстаток <> 0";

Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
    Сообщить("Заказ " + Результат.Заказ + " имеет остаток: " + Результат.СуммаОстаток);
КонецЦикла;

Решение проблемы ссылочной целостности и «документов-заглушек»

При свертке типовая обработка создает документы ВводОстатков. Часто эти документы требуют указания «Документа расчетов». Если свертка удалит старые документы, в новых записях появятся ссылки «Объект не найден». Это критично для партионного учета и взаиморасчетов.

Выясним, как этого избежать. Рассмотрим методику «технической заглушки»:

Вместо того чтобы оставлять ссылки на тысячи старых документов, создадим один документ КорректировкаДолга или СписаниеБезналичныхДенежныхСредств датой, предшествующей свертке. Назовем его «Технический документ для свертки». При формировании документов ввода остатков программно заменим все ссылки на этот объект.

Проанализируем пример функции для замены ссылок в табличной части документа ввода остатков:


Процедура ЗаменитьСсылкиНаЗаглушку(ДокументОбъект, ТехЗаглушка)
    Для Каждого СтрокаТЧ Из ДокументОбъект.Взаиморасчеты Цикл
        Если СтрокаТЧ.ДокументРасчетов.Дата < '20230101' Тогда // Дата свертки
            СтрокаТЧ.ДокументРасчетов = ТехЗаглушка;
        КонецЕсли;
    КонецЦикла;
    ДокументОбъект.Записать();
КонецПроцедуры

Подготовка нетиповых регистров

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

  1. Составить список всех нетиповых регистров (обычно они имеют уникальный префикс).
  2. Для регистров сведений со срезом последних: убедиться, что актуальные записи перенесены.
  3. Для регистров накопления: написать небольшую обработку, которая создает документ КорректировкаЗаписейРегистров, куда записываются входящие остатки на дату свертки.

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

Пошаговый план проведения свертки

Разберем последовательность действий, которую рекомендуется соблюдать для успешного результата:

  1. Создание полной копии базы: Никогда не проводите свертку на «живой» базе. Все тесты — только на копии.
  2. Тестирование и исправление (ТиИ): Перед сверткой запустите проверку логической и ссылочной целостности через конфигуратор.
  3. Закрытие периодов и заказов: Оформите все недостающие оприходования излишков и списания недостач. Закройте все старые заказы.
  4. Запуск обработки свертки: Настройте правила (какие регистры сворачивать, какие объекты удалять).
  5. Проверка остатков: Сравните отчеты «Оборотно-сальдовая ведомость», «Ведомость по товарам на складах» и «Ведомость по взаиморасчетам» в базе-источнике и свернутой базе. Суммы и количества должны совпадать до копейки/единицы.
  6. Удаление объектов: После того как остатки выверены, запустите удаление помеченных объектов.
  7. Сжатие базы: Для файловой базы обязательно выполните выгрузку в .dt и загрузку обратно, чтобы физически уменьшить размер файла.

Заключение и рекомендации

Рассмотрим финальный совет: если ваша цель — ускорение работы, помните, что свертка в 1С 8.3 часто дает лишь кратковременный эффект. Если база работает в файловом режиме и в ней одновременно находятся более 10 пользователей, проанализируем возможность перехода на клиент-серверный вариант (SQL). Это решит проблемы с блокировками и производительностью надежнее, чем ежегодная обрезка данных.

Однако, если свертка неизбежна (например, для очистки базы перед обновлением на актуальный релиз с «Виртуальным складом»), используйте метод переноса остатков в чистую базу. Это позволит вам получить «здоровую» конфигурацию без старых ошибок в метаданных и лишних доработок прошлых лет.

← На главную