Для методов с неопределенным количеством параметров, если обявление не совпадает с реализацией, то поведение становится немного необычным. При вызове метода никто не ругается, но сам метод не получает доп. параметров. Ошибка из разряда неуловимых.
Хедер:
class EllipseTest = EllipseTest.txt
{
void TheTest_Wrong(String p1, ...);
void TheTest_Right(String p1, ...);
};
Реализация:
Функция Сам(Конт) Возврат Конт; КонецФункции //:Контекст
Процедура TheTest_Wrong(Знач П1) Экспорт
Сам = Сам(Контекст);
Сообщить("П1 = "+П1);
сзПараметры = Сам.ПолучитьСписокПараметров("TheTest_Wrong");
Сообщить("Доп. параметров: "+сзПараметры.РазмерСписка());
КонецПроцедуры
Процедура TheTest_Right(П1) Экспорт
Сам = Сам(Контекст);
Сообщить("П1 = "+П1);
сзПараметры = Сам.ПолучитьСписокПараметров("TheTest_Right");
Сообщить("Доп. параметров: "+сзПараметры.РазмерСписка());
КонецПроцедуры
Вызов:
роцедура Тест()
EllipseTest = СоздатьОбъект("EllipseTest");
Сообщить("TheTest_Right:");
EllipseTest.TheTest_Right("п1", "п2", "п3");
Сообщить("
|TheTest_Wrong:");
EllipseTest.TheTest_Wrong("п1", "п2", "п3");
КонецПроцедуры
Результат:
Цитата:TheTest_Right:
П1 = п1
Доп. параметров: 2
TheTest_Wrong:
П1 = п1
Доп. параметров: 0
В какой момент сменилось поведение пока не понятно, но точно могу сказать что так не было в версии 2.5 от 14.03.08, и в icpp от 28.03.08