Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 16:58

программно удалить помеченные на удаление товар

Автор sali, 22 сен 2024, 14:47

0 Пользователей и 1 гость просматривают эту тему.

Максим75

sali, Вы же несколькими постами выше номенклатуру прямо выборкой из справочника выбирали.
теперь из табличной части формы. Вы уж определитесь откуда.
если из табличной части формы, то там номенклатура должна иметь тип СправочникСсылка и запрос стройте таким образом, чтобы туда заполнять не строку, а СправочникСсылку.

sali

Максим75, &НаКлиенте
Процедура НайтиПомеченныеНаУдаление(Команда) 
ЗаполнитьТаблицуПомеченнойНоменклатурой();
КонецПроцедуры

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

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

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

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

поздравьте меня, я сделал это :zebzdr:  :zebzdr:  :zebzdr:

antoneus

Что, и штрих-коды удалились? Глядя на вот это

"ВЫБРАТЬ
        |    СправочникНоменклатура.Ссылка КАК Номенклатура,
        |    СправочникНоменклатура.Наименование КАК Наименование,

.......

Пока Выборка.Следующий() Цикл   
        Строка = Объект.Товары.Добавить();
        Строка.Номенклатура = Выборка.Наименование;

.......

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


не поверю.

Максим75

antoneus, честно говоря, я устал писать, что нужен ссылочный тип, а не строковый.
даже уже и не смотрел в код.

antoneus


sali

antoneus, да работало
для записей в рс пришлось массив создавать , помещать туда и удалять его

Optiman

Цитата: sali от 24 сен 2024, 13:08поздравьте меня, я сделал это :zebzdr:  :zebzdr:  :zebzdr:
Можно убрать из запроса выборку по штрих-кодам, т.к. дальше для удаления штрихкодов в регистре сведений Вы всё равно делаете отбор по номенклатуре. Получается лишняя загрузка сервера выборкой данных, которую потом не используете.

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

можно сделать проще

Объект.Товары = РезультатЗапроса.Выгрузить();

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск