Вход | Регистрация

1С:Предприятие ::

Метки:

Технология клиент-сервер в 1С 8.0

Я
   Наташа
28.07.04 - 16:31
Стоит задача оптимизировать расчеты в базе 1С 8.0 с помощью клиент-серверной технологии. Установили сервер 8.0. При конструкции Если Клиент Тогда КонецЕсли все работает, программа выполяет заключенные внутри конструкции процедуры. Все что внутри Если Сервер Тогда КонецЕсли не выполняется. Как можно вынести скажем процедуру которая что-то считает на сервер и ее результат увидеть на клиенте?
 
 
   Волшебник
 
1 - 28.07.04 - 16:33
Приведи код процедуры.
   Наташа
2 - 28.07.04 - 16:50
Пока я только упражняюсь :) К примере в модуле приложения объявляю переменную Н экспортной. В общем модуле пишу
Процедура Сообщение() Экспорт
#Если Сервер Тогда

     Н = 2*2;    
#КонецЕсли     
КонецПроцедуры
Потом в модуле документа вставляю кнопку к которой привязана процедура

Процедура ОсновныеДействияФормыДействие1(Кнопка)
        Сообщение();
        Сообщить("Н="+Н);    
КонецПроцедуры

В итоге при нажатии на кнопку в этом документе вижу
Н=
и все. А не Н=4
Хотелось бы принцип понять, как можно пользоваться конструкцией Если Сервер Тогда КонецЕсли
   Волшебник
 
3 - 28.07.04 - 16:58
Оформите объявление переменной в такие же директивы "#Если Сервер Тогда".
   Наташа
4 - 28.07.04 - 17:07
Сделала. В модуле приложения пишу
#Если Сервер Тогда
Перем Н Экспорт;
#КонецЕсли
Теперь при попытке открыть документ с кнопкой или создать новый выдается ошибка
{Документ.ОприходованиеТоваров.Форма.ФормаДокумента(659,18)}: Переменная не определена (Н)
           Сообщить("Н="+<<?>>Н);
   Волшебник
 
5 - 28.07.04 - 17:15
Ты хочешь на клиенте использовать переменную, которая физически существует на сервере?
   Наташа
6 - 28.07.04 - 17:20
А что надо делать если я хочу что-то рассчитать на сервере а результат увидеть на клиенте? К сожелению не нашла на диске ИТС ни одного примера использования конструкции Если Сервер Тогда КонецЕсли. Только Если Клиент Тогда КонецЕсли видела.
  
7 - 28.07.04 - 17:27
(2) Обращаю внимание:

"Если блок #Если Сервер тогда ... #КонецЕсли включает только часть процедуры, то процедура будет присутствовать как на стороне клиента, так и на стороне сервера. Только на клиенстской стороне она будет без той части, которая заключена в блок, поэтому результат выполнения процедуры может зависеть от того, где обрабатывается вызов этой процедуры". (Описание встроенного языка, т.1, с.1-40).

Поэтому для гарантии хорошо бы заключить в блок условной компиляции ВСЮ процедуру.
   Волшебник
 
8 - 28.07.04 - 17:30
(6) Нужно оформить всю процедуру/функцию в директивы #Если Сервер Тогда и вызывать ее на клиенте. Вызов будет переадресован на сервер.

У общих модулей есть еще флаг-свойство "Сервер". При его установке модуль будет присутствовать на сервере 1С:Предприятия 8.0.
   Наташа
9 - 28.07.04 - 17:36
(Описание встроенного языка, т.1, с.1-40). Читала. Включала всю процедуру т е писала в общем модуле
#Если Сервер Тогда
Процедура Сообщение() Экспорт
     Н = 2*2;         
 КонецПроцедуры
#КонецЕсли
При этом при попытке открыть документ с кнопкой или создать новый получаю сразу 2 ошибки
{Документ.ОприходованиеТоваров.Форма.ФормаДокумента(659,18)}: Переменная не определена (Н)
           Сообщить("Н="+<<?>>Н);
{Документ.ОприходованиеТоваров.Форма.ФормаДокумента(658,3)}: Процедура или функция с указанным именем не определена (Сообщение)
       <<?>>Сообщение();
Я понимаю что это из-за того что нахожусь на клиентской стороне. Вопрос в том как можно что-то сделать на серверной стороне и воспользоваться результатами?
  
10 - 28.07.04 - 17:53
(2) Вначале не заметил.
"...в модуле приложения объявляю переменную Н экспортной". Но общий модуль не видит экспорта из модуля приложения. В выражении Н = 2*2 процедуры общего модуля переменная Н создается неявно как локальная переменная процедуры. Тут как ни крути - в таком варианте работать не будет. Передай переменную через параметр.
 
  Рекламное место пустует
   Наташа
11 - 28.07.04 - 17:53
Большое спасибо! Про галочку общего модуля я и забыла! Все получилось!
   Волшебник
 
12 - 28.07.04 - 17:56
Расположи процедуру или функцию в общем модуле и поставь у него флаг "Сервер". Флаг "Клиент" можно снять.
   Наташа
13 - 28.07.04 - 17:57
Про модуль приложения я уже поняла :) Передала через параметр.
   Наташа
14 - 28.07.04 - 17:58
Так и сделала. Расположила в общем модуле и поставила флаг сервер. Еще раз спасибо.
  
15 - 28.07.04 - 17:58
(9) А вторая ошибка, сдается мне, из-за того, что обращение к процедуре, компилируемой на сервере, происходит из модуля формы. Попробуй из модуля документа (впрочем, не уверен).
   Наташа
16 - 28.07.04 - 18:01
Нет, теперь и из модуля формы получилось. Н=4 пишет.


Список тем форума
Рекламное место пустует   Рекламное место пустует
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует