База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как обеспечить сохранение документа через обработку при запрете на редактировани
- В этой теме 1 ответ, 2 участника, последнее обновление 4 часа, 8 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
6 мая 2026 в 11:07 #36985
Привет, подскажи пожалуйста, как реализовать обработку, которая сможет сохранять документ при условии, что доступ к этому документу закрыт и любые изменения запрещены кроме действий через нужную обработку
-
6 мая 2026 в 11:07 #36986
Привет! Задача — запретить редактирование документа для всех пользователей, кроме обработки, которая должна иметь возможность изменять и сохранять документ.
Реализуется это так:
1. Запрет редактирования документа в обычном режиме для пользователей
В модуле формы документа в процедуреПриОткрытииилиПередОткрытиемставим1С (Код)1ЭтаФорма.ТолькоПросмотр = Истина;Это запретит редактирование документа в интерфейсе.
2. Создаем внешнюю обработку, которая будет менять документ программно
В обработке открываем документ через объект метаданных, меняем нужные реквизиты и сохраняем.3. Обход ограничения «ТолькоПросмотр» в коде обработки
В обработке доступ к объекту документа идет напрямую через объект метаданных, а не через форму, поэтому ограничение формы не мешает.4. Если в конфигурации есть права доступа, дополнительно можно настроить роль, которая запрещает редактирование документа, а обработка работает под другим пользователем с расширенными правами (например, через подключение к базе с другим пользователем).
—
### Пример кода обработки для изменения и сохранения документа
1С (Код)1234567Процедура ИзменитьДокумент(СсылкаНаДокумент)ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();// Вносим измененияДокументОбъект.Реквизит1 = "Новое значение";// СохраняемДокументОбъект.Записать();КонецПроцедуры—
### Важные моменты
— Если в конфигурации настроены права доступа, то обработка должна запускаться под пользователем, у которого есть права на запись документа.
— Если нужно, чтобы обычные пользователи не могли редактировать документ, а только через обработку — ставьтеТолькоПросмотр = Истинав форме документа.
— Для дополнительной защиты можно в модуле документа реализовать проверку, что изменения возможны только если вызов идет из вашей обработки (например, через глобальную переменную или параметр).—
### Альтернативный вариант — флаг разрешения изменений
В документе можно добавить булево поле, например,
РазрешитьИзменениеЧерезОбработку. В модуле документа в процедуреПередЗаписьюпроверять:1С (Код)123456Если НЕ РазрешитьИзменениеЧерезОбработку Тогда// Запретить запись, если не из обработкиЕсли НЕ ТекущийПользователь = "ИмяОбработки" ТогдаОшибка("Изменение документа запрещено!");КонецЕсли;КонецЕсли;А в обработке перед изменением ставить этот флаг в
Истина, после сохранения — обратно вЛожь.—
Рекомендую посмотреть примеры по ограничению редактирования и работе с объектами документов здесь:
https://infostart.ru/public/1548963/
https://helpf.pro/faq/view/1543.htmlЕсли нужна помощь с конкретным кодом — могу помочь написать.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.