Доступы на внешние отчеты без изменения конфигурации

Возникла проблема установки прав доступа на внешние отчеты без изменения конфигурации. Т.е. конфигурацию вообще нельзя было трогать.
Такого добра в инете очень много, но все как то сложно и мудрено. Решил написать свою.
За основу взял разработку "Irzik" с одного из сайтов любителей 1С. За это ему большое спасибо. Использованы так же идеи других пользователей, заранее приношу им свои извинения, что не смог их отметить, просто не помню у кого подглядывал. Обращайтесь, подправлю.  Программа написана на скорую руку, много мусора, на днях все лишнее выкину. Это моя первая раздача, так что не обессудьте.
Используется компонента compound.dll.

Внимание, обработка меняет в ert файлах программный код. Не опытным пользователям, предварительно посоветоваться с программистом.

Для работы требуется зарегестрировать компоненту compound.dll (берем отсюда). Она есть в архиве с обработкой. 

Теперь к самой программе: программа загружается только под пользователем «администратор»(желающие меняют под себя).  При запуске загружается список файлов из каталога  «КаталогИБ()ExtForms*.ert» (т.е. выводит весь список ert файлов находящихся в папке ExtForms) и список всех пользователей. Становимся на пользователя , ставим галочки возле нужного отчета и жмем «Поменять доступ». И так с каждым пользователем. Поле «С» показывает, есть доступ на данного пользователя или нет. Если стоит «#», значит доступ на данный отчет у пользователя есть.

Изменения вступят в силу только после нажатия кнопки «ПРИМЕНИТЬ ПРАВА «. Внимание!!! После нажатия кнопки «Изменить права» меняется программный код ert файлов отмеченные в поле «ИЗМ» следующим символом — «*» !

Для программистов: схема следующая, берем ert файл, рапаковываем , сгружаем «Main Metadata Stream» в текст, добовляем/удаляем в конец текста (программного кода) наш кусочик программы и опять запаковываем. По сути, мы просто добавили в конце нашего ert файла следующий программный код:

 

//НачалоДоступаКОбъекту

User =ИмяПользователя()+«;»;

СписокПолДляОбработки=«АдминистраторСД;Администратор;»;

Если  Найти(Врег(СписокПолДляОбработки),Врег(User))=0 тогда

Предупреждение(«У вас нет доступа!»,10);

Форма.Закрыть();

КонецЕсли;

//КонецДоступаКОбьекту

 

 

 

9 Comments

  1. TrinitronOTV

    доступы в целом или индивидуально на каждый внешний отчет? если в целом, тогда можно и через конфигуратор решить проблему

    Reply
  2. kompas-dm

    (0) Ну что так сложно … «Без изменения конфигурации» — не самоцель. Да еще и внешние отчеты. Они потому и внешние, что мимо конфигурации.

    Все равно придется где-то править … Управление внешними отчетами

    Reply
  3. YChemodanov

    (1) TrinitronOTV,

    Доступ ставиться на каждый внешний отчет отдельно.

    Reply
  4. YChemodanov

    (2) kompas-dm, это не самоцель, а конкретное решение поставленной задачи. Мне сказали, я сделал. Когда запрещают даже админский набор прав трогать, волей неволей приходиться извращаться — это мой вариант решения, если есть идеи с большим удовольствием выслушаю.

    Reply
  5. TrinitronOTV
    YChemodanov пишет:

    (1) TrinitronOTV,

    Доступ ставиться на каждый внешний отчет отдельно.

    спасибо за ответ на мой вопрос, плюсану

    Reply
  6. YChemodanov

    Всегда рад. Как никак , первая раздача. Если все нормально, еще несколько проектов выложу.Может кому и пригодиться.

    Reply
  7. TrinitronOTV
    YChemodanov пишет:

    Всегда рад. Как никак , первая раздача. Если все нормально, еще несколько проектов выложу.Может кому и пригодиться.

    выкладывай, всегда найдутся те, кому твой труд пригодиться в своей деятельности

    Reply
  8. infostar81

    попробуем, спасибо

    Reply
  9. Aleks_PV

    Спасибо, пригодилось.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *