Автоустановка даты запрета редактирования для пользователей






Вручную устанавливать дату запрета не очень удобно, особенно если для каждого вида пользователей свой период.
Эту работу можно и нужно автоматизировать

Для того, чтобы это работало, надо:

1. У регистра сведений «ГраницыЗапретаИзмененияДанных» нужно создать в ресурсах 2 новых:
ГраницаЗапретаИзмененийУстановлена (тип дата и время)
КоличествоДнейДоступа (тип число, длина 5, не отрицательный)

2. Общие формы «УстановкаДатыЗапретаИзмененияДанных» нужно на обе закладки добавить по 2 колонки (2 новых ресурса из регистра сведений «ГраницыЗапретаИзмененияДанных»)
Модуль заменить на приложенный в файле «Модуль Общей Формы (УстановкаДатыЗапретаИзмененияДанных)». На тот случай, если есть вероятность, что модуль общей формы мог быть изменен с поставкой
то из приложенного листинга перенести все внесенные изменения, которые начинаются с «//нс+» и заканчиваются на «//нс-«

3. В модуле обычного приложения найти процедуру «ПриНачалеРаботыСистемы()» и в самый конец поместить:

//нс+ ПриНачалеРаботыСистемы() установка граници запрета редактирования
СФ_Дополнения.УстановитьГраницуПериодаРедактирования();
//нс-

5. Разместить приложенный модуль «УстановитьГраницуПериодаРедактирования», расположенный в одноименном файле в общем модуле. В данном случае поместил в созданный общий модуль «СФ_Дополнения»

6. Проверить запуск под пользователем с ролью не администратора. Для того, чтобы работал автомат по установке даты запрета входа, придется дать права на запись регистра «ГраницыЗапретаИзмененияДанных»

 

Установив в обработке по установке даты запрета количества «дней доступа» каждой группе пользователей или пользователю, можно забыть про эту проблему.

Работает это так:

Пользователь открывает 1С предприятие и автоматически срабатывает процедура при запуске, далее проверяется факт установки даты запрета в текущий день (фактически дату запрета сдвигает первый вошедший в БД пользователь). Если дата еще не сдвигаласьустанавливалась, то согласно прописанным в обработке количеству «дней доступа» устанавливается крайняя дата запрета. Пример на скриншоте.

14 Comments

  1. Tanis

    Доброй ночи!

    Штука конечно интересная. Но возникают моменты когда открыть доступ одну пользователю, добавляем этого пользователя, и ему увеличивать количество дней? и сегодня он не успел, на следующий день ему еще раз прибавить количество?

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

    Спасибо!

    Reply
  2. izidakg

    (1) Tanis,

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

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

    Другими словами — да если нужно больше дней и сегодня не успел этот пользователь или группа, то завтра надо еще раз установитьоткрыть нужную дату для избранного.

    Удобство как раз в том что само выравнивается на срок доступных дней по умолчанию. Ведь не редки случаи когда открывали доступ пользователю для подчистки чего-либо и в запаре забывали закрыть.

    Хотя учитывая сказанное вами появилась мысль об еще одном параметре — количество дней расширенного доступа.

    Так чтобы например — установили доступ на 1.09.2014 кому либо и «количество дней расширенного доступа» равным 5

    каждый день рабочий этот параметр будет уменьшаться на 1 и при равенстве нулю устанавливается срок по умолчанию, а до тех пор на установленном 01.09.2014

    Reply
  3. OBEH

    Идея здравая. Чувствуется из опыта рожденная.

    Но, по моему, не стоит ради этого конфигурацию править.

    Может быть, достаточно внешней обработкой править регистр сведений ГраницыЗапретаИзмененияДанных?

    Reply
  4. gull22

    Есть вариант без изменения конфы http://infostart.ru/public/166600/

    Реализовали у себя в УПП, работает прекрасно

    Reply
  5. izidakg

    (3) OBEH,

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

    при возможности этого не делать, делаю внешними наработками.

    но тут надо что работало всегда — при переносе БД также продолжало

    не зависело от операционки никак.

    к тому же данный модуль у 1С фактически с момента разработки не менялся, поэтому при обновлении БД тут проблем нет

    Reply
  6. izidakg

    (4) gull22,

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

    а запуск скриптом это лотерея. может проработать без сбоя и год, а может слетать постоянно. при переносе БД нужно заново настраивать.

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

    Reply
  7. pro-specs

    Очень помогло!

    Reply
  8. Antimyslitel

    Ругается говорит что не может найти переменную ГраницаИзмененияДанных!!!

    Ошибка ниже сделал все как указанно!

    {ОбщаяФорма.УстановкаДатыЗапретаИзмененияДанных(332,7)}: Переменная не определена (ПрименятьДатуЗапретаДляПолныхПрав)

    Если <<?>>ПрименятьДатуЗапретаДляПолныхПрав <> мИсходноеЗначениеПрименятьДатуЗапретаДляПолныхПрав Тогда (Проверка: Толстый клиент (обычное приложение))

    {ОбщаяФорма.УстановкаДатыЗапретаИзмененияДанных(333,58)}: Переменная не определена (ПрименятьДатуЗапретаДляПолныхПрав)

    Константы.ПрименятьДатуЗапретаДляПолныхПрав.Установить(<<?>>ПрименятьДатуЗапретаДляПолныхПрав); (Проверка: Толстый клиент (обычное приложение))

    {ОбщаяФорма.УстановкаДатыЗапретаИзмененияДанных(334,56)}: Переменная не определена (ПрименятьДатуЗапретаДляПолныхПрав)

    мИсходноеЗначениеПрименятьДатуЗапретаДляПолныхПрав = <<?>>ПрименятьДатуЗапретаДляПолныхПрав; (Проверка: Толстый клиент (обычное приложение))

    Что делать и что спасет! Никаких ранее изменений не было!

    Reply
  9. Antimyslitel

    Теперь ругается так:

    {МодульОбычногоПриложения(247,2)}: Переменная не определена (СФ_Дополнения)

    <<?>>СФ_Дополнения.УстановитьГраницуПериодаРедактирования(); (Проверка: Толстый клиент (обычное приложение))

    Reply
  10. Antimyslitel

    Все вроде разобрался!

    Reply
  11. Antimyslitel

    нет все таки такую ошибку дает:

    {ОбщаяФорма.УстановкаДатыЗапретаИзмененияДанных(331,7)}: Переменная не определена (ПрименятьДатуЗапретаДляПолныхПрав)

    Если <<?>>ПрименятьДатуЗапретаДляПолныхПрав <> мИсходноеЗначениеПрименятьДатуЗапретаДляПолныхПрав Тогда

    Разработку форм рекомендуется выполнять в разрешении 96 DPI

    {ОбщаяФорма.УстановкаДатыЗапретаИзмененияДанных(332,58)}: Переменная не определена (ПрименятьДатуЗапретаДляПолныхПрав)

    Константы.ПрименятьДатуЗапретаДляПолныхПрав.Установить(<<?>>ПрименятьДатуЗапретаДляПолныхПрав);

    {ОбщаяФорма.УстановкаДатыЗапретаИзмененияДанных(333,56)}: Переменная не определена (ПрименятьДатуЗапретаДляПолныхПрав)

    мИсходноеЗначениеПрименятьДатуЗапретаДляПолныхПрав = <<?>>ПрименятьДатуЗапретаДляПолныхПрав;

    Достало уже! где и что могло быть не правильно?

    Reply
  12. Antimyslitel

    И при самом запуске клиента дает такую ошибку : Поле объекта недоступно для записи (КоличествоДнейДоступа)

    А потом уже эту когда хочешь проставить дату!

    {ОбщаяФорма.УстановкаДатыЗапретаИзмененияДанных(331,7)}: Переменная не определена (ПрименятьДатуЗапретаДляПолныхПрав)

    Если <<?>>ПрименятьДатуЗапретаДляПолныхПрав <> мИсходноеЗначениеПрименятьДатуЗапретаДляПолныхПрав Тогда

    Разработку форм рекомендуется выполнять в разрешении 96 DPI

    {ОбщаяФорма.УстановкаДатыЗапретаИзмененияДанных(332,58)}: Переменная не определена (ПрименятьДатуЗапретаДляПолныхПрав)

    Константы.ПрименятьДатуЗапретаДляПолныхПрав.Установить(<<?>>ПрименятьДатуЗапретаДляПолныхПрав);

    {ОбщаяФорма.УстановкаДатыЗапретаИзмененияДанных(333,56)}: Переменная не определена (ПрименятьДатуЗапретаДляПолныхПрав)

    мИсходноеЗначениеПрименятьДатуЗапретаДляПолныхПрав = <<?>>ПрименятьДатуЗапретаДляПолныхПрав;

    Достало уже! где и что могло быть не правильно?

    Reply
  13. Antimyslitel

    я взял над ошибкой тупо добавил:

    ПрименятьДатуЗапретаДляПолныхПрав = Константы.ПрименятьДатуЗапретаДляПолныхПрав;

    Если ПрименятьДатуЗапретаДляПолныхПрав <> мИсходноеЗначениеПрименятьДатуЗапретаДляПолныхПрав Тогда

    Константы.ПрименятьДатуЗапретаДляПолныхПрав.Установить(ПрименятьДатуЗапретаДляПолныхПрав);

    мИсходноеЗначениеПрименятьДатуЗапретаДляПолныхПрав = ПрименятьДатуЗапретаДляПолныхПрав;

    КонецЕсли;

    Правильно ли я поступил или как?

    Reply
  14. izidakg

    (13) Antimyslitel,

    в какую конфигурацию добавляешь?

    к этой разработке давно не возвращался, хотя есть пару дополнений что можно прикрутить еще

    Reply

Leave a Comment

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