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