При создании физического лица или попытке внести запись в периодический регистр сведений ГражданствоФизическихЛиц в конфигурации «1С:Бухгалтерия предприятия 3.0» может возникать критическая ошибка: «Метод объекта не обнаружен (ЭтоНовый)». При этом удаление записей проходит штатно, а стандартное тестирование и исправление базы данных не дает результата. Разберем детально природу этой ошибки и способы ее полного устранения.
Если проанализировать журнал регистрации в момент воспроизведения ошибки, мы увидим следующий стек вызовов подсистемы обмена данными:
{ОбщийМодуль.ОбменДаннымиСобытия.Модуль(1233)}: Ошибка выполнения правил регистрации объектов для плана обмена ОбменЗарплата3Бухгалтерия3.
Описание ошибки: {ОбщийМодуль.ОбменДаннымиСобытия.Модуль(2402)}: Ошибка при выполнении обработчика: "При обработке";
План обмена: ОбменЗарплата3Бухгалтерия3; Объект метаданных: РегистрСведений.ГражданствоФизическихЛиц
Описание ошибки: {ОбщийМодуль.ОбменДаннымиСобытия.Модуль(1360)}: Метод объекта не обнаружен (ЭтоНовый)
Если Не Объект.ЭтоНовый Тогда
Выясним причину такого поведения платформы. Метод ЭтоНовый() доступен исключительно для объектов ссылочных типов: справочников, документов, планов видов характеристик и аналогичных сущностей метаданных. При записи данных в регистр сведений переменная Объект внутри событий подсистемы БСП представляет собой набор записей — РегистрСведенийНаборЗаписей. У набора записей регистра нет метода ЭтоНовый(), равно как отсутствует и стандартный реквизит Ссылка.
Подобный ошибочный код часто попадает в обработчик правила регистрации объектов (ПРО) путем механического копирования условий из правила для справочника ФизическиеЛица. Совет заменить проверку на условие Объект.Ссылка.Пустая() является некорректным: для набора записей регистра такая инструкция сразу же вызовет исключение «Поле объекта не обнаружено (Ссылка)».
Кроме того, накатывание конфигурации из заведомо рабочей чистой базы не помогает решить проблему. В типовых решениях на Библиотеке стандартных подсистем правила конвертации и правила регистрации объектов сохраняются не только в макетах метаданных, но и кэшируются непосредственно в таблицах информационной базы — в служебном регистре сведений Правила для обмена данными. При включенной синхронизации механизм считывает алгоритмы именно из базы, игнорируя метаданные конфигурации.
Рассмотрим самый простой и безопасный способ исправления ситуации, не требующий изменения конфигурации в конфигураторе. Разберем по шагам порядок действий в пользовательском режиме:
ОбменЗарплата3Бухгалтерия3).ПравилаРегистрации.xml) из каталога шаблона обновления текущего релиза конфигурации.Правила для обмена данными, найдем строку правил регистрации для нужного плана обмена и перезапишем ее из типового макета конфигурации.Если в вашей организации используются модифицированные правила регистрации объектов, проанализируем их структуру в конфигурации «1С:Конвертация данных 2.1» и внесем необходимые правки вручную.
РегистрСведений.ГражданствоФизическихЛиц.Объект.ЭтоНовый либо добавим строгую проверку типа сущности перед вызовом специфических ссылочных методов:
Если ОбщегоНазначенияКлиентСервер.ЭтоСсылка(ТипЗнч(Объект)) Тогда
Если Не Объект.ЭтоНовый() Тогда
// Ссылочная логика проверки
КонецЕсли;
Иначе
// Логика для наборов записей регистров
КонецЕсли;
Обратите внимание: чтобы проверить факт новизны для набора записей регистра сведений, необходимо обращаться к отбору Объект.Отбор и выполнять запрос к физической таблице базы данных на наличие существующих записей по данным измерениям.
Если кадровый учет и расчет заработной платы вынесены во внешнюю программу (1С:ЗУП 3.0), а конфигурация «Бухгалтерия предприятия» выступает исключительно приемником кадровой информации, регистрировать изменения по регистру ГражданствоФизическихЛиц со стороны БП не имеет практического смысла.
В таком случае в правилах регистрации достаточно полностью отключить авторегистрацию для набора записей данного регистра. Это исключит запуск сбойного кода при интерактивном вводе физических лиц пользователями, и синхронизация продолжит функционировать в штатном режиме.