Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ошибка в 1cpp (число прочтений - 3958 )
Виктор79
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 26. Июля 2014
ошибка в 1cpp
31. Июля 2014 :: 11:55
Печать  
вот есть кусок модуля класса:
Код
Выбрать все
	Для н = 1 по сп.РазмерСписка() Цикл
		сообщить(""+н+", "+сп.РазмерСписка()+", "+св+", "+зн);
		спУст = СоздатьОбъект("СписокЗначений");
		спЗн = ЗначениеСвойства(спУст, сп.ПолучитьЗначение(н), св);
		Если спЗн.НайтиЗначение(зн) > 0 Тогда
			тРез.НоваяСтрока();
			тРез.о = сп.ПолучитьЗначение(н);
			тРез.спУст = спУст;
		КонецЕсли;
	КонецЦикла;
 


отладочное сообщить порождает следующий текст:
Код
Выбрать все
1, 4, НеОтметки, asdf
3, 4, НеОтметки, asdf
3, 4, НеОтметки, asdf
3, 4, НеОтметки, asdf
3, 4, НеОтметки, asdf
3, 4, НеОтметки, asdf
3, 4, НеОтметки, asdf
3, 4, НеОтметки, asdf
... (и т.д зацикленно)
 


переменная "н" - счетчик цикла - никуда не передается, и нигде не модифицируется. Рекурсивных вызовов тоже нету.
  
Наверх
 
IP записан
 
Виктор79
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 26. Июля 2014
Re: ошибка в 1cpp
Ответ #1 - 31. Июля 2014 :: 12:20
Печать  
в общем не знаю, кто и виноват, все выполняется в пределах одного класса, и во вложенной процедуре есть код (упрощен для демонстрации глюка):
Код
Выбрать все
	Для н = поз по колич Цикл
		прервать;
	КонецЦикла;
 


если он выглядит как показано выше - значит глючит, а если заменю на:
Код
Выбрать все
	Для н_другая = поз по колич Цикл
		прервать;
	КонецЦикла;
 


- то не глючит - изменено имя переменной отвечающей за счетчик цикла - т.е. для одного имени в двух разных процедурах одного модуля, значение выделяется в одной ячейке памяти. Причем этого имени в переменных модуля нету, ни в классе, ни в вызвавшем модуле, ни на формах.
  
Наверх
 
IP записан
 
Виктор79
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 26. Июля 2014
Re: ошибка в 1cpp
Ответ #2 - 31. Июля 2014 :: 12:41
Печать  
и еще в другом месте такая же бяка повыскакивала.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ошибка в 1cpp
Ответ #3 - 31. Июля 2014 :: 13:00
Печать  
глобальник может какой прикрутил с такой переменной
  

1&&2&&3
Наверх
 
IP записан
 
Виктор79
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 26. Июля 2014
Re: ошибка в 1cpp
Ответ #4 - 31. Июля 2014 :: 13:02
Печать  
более простой пример:
Код
Выбрать все
Процедура тест2()
	н = 15;
КонецПроцедуры

Процедура тест() Экспорт
	Для н = 1 по 10 Цикл
		сообщить("до "+н);
		тест2();
		сообщить("после "+н);
	КонецЦикла;
КонецПроцедуры
 


генерирует вывод:
Код
Выбрать все
до 1
после 15
 


т.е. счетчик цикла объявляется автоматом переменной модуля.
И это так с глюком работает только в модулях классов. В прочих модулях нормально.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ошибка в 1cpp
Ответ #5 - 31. Июля 2014 :: 13:18
Печать  
Не верю.
н поди - глобальная переменная модуля, которую меняешь где-то еще.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ошибка в 1cpp
Ответ #6 - 31. Июля 2014 :: 13:20
Печать  
Либо н - атрибут класса, либо н - глобальная экспортная переменная глобаьника/доп глоьальника, либо н - идентификатор реквизита диалога на форме.
чудес не бывает.
  
Наверх
 
IP записан
 
Геннадий
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 59
Зарегистрирован: 08. Марта 2012
Пол: Мужской
Re: ошибка в 1cpp
Ответ #7 - 27. Ноября 2014 :: 10:15
Печать  
Когда-то давно столкнулся с подобным. Оказалось, что "странной" переменной в формуле элемента диалога присваивалось значение... И она из-за этого вела себя как переменная модуля.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать