Удаление регистра хозрасчетный по строке с отбором

1. Touch_Of_Soul 30 14.07.22 18:18 Сейчас в теме
&НаКлиенте
Процедура ВыполитьКоманду(Команда)
	ВыполитьКомандуНажатие();
КонецПроцедуры

&НаСервере
Процедура ВыполитьКомандуНажатие()
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	Хозрасчетный.Регистратор КАК Регистратор
	|ИЗ
	|	РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
	|ГДЕ
	|	Хозрасчетный.Регистратор = &Ссылка";
	Запрос.УстановитьПараметр("Ссылка",Объект.СсылкаДок);
	
	Выборка = Запрос.Выполнить().Выбрать();	
	
	Пока Выборка.Следующий() Цикл
		НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
		НаборЗаписей.Прочитать();    
		НомераСтрок = Новый СписокЗначений;
		
		Для каждого Запись из НаборЗаписей Цикл
			Если Запись.СубконтоДт.Контрагенты = Объект.Контрагент Тогда
				НомераСтрок.Добавить(Запись.НомерСтроки); 
				Сообщить("Номер строки: "+Запись.НомерСтроки+" контрагент: "+Запись.СубконтоДт.Контрагенты);
			КонецЕсли;		
		КонецЦикла; 
		НомераСтрок.СортироватьПоЗначению(НаправлениеСортировки.Возр);
		Для каждого Ном из НомераСтрок Цикл
			//Сообщить(Ном.Значение);
			НаборЗаписей.Удалить(Ном.Значение);
		КонецЦикла;
		НаборЗаписей.Записать();
		НомераСтрок.Очистить();
	КонецЦикла;	
	
КонецПроцедуры
Показать


Пишет ошибка
Ошибка


Хочу удалить в выбранном документе операция по выбранному контрагенту все записи.
По теме из базы знаний
Найденные решения
3. SlavaKron 14.07.22 18:34 Сейчас в теме
(1) В метод Удалить набора записей надо передавать Индекс записи или саму запись. Я бы переделал коллекцию НомераСтрок под массив записей.
Пока Выборка.Следующий() Цикл
	
	НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
	НаборЗаписей.Прочитать();    
	
	МассивУдалить = Новый Массив;
	
	Для каждого Запись из НаборЗаписей Цикл
		Если Запись.СубконтоДт.Контрагенты = Объект.Контрагент Тогда
			МассивУдалить.Добавить(Запись); 
			Сообщить("Номер строки: "+Запись.НомерСтроки+" контрагент: "+Запись.СубконтоДт.Контрагенты);
		КонецЕсли;        
	КонецЦикла; 
	
	Для каждого Запись из МассивУдалить Цикл
		//Сообщить(Ном.Значение);
		НаборЗаписей.Удалить(Запись);
	КонецЦикла;
	НаборЗаписей.Записать();
КонецЦикла;
Показать
8. Touch_Of_Soul 30 14.07.22 18:46 Сейчас в теме
(3)
Пока Выборка.Следующий() Цикл

НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();

МассивУдалить = Новый Массив;

Для каждого Запись из НаборЗаписей Цикл
Если Запись.СубконтоДт.Контрагенты = Объект.Контрагент Тогда
МассивУдалить.Добавить(Запись);
Сообщить("Номер строки: "+Запись.НомерСтроки+" контрагент: "+Запись.СубконтоДт.Контрагенты);
КонецЕсли;
КонецЦикла;

Для каждого Запись из МассивУдалить Цикл
//Сообщить(Ном.Значение);
НаборЗаписей.Удалить(Запись);
КонецЦикла;
НаборЗаписей.Записать();
КонецЦикла;
Показать


спасибо когда вы написали про массив я сразу понял куда смотреть.

&НаКлиенте
Процедура ВыполитьКоманду(Команда)
	ВыполитьКомандуНажатие();
КонецПроцедуры

&НаСервере
Процедура ВыполитьКомандуНажатие()
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	Хозрасчетный.Регистратор КАК Регистратор
	|ИЗ
	|	РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
	|ГДЕ
	|	Хозрасчетный.Регистратор = &Ссылка";
	Запрос.УстановитьПараметр("Ссылка",Объект.СсылкаДок);
	
	Выборка = Запрос.Выполнить().Выбрать();	
	
	Пока Выборка.Следующий() Цикл 
		
		НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
		НаборЗаписей.Прочитать(); 
		
		МассивКУдалению = Новый Массив; 
		
		Для каждого Запись из НаборЗаписей Цикл
			Если Запись.СубконтоДт.Контрагенты = Объект.Контрагент Тогда
				МассивКУдалению.Добавить(Запись);
                                Сообщить("Номер строки: "+Запись.НомерСтроки+" контрагент: "+Запись.СубконтоДт.Контрагенты);
			КонецЕсли;		
		КонецЦикла; 
		Для каждого Запись из МассивКУдалению Цикл
			НаборЗаписей.Удалить(Запись);
		КонецЦикла;
		НаборЗаписей.Записать();
	КонецЦикла;	
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. SlavaKron 14.07.22 18:34 Сейчас в теме
(1) В метод Удалить набора записей надо передавать Индекс записи или саму запись. Я бы переделал коллекцию НомераСтрок под массив записей.
Пока Выборка.Следующий() Цикл
	
	НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
	НаборЗаписей.Прочитать();    
	
	МассивУдалить = Новый Массив;
	
	Для каждого Запись из НаборЗаписей Цикл
		Если Запись.СубконтоДт.Контрагенты = Объект.Контрагент Тогда
			МассивУдалить.Добавить(Запись); 
			Сообщить("Номер строки: "+Запись.НомерСтроки+" контрагент: "+Запись.СубконтоДт.Контрагенты);
		КонецЕсли;        
	КонецЦикла; 
	
	Для каждого Запись из МассивУдалить Цикл
		//Сообщить(Ном.Значение);
		НаборЗаписей.Удалить(Запись);
	КонецЦикла;
	НаборЗаписей.Записать();
КонецЦикла;
Показать
6. FatPanzer 14.07.22 18:38 Сейчас в теме
(3) Тогда была бы ошибка "что то про выход индекса за пределы массива".
Но у автора ошибка в какой-внешней обработке. Видимо внешняя обработка хочет получить именно запись, а не индекс или номер...
9. SlavaKron 14.07.22 18:47 Сейчас в теме
(6) Да, но суть ошибки в том, что используются номера строк вместо индексов. Кстати, почему там другая ошибка, непонятно.
Прикрепленные файлы:
8. Touch_Of_Soul 30 14.07.22 18:46 Сейчас в теме
(3)
Пока Выборка.Следующий() Цикл

НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();

МассивУдалить = Новый Массив;

Для каждого Запись из НаборЗаписей Цикл
Если Запись.СубконтоДт.Контрагенты = Объект.Контрагент Тогда
МассивУдалить.Добавить(Запись);
Сообщить("Номер строки: "+Запись.НомерСтроки+" контрагент: "+Запись.СубконтоДт.Контрагенты);
КонецЕсли;
КонецЦикла;

Для каждого Запись из МассивУдалить Цикл
//Сообщить(Ном.Значение);
НаборЗаписей.Удалить(Запись);
КонецЦикла;
НаборЗаписей.Записать();
КонецЦикла;
Показать


спасибо когда вы написали про массив я сразу понял куда смотреть.

&НаКлиенте
Процедура ВыполитьКоманду(Команда)
	ВыполитьКомандуНажатие();
КонецПроцедуры

&НаСервере
Процедура ВыполитьКомандуНажатие()
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	Хозрасчетный.Регистратор КАК Регистратор
	|ИЗ
	|	РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
	|ГДЕ
	|	Хозрасчетный.Регистратор = &Ссылка";
	Запрос.УстановитьПараметр("Ссылка",Объект.СсылкаДок);
	
	Выборка = Запрос.Выполнить().Выбрать();	
	
	Пока Выборка.Следующий() Цикл 
		
		НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
		НаборЗаписей.Прочитать(); 
		
		МассивКУдалению = Новый Массив; 
		
		Для каждого Запись из НаборЗаписей Цикл
			Если Запись.СубконтоДт.Контрагенты = Объект.Контрагент Тогда
				МассивКУдалению.Добавить(Запись);
                                Сообщить("Номер строки: "+Запись.НомерСтроки+" контрагент: "+Запись.СубконтоДт.Контрагенты);
			КонецЕсли;		
		КонецЦикла; 
		Для каждого Запись из МассивКУдалению Цикл
			НаборЗаписей.Удалить(Запись);
		КонецЦикла;
		НаборЗаписей.Записать();
	КонецЦикла;	
КонецПроцедуры
Показать
4. Borisych 503 14.07.22 18:35 Сейчас в теме
// 1C@bk62.biz GAB 2022.07.14 {
МассивЗапКУдалению = Новый Массив;		
// 1C@bk62.biz GAB 2022.07.14 }
        Для каждого Запись из НаборЗаписей Цикл
            Если Запись.СубконтоДт.Контрагенты = Объект.Контрагент Тогда
// 1C@bk62.biz GAB 2022.07.14 {
// было
				//НомераСтрок.Добавить(Запись.НомерСтроки); 
				//Сообщить("Номер строки: "+Запись.НомерСтроки+" контрагент: "+Запись.СубконтоДт.Контрагенты);
// стало
МассивЗапКУдалению.Добавить(Запись);
// 1C@bk62.biz GAB 2022.07.14 }
            КонецЕсли;        
        КонецЦикла; 
// 1C@bk62.biz GAB 2022.07.14 {
// было
		//НомераСтрок.СортироватьПоЗначению(НаправлениеСортировки.Возр);
		//Для каждого Ном из НомераСтрок Цикл
		//    //Сообщить(Ном.Значение);
		//    НаборЗаписей.Удалить(Ном.Значение);
		//КонецЦикла;
// стало
Для каждого УдалЗапись Из МассивЗапКУдалению Цикл
	НаборЗаписей.Удалить(УдалЗапись);	
КонецЦикла;
// 1C@bk62.biz GAB 2022.07.14 }
Показать
7. Borisych 503 14.07.22 18:42 Сейчас в теме
(1)
МассивЗапКУдалению = Новый Массив;        
        Для каждого Запись из НаборЗаписей Цикл
            Если Запись.СубконтоДт.Контрагенты = Объект.Контрагент Тогда
// было
                //НомераСтрок.Добавить(Запись.НомерСтроки); 
                //Сообщить("Номер строки: "+Запись.НомерСтроки+" контрагент: "+Запись.СубконтоДт.Контрагенты);
// стало
МассивЗапКУдалению.Добавить(Запись);
            КонецЕсли;        
        КонецЦикла; 
// было
        //НомераСтрок.СортироватьПоЗначению(НаправлениеСортировки.Возр);
        //Для каждого Ном из НомераСтрок Цикл
        //    //Сообщить(Ном.Значение);
        //    НаборЗаписей.Удалить(Ном.Значение);
        //КонецЦикла;
// стало
Для каждого УдалЗапись Из МассивЗапКУдалению Цикл
    НаборЗаписей.Удалить(УдалЗапись);    
КонецЦикла;
Показать
2. FatPanzer 14.07.22 18:26 Сейчас в теме
Ищи подписку на событие при записи/удалении регистра, в которой идёт перенаправление на использование внешней обработки.
5. SlavaKron 14.07.22 18:38 Сейчас в теме
(4) "Собака" в сообщении автоматически его скрывает.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот