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

Удаление объектов справочника

Автор PanKamenets, 24 апр 2022, 21:11

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

PanKamenets

Добрый день. Написал обработку, для удаления валют из справочника "Валюты". Прописал условие, чтобы не удалялось 2 валюты, но они удаляются со всеми остальными. В чем может быть проблема.

&НаСервере
Процедура УдалитьВалютыНаСервере()
   УдаляемыеВалюты = Справочники.Валюты.Выбрать();   
   Пока УдаляемыеВалюты.Следующий() Цикл
      Валюта = УдаляемыеВалюты.ПолучитьОбъект();
      Если Не Валюта.Код = "840" Или Не Валюта.Код = "978" Тогда
         Валюта.Удалить();
      КонецЕсли;
   КонецЦикла;
      
КонецПроцедуры

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

nvj84

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

P.S. ИЛИ проверяет условия которые оно разделяет и если хотя бы одно из них верно будет возвращено ИСТИНА. Теперь представьте что вы проверяете код 840 по вашему условию. В первой части Не Валюта.Код = "840" вернется ЛОЖЬ, во втором Не Валюта.Код = "978" вернется ИСТИНА и в итоге вернется ИСТИНА. Один элемент не может одновременно иметь код 840 и 978.

PanKamenets


Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск