При работе в программе 1С:Зарплата и управление персоналом 8 (редакция 3.1) пользователи могут столкнуться с неприятной ситуацией: документ Начисление зарплаты и взносов отказывается рассчитываться, выдавая ошибку: «поле объекта не обнаружено СуммаДополнения». Чаще всего это происходит именно в тех базах, где введены документы Исполнительный лист. Ситуация осложняется тем, что ошибка может проявляться в одной информационной базе и отсутствовать в другой при идентичных релизах конфигурации и платформы.
В данной статье мы разберем причины возникновения этой ошибки и совместно пройдем по шагам алгоритм её устранения, основываясь на практическом опыте специалистов и особенностях механизмов расчета 1С.
Поле СуммаДополнения не является стандартным реквизитом документа. Оно фигурирует во внутренних алгоритмах системы, связанных с формированием временных таблиц при расчете базы для удержаний. В частности, этот механизм задействуется, когда программа пытается сопоставить начисления текущего периода с показателями прошлых периодов или при использовании сложных формул расчета исполнительных листов. Если структура данных в оперативной памяти (кэше) или во временных таблицах базы данных расходится с ожидаемой кодом программы, возникает указанный сбой.
Рассмотрим самый простой, но часто наиболее эффективный метод. Как показывает практика, ошибка «поле объекта не обнаружено» часто является следствием некорректного кэширования метаданных платформой 1С:Предприятие 8.3.
Проанализируем ситуацию: если в одной базе расчет проходит успешно, а в другой — нет, при этом версии конфигураций совпадают, проблема кроется в локальных файлах пользователя или временных данных сервера. Обычной очистки папки AppData может быть недостаточно. Мы рекомендуем выполнить следующие действия:
Выясним причину возможного конфликта на уровне программного кода. Даже если расширение не предназначено для изменения логики исполнительных листов, оно может затрагивать общие модули расчета зарплаты, такие как РасчетЗарплатыРасширенный или ПроцедурыРасчетаУдержаний. При обновлении основного релиза ЗУП (например, на версию 3.1.20.36 и выше) структура временных таблиц в коде может измениться, а расширение продолжит обращаться к старым полям.
Для проверки выполните следующие действия:
Начисление зарплаты и взносов.Иногда корень проблемы кроется в настройках самого удержания. В 1С:ЗУП удержание по исполнительному листу имеет предопределенную логику, но список начислений, входящих в его базу, настраивается пользователем.
Проанализируем вкладку «Расчет базы» в настройках удержания:
Исполнительный лист.Расчет базы. Проверьте, нет ли в списке «битых» ссылок (строк с надписью «Объект не найден») или начислений, которые были помечены на удаление, но не удалены физически.Важный момент: если при создании нового удержания с назначением Исполнительный лист кнопка настройки базы неактивна, это явный признак нарушения логической целостности метаданных в конкретной информационной базе.
В 1С:ЗУП 3.1 существует механизм автоматической регистрации необходимости перерасчетов. Ошибочные записи в этом регистре могут блокировать нормальный расчет текущего месяца. Проверим этот момент:
Начисление зарплаты и взносов и проверьте результат.Если вышеуказанные методы не помогли, необходимо прибегнуть к стандартным средствам восстановления базы данных в Конфигураторе. Это актуально, если «в одной базе всё ок, а в другой такая хрень».
Запустите Конфигуратор и выберите пункт меню Администрирование — Тестирование и исправление. Рекомендуется установить следующие флаги:
Ошибка может быть связана с конкретным релизом, например 3.1.20.36, где активно внедрялись механизмы ограничения удержаний по прожиточному минимуму. 1С регулярно выпускает исправления (патчи) для устранения критических ошибок расчета.
Проанализируем состояние системы:
Если вы обладаете навыками программирования, самый быстрый способ найти причину — использование отладчика. Посмотрим, как это сделать:
Стек вызова. Вы увидите, в какой именно функции происходит обращение к полю СуммаДополнения и в какой временной таблице его не хватает.Чаще всего код выглядит примерно так (условный пример):
// В модуле расчета базы удержаний
Для Каждого СтрокаТЗ Из ТаблицаПоказателей Цикл
ИтоговаяСумма = СтрокаТЗ.ОсновнаяСумма + СтрокаТЗ.СуммаДополнения; // Здесь падает, если поля нет в ТЗ
КонецЦикла;
Резюмируя: начните с самого простого — полной очистки кэша со сменой имени базы и проверки расширений. В 90% случаев это решает проблему «необнаруженного поля объекта» в типовых конфигурациях 1С.