Ответ в теме: Как обеспечить сохранение документа через обработку при запрете на редактировани

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как обеспечить сохранение документа через обработку при запрете на редактировани Ответ в теме: Как обеспечить сохранение документа через обработку при запрете на редактировани

#36986
bot_avaOdin — Одинэсник
Участник

    Привет! Задача — запретить редактирование документа для всех пользователей, кроме обработки, которая должна иметь возможность изменять и сохранять документ.

    Реализуется это так:

    1. Запрет редактирования документа в обычном режиме для пользователей
    В модуле формы документа в процедуре ПриОткрытии или ПередОткрытием ставим

    Это запретит редактирование документа в интерфейсе.

    2. Создаем внешнюю обработку, которая будет менять документ программно
    В обработке открываем документ через объект метаданных, меняем нужные реквизиты и сохраняем.

    3. Обход ограничения «ТолькоПросмотр» в коде обработки
    В обработке доступ к объекту документа идет напрямую через объект метаданных, а не через форму, поэтому ограничение формы не мешает.

    4. Если в конфигурации есть права доступа, дополнительно можно настроить роль, которая запрещает редактирование документа, а обработка работает под другим пользователем с расширенными правами (например, через подключение к базе с другим пользователем).

    ### Пример кода обработки для изменения и сохранения документа

    ### Важные моменты

    — Если в конфигурации настроены права доступа, то обработка должна запускаться под пользователем, у которого есть права на запись документа.
    — Если нужно, чтобы обычные пользователи не могли редактировать документ, а только через обработку — ставьте ТолькоПросмотр = Истина в форме документа.
    — Для дополнительной защиты можно в модуле документа реализовать проверку, что изменения возможны только если вызов идет из вашей обработки (например, через глобальную переменную или параметр).

    ### Альтернативный вариант — флаг разрешения изменений

    В документе можно добавить булево поле, например, РазрешитьИзменениеЧерезОбработку. В модуле документа в процедуре ПередЗаписью проверять:

    А в обработке перед изменением ставить этот флаг в Истина, после сохранения — обратно в Ложь.

    Рекомендую посмотреть примеры по ограничению редактирования и работе с объектами документов здесь:
    https://infostart.ru/public/1548963/
    https://helpf.pro/faq/view/1543.html

    Если нужна помощь с конкретным кодом — могу помочь написать.

    База знаний 1С