Имя: Пароль:
1C
 
как обратиться к элементам массива в другой процедуре?
0 Parti
 
22.09.09
09:20
Перем МассивЗначений

Процедура ПриОткрытии()
МассивЗначений = Новый Массив(2);
МассивЗначений.Установить(0, "первый");
МассивЗначений.Установить(1, "второй");
МассивЗначений.Установить(2, "третий");
КонецПроцедуры;

Процедура ПриЗакрытии()
Сообщить(МассивЗначений[1]);
КонецПроцедуры

___

Что я делаю не так? Во второй процедуре результат - неопределенно.
1 Ненавижу 1С
 
гуру
22.09.09
09:23
Как ты их вызываешь? порядок
что это за модуль?
нет ли реквизитов формы или объекта таких?
где еще идет речь о этой переменной?
почему декларирование переменное не кончилось? скрываешь
2 Ursus maritimus
 
22.09.09
09:24
Афигеть. в таком код 4 ошибки тоько на первый взгляд
3 Ненавижу 1С
 
гуру
22.09.09
09:25
Почему Установить, а не добавить?
4 Sakura
 
22.09.09
09:26
А модуль чего это? В смысле, какой?
З.Ы. а тебе компилятор ничего странного не сообщает? ;)
5 Ursus maritimus
 
22.09.09
09:26
Примерно так:

Перем МассивЗначений;

Процедура ПриОткрытии()
МассивЗначений = Новый Массив(3);
МассивЗначений.Установить(0, "первый");
МассивЗначений.Установить(1, "второй");
МассивЗначений.Установить(2, "третий");
КонецПроцедуры

Процедура ПриЗакрытии()
Сообщить(МассивЗначений[1]);
КонецПроцедуры

И глваное назначить процедуры событиям
6 Parti
 
22.09.09
09:29
(4) это модуль формы справочника. Нужно "запомнить" значения реквизитов при открытии и при закрытии формы. Соответсвенно, нужно в обработчике приЗакрытии() сравнивать данные, полученные в ПриОткрытии() формы.
Компилятор мне  сообщает, что значение неопределенно
7 Ненавижу 1С
 
гуру
22.09.09
09:30
(6) поменяй установить на добавить
8 Parti
 
22.09.09
09:30
+6 почему я не могу получить доступ к элементам массива, ведь я объявил его переменной
9 Sakura
 
22.09.09
09:32
как минимум, потому, что у тебя объявление массива не завершено :)
10 Sakura
 
22.09.09
09:32
З.Ы. отладчик тебе поможет :)
11 Ursus maritimus
 
22.09.09
09:32
(8) Читай (5) последнюю строку. Много думай. У тебя процедура ПриОткрытии()  не вызывается
12 Ненавижу 1С
 
гуру
22.09.09
09:32
(8) сделай (7)
13 Parti
 
22.09.09
09:36
вот полный текст(модульФормыСправочника):

Процедура ПриОткрытии()
       СчРеквизитов =0;
Спр = Справочники.Материалы.ПолучитьСсылку();
Для каждого реквизитСпр из Спр.Метаданные().Реквизиты Цикл
   СчРеквизиотов = СчРеквизитов+1;
   РеквизитПриОткрытии = Новый Массив(10);
   РеквизитПриОткрытии.Добавить( реквизитСпр);
    //Сообщить(РеквизитПриОткрытии[счРеквизитов])
   КонецЦикла;
       
КонецПроцедуры


Процедура ПриЗакрытии()
Сообщить(РеквизитПриОткрытии[2]);

КонецПроцедуры
14 Parti
 
22.09.09
09:38
+13 отладчик говорит, что РеквизитПриОткрытии[2]  -тип:неопределенно
15 Mikeware
 
22.09.09
09:38
"Parti" - это диагноз.
16 Parti
 
22.09.09
09:40
(15)возможно. так что с (13)не так?
17 Andry888
 
22.09.09
09:41
(13) в цикле массив создаешь 10 раз...
18 Mikeware
 
22.09.09
09:41
(16) Ты про область видимости переменных слыхал?
19 Ненавижу 1С
 
гуру
22.09.09
09:42
(16) события вызываются?
что отладчик говорит?
вообще у тебя массив в цикле, постоянно пересоздается и добавляешь ты 11 элемент
код просто ЖО
20 Sakura
 
22.09.09
09:43
(13) спасибо, хорошее настроение на все утро обеспечено :)
21 Ненавижу 1С
 
гуру
22.09.09
09:44
год рождения порадовал
ты программировать умеешь или так?
22 Parti
 
22.09.09
09:47
ну млин, ошибься, с кем не бывает.=)
пусть будет так:



Процедура ПриОткрытии()
       СчРеквизитов =0;
Спр = Справочники.Материалы.ПолучитьСсылку();
РеквизитПриОткрытии = Новый Массив(10);
Для каждого реквизитСпр из Спр.Метаданные().Реквизиты Цикл
   СчРеквизиотов = СчРеквизитов+1;
   РеквизитПриОткрытии[счРеквизитов]= реквизитСпр;
    //Сообщить(РеквизитПриОткрытии[счРеквизитов])

   КонецЦикла;
       
КонецПроцедуры


__
все равно не видится переменная.

(18) Перем РеквизитПриОткрытии - оно?
23 Sakura
 
22.09.09
09:48
(22) а где у тебя объявление собственно переменной РеквизитПриОткрытии? Сейчас она у тебя существует только внутри процедуры ПриОткрытии()
24 Parti
 
22.09.09
09:49
Перем РеквизитПриОткрытии;

Процедура ПриОткрытии()
       СчРеквизитов =0;
Спр = Справочники.Материалы.ПолучитьСсылку();
Для каждого реквизитСпр из Спр.Метаданные().Реквизиты Цикл
   СчРеквизиотов = СчРеквизитов+1;
   РеквизитПриОткрытии = Новый Массив(10);
   РеквизитПриОткрытии.Добавить( реквизитСпр);
    //Сообщить(РеквизитПриОткрытии[счРеквизитов])

   КонецЦикла;
       
КонецПроцедуры


Процедура ПриЗакрытии()
Сообщить(РеквизитПриОткрытии[2]);

КонецПроцедуры

все равно не определяется
25 Parti
 
22.09.09
09:50
т.е.

Перем РеквизитПриОткрытии;

Процедура ПриОткрытии()
       СчРеквизитов =0;
Спр = Справочники.Материалы.ПолучитьСсылку();
РеквизитПриОткрытии = Новый Массив(10);
Для каждого реквизитСпр из Спр.Метаданные().Реквизиты Цикл
   СчРеквизиотов = СчРеквизитов+1;
   РеквизитПриОткрытии[счРеквизитов]= реквизитСпр;
    //Сообщить(РеквизитПриОткрытии[счРеквизитов])


   КонецЦикла;
       
КонецПроцедуры

Процедура ПриЗакрытии()
Сообщить(РеквизитПриОткрытии[2]);

КонецПроцедуры
26 Andry888
 
22.09.09
09:50
(24) Для каждого реквизитСпр из Спр.Метаданные().Реквизиты Цикл
     СчРеквизиотов = СчРеквизитов+1;
    !!!!!!!!!!!!!!РеквизитПриОткрытии = Новый Массив(10);!!!!!!!!!!!!
27 Parti
 
22.09.09
09:52
(26) да знаю я, знаю. просто скопипастил со страницы не с того места. см(25)
28 Ненавижу 1С
 
гуру
22.09.09
09:54
(27) события привязаны? отрабатывают?
29 Parti
 
22.09.09
09:55
(27)т.е. привязаны? События привязаны к форме
30 Sakura
 
22.09.09
09:55
(25) это копипаст?

Для каждого реквизитСпр из Спр.Метаданные().Реквизиты Цикл
   СчРеквизиотов = СчРеквизитов+1;!!!
   РеквизитПриОткрытии[счРеквизитов]= реквизитСпр;

отладчиком проверь значение счРеквизитов, если у тебя так в коде, то оно не меняется

З.Ы. вот за это и не люблю одинэску, что один раз опечатаешься в имени переменной при присваивании ей значения, а она это за новую переменную примет и не ничего не скажет... ищу потом, где косяк)
31 Ненавижу 1С
 
гуру
22.09.09
09:59
закрывай конфигуратор и беги оттуда
32 Parti
 
22.09.09
10:00
(30) Я люблю тебя!!!
СчРеквизиотов <> СчРеквизитов


зы. сорри ту эл
33 Sakura
 
22.09.09
10:02
(32) не надо меня любить ))
надо внимательнее код проверять и отладчиком пользоваться :)

З.Ы. спасибо за позитив с утра ))
34 Parti
 
22.09.09
10:35
сорри, но:

Для каждого реквизитСпр из Спр.Метаданные().Реквизиты Цикл
   СчРеквизитов = СчРеквизитов+1;
       РеквизитПриОткрытии[счРеквизитов] =Ссылка.реквизитСпр;// Ошибка - поле объекта не обнаружено
    Сообщить(РеквизитПриОткрытии[счРеквизитов])
   КонецЦикла;

__

как получить значение реквизита для текущего элемента? Если я знаю элемент(Ссылка), знаю имя реквизита(РеквизитСпр)
35 Ненавижу 1С
 
гуру
22.09.09
10:36
Ссылка[ИмяРеквизита]
36 Parti
 
22.09.09
10:38
Ошибка:
Получение элемента по индексу для значения не определено
       РеквизитПриОткрытии[счРеквизитов] =Ссылка[реквизитСпр];
37 Ненавижу 1С
 
гуру
22.09.09
10:39
(36)
Ссылка[реквизитСпр.Имя]
38 Parti
 
22.09.09
10:39
(37) спс! Тебя я тоже люблю!
39 Ненавижу 1С
 
гуру
22.09.09
10:40
(38) пошел вон, я не такой
40 Sakura
 
22.09.09
10:42
(38) что-то ты очень уж любвеобильный сегодня... к чему бы это..))
41 lxs
 
22.09.09
10:47
(39) )))))))))))))) 5 баллов ))
(40) осеннее обострение
42 Sakura
 
22.09.09
10:50
(41) на весеннее больше похоже ))
43 lxs
 
22.09.09
10:54
+(42) угу, запоздалое..
44 Sakura
 
22.09.09
10:55
(43) настоящему коту и в декабре март :)