|
|
Удаления большого количества элементов из справочника
Mops1C, CepeLLlka, Dен, maxab72, Redaktor, Участковый, abfm, zenik, ads55, Timon1405, banco, Доминошник, lEvGl, Александр111, kubik_live, scanduta, YaFedor, boozin, Garykom, LuckyStar, Hawk_1c, Ненавижу 1С, formista2000, Bigbro, DimR_71, laeg, vis, nAPACEHAK, Crusher, Chai Nic, Мультук, Михаил Козлов, Ivanich, dchumak, Ёпрст, Чужой, Tigrann, Климов Сергей, Bad_Aleks, skafandr, ДенисСмирнов, Хряк, Волшебник, АНДР, Fish, Sserj, denk32, H A D G E H O G s, pasha_d, Vstur, Rokford, Prog_man, PLUT, НачинающийВосьмерочн, DemonShinji2, DeeK, Alex7771, Михаил_, vyaz, trad, ikea, Irbis, Fragster, Mankubus, timurhv, DiMel_77, Rovan, igouranga, X Leshiy, maxar, arsik, Indian, МаленькийВопросик, АгентБезопаснойНацио, vladko, Злопчинский, avkynev, 1snik_d, trdm, RomanYS, PuhUfa, yurikmellon2, ReaLg, Homer, BOOL, Beduin
| ☑ |
|
0
Mops1C
01.11.25
✎
10:55
|
Надо реализовать удаление (полное) большого кол-ва элементов из справочника, примерно 20к элементов. Суть в том, что надо делать это быстро, так как после этого ещё будет примерно столько же записываться (записывается за минуты полторы, пойдёт). Код
&НаСервере
Процедура ОчисткаСправочника()
НачатьТранзакцию();
Попытка
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ФедеральныеЛьготники.Ссылка КАК Ссылка
|ИЗ
| Справочник.ФедеральныеЛьготники КАК ФедеральныеЛьготники";
Выборка = Запрос.Выполнить().Выбрать();
МассивДляУдаления = Новый Массив;
Счетчик = 0;
Пока Выборка.Следующий() Цикл
МассивДляУдаления.Добавить(Выборка.Ссылка);
Счетчик = Счетчик + 1;
Если Счетчик >= 1000 Тогда
УдалитьПакет(МассивДляУдаления);
МассивДляУдаления.Очистить();
Счетчик = 0;
КонецЕсли;
КонецЦикла;
Если МассивДляУдаления.Количество() > 0 Тогда
УдалитьПакет(МассивДляУдаления);
КонецЕсли;
ЗафиксироватьТранзакцию();
Сообщить("Справочник полностью очищен!");
Исключение
ОтменитьТранзакцию();
Сообщить("Ошибка очистки: " + ОписаниеОшибки(), СтатусСообщения.Важное);
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
1С:Предприятие 8.3 (8.3.27.1786)
Медицина. Больничная аптека, редакция 3.0 (3.0.2.27)
|
|
|
1
maxab72
01.11.25
✎
10:57
|
Делай под полными правами, без всяких там "РАЗРЕШЕННЫЕ". будет быстрее
|
|
|
2
Irbis
01.11.25
✎
10:59
|
Выделил всё и шифт+дел. Хотя конфа в которой часто приходится удалять условно-постоянную информацию не внушает уважения.
|
|
|
3
Волшебник
01.11.25
✎
11:04
|
(0) Что-то не видно в Вашем коде собственно Объект.Удалить()
|
|
|
4
zenik
01.11.25
✎
11:11
|
Я бы РС сделал и в нем статус хранил. И обработкой менял. Удалять справочник - такое себе занятие. А если ссылки?
|
|
|
5
Timon1405
01.11.25
✎
11:11
|
разбить на порции и к каждой применить функцию ДлительныеОперации.ВыполнитьВФоне есть в БСП(3.*начиная с какой-то версии*)
|
|
|
6
Климов Сергей
01.11.25
✎
11:12
|
(0) Перенесите транзакцию внутрь вашего УдалитьПакет()
|
|
|
7
Волшебник
01.11.25
✎
11:15
|
(0) Удаляйте прямым запросом DELETE FROM Catalog342 WHERE id IN (1,2,3)
|
|
|
8
Timon1405
01.11.25
✎
11:19
|
(7) угу и ловите потом битые ссылки в связанных данных
|
|
|
9
Ёпрст
гуру
01.11.25
✎
11:19
|
(7) ему вроде весь нужен, сюдя по коду, тогда уж truncate table
|
|
|
10
Ёпрст
гуру
01.11.25
✎
11:19
|
(8) при коде в (0) оне и так будут
|
|
|
11
Волшебник
01.11.25
✎
11:19
|
(8) гулять так гулять
|
|
|
12
Волшебник
01.11.25
✎
11:20
|
(9) у него в коде РАЗРЕШЕННЫЕ
|
|
|
13
Ёпрст
гуру
01.11.25
✎
11:32
|
(12) это видать, конструктор ему пишет, сам он не ведует, что ОНО значит :)
|
|
|
14
Маленький Вопросик
01.11.25
✎
11:44
|
(13) +
|
|
|
15
Волшебник
01.11.25
✎
11:46
|
(13) Я бы таких программистов бил линейкой по рукам. Железной. Ребром.
|
|
|
16
Fish
гуру
01.11.25
✎
11:49
|
А потом кто-то не получит льготы от таких удаляторов.
|
|
|
17
Fish
гуру
01.11.25
✎
11:50
|
Ну и тема, с чем связано " надо делать это быстро" не раскрыта.
|
|
|
18
Irbis
01.11.25
✎
11:53
|
(17) У тру-1Сников срок исполнения заказа — только вчера. Иначе можно отложить на неопределенное время, может и делать ничего не надо будет.
|
|
|
19
timurhv
01.11.25
✎
11:54
|
1С добавило пакетное добавление, удаление, изменение записей в РС, интересно, через сколько десятков лет будет реализовано подобное для документов, справочников?
РежимЗамещения.Добавление
РежимЗамещения.Обновление
РежимЗамещения.Удаление
|
|
|
20
Fish
гуру
01.11.25
✎
11:56
|
(18) Настоящие Тру-1Сники в совершенстве владеют методом трёх гвоздей.
|
|
|
21
Irbis
01.11.25
✎
11:57
|
(20) И трёх конвертов
|
|
|
22
Fish
гуру
01.11.25
✎
11:58
|
(21) Не, метод трёх конвертов - это уровень выше. Это для начальников тех, кто владеет методом трёх гвоздей.
|
|
|
23
Garykom
гуру
01.11.25
✎
12:04
|
(0) Глупость
Зачем удалять все когда надо обновить?
Нужен реквизит "ДатаОбновления" в самом справочники или в отдельном РС
При загрузке регистра льготников ищем в справочнике по СНИЛС, если нашли то обновляем данные и ставим дату обновления
Затем всех прочих (со старой датой обновления) "закрываем", ставя дату окончания действия или помечая на удаление (можно еще в отдельную группу)
|
|
|
24
Garykom
гуру
01.11.25
✎
12:03
|
(23)+ Реально не понимаю тупизны, в рецептах же ссылки на льготников
|
|
|
25
Irbis
01.11.25
✎
12:05
|
(22) Вот же мне не свезло, я и тем и тем владею. Но гвоздей в практике не меньше пяти, а конверт только один под №3.
|
|
|
26
Bigbro
01.11.25
✎
14:10
|
ну во первых 20к это немного.
а если надо удалить реально много
проще бахнуть в конфигурации объект скопировав его предварительно. и вставить обратно.
если на него нет ссылок ниоткуда
но если есть то тогда полное удаление под большим вопросом.
|
|
|
27
lEvGl
гуру
01.11.25
✎
14:14
|
(26) < если на него нет ссылок ниоткуда
конечно же ссылок нет, что вы, что вы!
|
|