Четверг, 12.12.2024, 23:17
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Удаление объектов с контролем ссылок: массовые действия
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
Генералиссимус
Группа: Администраторы
Сообщений: 6503
Репутация: 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
Генералиссимус
Группа: Администраторы
Сообщений: 6503
Репутация: 173
Статус: Оффлайн
Извиняюсь. Пропустил название таблицы. Для ссылок на кандидаты не понимаю, зачем выделять сразу много разных типов строк, если в итоге все равно затем их передаешь только в кнопку "Добавить в кандидаты". Проще выделять мелкие группы по одному типу и отдельно для каждой вызывать эту команду без риска потерять состав выделенных строк.
 
tormozitДата: Вторник, 02.04.2024, 00:09 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 6503
Репутация: 173
Статус: Оффлайн
Если какая то операция выполняется не достаточно быстро, нужно создавать отдельную заявку с технической информацией и  замером производительности (особенно на огромном числе данных).
 
tormozitДата: Вторник, 02.04.2024, 00:20 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 6503
Репутация: 173
Статус: Оффлайн
Цитата alkomarov84 ()
заходить каждый раз в редактор объекта и там по одной удалять записи - очень долго
Добавить этот регистр в неблокирующие типы и его ссылающиеся строки будут автоматически удаляться.
 
alkomarov84Дата: Вторник, 02.04.2024, 19:15 | Сообщение # 7
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 4
Статус: Оффлайн
Цитата tormozit11447Для ссылок на кандидаты не понимаю, зачем выделять сразу много разных типов строк, если в итоге все равно затем их передаешь только в кнопку "Добавить в кандидаты"
Очень просто, на больших объемах данных в варианте "выделяем много разных типов": жмем кнопку выделения, жмем "добавить в кандидаты", следующий час занимаемся чем-то другим, приходим, жмем "Контроль", уходим еще на час. Мы 2 часа можем заниматься чем-то другим на этой операции.
В варианте "по одному типу": (жмем кнопку выделения, жмем добавить в кандидаты, ждем 1-10 минут) * повторяем раз 20, затем жмем "Контроль", уходим на час. Тут только 1 час можно заниматься чем-то другим. Паузы 1-10 минут невозможно чем-то занять, потому что переключаться на такие маленькие промежутки себе дороже.
 
  • Страница 1 из 1
  • 1
Поиск: