![]() |
|
Не получается удалить отдельные записи одного набора | ☑ | ||
---|---|---|---|---|
0
Gorr
02.07.14
✎
16:01
|
Добрый день!
Не получается удалить запись из набора регистра накопления. Точнее не могу записать набор. Смотрел в отладчике перед вызовом метода Набор.Записать(), Набор.Количество() одна цифра, после 0. т.е. при записи по регистратору все записи по регистратору убиваются. |
|||
1
hhhh
02.07.14
✎
16:04
|
а Набор.Прочитать() сделал?
|
|||
2
Maxus43
02.07.14
✎
16:10
|
набор.записать(Ложь) есть ещё, но скорее (1)
|
|||
3
Gorr
02.07.14
✎
16:11
|
(1) конечно, иначе бы набор.Количество() вернул 0
|
|||
4
RomaH
naïve
02.07.14
✎
16:12
|
(1) перед вызовом метода Набор.Записать(), Набор.Количество() одна цифра
т.е. записывается явно не пустой набор |
|||
5
Gorr
02.07.14
✎
16:13
|
+ причем не на всех регистраторах такая фигня.
на регистраторах с небольшим объемом записей все работает. 18 006 записей до 0 после |
|||
6
RomaH
naïve
02.07.14
✎
16:14
|
точка останова на "Записать"
включить замер производительности тока останова после записи - отключить замер смотреть какой код выполняется |
|||
7
Gorr
02.07.14
✎
16:14
|
+ использую транзакцию. может в ней дело?
|
|||
8
Maxus43
02.07.14
✎
16:14
|
Запятые расставляй, хрено читать же
|
|||
9
hhhh
02.07.14
✎
16:14
|
(5) код в студию
|
|||
10
Gorr
02.07.14
✎
16:19
|
НачатьТранзакцию();
КоличествоУдаленных = 0; КоличествоДо = Набор.Количество(); ЭлементыФормы.Прогрессор.МаксимальноеЗначение = Всего; для сч = 0 по всего - 1 цикл если ЗаписиНабора[сч].Пометка тогда Набор.Удалить(ЗаписиНабора[сч].Запись_регистра); КоличествоУдаленных = КоличествоУдаленных + 1; конецесли; ЭлементыФормы.Прогрессор.Значение = сч+1; ОбработкаПрерыванияПользователя(); конеццикла; ЭлементыФормы.Прогрессор.Значение = Всего; Набор.Записать(); если ТранзакцияАктивна() тогда если Набор.Количество() = КоличествоДо - КоличествоУдаленных тогда ЗафиксироватьТранзакцию(); иначе ОтменитьТранзакцию(); конецесли; конецесли; |
|||
11
Maxus43
02.07.14
✎
16:21
|
дак условие не срабатывает может? откат транзакции идёт?
если Набор.Количество() = КоличествоДо - КоличествоУдаленных тогда |
|||
12
RomaH
naïve
02.07.14
✎
16:22
|
(11)
Смотрел в отладчике перед вызовом метода Набор.Записать(), Набор.Количество() одна цифра, после 0 |
|||
13
RomaH
naïve
02.07.14
✎
16:22
|
Набор.Записать();
F9 Набор.Количество() = 10 F10 Набор.Количество() = 0 |
|||
14
RomaH
naïve
02.07.14
✎
16:23
|
так?
|
|||
15
Gorr
02.07.14
✎
16:25
|
(14) нет не так
Ф9 Набор.Количество() 18 006 Ф10 Набор.Записать() Ф10 Набор.Количество() 0 |
|||
16
Gorr
02.07.14
✎
16:26
|
ну и думает минуты 3
|
|||
17
RomaH
naïve
02.07.14
✎
16:26
|
(15) :)
а если в табло? |
|||
18
Maxus43
02.07.14
✎
16:27
|
а КоличествоУдаленных сколько?
|
|||
19
Gorr
02.07.14
✎
16:27
|
изначально задача удалить некоторые записи в которых в измерениях есть битые ссылки. а таких записей в наборе дофига.
|
|||
20
RomaH
naïve
02.07.14
✎
16:27
|
(15) что замер производительности показывает на Набор.Записать()?
|
|||
21
Gorr
02.07.14
✎
16:28
|
(18) я пока тестово делаю соответственно отметил только одну запись. таким образом КоличествоУдаленных = 1
|
|||
22
RomaH
naïve
02.07.14
✎
16:29
|
(21) а без удаления нормально пишет?
если ни одной не отметить, но записать |
|||
23
Maxus43
02.07.14
✎
16:30
|
(21) тут видишь в чем дело ещё... удаляя в цикле - ты уже сокращаешь количество и вызываешь "сдвиг" записей в наборе, Цикл в обратную сторону надо делать
|
|||
24
Gorr
02.07.14
✎
16:31
|
(20) сейчас еще идет отбор записей по критериям в среднем минут 10 требуется. как закончится проверю на замер производительности.
(22) не пробовал записывать. скорее всего все слетит. |
|||
25
RomaH
naïve
02.07.14
✎
16:31
|
(21) нормально там все - у него Набор и ЗаписиНабора - это наверное разные коллекции
|
|||
26
Maxus43
02.07.14
✎
16:32
|
(25) хм, видимо да...
|
|||
27
Gorr
02.07.14
✎
16:33
|
(23) цикл отрабатыват только один раз, но уже не работает.
(25) да правильно |
|||
28
Gorr
02.07.14
✎
16:34
|
ЗаписиНабора это для интерфейса. чтобы флажками отмечать можно было какую удалить запись конкретно.
|
|||
29
Сисой
02.07.14
✎
16:35
|
Скорее всего, отбор стоит некорректный.
Добавляются только записи, соответствующие отбору. |
|||
30
Maxus43
02.07.14
✎
16:36
|
Я бы переделал, не удалял бы записи, а пустой набор заполнил не отмеченными. Так код понятней
|
|||
31
Сисой
02.07.14
✎
16:37
|
(30) + 100
|
|||
32
Gorr
02.07.14
✎
16:40
|
(20) замер показаал что там дофига всего происходит
Процедура ПередЗаписью(Отказ, Замещение) Если НЕ ОбменДанными.Загрузка Тогда КорректировкаСерийПриРезервировании(); КонецЕсли; КонецПроцедуры |
|||
33
Gorr
02.07.14
✎
16:46
|
щас добавлю строчку перед записью Набор.ОбменДанными.Загрузка = Истина; и посмотрим..
|
|||
34
Gorr
02.07.14
✎
16:47
|
(29) отбор только по регистратору. как он может быть некорректный?
|
|||
35
Gorr
02.07.14
✎
16:54
|
не помогло. опять убились.
|
|||
36
Gorr
02.07.14
✎
16:57
|
щас просто на запись проверю не удаляя ничего
|
|||
37
Maxus43
02.07.14
✎
17:03
|
код по созданию набора и установке отборов тоже покажи на всякий
|
|||
38
Gorr
02.07.14
✎
17:12
|
убились просто при записи набора
|
|||
39
Gorr
02.07.14
✎
17:17
|
(37)
Набор.Отбор.Регистратор.Установить(Документ); Набор.Очистить(); Набор.Прочитать(); |
|||
40
Gorr
02.07.14
✎
17:48
|
Все заработало!!! RomaH был прав - дело оказалось в подписках.
все таки (20) +100!!! |
|||
41
hhhh
02.07.14
✎
17:57
|
наверно надо проще делать
если КоличествоУдаленных > 0 тогда ЗафиксироватьТранзакцию(); иначе ОтменитьТранзакцию(); конецесли; зачем эта фигня про до и после? |
|||
42
Gorr
03.07.14
✎
13:29
|
(41) потому что топик читать нужно. вдумчиво.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |