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