Небольшой тюнинг моей обработки удаления помеченных объектов

Клиент поставил задачу, чтобы один из пользователей мог удалять помеченные на удаление поступления.

Сначала я попытался дать ему типовую обработку удаления помеченных, создал команду:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ПодключитьВнешнююОбработкуНаСервере();
    ОткрытьФорму("ВнешняяОбработка.StandardDeleteMarkedObjects.Форма");
КонецПроцедуры

&НаСервере
Процедура ПодключитьВнешнююОбработкуНаСервере()
    ВнешниеОбработки.Подключить("v8res://mngbase/StandardDeleteMarkedObjects.epf", "StandardDeleteMarkedObjects", false);
КонецПроцедуры

//1. Активные пользователи - "v8res://mngbase/StandardActiveUsers.epf";
//2. Журнал регистрации - "v8res://mngbase/StandardEventLog.epf";
//3. Поиск ссылок на объект - "v8res://mngbase/StandardFindByRef.epf";
//4. Проведение документов - "v8res://mngbase/StandardDocumentsPosting.epf";
//5. Удаление помеченных объектов - "v8res://mngbase/StandardDeleteMarkedObjects.epf";
//6. Управление внешними источниками данных - "v8res://mngbase/StandardExternalDataSourcesManagement.epf";
//7. Управление итогами - "v8res://mngbase/StandardTotalsManagement.epf";
//8. Управление полнотекстовым поиском - "v8res://mngbase/StandardFullTextSearchManagement.epf";
//9. Управление расширениями конфигурации - "v8res://mngbase/StandardExtensionsManagement.epf";

Но забыл, что типовая удаляет только в монопольном режиме.

Тогда подсунул свою обработку. Но она не удаляла, т.к. не могла очистить наборы записей. Сначала я хотел посмотреть, что там за наборы записей, ведь помеченный на удаление документ не содержит движений?

Потом посмотрел свой код и увидел не совершенство — код пытался удалять даже пустые записи. Поэтому добавил контроль на количество записей и удаление заработало!

Для Каждого НаборЗаписей Из ДвиженияДокумента Цикл
	НаборЗаписей.ОбменДанными.Загрузка = УдалятьВРежимеОбменаДанными;
	НаборЗаписей.Прочитать();
	Если НаборЗаписей.Количество() > 0 Тогда
		НаборЗаписей.Очистить();
		Попытка
			НаборЗаписей.Записать();
		Исключение
			Успешно = Ложь;
			ОписаниеОшибки = "Не удаляется набор записей регистра: " + Метаданные.НайтиПоТипу(ТипЗнч(НаборЗаписей)).Имя + " : " +ОписаниеОшибки();
			Прервать;
		КонецПопытки;
	КонецЕсли;
КонецЦикла;

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *