В практике администрирования и программирования «1С:Предприятие 8» нередко возникает задача: предоставить конкретному сотруднику доступ к одному-единственному отчету (например, содержащему ФИО, ИНН и адреса работников в ЗУП), но при этом полностью исключить возможность его «путешествий» по остальным разделам информационной базы. Ситуация осложняется, когда у разработчика нет полных прав администратора для изменения ролевой модели или конфигурации, а локальные администраторы не могут оперативно создать ограниченного пользователя.
В данной статье мы подробно разберем, как решить эту задачу с помощью создания специального ярлыка запуска, bat-файла, программирования логики работы самого внешнего отчета и обеспечения безопасности учетных данных.
---
Платформа «1С:Предприятие» обладает мощным механизмом управления через параметры командной строки. Мы можем создать ярлык или исполняемый файл (с расширением .bat или .cmd), который автоматически запустит систему, авторизуется под нужным пользователем и сразу откроет внешний отчет.
Рассмотрим структуру команды для запуска файловой информационной базы:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /F "C:\Bases\ZUP" /N "ReportUser" /P "Password123" /Execute "C:\ExternalReports\EmployeeReport.epf" /DisableStartupMessages
Если ваша база данных развернута на сервере (клиент-серверный вариант), синтаксис команды немного изменится. Проанализируем этот пример:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /S "Server1C\ZUP_Production" /N "ReportUser" /P "Password123" /Execute "D:\1C_Upload\EmployeeReport.epf" /DisableStartupMessages
Разберем детально каждый параметр, который мы использовали в этих командах:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" — это путь к исполняемому файлу платформы 1С. Рекомендуется указывать путь к конкретной версии платформы либо к общему загрузчику 1cestart.exe, однако для надежности работы скриптов автоматизации часто выбирают прямой путь к конкретному релизу 1cv8.exe.ENTERPRISE — указывает системе, что запуск необходимо произвести в режиме «Предприятие» (пользовательский режим)./F "ПутьКБазе" (или /S "ИмяСервера\ИмяБазы") — указывает путь к файловой базе данных либо адрес серверной базы./N "ИмяПользователя" — имя учетной записи (логин) в 1С, под которой будет осуществлен вход. Настоятельно рекомендуется завести для этого процесса отдельного пользователя с минимально необходимыми правами для формирования данного отчета./P "Пароль" — пароль пользователя. Если у пользователя нет пароля, этот ключ можно опустить, но в целях безопасности у четной записи всегда должен быть надежный пароль./Execute "ПутьКОбработке" — ключевой параметр нашей задачи. Он указывает платформе, что сразу после успешной авторизации необходимо запустить на выполнение внешний отчет или обработку по указанному пути./DisableStartupMessages — этот ключ подавляет появление различных системных всплывающих сообщений при запуске (например, советы дня, сообщения об обновлении и другие неинформативные для пользователя окна).Альтернативно, мы можем прописать эти параметры прямо в конфигурационный файл списка баз ibases.v8i. Найдем описание нашей базы в этом файле и добавим строку дополнительных параметров:
[Имя_Вашей_Базы]
Connect=File="C:\Bases\ZUP";
ID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
OrderInList=16384
Folder=/
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.3
AdditionalParameters=/Execute "C:\ExternalReports\EmployeeReport.epf"
---
Основное опасение при использовании ярлыка запуска заключается в том, что пользователь может просто закрыть окно отчета (или свернуть его) и получить доступ к основному меню программы, начав просматривать конфиденциальные данные. Чтобы предотвратить это поведение, нам необходимо доработать сам внешний отчет.
Выясним, как связать жизненный цикл отчета с сеансом работы всей системы. Нам нужно сделать так, чтобы при закрытии формы отчета происходило автоматическое закрытие всей программы 1С.
Для этого откроем наш внешний отчет в конфигураторе, перейдем в свойства основной формы и создадим обработчик события ПриЗакрытии. Напишем в модуле формы следующий код:
&НаКлиенте
Процедура ПриЗакрытии(Отказ)
// Параметр Ложь отключает стандартный запрос системы "Подтверждаете выход?"
ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры
Теперь, как только пользователь нажмет на крестик в окне отчета или на кнопку «Закрыть», сеанс работы 1С будет принудительно завершен.
Однако остается еще одна лазейка: пользователь может не закрывать форму отчета, а просто отодвинуть ее в сторону и переключиться на главное окно 1С. Чтобы исключить такую возможность, настроим режим открытия окна формы отчета.
В свойствах формы найдем параметр РежимОткрытияОкнаФормы (в англоязычной версии WindowOpeningMode) и установим для него значение Блокировать весь интерфейс (BlockWholeInterface). Это приведет к тому, что форма отчета откроется как модальное окно поверх всей системы 1С. Пользователь физически не сможет кликнуть ни на один элемент главного интерфейса программы, пока не закроет данную форму.
---
Если мы оставим параметры авторизации (логин и пароль) в обычном ярлыке Windows или в текстовом .bat-файле, любой мало-мальски грамотный пользователь сможет открыть свойства ярлыка или изменить bat-файл через «Блокнот» и узнать пароль пользователя с расширенными правами.
Посмотрим на более безопасные способы организации авторизации:
Способ А. Компиляция BAT-скрипта в формат EXE.
Мы можем написать классический bat-файл запуска, а затем скомпилировать его в бинарный исполняемый файл .exe с помощью специализированных бесплатных утилит (например, Bat To Exe Converter). После компиляции исходный текст скрипта с паролями зашифровывается внутри бинарного файла, и обычный пользователь не сможет прочитать учетные данные простым просмотром файла.
Способ Б. Использование Windows-аутентификации.
Это наиболее надежный и профессиональный метод. В конфигураторе 1С для пользователя, под которым запускается отчет, настраивается связь с его учетной записью Windows (Active Directory). При этом в ярлыке запуска нам больше не потребуется указывать ключи /N и /P. Достаточно будет использовать ключ Windows-авторизации:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /F "C:\Bases\ZUP" /WA+ /Execute "C:\ExternalReports\EmployeeReport.epf"
В таком сценарии авторизация в 1С произойдет автоматически и незаметно под той учетной записью Windows, под которой пользователь вошел на свой рабочий компьютер. Пароли нигде в файлах не хранятся.
---
Рассмотрим еще более радикальный, но крайне удобный для конечного пользователя сценарий. Что если пользователю вообще не нужно видеть интерфейс 1С? Он нажимает на ярлык, система в фоновом режиме формирует отчет, сохраняет его на диск в формате PDF или Excel (XLSX), открывает этот файл на экране средствами операционной системы и тут же закрывает 1С.
Для реализации этого сценария откроем модуль формы нашего отчета и в обработчике события ПриОткрытии (или в обработчике ожидания, запущенном сразу после открытия) пропишем логику автоформирования:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Запускаем формирование отчета
СформироватьОтчетНаСервере();
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчетНаСервере()
// Предположим, что результат отчета выводится в ТабличныйДокумент на форме
ПутьКФайлу = КаталогВременныхФайлов() + "Сотрудники_ИНН_Адреса.pdf";
// Записываем сформированный табличный документ в файл PDF
ЭтотОбъект.Результат.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
// Передаем управление на клиент для открытия файла и закрытия программы
ПодключитьОбработчикОжидания("ОткрытьФайлИВыйти", 0.1, Истина);
КонецПроцедуры
В модуле формы на клиенте опишем процедуру открытия готового файла и немедленного выхода из 1С:
&НаКлиенте
Процедура ОткрытьФайлИВыйти() Экспорт
ПутьКФайлу = КаталогВременныхФайлов() + "Сотрудники_ИНН_Адреса.pdf";
// Запускаем просмотр файла средствами Windows (откроется системный PDF-ридер)
ЗапуститьПриложение(ПутьКФайлу);
// Закрываем 1С без лишних вопросов
ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры
В результате пользователь увидит лишь кратковременное появление заставки 1С, после чего перед ним откроется готовый и красиво сверстанный документ PDF. Сама программа 1С к этому моменту уже будет закрыта, что полностью исключает несанкционированный доступ к базе данных.
---
Проанализируем ситуацию, если в вашей организации строго запрещен запуск сторонних внешних обработок напрямую из файловой системы по соображениям безопасности платформы (начиная с версии 8.3.9, платформа выдает интерактивное окно предупреждения безопасности при открытии внешних файлов).
В таком случае правильным и легитимным решением будет передача вашего разработанного отчета администратору 1С для его регистрации в справочнике «Дополнительные отчеты и обработки». Администратор сможет сделать это за пару минут:
Ctrl + F11 в окне открытого отчета). Навигационная ссылка имеет вид типа e1cib/app/Справочник.ДополнительныеОтчетыИОбработки....После этого на рабочем столе пользователя создается стандартный ярлык запуска 1С, но в параметрах запуска вместо ключа /Execute мы передаем ключ навигационной ссылки /URL:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /F "C:\Bases\ZUP" /URL "e1cib/data/Справочник.ДополнительныеОтчетыИОбработки?ref=80eb00155d043b0111e3b5e406"
При таком подходе решаются абсолютно все проблемы безопасности: платформа не выдает грозных предупреждений о запуске внешнего исполняемого кода, права доступа жестко контролируются на уровне СУБД, а пользователю мгновенно открывается необходимый для работы отчет.