Почему не происходит конвертация и поиск документа в КД 2.1 при использовании метода НайтиПоНомеру?

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

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

Разбор причины ошибки поиска документа

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

Рассмотрим типичную ошибку. Разработчик пытается найти документ кодом:


// Ошибочный вариант
Менеджер = Документы.ЗаказКлиента;
НайденныйДокумент = Менеджер.НайтиПоНомеру(НомерДокумента);

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

Как исправить поиск документа в правилах конвертации

Чтобы решить эту проблему, необходимо передать второй параметр в метод поиска — дату документа. Это позволит 1С сузить область поиска до нужного интервала. Давайте посмотрим, как это выглядит в коде:


// Корректный вариант
Менеджер = Документы.ЗаказКлиента;
ДатаПоиска = Дата(2020, 1, 1); // Дата, соответствующая периоду документа
НайденныйДокумент = Менеджер.НайтиПоНомеру(НомерДокумента, ДатаПоиска);

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

Рекомендации по настройке поиска в ПКО

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

Итоги и лучшие практики

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

Также при работе с Конвертацией данных 2.1 старайтесь:

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

← На главную