Здравствуйте, ещё не до конца разбираюсь в языке поэтому никак не могу понять. Имеется следующий код:

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

    Запрос.УстановитьПараметр("ИСТИНА", ИСТИНА);
    Запрос.УстановитьПараметр("Сотрудник", Сотр);

    РезультатЗапроса = Запрос.Выполнить();

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

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    СВСОТР = ВыборкаДетальныеЗаписи.Регистратор;
    Если НЕ ЗначениеЗаполнено(СВСОТР) Тогда

    Иначе

    Сообщить(СВСОТР);
    Объект.Сотрудник = ";
    Объект.ТабличнаяЧасть1.Очистить();
    КонецЕсли;
    КонецЦикла;

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

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

Не могу понять как сделать так, чтобы вместо:
```1c
    Сообщить(СВСОТР);
```
, появлялось окно с предупреждение НаКлиенте
---
попробуйте такой вариант (а еще не совсем понятно, сколько может быть документов)

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

    //Запрос.УстановитьПараметр("ИСТИНА", ИСТИНА);
    Запрос.УстановитьПараметр("Сотрудник", Объект.Сотрудник);

    РезультатЗапроса = Запрос.Выполнить();

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

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

    Возврат СВСОТР;

    КонецФункции

    &НаКлиенте
    Процедура СотрудникПриИзменении(Элемент)
    СВСОТР = СотрудникПриИзмененииНаСервере();
    Если Не ПустаяСтрока(СВСОТР) Тогда
    ПоказатьПредупреждение(,СВСОТР,20);
    КонецЕсли;
    КонецПроцедуры
```
---
Запрос.УстановитьПараметр("ИСТИНА", ИСТИНА);
ЭТО ПРОСТО ШЕДЕВР!!!!
---
Со временем придет понимание что
"| СведенияОСотрудниках.Работает = &ИСТИНА" соответствует "| СведенияОСотрудниках.Работает"

Когда начинаешь программировать и не такие перлы могут вылезать. ;) Мы же все когда то начинали с подобных "шедевров"

ЗЫ (4) | и СведенияОСотрудниках.Работает = ИСТИНА - тоже "хорошо" ;) .
---
Это же алгоритмический вопрос. Соответственно без использования логики не обойтись, если хочешь чего-то понять.
Чтобы вывести что-то на клиенте, надо вывод перенести на клиент.
Чтобы вывести это что-то при каком-то условии, условие должно быть известно на клиенте в момент вывода.
Условие формируется на сервере, значит, надо передать результат вычисления на клиент.
Ну вот когда это все будет закодировано, можно будет дальше смотреть.
---
попробуйте такой вариант (а еще не совсем понятно, сколько может быть документов)

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

    //Запрос.УстановитьПараметр("ИСТИНА", ИСТИНА);
    Запрос.УстановитьПараметр("Сотрудник", Объект.Сотрудник);

    РезультатЗапроса = Запрос.Выполнить();

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

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

    Возврат СВСОТР;

    КонецФункции

    &НаКлиенте
    Процедура СотрудникПриИзменении(Элемент)
    СВСОТР = СотрудникПриИзмененииНаСервере();
    Если Не ПустаяСтрока(СВСОТР) Тогда
    ПоказатьПредупреждение(,СВСОТР,20);
    КонецЕсли;
    КонецПроцедуры
```
---
Вот как раз таки это бесячее сообщение и нужно которое бы появлялось по центру. Что бы бухгалтер точно мог его заметить и не заполнил случайно ещё раз

(4)
В принципе, вот это как раз идеальный вариант. Спасибо большое
---
Лучше вместо бесячего окна предупреждения, которое будет постоянно появляться при изменении сотрудника, добавить рядом надпись с текстом "уже работает".

Безусловно очищать данные документа тоже такое себе.

И в качестве занятной особенности вашего кода - в проведенном документе попробуйте перевыбрать этого же сотрудника.
---
И в качестве занятной особенности вашего кода - в проведенном документе попробуйте перевыбрать этого же сотрудника.
- сразу всего не учтешь, остается простор для роста
---
Да я не спорю, просто указал на ошибку=)