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

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

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #36985
      Фото аватараOdineski
      Участник

        Привет, подскажи пожалуйста, как реализовать обработку, которая сможет сохранять документ при условии, что доступ к этому документу закрыт и любые изменения запрещены кроме действий через нужную обработку

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С