Решение задач 1С:Предприятие 8 на примерах

«Недостаточно фактических параметров» в 1С: причины и решение

Ошибки 1СОшибки в кодеОпубликовано

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

Текст ошибки

Недостаточно фактических параметров

Причины

Что означают «формальные» и «фактические» параметры

Формальные параметры — это список в объявлении метода. Фактические — значения, переданные при вызове. Для каждого формального параметра без значения по умолчанию при вызове должно быть передано значение.

Функция СуммаСоСкидкой(Сумма, ПроцентСкидки, Округлять = Истина) Экспорт
    Результат = Сумма * (100 - ПроцентСкидки) / 100;
    Возврат ?(Округлять, Окр(Результат, 2), Результат);
КонецФункции

// Ошибка: недостаточно фактических параметров
Итог = СуммаСоСкидкой(1000);

// Верно: необязательный параметр можно не передавать
Итог = СуммаСоСкидкой(1000, 5);

// Ошибка: слишком много фактических параметров
Итог = СуммаСоСкидкой(1000, 5, Истина, Ложь);

Как исправить

  1. Откройте строку из текста ошибки и перейдите к определению метода (F12). Сравните количество параметров.
  2. Если вы сами добавили параметр в метод, который вызывается из многих мест, сделайте его необязательным: задайте значение по умолчанию. Так старые вызовы продолжат работать.
  3. Найдите все вызовы метода глобальным поиском (Ctrl+Shift+F) и выполните синтаксический контроль модулей (в конфигураторе: «Конфигурация» → «Проверка конфигурации»). Для вызовов общих модулей платформа находит несоответствие ещё при проверке.
  4. Если пропускаете необязательный параметр в середине списка, оставьте на его месте запятую: Метод(А, , В).

После обновления типовой конфигурации

Типовые процедуры БСП и прикладных подсистем иногда меняют список параметров. Если ошибка возникает в доработанном коде или расширении, сравните сигнатуру метода в новом релизе и поправьте вызов. Для перехватов в расширении с аннотациями &Перед, &После и &Вместо набор параметров должен совпадать с исходным методом, иначе расширение не применится или выдаст ошибку.

Встроенные методы платформы

Та же ошибка возникает при вызове встроенных функций и конструкторов с неверным числом параметров, например Новый HTTPСоединение() без адреса сервера. Сверяйтесь с синтаксис-помощником: для каждого метода там указаны обязательные и необязательные параметры, а у некоторых методов есть несколько вариантов синтаксиса.

Частые вопросы

Почему ошибка видна только при выполнении, а не при проверке модуля?

Если метод вызывается у объекта, тип которого определяется во время работы (например, через переменную), платформа не может проверить вызов заранее. Вызовы общих модулей проверяются при синтаксическом контроле.

Можно ли сделать параметр необязательным у уже используемого метода?

Да, задайте ему значение по умолчанию в объявлении. Существующие вызовы с полным набором параметров продолжат работать.

Процедуры и функции в 1С: синтаксис, параметры, экспорт и общие модули

Алгоритмы

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

Расширение конфигурации 1С: создание, установка и перехват методов

Алгоритмы

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

БСП 1С: Библиотека стандартных подсистем для разработчика

БСП 2.3

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

Похожие ошибки