Имя: Пароль:
1C
 
Как частично удалить записи регистра сведений?
0 1сПупс
 
18.09.26
09:17
Коллеги, доброго дня!

Пробовал через набор записей, почему-то не канает... Видимо через Установить нельзя передавать массив?

&НаСервере
Процедура УдалитьЗаписиРСНаСервере()

	НачатьТранзакцию();
	Попытка

		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ШтрихкодыНоменклатуры.Номенклатура КАК ШтрихкодНоменклатура,
		|	ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,
		|	ШтрихкодыНоменклатуры.УТР_Серия КАК УТР_Серия
		|ИЗ
		|	РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
		|ГДЕ
		|	НЕ ШтрихкодыНоменклатуры.УТР_Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
		|	И НЕ ШтрихкодыНоменклатуры.УТР_Серия ЕСТЬ NULL";
		
		РезультатЗапроса = Запрос.Выполнить();
		
		Выборка = РезультатЗапроса.Выбрать();
		
		Штрихкоды = Новый Массив;
		Пока Выборка.Следующий() Цикл
			Штрихкоды.Добавить(Выборка.Штрихкод);
		КонецЦикла;
		
		Если Штрихкоды.Количество() = 0 Тогда
			Сообщить("Нечего удалять.");
			Возврат;
		КонецЕсли;
		
		Порция = 500;
		ОбщееКоличество = Штрихкоды.Количество();
		Обработано = 0;
		МассивПорция500= Новый Массив;
		
		Пока Обработано<>ОбщееКоличество Цикл
		
			//взять в новый массив 500 первых элементов массива и удалить их из массива Штрихкоды
			МассивПорция500.Добавить(Штрихкоды[Обработано]);
			Обработано = Обработано+1;
			
			Если МассивПорция500.Количество()=500 Тогда
			
				// 3. Создаём набор с отбором по Штрихкоду
				НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
				НаборЗаписей.Отбор.Штрихкод.Установить(МассивПорция500); // передаём массив значений
				
				//тест
				НаборЗаписей.Прочитать();
				
				// 4. Записываем ПУСТОЙ набор с этим отбором — это и есть удаление
				НаборЗаписей.Записать();
				
				МассивПорция500.Очистить();
			
			КонецЕсли;
			
		КонецЦикла;
		
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;	
	
КонецПроцедуры

&НаКлиенте
Процедура УдалитьЗаписиРС(Команда)
	УдалитьЗаписиРСНаСервере();
КонецПроцедуры



на строке //тест
                НаборЗаписей.Прочитать(); пусто
1 YFedor
 
18.09.26
09:22
НаборЗаписей.Отбор.Штрихкод.Установить(МассивПорция500);

Сдается мне, что там отбор только по равно может быть, нужно в СП почитать
2 Ненавижу 1С
 
гуру
18.09.26
09:23
читать конечно при удалении не надо. А удалять придется отдельными наборами

Если УТР_Серия это измерение - то просто записать набор по этому измерению

условие
И НЕ ШтрихкодыНоменклатуры.УТР_Серия ЕСТЬ NULL
бесполезное
3 Timon1405
 
18.09.26
09:27
вайбкодинг, итоги...
4 Ненавижу 1С
 
гуру
18.09.26
09:28
(3) код пахнет фиксиным
5 mikecool
 
18.09.26
09:37
переходить на новые платформы, недавно же завезли апдейт по табличке(или как он там зовется) без всяких отборов
6 H A D G E H O G s
 
18.09.26
09:38
Еще и NULL ы ищет, где не надо. Ненавижу1С, настало твоё время!
7 Ненавижу 1С
 
гуру
18.09.26
09:41
(6) слоупок, см (2)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn