Удаление объектов с контролем ссылок: массовые действия
|
|
alkomarov84 | Дата: Понедельник, 01.04.2024, 16:30 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 4
Статус: Оффлайн
| Для табличной части СсылкиНаКандидата я для себя дописал 2 варианта массового выделения строк: 1) по метаданным. "Выдели все такие же". Берем метаданные текущей строки, ищем все строки с такими МД, добавляем это в выделение. 2) по виду метаданных. "Выдели все документы, выдели все справочники, выдели все регистры сведений". Берем метаданные текущей строки, извлекаем первую часть до точки, добавляем в выделение все найденные строки.
А потом эти выделенные сроки я либо добавляю в кандидаты, либо для регистров сведений - удаляю записи регистров сведений (чуть ниже напишу).
Код выделения по МД: Процедура КП_СсылкиНаУдаляемыеОбъектыВыделитьПоМетаданным(Кнопка) ТД = ЭлементыФормы.СсылкиНаКандидата.ТекущиеДанные; Если ТД = Неопределено Тогда Возврат; КонецЕсли;
ТекМетаданные = ТД.Метаданные;
ЭлементыФормы.СсылкиНаКандидата.ВыделенныеСтроки.Очистить(); Для каждого стр из СсылкиНаКандидата Цикл Если стр.Метаданные = ТекМетаданные Тогда ЭлементыФормы.СсылкиНаКандидата.ВыделенныеСтроки.Добавить(стр); КонецЕсли; КонецЦикла; ЭлементыФормы.СсылкиНаКандидата.ОбновитьСтроки(); КонецПроцедуры
Код выделения по виду МД: Процедура КП_СсылкиНаУдаляемыеОбъектыВыделитьПоВидуМетаданных(Кнопка) ТД = ЭлементыФормы.СсылкиНаКандидата.ТекущиеДанные; Если ТД = Неопределено Тогда Возврат; КонецЕсли;
ТекМетаданные = ТД.Метаданные; Части = СтрРазделить(ТекМетаданные,".");
Если Части.Количество() > 1 Тогда ВидМетаданных = Части[0];
ЭлементыФормы.СсылкиНаКандидата.ВыделенныеСтроки.Очистить(); Для каждого стр из СсылкиНаКандидата Цикл Если СтрНайти(стр.Метаданные,ВидМетаданных+".") > 0 Тогда ЭлементыФормы.СсылкиНаКандидата.ВыделенныеСтроки.Добавить(стр); КонецЕсли; КонецЦикла; ЭлементыФормы.СсылкиНаКандидата.ОбновитьСтроки(); КонецЕсли; КонецПроцедуры ---
И одно массовое действие, специфичное только для регистров сведений: УдалитьЗаписьРС. Я его использую при удалении организации из базы со всеми связанными данными - в бп3 масса регистров, записи из которых автоматически не удаляются (без признака Ведущее у измерения), а заходить каждый раз в редактор объекта и там по одной удалять записи - очень долго. Отсюда я и дописал такое действие.
Код УдалитьЗаписьРС: Процедура КП_СсылкиНаУдаляемыеОбъектыУдалитьЗаписьРС(Кнопка) МассивКлючей = Новый Массив; Для Каждого ВыбраннаяСтрока Из ЭлементыФормы.СсылкиНаКандидата.ВыделенныеСтроки Цикл Если СтрНайти(ВыбраннаяСтрока.Метаданные,"РегистрСведений.") > 0 Тогда МассивКлючей.Добавить(КлючСсылающегосяОбъекта(ВыбраннаяСтрока)); КонецЕсли; КонецЦикла;
Для каждого ТекКлючЗаписи из МассивКлючей Цикл НазваниеРегистра = ТекКлючЗаписи.Метаданные().Имя; МенеджерЗаписи=РегистрыСведений[НазваниеРегистра].СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ТекКлючЗаписи); МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран() Тогда МенеджерЗаписи.Удалить(); КонецЕсли; КонецЦикла; Сообщить("Успешно завершено");
КонецПроцедуры
Думаю, что их можно добавить к ИР и они принесут пользу остальным использующим инструменты.
Сообщение отредактировал alkomarov84 - Понедельник, 01.04.2024, 16:31 |
|
| |
tormozit | Дата: Понедельник, 01.04.2024, 21:51 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 6508
Репутация: 173
Статус: Оффлайн
| Активируй ячейку с нужным значением и жми ALT+W. Отберутся все такие строки. Дальше жми кнопку "Включить выделенные или все". Пометки установятся на всех отобранных строках.
|
|
| |
alkomarov84 | Дата: Понедельник, 01.04.2024, 23:47 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 4
Статус: Оффлайн
| ЦитатаАктивируй ячейку с нужным значением и жми ALT+W. Отберутся все такие строки. Дальше жми кнопку "Включить выделенные или все". Пометки установятся на всех отобранных строках. У меня 7.01.3p. В ней кнопка "Включить выделенные или все" есть над верхней тч (кандидаты). Я говорю о работе с нижней ТЧ: СсылкиНаКандидата, в ней нет кнопок управления выделением, максимум можно использовать горячие клавиши платформы - например, Ctrl-A.
Alt+W - это отбор по значению в колонке. Если мы его поставили, то да, можно расширить выделение (правда, отдельными кнопками, вроде Ctrl-A), но затем также придется и снимать отбор. Это покрывает только п.1 (отбор по МД) и это дольше - я так до написания свой кнопки делал.
Ближайшая похожая функция на "отбор по виду МД" - это кнопка "Отобрать строки таблицы по типам" (в ней можно выбрать целиком ветку "регистры сведений", например), но с теми же недостатками, как и выше - придется больше кнопок нажимать.Добавлено (01.04.2024, 23:58) --------------------------------------------- Отбор по виду МД относительно встроенного "Отобрать строки таблицы по типам" существенно быстрее. У меня: 30 секунд против 3м30сек на таблице в 2млн записей. Видимо, построение дерева метаданных очень затратное.
|
|
| |
tormozit | Дата: Вторник, 02.04.2024, 00:07 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 6508
Репутация: 173
Статус: Оффлайн
| Извиняюсь. Пропустил название таблицы. Для ссылок на кандидаты не понимаю, зачем выделять сразу много разных типов строк, если в итоге все равно затем их передаешь только в кнопку "Добавить в кандидаты". Проще выделять мелкие группы по одному типу и отдельно для каждой вызывать эту команду без риска потерять состав выделенных строк.
|
|
| |
tormozit | Дата: Вторник, 02.04.2024, 00:09 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 6508
Репутация: 173
Статус: Оффлайн
| Если какая то операция выполняется не достаточно быстро, нужно создавать отдельную заявку с технической информацией и замером производительности (особенно на огромном числе данных).
|
|
| |
tormozit | Дата: Вторник, 02.04.2024, 00:20 | Сообщение # 6 |
Генералиссимус
Группа: Администраторы
Сообщений: 6508
Репутация: 173
Статус: Оффлайн
| Цитата alkomarov84 ( ) заходить каждый раз в редактор объекта и там по одной удалять записи - очень долго Добавить этот регистр в неблокирующие типы и его ссылающиеся строки будут автоматически удаляться.
|
|
| |
alkomarov84 | Дата: Вторник, 02.04.2024, 19:15 | Сообщение # 7 |
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 4
Статус: Оффлайн
| Цитата tormozit11447Для ссылок на кандидаты не понимаю, зачем выделять сразу много разных типов строк, если в итоге все равно затем их передаешь только в кнопку "Добавить в кандидаты" Очень просто, на больших объемах данных в варианте "выделяем много разных типов": жмем кнопку выделения, жмем "добавить в кандидаты", следующий час занимаемся чем-то другим, приходим, жмем "Контроль", уходим еще на час. Мы 2 часа можем заниматься чем-то другим на этой операции. В варианте "по одному типу": (жмем кнопку выделения, жмем добавить в кандидаты, ждем 1-10 минут) * повторяем раз 20, затем жмем "Контроль", уходим на час. Тут только 1 час можно заниматься чем-то другим. Паузы 1-10 минут невозможно чем-то занять, потому что переключаться на такие маленькие промежутки себе дороже.
|
|
| |