Удаление записей из независимого регистра сведений

1. n_spb 22.05.19 10:56 Сейчас в теме
1С 8.3. Есть независимый регистр сведений. Как правильно удалить все записи отобрав их по одному измерению для ста значений данного измерения. Значения измерения по которым нужно удалить записи находятся в таблице значений.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 22.05.19 11:10 Сейчас в теме
(1) Перебрать все значения измерений и выполнить по ним очистку - запись пустого набора:
НаборЗаписей = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей();
Для каждого СтрокаТаблицы Из ТаблицаИзмерений Цикл
   НаборЗаписей.Отбор.ИмяИзмерения.Установить(СтрокаТаблицы.ИмяКолонкиИзмерения);
   НаборЗаписей.Записать();
КонецЦикла;
3. n_spb 22.05.19 16:05 Сейчас в теме
(2) Есть возможность отобрать сразу все записи и потом записать набор записей? Возможно установить отбор не по конкретному элементу, а по массиву элементов?
4. herfis 499 22.05.19 16:16 Сейчас в теме
(3) Нет. Отбор тут можно устанавливать только на равенство. Несколько ускорить можно удаляя в транзакции порционно.
5. SlavaKron 22.05.19 16:20 Сейчас в теме
(4) Правильно я понимаю, ускорение от транзакции будет из-за того что запись будет в оперативную память, а не в БД?
6. herfis 499 22.05.19 16:25 Сейчас в теме
(5) Не. Экономия будет на накладных расходах СУБД на открытиях/закрытиях транзакций.
Частично это и за счет использования ОЗУ происходит, но не в 1С, а уже в самой СУБД.
7. n_spb 22.05.19 16:27 Сейчас в теме
(4) Порционно это, как сделать?
8. herfis 499 22.05.19 16:39 Сейчас в теме
(7) Типа такого:
РазмерПорции = 50;
ОбработаноЭлементов = 0;
НачатьТранзакцию();
Для Каждого Элемент Из Массив Цикл
     ...........................
     НаборЗаписей.Записать();
     ОбработаноЭлементов = ОбработаноЭлементов + 1;
     Если ОбработаноЭлементов % РазмерПорции = 0 Тогда
          ЗафиксироватьТранзакцию();
          НачатьТранзакцию();
     КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Показать
9. n_spb 23.05.19 12:42 Сейчас в теме
(8) Не понимаю, как работает эта строка:
ОбработаноЭлементов % РазмерПорции = 0
10. spacecraft 23.05.19 12:52 Сейчас в теме
(9) если перевести, то получится так:
Если значение переменной ОбработаноЭлементов кратно РазмерПорции Тогда
дословный перевод:
Если остаток от деления ОбработаноЭлементов на РазмерПорции = 0 Тогда
11. herfis 499 23.05.19 12:59 Сейчас в теме
(9) "%" - это арифметическая операция. Возвращает остаток целочисленного деления
Оператор еще из Си тянется, если не раньше. В 7.7 тоже был.
Оставьте свое сообщение

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