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

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

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

Почему стандартная очистка полей не всегда помогает?

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

Способ 1. Очистка реквизита «ДокументОснование» через групповую обработку

Многие документы в УТ 10.3 имеют стандартный реквизит ДокументОснование. Разработчики часто не выводят его на форму, так как он заполняется автоматически при вводе «на основании». Чтобы разорвать такую связь, выполним следующие действия:

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

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

Способ 2. Поиск скрытых связей в табличных частях

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

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

Способ 3. Очистка визуально пустых полей «Заказ» и «Сделка»

Проанализируем интересную особенность поведения интерфейса в УТ 10.3. Иногда в поле Заказ покупателя или Сделка визуально ничего не отображается, но ссылка в базе данных сохраняется (например, после некорректной свертки или программного изменения).

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

Способ 4. Программная развязка (для разработчиков)

Если визуальные методы и стандартные обработки не помогают, выясним причину через программный код. Часто контроль удаления не срабатывает из-за записей в регистрах, которые документ делает при проведении. В этом случае поможет принудительная очистка реквизита с отключением проверок.

Рассмотрим пример кода для обработки, которая «развязывает» документы:


// Выбираем документ, который держит ссылку
ОбъектДок = ВыбраннаяСсылкаНаРКО.ПолучитьОбъект();

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

// Если связь в табличной части "Выплата" или "ДокументыРасчетов"
Для Каждого СтрокаТЧ Из ОбъектДок.ДокументыРасчетовСКонтрагентом Цикл
    СтрокаТЧ.ДокументРасчетов = Неопределено;
КонецЦикла;

// Ключевой момент: отключаем проверки и бизнес-логику при записи
ОбъектДок.ОбменДанными.Загрузка = Истина;
ОбъектДок.Записать(РежимЗаписиДокумента.Запись);

Использование свойства ОбменДанными.Загрузка = Истина позволяет обойти проверки в модуле объекта, которые могут блокировать очистку реквизитов, считая их обязательными для заполнения.

Почему «Удаление помеченных объектов» видит связь, а дерево подчиненности — нет?

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

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

В такой ситуации мы рекомендуем воспользоваться стандартной обработкой «Поиск ссылок на объекты». Она покажет точное имя таблицы и поля, в котором затаилась ссылка. Зная имя поля (например, РКО.ТабличнаяЧасть1.Реквизит5), вы сможете целенаправленно очистить его через групповую обработку или короткий скрипт.

Резюме по решению проблемы

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

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

← На главную