При обновлении конфигурации «1С:Бухгалтерия предприятия 3.0» до версии 3.0.67 и выше многие технические специалисты столкнулись с серьезной проблемой в работе нетиповых обменов с «1С:Управление производственным предприятием 1.3». Ошибка проявляется сообщением: {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(9726)}: Поле объекта не обнаружено (СтавкаНДС). В этой статье мы подробно разберем, почему это происходит и как восстановить работоспособность синхронизации, учитывая изменения в архитектуре метаданных 1С.
Проанализируем ситуацию с точки зрения обновлений БП 3.0. Начиная с релиза 3.0.67, разработчики 1С провели масштабную реорганизацию механизмов учета НДС. Главное изменение коснулось справочников и документов: старое перечисление СтавкиНДС (с элементами НДС18, НДС10 и т.д.) было практически выведено из эксплуатации. Вместо него был внедрен новый объект — ВидыСтавокНДС.
Важные отличия новых метаданных:
Общая (для ставок 18% и 20%), Пониженная (10%), Нулевая (0%) и Освобождена (Без НДС).В документах «Поступление товаров и услуг», «Реализация товаров и услуг», а также в справочнике «Номенклатура», реквизит СтавкаНДС был заменен на ВидСтавкиНДС. Именно это несоответствие вызывает падение стандартной обработки обмена, которая пытается программно обратиться к полю по старому имени.
Прежде чем вносить изменения в правила конвертации, нам необходимо точно определить, какой именно объект вызывает ошибку. Рассмотрим методику отладки:
КонвертацияОбъектовИнформационныхБаз.СоздатьНовыйОбъект или при попытке записи реквизитов в табличные части.Чаще всего проблема кроется в ПКО (Правилах Конвертации Объектов) для справочника Номенклатура или в ПКС (Правилах Конвертации Свойств) табличных частей Товары и Услуги популярных документов.
Разберем, как правильно скорректировать правила. Простая замена имен в XML-файле, как заметил автор темы, не всегда помогает, так как существуют зависимости в обработчиках и настройках поиска.
Последовательность действий в КД 2.0:
СтавкаНДС. Изменим «Приемник» на ВидСтавкиНДС.
// Пример логики сопоставления значений:
УПП.НДС18 -> БП.Общая
УПП.НДС20 -> БП.Общая
УПП.НДС10 -> БП.Пониженная
УПП.БезНДС -> БП.Освобождена
Проанализируем события «Перед загрузкой» и «При загрузке». Часто программисты пишут произвольный код для заполнения ставок НДС. Рассмотрим пример исправления кода в обработчике:
Было:
Объект.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
Стало:
// В новых релизах БП 3.0 используем ВидыСтавокНДС
Объект.ВидСтавкиНДС = Перечисления.ВидыСтавокНДС.Общая;
Если код должен быть универсальным для разных версий БП, рекомендуется использовать проверку наличия реквизита через метаданные, чтобы избежать исключений.
Выясним причину, почему изменения в XML-файле могут не «подхватываться» системой. В современных конфигурациях на базе БСП (Библиотеки Стандартных Подсистем), к которым относится БП 3.0, правила обмена часто хранятся внутри информационной базы в регистре сведений или привязаны к макету.
Чтобы принудительно обновить правила:
Рассмотрим ситуацию, когда даже после загрузки новых правил ошибка сохраняется. Это может быть связано с тем, что 1С кэширует структуру правил обмена. В некоторых случаях помогает временное отключение и включение синхронизации или очистка серверного кэша. Также стоит убедиться, что изменения внесены в правила обоих баз, если обмен является двусторонним, так как структура сообщения обмена должна соответствовать ожиданиям принимающей стороны.
Для решения проблемы «Поле объекта не обнаружено (СтавкаНДС)» мы выполнили следующие действия: проанализировали изменения метаданных в БП 3.0, обновили ПКС в «Конвертации данных 2.0», заменив СтавкаНДС на ВидСтавкиНДС, настроили ПКО для перечислений и перегрузили правила в узле синхронизации. Такой комплексный подход позволяет не только устранить текущую ошибку, но и подготовить обмен к корректной работе с новыми ставками НДС (например, 20%).