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