При переносе данных из конфигурации 1С:Зарплата и управление персоналом (ЗУП) в 1С:Бухгалтерию предприятия (БП) пользователи часто сталкиваются с ситуацией, когда в документе Отражение зарплаты в бухучете вместо новых способов отражения появляется надпись "Объект не найден". При этом в XML-файле выгрузки данные присутствуют, а поиск по наименованию (если создать элемент вручную) работает корректно. Рассмотрим подробно, почему система отказывается автоматически создавать новые элементы справочника СпособыОтраженияЗарплатыВБухУчете и как это исправить.
Первым делом проанализируем настройки Правил Конвертации Объектов (ПКО) в конфигурации "Конвертация данных 2.0". Для этого загрузим файл CorrespondentExchangeRules (правила загрузки) и найдем ПКО для справочника СпособыОтраженияЗарплатыВБухУчете.
Необходимо убедиться, что установлены следующие флаги:
Важный момент: Проверьте состояние флага "Не создавать новый объект, если не найден". Если эта галочка установлена, система найдет ссылку в XML, не обнаружит её в базе-приемнике и просто проигнорирует создание, оставив битую ссылку ("Объект не найден"). Выясним, почему этот флаг может быть критичен: в типовых обменах разработчики часто намеренно ограничивают создание способов отражения, чтобы бухгалтер сначала настроил счета учета в БП, а уже потом привязывал их к зарплате.
Если визуальные флаги настроены верно, но объект все равно не создается, проанализируем программный код в самих правилах. Перейдем в ПКО справочника и проверим события ПередЗагрузкой и ПриЗагрузке. Разработчики типовых решений часто вставляют код, блокирующий запись:
// Пример возможной блокировки в обработчике "ПередЗагрузкой"
Если ОбъектМодифицирован = Ложь И ЭтоНовый Тогда
// Если объект не найден и система пытается его создать
// разработчик может принудительно установить Отказ
Отказ = Истина;
КонецЕсли;
Также стоит обратить внимание на параметр ТолькоПолучитьУзелСвойств. Если в коде обработчика встречается установка этого параметра в значение Истина, то система прочитает данные из файла, но не инициирует создание нового элемента в базе данных.
Рассмотрим ситуацию, когда поиск по идентификатору технически "срабатывает", но объект в интерфейсе не виден. В 1С при обмене данными активно используется регистр сведений Соответствия объектов информационных баз. Выясним, как это работает:
При загрузке система первым делом заглядывает в этот регистр. Если там уже есть запись, сопоставляющая GUID из ЗУП с каким-то внутренним ID в БП, система берет эту ссылку. Если ранее объект был удален непосредственно из справочника (через "Удаление помеченных объектов"), но запись в регистре соответствий осталась, система попытается подставить в документ пустую, "битую" ссылку. В итоге мы видим "Объект не найден".
Решение: Проанализируем содержимое регистра соответствий, отфильтровав его по узлу обмена и типу объекта Способы отражения зарплаты в бухучете. Если найдены подозрительные записи, их следует удалить, чтобы система выполнила поиск заново по полям поиска (наименованию) или создала новый элемент.
Если ваш обмен настроен через современный механизм (универсальный формат EnterpriseData), то правила из "Конвертации данных 2.0" могут вообще не использоваться. В этом случае логика создания объектов зашита в модули конфигурации или в расширения.
В современных версиях БП 3.0 часто реализована логика "ручного сопоставления". Система специально не создает новые способы отражения, так как они требуют обязательной аналитики (счет затрат, субконто). Посмотрим на Панель мониторинга синхронизации данных. Если там висят несопоставленные объекты, их нужно сопоставить вручную, и тогда "Объект не найден" исчезнет после следующей синхронизации.
Когда теоретический анализ не помогает, перейдем к практике отладки. Чтобы понять, в какой момент система принимает решение не записывать объект, нам нужно спозиционироваться в коде загрузки.
Разберем, где ставить точки останова:
ЗагрузитьОбъект().ПоискОбъектаПоСвойствам(). Проанализируем значение переменной ОбъектНайден.ОбъектНайден = Ложь, проследим, доходит ли выполнение до метода Объект.Записать(). Если выполнение прерывается раньше (например, по условию Продолжить или Отказ), мы найдем конкретную строку кода, блокирующую создание.Пример кода для отладки в модуле обмена:
// Точка останова в процедуре ЗагрузитьОбъект
Если ТипЗнч(Данные) = Тип("СправочникОбъект.СпособыОтраженияЗарплатыВБухУчете") Тогда
// Здесь можно посмотреть, заполнены ли реквизиты перед записью
Сообщить("Загружаем способ: " + Данные.Наименование);
КонецЕсли;
Выясним еще одну неочевидную причину: отсутствие обязательных реквизитов для записи. Справочник Способы отражения в Бухгалтерии может иметь дополнительные реквизиты, которые отсутствуют в ЗУП. Если при попытке Объект.Записать() срабатывает проверка заполнения (или подписка на событие), и какой-то важный реквизит пуст, 1С не создаст элемент, а ошибка записи может быть "проглочена" механизмом обмена для обеспечения непрерывности процесса.
Что проверить:
Проанализировав проблему, мы можем составить алгоритм действий:
Объект в процедуре ЗагрузитьОбъект.Выполнение этих шагов позволит выявить причину блокировки создания элементов и обеспечит корректное отражение затрат на оплату труда в бухгалтерском учете.