Ошибка 1С: Недопустимое значение параметра при вызове функции — Решение
- Исключение времени выполнения при вызове встроенных функций платформы или методов БСП.
- Текст ошибки:
{Модуль(Строка)}: Ошибка при вызове метода контекста (ИмяМетода): Недопустимое значение параметра (номер параметра). - Сбой при вызове функций работы со строками (
Лев,Прав,Сред,СтрНайти), коллекциями, блокировками или форматированием дат.
1. Причины генерации исключения платформой
Данная ошибка возникает, когда в системный метод платформы 1С передается аргумент, не удовлетворяющий контракту функции по типу данных, диапазону значений или структуре:
- Отрицательная длина или смещение в функциях
Сред(),Лев(),Прав(); - Передача значения типа
НеопределеноилиNullтуда, где строго ожидаетсяЧисло,СтрокаилиБулево; - Неверный формат маски в функции
Формат(); - Передача некорректного режима проведения документа или режима блокировки данных.
2. Практические примеры и исправления
Пример 1: Отрицательное число в строковых функциях
// СБОЙ: если ДлинаСимволов отрицательная или не число:
Подстрока = Сред(ИсходныйТекст, НачальнаяПозиция, ДлинаСимволов);
// ИСПРАВЛЕНИЕ: Валидация диапазонов
НачальнаяПозиция = Макс(1, Цел(Число(НачальнаяПозиция)));
ДлинаСимволов = Макс(0, Цел(Число(ДлинаСимволов)));
Подстрока = Сред(ИсходныйТекст, НачальнаяПозиция, ДлинаСимволов);Пример 2: Недопустимый тип в функции Формат()
// СБОЙ: Попытка форматирования Неопределено как числа
СтрокаСуммы = Формат(СуммаДокумента, "ЧДЦ=2"); // Упадет, если СуммаДокумента = Неопределено
// ИСПРАВЛЕНИЕ: Защита через проверку типа
Если Не ЗначениеЗаполнено(СуммаДокумента) ИЛИ ТипЗнч(СуммаДокумента) <> Тип("Число") Тогда
СуммаДокумента = 0;
КонецЕсли;
СтрокаСуммы = Формат(СуммаДокумента, "ЧДЦ=2");Пример 3: Неверное имя типа в конструкторе Новый
// СБОЙ: Опечатка в имени типа
Массив = Новый ("Масив"); // Ошибка: Недопустимое значение параметра
// ИСПРАВЛЕНИЕ:
Массив = Новый ("Массив"); Частые вопросы (FAQ)
Почему функция Сред() вызывает ошибку при передаче третьего параметра 0?
Передача 0 в качестве третьего параметра (длины) в Сред() разрешена и вернет пустую строку. Ошибка возникает, если передать значение меньше нуля или параметр типа Неопределено/Строка.
Как быстро найти номер сбойного параметра по тексту ошибки?
В тексте ошибки платформа явно указывает позицию: 'Недопустимое значение параметра (параметр номер 2)'. Проверьте тип и значение именно второго аргумента в скобках вызова.
Может ли метод Заблокировать() вызвать такую ошибку?
Да, если в объект БлокировкаДанных добавлен элемент блокировки с некорректным пространством имен (опечатка в имени регистра или таблицы) или недопустимым режимом блокировки.
Как защитить функцию ЗначениеВСтрокуВнутр() от падения?
Убедитесь, что передаваемый объект не является объектом клиентского интерфейса (например, ЭлементФормы, УправляемаяФорма), которые не поддерживают сериализацию в системные строковые форматы.