Здравствуйте, дорогие форумчане! Нужно с сервера через запрос узнать, есть ли у менеджера документ на текущую дату. Если есть, то открыть на форме этот документ, а если нет, то сделать предупреждение и заблокировать форму. Так как предупреждение не работает на сервере, я решил написать функцию на сервере без контекста, которая через запрос узнает пустая ли ссылка или нет. Но как это оформить грамотно, я не понимаю. Не судите строго, начинающий. Что у меня есть на данный момент, представлено ниже. Но конфигурато ругается на "Объект.Менеджер", я не могу понять почему. И я не понимаю как поймать возврат на клиенте.

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

    Если РезультатЗапроса.Пустой() Тогда
    Возврат Истина
    Иначе
    Возврат Ложь
    КонецЕсли;
    КонецЕсли;
    КонецФункции
```
---
Не выдержу наверное...

```1c
    &НаКлиенте
    Процедура МенеджерПриИзменении(Элемент)
    Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
    Если МенеджерПриИзмененииНаСервере(Объект.Менеджер) Тогда
    /////
    Иначе ////
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```

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

Учите матчасть...
---
&НаСервереБезКонтекста предполагает что все параметры будут переданы в функцию, контекса формы не будет.
Нужно передать МенеджерПриИзмененииНаСервере(Менеджер)
---
Так и передал, но ошибка: Недостаточно фактических параметров
---
правильно ругается. Если вы хотите обращаться к реквизиту формы на сервере, то или передавайте его в параметрах функции или измените инструкцию препроцессора на &НаСервере
---
Я переделал, и в параметры функции добавил "Менеджер" и само условие перенес на клиент. Правильно ли так делать?

```1c
    &НаКлиенте
    Процедура МенеджерПриИзменении(Элемент)
    Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
    ФизическоеЛицоПриИзмененииНаСервере();
    Если Тогда
    ////
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры

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

Где здесь вызов МенеджерПриИзмененииНаСервере(Менеджер) ?
---
Ой, я не заметил, но при этом даже после добавления выдает ошибку: Переменная не определена (Менеджер)
---
Так написано МенеджерПриИзмененииНаСервере(объект.Менеджер)
---
Где такое написано?
---
в коде &наклиенте? Приведите его полностью, чтобы было понятно все ли правильно.
---
Его я еще не дописал,но там будет что-то такое:

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

```1c
    &НаКлиенте
    Процедура МенеджерПриИзменении(Элемент)
    Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
    Если МенеджерПриИзмененииНаСервере(Объект.Менеджер) Тогда
    /////
    Иначе ////
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```

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

Учите матчасть...
---
Спасибо огромное, конечно же. Но я хотел бы задать Вам вопрос про процедуру.
(16) Если МенеджерПриИзмененииНаСервере(Объект.Менеджер) Тогда
Разве я должен заносить исполнение функции в условие?
---
Если функция возвращает значение, то ее можно использовать в различных выражениях. Здесь, кстати, функция возвращает истина, если в результате запроса есть данные. По-моему у вас было условие изначально если в запросе нет данных. Это уже переделаете как вам удобнее будет.

Если вам будет более понятно, можно сделать так:

```1c
    &НаКлиенте
    Процедура МенеджерПриИзменении(Элемент)
    Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
    ЕстьДокументыМенеджера = МенеджерПриИзмененииНаСервере(Объект.Менеджер);
    Если ЕстьДокументаМенеджера Тогда
    /////
    Иначе ////
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```
---
```1c
    Если РезультатЗапроса.Пустой() Тогда
    Результат = Истина
    Иначе
    Результат = Ложь
    КонецЕсли;

    Возврат Результат;
```

Вы имеете в виду подобный образ записи?
---
Можно и так в серверной функции сделать