Имя: Пароль:
1C
1С v8
Как сделать доступной переменную одной процедуры в другой
0 Дарья_92
 
08.11.13
18:14
//Объявила переменную
Перем СсылкаНаОбъект Экспорт;
//Первая процедура
Процедура ПриКопировании(ОбъектКопирования)
    
    мСкопирован = Истина;
    мОбъектКопирования =  ОбъектКопирования;    
    СсылкаНаОбъект = ОбъектКопирования.Ссылка;
    
КонецПроцедуры

//Последующие процедуры
Процедура ПриЗаписи(Отказ)
    
    КопированиеНаСервере();
    
КонецПроцедуры

Процедура КопированиеНаСервере()
    
    Сообщить(СсылкаНаОбъект ); // Вот тут значение пустое

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

Все действия происходят в модуле объекта справочника.
Помогите, пожалуйста!
1 godmod80
 
08.11.13
18:17
фото конечно хорошее..
2 Жан Пердежон
 
08.11.13
18:19
передавай в параметре
3 NeZar
 
08.11.13
18:20
СсылкаНаОбъект = ОбъектКопирования.Ссылка;

Скорее всего, не присваивается. Задействуйте дебаггер
4 Жан Пердежон
 
08.11.13
18:20
при серверных вызовах переменные модуля заново инициализируются
5 godmod80
 
08.11.13
18:21
Процедура КопированиеНаСервере(ххх)  - тут должен быть аргумент функции
6 Зойч
 
08.11.13
18:23
наверняка упр формы
7 Дарья_92
 
08.11.13
18:36
(3) Присваивается, отладчиком проверяла.
(5) Простите, функции?
(4) Не могли бы Вы на примере показать?
8 Classic
 
08.11.13
18:38
(7)
Процедура ПриЗаписи(Отказ)
    
    КопированиеНаСервере(СсылкаНаОбъект);
    
КонецПроцедуры

Процедура КопированиеНаСервере(СсылкаСообщить)
    
    Сообщить(СсылкаСообщить); // Вот тут значение пустое

КонецПроцедуры
9 Дарья_92
 
08.11.13
18:47
(8) Попробовала, все равно выводит пусто!
10 Дарья_92
 
08.11.13
19:10
В принципе эта переменная остается доступной только в рамках процедуры ПриКопировании. Понимаю, что что-то упустила, но не могу понять, что
11 ilkoder
 
08.11.13
19:15
Процедура ПриКопировании(ОбъектКопирования, СсылкаНаОбъект)
    
    мСкопирован = Истина;
    мОбъектКопирования =  ОбъектКопирования;    
    СсылкаНаОбъект = ОбъектКопирования.Ссылка;
    
КонецПроцедуры

В модулях не может быть переменных модуля
12 Classic
 
08.11.13
19:22
(11)
Чё?
13 Дарья_92
 
08.11.13
19:33
(11) Нет, и так не получается...заколдованная переменная
14 ilkoder
 
08.11.13
19:35
чего-то я туплю в тяпницу вечером...
15 welwel
 
08.11.13
20:01
(0) а если вместо переменной использовать реквизит
16 sapphire
 
08.11.13
20:03
Доп свойства не предлагать?
17 sapphire
 
08.11.13
20:04
(15) лишнее, ИМХО
18 Дарья_92
 
08.11.13
20:13
(15) даже попробовала реквизит...не выходит!
19 sapphire
 
08.11.13
20:14
(18) ДополнительныеСвойства пробовала {мануально :)) }?
20 av_x86
 
08.11.13
20:16
21 фобка
 
08.11.13
20:17
(18) реквизитом выйдет, только обращайся через ЭтотОбъект.ИмяРека
можно задать переменную в общем модуле ( как раз со словом экспорт)
22 sapphire
 
08.11.13
20:18
//Объявила переменную

Перем СсылкаНаОбъект Экспорт;
//Первая процедура

Процедура ПриКопировании(ОбъектКопирования)
    
    мСкопирован = Истина;
    мОбъектКопирования =  ОбъектКопирования;    
    СсылкаНаОбъект = ОбъектКопирования.Ссылка;
    ДополнительныеСвойства.Вставить("ОбъектКопирования",ОбъектКопирования.Ссылка);

ДополнительныеСвойства.Вставить("Скопирован",Истина);


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

//Последующие процедуры

Процедура ПриЗаписи(Отказ)
    
    КопированиеНаСервере();
    
КонецПроцедуры

Процедура КопированиеНаСервере()
    
    //Сообщить(СсылкаНаОбъект ); // Вот тут значение пустое
    Если ДополнистельныеСвойства.Свойство("Скопирован") Тогда
      Сообщить(ДополнистельныеСвойства.ОбъектКопирования);
КонецЕсли;
КонецПроцедуры
23 sapphire
 
08.11.13
20:19
(21) Глупость
24 Жан Пердежон
 
08.11.13
20:20
Процедура ПриКопировании(ОбъектКопирования)
    
    ДополнительныеСвойства.Вставить("ОбъектКопирования", ОбъектКопирования.Ссылка);
    
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
    
Если ДополнительныеСвойства.Свойство("ОбъектКопирования") тогда
    Сообщить(ДополнительныеСвойства.ОбъектКопирования);
КонецЕсли;
    
КонецПроцедуры
25 Дарья_92
 
08.11.13
20:27
(22) (24) Условие не проходит. Раньше сообщение выдавалось, но было пустым, а сейчас в принципе не выдается. Значит условие не проходит!
26 sapphire
 
08.11.13
20:28
(24) Сокращенная копипаста :) Можно и так
27 Славен
 
08.11.13
20:33
да скорее всего используется переменная с тем же именем что и реквизит, особо забавно если тип у них разный
28 sapphire
 
08.11.13
20:34
(25) В модуле формы ПриСозданииНаСервере проверь доп свойства объекта. В принципе, при вызове формы так и будет.
И вот почему. Если, копирование вызвано из формы, то объект создается, вызывается его модуль, после чего данные передаются форме. Но. Форма - это реализация шаблона ООП Representer, т.е. мы работаем уже не с самим объектом, а его представлением и данные на момент записи уже, простите, херятся, но, опять же при создании на сервере данные еще есть.
Так что, в перед записью из формы можно передать свойства обратно.
29 sapphire
 
08.11.13
20:35
+(28) Под данными кои херятся имеется ввиду переменные и доп свойства модуля объекта.
30 Дарья_92
 
08.11.13
20:36
Процедура ПриКопировании(ОбъектКопирования)
    
    мСкопирован = Истина;
    мОбъектКопирования =  ОбъектКопирования;
        
СохранитьЗначение("МойСклад", ОбъектКопирования.Ссылка);
            
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
    
    КопированиеНаСервере();
    
КонецПроцедуры

Процедура КопированиеНаСервере()
    
     ДефСклад = ВосстановитьЗначение("МойСклад");

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


Всем большое спасибо за отклики!!! Вот как заработало)))
31 banco
 
08.11.13
20:38
(30)  а можно узнать зачем вам в ПриЗаписи ссылка на ОбъектКопирования?
32 Жан Пердежон
 
08.11.13
20:38
(30) не показывай никому этот код
33 sapphire
 
08.11.13
20:38
(30)Боже тебя упаси от такой реализации!!!
34 sapphire
 
08.11.13
20:39
(30) Для нового документа будет сообщать старое значение склада. Включи мозг, если он есть.
35 mrDSide
 
09.11.13
00:25
(0) возможно было бы неплохо сделать следующее:

1.перекраситься(но не факт);
2.в модуле объекта (это в самом низу, где будет пространство имен объекта, а не какой-нибудь процедуры модуля...) сделать следующее:

СсылкаНаОбъект=...здесь должен быть текст;

П.С. извините за грубость, день тяжелый.
36 User_Agronom
 
09.11.13
00:35
(21) переменная в общем модуле не взлетит.
37 miron25
 
09.11.13
07:14
(0)Как же событие возникнет и тебе сообщит???

Процедура КопированиеНаСервере()
    
    Сообщить(СсылкаНаОбъект ); // Вот тут значение пустое


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

Если событие при записи еще не возникло..а оно возникает после  закрытия кнопочки ЗаписатьИзакрыть..То есть Вот тут значение пустое будет полным,после закрытия формы...оно даже успевает показать сообщение.То есть код в нулевом посту правильный.Хотя ДефСклад = ВосстановитьЗначение("МойСклад") тоже хорошо смотрится.
38 hhhh
 
09.11.13
10:12
(0) может так лучше?

Процедура ПриЗаписи(Отказ)
    
    
    Сообщить(СсылкаНаОбъект ); // Вот тут значение пустое


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

при записи оно и так на сервере
39 av_x86
 
09.11.13
11:07
(38) Может лучше проверить? И убедиться что не прокатывает.
40 Dzenn
 
гуру
09.11.13
13:20
С такими ээээээээ..... глазами нет смысла идти в программисты ;-)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший