Как исключить загрузку связанных документов при обмене данными и избежать появления «пустых» объектов

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При настройке обмена данными между конфигурациями 1С (особенно с использованием инструмента «Конвертация данных 2.0») специалисты часто сталкиваются с ситуацией, когда вместе с основным документом в базу-приемник «прилетают» десятки связанных объектов. Это могут быть основания, счета на оплату или дополнительные акты из прошлых периодов. Если не контролировать этот процесс, база-приемник быстро замусоривается ненужными данными, а в закрытых периодах появляются странные «пустышки». Для предварительного контроля состава выгружаемых объектов и выявления лишних связей можно использовать обработку для анализа файла выгрузки Конвертации данных 2.0.

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

Чем опасно «подтягивание» лишних документов?

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

  1. Создание «объектов-пустышек»: Если связанный документ не найден в приемнике, система создает новую запись, где заполнен только Уникальный Идентификатор (GUID). В журнале документов это выглядит как пустая строка без номера и даты, которая портит отчетность.
  2. Битые ссылки: Если загрузка связанного объекта запрещена, но ссылка в основном документе осталась, пользователь увидит надпись «Объект не найден...». Это затрудняет работу с базой и может приводить к ошибкам при проведении документа.

Способ 1. Использование флага «Только поиск» в ПКО

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

Как это работает: При загрузке основного документа система видит ссылку на связанный документ. Она обращается к ПКО этого документа, пытается найти его в базе-приемнике (например, по номеру и дате или GUID). Если документ найден — ссылка проставляется. Если не найден — поле в основном документе остается пустым, а новый «пустой» объект не создается.

Способ 2. Ограничение выгрузки через обработчик «Перед выгрузкой»

Если нам нужно более гибкое управление (например, не выгружать документы старше определенной даты), мы воспользуемся программными обработчиками. Разберем ситуацию: у нас есть Правило Конвертации Свойства (ПКС) для реквизита ДокументОснование.

Проанализируем пример кода, который можно разместить в обработчике Перед выгрузкой данного ПКС:


// Проверяем дату связанного документа
Если ТипЗнч(Значение) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
    Если Значение.Дата < '20230101000000' Тогда
        // Если документ старый, отменяем выгрузку этого конкретного свойства
        Отказ = Истина; 
    КонецЕсли;
КонецЕсли;

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

Способ 3. Глобальное решение через Алгоритмы

Когда в конфигурации сотни ПКО, прописывать условия в каждом из них неудобно и трудозатратно. Выясним, как оптимизировать этот процесс. В КД 2.0 существует раздел «Алгоритмы», где мы можем создать общую функцию проверки.

Создадим алгоритм с названием ПроверитьДатуОбъекта:


// Параметры: ОбъектДляПроверки
Если ОбъектДляПроверки.Дата < Параметры.ДатаНачалаВыгрузки Тогда
    Возврат Ложь;
КонецЕсли;
Возврат Истина;

Теперь в любом ПКО в обработчике Перед выгрузкой нам достаточно вызвать одну строку:


Если Не Алгоритмы.ПроверитьДатуОбъекта(Источник) Тогда
    Отказ = Истина;
КонецЕсли;

Это позволяет централизованно управлять логикой обмена. Если требования изменятся (например, дата переноса сдвинется), вам нужно будет поправить код только в одном месте.

Способ 4. Отключение полной выгрузки в настройках ПКС

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

Важный нюанс: Этот метод эффективен только в паре с настройкой «Только поиск» в соответствующем ПКО. В противном случае система все равно может попытаться создать пустой объект в приемнике.

Способ 5. Фильтрация на уровне Правил Регистрации (ПРО)

Самый профессиональный подход — не допускать попадания лишних объектов в файл обмена еще на этапе их регистрации. Если вы используете обмен через Планы обмена, настройте Правила Регистрации Объектов.

Рассмотрим логику: мы прописываем условие, по которому документы старше определенной даты просто не попадают в таблицу регистрации изменений. Если объект не зарегистрирован к обмену, он не будет выгружен даже «по ссылке» из другого документа, при условии, что в правилах конвертации (ПКО) корректно настроены связи.

Резюме и рекомендации

Подводя итоги, отметим, что просто «удалять» связанные документы при загрузке — плохая практика, так как это нарушает логику работы типовых механизмов 1С (например, может перестать работать структура подчиненности или неверно рассчитаться налоги при перепроведении).

Рекомендуемый алгоритм действий:

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

Такой комплексный подход позволит сохранить базу-приемник в чистоте и обеспечит корректную работу системы без лишнего «мусора» из прошлых периодов.

← На главную