Как исправить ошибку «Несоответствие типов (параметр номер '1')» при создании нового документа на основе «Премии» в 1С:ЗУП?

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

При разработке собственных документов на базе типовых конфигураций, таких как «Зарплата и управление персоналом» (ЗУП), программисты часто прибегают к копированию существующих объектов метаданных. Однако копирование такого сложного документа, как «Премия», неизбежно ведет к возникновению ошибки «Несоответствие типов (параметр номер '1')». Эта проблема возникает не только в момент записи документа, но и при попытке его открытия из списка. Разберем детально, почему это происходит и как правильно адаптировать новый документ под жесткие стандарты типовой конфигурации.

Выясним причину возникновения ошибки

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

Шаг 1: Проверка и настройка Определяемых типов

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

  1. ОпределяемыйТип.ОбъектРасчетаЗарплаты: Если ваш документ должен делать движения по регистрам расчета или участвовать в цепочке начислений.
  2. ОпределяемыйТип.ДокументОснование: Позволяет вашему документу корректно взаимодействовать с другими объектами системы.
  3. ОпределяемыйТип.ОбъектСНачислениями: Необходим для корректной работы механизмов заполнения табличных частей и расчета сумм.
  4. ОпределяемыйТип.ВладелецОбъектаРегистрации: Используется для связи документа с регистрами сведений и накопления.

Для внесения изменений разверните ветку метаданных Общие -> Определяемые типы, найдите нужный тип и в свойстве «Тип» отметьте галочкой ваш новый документ.

Шаг 2: Анализ подписок на события

Подписки на события — это невидимые «контролеры», которые срабатывают автоматически при записи или проведении документа. Проанализируем, почему они вызывают ошибку. Типовая подписка, например ЗарплатаКадрыБазовыйПередЗаписью, может быть настроена для работы с типом ДокументОбъект.Премия или целым набором типов. Если ваш новый документ не включен в источник подписки, но при этом в его программном коде вызываются связанные процедуры, возникнет конфликт.

Просмотрите следующие подписки в дереве метаданных:

Шаг 3: Корректировка кода в модулях документа

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


// В модуле формы нового документа
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Типовой вызов, который может ожидать конкретный тип
    ЗарплатаКадрыСоставОбъектов.ПриСозданииНаСервере(ЭтотОбъект, Отказ);
КонецПроцедуры

Если процедура ПриСозданииНаСервере общего модуля внутри себя проверяет Метаданные().Имя и не находит там ожидаемого значения (например, "Премия"), она может вернуть Неопределено или пустую ссылку, которая при передаче в следующую функцию в качестве параметра №1 и вызовет ошибку. Проанализируем решение автора из обсуждения: он закомментировал ненужную функцию. Однако для полноценной работы лучше не удалять код, а адаптировать его, убедившись, что ваш документ корректно обрабатывается общими модулями.

Шаг 4: Решение проблемы с открытием документа из списка

Если документ отображается в списке, но не открывается, проблема часто кроется в Динамическом списке или событии ПриЧтенииНаСервере. В ЗУП динамические списки часто используют сложные запросы с объединением таблиц или вызовы функций оформления.

Посмотрим на возможные причины:

  1. Условное оформление: В форме списка может быть настроено оформление, которое обращается к полям, отсутствующим в вашем новом документе.
  2. Механизм печати: При открытии документа система пытается инициализировать команды печати. Если документ не зарегистрирован в менеджере печати, это приведет к ошибке.
  3. Версионирование: Если включена история изменений, при открытии система ищет настройки версионирования для данного типа объекта.

Шаг 5: Практические рекомендации по отладке

Чтобы точно найти место, где возникает «затык», выполните следующие действия:

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

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

Разберем итог ситуации: простое копирование в ЗУП не работает «из коробки», так как конфигурация сильно завязана на типизацию объектов. Вместо бездумного удаления кода, старайтесь следовать логике типового решения, регистрируя свой объект во всех необходимых системных «реестрах» через Определяемые типы.

← На главную