Имя: Пароль:
1C
1С v8
Не получается удалить отдельные записи одного набора
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) потому что топик читать нужно. вдумчиво.