При работе в конфигурациях 1С (в частности, 1С:Бухгалтерия и 1С:Упрощенка) после обновления платформы или релиза конфигурации пользователи могут столкнуться со сбоем при интерактивных действиях, например, при создании документов или счетов. В окне ошибки или в отладчике отображается следующее сообщение:
{ОбщийМодуль.РегламентныеЗаданияСервер.Модуль}: Ошибка при вызове метода контекста (НайтиПоУникальномуИдентификатору) по причине: Несоответствие типов (параметр номер '1')
Проанализируем причину возникновения этой проблемы, разберем механики платформы и рассмотрим способы устранения ошибки.
Выясним причину, по которой платформа выдает данное исключение. Метод РегламентныеЗадания.НайтиПоУникальномуИдентификатору() входит в состав менеджера регламентных заданий и имеет строго заданную сигнатуру.
Синтаксис метода платформы:
РегламентныеЗадания.НайтиПоУникальномуИдентификатору(<Идентификатор>)
Параметр Идентификатор является обязательным. В качестве этого параметра платформа принимает исключительно объект типа УникальныйИдентификатор (UUID). Если в функцию передается значение типа Строка, Неопределено, Null или число, исполнение программы прерывается с ошибкой «Несоответствие типов (параметр номер '1')».
Рассмотрим экспортную функцию общего модуля РегламентныеЗаданияСервер, в которой происходит обращение к менеджеру регламентных заданий:
Функция ПолучитьРегламентноеЗадание(Знач Идентификатор) Экспорт
ВызватьИсключениеЕслиНетПраваАдминистрирования();
Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда
Идентификатор = Идентификатор.УникальныйИдентификатор;
КонецЕсли;
Если ТипЗнч(Идентификатор) = Тип("Строка") Тогда
Идентификатор = Новый УникальныйИдентификатор(Идентификатор);
КонецЕсли;
Если ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") Тогда
РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Идентификатор);
Иначе
РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);
КонецЕсли;
Если РегламентноеЗадание = Неопределено Тогда
ВызватьИсключение( НСтр("ru = 'Регламентное задание не найдено.
|Возможно, оно удалено другим пользователем.'") );
КонецЕсли;
Возвращать РегламентноеЗадание;
КонецФункции
Проанализируем логику работы этого кода:
Идентификатор передан сам объект РегламентноеЗадание, из него извлекается его свойство УникальныйИдентификатор.УникальныйИдентификатор через конструктор Новый УникальныйИдентификатор(Идентификатор). В некоторых релизах Библиотеки Стандартных Подсистем (БСП) встречалась опечатка при проверке типа строки, из-за чего преобразование пропускалось.Неопределено (например, когда соответствующая константа или настройка фонового задания не заполнена), код сразу переходит к вызову НайтиПоУникальномуИдентификатору() с некорректным типом параметра, что и вызывает исключение.Разберем по шагам варианты устранения ошибки в зависимости от условий её возникновения.
Очень часто ошибка возникает из-за неактуального или поврежденного локального кэша платформы «1С:Предприятие» после проведения обновления конфигурации. Посмотрим, как корректно выполнить очистку:
C:\Users\<ИмяПользователя>\AppData\Local\1C\1Cv82
C:\Users\<ИмяПользователя>\AppData\Roaming\1C\1Cv82
/ClearCache в дополнительных параметрах запуска.Если конфигурация находится на типовой поддержке и закрыта от изменений, создадим расширение конфигурации для перехвата функции и безопасной привязки типов:
РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание с помощью аннотации &Вместо:
&Вместо("ПолучитьРегламентноеЗадание")
Функция Расш_ПолучитьРегламентноеЗадание(Знач Идентификатор)
Если ТипЗнч(Идентификатор) = Тип("Строка") И ЗначениеЗаполнено(Идентификатор) Тогда
Идентификатор = Новый УникальныйИдентификатор(Идентификатор);
ЭлИсли НЕ ЗначениеЗаполнено(Идентификатор) Тогда
Возврат Неопределено;
КонецЕсли;
Возврат ПродолжитьВызов(Идентификатор);
КонецФункции
Такой подход защитит функцию от передачи неинициализированных данных или строки без конвертации.
Если ошибка связана с некорректными ссылками на фоновые или регламентные задания в служебных регистрах и константах:
.dt).