Как выгружать только проведенные документы в Конвертации данных и исправить ошибку «Метод объекта не обнаружен»?

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

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

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

Разбор контекстных переменных: Источник и Объект

Одной из главных причин ошибок при написании условий в правилах конвертации объектов (ПКО) является путаница между переменными Источник и Объект. Важно понимать их назначение и область видимости:

  1. Обработчики ПКО на стороне базы-источника (например, ПередВыгрузкой): в этих процедурах выгружаемый документ доступен через переменную Источник. Попытка обратиться к переменной Объект приводит к ошибке, так как на этапе чтения исходных данных базы-приемника еще не существует.
  2. Обработчики ПКО на стороне базы-приемника (например, ПослеЗагрузки): здесь созданный или найденный элемент уже доступен через переменную Объект.
  3. Обработчики Правил выгрузки данных (ПВД): при стандартной выборке текущий элемент коллекции в событии ПередВыгрузкой передается в переменную Объект.

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


Если НЕ Источник.Проведен Тогда
    Отказ = Истина;
КонецЕсли;

Способы фильтрации непроведенных документов

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

Способ 1. Отбор на уровне Правила выгрузки данных (ПВД) через интерфейс

Этот способ является наиболее производительным и предпочтительным, так как отбор документов накладывается на уровне запроса к СУБД. В этом случае непроведенные документы даже не считываются из базы данных, что экономит оперативную память и ускоряет выгрузку.

  1. Откроем нужное Правило выгрузки данных (ПВД) для документа.
  2. Убедимся, что способ выборки установлен как Стандартная выборка.
  3. Перейдем на вкладку Отбор и добавим условие: Проведен Равно Истина.

Способ 2. Программный отбор в ПВД с помощью произвольного алгоритма

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Реализация.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.РеализацияТоваровУслуг КАК Реализация
    |ГДЕ
    |	Реализация.Проведен = ИСТИНА
    |	И Реализация.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

ВыборкаДанных = Запрос.Выполнить().Выгрузить();

Обратите внимание: если в ПВД выбран режим Произвольный алгоритм, заполнение переменной ВыборкаДанных или явный вызов метода ВыгрузитьПоПравилу() обязательны. Если оставить режим произвольного алгоритма пустым, выгрузка по данному правилу производиться не будет.

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

Если требуется фильтровать документы индивидуально в правиле конвертации, используем флаг Отказ в событии ПередВыгрузкой:


Если НЕ Источник.Проведен Тогда
    Отказ = Истина;
КонецЕсли;

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

Причины ошибки «Метод объекта не обнаружен (ПКО_ПередВыгрузкой_...)»

Проанализируем ситуацию, когда добавление кода в обработчик вызывает ошибку вызова метода. Это происходит по нескольким причинам:

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

Рекомендованный порядок действий для устранения сбоя

  1. Проверим корректность написания кода в ПКО: свойство Проведен проверяется у переменной Источник.
  2. Удалим лишние дублирующие строки в Правилах выгрузки данных и убедимся, что для стандартной выборки не включен пустой произвольный алгоритм.
  3. Сохраним правила обмена в XML-файл заново.
  4. Возьмем актуальную внешнюю обработку УниверсальныйОбменДаннымиXML.epf из каталога поставки конфигурации «Конвертация данных» и выполним выгрузку с ее помощью.
← На главную