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

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) Можно и так в серверной функции сделать
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день