Ограничение доступа к документам 1С:Предприятие 7.7 по условию на значение его реквизитов


В данной статье описан способ, как можно ограничить доступ на изменение документа по условию на значение его реквизитов. Метод основан на применении библиотек 1С++, Formex и работает даже в случае попытки редактирования документа при помощи произвольной внешней обработки.

Постановка задачи

Требуется разработать механизм, позволяющий защитить от исправления документы учетной системы на базе платформы 1С: Предприятие 7.7 как посредством интерфейса программы, так и с использованием внешних обработок. Защищать необходимо не все документы заданного вида, а лишь те, значение реквизитов которых удовлетворяют некоторым условиям.

Предыстория вопроса

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

Сложности в реализации

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

Другая сложность состоит в том, что необходимо защищать документы от правки через интерфейс и с использованием внешних обработок. Для защиты документа от изменения через интерфейс, можно воспользоваться стандартными средствами: через настройку доступности реквизитов формы документа и через использование обработчика «ПриЗаписи» в форме документа. Однако, все эти механизмы «привязаны» к объекту «Форма» документа не будут работать в случае доступа к документу посредством (внешних) обработок. Можно, конечно, запретить использование внешних обработок для пользователей, а во встроенных в конфигурацию обработках уже контролировать значения реквизитов. Обычно, так и делается и это было альтернативой данному подходу. С другой стороны, если есть решение, позволяющее сосредоточить все настройки управления доступа к документу в одном месте, почему бы его не использовать?

Решение

В основе решения, лежит обработчик «ПриНачалеБлокировкиОбъекта» компоненты Formex, написанной Алексеем Федоровым aka АЛьФ. Этот обработчик размещается в глобальном модуле и срабатывает при успешной блокировке объекта, но еще до выполнения каких либо операций с ним, в том числе и записи измененных данных. Параметр обработки содержит данные объекта до изменения. Получается, у нас есть мало-функциональный, но, все-же аналог обработчика «ПередЗаписью» из 1С: Предприятие 8. В теле обработчика можно сохранить значения реквизитов документа в файл, а потом, в момент проведения документа, считать значения из файла и сохранить в реквизиты обратно. Дело в том, что в 1С: Предприятие 7.7 в процедуре «ОбработкаПроведения» также можно задавать значения реквизитов и они, в случае успешного завершения процедуры, будут записаны.

Примечания

Таким образом, задача защиты документов от исправления у нас преобразовалась в защиту файлов с данными этих документов. Эта задача решаема и у системных администраторов предостаточно методов для ее решения. Остается без внимания случай, когда запись документа произошла, а проведение нет. В таком случае, документ содержит новые значения реквизитов, но имеет старый набор движений. Чтобы исправить проблему, достаточно данное решение дополнить процедурой заполнения данных документа из записанных в файле значений при открытии формы. Естественно, при сохранении данных документа, нужно контролировать факт наличия уже сохраненных значений и не перезаписывать их, так как только они соответствуют данным на момент проведения документа. После успешного проведения документа, файл с сохраненными значениями его реквизитов, конечно же, удаляется с диска.