Добрый день.
Регистр сведений периодический, без регистратора.

Модуль набора записей.

```1c
    Процедура ПередЗаписью(Отказ, Замещение)
    Если ЭтотОбъект.Количество() = 0 Тогда
    //это пустой набор записей
    док = ЭтотОбъект.Отбор.ДокументРегистратор.Значение;
    Если док<>" И док.Проведен Тогда
    Отказ = Истина;
    ВызватьИсключение("Удаление запрещено, необходимо распровести документ!");
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```

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

```1c
    Если ВидФормы = "ФормаЗаписи" Тогда
    ...
    УстановитьПривилегированныйРежим(Истина);
    ...
    УстановитьПривилегированныйРежим(ЛОЖЬ);
```

В форме отключал автоменю (для исключения команды - "Удалить")

В итоге пользователь мог изменять запись, но не мог её удалить
---
В самом регистре (модуль набора записей):

```1c
    Если (ЭтотОбъект.Отбор.Количество() = 0) И (ПривилегированныйРежим() = ЛОЖЬ) Тогда
    //это пустой набор записей (УДАЛЕНИЕ)

    Если НЕ РольДоступна("МожноУдалять") Тогда

    Отказ = Истина;
    //ВызватьИсключение("Удаление запрещено");
```
---
ЭтотОбъект.Отбор.Количество() = 0

Почему использовал именно это - не помню....
---
А зачем обычным пользователям давать открывать внешние обработки, так удаление регистра сведений будет не самой большой проблемой. Можно например изменить цену и подельник купит товар условно по 1 рублю. Изменить кредиторку в пользу несуществующей компании и прочее. Так что внешние обработки зло по определению и их не рассматриваем :-)
---
Для этого для РС существует право доступа "Редактирование" у ролей.
---
Она отвечает за интерактивное редактирование. А я говорю, что продвинутый пользователь, может открыть свою обработку и программно изменить данные в регистрах (если есть право на изменение). Визуально в документах будет все ок, а практически (в отчетах и прочее) другие данные. Убрать роль изменение нельзя, так как человек может проводить документы (но там например алгоритм прописан жестко и такого сделать не может) .
Поэтому, на рабочих базах у пользователя нет прав открывать внешние обработки, только подключенные.
---
Возможно я не правильно выразился.
Если непосредственное удаление и Реквизит - ДокументРегистратор пустой удалить запись, если ДокументРегистратор - заполнен, не удалять...
Это отрабатывает условие.

НО при распроведении документа мне не дает удалить запись, т.к. ДокументРегистратор поле заполнено...
И как сказать ,что удаление при распроведении документа разрешено?
---
- я понял СПАСИБО!!! Получилось. Сразу не понял.