Как исправить ошибку применения расширения при доработке документа Данные для расчета зарплаты в 1С:ЗУП 3.1

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

При разработке расширений для конфигурации 1С:Зарплата и управление персоналом 3.1 программисты часто сталкиваются с ситуацией, когда код написан корректно, синтаксических ошибок нет, но при запуске системы возникает «Ошибка применения расширения конфигурации». Особенно остро эта проблема проявляется при попытке изменить логику работы универсальных документов, таких как ДанныеДляРасчетаЗарплаты (в частности, для операций типа «Сдельный наряд»).

В данной статье мы подробно разберем, почему возникает эта ошибка, как влияют настройки безопасности на работу серверных методов и какие существуют альтернативные, более «чистые» способы реализации подобных задач без изменения программного кода.

Анализ проблемы: почему расширение не применяется

Рассмотрим типичную ситуацию. Нам необходимо добавить в табличную часть ВыполненныеРаботы документа ДанныеДляРасчетаЗарплаты новый реквизит НормаВременинадеталь и заставить систему пересчитывать сумму по формуле: Сумма = Расценка * Объем * НормаВремени. Для этого в расширении создается обработчик:


&НаКлиентеНаСервереБезКонтекста
&После("РассчитатьСуммуРаботПоРасценке")
Процедура Расш1_РассчитатьСуммуРаботПоРасценке(СтрокаТаблицы)
    // Изменение логики расчета суммы
    СтрокаТаблицы.Сумма = СтрокаТаблицы.Расценка * СтрокаТаблицы.ОбъемВыполненныхРабот * СтрокаТаблицы.Нормавременинадеталь;
КонецПроцедуры

Несмотря на то, что код выглядит логичным, платформа выдает ошибку применения. Выясним причину. Основным фактором здесь выступает Безопасный режим расширения. Когда расширение работает в безопасном режиме, платформа накладывает жесткие ограничения на выполнение кода:

  1. Блокируются вызовы серверных методов модулей, если они не помечены специальным образом.
  2. Ограничивается доступ к файловой системе, внешним ресурсам и некоторым коллекциям метаданных.
  3. В файловом варианте или в клиент-серверном варианте без настроенных профилей безопасности в безопасном режиме будут расширяться только клиентские методы и обработчики событий форм. Серверные методы (аннотированные &НаСервере или методы модулей объектов) игнорируются или вызывают ошибку применения.

Способ 1: Отключение ограничений безопасности (Быстрое решение)

Если ваша инфраструктура позволяет снизить уровень контроля за расширением, самым простым способом решения проблемы является изменение свойств расширения в пользовательском режиме или в конфигураторе. Разберем по шагам, как это сделать:

  1. Откройте список расширений в вашей базе (Администрирование — Печатные формы, отчеты и обработки — Расширения).
  2. Найдите ваше расширение Расширение1.
  3. Снимите флажок Безопасный режим.
  4. Снимите флажок Защита от опасных действий.
  5. Перезапустите сеанс «1С:Предприятия».

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

Способ 2: Использование показателей расчета (Рекомендуемый метод)

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

Рассмотрим более правильный путь — использование штатных Показателей расчета зарплаты:

  1. Перейдите в раздел Настройка — Показатели расчета зарплаты и создайте новый показатель Норма времени на деталь. Укажите, что он используется «Для сотрудника» и вводится «Только в месяце, в котором вводится значение (разовое использование)».
  2. Настройте Шаблон ввода данных (раздел Настройка). В выбранном шаблоне для сдельных работ на закладке «Показатели зарплаты» отметьте галочкой ваш новый показатель.
  3. Теперь в документе ДанныеДляРасчетаЗарплаты автоматически появится колонка для ввода нормы времени.
  4. Измените формулу начисления в справочнике Начисления. Вместо стандартной формулы используйте свою: ОбъемВыполненныхРабот * Расценка * НормаВремениНаДеталь.

Этот подход исключает необходимость написания кода в расширении и полностью избавляет от ошибок применения, так как вы используете стандартный механизм конфигурации.

Технические нюансы работы с документом ДанныеДляРасчетаЗарплаты

Если вы все же решили идти по пути программной доработки, следует учитывать особенности построения формы этого документа. Выясним, почему добавленный реквизит может не отображаться на форме:

Форма документа ДанныеДляРасчетаЗарплаты строится динамически. Процедура ПриСозданииНаСервере анализирует настройки шаблона и программно добавляет элементы формы (колонки таблицы). Если вы просто добавили реквизит в расширение в метаданные табличной части, он не появится на экране автоматически. Вам потребуется переопределить логику отрисовки формы в расширении.

Рекомендация по программному коду: при использовании аннотации &После убедитесь, что параметры процедуры в расширении точно соответствуют параметрам в основной конфигурации. Если после обновления версии ЗУП фирма «1С» изменит имя параметра (например, с СтрокаТаблицы на ТекущаяСтрока), расширение перестанет применяться.

Отражение данных в регистрах

Проанализируем ситуацию с проведением документа. Мало просто рассчитать сумму в документе. Для того чтобы эти данные попали в итоговый расчет зарплаты, они должны быть зафиксированы в регистрах. Стандартно документ делает записи в регистр накопления ДанныеОперативногоУчетаРабочегоВремени или специализированные регистры расчета.

Если ваш новый реквизит НормаВременинадеталь должен учитываться в отчетах или других алгоритмах, вам придется также расширить соответствующие регистры и доработать процедуру ОбработкаПроведения. Это еще один аргумент в пользу использования Показателей расчета, так как для них механизмы проведения и хранения уже реализованы платформой «из коробки».

Итоги и выводы

Подводя итог, можно выделить следующие ключевые моменты при работе с расширениями в ЗУП 3.1:

Применяя эти знания, мы можем не только устранить текущую ошибку применения расширения, но и создать более надежную и поддерживаемую систему учета в 1С:ЗУП.

← На главную