Изменил код. Ввел новые переменные.
Добавил две переменные. В результате программа блокирует изменения вчерашнего дня, что и требовалось. Но при прокрутке даты сдвигается только дата для "М1". Я так понимаю т.к она последняя в процедуре, то она затирает предыдущую запись "М в регистре.
Помоги как решить эту проблему? Чтоб двигались обе даты для "М" и "М1"
ПользовательДляЗапрета = Справочники.Пользователи.НайтиПоНаименованию("М");
ПользовательДляЗапрета1 = Справочники.Пользователи.НайтиПоНаименованию("М1");
.........................................
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НужноДобавить = Истина;
Набор = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьНаборЗаписей();
Набор.Отбор.Организация.Установить(Выборка.Организация);
СтрокаВДереве = ДеревоДаты.Строки.Найти(Выборка.Организация, "ОрганизацияПользователь");
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = Неопределено;
Если СтрокаВДереве = Неопределено Тогда
Запись.ГраницаЗапретаИзменений = Дата('00010101');
Иначе
Запись.ГраницаЗапретаИзменений = СтрокаВДереве.Граница;
Для Каждого СтрокаРоли ИЗ СтрокаВДереве.Строки Цикл
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = СтрокаРоли.ОрганизацияПользователь;
Если Запись.Пользователь = ПользовательДляЗапрета Тогда
НужноДобавить = Ложь;
Запись.ГраницаЗапретаИзменений = НачалоДня(ТекущаяДата()) - 1;
Иначе
Запись.ГраницаЗапретаИзменений = СтрокаРоли.Граница;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НужноДобавить = Истина;
Набор = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьНаборЗаписей();
Набор.Отбор.Организация.Установить(Выборка.Организация);
СтрокаВДереве = ДеревоДаты.Строки.Найти(Выборка.Организация, "ОрганизацияПользователь");
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = Неопределено;
Если СтрокаВДереве = Неопределено Тогда
Запись.ГраницаЗапретаИзменений = Дата('00010101');
Иначе
Запись.ГраницаЗапретаИзменений = СтрокаВДереве.Граница;
Для Каждого СтрокаРоли ИЗ СтрокаВДереве.Строки Цикл
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = СтрокаРоли.ОрганизацияПользователь;
Если Запись.Пользователь = ПользовательДляЗапрета1 Тогда
НужноДобавить = Ложь;
Запись.ГраницаЗапретаИзменений = НачалоДня(ТекущаяДата()) - 1;
Иначе
Запись.ГраницаЗапретаИзменений = СтрокаРоли.Граница;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Добавим пользователя
Если НужноДобавить Тогда
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = ПользовательДляЗапрета;
Запись.ГраницаЗапретаИзменений = НачалоДня(ТекущаяДата()) - 1;
КонецЕсли;
Если НужноДобавить Тогда
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = ПользовательДляЗапрета1;
Запись.ГраницаЗапретаИзменений = НачалоДня(ТекущаяДата()) - 1;
КонецЕсли;
Весь код
Процедура КнопкаВыполнитьНажатие(Кнопка)
ПользовательДляЗапрета = Справочники.Пользователи.НайтиПоНаименованию("М");
ПользовательДляЗапрета1 = Справочники.Пользователи.НайтиПоНаименованию("М1");
// Создаём ДеревоЗначений для обработки
ДеревоДаты = Новый ДеревоЗначений;
ДеревоДаты.Колонки.Добавить("ОрганизацияПользователь");
ДеревоДаты.Колонки.Добавить("Граница");
ДеревоДаты.Колонки.Добавить("ПравоНаИзменение");
ДеревоДаты.Колонки.Добавить("ТипСтроки");
// Код из модуля общей формы УстановкаДатыЗапретаИзмененияДанных. Процедура ЗаполнитьДеревоДат().
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийПользователь", ПараметрыСеанса.ТекущийПользователь);
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Организации.Ссылка КАК Организация,
| ЕСТЬNULL(Границы.Пользователь, НЕОПРЕДЕЛЕНО) КАК Пользователь,
| ЕСТЬNULL(Границы.ГраницаЗапретаИзменений, ДАТАВРЕМЯ(1, 1, 1, 23, 59, 59)) КАК ГраницаЗапретаИзменений,
| ЕСТЬNULL(НастройкиПравДоступаПользователей.Запись, ЛОЖЬ) КАК ПравоНаИзменение,
| ВЫБОР
| КОГДА ЕСТЬNULL(Границы.Пользователь, НЕОПРЕДЕЛЕНО) = НЕОПРЕДЕЛЕНО
| ТОГДА 1
| КОГДА Границы.Пользователь ССЫЛКА Справочник.ГруппыПользователей
| ТОГДА 2
| КОГДА Границы.Пользователь ССЫЛКА Справочник.Пользователи
| ТОГДА 3
| КОНЕЦ КАК ПризнакТипаСтроки
|ИЗ
| Справочник.Организации КАК Организации
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГраницыЗапретаИзмененияДанных КАК Границы
| ПО Границы.Организация = Организации.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
| ПО Организации.Ссылка = НастройкиПравДоступаПользователей.ОбъектДоступа
| И (НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации))
| И (НастройкиПравДоступаПользователей.Пользователь В
| (ВЫБРАТЬ
| Справочник.ГруппыПользователей.ПользователиГруппы.Ссылка
| ИЗ
| Справочник.ГруппыПользователей.ПользователиГруппы
| ГДЕ
| Справочник.ГруппыПользователей.ПользователиГруппы.Пользователь = &ТекущийПользователь))
|
|УПОРЯДОЧИТЬ ПО
| Организация,
| ПризнакТипаСтроки,
| Границы.Пользователь
|АВТОУПОРЯДОЧИВАНИЕ";
Выборка = Запрос.Выполнить().Выбрать();
ЕстьРольПолныеПрава = РольДоступна("ПолныеПрава");
Пока Выборка.Следующий() Цикл
Если Выборка.Пользователь = Неопределено Тогда
СтрокаОрганизации = ДеревоДаты.Строки.Добавить();
СтрокаОрганизации.ОрганизацияПользователь = Выборка.Организация;
СтрокаОрганизации.Граница = Выборка.ГраницаЗапретаИзменений;
СтрокаОрганизации.ПравоНаИзменение = ЕстьРольПолныеПрава ИЛИ Выборка.ПравоНаИзменение;
СтрокаОрганизации.ТипСтроки = Выборка.ПризнакТипаСтроки;
Иначе
Если СтрокаОрганизации = Неопределено ИЛИ СтрокаОрганизации.ОрганизацияПользователь <> Выборка.Организация Тогда
СтрокаОрганизации = ДеревоДаты.Строки.Добавить();
СтрокаОрганизации.ОрганизацияПользователь = Выборка.Организация;
СтрокаОрганизации.ПравоНаИзменение = ЕстьРольПолныеПрава ИЛИ Выборка.ПравоНаИзменение;
СтрокаОрганизации.ТипСтроки = 1;
КонецЕсли;
СтрокаПользователя = СтрокаОрганизации.Строки.Добавить();
СтрокаПользователя.ОрганизацияПользователь = Выборка.Пользователь;
СтрокаПользователя.Граница = Выборка.ГраницаЗапретаИзменений;
СтрокаПользователя.ПравоНаИзменение = ЕстьРольПолныеПрава ИЛИ Выборка.ПравоНаИзменение;
СтрокаПользователя.ТипСтроки = Выборка.ПризнакТипаСтроки;
КонецЕсли;
КонецЦикла;
// Код из модуля общей формы УстановкаДатыЗапретаИзмененияДанных. Процедура СохранитьДанные().
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ //РАЗРЕШЕННЫЕ
| Организации.Ссылка КАК Организация
|ИЗ
| Справочник.Организации КАК Организации";
Если Не РольДоступна("ПолныеПрава") Тогда
Запрос.Текст = Запрос.Текст + "
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
|ПО Организации.Ссылка = НастройкиПравДоступаПользователей.ОбъектДоступа
| И (НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации))
| И (НастройкиПравДоступаПользователей.Пользователь В
| (ВЫБРАТЬ
| Справочник.ГруппыПользователей.ПользователиГруппы.Ссылка
| ИЗ
| Справочник.ГруппыПользователей.ПользователиГруппы
| ГДЕ
| Справочник.ГруппыПользователей.ПользователиГруппы.Пользователь = &ТекущийПользователь))
| И (НастройкиПравДоступаПользователей.Запись = ИСТИНА)";
Запрос.УстановитьПараметр("ТекущийПользователь", ПараметрыСеанса.ТекущийПользователь);
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НужноДобавить = Истина;
Набор = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьНаборЗаписей();
Набор.Отбор.Организация.Установить(Выборка.Организация);
СтрокаВДереве = ДеревоДаты.Строки.Найти(Выборка.Организация, "ОрганизацияПользователь");
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = Неопределено;
Если СтрокаВДереве = Неопределено Тогда
Запись.ГраницаЗапретаИзменений = Дата('00010101');
Иначе
Запись.ГраницаЗапретаИзменений = СтрокаВДереве.Граница;
Для Каждого СтрокаРоли ИЗ СтрокаВДереве.Строки Цикл
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = СтрокаРоли.ОрганизацияПользователь;
Если Запись.Пользователь = ПользовательДляЗапрета Тогда
НужноДобавить = Ложь;
Запись.ГраницаЗапретаИзменений = НачалоДня(ТекущаяДата()) - 1;
Иначе
Запись.ГраницаЗапретаИзменений = СтрокаРоли.Граница;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НужноДобавить = Истина;
Набор = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьНаборЗаписей();
Набор.Отбор.Организация.Установить(Выборка.Организация);
СтрокаВДереве = ДеревоДаты.Строки.Найти(Выборка.Организация, "ОрганизацияПользователь");
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = Неопределено;
Если СтрокаВДереве = Неопределено Тогда
Запись.ГраницаЗапретаИзменений = Дата('00010101');
Иначе
Запись.ГраницаЗапретаИзменений = СтрокаВДереве.Граница;
Для Каждого СтрокаРоли ИЗ СтрокаВДереве.Строки Цикл
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = СтрокаРоли.ОрганизацияПользователь;
Если Запись.Пользователь = ПользовательДляЗапрета1 Тогда
НужноДобавить = Ложь;
Запись.ГраницаЗапретаИзменений = НачалоДня(ТекущаяДата()) - 1;
Иначе
Запись.ГраницаЗапретаИзменений = СтрокаРоли.Граница;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Добавим пользователя
Если НужноДобавить Тогда
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = ПользовательДляЗапрета;
Запись.ГраницаЗапретаИзменений = НачалоДня(ТекущаяДата()) - 1;
КонецЕсли;
Если НужноДобавить Тогда
Запись = Набор.Добавить();
Запись.Организация = Выборка.Организация;
Запись.Пользователь = ПользовательДляЗапрета1;
Запись.ГраницаЗапретаИзменений = НачалоДня(ТекущаяДата()) - 1;
КонецЕсли;
Набор.Записать();
КонецЦикла;
КонецЦикла;