Добрый день, Друзья!
Пишу внешнюю обработку, которая будет отправлять на почту список заказов с минимальной суммой за указанный промежуток времени.
Но никак не могу понять почему вылетает ошибка:
{ВнешняяОбработка.ОповещениеРуководителяОКрупныхЗаказах.Форма.Форма.Форма(5)}: Недостаточно фактических параметров
 ОбработкаОбъект.ОтправкаСообщения();
Код:
Модуль формы:

```1c
    &НаСервере
    Процедура ОтправитьНаСервере()
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    ОбработкаОбъект.ОтправкаСообщения();
    ЗначениеВРеквизитФормы(ОбработкаОбъект,"Объект");
    КонецПроцедуры

    &НаКлиенте
    Процедура Отправить(Команда)
    ОтправитьНаСервере();
    КонецПроцедуры

    Модуль объекта:
    Процедура ВыборкаКрупныхЗаказов()Экспорт;
    МассивНомерЗаказа = Новый Массив;
    МассивДата = Новый Массив;
    МассивКлиент = Новый Массив;
    МассивСумма = Новый Массив;
    МассивМенеджер = Новый Массив;

    Форма=ЭтотОбъект.ПолучитьФорму("Форма");

    //Создаем необходимые массивы
    МассивНомерЗаказа = Новый Массив;

    //Запрос интересующих заказов
    ЗапросНомер = Новый Запрос;
    ЗапросНомер.Текст =
    "ВЫБРАТЬ
    | ЗаказКлиента.Номер КАК Номер,
    | ЗаказКлиента.Дата КАК Дата,
    | ЗаказКлиента.Партнер КАК Партнер,
    | ЗаказКлиента.СуммаДокумента КАК СуммаДокумента,
    | ЗаказКлиента.Менеджер КАК Менеджер
    |ИЗ
    | Документ.ЗаказКлиента КАК ЗаказКлиента
    |ГДЕ
    | ЗаказКлиента.СуммаДокумента >= &Сумма
    | И ЗаказКлиента.Дата МЕЖДУ &Дата1 И &Дата2
    | И ЗаказКлиента.Проведен = &Проведен
    | И ЗаказКлиента.ПометкаУдаления = &ПометкаУдаления";
    ЗапросНомер.УстановитьПараметр("Дата1", Форма.ЭлементыФормы.Реквизит.Период.ДатаНачала);
    ЗапросНомер.УстановитьПараметр("Дата2", Форма.ЭлементыФормы.Реквизит.Период.ДатаОкончания);
    ЗапросНомер.УстановитьПараметр("Сумма", Форма.ЭлементыФормы.Реквизит.Сумма);
    ЗапросНомер.УстановитьПараметр("Проведен", Истина);
    ЗапросНомер.УстановитьПараметр("ПометкаУдаления", Ложь);
    Результат = ЗапросНомер.Выполнить();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    МассивНомерЗаказа.Добавить(ВыборкаДетальныеЗаписи.Номер);
    МассивДата.Добавить(ВыборкаДетальныеЗаписи.Дата);
    МассивКлиент.Добавить(ВыборкаДетальныеЗаписи.Партнер);
    МассивСумма.Добавить(ВыборкаДетальныеЗаписи.СуммаДокумента);
    МассивМенеджер.Добавить(ВыборкаДетальныеЗаписи.Менеджер);
    КонецЦикла;
    ВычислениеОбщейСуммы(МассивСумма)
    КонецПроцедуры

    Функция ВычислениеОбщейСуммы(МассивСумма)Экспорт //Вычисляет общую сумму интересующих нас заказо
    ОбщаяСумма = 0;
    Счетчик = 0;
    Пока Счетчик < МассивСумма.Количество() Цикл
    ОбщаяСумма = ОбщаяСумма + МассивСумма[Счетчик];
    Счетчик = Счетчик + 1;
    КонецЦикла;
    Возврат ОбщаяСумма;
    КонецФункции

    Процедура ОтправкаСообщения(МассивНомерЗаказа, МассивДата, МассивКлиент, МассивСумма, МассивМенеджер)Экспорт; //Создаем почтовый профиль
    Форма=ЭтотОбъект.ПолучитьФорму("Форма");
    ОбщаяСумма = ОбщаяСумма.ВычислениеОбщейСуммы();
    ИПП = Новый ИнтернетПочтовыйПрофиль;
    ИПП.POP3ПередSMTP = Ложь;
    ИПП.АдресСервераSMTP = "smtp.yandex.ru";
    ИПП.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
    ИПП.ИспользоватьSSLSMTP = Истина;
    ИПП.ПользовательSMTP = ("отправитель*yandex.ru");
    ИПП.ПарольSMTP = ("пароль");
    ИПП.ПортSMTP = 465;
    ИПП.Таймаут = 50;

    //Создаем сообщение
    Сообщение = Новый ИнтернетПочтовоеСообщение;
    Сообщение.Получатели.Добавить("получатель*mail.ru");
    Сообщение.Отправитель.Адрес = "отправитель*yandex.ru";
    Сообщение.Отправитель.ОтображаемоеИмя = "Имя";
    Сообщение.Тема = "Крупные заказы за период с " + Формат(Форма.ЭлементыФормы.Реквизит.Период.ДатаНачала,"ДФ='дд ММММ гггг'") + " по " + Формат(Форма.ЭлементыФормы.Реквизит.Период.ДатаОкончания,"ДФ='дд ММММ гггг'");
    Текст = "Здравствуйте, Иван Иванович!";
    Текст = Текст + "Список заказов на сумму от " + Форма.ЭлементыФормы.Реквизит.Сумма + " руб. за период с " + Формат(Форма.ЭлементыФормы.Реквизит.Период.ДатаНачала,"ДФ='дд ММММ гггг'") + " по " + Формат(Форма.ЭлементыФормы.Реквизит.Период.ДатаОкончания,"ДФ='дд ММММ гггг'") + ":";
    Текст = Текст + "<table><table border='1px'>";
    Текст = Текст + "<st yle>table{border-collapse: collapse;}</style>";
    Текст = Текст + "<tr><td>№</td><td>Дата</td><td>Клиент</td><td>Сумма</td><td­>Менеджер</td></tr>";
    Счетчик = 0;
    Пока Счетчик < МассивНомерЗаказа.Количество() Цикл
    Текст = Текст + "<tr>";
    Текст = Текст + "<td>" + МассивНомерЗаказа[Счетчик] + "</td>";
    Текст = Текст + "<td>" + Формат(МассивДата[Счетчик], "ДФ=дд.ММ.гггг") + "</td>";
    Текст = Текст + "<td>" + МассивКлиент[Счетчик] + "</td>";
    Текст = Текст + "<td>" + Формат(МассивСумма[Счетчик],"ЧДЦ=") + "</td>";
    Текст = Текст + "<td>" + МассивМенеджер[Счетчик] + "</td>";
    Текст = Текст + "</tr>";
    Счетчик = Счетчик +1;
    КонецЦикла;
    Текст = Текст + "</table>";
    Текст = Текст + "Всего" + + МассивНомерЗаказа.Количество() + " на сумму " + Формат(ОбщаяСумма,"ЧДЦ=") + " (" + ЧислоПрописью(Формат(ОбщаяСумма,"ЧДЦ="),,",,,,,,,,0") + ")" + " руб.";
    Сообщение.Тексты.Добавить(Текст,ТипТекстаПочтовогоСообщения.HTML);
    Сообщение.ОбработатьТексты();

    Попытка //Пытаемся отправить сообщение
    Почта = Новый ИнтернетПочта;
    Почта.Подключиться(ИПП);
    Почта.Послать(Сообщение);
    Почта.Отключиться();
    РезультатОтправки = Истина;
    Сообщить ("Письмо отправлено!");
    Исключение
    Сообщить("Письмо НЕ отправлено!");
    Сообщить(ОписаниеОшибки());
    КонецПопытки;
    КонецПроцедуры
```
---
Сделай лучше так:
Процедуру ВыборкаКрупныхЗаказов сделай функцией.

```1c
    В конце функции создай структуру:
    СтруктураМассивов = Новый Структура();
    СтруктураМассивов.Вставить("МассивНомеровЗаказов",МассивНомеровЗаказов);
    СтруктураМассивов.Вставить("МассивНомеровДата",МассивДата);
    СтруктураМассивов.Вставить("МассивКлиент",МассивКлиент);
    СтруктураМассивов.Вставить("МассивСумма",МассивСумма);
    СтруктураМассивов.Вставить("МассивМенеджер",МассивМенеджер);

    Возврат СтруктураМассивов;

    &НаСервере
    Процедура ОтправитьНаСервере()
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    //Здесь получаете все ваши массивы
    СтруктураМассивов = ОбработкаОбъект.ВыборкаКрупныхЗаказов();
    ОбработкаОбъект.ОтправкаСообщения(СтруктураМассивов.МассивНомерЗаказа, СтруктураМассивов.МассивДата, СтруктураМассивов.МассивКлиент, СтруктураМассивов.МассивСумма, СтруктураМассивов.МассивМенеджер);
    ЗначениеВРеквизитФормы(ОбработкаОбъект,"Объект");
    КонецПроцедуры
```

Где-то так
---
Вот описание процедуры:
Процедура ОтправкаСообщения(МассивНомерЗаказа, МассивДата, МассивКлиент, МассивСумма, МассивМенеджер) Экспорт

А вот вызов: ОбработкаОбъект.ОтправкаСообщения();

В описании процедуры 5 параметров, а при вызове вы не передаете ни одного.
---
МассивНомерЗаказа, МассивДата, МассивКлиент, МассивСумма, МассивМенеджер
Да, но если я указываю эти параметры, то у меня вылезают синтаксические ошибки о том, что переменные не определены
---
Нужно делать так:

```1c
    &НаСервере
    Процедура ОтправитьНаСервере()
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    //Здесь получаете все ваши массивы
    ОбработкаОбъект.ОтправкаСообщения(МассивНомерЗаказа, МассивДата, МассивКлиент, МассивСумма, МассивМенеджер);
    ЗначениеВРеквизитФормы(ОбработкаОбъект,"Объект");
    КонецПроцедуры
```
---
Все равно появляются ошибки о том, что переменные не определены
---
Тогда появляется следующая ошибка:

{ВнешняяОбработка.ОповещениеРуководителяОКрупныхЗаказах.Форма.Форма.Форма(5)}: Поле объекта не обнаружено (ВыборкаКрупныхЗаказов)
 СтруктураМассивов = ОбработкаОбъект.ВыборкаКрупныхЗаказов;

Я так понимаю, что теперь в процедуре "Отправка сообщения", нужно достать массивы из структуры?
---
Сообщение было скрыто модератором.
---
Сделай лучше так:
Процедуру ВыборкаКрупныхЗаказов сделай функцией.

```1c
    В конце функции создай структуру:
    СтруктураМассивов = Новый Структура();
    СтруктураМассивов.Вставить("МассивНомеровЗаказов",МассивНомеровЗаказов);
    СтруктураМассивов.Вставить("МассивНомеровДата",МассивДата);
    СтруктураМассивов.Вставить("МассивКлиент",МассивКлиент);
    СтруктураМассивов.Вставить("МассивСумма",МассивСумма);
    СтруктураМассивов.Вставить("МассивМенеджер",МассивМенеджер);

    Возврат СтруктураМассивов;

    &НаСервере
    Процедура ОтправитьНаСервере()
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    //Здесь получаете все ваши массивы
    СтруктураМассивов = ОбработкаОбъект.ВыборкаКрупныхЗаказов();
    ОбработкаОбъект.ОтправкаСообщения(СтруктураМассивов.МассивНомерЗаказа, СтруктураМассивов.МассивДата, СтруктураМассивов.МассивКлиент, СтруктураМассивов.МассивСумма, СтруктураМассивов.МассивМенеджер);
    ЗначениеВРеквизитФормы(ОбработкаОбъект,"Объект");
    КонецПроцедуры
```

Где-то так
---
Тогда появляется следующая ошибка:

{ВнешняяОбработка.ОповещениеРуководителяОКрупныхЗаказах.Форма.Форма.Форма(5)}: Поле объекта не обнаружено (ВыборкаКрупныхЗаказов)
СтруктураМассивов = ОбработкаОбъект.ВыборкаКрупныхЗаказов;

Я так понимаю, что теперь в процедуре "Отправка сообщения", нужно достать массивы из структуры?
---
СтруктураМассивов = ОбработкаОбъект.ВыборкаКрупныхЗаказов(); в конце круглых скобки нет, вот и ошибка
---
Пишет:
{ВнешняяОбработка.ОповещениеРуководителяОКрупныхЗаказах.МодульОбъекта(8)}: Ошибка при вызове метода контекста (ПолучитьФорму)
 Форма=ЭтотОбъект.ПолучитьФорму("Форма");
по причине:
Интерактивные операции недоступны
---
А зачем тебе форму получать. Просто передай в функцию значения реквизита формы.
Ты же функцию из формы изначально вызываешь.
Я же не могу за тебя весь код писать.
---
Я понимаю, извини.
Просто весь день вожусь с этой обработкой, и мозги уже слабо соображают.

Если не сложно ответь на последний вопрос:
Ты пишешь "А зачем тебе форму получать?"
Ты имеешь ввиду в процедуре "Отправка сообщения"?
---
В ВыборкаКрупныхЗаказов()
---
Понял.
Ты мне очень помог, благодарю!