Почему не загружаются все данные и не срабатывают обработчики при обмене через «Конвертацию данных 2.0»?

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

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

Мы столкнулись с проблемой, когда при попытке перенести данные, например, из конфигурации «Комплексная автоматизация 1.1» в «Комплексную автоматизацию 2.5» или «Управление торговлей 11.5», выгрузка документов, таких как «ПоступлениеТоваровУслуг», проходит без замечаний. Однако при загрузке в базу-приемник вместо ожидаемого количества объектов всегда загружается фиксированное число, например, 36 объектов, и никаких ошибок при этом не выводится. Попытки использовать оператор Сообщить() в обработчиках типа «ПередЗагрузкой» или «ПослеЗагрузки» показывают, что при выгрузке они срабатывают, а при загрузке в эти обработчики выполнение кода просто не доходит. Это означает, что процесс загрузки прерывается на более раннем этапе или обходит эти объекты по каким-то причинам.

Первичная диагностика проблемы

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

  1. Проверяем файл выгрузки: Убедимся, что выгружаемые документы действительно присутствуют в сформированном XML-файле обмена. Если мы выгружаем два документа, и они присутствуют в файле, это подтверждает, что проблема именно на этапе загрузки, а не выгрузки.
  2. Анализируем фиксированное число загружаемых объектов: Если всегда загружается одно и то же, относительно небольшое число объектов (например, 36), это часто указывает на то, что успешно загружаются только служебные или базовые объекты: предопределенные элементы, базовые классификаторы, пользователи, настройки или другие системные данные. Это происходит потому, что загрузка прерывается, когда очередь доходит до первого «проблемного» объекта, который не может быть загружен, а служебные объекты к тому моменту уже успели загрузиться.
  3. Проверяем активность обработчиков: Мы уже выяснили, что обработчики в документах, где прописано Сообщить(), не срабатывают при загрузке. Это критически важный симптом, указывающий на то, что процесс загрузки либо не доходит до конкретных объектов, либо прерывается на более высоком, глобальном уровне.
  4. Проверяем дату запрета изменения данных: Это одна из самых распространенных и часто упускаемых причин. В базе-приемнике может быть установлена дата запрета изменения данных. Если даты загружаемых документов раньше этой даты, система не позволит их создать или изменить. Это происходит без выдачи явных ошибок в процессе обмена, что затрудняет диагностику.

Шаги по глубокой диагностике и отладке в «Конвертации данных 2.0»

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

Включение режима отладки правил загрузки

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

  1. Сформируйте модуль отладки в конфигурации «Конвертация данных»:

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

  2. Создайте новую внешнюю обработку в базе-приемнике:

    Откройте конфигуратор базы-приемника (например, УТ 11.5). Создайте новую внешнюю обработку, например, «ОтладкаЗагрузкиКД2». Сохраните ее на диске.

  3. Вставьте код модуля отладки в созданную внешнюю обработку:

    Откройте модуль объекта созданной внешней обработки. Скопируйте весь текст из сформированного на первом шаге файла модуля отладки и вставьте его в модуль объекта вашей внешней обработки. Этот код будет имитировать логику загрузки данных в базу-приемник.

  4. Установите точки останова в нужных обработчиках:

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

  5. Подключите внешнюю обработку в режиме «1С:Предприятие»:

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

  6. Запустите процесс загрузки данных:

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

Выявление потенциальных причин проблемы на основе отладки

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

1. Глобальные обработчики событий и условие «Отказ = Истина»

Как мы уже упоминали, очень часто процесс загрузки прерывается на уровне общих, глобальных обработчиков, таких как ПередЗагрузкойДанных или ПослеЗагрузкиДанных. Эти обработчики вызываются до или после обработки всех данных и могут содержать логику, которая блокирует дальнейшую загрузку.

Анализ ситуации:

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

  1. Проверяем обработчик ПередЗагрузкойДанных:

    В режиме отладки, когда вы дошли до точки останова в глобальном обработчике ПередЗагрузкойДанных, внимательно изучите его код. Ищите любые условия, которые могут привести к присвоению Отказ = Истина. Это может быть проверка на пользователя, на определенные параметры обмена, на версию данных или на другие условия, которые не выполняются в вашей текущей ситуации.

    
    // Пример кода в ПередЗагрузкойДанных, который может вызвать Отказ
    Если ПараметрыОбмена.Получить("ИмяПользователя") <> "Администратор" Тогда
        Сообщить("Загрузка данных разрешена только Администратору!");
        Отказ = Истина;
    КонецЕсли;
    
    Если ДатаОбмена < ДатаНачалаЗапретаЗагрузки Тогда
        Сообщить("Загрузка данных за прошлые периоды запрещена!");
        Отказ = Истина;
    КонецЕсли;
    
  2. Изучаем стандартные механизмы:

    Некоторые конфигурации имеют встроенные проверки или ограничения, реализованные в глобальных обработчиках. Например, проверка на полноту заполнения определенных полей, соответствие каким-либо правилам бизнес-логики или даже наличие определенных ролей у текущего пользователя. Пошаговая отладка поможет вам пройти через все эти проверки и понять, какая из них возвращает Отказ = Истина.

2. Дата запрета изменения данных

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

Анализ ситуации:

Если в базе-приемнике установлена дата запрета изменения данных, и даты загружаемых документов (или других объектов) оказываются раньше этой даты, система просто не позволит их создать или изменить. Важный нюанс заключается в том, что в процессе обмена данными это часто происходит без выдачи явных сообщений об ошибке, что сбивает с толку, поскольку кажется, что обмен прошел без проблем.

  1. Проверьте дату запрета в базе-приемнике:

    В базе-приемнике (например, в «Управлении торговлей 11.5» или «Комплексной автоматизации 2.5») перейдите в раздел «Администрирование» -> «Поддержка и обслуживание» -> «Даты запрета изменения данных». Внимательно проверьте все установленные даты запрета для различных разделов учета или организаций. Убедитесь, что даты загружаемых вами документов не попадают под эти ограничения.

  2. Временно отключите или измените дату запрета:

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

3. Режим совместимости конфигурации-приемника

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

Анализ ситуации:

В частности, проблемы могут возникать, если в базе-приемнике включен режим совместимости с предыдущими версиями Библиотеки стандартных подсистем (БСП), особенно при переходе между сильно отличающимися версиями БСП (например, с БСП 2.0 на более новую). Это может вызывать неожиданное поведение стандартных механизмов платформы, в том числе и при выполнении обработчиков обмена.

  1. Проверьте режим совместимости:

    В конфигураторе базы-приемника перейдите в свойства конфигурации (правой кнопкой мыши по корню конфигурации -> «Свойства»). Проверьте значение свойства «Режим совместимости». Если оно установлено на более раннюю версию (например, «Версия 8.3.10» для текущей платформы 8.3.18), это может быть одной из причин.

  2. Рассмотрите возможность отключения/изменения режима совместимости:

    Если вы уверены, что текущая конфигурация не требует старого режима совместимости, попробуйте временно установить его на «Не использовать» или на более актуальную версию платформы (предварительно обязательно сделав полную резервную копию базы данных). После этого повторите загрузку данных.

4. Способ загрузки данных

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

Анализ ситуации:

Например, глобальный обработчик ПослеЗагрузкиДанных может не срабатывать или срабатывать некорректно при прямой COM-загрузке в базу-приемник, но при этом прекрасно отрабатывать при загрузке из XML-файла через стандартную обработку «Универсальный обмен данными в формате XML».

  1. Попробуйте загрузку из XML-файла:

    Если вы используете прямое COM-подключение или другой нефайловый метод загрузки, попробуйте изменить подход. Сначала выгрузите данные из базы-источника в XML-файл. Затем используйте обработку «Универсальный обмен данными в формате XML» в базе-приемнике для загрузки этого файла. Сравните результаты. Если проблема исчезнет, это может указывать на особенности взаимодействия COM-объектов или других механизмов.

5. Несоответствие метаданных и порядок правил выгрузки

При обмене данными между конфигурациями, даже если они кажутся очень похожими (например, КА 2.5 и УТ 11.5, которые построены на одной БСП), могут существовать незначительные различия в метаданных.

Анализ ситуации:

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

Также критически важно убедиться, что в правилах выгрузки и загрузки соблюдается корректный порядок конвертации объектов. Сначала должны выгружаться и загружаться независимые справочники (такие как «Валюты», «ЕдиницыИзмерения», «ФизическиеЛица»), затем справочники, которые на них ссылаются, и только потом документы. Нарушение этого порядка может привести к тому, что система не сможет найти или создать ссылки для основных объектов, и они не будут загружены.

  1. Тщательная проверка правил конвертации объектов (ПКО):

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

  2. Управление порядком конвертации:

    В КД2 предусмотрены механизмы для управления порядком конвертации объектов. Убедитесь, что базовые объекты, от которых зависят другие, загружаются первыми. Если проблема с загрузкой документов, убедитесь, что все справочники, используемые в этих документах, успешно загружаются до их попытки загрузки.

Таким образом, для успешного решения проблемы с неполной загрузкой данных и неотработкой обработчиков в «Конвертации данных 2.0» требуется систематический подход, начинающийся с базовых проверок и заканчивающийся глубокой отладкой. Используя описанные методы, вы сможете точно определить, на каком этапе происходит сбой, и устранить его причину. Для этой задачи можно использовать специализированную обработку для отладки правил обмена КД 2.0.

← На главную