|
Удаление строк табличной части справочника по условию | ☑ | ||
---|---|---|---|---|
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 утра ломал себе голову. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |