Имя: Пароль:
1C
1С v8
Добавляю внешнюю обработку как команду на форму - "Слишком много фактических параметров"
0 Bahamut
 
03.12.18
03:55
Добрый день!
Ситуация следующая: необходимо добавить возможность создания и заполнения одного документа на основе другого не снимая конфигурацию с поддержки. Для этого я создал внешнюю обработку вида СозданиеСвязанныхОбъектов, в качестве назначения указал документ-основание, в таблицу команд добавил одну команду. При открытии документа в 1С видно, что команда успешно встроилась в меню "Создать на основании", но при попытке запуска выдаёт "Слишком много фактических параметров". У процедуры ВыполнитьКоманду 2 параметра, я пробовал задавать 10, пробовал 0 - итог один и тот же. Команда вызывается как серверный метод, но при использовании клиентского та же ситуация. Вот код из модуля обработки:

Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "СозданиеСвязанныхОбъектов");

    ПараметрыРегистрации.Вставить("Наименование", "Договор на основании заказа");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация", "Договор на основании заказа");
    ПараметрыРегистрации.Вставить("ВерсияБСП", "2.0.7.6");
    
    МассивНазначений = Новый Массив();
    МассивНазначений.Добавить("Документ.ЗаказПокупателя");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд,
    "Договор на основании заказа",
    "1",
    "ВызовСерверногоМетода",
    Истина,""

    );
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

Процедура ВыполнитьКоманду(ИмяКоманды, ПараметрыВыполнения) Экспорт//(ИмяКоманды, ПараметрыВыполнения) Экспорт
    
    ВызватьИсключение("1231");
    // Диспетчеризация обработчиков команд.
    Если ИмяКоманды = "1" Тогда
        СоздатьДоговорИзЗаказа(ПараметрыВыполнения);//(ПараметрыВыполнения);
    КонецЕсли;
    
КонецПроцедуры

Программа не доходит даже до исключения. Гугл молчит, даже самые прошаренные мужи из офиса лишь хмурят брови.
1 Bahamut
 
03.12.18
03:56
Случайно нажал на "отправить", не дописал сам вопрос. Так вот, в чём может быть проблема? Как это решить?

Заранее спасибо!
2 Bahamut
 
03.12.18
04:02
Забыл уточнить:
УНФ 1.6.15.65
1С 8.3.10.2650
3 Mankubus
 
03.12.18
06:52
(0) найди отладчиком место где вызывается твоя команда и посмотри сколько параметров туда передаётся
4 Мимохожий Однако
 
03.12.18
07:04
Оставь у процедуры ВыполнитьКоманду() только первый параметр
5 Bahamut
 
04.12.18
07:34
Всё, разобрался. На инфостарте пишут, что если обработка вида СозданиеСвязанныхОбъектов, а команда - ВызовСерверногоМетода, то у процедуры ВыполнитьКоманду должно быть 4 параметра. У меня 1С почему-то ругалась на 4-й, поэтому я решил проблему так:

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполнения=Неопределено) Экспорт
2 + 2 = 3.9999999999999999999999999999999...