Как через функцию получить данные на клиенте?

1. Varlant1n 14.01.21 10:03 Сейчас в теме +0.1 $m
Здравствуйте, дорогие форумчане! Нужно с сервера через запрос узнать, есть ли у менеджера документ на текущую дату. Если есть, то открыть на форме этот документ, а если нет, то сделать предупреждение и заблокировать форму. Так как предупреждение не работает на сервере, я решил написать функцию на сервере без контекста, которая через запрос узнает пустая ли ссылка или нет. Но как это оформить грамотно, я не понимаю. Не судите строго, начинающий. Что у меня есть на данный момент, представлено ниже. Но конфигурато ругается на "Объект.Менеджер", я не могу понять почему. И я не понимаю как поймать возврат на клиенте.

&НаСервереБезКонтекста
Функция МенеджерПриИзмененииНаСервере()
       Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	ЗаданиеМенеджера.Ссылка КАК Ссылка
		|ИЗ
		|	Документ.ЗаданиеМенеджера КАК ЗаданиеМенеджера
		|ГДЕ
		|  ЗаданиеМенеджера.Проведен = ИСТИНА
		|	И НАЧАЛОПЕРИОДА(ЗаданиеМенеджера.Дата, День) = НАЧАЛОПЕРИОДА(&ТекущаяДата, День)
		|	И ЗаданиеМенеджера.Менеджер = &Менеджер";
		Запрос.УстановитьПараметр("Менеджер",Объект.Менеджер);
		Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
		РезультатЗапроса = Запрос.Выполнить();
		
		Если РезультатЗапроса.Пустой() Тогда
			Возврат Истина		
		Иначе 
			Возврат Ложь
		КонецЕсли;
	КонецЕсли;
КонецФункции
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
16. andy_zhav 197 14.01.21 11:30 Сейчас в теме +0.3 $m
(13) Не выдержу наверное...

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

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



Учите матчасть...
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. tolyan_ekb 104 14.01.21 10:26 Сейчас в теме
(1)
&НаСервереБезКонтекста
предполагает что все параметры будут переданы в функцию, контекса формы не будет.
Нужно передать МенеджерПриИзмененииНаСервере(Менеджер)
5. Varlant1n 14.01.21 10:27 Сейчас в теме
(3)Так и передал, но ошибка: Недостаточно фактических параметров
2. andy_zhav 197 14.01.21 10:08 Сейчас в теме
(1) правильно ругается. Если вы хотите обращаться к реквизиту формы на сервере, то или передавайте его в параметрах функции или измените инструкцию препроцессора на &НаСервере
FatPanzer; +1 Ответить
4. Varlant1n 14.01.21 10:26 Сейчас в теме
(2)Я переделал, и в параметры функции добавил "Менеджер" и само условие перенес на клиент. Правильно ли так делать?

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

&НаСервереБезКонтекста
Функция МенеджерПриИзмененииНаСервере(Менеджер)
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	ЗаданиеМенеджера.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.Менеджер КАК Менеджер
	|ГДЕ
	|  Менеджер.Проведен = ИСТИНА
	|	И НАЧАЛОПЕРИОДА(Менеджер.Дата, День) = НАЧАЛОПЕРИОДА(&ТекущаяДата, День)
	|	И ЗаданиеМенеджера.Менеджер = &Менеджер";
	Запрос.УстановитьПараметр("Менеджер", Менеджер);
	Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
	РезультатЗапроса = Запрос.Выполнить();	
КонецФункции
Показать
6. tolyan_ekb 104 14.01.21 10:28 Сейчас в теме
(4) Не вижу на клиенте
МенеджерПриИзмененииНаСервере(Менеджер)
7. Varlant1n 14.01.21 10:29 Сейчас в теме
8. tolyan_ekb 104 14.01.21 10:30 Сейчас в теме
(7)
&НаКлиенте
Процедура МенеджерПриИзменении(Элемент)
    Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
        ФизическоеЛицоПриИзмененииНаСервере();
        Если Тогда
              ////
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Показать

Где здесь вызов МенеджерПриИзмененииНаСервере(Менеджер) ?
9. Varlant1n 14.01.21 10:39 Сейчас в теме
(8) Ой, я не заметил, но при этом даже после добавления выдает ошибку: Переменная не определена (Менеджер)
10. tolyan_ekb 104 14.01.21 10:42 Сейчас в теме
(9) Так написано МенеджерПриИзмененииНаСервере(объект.Менеджер)
11. Varlant1n 14.01.21 10:50 Сейчас в теме
12. tolyan_ekb 104 14.01.21 10:53 Сейчас в теме
(11) в коде &наклиенте? Приведите его полностью, чтобы было понятно все ли правильно.
13. Varlant1n 14.01.21 10:56 Сейчас в теме
(12)Его я еще не дописал,но там будет что-то такое:

&НаКлиенте
Процедура МенеджерПриИзменении(Элемент)
	Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
		МенеджерПриИзмененииНаСервере(Менеджер);
		Если РезультатЗапроса.Пустой() Тогда
			/////
		Иначе ////
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
Показать
14. tolyan_ekb 104 14.01.21 10:58 Сейчас в теме
(13)Я пытаюсь сказать что вместо
МенеджерПриИзмененииНаСервере(Менеджер);
должно быть МенеджерПриИзмененииНаСервере(объект.Менеджер)
15. Varlant1n 14.01.21 11:01 Сейчас в теме
(14) В таком случае выдает ошибку о том, что "Ожидается символ ")" "
16. andy_zhav 197 14.01.21 11:30 Сейчас в теме +0.3 $m
(13) Не выдержу наверное...

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

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



Учите матчасть...
17. Varlant1n 14.01.21 11:44 Сейчас в теме
(16) Спасибо огромное, конечно же. Но я хотел бы задать Вам вопрос про процедуру.
(16)
Если МенеджерПриИзмененииНаСервере(Объект.Менеджер) Тогда

Разве я должен заносить исполнение функции в условие?
18. andy_zhav 197 14.01.21 11:50 Сейчас в теме
(17) Если функция возвращает значение, то ее можно использовать в различных выражениях. Здесь, кстати, функция возвращает истина, если в результате запроса есть данные. По-моему у вас было условие изначально если в запросе нет данных. Это уже переделаете как вам удобнее будет.

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

&НаКлиенте
Процедура МенеджерПриИзменении(Элемент)
    Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
        ЕстьДокументыМенеджера = МенеджерПриИзмененииНаСервере(Объект.Менеджер);
        Если ЕстьДокументаМенеджера Тогда
            /////
        Иначе ////
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Показать
19. Varlant1n 14.01.21 11:52 Сейчас в теме
(18)
Если РезультатЗапроса.Пустой() Тогда
		Результат = Истина
	Иначе
		Результат = Ложь
	КонецЕсли;
	
	Возврат Результат;
Показать


Вы имеете в виду подобный образ записи?
20. andy_zhav 197 14.01.21 11:53 Сейчас в теме
(19) Можно и так в серверной функции сделать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот