Имя: Пароль:
1C
1С v8
процедура на клиенте и на сервере
,
0 qeos
 
06.03.12
11:02
как сделать так чтобы одна и та же процедура по моему требованию вызывалась либо на сервере либо на клиенте? т.е. там где я хочу.

Пробую вот сделать процедуру с директивой определяемую в общем модуле с галками "клиент" и "сервер"

&НаКлиентеНаСервере
Функция текстируем() экспорт
   Стр = "";
   #Если НаКлиенте Тогда
       Стр = "На клиенте";
   #ИначеЕсли НаСервере Тогда
       Стр = "На сервере";
   #КонецЕсли
   
   УправлениеСообщениями.СообщениеПользователю("Контекст выполнения: "+Стр,3);
КонецФункции


Но, в форме код

&НаКлиенте
Процедура ПроверкаКонтекста(Команда)
   ОбщиеФункции.текстируем();
КонецПроцедуры

выполняется с ошибкой. как правильно-то?
1 DexterMorgan
 
06.03.12
11:04
(0) имхо, тока две разные функции..
2 qeos
 
06.03.12
11:07
(1) а как же директива &НаКлиентеНаСервере ?? она судя по описанию как раз для того что мне надо...
3 andrewks
 
06.03.12
11:07
галка "Клиент (упр)" стоит?
4 qeos
 
06.03.12
11:08
(3) да
5 vmv
 
06.03.12
11:10
(0)

1. прочти в СП области использования директив НаКлиенте, НаКлиентеНаСервере

2. запомни, что директива НаКлиенте означает видимость скомпиленного блока кода только на клиенте, НаСервере - только на сервере.

без этого все попытки ваять - глупы
6 andrewks
 
06.03.12
11:12
может, так?

#Если НаКлиенте Тогда

&НаКлиенте
Функция текстируем() экспорт
       Стр = "На клиенте";
 
   УправлениеСообщениями.СообщениеПользователю("Контекст выполнения: "+Стр,3);
КонецФункции

#ИначеЕсли НаСервере Тогда
&НаСервере
Функция текстируем() экспорт
       Стр = "На сервере";
 
   УправлениеСообщениями.СообщениеПользователю("Контекст выполнения: "+Стр,3);
КонецФункции

#КонецЕсли
7 qeos
 
06.03.12
11:13
(5) ну я конечно еще раз почитаю...

Но ошибка то и выдается о том что метод не найден... т.е. директива говорит о доступности на клиенте, а при выполнении не доступна? чтото тут тёмно..

http://my.jetscreenshot.com/5394/20120306-5els-22kb.jpg
8 qeos
 
06.03.12
11:14
(6) ну так-то понятно.. возможно и будет работать, но у меня несколько процедур и не из 2-3-х строк.. и что мне их все копипастить?
9 vmv
 
06.03.12
11:15
я думаю еще года два будут ломать копья, соблазняясь желанием заставить сервер вилять ногами как дворовая девка на подворье и кричать барину сообщения "я здеся и тута, еще шажок"
10 andrewks
 
06.03.12
11:15
&НаКлиентеНаСервере (&AtClientAtServer) — определяет процедуру (функцию), исполняемую в модуле команды, выполняемую на клиенте и на сервере, имеющую доступ к процедурам и функциям общих модулей – серверных, не глобальных и серверных и клиентских одновременно, не имеющую доступ к переменным. Сама процедура (функция) доступна для клиентских серверных процедур и функций модуля команды.
11 qeos
 
06.03.12
11:17
(10) "клиентские серверные процедуры"? О_о это как?
12 vmv
 
06.03.12
11:17
(7) компиляции общего модуля для сервере и клиента разные, вернее только для сервера и только клиента.

подумай над этим и больше не делай элементарных ошибок
13 vmv
 
06.03.12
11:19
(10) как видим, использовать эту директиву в общем модуле чушь, все-лишь нужно было прочесть СП и не болтать тут ерундой)
14 qeos
 
06.03.12
11:19
(12) вот это уже теплее... непонятно зачем есть возможность ставить обе галки..
ну да ладно, ща попробую вынести куданить..
15 qeos
 
06.03.12
11:22
(13) а где ее использовать и как?
перенес в модуль формы - не видит..
16 Deon
 
06.03.12
11:22
Мне кажется, что vmv так активно намекает, что надо просто убрать директиву &НаКлиентеНаСервере, что после этого оно даже заработает
17 vmv
 
06.03.12
11:23
(14) очень просто, есть общие методы которые можно выполнять и на клиенте и на серввере, Например на сервере при создании формы инициализируется нечто или позиционируется по ключу, а на клиенте оно активизируються уже без вызова сервера.

посмотри описания общих модулей БСП и состав методов хоть вскользь по названиями.

Это наиболее быстрый способ привести в порядок понятийную систему компиляции клиент-сервер в 1С, если вы ранее не работали с этой технологией в других системах
18 Ненавижу 1С
 
гуру
06.03.12
11:23
1С придумала очередную хрень
19 vmv
 
06.03.12
11:24
(16) прочи 10, я не намекаю - я знаю, что она там абсурдна)
20 vmv
 
06.03.12
11:25
(18) ничего она не придумала, все придумали до нее. Просто жадные и тупые 1С-ки теперь вынуждены думать, а когда я говорю, что это неизбежно, то меня называют хамлом, истерички)
21 andrewks
 
06.03.12
11:25
(18) +100500 ))
22 Ненавижу 1С
 
гуру
06.03.12
11:25
(20) придумали давно нормально, а 1С передумала заново, но криво
23 Deon
 
06.03.12
11:26
(22) Ну чем ты недоволен-то? )
24 vmv
 
06.03.12
11:28
(22) придумали давно, но то уже устарело. 1С продвинул эту технологию дальше, и тебе, привыкшему работать с закостенелыми механизмами это не по нутру.

будь честен с нами, признай, что ты тоже ленив и гнобишь все чистое, новое и прогрессивное!)
25 Ненавижу 1С
 
гуру
06.03.12
11:31
(23) уже писал неоднократно
чтобы что-то вызвать с формы клиента, надо

1. вызвать метод формы на сервере, который
2. вызовет серверный модуль

зачем прослойка?

и еще: почему не могут жить ссылки на объекты на клиенте (например ТЗ), ничего криминального не вижу, реально пусть располагаются на сервере, вызов методов с клиента - вызывает на сервере
26 Ненавижу 1С
 
гуру
06.03.12
11:32
(24) ага, самая нано-новая-технология это Неопределено и пустые ссылки ))
27 andrewks
 
06.03.12
11:34
ну, началалось, блин. Null vs Nothing
28 vmv
 
06.03.12
11:42
(26) Неопределено введено для проверки "пустоты" составного типа и эта крута, чувак.

Просто профаны, привыкшие исключительно к оракловой терминологии, не доганяют всю прелесть этого литерала, да и о самом составном типе разработчики реликтовых СУБД мечтают с тоской)
29 Ненавижу 1С
 
гуру
06.03.12
11:44
(28) просто "круто" это не ответ
легко составной тип эмулируется (впрочем как это и делается в самой 1С)
30 vmv
 
06.03.12
11:46
(29) эммулируется - это не метод, а костыль)

а в 1С он встроен во все типовые механизмы и Неопределено его царь и бог, усек)
31 Ненавижу 1С
 
гуру
06.03.12
11:49
(30) я не про то: в 1С внутри движка он эмулируется
32 Ненавижу 1С
 
гуру
06.03.12
11:53
(30) и кстати довольно криво, пользователь выбрал в форме документа тип для поля составного типа и потом передумал его заполнять
внешне для пользователя это незаполненное поле, однако фильтр Реквизит=Неопределено исключит данный документ