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

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

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

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

sali

Максим75, &НаКлиенте
Процедура УдалитьНоменклатуру(Команда) 
УдалитьНоменклатуруНаСервере();
КонецПроцедуры

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

Выборка = РезультатЗапроса.Выбрать();   

ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.Добавить("Номенклатура");
ТаблицаДанных.Колонки.Добавить("Штрихкод");
ТаблицаДанных.Колонки.Добавить("ХарактеристикаНаименование");

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

как мне очистить ТЧ при повторном нажатии?
если я делаю отбор , потом помечаю новую номенклатуру и делаю снова отбор он дублирует товары.
а так ругается , что такая процедура не определена

Максим75

sali, Объект.Товары.Очистить(); делаете перед циклом выборки.

sali

Максим75, спасибо большое. решил раньше ответа  :D  :zebzdr:

sali

Максим75, могу еще у вас спросить совета,
&НаКлиенте
Процедура УдалитьНоменклатуру(Команда) 
УдалитьНоменклатуруНаСервере();
КонецПроцедуры

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

Выборка = РезультатЗапроса.Выбрать();   

ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.Добавить("Номенклатура");
ТаблицаДанных.Колонки.Добавить("Штрихкод");
ТаблицаДанных.Колонки.Добавить("Характеристика");

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

    НоваяСтрока.Номенклатура = Выборка.Наименование;
    НоваяСтрока.Штрихкод = Выборка.Штрихкод;
    НоваяСтрока.Характеристика = Выборка.ХарактеристикаНаименование;               
КонецЦикла;
КонецПроцедуры


вот здесь в "строка" я заполняю Таблицу Данных, а "новаястрока" это заполнение тч для видимости разница есть? мне вот как сделать чтобы потом полностью удалить помеченную номенклатуру?


sali

выгрузить список , увидеть его и удалить полностью. и номенклатуру, и штрихкода, и характеристику, если она есть

sali

нашел такой метод
чтобы после выгрузить результат в массив и передать в качестве параметра УдаляемыеОбъекты в

УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(УдаляемыеОбъекты, РежимУдаления)

Максим75

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

Максим75

sali, здесь в УдаляемыеОбъекты тоже необходимо передавать ссылки (а может и сами объекты, надо смотреть что в обработке необходимо).

sali

Максим75, то бишь
&НаКлиенте
Процедура УдалитьНоменклатуру(Команда) 
    УдалитьНоменклатуруНаСервере();
КонецПроцедуры

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

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

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

&НаСервере
Процедура УдалитьНаСервере()
    УдаляемыеОбъекты = ТаблицаДанных.пОЛУЧИТЬоБЪЕКТ(сТРОКА.НОМЕНКЛАТУРА);
    УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(УдаляемыеОбъекты, РежимУдаления)
КонецПроцедуры


sali


Теги:

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

Рейтинг@Mail.ru

Поиск