В процессе эксплуатации систем на базе 1С:Предприятие 7.7 часто возникает задача разграничения прав доступа к конфиденциальной информации. Одной из "дыр" в безопасности является возможность рядового пользователя просмотреть движения документа (регистры или проводки) через контекстное меню общего журнала или непосредственно из формы документа. Даже если сама форма документа защищена от редактирования или закрыта для просмотра, системные механизмы платформы позволяют увидеть суммы, контрагентов или заработную плату сотрудников в окне движений. Разберем по шагам, как эффективно заблокировать эту возможность, используя штатные средства и программные методы.
Самый правильный и надежный способ — это использование встроенной системы прав доступа 1С 7.7. Платформа позволяет гибко настраивать права не только на документы, но и на регистры, которые формируют эти движения. Проанализируем, как это работает.
Если нам необходимо запретить просмотр движений по конкретному регистру (например, "Зарплата" или "ОстаткиТоваров"), выполним следующие действия:
Важный нюанс: Многие разработчики опасаются, что снятие права на Чтение помешает проведению документа. Однако в 1С 7.7 для записи движений при проведении документа (в процедуре ОбработкаПроведения) права на чтение обычно не требуются, достаточно прав на изменение/использование. Как показывает практика, снятие этой галочки блокирует именно визуальное отображение движений в журнале и системных диалогах, при этом логика проведения документа остается работоспособной.
Если ваш учет ведется с использованием компоненты "Бухгалтерский учет", движения документа отображаются в виде проводок. Чтобы закрыть к ним доступ, мы можем вмешаться в процесс открытия соответствующих журналов. Рассмотрим пример реализации в глобальном модуле и формах журналов.
Для начала создадим в Глобальном модуле переменную, которая будет служить флагом запрета:
Перем глЗапрет Экспорт;
Процедура ПриНачалеРаботыСистемы()
глЗапрет = 0;
КонецПроцедуры
Затем в форме списка общего журнала (откуда чаще всего пользователи пытаются просмотреть движения) пропишем логику управления этим флагом:
// В форме списка журнала
Процедура ПриОткрытии()
глЗапрет = 1; // Устанавливаем запрет, пока открыт журнал
КонецПроцедуры
Процедура ПриЗакрытии()
глЗапрет = 0; // Снимаем запрет при закрытии
КонецПроцедуры
Теперь самое главное — проанализируем ситуацию в формах списков журналов операций и проводок. В их модулях необходимо добавить проверку:
Процедура ПриОткрытии()
Если глЗапрет = 1 Тогда
Предупреждение("Просмотр движений запрещен администратором!");
СтатусВозврата(0); // Отменяем открытие формы
Возврат;
КонецЕсли;
КонецПроцедуры
Метод СтатусВозврата(0) является ключевым: он дает команду платформе прекратить выполнение операции открытия окна. Таким образом, даже если пользователь нажмет правую кнопку мыши и выберет "Движения документа", окно просто не откроется.
Если штатных средств недостаточно, проанализируем возможность использования внешней компоненты FormEx. Это мощный инструмент, который позволяет работать с интерфейсом на уровне системных сообщений Windows. С помощью FormEx можно "поймать" нажатие правой кнопки мыши (событие ПриНажатииПравойКнопки) и подменить стандартное контекстное меню своим собственным.
Рассмотрим примерный алгоритм действий:
FormEx.dll при старте системы.Этот метод считается наиболее "продвинутым", так как он позволяет полностью скрыть наличие самой функции просмотра, не вызывая лишних сообщений об ошибках или предупреждений.
Иногда проще отказаться от стандартного "Общего журнала", предлагаемого платформой, в пользу самописного интерфейса. Выясним причину: в стандартном журнале контекстное меню жестко зашито в платформу. В кастомном же журнале (реализованном через объект ТаблицаЗначений на форме или через поставщик данных 1С++), вы сами определяете состав кнопок и команд.
В таком случае задача решается сама собой:
Shift + F12 или контекстное меню платформы в нем работать не будут.Важно понимать, что ограничение визуального просмотра движений — это лишь часть защиты. Опытный пользователь может попытаться вытянуть данные через:
Поэтому мы рекомендуем комбинировать методы: обязательно ограничивать права на Чтение соответствующих регистров в конфигураторе и использовать СтатусВозврата(0) в формах, чтобы закрыть визуальный доступ. Если база данных работает на MS SQL Server, администратор может дополнительно ограничить права на уровне таблиц базы данных (таблицы RG* и RA*), запретив пользователям SELECT из таблиц движений тех регистров, которые содержат особо важную информацию.