Надо сделать отбор по текущему пользователю, т.е. в документе находиться сотрудники(пользователи) и если он зашел не под этим пользователем, то он галку поставить не может. Например, согласующий "администратор", я зашел под пользователем "администратор", соответственно я могу поставить галку только у себя, другим не могу.
Кто знает как сделать это?
---
Переписав код для работы на клиенте

```1c
    &НаКлиенте
    Процедура СогласующиеПередНачаломИзменения(Элемент, Отказ)

    ТекПольз = фПолучитьТекущегоВользователяНаСервере();
    ТекСтрока = Элементы.СписокСогласующий.ТекущиеДанные;
    Если ТекСтрока.Согласующие <> ТекПольз Тогда
    Отказ = Истина;
    КонецЕсли;

    КонецПроцедуры
```
---
И код будет выглядеть примерно так:

```1c
    ТекПольз = ПараметрыСеанса.ТекущийПользователь;
    ТекСтрока = Элементы.СписокСогласующий.ТекущиеДанные;
    Если ТекСтрока.Согласующие <> ТекПольз Тогда
    Отказ = Истина;
    КонецЕсли;
```
---
Нужно прописать, что то вроде:
Если ПараметрыСеанса.ТекущийПользователь <> Объект.Ответственный Тогда
//Запретить менять.
КонецЕсли;

Более детально не напишу, так как не понятно, что это список или обработка. Открывается документ или через список изменение делается.
---
Это документ, в котором добавлена вкладка эта, процедуру вызывается при изменении этой галки на сервере и клиенте.
---
Вам нужно поймать событие, если это флажки, то события у табличного поля ПриИзмененииФлажка,
---
Не совсем, у УФ нет такого события, оно есть только на обычных формах и с галками по сложней работать, так как нет события при изменение.
---
нет события при изменении - ЕСТЬ
---
Есть что? Изменение? или событие табличного поля "ПриИзменениеФлажака".
---
ПриИзменении
---
Верно, такое есть, а то что писал (5), ПриИзменениеФлажка, это именно событие обычных форм. А у самого флажка ни каких событий нет на обычных формах.
---
да да все верно, я ошибся
---
Попробуйте событие у табличного поля ПередНачаломИзменения(Элемент, Отказ)
И в нем напишите, если текущая колонка - ваша галочка и ПараметрыСеанса.ТекущийПользователь <> Объект.Ответственный Тогда Отказ = Истина
---
```1c
    Процедура ТЧОдобреноПриИзменении(Элемент)
    Если (Элементы.ТЧ.ТекущиеДанные.Согласующие <> ПараметрыСеанса.ТекущийПользователь) Тогда
    Элементы.ТЧ.ТекущиеДанные.Одобрено = НЕ Элементы.ТЧ.ТекущиеДанные.Одобрено;
    КонецЕсли;
    КонецПроцедуры
```

Но я бы добавил еще одну колонку булево в ТЧ, скрыл бы ее и при открытии документа заполнял бы Истина или Ложь в зависимости от того какой пользователь там указан. А дальше в условном оформлении прописал бы доступность в зависимости от значения нашей колонки ТЧ. Условное оформление применяется для каждой строки ТЧ в отдельности. Если не хотите добавлять колонку - можно создавать условное оформление программно. Вот как я это делаю:

```1c
    УсловноеОформление.Элементы.Очистить();

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

    ЦветФона = Элемент.Оформление.Элементы.Найти("ЦветФона");
    ЦветФона.Значение = WebЦвета.СеребристоСерый;
    ЦветФона.Использование = Истина;
    КонецЦикла;
```
---
Можно, но если надо посмотреть, кто и как "проголосовал", то не годится.
---
Почему не годится? Не будет видно если поставить видимость - ложь. Если поставить доступность - ложь до просто нельзя будет изменить не свои записи. Но все строки будут видны.
---
Нужна обработка события, либо при НачалеРедиктирования или Выбор в табличном поле. В событии описываете как указано в (2)
---
Пропиши перед началом изменения, возможно добавив проверку, в какой колонке изменения, если надо.
Если ПараметрыСеанса.ТекущийПользователь <> Объект.Ответственный Тогда
      Отказ = Истина;
КонецЕсли;
---
Событие при изменении, это имели ввиду?
---
Нет, нажми на саму табличную часть, там будет событие табличной части ПередНачаломИзменения. Там все и прописывайте.
---
Выделите табличную часть у него будет события ПередаНачаломИзменения, там и пишите код вида
Если ПараметрыСеанса.ТекущийПользователь <> Объект.Ответственный Тогда
Отказ = Истина;
КонецЕсли;
---
Вот так я сделал. Событие при изменении.
---
Не корректно.
1) Зайдите по нужным пользователем и поставьте галку, а потом под не нужным пользователем и тоже попробуйте поставить галку и посмотрите на результат.
Делать надо именно в событие ПередНачаломИзменения
---
А можешь пояснить почему не корректно? Щас зашел под пользователем которого нет в этом списке, и я не могу поставить галку ни на одном поле.
---
Т.е. работает как положено , если данного согласующего нету в списке он поставить галку и не может.
---
А сделай это там, где уже есть галка. Судя по твоему коду, для всех строк будет снята галка.
---
И код будет выглядеть примерно так:

```1c
    ТекПольз = ПараметрыСеанса.ТекущийПользователь;
    ТекСтрока = Элементы.СписокСогласующий.ТекущиеДанные;
    Если ТекСтрока.Согласующие <> ТекПольз Тогда
    Отказ = Истина;
    КонецЕсли;
```
---
Сейчас попробую зайти под пользователем, которого вообще нет в этом списке.
Еще надо сделать что бы, после того как первый по списку пользователь поставил галку, у другого открывалась возможность тоже поставить галку и так до конца. Т.е. второй по списку не может поставить галку , если первый не поставил, третий - если 2 и 1.
---
Только одно , НО.
Тек.Пользователь вызывается на сервер.
А ТекСтрока = Элементы.СписокСогласующий.ТекущиеДанные вызывается на клиенте
Как это связать?
---
Переписав код для работы на клиенте

```1c
    &НаКлиенте
    Процедура СогласующиеПередНачаломИзменения(Элемент, Отказ)

    ТекПольз = фПолучитьТекущегоВользователяНаСервере();
    ТекСтрока = Элементы.СписокСогласующий.ТекущиеДанные;
    Если ТекСтрока.Согласующие <> ТекПольз Тогда
    Отказ = Истина;
    КонецЕсли;

    КонецПроцедуры
```
---
а в Функции "фПолучитьТекущегоВользователяНаСервере()"
Что должно быть?
Вот так?
---
Почти, только Не пользователи информационной базы, а параметры сеанса. :-) В таких случаях код выполняется на клиенте, если нужны данные из базы, то обращаемся на сервер за данными, а все выполнение на клиенте.
---
Конечно, если такой параметр у Вас есть в конфигурации.
---
Все заработало, благодарю.
А по поводу по очередной открытии ставки галки, есть варианты как это сделать?
---
Поподробнее, не совсем понял.
---
Ну вот Согласующий "Администратор" стоит по списку 1, ему соответственно всегда можно ставить галку.
Если "Администратор" поставил согласовано, то у второго по списку открывается возможность ставить галку , если у 2 галка поставлена согласован, то и у 3 по списку открывается возможность ставить галки и т.д.
Но если кто либо, не зависимо 1-2-3, поставил Отказано, то у след согласующего возможность ставить галку отсутствует.
Понятно?)
---
С кодом не подскажу, тут уже сам попробуй разобраться.
Но алгоритм таков, в цикле надо обойти все строки и сравнивать текущую строку и строку в цикле.

```1c
    Для каждого стр из Объект.Согласующие Цикл
    Если стр = ТекСтрока Тогда
    //Тот код который выше написали
    Прервать;
    ИначеЕсли НЕ стр.Одобрено Тогда
    Отказ = Истина;
    Прервать;
    КонецЕсли;
    КонецЦикла;
```

Таким образом, пока предыдущая строка не одобрена, следующую одобрить нельзя.
---
Работает твой код)
---
И да, если отказ можно поставить в любой момент, то проверяй имя колонки в которой пытаются внести изменения, что бы если имя колонки Одобрено, то выполняем весь код, а если нет, то ни каких проверок не делаем.
---
Добрый день, есть вопрос.
Как реализовать, что бы своя форма документа была так же на глав.странице как представлено тут?
Где надо написать , что бы при открытии вкладки или при запуске чего либо, появлялось сразу форма документа??
---
И еще вопрос.
Вот есть типовой документ заявка на расходование ДС.
Так вот, надо что бы и типовая заявка была доступна и доработанная.
Как это лучше и проще сделать?