|
Отбор по периоду в периодическом регистре сведений | ☑ | ||
---|---|---|---|---|
0
Numen
24.06.13
✎
16:41
|
Есть периодический (в пределах секунды) регистр сведений.
Задача удалить все записи за период. Например с 12.01.2005 12:45:00 по 14.01.2005 15:30:14 В интернете в FAQ нашел совсем уж дикий способ. Вопрос Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года Ответ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | * |ИЗ | РегистрСведений.КурсыВалют КАК КурсыВалют |ГДЕ | (КурсыВалют.Период >= ДАТАВРЕМЯ(2005, 1, 1) | ИЛИ | НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""USD"") | И | НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""EUR""))"; ТаблицаОставляемыхЗаписей = Запрос.Выполнить().Выгрузить(); НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей); НаборЗаписей.Записать(); А если в регистре больше миллиона записей? А если несколько миллионов? Неужель для удаления 5-10 записей придется перезаписывать эти миллионы? В отборах нет периода как я понял... |
|||
1
Maxus43
24.06.13
✎
16:43
|
ну перезаписывай эти 5-10 записей, а не мильёны.
|
|||
2
Maxus43
24.06.13
✎
16:43
|
з.ы. запрос конечно жесть, и не потому что перезаписывает весь набор даже... ПОДОБНО там - это пять
|
|||
3
Deon
24.06.13
✎
16:45
|
(2) Скорее всего, это для курсов типа "USD+3%"
|
|||
4
Allexe
24.06.13
✎
16:45
|
(0) Вместо поднобно задай равенство параметру и в параметрах задай ссылки на валюты
|
|||
5
Allexe
24.06.13
✎
16:47
|
(0) И почему в отборах нет периода?
|
|||
6
Deon
24.06.13
✎
16:47
|
5-10 записей можно удалить руками, а не запросом )
|
|||
7
Numen
24.06.13
✎
16:48
|
Это пример страннокода с сайта. У меня совсем другой вопрос.
|
|||
8
Numen
24.06.13
✎
16:48
|
так как удалить то эти 5-10 записей попадающих в период?
|
|||
9
Maxus43
24.06.13
✎
16:50
|
(8) отбор поставить, на период + измерения. По одной записи удаляй. Набором сразу не получится так
|
|||
10
de_aztec
24.06.13
✎
16:50
|
Даже могу сказать из какой книжки этот код - 1С: Предприятие 8.1 "Простые примеры разработки" А.П.Габец, Д.И. Гончаров страница 119.
|
|||
11
Deon
24.06.13
✎
16:51
|
(8) выбери различные периоды из РС, попадающие в твой интервал и потом перебором суй их в отбор и записывай пустые наборы записей.
|
|||
12
Maxus43
24.06.13
✎
16:52
|
(10) не верю чтобы габец/гончаров так быдлокодили... если конечно там задача не стояла именно с ПОДОБНО
|
|||
13
Maxus43
24.06.13
✎
16:53
|
(12) + кстати там нет % в ПОДОБНО. Значит реально хреновый код
|
|||
14
Deon
24.06.13
✎
16:53
|
(13) Вроде в 8.1 можно было и без %
|
|||
15
Maxus43
24.06.13
✎
16:55
|
(14) да и в 8.2 можно без %, просто тогда это не (3), а реально только 2 элемента справочника
|
|||
16
Numen
24.06.13
✎
16:56
|
НаборЗаписей = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(); НаборЗаписей.Отбор.Период.ЗначениеС = НачалоДня(ДатаОтбора); НаборЗаписей.Отбор.Период.ЗначениеПо = КонецДня(ДатаОтбора); НаборЗаписей.Записать(); Вот такая конструкция не ругается но ничего не выбирается и не удаляется. |
|||
17
de_aztec
24.06.13
✎
16:58
|
(12) Я назвала страницу потому что только что специально достала эту книжку и проверила. Проверяйте, если не верите.
|
|||
18
Maxus43
24.06.13
✎
17:01
|
НаборЗаписей.Отбор.Период = НужныйПериод;
НаборЗаписей.Отбор.Измерение = Измерение; |
|||
19
Maxus43
24.06.13
✎
17:01
|
(17) верю верю, авторы книги упали в моих глазах
|
|||
20
Numen
24.06.13
✎
17:02
|
а переменную НужныйПериод как заполнить?)
|
|||
21
mikecool
24.06.13
✎
17:03
|
(2) вот такие примеры в инете еще и денег стоят оО
|
|||
22
Maxus43
24.06.13
✎
17:04
|
(20) используй запрос (0), только без ПОДОБНО... короче выбери запросом поля Период с валютами, которые Хочешь удалить, а не которые надо оставить
|
|||
23
Numen
24.06.13
✎
17:07
|
(22)
зря походу пример пример с валютами) Вот так сказать мой код по мотивам))) // Делаем отбор из регистра по фильтру Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МойРегистр.Период, | МойРегистр.КлючСессии, | МойРегистр.Код |ИЗ | РегистрСведений.МойРегистр КАК МойРегистр |ГДЕ | МойРегистр.Период НЕ МЕЖДУ &Начало И &Конец"; Запрос.УстановитьПараметр("Начало", НачалоДня(ДатаОтбора)); Запрос.УстановитьПараметр("Конец", КонецДня(ДатаОтбора)); Результат = Запрос.Выполнить(); // Загружаем и удаляем записи НаборЗаписей = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(Результат.Выгрузить()); НаборЗаписей.Записать(); |
|||
24
Maxus43
24.06.13
✎
17:11
|
Результат = Запрос.Выполнить();
Пока Результат.Следующий() Цикл НаборЗаписей = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей(); ЗаполнитьЗначенияСвойств(НаборЗаписей.Отбор, Результат); КонецЦикла; короче на тестовой проверь, может где чуток ошибся |
|||
25
Maxus43
24.06.13
✎
17:11
|
+ НаборЗаписей.Записать();
конечно, тоже в цикле |
|||
26
Numen
25.06.13
✎
09:15
|
Опять получается записывать тонну данных в регистр... и если регистр будет большой и загруженный то получим полный затык по производительности (
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |