Удаление элементов из справочника

1. Fezis 01.11.25 12:34 Сейчас в теме
Здравствуйте! Надо полностью удалить все элементы из справочника по нажатию на кнопку, далее будет читаться файл и из него будут загружаться новые данные, но это происходит очень медленно, так как элементов может быть около 20 тысяч, есть какие-нибудь идеи, как это реализовать?
1С:Предприятие 8.3 (8.3.27.1786)
Медицина. Больничная аптека, редакция 3.0 (3.0.2.27)
код для удаления на данный момент
&НаСервере
Процедура ОчисткаСправочника()
    
    Попытка
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ 
             |    ФедеральныеЛьготники.Ссылка КАК Ссылка
             |ИЗ
             |    Справочник.ФедеральныеЛьготники КАК ФедеральныеЛьготники";
        
        Выборка = Запрос.Выполнить().Выбрать();
        
        МассивСсылок = Новый Массив;
        
        НачатьТранзакцию();
        
        Пока Выборка.Следующий() Цикл
            МассивСсылок.Добавить(Выборка.Ссылка);
            
            Если МассивСсылок.Количество() >= 1000 Тогда
                УдалитьПакетом(МассивСсылок);
                МассивСсылок.Очистить();
            КонецЕсли;
        КонецЦикла;
        
        Если МассивСсылок.Количество() > 0 Тогда
            УдалитьПакетом(МассивСсылок);
        КонецЕсли;
        
        ЗафиксироватьТранзакцию();
        
    Исключение
        ОтменитьТранзакцию();
        ВызватьИсключение;
    КонецПопытки;
    
КонецПроцедуры

&НаСервере
Процедура УдалитьПакетом(МассивСсылок)
    Для Каждого Ссылка Из МассивСсылок Цикл
        Ссылка.ПолучитьОбъект().Удалить();
    КонецЦикла;
КонецПроцедуры
Показать


я новичок в 1с, это задание мне кажется очень трудным, хоть и получилось его сделать (хотя можно ли это считать за готовое задание, если приходится очень долго ждать), может быть я изначально принял не тот путь выполнения, ну справочник создал, закинул в подсистему, создал табличную часть, потом на форме списка кнопку логика ее работы: очистка справочника, чтение файла, загрузка данных в справочник
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. Anton_new01 01.11.25 13:53 Сейчас в теме
(1)
Зачем вам транзакция? - это сильно нагружает базу. типа у вас есть условие, либо все либо никто?
по сути транзакция - это возврат назад все как было, если где-то не получилось...


Выборка = Справочники.ФедеральныеЛьготники.Выбрать();

Пока Выборка.Следующий() Цикл
	Выборка.Ссылка.ПолучитьОбъект().Удалить();
КонецЦикла;
6. Fezis 01.11.25 14:02 Сейчас в теме
(4) я смотрел на каких-то форумах, думал, так быстрее, если наоборот, то уберу, спасибо
7. Anton_new01 01.11.25 14:07 Сейчас в теме
(6)
единственно, вы не указали, что делать с сылочной целостностью?

т.е. если просто так удалить - то будут "Объект не найден"... в местах где использовались Федеральные льготники.

если вам это не критично - то мой способ подойдет.
8. Fezis 01.11.25 14:13 Сейчас в теме
(7) хороший вопрос, по сути, этот справочник идёт особняком, т.е. нигде не используется, он нужен то для отображения закодированного файла, по сути, поиск на ссылок на объект также не дал какого-то результата, поэтому я и решил, что ссылочной целостностью в данном случае можно пренебречь. По сути удалить старые данные и записать новые данные
10. ZergKRSK 130 04.11.25 08:20 Сейчас в теме
(6) плюс использовать ОбменДанными.Загрузка = Истина:
СпрОбъект = Ссылка.ПолучитьОбъект();
СпрОбъект.ОбменДанными.Загрузка = Истина;
СпрОбъект.Удалить();
2. Fezis 01.11.25 12:39 Сейчас в теме
я начинающий специалист, поэтому если что-то написал непонятно, извините, уточните просто, также возможны тупые вопросы с моей стороны
3. user_2166499 01.11.25 12:59 Сейчас в теме
5. Fezis 01.11.25 14:01 Сейчас в теме
(3) спасибо за предложение, но боюсь прямые запросы использовать, а также не понимаю, как их вставлять в код
9. user_2166499 01.11.25 15:03 Сейчас в теме
(5) А не надо код. Зашел в SSMS и выполнил одну строчку.
Для отправки сообщения требуется регистрация/авторизация

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот