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

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

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

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

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

Показать


есть такой код на отображение помеченных товаров и удаление. но дело в том что не понимаю почему не работает. нажимаю на кнопку "удалить" ничего не происходит
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. nomad_irk 81 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 81 24.09.24 09:42 Сейчас в теме
(9) так и что именно не работает в удалении записей РС?

Зачем вы формируете выборку из справочника номенклатуры на каждой итерации цикла по табличной части?
2. scarl1n 12 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 81 24.09.24 09:34 Сейчас в теме
(6) ща очередной ко-ко-ко получится, чую :)
10. scarl1n 12 24.09.24 09:36 Сейчас в теме
Я так понимаю, у тебя какая-то обработка есть для удаления номенклатуры, помеченной на удаления, а в этой обработке есть табличная часть? Тогда раздели нормально процедуры для заполнения табличной части и для удаления номенклатуры:

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

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

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

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

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


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


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

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