0
Процедура УстановитьПараметрГраницыЗапретаИзмененияДанных() Экспорт
//Если РольДоступна("ПолныеПрава") И НЕ Константы.ПрименятьДатуЗапретаДляПолныхПрав.Получить() Тогда
// ПараметрыСеанса.ГраницыЗапретаИзмененияДанных = Новый ХранилищеЗначения(Неопределено, Новый СжатиеДанных(0));
//
// Возврат;
//КонецЕсли;
//
//ТекстЗапросаПоОрганизациям = "
//|ВЫБРАТЬ
//| Значение(Справочник.Организации.ПустаяСсылка) как Организация
//| ОБЪЕДИНИТЬ
//| ВЫБРАТЬ
//| Организации.Ссылка
//| ИЗ
//| Справочник.Организации КАК Организации ";
//
//ТекстЗапросаПоОбщейДатеЗапретаРедактирования = "ВЫБРАТЬ
// | ЕстьNull(ГраницыЗапретаИзмененияДанных.ГраницаЗапретаИзменений, ДатаВремя(1,1,1)) КАК ОбщаяДата
// |ИЗ
// | РегистрСведений.ГраницыЗапретаИзмененияДанных КАК ГраницыЗапретаИзмененияДанных
// |ГДЕ
// | ГраницыЗапретаИзмененияДанных.Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
// | И ГраницыЗапретаИзмененияДанных.Пользователь = НЕОПРЕДЕЛЕНО";
//ТекстЗапросаПоПриоритетамЗаписей = "ВЫБРАТЬ
// | Границы.Организация КАК Организация,
// | Границы.Пользователь КАК Пользователь,
// | ВЫБОР
// | КОГДА Границы.Пользователь = НЕОПРЕДЕЛЕНО
// | ТОГДА 3
// | КОГДА Границы.Пользователь ССЫЛКА Справочник.ГруппыПользователей
// | И ГруппыПользователей.Пользователь = &Пользователь
// | ТОГДА 2
// | КОГДА Границы.Пользователь ССЫЛКА Справочник.Пользователи
// | И Границы.Пользователь = &Пользователь
// | ТОГДА 1
// | КОНЕЦ КАК Приоритет,
// | Границы.ГраницаЗапретаИзменений КАК ГраницаЗапретаИзменений
// |ИЗ
// | РегистрСведений.ГраницыЗапретаИзмененияДанных КАК Границы
// | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.ПользователиГруппы КАК ГруппыПользователей
// | ПО (ГруппыПользователей.Пользователь = &Пользователь И ГруппыПользователей.Ссылка = Границы.Пользователь)";
//
//Запрос = Новый Запрос;
//Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
// | Организации.Организация как Организация,
// | МИНИМУМ(ЕСТЬNULL(ТаблицаГраницыЗапрета.ГраницаЗапретаИзменений, ОбщаяДатаЗапрета.ОбщаяДата)) КАК ГраницаЗапретаИзменений,
// | ОбщаяДатаЗапрета.ОбщаяДата как ОбщаяДата
// |ИЗ
// | (" + ТекстЗапросаПоОрганизациям+") Как Организации
// | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
// | Границы.Организация КАК Организация,
// | МИНИМУМ(Приоритеты.Приоритет) КАК Приоритет
// | ИЗ
// | РегистрСведений.ГраницыЗапретаИзмененияДанных КАК Границы
// | ЛЕВОЕ СОЕДИНЕНИЕ (" + ТекстЗапросаПоПриоритетамЗаписей + ") КАК Приоритеты
// | ПО Границы.Организация = Приоритеты.Организация
// | И Границы.Пользователь = Приоритеты.Пользователь
// |
// | СГРУППИРОВАТЬ ПО
// | Границы.Организация) КАК ТаблицаПриоритетов
// | ПО ТаблицаПриоритетов.Организация = Организации.Организация
// | ЛЕВОЕ СОЕДИНЕНИЕ (" + ТекстЗапросаПоПриоритетамЗаписей + ") КАК ТаблицаГраницыЗапрета
// | ПО ТаблицаПриоритетов.Организация = ТаблицаГраницыЗапрета.Организация
// | И ТаблицаПриоритетов.Приоритет = ТаблицаГраницыЗапрета.Приоритет,
// | (" + ТекстЗапросаПоОбщейДатеЗапретаРедактирования + ") Как ОбщаяДатаЗапрета
// |СГРУППИРОВАТЬ ПО
// | Организации.Организация, ОбщаяДата";
//
//Запрос.УстановитьПараметр("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
//
//РезультатЗапроса = Запрос.Выполнить();
//Если РезультатЗапроса.Пустой() Тогда
// Соответствие = Неопределено;
//Иначе
// Соответствие = Новый Соответствие;
// Выборка = РезультатЗапроса.Выбрать();
// ОбщаяДатаЗапрета = Неопределено;
// Пока Выборка.Следующий() Цикл
// Соответствие[Выборка.Организация] = ?(ЗначениеЗаполнено(Выборка.ГраницаЗапретаИзменений), КонецДня(Выборка.ГраницаЗапретаИзменений), Выборка.ГраницаЗапретаИзменений);
// Если ОбщаяДатаЗапрета = Неопределено Тогда
// ОбщаяДатаЗапрета = ?(ЗначениеЗаполнено(Выборка.ОбщаяДата), КонецДня(Выборка.ОбщаяДата), Выборка.ОбщаяДата);
// КонецЕсли;
// КонецЦикла;
//
// Если НЕ ОбщаяДатаЗапрета = Неопределено Тогда
// Соответствие["ОбщаяДатаЗапретаРедактирования"] = ОбщаяДатаЗапрета;
// КонецЕсли;
//
// Если Соответствие.Количество() = 0 Тогда
// Соответствие = Неопределено;
// КонецЕсли;
//КонецЕсли;
//
//Если Соответствие <> Неопределено Тогда
// СохранятьСоответствие = Ложь;
// Для Каждого КлючИЗначение Из Соответствие Цикл
// ЕСли ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда
// СохранятьСоответствие = Истина;
// Прервать;
// КонецЕсли;
// КонецЦикла;
// Если НЕ СохранятьСоответствие Тогда
// Соответствие = Неопределено;
// КонецЕсли;
//КонецЕсли;
//
//ПараметрыСеанса.ГраницыЗапретаИзмененияДанных = Новый ХранилищеЗначения(Соответствие, Новый СжатиеДанных(0));
//Ильяс\\___________________________________________________________________
//Процедура УстановитьПараметрГраницыЗапретаИзмененияДанных() Экспорт
Если РольДоступна("ПолныеПрава") И НЕ Константы.ПрименятьДатуЗапретаДляПолныхПрав.Получить() Тогда
ПараметрыСеанса.ГраницыЗапретаИзмененияДанных = Новый ХранилищеЗначения(Неопределено, Новый СжатиеДанных(0));
Возврат;
КонецЕсли;
Попытка
//КоличествоДней = Константы.КоличествоДней.Получить();
ДеньДата = День(ТекущаяДата());
Если СтрДлина(ДеньДата) = 1 Тогда
ДеньДата = "0" + СокрЛП(ДеньДата);
КонецЕсли;
Если ДеньДата > 10 тогда
КоличествоДней = ДеньДата - 10;
КонецЕсли;
Если ДеньДата < 10 тогда
КоличествоДней = ДеньДата + 20;
КонецЕсли;
ДатаУстановки = НачалоДня(ТекущаяДата()) - (60*60*24*КоличествоДней);
НаборЗаписей = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьНаборЗаписей();
Запись = НаборЗаписей.Добавить();
//Запись.Организация = Организация;
//Запись.Пользователь =ТекПользователь;
Запись.ГраницаЗапретаИзменений = НачалоДня(ДатаУстановки);
НаборЗаписей.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ТекстЗапросаПоОрганизациям = "
|ВЫБРАТЬ
| Значение(Справочник.Организации.ПустаяСсылка) как Организация
| ОБЪЕДИНИТЬ
| ВЫБРАТЬ
| Организации.Ссылка
| ИЗ
| Справочник.Организации КАК Организации ";
ТекстЗапросаПоОбщейДатеЗапретаРедактирования = "ВЫБРАТЬ
| ЕстьNull(ГраницыЗапретаИзмененияДанных.ГраницаЗапретаИзменений, ДатаВремя(1,1,1)) КАК ОбщаяДата
|ИЗ
| РегистрСведений.ГраницыЗапретаИзмененияДанных КАК ГраницыЗапретаИзмененияДанных
|ГДЕ
| ГраницыЗапретаИзмененияДанных.Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
| И ГраницыЗапретаИзмененияДанных.Пользователь = НЕОПРЕДЕЛЕНО";
ТекстЗапросаПоПриоритетамЗаписей = "ВЫБРАТЬ
| Границы.Организация КАК Организация,
| Границы.Пользователь КАК Пользователь,
| ВЫБОР
| КОГДА Границы.Пользователь = НЕОПРЕДЕЛЕНО
| ТОГДА 3
| КОГДА Границы.Пользователь ССЫЛКА Справочник.ГруппыПользователей
| И ГруппыПользователей.Пользователь = &Пользователь
| ТОГДА 2
| КОГДА Границы.Пользователь ССЫЛКА Справочник.Пользователи
| И Границы.Пользователь = &Пользователь
| ТОГДА 1
| КОНЕЦ КАК Приоритет,
| Границы.ГраницаЗапретаИзменений КАК ГраницаЗапретаИзменений
|ИЗ
| РегистрСведений.ГраницыЗапретаИзмененияДанных КАК Границы
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.ПользователиГруппы КАК ГруппыПользователей
| ПО (ГруппыПользователей.Пользователь = &Пользователь И ГруппыПользователей.Ссылка = Границы.Пользователь)";
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Организации.Организация как Организация,
| МИНИМУМ(ЕСТЬNULL(ТаблицаГраницыЗапрета.ГраницаЗапретаИзменений, ОбщаяДатаЗапрета.ОбщаяДата)) КАК ГраницаЗапретаИзменений,
| ОбщаяДатаЗапрета.ОбщаяДата как ОбщаяДата
|ИЗ
| (" + ТекстЗапросаПоОрганизациям+") Как Организации
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| Границы.Организация КАК Организация,
| МИНИМУМ(Приоритеты.Приоритет) КАК Приоритет
| ИЗ
| РегистрСведений.ГраницыЗапретаИзмененияДанных КАК Границы
| ЛЕВОЕ СОЕДИНЕНИЕ (" + ТекстЗапросаПоПриоритетамЗаписей + ") КАК Приоритеты
| ПО Границы.Организация = Приоритеты.Организация
| И Границы.Пользователь = Приоритеты.Пользователь
|
| СГРУППИРОВАТЬ ПО
| Границы.Организация) КАК ТаблицаПриоритетов
| ПО ТаблицаПриоритетов.Организация = Организации.Организация
| ЛЕВОЕ СОЕДИНЕНИЕ (" + ТекстЗапросаПоПриоритетамЗаписей + ") КАК ТаблицаГраницыЗапрета
| ПО ТаблицаПриоритетов.Организация = ТаблицаГраницыЗапрета.Организация
| И ТаблицаПриоритетов.Приоритет = ТаблицаГраницыЗапрета.Приоритет,
| (" + ТекстЗапросаПоОбщейДатеЗапретаРедактирования + ") Как ОбщаяДатаЗапрета
|СГРУППИРОВАТЬ ПО
| Организации.Организация, ОбщаяДата";
Запрос.УстановитьПараметр("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Соответствие = Неопределено;
Иначе
Соответствие = Новый Соответствие;
Выборка = РезультатЗапроса.Выбрать();
ОбщаяДатаЗапрета = Неопределено;
Пока Выборка.Следующий() Цикл
Соответствие[Выборка.Организация] = ?(ЗначениеЗаполнено(Выборка.ГраницаЗапретаИзменений), КонецДня(Выборка.ГраницаЗапретаИзменений), Выборка.ГраницаЗапретаИзменений);
Если ОбщаяДатаЗапрета = Неопределено Тогда
ОбщаяДатаЗапрета = ?(ЗначениеЗаполнено(Выборка.ОбщаяДата), КонецДня(Выборка.ОбщаяДата), Выборка.ОбщаяДата);
КонецЕсли;
КонецЦикла;
Если НЕ ОбщаяДатаЗапрета = Неопределено Тогда
Соответствие["ОбщаяДатаЗапретаРедактирования"] = ОбщаяДатаЗапрета;
КонецЕсли;
Если Соответствие.Количество() = 0 Тогда
Соответствие = Неопределено;
КонецЕсли;
КонецЕсли;
Если Соответствие <> Неопределено Тогда
СохранятьСоответствие = Ложь;
Для Каждого КлючИЗначение Из Соответствие Цикл
ЕСли ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда
СохранятьСоответствие = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ СохранятьСоответствие Тогда
Соответствие = Неопределено;
КонецЕсли;
КонецЕсли;
ПараметрыСеанса.ГраницыЗапретаИзмененияДанных = Новый ХранилищеЗначения(Соответствие, Новый СжатиеДанных(0));
//КонецПроцедуры
//Ильяс\\___________________________________________________________________
КонецПроцедуры