Разработка и Конфигурация · 10 мин
Как запретить копирование документа в 1С
Как запретить копирование документа в 1С: через права ролей, подписку на событие, расширение конфигурации и команду формы. Пошаговые инструкции и частые ошибки.
Копирование документов в 1С — удобный механизм, но в ряде случаев он создаёт проблемы: пользователи дублируют реализации вместо ввода корректировок, копируют приходные ордера с чужими реквизитами или размножают кассовые документы с ошибочными суммами. Запретить копирование можно несколькими способами — от штатной настройки прав до программной блокировки через расширение.
Выбор метода зависит от задачи: нужно ли запретить копирование всем пользователям или только части, для всех документов или конкретного вида, допустимо ли изменение конфигурации или база работает на поддержке без права доработки. Ниже разобраны четыре рабочих подхода с пошаговыми действиями и проверкой результата.
Какой способ запрета выбрать
Прежде чем вносить изменения, определите границы запрета. Если копирование нужно запретить полностью и для всех — достаточно одной подписки на событие. Если запрет касается только рядовых пользователей, а бухгалтеру или администратору копирование должно остаться доступным, потребуется проверка роли внутри обработчика.
Важно учитывать, что типовая команда «Скопировать» доступна и из списка документов, и из формы самого документа, и по клавише F9. Качественный запрет должен перекрывать все точки входа, иначе пользователь найдёт обходной путь за пару минут.
Сравнение способов запрета
Перекрывает все точки входа, включая F9. Требует доработки конфигурации или расширения.
Не меняет основную конфигурацию, но скрывает только кнопку — горячие клавиши могут остаться активны.
Прямого запрета копирования в ролях нет: можно лишь ограничить добавление, что заодно запретит и ручной ввод новых документов.
Запрет через подписку на событие «ПриКопировании»
Самый надёжный способ — обработчик события ПриКопировании у объекта документа. Это событие вызывается при любой попытке копирования: через кнопку, меню «Ещё» или клавишу F9. Если в обработчике установить параметр Отказ = Истина, платформа прервёт операцию.
Для внедрения без изменения типовой конфигурации создайте расширение. В расширении добавьте общий модуль (серверный или с вызовом сервера) и подписку на событие для нужного вида документов. В качестве источника укажите ДокументОбъект конкретного вида, например ДокументОбъект.РеализацияТоваровУслуг.
Процедура ЗапретКопированияДокументовПриКопировании(Источник, Отказ) Экспорт
Отказ = Истина;
КонецПроцедурыПосле публикации расширения при попытке копирования пользователь увидит стандартное сообщение об ошибке либо копия просто не будет создана. Если нужно пояснение, добавьте в обработчик вывод сообщения через Сообщить или вызов исключения с понятным текстом — так пользователь поймёт, что это осознанное ограничение, а не сбой программы.
- 1Создайте расширение конфигурации и сохраните его под понятным именем.
- 2Добавьте общий модуль с экспортной процедурой обработчика.
- 3Создайте подписку на событие ПриКопировании для нужного вида документов.
- 4В теле обработчика установите Отказ = Истина.
- 5Обновите конфигурацию базы данных и проверьте копирование из списка, из формы и по F9.
Выборочный запрет: по ролям и по состоянию документа
Часто требуется не полный запрет, а избирательный. Например, копировать реализации нельзя менеджерам, но можно старшему менеджеру. В этом случае внутри обработчика проверяйте роль текущего пользователя функцией РольДоступна или принадлежность к профилю группы доступа.
Другой типовой сценарий — запрет копирования только проведённых или фискализированных документов: чеков ККМ, эквайринговых операций, документов с электронной подписью. Здесь в обработчике анализируйте реквизиты источника: если документ проведён или содержит признак фискализации, отказывайте в копировании, для черновиков разрешайте.
Учтите, что РольДоступна корректно работает в серверном контексте. Если модуль подписки клиентский, проверку роли нужно выносить в серверный вызов, иначе получите ошибку исполнения у каждого пользователя.
Отключение команды «Скопировать» через расширение формы
Альтернатива подписке — заимствование формы списка документа в расширение и отключение видимости или доступности стандартной команды Скопировать (в командной панели она обычно называется ФормаСкопировать или привязана к стандартной команде глобального командного интерфейса).
Этот способ хорош тем, что не трогает логику объекта и легко откатывается. Но у него есть ограничение: скрытие кнопки не всегда блокирует сочетание клавиш F9, если команда осталась доступной на уровне формы. Поэтому для строгого запрета комбинируйте оба подхода — скрывайте кнопку и страхуйтесь подпиской на событие.
Чтобы отключить команду полностью, в заимствованной форме найдите элемент кнопки, снимите у него видимость, а в обработчике ПриСозданииНаСервере дополнительно установите Элементы.ФормаСкопировать.Доступность = Ложь для надёжности.
Проверка результата и типичные проблемы
После внедрения протестируйте запрет под учётной записью обычного пользователя, а не администратора: у полных прав часть ограничений может не срабатывать, и вы получите ложное представление о результате. Проверьте все три точки входа — кнопку в списке, кнопку в форме документа и клавишу F9.
Если запрет через расширение не сработал, первым делом проверьте, что расширение активно, его режим совместимости подходит под версию платформы, а после обновления конфигурации базы данных выполнен перезапуск сеансов. Подписки на события из расширений применяются только после перезапуска сеанса пользователя.
Как проверить результат
Создание копии отклоняется, документ не открывается
Копия создаётся — подписка не сработала, проверьте источник события
Кнопка скрыта или недоступна
Кнопка активна — команда не отключена в расширении формы
При выборочном запрете копирование доступно
Запрет сработал и для администратора — проверьте условие по роли
Частые ошибки при реализации запрета
Самая распространённая ошибка — скрытие только кнопки без блокировки события. Пользователь нажимает F9 и получает копию, а постановщик задачи считает, что запрет работает. Вторая ошибка — указание в подписке источника ДокументОбъект без конкретного вида: такой обработчик будет вызываться для всех документов системы и замедлит любые операции копирования.
Третья группа ошибок связана с правами: попытка решить задачу снятием права «Интерактивное добавление» ломает весь ввод документов. И наконец, забывают про обмены и загрузки данных: программное создание документов через СоздатьДокумент событие ПриКопировании не вызывает, поэтому интеграции запрет не затронет — это нормально, но об этом стоит помнить при постановке задачи.
Альтернатива запрету: контроль вместо блокировки
Иногда жёсткий запрет — не лучшее решение. Если копирование иногда оправдано (типовые ежемесячные счета, повторяющиеся заказы), вместо блокировки можно внедрить контроль: журналировать факт копирования, автоматически очищать в копии критичные реквизиты (номер ЭДО, ссылки на основания, подписи) или выводить пользователю предупреждение с подтверждением.
Такой подход снижает риск ошибок, не мешая легальной работе. Реализуется он тем же обработчиком ПриКопировании, но вместо отказа в нём очищаются опасные поля или записывается событие в журнал регистрации для последующего разбора.
Как выбрать действие
Частые вопросы
Можно ли запретить копирование документа без доработки конфигурации?
Штатной настройки, запрещающей именно копирование, в типовых конфигурациях нет. Минимально инвазивный вариант — расширение конфигурации: основная конфигурация остаётся на поддержке, а запрет реализуется в расширении через подписку на событие или заимствование формы.
Почему запрет через расширение не сработал после обновления?
Подписки на события из расширений применяются только в новых сеансах. После обновления конфигурации базы данных пользователям нужно перезапустить сеанс. Также проверьте, что расширение активно и его назначение не сброшено при обновлении платформы.
Заблокирует ли запрет копирования загрузку документов из обменов?
Нет. Событие ПриКопировании возникает только при интерактивном копировании пользователем. Программное создание документов через обмены, обработки загрузки и веб-сервисы это событие не вызывает, поэтому интеграции продолжат работать.
Как запретить копирование только одного вида документов?
В свойствах подписки на событие укажите источником конкретный тип, например ДокументОбъект.СчетНаОплатуПокупателю, а не общий ДокументОбъект. Обработчик будет вызываться только для этого вида, остальные документы не пострадают.
Можно ли вместо запрета показывать пользователю предупреждение?
Да. В обработчике ПриКопировании вместо отказа можно вывести сообщение, очистить опасные реквизиты копии или записать факт копирования в журнал регистрации. Для интерактивного подтверждения логику придётся переносить в форму, так как в серверном событии объекта диалоги с пользователем недоступны.
Почему нельзя решить задачу снятием права «Добавление» у роли?
Право «Добавление» управляет созданием любых новых документов — и копированием, и ручным вводом. Сняв его, вы полностью лишите пользователя возможности вводить документы, а не только копировать. Для точечного запрета копирования подходит только программная блокировка события.
Что важно запомнить
Надёжный запрет копирования документа в 1С делается через подписку на событие ПриКопировании с установкой Отказ = Истина — желательно в расширении, чтобы не снимать конфигурацию с поддержки. Скрытие кнопки без блокировки события не работает: остаётся F9. Проверяйте результат под обычным пользователем и во всех точках входа.