Здравствуйте. Есть простая задача, заполнить регистр сведений данными по циклу,посчитать и сообщить сколько элементов добавилось. Цикл реализуется на &НаСервере, подсчет тоже. Как передать значение переменной КоличествоЭлементов &На Клиент и вывести сообщение.
---
в данном случае есть еще как минимум 2 решения.
1. Передавать в серверную процедуру параметр ДобавленоЭлементов.
2. Переделать серверную процедуру на функцию и возвращать ДобавленоЭлементов.
И уже полученный параметр выводить.

Но это уже на усмотрение. Предыдущее решение ничем не хуже в данном конкретном случае.
---
смотря как реализовано заполнение.
Если это внешняя обработка, то вначале выполняется код на клиенте. Затем передается управление на сервер.
На сервере возможно использовать СообщениеПользователю.
По возвращении на клиент сообщение будет показано.

Если это регламентное задание, то тут все сложнее.
---
Заполнение происходит из запроса . ...Не совсем поняла, СообщениеПользователю на сервере вроде не доступно..
---
это внешняя обработка? Открывается форма обработки и нажимается кнопка?
Если так, тогда это первый вариант.

СообщениеПользователю
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).

Только сообщение будет показано не сразу, а при возврате на клиент.
---
заполнение по кнопке
---
тогда будет работать СообщениеПользователю.
---
Мне на пальцах можно если что, а то с упр. приложением только столкнулась
---
это модуль регистра сведений
---
хорошо, давайте с самого начала. Как вызывается метод в этом модуле?
---
```1c
    &НаСервереБезКонтекста
    Процедура ЗаполнитьИзСпрНоменклатураНаСервере()
    ОсновнаяОрганизация = ПользователиБКВызовСервераПовтИсп.ПолучитьЗначениеПоУмолчанию(Пользователи.ТекущийПользователь, "ОсновнаяОрганизация");

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

    Результат = Запрос.Выполнить().Выбрать(); //Выборка ссылок справочника "номенклатура"

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

    ЧистыйРегистр = ЗапросРегистра.Выполнить();
    Если ЧистыйРегистр.Пустой() Тогда
    // Проверка регистра на наличие номенклатуры.
    // Если выбранная номенклатура уже имеется, то новая строка создаваться не будет.
    ОсновнаяОрганизация = ПользователиБКВызовСервераПовтИсп.ПолучитьЗначениеПоУмолчанию(Пользователи.ТекущийПользователь, "ОсновнаяОрганизация");
    ЗаписьРегистра = РегистрыСведений.УстановкаСоответсвияНоменклатуры_и_СтатьиЗатрат.СоздатьНаборЗаписей();

    //ЗаписьРегистра.Отбор.Организация.Установить(ОсновнаяОрганизация);
    ЗаписьРегистра.Отбор.Номенклатура.Установить(Результат.Номенклатура);
    мЗаписьРегистра = ЗаписьРегистра.Добавить();
    мЗаписьРегистра.Организация = ОсновнаяОрганизация;
    мЗаписьРегистра.Номенклатура = Результат.Номенклатура;
    мЗаписьРегистра.СтатьяЗатрат = Результат.СтатьяЗатрат;
    мЗаписьРегистра.Подразделение = Справочники.ПодразделенияОрганизаций.ПустаяСсылка();
    мЗаписьРегистра.СтатьиЗакупаСнабжения=Результат.СтатьяЗакупаСнабжения;
    мЗаписьРегистра.ПодстатьяПритокаОттока=Результат.ПодстатьяПритокаОттока;
    мЗаписьРегистра.ЦельПоступленияВыбытия=Результат.ЦелиПоступленияВыбытия;
    мЗаписьРегистра.Исключение = Ложь;
    мЗаписьРегистра.Период = ТекущаяДата();
    ЗаписьРегистра.Записать();
    ДобавленоЭлементов = ДобавленоЭлементов + 1;

    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры

    &НаКлиенте
    Процедура ЗаполнитьИзСпрНоменклатура(Команда)

    ЗаполнитьИзСпрНоменклатураНаСервере();
    //Сообщить("Добавлено элементов = " + Строка(ДобавленоЭлементов));

    КонецПроцедуры
```
---
смело добавляете СообщениеПользователю.
Только не в цикле кучу сообщений, а то будет выведены эти сообщения скопом.
Можно в конце серверной процедуры:

```1c
    ...
    ДобавленоЭлементов = ДобавленоЭлементов + 1;

    КонецЕсли;
    КонецЦикла;

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Добавлено "+ДобавленоЭлементов+" элементов";
    Сообщение.Сообщить();
    КонецПроцедуры
```
---
в данном случае есть еще как минимум 2 решения.
1. Передавать в серверную процедуру параметр ДобавленоЭлементов.
2. Переделать серверную процедуру на функцию и возвращать ДобавленоЭлементов.
И уже полученный параметр выводить.

Но это уже на усмотрение. Предыдущее решение ничем не хуже в данном конкретном случае.
---
Понятно. Спасибо большое.