Имя: Пароль:
1C
 
очистка регистра сведений за определённый период
Ø (Волшебник 30.05.2017 12:53)
0 Олеся999
 
30.05.17
12:15
подскажите пожалуйста как очистить регистр сведений за определенный период
ДатаОт и ДатаДо ?

НаборЗаписей = РегистрыСведений.КоллизииПриОбмене.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ДатаКоллизии.Установить(ДатаОт );
НаборЗаписей.Отбор.ДатаКоллизии.Установить(ДатаДо);
НаборЗаписей.Записать();
1 Ц_У
 
30.05.17
12:17
"Шэф, усе пропало!" (с)
2 Волшебник
 
модератор
30.05.17
12:17
так нельзя
3 1dvd
 
30.05.17
12:18
4 Олеся999
 
30.05.17
12:18
(2) ну понятно что так не работает и это не правильно
5 Волшебник
 
модератор
30.05.17
12:18
Нужно запросом выбрать данные, затем вы цикле по выборке из запроса устанавливать МенеджерЗаписи и вызывать Удалить()
6 Timon1405
 
30.05.17
12:19
РегистрСведенийНаборЗаписей.<Имя регистра сведений>.Загрузить (InformationRegisterRecordSet.<Имя регистра сведений>.Load)
РегистрСведенийНаборЗаписей.<Имя регистра сведений> (InformationRegisterRecordSet.<Имя регистра сведений>)
Загрузить (Load)
Синтаксис:

Загрузить(<ТаблицаЗначений>)
Параметры:

<ТаблицаЗначений> (обязательный)

Тип: ТаблицаЗначений.
Таблица значений, по которой производится заполнение набора записей.
Описание:

Загружает набор записей значениями из переданной таблицы значений. При этом все прежние записи набора удаляются. Заполняются значения доступных для записи свойств записей регистра сведений, имена которых совпали c именами колонок таблицы значений.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

Рег = РегистрыСведений.КурсыВалют;
НаборКурсов = Рег.СоздатьНаборЗаписей();
Таб = Новый ТаблицаЗначений;
// формирование таблицы значений
// ...
НаборКурсов.Загрузить(Таб);
7 Олеся999
 
30.05.17
12:20
(5) без циклов , а то зависает
8 1dvd
 
30.05.17
12:20
не поможет (3). Там отбор только на равенство
9 Heckfy
 
30.05.17
12:21
Дергай запросом нужные записи.
Далее
Пока РезультатЗапроса.Следующий Цикл
МЗ=РегистрыСведений.ТвойРегистр.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МЗ,РезультатЗапроса);
МЗ.Удалить();
КонецЦикла;

Как то так......
10 1dvd
 
30.05.17
12:21
(7) не получится без циклов.
ДатаКоллизии - Дата или ДатаИВремя?
11 Волшебник
 
модератор
30.05.17
12:21
(7) Чтобы не зависало, добавь ОбработкаПрерыванияПользователя внутрь цикла
12 Timon1405
 
30.05.17
12:22
(5) (9) да что там у менеджера медом намазано что ли?
https://its.1c.ru/db/metod8dev#content:2722:hdoc:_top
13 Heckfy
 
30.05.17
12:24
(12) Ага, намазано.  был у меня случай... Программисту поставили задачу почистить огромный (~100 млн записей) периодический регистр сведений. Ну он и наваял:
НЗ=РегистрыСведений.Регистр.СоздатьНаборЗаписей();
НЗ.Записать();
Стоит объяснять, к чему это привело?
14 Олеся999
 
30.05.17
12:24
А без циклов то не как ?)
15 Олеся999
 
30.05.17
12:25
(13) А где  ДатаОт и ДатаДо ?
16 Волшебник
 
модератор
30.05.17
12:25
(13) удалил весь регистр
17 Волшебник
 
модератор
30.05.17
12:26
(14) Программирование — это фантазия плюс умение крутить циклы.
18 Timon1405
 
30.05.17
12:26
(14)создать набор
циклом сделать таблицу
загрузить из таблицы в набор
очистить набор
ничего сложного. если опасаетесь случаев как в (15) очищайте порциями
19 1dvd
 
30.05.17
12:26
(15) ДатаКоллизии содержит время или нет?
20 Heckfy
 
30.05.17
12:27
(16) Ну, это и надо было сделать. Тут фишка в другом. :)
21 Timon1405
 
30.05.17
12:28
(16) ага, заблокировал сканом и регистр и его индексы. не надо давать таких заданий программистам
22 dezss
 
30.05.17
12:28
(20) ну так сразу фишку и выдавай...чего держишь драматическую паузу?
23 Олеся999
 
30.05.17
12:31
(19) содержит
24 alkorolev
 
30.05.17
12:31
(0) если не любите циклы, то получаете запросом записи регистра, которые НЕОБХОДИМО СОХРАНИТЬ, а дальше просто:
НаборЗаписей = РегистрыСведений.КоллизииПриОбмене.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(Запрос.Выполнить().Выгрузить());
НаборЗаписей.Записать();
25 1dvd
 
30.05.17
12:31
(23) тогда только построчно, как говорит Стас
26 Heckfy
 
30.05.17
12:31
(22) На серваке приложений кончился оператос. Он ушел в жеский своп и перестал реагировать на внешние раздражители. В общем, полдня простоя. А если бы программист подумал и использовал менеджерЗаписи, то все прошло бы без проблем.
27 Волшебник
 
модератор
30.05.17
12:32
(26) Можно было бы в Конфигураторе пересоздать регистр
28 1dvd
 
30.05.17
12:33
(24) глупости. Если там данных за 10 лет, а удалить надо пару дней, то бамбук курить придётся долго
29 Timon1405
 
30.05.17
12:34
(27) или сделать TRUNCATE TABLE
30 Timon1405
 
30.05.17
12:37
(26) >> А если бы программист подумал и использовал менеджерЗаписи
менеджер - просто оболочка для набора записей. если бы программист почитал ИТС, он бы понял, что используя менеджер, он делает вещи, аналогичные запросу в цикле
31 dezss
 
30.05.17
12:40
(26) ну чем угодно надо пользоваться с умом.
просто надо было брать данные частями, а не все сразу.
32 Волшебник
 
модератор
30.05.17
12:40
(30) Это же изменение данных. Изменение в цикле оправдано.
33 Timon1405
 
30.05.17
12:41
(32) 1000 удалений по 1 строке оправданнее 1 удаления 1000 строк?
34 Волшебник
 
модератор
30.05.17
12:41
(33) Да.
35 1dvd
 
30.05.17
12:43
(33) перезапись миллионов записей ради удаления десяти нельзя оправдать ничем
36 Олеся999
 
30.05.17
12:45
НаборЗаписей = РегистрыСведений.[Мой регистр].СоздатьНаборЗаписей();
НаборЗаписей.Отбор.[Мой регистр].Установить([как сюда засунуть диапазон ДатаОт и ДатаДо?]);
НаборЗаписей.Записать();
?
37 1dvd
 
30.05.17
12:46
(36) упорная, молодец. Только всё-равно не поможет :)
38 Олеся999
 
30.05.17
12:48
(37) Почему ?
39 1dvd
 
30.05.17
12:51
(38) тебе уже 100500 раз сказали
http://savepic.ru/14188609.jpg
40 Волшебник
 
модератор
30.05.17
12:53
Уже всё разжевали.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс