Как разорвать устойчивую связь между документами в 1С:Управление торговлей 10.3 после свертки базы

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

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

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

Анализируем проблему: почему объект не удаляется?

Рассмотрим типичную ситуацию. Проведена свертка базы, все документы до определенной даты помечены на удаление. При попытке окончательного удаления система выдает список ссылок. Например, документ РеализацияТоваровУслуг не удаляется, так как на него ссылается ПриходныйКассовыйОрдер (ПКО).

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

Поиск скрытого реквизита «ДокументОснование»

В конфигурации «Управление торговлей 10.3» (и других решениях на обычных формах) многие документы имеют реквизит шапки ДокументОснование. Особенность этого реквизита заключается в том, что разработчики часто не выводят его на форму документа. Он заполняется автоматически при создании документа на основании другого объекта (например, когда ПКО создается кнопкой «На основании» из реализации).

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

Чтобы убедиться в наличии ссылки в этом реквизите, мы можем воспользоваться консолью запросов или программным кодом:


// Пример кода для проверки значения скрытого реквизита
ДокументОбъект = СсылкаНаПКО.ПолучитьОбъект();
Сообщить("Документ основание: " + ДокументОбъект.ДокументОснование);

Способы очистки скрытых ссылок

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

Способ 1: Использование универсальной обработки «Поиск и замена значений»

Это самый безопасный и наглядный метод для администратора. Рассмотрим алгоритм действий:

  1. Запускаем обработку «Поиск и замена значений» (обычно она входит в состав дистрибутива «1С:Предприятие» в папке \1c\Conversion или доступна на ИТС).
  2. В поле «Что заменять» выбираем нашу старую реализацию, которую нужно удалить.
  3. В поле «На что заменять» оставляем пустое значение (или выбираем актуальный документ ввода остатков, если нужно сохранить преемственность).
  4. Нажимаем «Найти ссылки». Программа покажет все места, где упоминается этот документ, включая скрытые реквизиты и движения регистров.
  5. Нажимаем «Выполнить замену». Система очистит ссылку даже в тех полях, которые не видны на форме.

Способ 2: Программная очистка реквизита

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ПриходныйКассовыйОрдер.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
    |ГДЕ
    |	ПриходныйКассовыйОрдер.ДокументОснование = &СтараяРеализация";

Запрос.УстановитьПараметр("СтараяРеализация", ОбъектДляУдаления);
Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл
    ОбъектПКО = Результат.Ссылка.ПолучитьОбъект();
    ОбъектПКО.ДокументОснование = Неопределено; // Или соответствующее пустое значение типа
    ОбъектПКО.Записать(РежимЗаписиДокумента.Запись); 
    // Используем просто запись, чтобы не пересчитывать движения, если ПКО уже был скорректирован
КонецЦикла;

Связи в регистрах накопления и сведений

Важно помнить, что в УТ 10.3 документ может быть «привязан» не только через реквизиты, но и через записи в регистрах. Проанализируем основные регистры, где может «застрять» ссылка:

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

Крайние меры: Непосредственное удаление

Иногда специалисты предлагают использовать метод Объект.Удалить() для непосредственного удаления документа без проверки ссылочной целостности. Рассмотрим риски этого подхода. Прямое удаление приведет к появлению «битых ссылок» (надписей вида <Объект не найден> (84:9f...)) во всех связанных объектах. Это может нарушить работу отчетов по взаиморасчетам и привести к ошибкам при выполнении регламентных операций.

Поэтому мы рекомендуем всегда сначала находить и корректно очищать ссылки через НайтиСсылки() или стандартный механизм удаления помеченных, и только в исключительных случаях, на копии базы, прибегать к прямому удалению с последующим Тестированием и Исправлением (ТиИ) для очистки ссылок «в никуда».

Резюме

Подводя итоги, если после свертки базы в УТ 10.3 вы не можете удалить документ из-за связи с другим объектом, выполните следующие действия:

  1. Проверьте не только табличные части, но и скрытые реквизиты (такие как ДокументОснование) с помощью консоли запросов.
  2. Убедитесь, что ссылка не зафиксирована в движениях регистров документа-источника.
  3. Используйте специализированные обработки поиска ссылок для массовой очистки данных.
  4. После очистки ссылок обязательно запустите стандартную процедуру «Удаление помеченных объектов».

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

← На главную