Версия для печати темы (https://pro1c.org.ua/index.php?s=30a88b34e250e3a7bad7851e9684fdad&showtopic=59040)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Удаление подчинённых объектов

Автор: Bon Jovi 18.05.20, 15:06

Конфигурация: Trade (10.3.29.1) (http://v8.1c.ru/trade/), версия: 8.3.11.2867, обычные формы.
Добрый день. Подскажите пожалуйста. У меня есть справочник ЗначенияХарактеристик, также есть справочник Характеристики (который в свою очередь является владельцем справочника ЗначенияХарактеристик). Сделал обработку, с помощью которой я могу выбрать характеристику и удалить (пометить на удаление) её и её значения (пометить на удаление в справочнике ЗначенияХарактеристик и также очистить записи по нужным регистрам). Появилась нужда доработать обработку таким способом, чтобы можно было выбрать характеристику и удалить (пометить) только её значения, а саму характеристику не трогать. Раньше удалял (помечал) характеристики таким способом:

УдаляемаяХарактеристика = Выборка.Характеристика.ПолучитьОбъект();
УдаляемаяХарактеристика.УстановитьПометкуУдаления(Истина, Истина);
УдаляемаяХарактеристика.Записать();


Теперь, когда пытаюсь удалить (пометить) значения характеристики с помощью похожей конструкции:
УдаляемоеЗначение = Выборка.Значение.ПолучитьОбъект();
УдаляемоеЗначение.УстановитьПометкуУдаления(Истина);
УдаляемоеЗначение.Записать();


Элемент значения характеристик помечается, но связь между ним и характеристикой всё же остаётся, так как при повторном добавлении через обработку такого же значения той же характеристики, значение не добавляется, так как в базе он есть, но он помечен и в этом загвоздка. Пробовал так:
УдаляемаяХарактеристика = Выборка.Характеристика.ПолучитьОбъект();
УдаляемаяХарактеристика.УстановитьПометкуУдаления(Ложь, Истина);
УдаляемаяХарактеристика.Записать();

В таком случае пометок вообще нет.

Автор: denis84 19.05.20, 7:38

Bon Jovi @ Вчера, 16:06 * ,
Добрый день! Если правильно понял Вас, то вот такие варианты:

Вариант 1:

// Получить выборку по указанному контрагенту.

Выборка = Справочники.ЗначенияХарактеристики.Выбрать( , Характеристика);

Пока Выборка.Следующий() Цикл

    УдаляемоеЗначение = Выборка.Значение.ПолучитьОбъект();
    УдаляемоеЗначение.УстановитьПометкуУдаления(Истина);
    УдаляемоеЗначение.Записать();

КонецЦикла;

Вариант 2:

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

    |    ЗначенияХарактеристики.Ссылка

    |ИЗ

    |    Справочник.ЗначенияХарактеристики КАК ЗначенияХарактеристики

    |ГДЕ

    |    ЗначенияХарактеристики.Владелец = &Владелец";

Запрос.УстановитьПараметр("Владелец", Характеристика);

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

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

Пока Выборка.Следующий() Цикл

    УдаляемоеЗначение = Выборка.Значение.ПолучитьОбъект();
    УдаляемоеЗначение.УстановитьПометкуУдаления(Истина);
    УдаляемоеЗначение.Записать();

КонецЦикла;

Автор: Bon Jovi 19.05.20, 9:26

denis84 @ Сегодня, 8:38 * ,

Спасибо большое за ответ. Пришёл к тому, что достаточно просто почистить РС на основании которого заполняются данные характеристик в форме элемента характеристики, а значения характеристик (в справочнике) нисколько не мешают, поэтому и помечать их на удаление нет смысла. Но и Вы и я были правы, как удаляются элементы с помощью метода

УстановитьПометкуУдаления
.

Автор: denis84 19.05.20, 10:00

Цитата(denis84 @ 19.05.20, 8:38) *
УдаляемоеЗначение = Выборка.Значение.ПолучитьОбъект();

Вот здесь маленькая неточность, необходимо было так написать:
// Получить выборку по указанному контрагенту. 

Выборка = Справочники.ЗначенияХарактеристики.Выбрать( , Характеристика);

Пока Выборка.Следующий() Цикл

    УдаляемоеЗначение = Выборка.ПолучитьОбъект();
    УдаляемоеЗначение.УстановитьПометкуУдаления(Истина);
    УдаляемоеЗначение.Записать();

КонецЦикла;


"Значение" - здесь лишнее. Не внимателен был!

Автор: Bon Jovi 20.05.20, 10:15

denis84 @ Вчера, 11:00 * ,

Я получаю значения со своего запроса. Просто ваше решение совпало, от части, с моим.

"ВЫБРАТЬ
    |    мд_ЗначенияХарактеристикНоменклатуры.Номенклатура КАК Номенклатура,
    |    мд_ЗначенияХарактеристикНоменклатуры.Характеристика КАК Характеристика,
    |    мд_ЗначенияХарактеристикНоменклатуры.Значение КАК Значение,
    |    мд_ЗначенияХарактеристикНоменклатуры.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа
    |ИЗ
    |    РегистрСведений.мд_ЗначенияХарактеристикНоменклатуры КАК мд_ЗначенияХарактеристикНоменклатуры
    |ГДЕ
    |    мд_ЗначенияХарактеристикНоменклатуры.Номенклатура.НоменклатурнаяГруппа = &НоменклатурнаяГруппа";

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua