|
v7: Подскажите про ТекущийЭлемент() | ☑ | ||
---|---|---|---|---|
0
Double_Medved
07.12.12
✎
15:34
|
Подскажите пожалуйста, если мы обходим справочник в цикле, и обращаемся к его реквизитам, и вызываем методы, то обязательно ли писать ТекущийЭлемент()? Как правильно? отладчику пофигу - у него и Спр и Спр.ТекущийЭлемент() - одно и тоже.
Пока (СпрЦеныНоменклатуры.ПолучитьЭлемент() = 1) Цикл Если СпрЦеныНоменклатуры.ТекущийЭлемент().ТипЦен = ТипЦены.БазовыйТипЦен Тогда ЕстьБазовыйтипЦен = 1; КонецЕсли; КонецЦикла; |
|||
1
Double_Medved
07.12.12
✎
15:35
|
Ой извините это я про 7-ку
|
|||
2
mikecool
07.12.12
✎
15:35
|
не надо так писать
|
|||
3
mikecool
07.12.12
✎
15:35
|
Если СпрЦеныНоменклатуры.ТипЦен = ТипЦены.БазовыйТипЦен Тогда
|
|||
4
Double_Medved
07.12.12
✎
15:36
|
А, спасибо. А когда ТекущийЭлемент() нужен? я что -то не пойму
|
|||
5
НЕА123
07.12.12
✎
15:39
|
Пока (СпрЦеныНоменклатуры.ПолучитьЭлемент() = 1) Цикл
Если СпрЦеныНоменклатуры.ТекущийЭлемент().ТипЦен = ТипЦены.БазовыйТипЦен Тогда ЕстьБазовыйтипЦен = 1; Эл = СпрЦеныНоменклатуры.ТекущийЭлемент(); //тут просто необходимо КонецЕсли; КонецЦикла; |
|||
6
Double_Medved
07.12.12
✎
15:39
|
То есть при присвоении это надо?
|
|||
7
Double_Medved
07.12.12
✎
15:40
|
А просто при обращении к атрибутам и методам справочника?
|
|||
8
mikecool
07.12.12
✎
15:41
|
(4) когда надо сравнить с ссылкой или передать куда ее
|
|||
9
LegO
07.12.12
✎
15:41
|
(6) для того чтобы передать этот элемент.
При присвоении - да. |
|||
10
Double_Medved
07.12.12
✎
15:41
|
А например СпрЦеныНоменклатуры.ИспользоватьВладельца(СпрНоменклатура);
|
|||
11
Double_Medved
07.12.12
✎
15:42
|
Или СпрЦеныНоменклатуры.ИспользоватьВладельца(СпрНоменклатура.Текущийэлемент());
|
|||
12
LegO
07.12.12
✎
15:42
|
Вот тут на примере можешь увидеть разницу:
|
|||
13
LegO
07.12.12
✎
15:42
|
спр = СоздатьОбъект("Справочник.ТехОперации");
спр.ПорядокКодов(); спр.ВыбратьЭлементы(); ТекЭл = спр.ТекущийЭлемент(); Сообщить(спр.Наименование); спр.Наименование = "Новое наименование"; Сообщить("++++++++++++++++"); Сообщить(спр.Наименование); Сообщить(ТекЭл.Наименование); спр.Записать(); Сообщить("++++++++++++++++"); Сообщить(спр.Наименование); Сообщить(ТекЭл.Наименование); |
|||
14
НЕА123
07.12.12
✎
15:42
|
(6)
если нужно на ссылку на элемент(не на выборку), тот да. еще к (5). цена = СпрЦеныНоменклатуры.ТекущийЭлемент().ТипЦен цена = СпрЦеныНоменклатуры.ТипЦен во втором случае делается кэш объекта. |
|||
15
Double_Medved
07.12.12
✎
15:48
|
А если
Эл = СпрЦеныНоменклатуры.ТекущийЭлемент(); То потом Эл.Записать(); Сработает? |
|||
16
НЕА123
07.12.12
✎
15:48
|
(14)+
эээ... это только в контексте (0)! если касается объекта, то в первом случае значение из базы, во втором из объекта. |
|||
17
Double_Medved
07.12.12
✎
15:49
|
То есть если я хочу запомнить найденный элемент справочника в переборе и пойти дальше - то так получится?
|
|||
18
НЕА123
07.12.12
✎
15:50
|
(17)
да. про Записать() уже не помню. |
|||
19
Double_Medved
07.12.12
✎
15:50
|
Пока (СпрЦеныНоменклатуры.ПолучитьЭлемент() = 1) Цикл
Если СпрЦеныНоменклатуры.ТекущийЭлемент().ТипЦен = ТипЦены.БазовыйТипЦен Тогда ЕстьБазовыйтипЦен = 1; Эл = СпрЦеныНоменклатуры.ТекущийЭлемент(); //тут просто необходимо КонецЕсли; КонецЦикла; Потом я же могу работать с Эл? Это будет объект? Его можно будет сохранять и менять? Извините, я понимаю что вопрос простой, но я что-то запутался, пятница |
|||
20
Double_Medved
07.12.12
✎
15:52
|
HEA123, спасибо, мне как раз надо найти в переборе 2 разных элемента справочника, отвечающих 2-м разным условиям, и я хочу из отдельно запомнить, перебрав справочник только 1 раз.
|
|||
21
Cthulhu
07.12.12
✎
15:55
|
(15): нет.
(17): да. |
|||
22
Double_Medved
07.12.12
✎
15:58
|
А почему (15) не сработает? То есть допустим я запомнил элемент справочника Эл = СпрЦеныНоменклатуры.ТекущийЭлемент() и пошел дальше искать по циклу другой элемент. Как мне потом работать с Эл? Что-то типа СпрЦеныНоменклатуры.НайтиПоКоду(Эл.Код)?
|
|||
23
ADirks
07.12.12
✎
16:40
|
(22) СпрЦеныНоменклатуры.НайтиЭлемент(Эл)
твоё СпрЦеныНоменклатуры - это выборка, её можно перепозиционировать, и через неё записывать инфу в базу. .ТекущийЭлемент() - это ссылка на объект в базе, с ней особо ничего не сделаешь. |
|||
24
Cthulhu
07.12.12
✎
22:03
|
(22): потому что Эл - это ссылка на объект данных. это все равно, как если бы ты, например, пылался овинтить крышку у бутылки на фотографии.
|
|||
25
Torquader
07.12.12
✎
23:32
|
В семёрке также есть объекты и ссылки, только объект может позиционироваться на разных элементах.
Ссылка же является просто "номером" объекта в базе данных. Когда мы к ней применяем запрос какого-то реквизита, то создаётся временный объект доступа - достаются данные и объект доступа разрушается. Чтобы каждый раз не выполнять создание объекта - выполняется кеширование, которое при втором запросе данных выдаёт их из памяти - это достаточно тонкие грабли, и желательно на них не наступать, так как кеширование работает не всегда корректно. Кроме того, есть объект формы, то есть текущего документа, который нельзя спозиционировать, но можно менять все свойства. В отличие от восьмёрки, он от формы не отделим. Поэтому, ТекущийОбъект() нужно писать, если мы хотим передать "номер" самого объекта, а не его содержимое. Дело в том, что у Объекта, который используется для позиционирования, номера нет - так как он зависит от позиции - это тоже достаточно странное поведение программы (даже во внутреннее представление она преобразует объект неспозиционированным). |
|||
26
Torquader
07.12.12
✎
23:39
|
P.S.
Что касается применимости присвоения к ссылке, то если обсуждать его строго, то происходит следующее: Мы выполняем Спр.Наименование="Вася", где Спр=...ТекущийЭлемент(); Перед присвоением создаётся объект - уже спозиционированный на нужном значении и запрашивается значение - в отличие от обычного объекта создаётся упрощённый объект для запроса только нужных данных. Потом для этого объекта выполняется присвоение - поэтому оно происходит без ошибок. Перед переходом на следующую строку объект разрушается - и вся присвоенная информация теряется. Соответственно, выполнить запись также нельзя. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |