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