Имя: Пароль:
1C
1С v8
Как удалить записи из регистра сведений по условию ?
0 Румата
 
12.01.17
15:18
Доброго времени суток.
Есть Независимый, Непериодический регистр сведений.
У него есть измерение "ПредполагаемаяДатаДействия".
Необходимо удалить из регистра все записи удовлетворяющие условию, например 01.01.2015 <= ПредполагаемаяДатаДействия <= 30.11.2015.
Подскажите пожалуйста как мне это сделать.
1 Cool_Profi
 
12.01.17
15:21
выбрать запросом ключевые поля.
Циклом заполнять набор записей, очищать, записывать.
2 Cool_Profi
 
12.01.17
15:21
Или взять готовый инструмент.
Типа тех же мобильных инструментов от ТормозИТ
3 Румата
 
12.01.17
15:26
Циклом долго, без цикла есть решения ?
4 Cool_Profi
 
12.01.17
15:27
(3) Есть. Можно применить древнерусское заклинание "хусим".
5 Cool_Profi
 
12.01.17
15:28
Оно часто помогает.
6 Румата
 
12.01.17
15:29
Я смотрю здесь комики собираются часто, цирк уехал, смею вас заверить ;)
7 Одинесю
 
12.01.17
15:31
(6) Или "хусим" или цикл.
8 Cool_Profi
 
12.01.17
15:32
(6) Ну ты же остался. Вот ты нас и развлекаешь.
9 Румата
 
12.01.17
15:33
Да я смотрю, добры молодцы, вы "хусима" уже попробовали, раз всем его предлагаете )
10 yzimin
 
12.01.17
15:35
Можно сначала считать нужные записи в ТЗ, затем очистить регистр, загрузить из ТЗ в регистр)))
11 Cool_Profi
 
12.01.17
15:36
(9) Бис!
Скажи, а ты белого или рыжего отыгрываешь?
12 Румата
 
12.01.17
15:38
(yzimin) Спасибо, буду пробовать ;)
(Cool_Profi) А кто из вас рыжий, а кто белый ?
13 Heckfy
 
12.01.17
15:38
(1) Я бы с набором записей аккуратнее был. А то можно ненароком и весь регистр дропнуть. Уж лучше менеджер записи юзать :)
14 shamannk
 
12.01.17
15:40
(12) Не пробуйте только циклом, можете похереть все данные.
15 Cool_Profi
 
12.01.17
15:40
(12) Я вот не знаю, кого ты отыгрываешь.
А я представляю тебе адекватную консультацию знающего специалиста. Причём, заметь - бесплатно.
16 Cool_Profi
 
12.01.17
15:40
(13) Проблемы шерифа...
17 Serg_1960
 
12.01.17
16:18
Имхо, если регистр небольшой по объёму, то выгрузка/загрузка ТЗ, иначе - запрос и менеджер.
18 Heckfy
 
12.01.17
17:02
Зачем в ТЗ/из ТЗ гонять, а какже НаборЗаписей с отбором?
19 Cool_Profi
 
12.01.17
17:03
(18) отбор 01.01.2015 <= ПредполагаемаяДатаДействия <= 30.11.2015

Покажи код.
20 Nuobu
 
12.01.17
17:07
Можно запросик написать, где в отборе указать желаемый период, а в полях - нужное поле с датой. А потом - циклом.
21 Heckfy
 
12.01.17
17:08
(19) Лениво....
22 Cool_Profi
 
12.01.17
17:08
(21) Шерсть на животе начнёт расти в сторону спины...
23 Cool_Profi
 
12.01.17
17:09
(20) "Циклом долго, без цикла есть решения ?"
24 Serg_1960
 
12.01.17
17:13
(18) Нууу... ТЗ хороша тем, что по произвольным условиям можно удалять записи. И неважно, что в условиях указано(измерения или нет).
25 Cool_Profi
 
12.01.17
17:14
(24) был у меня один могил^W РС... Который при загрузке в Тз вызывал падение x64 сервера по памяти...
26 Serg_1960
 
12.01.17
17:21
(23) Теоретически можно запросом выбрать нужные записи (те, которые нужно оставить) и выгрузить результат запроса в регистр. Формально как бы без "программного" цикла :)
27 Heckfy
 
12.01.17
17:25
(25) :)
Я как то дал задание челу почистить регистр сведений, в котором овер 150 млн. записей (почему столько отдельная тема). Еще и внимание обратил на количество записей регистра, и что нужно всё аккуратно сделать. Тот радостный и побежал выполнять. Мне было тогда сразу напрячься, спросить, как он собирается это делать. Но что то чуйка дала сбой.
В результате:
НЗ=РС.СоздатьНаборЗаписей
НЗ.Записать
И всё пока. :)
28 Nuobu
 
12.01.17
17:26
(26) Где-то так:

Запрос = Новый Запрос();
Запрос.УстановитьПараметр("НачалоПериода", ДатаНач);
Запрос.УстановитьПараметр("КонецПериода", ДатаКон);
Запрос.Текст = "ВЫбрать
*
из
РегистрыСведений.РегистрСПолемПериода КАК Рег
ГДЕ
НЕ Рег.ПолеПериода Между &НачалоПериода И &КонецПериода";

ТЗ = Запрос.Выполнить().Выгрузить();

НаборЗаписей = РегистрыСведений.РегистрСПолемПериода.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Загрузить(ТЗ);
НаборЗаписей.Прочитать();

//Попробуй так.
29 Nuobu
 
12.01.17
17:26
В конце - НаборЗаписей.Записать();
30 Румата
 
13.01.17
09:34
После запроса вот так написал :

ТаблицаОставляемыхЗаписей  = Запрос.Выполнить().Выгрузить();
    НаборЗаписей = РегистрыСведений.РегистрСПолемПериода.СоздатьНаборЗаписей();
    НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей);
    НаборЗаписей.Записать();

Все получилось !!!
31 Adilgeriy
 
13.01.17
09:39
(27) он почистил. или ты ему не так задачу сформулировал? или это я туплю?
32 impulse9
 
13.01.17
09:57
(27) он позвал тебя к себе со словами "Что-то у меня зависло все, опять сервер тупит"?
33 DrZombi
 
гуру
13.01.17
09:58
(10) А если ЗАписей перевалит за 6 Гб? Бу га га :)
34 DrZombi
 
гуру
13.01.17
09:59
(30) Отстой, но на маленьком объеме информации сойдет :)
35 Heckfy
 
13.01.17
15:56
(31) Ага, тупишь. :)
(32) Если бы он, хрен бы с ним. Весь офис пришел, кто 1С юзает. Сервак пришлось через cmd бутать, ибо по RDP на себя запустить сил у него уже не было. Ну и бутался он что то минут 40 - час.
36 Масянька
 
13.01.17
16:42
(31) Нет, ты не тупишь. Тупит тот, кто задачу поставил.
37 Torquader
 
13.01.17
17:32
(27) Ну, не всё, а очень долгое ожидание.
Если SQL-сервер, то можно срубить сеанс и начать сначала.
P.S. если выбирать первые, например, 100 записей и именно их и удалять, то размер не важен.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший