программное удаление записей в РС

1. YA_2013447737 24.09.24 09:19 Сейчас в теме
день добрый. нужно удалить помеченную номенклатуру , а перед этим и записи в РС (штрихкод, характеристика и т.д все связи которые только есть у этой номенклатуры)
&НаКлиенте
Процедура УдалитьНоменклатуру(Команда)  
	УдалитьНоменклатуруНаСервере();
КонецПроцедуры

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

&НаКлиенте
Процедура Удалить(Команда) 
	УдалитьНаСервере();
	//для каждого строка из объект.товары цикл 
	//	УдалитьНаСервере();  
	//	отбор = новый структура; 
	//	отбор.Вставить("Номенклатура", истина);
	//	отбор.Вставить("Характеристика", истина);
	//	отбор.Вставить("Штрихкод", истина);
	//	отбор.Вставить("Партия", истина);
	//	отбор.Вставить("ЕдиницаИзмерения", истина);
	//	СтрокиУдалить = Объект.Товары.НайтиСтроки(Отбор); 
	//	Пока СтрокиУдалить.Количество() > 0 цикл 
	//		объект.товары.Удалить(СтрокиУдалить[0]);
	//        СтрокиУдалить = объект.товары.НайтиСтроки(Отбор);
	//    КонецЦикла;
	//конеццикла;
КонецПроцедуры

&НаСервере
Процедура УдалитьНаСервере()  
	//Товар = Объект.Товары;
	//выборка = справочники.НоменклатураПрисоединенныеФайлы.выбрать();
	//пока выборка.Следующий() цикл
	//	выборка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
	//конеццикла; 
	для каждого строка из Объект.Товары цикл    
		ЗаписьРС = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();   
				
		ЗаписьРС.Номенклатура = Строка.Номенклатура; 
		ЗаписьРС.Штрихкод = Строка.Штрихкод; 
		ЗаписьРС.Характеристика = Строка.Характеристика; 
		ЗаписьРС.Партия =  Строка.Партия;
		ЗаписьРС.ЕдиницаИзмерения = Строка.ЕдиницаИзмерения; 
		ЗаписьРС.Прочитать();   
		ЗаписьРС.Удалить();
	конеццикла;   
	Номенклатура = Справочники.Номенклатура.Выбрать();
	Если Номенклатура.ПометкаУдаления = Истина Тогда 
		НоменклатураОбъект = Номенклатура.ПолучитьОбъект();
		НоменклатураОбъект.Удалить();
	КонецЕсли;
КонецПроцедуры
Показать


есть такой код на отображение помеченных товаров и удаление. но дело в том что не понимаю почему не работает. нажимаю на кнопку "удалить" ничего не происходит
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. nomad_irk 76 24.09.24 09:33 Сейчас в теме
(1) для чего заполняется табличная часть обработки?

Записи РС может и не нужно дополнительно обрабатывать - зависит от свойства "ведущее" измерения с номеклатурой РС.
8. user2033930 24.09.24 09:35 Сейчас в теме
(5) Это какие-то два несвязанных куска кода от двух разных команд... Оба непонятных.
9. YA_2013447737 24.09.24 09:35 Сейчас в теме
(5) форма тч обработки заполняется для видимости, какая номенклатура помечена
11. nomad_irk 76 24.09.24 09:42 Сейчас в теме
(9) так и что именно не работает в удалении записей РС?

Зачем вы формируете выборку из справочника номенклатуры на каждой итерации цикла по табличной части?
2. scarl1n 9 24.09.24 09:27 Сейчас в теме
Какая структура регистра?
4. YA_2013447737 24.09.24 09:30 Сейчас в теме
(2)
структура регистра
(3)
3. YA_2013447737 24.09.24 09:29 Сейчас в теме
измерения
штрихкод
номенклатура
характеристика
партия
еи
6. user2033930 24.09.24 09:33 Сейчас в теме
(3)
измерения
штрихкод
номенклатура
характеристика
партия
еи
Так начнем же архитектурный холивар!!!
7. nomad_irk 76 24.09.24 09:34 Сейчас в теме
(6) ща очередной ко-ко-ко получится, чую :)
10. scarl1n 9 24.09.24 09:36 Сейчас в теме
Я так понимаю, у тебя какая-то обработка есть для удаления номенклатуры, помеченной на удаления, а в этой обработке есть табличная часть? Тогда раздели нормально процедуры для заполнения табличной части и для удаления номенклатуры:

&НаСервере
Процедура ЗаполнитьТаблицуПомеченнойНоменклатурой()

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

КонецПроцедуры

&НаСервере
Процедура УдалитьНоменклатуруИШтрихкоды()

	Для Каждого СтрокаНоменклатураКУдалению Из Объект.Товары Цикл
		
		НоменклатураКУдалению = СтрокаНоменклатураКУдалению.Номенклатура;
		
		// Удаляем все записи из регистра с этой номенклатурой, не обращая внимания на другие измерения
		НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Номенклатура.Установить(НоменклатураКУдалению);
		НаборЗаписей.Записать();
		
		// Удаляем саму номенклатуру из справочника
		НоменклатураКУдалению.ПолучитьОбъект().Удалить();	
		
	КонецЦикла;
	
	Объект.Товары.Очистить(); // Очищаем таблицу, т.к там останутся ломаные ссылки
	
КонецПроцедуры

Показать
12. YA_2013447737 24.09.24 10:08 Сейчас в теме
(10)
НоменклатураКУдалению.ПолучитьОбъект().Удалить();


НоменклатураКУдалению не объект
13. scarl1n 9 24.09.24 10:29 Сейчас в теме
(12) А что, если не объект?
14. YA_2013447737 24.09.24 11:13 Сейчас в теме
(13) но это ведь удаление из рс , а не удаление номенклатуры
Оставьте свое сообщение

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