#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных
Перем СтарыеЗаписи;
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ, Замещение)
ПодготовитьЗаписьИзмененийВЖурналРегистрации(ЭтотОбъект, Замещение, СтарыеЗаписи);
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Отбор.Пользователь.Использование
И Не ДатыЗапретаИзмененияСлужебный.ЭтоАдресатЗапретаИзменения(Отбор.Пользователь.Значение) Тогда
ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписи(Отказ, Замещение)
ЗаписатьИзмененияВЖурналРегистрации(ЭтотОбъект, Замещение, СтарыеЗаписи);
Если ОбменДанными.Загрузка
И Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда
ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных(ЭтотОбъект);
КонецЕсли;
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда
ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзменения();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ПодготовитьЗаписьИзмененийВЖурналРегистрации(НаборЗаписей, Замещение, СтарыеЗаписи)
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
МетаданныеРегистра = Метаданные.РегистрыСведений.ДатыЗапретаИзменения;
Поля = Новый Массив;
Поля.Добавить(МетаданныеРегистра.Измерения.Раздел.Имя);
Поля.Добавить(МетаданныеРегистра.Измерения.Объект.Имя);
Поля.Добавить(МетаданныеРегистра.Измерения.Пользователь.Имя);
Поля.Добавить(МетаданныеРегистра.Ресурсы.ДатаЗапрета.Имя);
Поля.Добавить(МетаданныеРегистра.Реквизиты.ОписаниеДатыЗапрета.Имя);
Поля.Добавить(МетаданныеРегистра.Реквизиты.Комментарий.Имя);
СписокПолей = СтрСоединить(Поля, ",");
СтарыеЗаписи = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(НаборЗаписей, Замещение, СписокПолей);
КонецПроцедуры
Процедура ЗаписатьИзмененияВЖурналРегистрации(НаборЗаписей, Замещение, СтарыеЗаписи)
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Таблица = ОбщегоНазначения.ИзменениеЗаписейНабора(СтарыеЗаписи, НаборЗаписей, Замещение);
ДобавленныеСтроки = Таблица.НайтиСтроки(Новый Структура("ВидИзмененияСтроки", 1));
УдаленныеСтроки = Таблица.НайтиСтроки(Новый Структура("ВидИзмененияСтроки", -1));
Если Не ЗначениеЗаполнено(ДобавленныеСтроки)
И Не ЗначениеЗаполнено(УдаленныеСтроки) Тогда
Возврат;
КонецЕсли;
МетаданныеРегистра = Метаданные.РегистрыСведений.ДатыЗапретаИзменения;
Поля = Новый СписокЗначений;
ШиринаКолонок = Новый Соответствие;
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Измерения.Раздел, 20);
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Измерения.Объект, 40);
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Измерения.Пользователь, 40);
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Ресурсы.ДатаЗапрета, 20);
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Реквизиты.ОписаниеДатыЗапрета, 22);
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Реквизиты.Комментарий, 20);
Заголовок = Новый Массив;
Заголовок.Добавить("");
Для Каждого Поле Из Поля Цикл
Заголовок.Добавить(ДополненнаяСтрока(Поле.Представление,
ШиринаКолонок.Получить(Поле.Значение)));
КонецЦикла;
СтрокиКомментария = Новый Массив;
СтрокиКомментария.Добавить(СтрСоединить(Заголовок, " | "));
Если ЗначениеЗаполнено(ДобавленныеСтроки) Тогда
ДобавитьСтроки(СтрокиКомментария, ДобавленныеСтроки, Поля, ШиринаКолонок, "+");
КонецЕсли;
Если ЗначениеЗаполнено(УдаленныеСтроки) Тогда
ДобавитьСтроки(СтрокиКомментария, УдаленныеСтроки, Поля, ШиринаКолонок, "-");
КонецЕсли;
Комментарий = СтрСоединить(СтрокиКомментария, Символы.ПС) + Символы.ПС;
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Даты запрета.Регистрация изменений'",
ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Информация, МетаданныеРегистра,
,
Комментарий,
РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецПроцедуры
Процедура ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеПоля, ШиринаКолонки);
Поля.Добавить(МетаданныеПоля.Имя, МетаданныеПоля.Представление());
ШиринаКолонок.Вставить(МетаданныеПоля.Имя, ШиринаКолонки);
КонецПроцедуры
Функция ДополненнаяСтрока(Значение, ШиринаКолонки)
Строка = Строка(Значение);
Если Не ЗначениеЗаполнено(Строка)
И ТипЗнч(Значение) <> Тип("Строка") Тогда
Строка = "<> (" + Строка(ТипЗнч(Значение)) + ")";
КонецЕсли;
ДлинаСтроки = СтрДлина(Строка);
Если ТипЗнч(ШиринаКолонки) <> Тип("Число")
Или ШиринаКолонки <= ДлинаСтроки Тогда
Возврат Строка;
КонецЕсли;
Пробелы = " ";
Возврат Строка + Лев(Пробелы, ШиринаКолонки - ДлинаСтроки);
КонецФункции
Процедура ДобавитьСтроки(СтрокиКомментария, СтрокиТаблицы, Поля, ШиринаКолонок, Операция)
Для Каждого СтрокаТаблицы Из СтрокиТаблицы Цикл
СтрокаКомментария = Новый Массив;
Для Каждого Поле Из Поля Цикл
СтрокаКомментария.Добавить(ДополненнаяСтрока(СтрокаТаблицы[Поле.Значение],
ШиринаКолонок.Получить(Поле.Значение)));
КонецЦикла;
СтрокиКомментария.Добавить(Операция + "| " + СтрСоединить(СтрокаКомментария, " | "));
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли