Имя: Пароль:
1C
1С v8
Ошибка обращения к реквизиту строки ДЗ. Как такое получается?
0 mzelensky
 
04.07.13
12:25
Доброго всем!
Честно говоря немного не догоняю, как и почему такое может быть:

ТС=Элементыформы.ДеревоТСД.ТекущаяСтрока; //ДеревоТСД - дерево значений на форме

Для каждого Колонка из Элементыформы.ДеревоТСД.Колонки цикл
  Если  ЗначениеЗаполнено(ТС[Колонка.Имя]) тогда            
    ...
    //что-то делаем
    ...    
  КонецЕсли;
КонецЦикла;


В определенный момент выходит ошибка "Поле объекта не обнаружено" и показывает имя колонки "ПорядковыйНомерСтроки". Естественно такая колонка в дереве есть (и она даже отображается). Да и вообще, как она может считать имя "колонки" из дерева и потом НЕ НАЙТИ такой реквизит в строке этого же дерева???
1 Maxus43
 
04.07.13
12:29
Сообщить(ТС.ПорядковыйНомерСтроки) не даёт ошибки?
2 acsent
 
04.07.13
12:30
не имя, а данные
3 mzelensky
 
04.07.13
12:31
(1) в томи дело ,что дает.

Точнее я прям так не делал, но залез в отладчик и посмотрел перечень реквизитов переменной "ТС", там реально такой колонки нет.

Вот только почему?!

Пробовал вместо

ТС=Элементыформы.ДеревоТСД.ТекущаяСтрока;

ТС=Элементыформы.ДеревоТСД.ТекущиеДанные;

результат аналогичный
4 mzelensky
 
04.07.13
12:32
(2) почему данные?

Для остальных же 20 колонок работает.
5 Maxus43
 
04.07.13
12:32
(3) колонки Дерева обходи, а не колонки Элемента формы.
Короче откуда берешь колонки туда за значением и обращайся. а то одно из места номер 1, а лезешь в место номер 2
6 acsent
 
04.07.13
12:33
имя колонки на форме не всегда совпадает с именем колонки таблицы
7 mzelensky
 
04.07.13
12:33
(2) если ты про это:

ТС[Колонка.данные]

то так тоже не работает
8 mzelensky
 
04.07.13
12:34
(6) это яуже проверил - они совпадают! Уже перекопировал несколько раз.
9 mzelensky
 
04.07.13
12:35
(5) почему?
вроде же тут считываю с формы:

ТС=Элементыформы.ДеревоТСД.ТекущаяСтрока;

и следовательно тут обхожу по форме:

Элементыформы.ДеревоТСД.Колонки

Почему не правильно?
10 Maxus43
 
04.07.13
12:36
(9) потому что сделать лучше правильно сразу, а не гадать почему не работает ересь
11 Maxus43
 
04.07.13
12:37
Что за привычка работать с элементами формы? работай с данными. реквизитами и т.д.
12 mzelensky
 
04.07.13
12:38
(10) Сделал так:

Для каждого Колонка из ДеревоТСД.Колонки цикл

действительно заработало.
13 mzelensky
 
04.07.13
12:40
(11) Честно говоря не понимаю, почему у 20 колонок все работало, а одна вызвала такое исключение.
14 Maxus43
 
04.07.13
12:40
(13) Не надо понимать лучше, просто правильно делать
15 mzelensky
 
04.07.13
12:41
(11) а по форме обходил колонки исходя из логики, что тут то я тоже с формы считал:

ТС=Элементыформы.ДеревоТСД.ТекущаяСтрока;
16 mzelensky
 
04.07.13
12:41
Это ведь не "ТекущиеДанные", а "ТекущаяСтрока"..а это вроде как объект формы.
17 Maxus43
 
04.07.13
13:14
(16) это именно строка. Короче всё сказано, работай с данными, не мешай эти понятия, Элементы формы для отображения
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший