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