Почему документ отображается в структуре подчиненности, если связь удалена, и как ее убрать?

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

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

Как формируется дерево подчиненности в платформе 1С

Выясним причину такого поведения системы. Структура подчиненности строится не по фактическим движениям в регистрах накопления и бухгалтерии, а на основе специального объекта метаданных конфигурации — Критерий отбора (чаще всего с именами СвязанныеДокументы или СтруктураПодчиненности).

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

Где скрывается невидимая ссылка

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

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

Способ 1. Вывод скрытого реквизита на форму документа

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

  1. Откроем проблемный документ оплаты (например, приходный кассовый ордер).
  2. Перейдем в главное меню формы: пункт «Действия» (или нажмем правой кнопкой мыши по свободному месту формы) и выберем команду «Настройка панели» или «Изменить форму» / «Настройка формы».
  3. Найдем в списке доступных реквизитов флаг напротив поля ДокументОснование и установим его.
  4. Нажмем «ОК» — теперь скрытое поле отображается на экране.
  5. Очистим значение поля, нажав на кнопку с крестиком (очистить), после чего запишем и проведем документ.

После очистки реквизита откроем структуру подчиненности повторно: связь между документами полностью пропадет.

Способ 2. Очистка через обработку «Групповое изменение реквизитов»

Если реквизит заблокирован для вывода на форму или требуется исправить множество документов сразу, воспользуемся стандартной сервисной обработкой «Групповое изменение реквизитов» (в обычных формах — «Универсальный подбор и обработка объектов»):

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

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

Посмотрим на пример кода, если требуется программно очистить реквизит ДокументОснование у найденного документа:


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

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


ДокументОбъект = СсылкаНаПлатеж.ПолучитьОбъект();
ДокументОбъект.ДокументОснование = Неопределено;
Попытка
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    Сообщить("Ошибка при проведении документа: " + ОписаниеОшибки());
КонецПопытки;

Как найти, какой именно реквизит держит связь

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

Влияние на взаиморасчеты и регистры

Важно помнить: сам по себе реквизит ДокументОснование в типовых конфигурациях чаще всего играет вспомогательную роль — он служит для заполнения формы при вводе на основании и для построения дерева подчиненности. Реальные движения по взаиморасчетам формируются по строкам табличной части РасшифровкаПлатежа и регистру «Расчеты с контрагентами по документам расчетов».

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

← На главную