Имя: Пароль:
1C
1С v8
Почему &НаКлиенте Сообщить() отрабатывает. &НаСервере не видно результата
0 gugolovski
 
17.03.26
03:59
Когда в модуле указано &НаКлиенте получаю сообщения, если указывается &НаСервере не видно результатов.


Процедура ВыполнитьКоманда(Команда)
М = Новый Массив;
М.Добавить(1);
М.Добавить(8);
М.Добавить(15);
М.Добавить(45);
Для каждого сч из М Цикл
    Сообщить(сч);
КонецЦикла;

КонецПроцедуры
1 NorthWind
 
17.03.26
04:04
А вы включите логику и подумайте - где оно должно на сервере отображаться и кто его там увидит?
2 gugolovski
 
17.03.26
04:13
(1) логично) А можно еще вопрос:
/////////////////////////////////
&НаКлиенте
Процедура Два(пых)
    для Инд=0 по пых.Количество()-1 Цикл
    Сообщить(пых[Инд]);
    КонецЦикла;    
КонецПроцедуры

Процедура ВыполнитьКоманда(Команда)

М = Новый Массив;
М.Добавить(1);
М.Добавить(8);
М.Добавить(15);
М.Добавить(45);
Два(М);
КонецПроцедуры
/////////////////////////////////
{ВнешняяОбработка.СравниУуправляемое.Форма.Форма.Форма(18,1)}: Процедура или функция с указанным именем не определена (Два)
<<?>>Два(М);  (Проверка: Сервер)

Почему это возвращает ошибку. Я же объявил процедуру
3 ads55
 
17.03.26
05:25
(2) Потому что с сервера клиент не вызывается. Не указанная директива = &НаСервере
4 gugolovski
 
17.03.26
05:34
(3) А если указать вот так:

///////
Процедура Два(пых)
    для Инд=0 по пых.Количество()-1 Цикл
    Сообщить(пых[Инд]);
    КонецЦикла;    
КонецПроцедуры

Процедура ВыполнитьКоманда(Команда)

М = Новый Массив;
М.Добавить(1);
М.Добавить(8);
М.Добавить(15);
М.Добавить(45);
Два(М);
КонецПроцедуры

//////////////////

все происходит на сервере и что выдает метод "Сообщить()" непонятно: обработка ничего не возращает. как мне написать код с вложенной процедурой, чтоб он мне вернул ответ
5 ads55
 
17.03.26
05:43
(4) Для данного случая можно так:

&НаСервере
Процедура Два(пых, чих)
для Инд=0 по пых.Количество()-1 Цикл
чих.Добавить(пых[Инд]);
КонецЦикла;    
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьКоманда(Команда)
М = Новый Массив;
М.Добавить(1);
М.Добавить(8);
М.Добавить(15);
М.Добавить(45);
мС = Новый Массив;
Два(М, мС);
Если мС.Количество() > 0 Тогда
Для каждого ЭлМ Из мС Цикл
Сообщить(ЭлМ);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
6 b_ru
 
17.03.26
05:45
>>как мне написать код с вложенной процедурой, чтоб он мне вернул ответ

Сделать серверную процедуру функцией, которая возвращает ответ. Вызвать ее на клиенте и Сообщить полученный ответ.
7 2S
 
17.03.26
07:22
Использовать БСП и ипать мозг
ОбщегоНазначенияКлиентСервер.СообщитьПользователю
8 Мультук
 
гуру
17.03.26
07:45
(0)

1) Как вы это делаете {нехороший эпитет}?

2) Пишем простую обработку

Форма (с событием ПриОткрытии) и команда (Кнопка)
Открываем форму, жмём кнопку

//Нажатие кнопки (команды)

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


&НаСервере
Процедура КомандаАляляНаСервере()
	Сообщить("КомандаАляляНаСервере");
КонецПроцедуры


//Событие формы "ПриОткрытии"

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

&НаСервере
Процедура ПриОткрытииНаСервере()
	Сообщить("ПриОткрытииНаСервере");
КонецПроцедуры



Получаем оба сообщения (см рис)
9 vicof
 
17.03.26
07:52
Я бы ещё любую книжку по восьмой платформе посоветовал почитать
10 DrZombi
 
гуру
17.03.26
08:04
(0) Не используйте Сообщить, это от прошлых толстых клиентах.

На УФ надо использовать "Сообщение = Новый СообщениеПользователю;"

При выполнении на Сервере, или на сервере через "Фоновое Задание", у вас есть метод "ПолучитьСообщенияПользователю()"

... И как-то так ...
11 Fish
 
гуру
17.03.26
09:12
Стаж 12 лет....
12 Ненавижу 1С
 
гуру
17.03.26
09:30
(8) тоже был удивлен
13 unenu
 
17.03.26
09:35
Когда использовал Сообщить, то принял негласное правило -
только через переменную. Как-то обсуждали, что без переменной в некоторых случаях не сообщает.

Для каждого сч из М Цикл
    ТекстСообщения = Строка(сч); 
    Сообщить(ТекстСообщения);
КонецЦикла;
14 1cVandal
 
17.03.26
10:23
(8) теперь в модуле попробуй, ом или объекта.. а не на форме.. затем подумать