При настройке правил обмена в конфигурации Конвертация данных 2.1 разработчики часто сталкиваются с ситуацией, когда данные выгружаются успешно, но в приемнике объект не обновляется или не создается. В частности, при попытке синхронизации документов по номеру поиск может возвращать Неопределено или пустую ссылку. Давайте разберем, почему это происходит и как правильно настроить поиск объектов.
Основная проблема заключается в механизме поиска объектов по реквизитам. В 1С документы часто имеют периодическую нумерацию — например, в пределах календарного года. Если вы используете стандартные механизмы Конвертации данных или пишете произвольный алгоритм для поиска документа, вызов метода НайтиПоНомеру() без указания периода поиска обречен на неудачу, если номер не является уникальным в пределах всей базы данных за всю историю.
Рассмотрим типичную ошибку. Разработчик пытается найти документ кодом:
// Ошибочный вариант
Менеджер = Документы.ЗаказКлиента;
НайденныйДокумент = Менеджер.НайтиПоНомеру(НомерДокумента);
Если номер 00TL-054497 существует в базе, но Менеджер.НайтиПоНомеру() не находит его, это означает, что система ожидает уточнения даты. В конфигураторе 1С для большинства документов установлена периодичность нумерации «В пределах года». Следовательно, для успешного поиска необходимо передать системе дату, на которую этот номер был актуален.
Чтобы решить эту проблему, необходимо передать второй параметр в метод поиска — дату документа. Это позволит 1С сузить область поиска до нужного интервала. Давайте посмотрим, как это выглядит в коде:
// Корректный вариант
Менеджер = Документы.ЗаказКлиента;
ДатаПоиска = Дата(2020, 1, 1); // Дата, соответствующая периоду документа
НайденныйДокумент = Менеджер.НайтиПоНомеру(НомерДокумента, ДатаПоиска);
Когда вы добавляете дату в параметры, система начинает искать номер именно в том интервале, где он был присвоен. Если точная дата документа в источнике и приемнике может немного отличаться, рекомендуется передавать дату, которая гарантированно попадает в период действия номера (например, начало года, к которому относится документ).
Правила конвертации объектов (ПКО) вашего документа. Вкладка «Поиск» должна содержать корректные поля поиска. Если вы используете поиск по номеру, убедитесь, что в правилах также настроена передача даты.Уникальный идентификатор (GUID). Поиск по УИД работает быстрее и исключает проблемы, связанные с перепроведением документов или изменением номеров.Отладчик 1С:Предприятия, чтобы посмотреть, какое именно значение попадает в переменную Значение и что именно возвращает метод Менеджер.НайтиПоНомеру(). Часто бывает полезно вывести промежуточные значения в журнал регистрации.Мы выяснили, что ошибка «объект не найден» при использовании НайтиПоНомеру почти всегда связана с периодичностью нумерации. Всегда помните, что для документов, нумерация которых ведется в пределах года, обязательно нужно указывать дату в качестве второго аргумента функции поиска.
Также при работе с Конвертацией данных 2.1 старайтесь:
УИД.ПредопределенноеЗначение().Следуя этим простым шагам, вы сможете избежать «плавающих» ошибок при обмене данными и обеспечить целостность информации между вашими информационными базами.