Имя: Пароль:
1C
1С v8
Доступность общей переменное при использовании "&НаСервере"
,
0 Nikolasnik
 
18.12.13
11:11
Пытаюсь начать разбираться в Восьмерке..
столкнулся с не пониманием, как правильно получить доступ к переменной "Проверка" в процедуре "ЗагрузитьНаСервере()"
на форме две кнопки сначала обрабатывается процедура "Коннект()" потом по кнопке "два" - "Загрузить()"
&НаСервере
перем Проверка;

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

&НаКлиенте
Процедура Загрузить(Команда)
    ЗагрузитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура КоннектНаСервере()
    // Вставить содержимое обработчика.
    Проверка="Переменная доступна";
    Сообщить(""+Проверка+" КоннектНаСервере()");
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере()
    // Вставить содержимое обработчика.
    Сообщить(""+Проверка+" ЗагрузитьНаСервере() ");
КонецПроцедуры
1 Ненавижу 1С
 
гуру
18.12.13
11:13
(0) сделать эту переменную в модуле объекта (фактически членом объекта), а не формы
2 acsent
 
18.12.13
11:14
На сервере не хранятся переменные. Каждый раз при переходе в клиент переменная будет сбрасываться
3 Defender aka LINN
 
18.12.13
11:14
(1) Нуну.
(0) Надо - делай реквизит формы. Но лучше перед этим как следует подумать.
4 Ненавижу 1С
 
гуру
18.12.13
11:16
(3) что ну-ну?
5 Nikolasnik
 
18.12.13
11:29
(3) "(0) Надо - делай реквизит формы. Но лучше перед этим как следует подумать."
Дело в том что эта переменная должна быть ОЛЕ объектом 7.7 базы.. Подскажите как правильно организоваться что бы можно было сначала приконектится (присвоить переменной значение) а потом ёе использовать, при нажатии других кнопок..

Или придется постоянно коннектится -получить инфу - закрывать коннект.. и так постоянно?
6 Defender aka LINN
 
18.12.13
11:32
(5) Можно в временное хранилище складывать. Будет жить ~20 минут.
(4) А то, бля, что ничего не выйдет © Самолетом, поездом, автомобилем
7 Darth Anyan
 
18.12.13
11:33
(5) Если соединение должно жить ровно столько же, сколько форма - то его можно хранить во временном хранилище (см. в СП ПоместитьВоВременноеХранилище)
8 Nikolasnik
 
18.12.13
12:13
(7)С если передаю НЕ Оле объект - строку, работает с ОЛЕ объектом -ругается:
Форма.Форма.Форма(68)}: Ошибка при вызове метода контекста (ПоместитьВоВременноеХранилище)
    ОлеАдрес=ПоместитьВоВременноеХранилище(V7,ОлеАдрес);
по причине:
Переданное значение не может быть помещено во временное хранилище
Привожу полный код:
&НаСервере
Функция ПодключитьБазу(ТекПутьКБазе="",ТекПользователь="",ТекПароль="") Экспорт
    V7="";
    V7=Новый COMObject("V1CEnterprise.Application");
    Попытка  
        strApp = "/D"""+ТекПутьКБазе+""" /N"""+ТекПользователь+""" /P"""+ТекПароль+"""";
        Открыта=V7.Initialize(V7.RMTrade,strApp,"NO_SPLASH_SHOW");
        Если Открыта Тогда
            ТекстБазы = "Подключена база " + ТекПутьКБазе + " под пользователем " + ТекПользователь;
            Сообщить(""+ТекстБазы+" Подключено");
        Иначе
            ТекстБазы = "Ошибка подключения к базе " + ТекПутьКБазе  + " под пользователем " + ТекПользователь;
            Сообщить(""+ТекстБазы+" Не получилось подключиться");
        КонецЕсли;    
    Исключение
        ТекстБазы = "Ошибка подключения к базе " + ТекПутьКБазе  + " под пользователем " + ТекПользователь;
        Сообщить(""+ТекстБазы+" Не получилось подключиться");
    КонецПопытки;
    Возврат V7;
КонецФункции
&НаКлиенте
Процедура Коннект(Команда)
    // Вставить содержимое обработчика.
    КоннектНаСервере("D:\1c8\1С77\ростов_бухгалтерия_2012\ростов_бухгалтерия_2012\","Шаповалов_Николай","210876");
КонецПроцедуры
&НаСервере
Процедура КоннектНаСервере(ИмяКаталогаДанных,вхПользователь,вхПароль)
    // Вставить содержимое обработчика.
    //Сообщить("Начал");
    V7=ПодключитьБазу(ИмяКаталогаДанных,вхПользователь,вхПароль);
    ОлеАдрес=ПоместитьВоВременноеХранилище(V7,ОлеАдрес);
    Сообщить(ОлеАдрес);
КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
    ЗагрузитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере()
    // Вставить содержимое обработчика.
    Сообщить(ОлеАдрес);
    V7=ПолучитьИзВременногоХранилища(ОлеАдрес);
    Для Номер=1 по V7.Метаданные.Константа() Цикл
        Идентификатор=V7.Метаданные.Константа(Номер).Идентификатор;
        Сообщить(Идентификатор);
    КонецЦикла;
КонецПроцедуры

Подскажите как правильно организовать работу с ОЛЕ объектом?
9 Defender aka LINN
 
18.12.13
12:21
(8) Платформа какая? в 8.3, кажись, закрыли лазейку, сволочи
10 Nikolasnik
 
18.12.13
12:31
(9) 8.3 так точно!
Т.о. не получится подключиться пока форма открытая, и получать данные с ОЛЕ объекта..

Только остался такой алгоритм действий: подключился-> взял данные-> отключился..
если снова чего-то надо, опять подключаться?
11 Rovan
 
гуру
18.12.13
12:35
(10) зачем тебе ОЛЕ на сервере ?
12 Ork
 
18.12.13
12:35
(10) Были рекомендации - сначала спросить за все, что нужно - потом уйти на сервер, там сделать ФсемФсе - результат выполнено/не выполнено вернуть на клиента.
13 Salimbek
 
18.12.13
12:43
(11) Поддерживаю вопрос. Типа а че там 1С-ка просто сидит, пусть еще и тяжелые штуки за собой потаскает?
14 ДенисЧ
 
18.12.13
12:47
(11) Оли разные нужны, оли разные важны. Например, соединение по оледб.
15 Nikolasnik
 
18.12.13
12:47
(11) (13) Да вот это наверное главный вопрос.. и ответ на него - НЕЗАЧЕМ!
сделал все через "&НаКлиенте"..

ВСЕМ большое спасибо за помощь!! разобрался и узнал новое.
СПАСИБО!
16 Salimbek
 
18.12.13
12:49
(14) Тогда, наверное, весело будет, если серверный процесс упадет из-за падения или некорректного ответа этой оли
17 ДенисЧ
 
18.12.13
12:52
(16) А с чего бы ему падать, если обработку ошибок правильно сделать?
18 Salimbek
 
18.12.13
13:42
(17) Типа у ОЛЕ 1С 7.7 при отваливании сетевого интерфейса будет нормальное завершение работы? Или она напишет ошибку и будет так висеть бесконечно?