|
Установка даты запрета изменения данных | ☑ | ||
---|---|---|---|---|
0
Luffy
26.01.16
✎
07:06
|
Как сделать для УПП, в форме Установка даты запрета изменения данных, общая дата, дата ставилась за предыдущий день, при открытии программы автоматически, например сегодня 26.01.2016, а надо чтоб поставилась 25.01.2016?
|
|||
1
VladZ
26.01.16
✎
07:07
|
Разработать процедуру установки и прописать запуск в ПриНачалеРаботыСистемы
|
|||
2
Luffy
26.01.16
✎
07:12
|
(1) Чуть по подробнее можно, как с датой быть?)
|
|||
3
Godofsin
26.01.16
✎
07:16
|
(2) Получаешь дату запрета, сравниваешь со вчерашней датой, не совпало - изменяешь.
|
|||
4
Luffy
26.01.16
✎
07:20
|
(3) Дата запрета, я так понимаю в регистре сведений ГраницыЗапретаИзмененияДанных от туда ее запросом вытащить или как?
|
|||
5
Godofsin
26.01.16
✎
07:24
|
(4) Да, тащи запросом.
|
|||
6
Luffy
26.01.16
✎
07:38
|
(5) То есть создать Процедуру УстановкиДатыЗапрета Экспорт в модуле формы, а потом обратиться к ней в глобальном модули к Процедуре ПриНачалеРаботыСистемы() а там уже сравнить с текущей датой?
|
|||
7
Godofsin
26.01.16
✎
07:39
|
(6) Ну хочешь так, хочешь через процедуру в общем модуле. Как тебе больше нравится.
|
|||
8
Luffy
26.01.16
✎
07:43
|
(7) Хорошо попробую в глобалке ПриНачалеРаботыСистемы
|
|||
9
FIXXXL
26.01.16
✎
10:10
|
(8) поищи в модулях, наверняка уже написана такая функция
|
|||
10
Luffy
26.01.16
✎
10:41
|
Столкнулся с проблемой отладчик не срабатывает, в глобальном модуле в Проц ПриНачалеРаботыСистемы, в чем дело?
|
|||
11
vicof
26.01.16
✎
10:42
|
(10) Отладка на сервер включена?
|
|||
12
vicof
26.01.16
✎
10:43
|
на сервере*
|
|||
13
Tarlich
26.01.16
✎
10:46
|
А может правильнее (удобнее для последующих обновлений) подписки на события...?
|
|||
14
Luffy
26.01.16
✎
10:49
|
(11) Да на сервере, (13) не понял, база обновляется нужно что то отключить?
|
|||
15
Tarlich
26.01.16
✎
10:52
|
не помню где взял , но вот еще один способ решения
//////// Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1 | 1 |ИЗ | РегистрСведений.ГраницыЗапретаИзмененияДанных КАК ГраницыЗапретаИзмененияДанных |ГДЕ | И ГраницыЗапретаИзмененияДанных.ГраницаЗапретаИзменений < &ГраницаЗапретаИзменений"); ГраницаЗапретаИзменений = НачалоДня(ТекущаяДата() - 259200); //60*60*24=86400 1день, 60*60*48=172800 2 дня, 60*60*72=259200 3 дня Запрос.УстановитьПараметр("ГраницаЗапретаИзменений", ГраницаЗапретаИзменений); НаборЗаписей = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьНаборЗаписей(); НаборЗаписей.Прочитать(); Для каждого Запись Из НаборЗаписей Цикл Запись.ГраницаЗапретаИзменений = ГраницаЗапретаИзменений; КонецЦикла; НаборЗаписей.Записать(); //// Итак решение (внимание, действия должны выполнятся специалистом) Общий Модуль - Полные Права - Процедура Процедура УстановитьПараметрГраницыЗапретаИзмененияДанных() Экспорт В начало процедуры код: //Мания1С Попытка СоответствиеГраницЗапрета = ПараметрыСеанса.ГраницыЗапретаИзмененияДанных.Получить(); ГраницаПериода = СоответствиеГраницЗапрета["ОбщаяДатаЗапретаРедактирования"]; Вчера = НачалоДня(НачалоДня(ТекущаяДата())-1); ПозаВчера = НачалоДня(НачалоДня(Вчера)-1); Если ГраницаПериода < ПозаВчера Тогда Рег = РегистрыСведений.ГраницыЗапретаИзмененияДанных; Набор = Рег.СоздатьНаборЗаписей(); ТекущиеДанные = Рег.Выбрать(); Пока ТекущиеДанные.Следующий() Цикл Если ЗначениеЗаполнено(ТекущиеДанные.Организация) Тогда Продолжить; КонецЕсли; Запись = Набор.Добавить(); Запись.Организация = ТекущиеДанные.Организация; Запись.Пользователь = ТекущиеДанные.Пользователь; Запись.ГраницаЗапретаИзменений = ПозаВчера; КонецЦикла; Набор.Записать(); КонецЕсли; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Всё. После добавления этого кода, каждый день при входе первого пользователя программа автоматически устанавливает дату запрета редактирования для всех последующих пользователей. (в моем примере дата автоматически устанавливается для всех пользователей на позавчерашний день). ///// так. Задача. Требуется доработать конфигурацию таким образом, чтобы при входе некоторого пользователя в систему для него автоматически закрывался для редактирования вчерашний день (и соответственно все предыдущие). При этом уполномоченные пользователи должны иметь возможность открыть для редактирования определенный период при необходимости. Решение. 1. Вводим дополнительное право пользователя. Назовем его «Автоматически НЕ закрывать предыдущий день». }39; В режиме Предприятие открываем меню «Операции / Планы видов характеристик / Права пользователей» }39; В группу «Документы» (или куда сочтете нужным) добавляем новое право «Автоматически НЕ закрывать предыдущий день», тип значения – Булево (составной тип отменяется). }39; Во избежание возможных эксцессов при последующих обновлениях код нового элемента лучше установить в «1000», например. Разработчики конфигурации при пополнении списка новыми предопределенными характеристиками вряд ли дойдут до такого кода. }39; Теперь в меню «Сервис / Пользователи / Настройка дополнительных прав пользователей» в группе «Документы» появился новый флажок, который можно установить тем пользователям, для которых НЕ надо задействовать механизм автоматического закрытия вчерашнего дня от редактирования. 2. Дорабатываем конфигурацию }39; добавляем новый ПРИВИЛЕГИРОВАННЫЙ общий модуль. Назовем его, например, «АЦРК_Привилегированный». В свойствах модуля должны быть установлены галочки «Привилегированный», "Вызов сервера" и «Сервер». В этом модуле должны быть следующая процедура: Процедура ЗакрытиеПредыдущегоДня() Экспорт // НЕ зхакрывает предыдущий день если установлено право пользователя "Автоматически НЕ закрывать предыдущий день" // в противном случае производится запрет редактирования по предыдущий день включительно. // Для вновь введенных пользователей предыдущий день будет автоматически закрываться, потому что настройка // "Автоматически НЕ закрывать предыдущий день" не установлена. л_Право = ПланыВидовХарактеристик.ПраваПользователей.НайтиПоНаименованию("Автоматически НЕ закрывать предыдущий день"); //л_Право = ПланыВидовХарактеристик.ПраваПользователей.НайтиПоНаименованию("Автоматически закрывать предыдущий день"); Если л_Право.Пустая() Тогда // если такой настройки в принципе в базе нет, то ничего и не делаем Возврат; КонецЕсли; л_ТекущийПользователь = УправлениеПользователями.ОпределитьТекущегоПользователя(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗначенияДополнительныхПравПользователя.Значение |ИЗ | РегистрСведений.ЗначенияДополнительныхПравПользователя КАК ЗначенияДополнительныхПравПользователя |ГДЕ | ЗначенияДополнительныхПравПользователя.Пользователь = &Пользователь | И ЗначенияДополнительныхПравПользователя.Право = &Право"; Запрос.УстановитьПараметр("Пользователь", л_ТекущийПользователь); Запрос.УстановитьПараметр("Право", л_Право); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда л_УстановитьЗапрет = Истина; Иначе Выборка = Результат.Выбрать(); Выборка.Следующий(); л_УстановитьЗапрет = НЕ Выборка.Значение; КонецЕсли; Если л_УстановитьЗапрет Тогда л_Запись = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьМенеджерЗаписи(); л_Запись.Пользователь = л_ТекущийПользователь; л_Запись.ГраницаЗапретаИзменений = НачалоДня(НачалоДня(ТекущаяДата())-60); л_Запись.Записать(); КонецЕсли; ПолныеПрава.УстановитьПараметрГраницыЗапретаИзмененияДанных(); КонецПроцедуры }39; Вставляем одну строку в модуль приложения, перед окончанием процедуры «ПриНачалеРаботыСистемы» … АЦРК_Привилегированный.ЗакрытиеПредыдущегоДня(); //АЦРК КонецПроцедуры // ПриНачалеРаботыСистемы() Вот и все. |
|||
16
Luffy
26.01.16
✎
10:53
|
В других не в глобальном модуле отладчик работает
|
|||
17
Luffy
26.01.16
✎
11:12
|
(15) Это все в Проц ПриНачалеРаботыСистемы верно?
|
|||
18
Luffy
27.01.16
✎
06:28
|
(15) Спасибо большое, все отлично сработало!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |