Почему в ЗУП 3.1 не работает формула в расчете начисления и как исправить ошибку «Поле объекта не обнаружено (Показатель2)»?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

При настройке новых видов начислений в программе 1С:Зарплата и управление персоналом 3.1 пользователи и администраторы иногда сталкиваются с ситуацией, когда визуально правильная формула приводит к аварийному завершению работы программы или выдает системную ошибку при попытке её проверки или записи. Рассмотрим одну из самых специфических ошибок, возникающих на уровне программного кода общего модуля, и разберем, как правильно выстроить логику расчета, чтобы избежать проблем в будущем.

Анализ технической причины ошибки

Разберем ситуацию, когда при сохранении формулы или её проверке система выдает следующее сообщение:


{ОбщийМодуль.РасчетЗарплатыРасширенныйФормы.Модуль(3642)}: Поле объекта не обнаружено (Показатель2)
СтрокаПриемник["Показатель" + Сч] = Показатель.Показатель;

Проанализируем, что происходит в этот момент внутри системы. Программа считывает текст формулы и пытается «разобрать» её на составляющие части — показатели. Для каждого найденного в формуле показателя (например, Оклад, Секретность, ПроцентНадбавки) система создает колонку в динамической структуре данных (таблице или строке-приемнике), присваивая им внутренние имена: Показатель1, Показатель2, Показатель3 и так далее.

Ошибка «Поле объекта не обнаружено (Показатель2)» означает, что алгоритм парсинга формулы определил наличие второго показателя, но когда дело дошло до обращения к свойствам этого объекта в коде, структура СтрокаПриемник не смогла предоставить доступ к этому полю. Выясним причину: чаще всего это происходит из-за нарушения ссылочной целостности или наличия дублей показателей в справочнике Показатели расчета зарплаты.

Причина №1: Дублирование предопределенных показателей

Рассмотрим наиболее вероятный сценарий. Если информационная база была получена путем переноса данных из версии 2.5 или в результате некорректного объединения конфигураций, в справочнике показателей могут появиться два элемента с одинаковыми именами или идентификаторами. Например, может существовать системный (предопределенный) показатель Оклад и его «двойник», созданный пользователем или при переносе.

Проанализируем алгоритм исправления этой проблемы:

  1. Перейдем в раздел Настройка — Показатели расчета зарплаты.
  2. Внимательно изучим список. Посмотрим, нет ли там показателей с идентичными названиями. Особое внимание уделим краткому имени (идентификатору), который используется в формулах.
  3. Если обнаружены дубли, воспользуемся стандартной обработкой Поиск и замена дублей (раздел Администрирование — Обслуживание — Корректировка данных).
  4. При объединении важно выбрать в качестве «Правильного элемента» тот, который является предопределенным (отмечен специальной пиктограммой с желтым шариком). Это критично для корректной работы встроенных алгоритмов расчета.

Причина №2: Методические ошибки при обращении к показателям ФОТ

Посмотрим на формулу, которую пытался реализовать автор вопроса: (Оклад + Оклад * Секретность). На первый взгляд она логична, но с точки зрения методологии 1С:ЗУП 3.1 она является «опрометчивой хотелкой».

Выясним, почему прямое использование показателя Оклад в произвольных формулах может привести к неверным результатам:

Правильное решение: Использование Расчетной базы

Для корректного расчета надбавок, которые зависят от оклада или совокупности начислений (ФОТ), в программе предусмотрен специальный механизм — РасчетнаяБаза. Разберем по шагам, как настроить начисление правильно:

  1. В карточке начисления на вкладке Основное укажем формулу: РасчетнаяБаза * ПроцентСекретности / 100 (или иную логику, использующую базу).
  2. Перейдем на вкладку Расчет базы. Именно здесь мы определим, что именно программа должна считать «Окладом» для данной формулы.
  3. В список Базовые начисления добавим Оплата по окладу, Оплата по окладу (по часам) и другие начисления, которые составляют основу для расчета.
  4. Укажем Период расчета базы (обычно это Текущий месяц).

Преимущество этого метода в том, что система 1С:ЗУП автоматически рассчитает базу с учетом всех кадровых перестановок, вытеснений (больничных, отпусков) и пересчетов. Если оклад изменился 10-го числа, РасчетнаяБаза сама соберет суммы по двум разным периодам действия оклада и предоставит в формулу корректный итог.

Дополнительные технические проверки

Если после устранения дублей и корректировки формулы ошибка Поле объекта не обнаружено (Показатель2) сохраняется, проанализируем состояние кэша и целостность базы данных.

Очистка кэша: Часто формы настроек «запоминают» ошибочные связи показателей. Рекомендуем удалить базу из списка запуска и добавить её заново или запустить 1С с параметром /ClearCache. Это заставит систему перестроить динамические формы расчета зарплаты.

Тестирование и исправление: В некоторых случаях проблема кроется в «битых» ссылках в таблицах расчета. Выполним следующие действия в Конфигураторе:

Резюме

Подводя итог, отметим, что стабильная работа формул в ЗУП 3.1 зависит от чистоты справочника показателей и соблюдения методики использования расчетной базы. Использование конструкции РасчетнаяБаза вместо прямого указания Оклад — это не просто рекомендация, а стандарт разработки, гарантирующий точность начислений в любых кадровых ситуациях. Если же вы столкнулись с программной ошибкой в общем модуле, первым делом проверьте базу на наличие дублей предопределенных элементов.

← На главную