Имя: Пароль:
1C
1С v8
Удаление строк табличной части справочника по условию
0 МистерДон
 
20.11.13
11:50
Добрый день, коллеги

Изучаю 1с.8.2. возник вопрос относительно удаления строк табличной части по условию.
Пример.
У меня есть справочник склады,
там есть табличная часть – заведующие
Эта табличная часть состоит из 2 реквизитов (колонок), справочник “Сотрудники”  и комментарий ( строка).

Задача, удалить в выбранном справочнике, в таблице строки, комментарий которых будет равен 300 или 500, или больше 1000

Логика удаления
1.    Находим ссылку на элемент справочника, получаем объект справочника
2.    Создаем структуру удаляемых строк
3.    Находим в табличной части эти строки (из структруры), и в цикле удаляем.

Все вроде бы ничего, но я не могу в структуру вставить нормально условие. Скажем БОЛЬШЕ/МЕНЬШЕ  или сравнение кучи разных параметров.

ЭлементСправочника = Справочники.Склады.НайтиПоКоду("000000001");
ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект();

СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Комментарий", "300");
ПодходящиеСтроки = ОбъектСправочника.Заведующие.НайтиСтроки(СтруктураОтбора);

Для Каждого ОчереднаяСтрока Из ПодходящиеСтроки Цикл
    ОбъектСправочника.Заведующие.Удалить(ОчереднаяСтрока);
КонецЦикла;
ОбъектСправочника.Записать();    

Удаляет только 1  запись с комментарием =300, а у меня целая куча условий.
Подскажите, пожалуйста, как быть?
1 МойКодУныл
 
20.11.13
11:56
Обойди ТЧ, сформируй массив строк по условиям, потом обойди массив и удали.

Можно прямо в цикле обхода удалять по расчетному индексу, но это не прозрачна, я так не люблю делать.
2 МистерДон
 
20.11.13
11:56
Я так понимаю, что в структуру гибкого сложного условия не вставить, как же тогда быть? Как красиво можно удалить строки?

Если к примеру я сначала сам пробегусь по ТЧ и нужные строки соберу в массив, как этот массив дальше использовать?
Пытался его использовать в
ПодходящиеСтроки = ОбъектСправочника.Заведующие.НайтиСтроки(МОЙмассив);

но ничего хорошего из этого не выходило.
3 mikecool
 
20.11.13
11:56
НайтиСтроки + удалить по массиву
4 mikecool
 
20.11.13
11:57
(2) сделай так, чтобы вышло хорошо
5 Wobland
 
20.11.13
11:57
всё не читал. можно гибкое сложное условие оформить в запросе и выгрузить только нужное
6 МистерДон
 
20.11.13
11:58
Господа, подскажите, пожалуйста как использовать собранный массив удаляемых строк.

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

ОбъектСправочника.Заведующие.НайтиСтроки(МОЙмассив) - почему-то строки не ищет.

Подскажите простым кодом, если не сложно.
7 МистерДон
 
20.11.13
12:05
Добавляю в массив следующим образом

МассивКУдалению = Новый Массив;    
ЭлементСправочника = Справочники.Склады.НайтиПоКоду("000000001");

ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект();

Для Каждого ТекущаяСтрока Из ЭлементСправочника.Заведующие Цикл
    Если (ТекущаяСтрока.Комментарий="300") ИЛИ (ТекущаяСтрока.Комментарий="500") Тогда
        МассивКУдалению.Добавить(ТекущаяСтрока);
    КонецЕсли;
КонецЦикла;  

А потом уже

ПодходящиеСтроки=ОбъектСправочника.Заведующие.Найти(МассивКУдалению);

И не находит почему-то.
8 mikecool
 
20.11.13
12:07
а нахера выполнять "а потом уже"? у тебя итак массив строк есть - их и удаляй
9 Wobland
 
20.11.13
12:09
(6) заставь ТЧ несколько раз удалить то, что в массие
10 МистерДон
 
20.11.13
12:11
Делаю так


МассивКУдалению = Новый Массив;    
ЭлементСправочника = Справочники.Склады.НайтиПоКоду("000000001");

ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект();

Для Каждого ТекущаяСтрока Из ЭлементСправочника.Заведующие Цикл
    Если (ТекущаяСтрока.Комментарий="333") ИЛИ (ТекущаяСтрока.Комментарий="222") Тогда
        МассивКУдалению.Добавить(ТекущаяСтрока);
    КонецЕсли;
КонецЦикла;  
    

    // Удалить строки.
Для Каждого ОчереднаяСтрока Из МассивКУдалению Цикл
ОбъектСправочника.Заведующие.Удалить(ОчереднаяСтрока);
КонецЦикла;
ОбъектСправочника.Записать();  



Выдает ошибку:


ОбъектСправочника.Заведующие.Удалить(ОчереднаяСтрока);
по причине:
Недопустимое значение параметра (параметр номер '1') (Колонка не принадлежит коллекции)
11 МистерДон
 
20.11.13
12:14
Что-то совсем запутался, 100 лет назад работал плотно с семеркой, а тут как-то черт ногу сломит :)
12 Wobland
 
20.11.13
12:16
(10) а там не ТЧ объекта ли надо в первом цикле?*
13 МистерДон
 
20.11.13
12:19
(12) Все верно. Спасибо за подсказку, с ТЧ объекта сработало.



Всем спасибо за участие и помощь. Реально с 8 утра ломал себе голову.
Независимо от того, куда вы едете — это в гору и против ветра!