Имя: Пароль:
1C
 
Почему слетает счетчик?
0 pro3ri
 
16.07.15
09:16
Добрый день!

код:
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Номенклатура.Ссылка
                   |ИЗ
                   |    Справочник.Номенклатура КАК Номенклатура
                   |ГДЕ
                   |    (НЕ Номенклатура.ПометкаУдаления)
                   |    И (НЕ Номенклатура.ЭтоГруппа)";
                  
    Выборка = Запрос.Выполнить().Выбрать();
    Счетчик = 0;

    Пока Выборка.Следующий() Цикл
    
        Объект = Выборка.Ссылка.ПолучитьОбъект();                                
        Объект.ВестиУчетПоСериям = Истина;
        Попытка
        
            Объект.Записать();
        
        Исключение
            Счетчик = Счетчик + 1;
            Сообщить(Строка(Счетчик)+": В Номенклатуре "+ Объект.Наименование+ " не установлен признак Серии: "+ ОписаниеОшибки());
            
        КонецПопытки;
        
    КонецЦикла;
КонецПроцедуры

Заходит на Счетчик, он стан-ся = 1, далее как только попадает на Объект.Записать(); счетчик обнуляется. В чем ошибка?
1 Fish
 
16.07.15
09:20
(0) А зачем ты увеличение счётчика в исключение запихал?
2 Jokero
 
16.07.15
09:22
(1) Он так количество ошибок отлавливает
(0) может конфликтует с другой переменной. Назови счетчик - абрвал))
3 Fish
 
16.07.15
09:23
(2) Ну по идее всё равно не должно такого быть.
4 pro3ri
 
16.07.15
09:25
(3) а как отловить колво ошибок?
5 pro3ri
 
16.07.15
09:27
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Номенклатура.Ссылка
                   |ИЗ
                   |    Справочник.Номенклатура КАК Номенклатура
                   |ГДЕ
                   |    (НЕ Номенклатура.ПометкаУдаления)
                   |    И (НЕ Номенклатура.ЭтоГруппа)";
                  
    Выборка = Запрос.Выполнить().Выбрать();
    абрвал=0;
    Пока Выборка.Следующий() Цикл
    
        Объект = Выборка.Ссылка.ПолучитьОбъект();                                
        Объект.ВестиУчетПоСериям = Истина;
        Попытка
            Объект.Записать();
        
        Исключение
            абрвал = абрвал + 1;
            Сообщить(Строка(Счетчик)+": В Номенклатуре "+ Объект.Наименование+ " не установлен признак Серии: "+ ОписаниеОшибки());
            
        КонецПопытки;
        
    КонецЦикла;
КонецПроцедуры

так работает спасибо, только это внешняя голая обработка без реквизитов...
6 фобка
 
16.07.15
09:31
Опечатка - абырвалг
7 sash-ml
 
16.07.15
09:33
какая версия платформы?
Теоретически это может быть связано с областью видимости переменных, и прекэшированием байткода в ядро процессора,
8 фобка
 
16.07.15
09:34
1) Коробит название переменной Объект
2) Коробит название переменной Счетчик
3) Счетчик ошибок можно накрутить не в исключении: попытка объект.записать(); продолжить; исключение конецпопытки; счетчик = счетчик+1; сообщить(счетчик);
9 pro3ri
 
16.07.15
10:02
(7) 1С:Предприятие 8.1 (8.1.15.14)
10 1sanekmaloi1
 
16.07.15
10:03
(8) а чем исключение не нравится? Зачем городить костыли?Зачем тогда исключение сделали?Имхо все нормально было только на зарезервированную переменную похоже нарвался.
11 фобка
 
16.07.15
10:08
(10) я не говорил, что не нравится
12 1sanekmaloi1
 
16.07.15
10:23
(11)в контексте (8) читается недовольство кодом,получение.из чего я и сделал такой вывод, может ошибся конечно.тогда зачем вообще пункт 3,непонятна.
13 1sanekmaloi1
 
16.07.15
10:24
Получение=поучение
14 patria0muerte
 
16.07.15
10:27
А не проще ли счетчик прибавлять после записи, а количество ошибок считать из количества записей в результате запроса минус счетчик...
15 probably
 
16.07.15
10:32
(5) увеличиваешь абрвал, а выводишь всё равно счетчик
16 1sanekmaloi1
 
16.07.15
10:52
(14)Еще один мастер костылей. Зачем велосипед с квадратными колесами,лишних вычислений несколько штук, да еще и неверных(там считается и выводится порядковый номер ошибки, а не их количество)? в алгоритме все верное, синтаксис подвел.
17 patria0muerte
 
16.07.15
11:08
(16) Наркоман чтоле?

пост (3) как бы намекает, что человек интересуется как получить количество ошибок, не?

как бэ нафига нужен номер ошибки?

если уж так хочется - можно выводить номенклатуру, которая не записалась..

а производить какие то вычисления в исключениях - это не комильфо, насколько мне известно...
18 Draziw
 
16.07.15
11:24
(10)
Счетчик = 0;

Счетчик = Счетчик + 1;

Да нет тут никакой переменной зарезервированной, просто тут 2 разных переменных :) одна Английской "С", а вторая с Русской "С".
поэтому 0+1 - всегда = 1 :)
19 1sanekmaloi1
 
16.07.15
11:24
(17) Попутал чтоли?
из (0) Заходит на Счетчик, он стан-ся = 1, далее как только попадает на Объект.Записать(); счетчик обнуляется. В чем ошибка?

ответ на это - ошибка в имени переменной

то что в (3) написано это не есть истина, если имел ввиду 4(я как то упустил этот пост), то это уже к (0) не имеет отношения

номер ошибки нужен автору, его и спроси зачем он там.

не надо истерить по поводу "нельзя в исключении считать", если говорят не желательно, то не надо там обработку проведения мутить, а сложить 2 числа можно.
20 pro3ri
 
16.07.15
11:42
(15) описка - проверил в отладчике и кинул
21 pro3ri
 
16.07.15
11:48
(18) все гениальное просто! А как нашли?
22 1sanekmaloi1
 
16.07.15
11:55
(18)Телепат 80лвл, красава
23 Draziw
 
16.07.15
12:08
(21) Я не нашел, я предположил, частая же ошибка. Ну и никакой зарезервированной переменной "счетчик" точно нету, какие еще могут быть варианты.