7.7 Обойти действие константы запрета редактирования

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем M a x i m, 16 июл 2009.

  1. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    Добрый день
    подскажите:
    -как обойти константу "Дата запрета редактирования" для конкретного пользователя?
    -как сделать так, чтобы дата запрета редактирования была на один день меньше текущей даты сервера, где крутится 1с?


    (поясню - я занимаюсь поддержкой рецептур в актуальном состоянии и я в формирую за месяц отчет о списании материалов. Изменения в рецептурах за прошедший месяц мне дают после его окончания. Я каждое утро прибавляю по дню к дате запрета редактирования, чтобы вчерашние данные никто не правил. Но после постфактумного редактирования рецептур я должен перепровести выпуски продукции и приходится ставить дату запрета аж на конец позапрошлого месяца.)

    p.s. сервер, где БД 1с - это и терминальный сервер, и просто файл-сервер.
  2. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    надо в код лезть, сможешь?
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ДЛя установки константы ДатаЗапретаРедактирования Напиши процедуру в ГМ
    Код:
    Процедура УстановитьЗапрет()
    Если Константа.=1 Тогда
    Константа.ДатаЗапретаРедактирования=ТекущаяДата()-1;
    Конецесли;
    КонецПроцедуры
    
    Процедура ПриНачалеРаботыСистемы()
    ........
    ОбработкаОжидания("УстановитьЗапрет",1200)
    .........
    КонецПроцедуры
    
    
    
    Константа УстановитьЗапрет поможет если нужно временноотключить автоматическую установку запрета.

    По поводоу обхода запрета..... В ГМ за это отвечает глПроверкаРазрешенияРедактирования - редакируй ее
  4. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    смогу

    Бухгалтерский угодник, спасибо
  5. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    не работает

    а насчет
    в глПроверкаРазрешенияРедактирования(Конт)
    и в глМожноЗаписатьДокумент(Конт)
    сделал так
    Код:
    Если ИмяПользователя()<>"Администратор" Тогда
    
    
    внутрь поместил то, что было в теле процедуры - работает
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Имя константы не было определено в тексте.
    Код:
    Если Константа.УстановитьЗапрет=1 Тогда
    
    
  7. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    да я так и сделал сразу, просто не стал это озвучивать
    все равно не работает.
    я даже потом отменил условие проверки этой константы - бестолку.

    p.s. только я назвал константу "ВключитьЗапретРедактирования" и придал ей тип перечисление ВклВыкл (у которой два значения "Вкл" и "Выкл"), поэтому у меня эта строка выглядела так
    Код:
    Если Константа.ВключитьЗапретРедактирования="Вкл" Тогда
    
    . Но все это неважно.
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Если Константа.ВключитьЗапретРедактирования=Перечисление.ВклВыкл.Вкл Тогда
    
    
  9. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    точно - так и надо было сделать (забыл, что это ж перечисление)

    но не работает.
    Я ж даже коментил это условие, чтобы безусловно выполнение этой строки:
    Код:
    Константа.ДатаЗапретаРедактирования=ТекущаяДата()-1;
    
    
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Она вообще в УстановитьЗапрет() из ОбработкаОжидания вообще заходит?
  11. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    нет не заходит - я в Установитьзапрет написал Сообщить("Ставим запрет"); - сообщение не появилось.
    я закоментил ОбработкуОжидания и сделал просто вызов процедуры - пишет, что она не обнаружена. Я ее уже ниже чем ПриНачалеработы вставил - бестолку :(
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ПриНачалеРаботыСистемы()
    Назначение:
    Предопределенная процедура при начале работы пользователя.
    Замечание:
    Данная процедура может располагаться только в глобальном программном модуле.

    ОбработкаОжидания(<ИмяПроцедуры>,<ИнтервалВызова>)
    Назначение:
    Инициирует периодический вызов процедуры глобального модуля с заданным интервалом времени.
    Возвращает имя процедуры глобального модуля, которая назначена для периодического запуска (на момент до исполнения процедуры).
    Параметры:
    <ИмяПроцедуры> - необязательный параметр. Строковое выражение - имя процедуры глобального модуля, которая будет вызываться периодически с временным интервалом <ИнтервалВызова>. Тело процедуры <ИмяПроцедуры> должно быть написано разработчиком конфигурации в глобальном программном модуле. Если в качестве параметра передается 'пустая строка', то ранее запущенный процесс прекращается.
    <ИнтервалВызова> - необязательный параметр. Числовое выражение - интервал времени в секундах, с которым периодически будет вызываться процедура глобального модуля <ИмяПроцедуры>. Если в качестве параметра передается 0 (ноль), то ранее запущенный процесс прекращается.

    Смотри что делаешь не так....
  13. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    сделал так:
    Код:
    Процедура ПриНачалеРаботыСистемы()
    ....
    //Включаем автоматическое запрещение 
    ОбработкаОжидания("УстановитьЗапрет", 1200); //добавлено мной для автозапрета редактирования вчерашних доков
    
    КонецПроцедуры // ПриНачалеРаботыСистемы()    
    
    
    //******************************************************************************
    // Автоматическое запрещение редактирования вчерашних документов
    Процедура УстановитьЗапрет()     //добавлено мной
    Сообщить ("Ставим запрет");
    //Если Константа.ВключитьЗапретРедактирования=Перечисление.ВклВыкл.Вкл Тогда
    Константа.ДатаЗапретаРедактирования=ТекущаяДата()-1;
    //Конецесли;
    
    КонецПроцедуры
    
    
    
    Условие закомментировал для простоты картины (хотя константа существует)
    Раньше процедуру УстановитьЗапрет() держал выше, чем ПриНачалеРаботыСистемы()

    Я уже в процедуру ПриОткрытии() для Общего журнала ввел вызов УстановитьЗапрет() - работает, если добавить "Экспорт" для нее же в ГМ. Делаю ОбработкуОжидания тут же и для нее же - никак.
  14. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    ВСЕ РАБОТАЕТ!!!
    извиняюсь - похоже и работало сразу
    просто я думал, что ОбработкаОжидания включается сразу, а потом повторяется через заданный интервал. А она начинает выполняться (а потом уже повторяться) через заданный интервал. Поставил тупо 10 секунд и фсё выяснил.
    Бухгалтерский угодник - спасибо за труд и помощь.

    Просто теперь для надежности в ГМ сделаю и просто вызов УстановитьЗапрет() для запуска при старте системы и Обработку ожидания, чтоб повторялось :).

    А от константы, наверное, вообще откажусь - просто отключаю в ГМ запрет записи для Администратора - и все.
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Всетаки не советую. Константу ВключитьЗапретРедактирования рекомендую оставить, т.к. МАЛО ЛИ ЧТО. По закону подлости главбуху (а она не администратор же) завтра приспичит поработат, а ей каждый интервал времени буде кислород перекрываться.... Или какая-либо подобная ситуация - придется всех выгонять и в ГМ лезть, отключать... А так - универсальнее получится
  16. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    Тогда лучше для того же главбуха сделать константу "РазрешитьГлавбухуПоработатьЗаднимЧислом" и разрешение только для нее будет действовать. Это лучше, чем открывая доступ ради главбуха открывать его всем.
  17. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Меня как-то тоже попросили подобную задачу сделать. Я в справочник "пользователи" добавил 2 реквизита: Дата запрета редактирования и Дней открытого периода. Первый ограничивал по дате, до которой нельзя редактировать, а второй от текущей даты количество дней для редактирования содержал. Ну и глобальник чуть подправил, чтоб он даты не с константы тянул, а из справочника. Очень гибкие настройки для каждого пользователя получились тогда.
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Действительно - хорошая идея. Только каким образом организован механизм запрета измерения этих реквизитов сторонними пользователями?
  19. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Ну, у меня администратор мог только справочник менять (при записи элемента проверял), а если новый пользователь создавался, то ему 1 день на редактирование автоматом открывался.
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1 день? Хм... Или один раз? Вышел - зашел... снова в 1с можно в этот же день... Сложновато получается такой механизм, да и нужно ли.... Я так понимаю при создании пользователя 1РАЗ. И еще - определять администратора в конфе по имени или еще как.... Я добавляю обычно в справочник пользователей ФЛАГ (админ). (при старте автоматом создается у первого юзера и только он может другого юзера сделать админом - поставить/убрать флаг.) Предусмотрена защита от дурака (чтобы не спилить сук на котором сидишь, т.е. не лишить самого себя админских прав (если последний из могикан в списке)

Поделиться этой страницей