Имя: Пароль:
1C
 
Клиент и НаКлиенте - разница?
0 mikecool
 
29.09.09
14:58
Клиент оставили для совместимости?
1 ShoGUN
 
29.09.09
15:56
Основное отличие инструкций препроцессора от директив компиляции заключается в том, что инструкции препроцессора описывают, где компилируется
код, а директивы компиляции указывают, где нужно компилировать код.
Кроме того, инструкции препроцессора могут располагаться как внутри процедур и функций, в то время как директивы компиляции могут располагаться
только перед описанием процедуры, функции или переменной (для модуля формы).
Другими словами, использование в коде инструкции препроцессора вида:
#Если Сервер Тогда

#КонецЕсли
указывает, что код, расположенный внутри условия, может быть скомпилирован (и исполнен) только на стороне сервера.
Однако использование в коде директиву компиляции вида:
&НаКлиенте
Процедура МояПроцедура()

КонецПроцедуры
указывает, что процедура после директивы компиляции должна быть скомпилирована (и исполнена) только на стороне клиента.

(цы)
2 Fragster
 
гуру
29.09.09
15:58
(1) чО?
3 Dionisious
 
29.09.09
15:59
Директива компиляции указывает где выполнять процедуру. А инструкция препроцессора указывает как скомпилировать код в зависимости от того где он выполняется.
4 ShoGUN
 
29.09.09
16:00
(2) Текст не мой :) Я согласен, что написано очень мутно :) Ну если совсем просто и коротко - директивы могут только в определенных местах в коде использоваться, а инструкции препроцессора - в любом месте.
5 mikecool
 
29.09.09
16:00
Инструкции препроцессору
Для указания разрешения использования процедур и функций общих модулей и модулей объектов используют инструкции препроцессору.
Синтаксис:
#Если <Логическое выражение> Тогда
#ИначеЕсли <Логическое выражение> Тогда

#Иначе
#КонецЕсли
где:
<Логическое выражение> = [НЕ] <Символ препроцессора> [<Булева операция> [НЕ] <Символ препроцессора> [<Булева операция> [НЕ] <Символ препроцессора>]…]
<Символ препроцессора> = {НаКлиенте | НаСервере | ТолстыйКлиентОбычноеПриложение | ТолстыйКлиентУправляемоеПриложение | Клиент | Сервер | ВнешнееСоединение }
<Булева операция> = {И | ИЛИ}

Используемые термы:
  #Если (#If)
  #Тогда (#Then)
  #ИначеЕсли (#ElsIf)
  #Иначе (#Else)
  #КонецЕсли (#EndIf)
  Клиент (Client)
  НаКлиенте (AtClient)
  НаСервере (AtServer)
  ТолстыйКлиентОбычноеПриложение(ThickClientOrdinaryApplication)
  ТолстыйКлиентУправляемоеПриложение (ThickClientManagedApplication)
  Сервер (Server)
  ВнешнееСоединение (ExternalConnection)
  ТонкийКлиент (ThinClient)
  ВебКлиент (WebClient)  
  И (AND)
  ИЛИ  (OR)
  НЕ (NOT)

тут есть хоть слово про директивы?
6 GROOVY
 
модератор
29.09.09
16:01
Управляемые формы располагаются одновременно и на стороне сервера и на стороне клиента. Директивы & указывают где будет выполнятся эта процедура.
7 mikecool
 
29.09.09
16:01
(1) "Основное отличие инструкций препроцессора от директив компиляции заключается в том, что инструкции препроцессора описывают, где компилируется
код, а директивы компиляции указывают, где нужно компилировать код. " - масло масляное? :))
8 Господин ПЖ
 
29.09.09
16:02
про инструкции препроцессора можно забыть имхо, ибо смысла в них нет если под управляемый режим писать
9 mikecool
 
29.09.09
16:02
(6) пример приведи, пожалста
10 ShoGUN
 
29.09.09
16:03
(5) Значит я тебя не понял. По идее ИНСТРУКЦИИ Клиент и НаКлиенте - просто синонимы.
(7) Блин, это цитата из ЖКК 1С, фигли мне претензии предъявляете?
11 Господин ПЖ
 
29.09.09
16:03
(7) читай (6)
12 GROOVY
 
модератор
29.09.09
16:05
(9)
&НаКлиенте
Процедура ОрганизацияПриИзменении()
//Вызовем серверную функцию для обращения к БД и чтению константы
ОсновнаяОрганизация = ПолучитьОрганизациюПоУмолчанию();
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьОрганизациюПоУмолчанию()
Возврат Константы.ОсновнаяОрганизация.Получить();
КонецФункции
13 ShoGUN
 
29.09.09
16:06
(6) О, теперь и мне понятней стало...
14 mikecool
 
29.09.09
16:07
(12) сочетания инструкций и директив допускаются?
или что будет в случае:
&НаСервере
Функция ПолучитьОрганизациюПоУмолчанию()
#Если Клиент Тогда
....
#КонецЕсли
Возврат Константы.ОсновнаяОрганизация.Получить();

КонецФункции

?
15 mikecool
 
29.09.09
16:09
+14 кусок #Если Клиент будет проигнорирован?
16 Господин ПЖ
 
29.09.09
16:10
а смысл этот кусок туда совать?
17 ShoGUN
 
29.09.09
16:11
(14) Кусок в условии просто будет пропущен, если я всё правильно понял. Имхо инструкции - скорей для общих модулей, директивы - для управляемых форм. Комбинировать можно, но смысла от этого немного.
18 mikecool
 
29.09.09
16:11
и кстати - вопрос в топике немного звучал по другому, в свете набора инструкций (5) как соотносятся?
19 mikecool
 
29.09.09
16:12
(16) в жизни всякое бывает :)
20 mikecool
 
29.09.09
16:12
+19 хочется основы понять, а не тупо быдлокодить :)
21 ShoGUN
 
29.09.09
16:12
(18)
Для выполнения на клиентском месте в обычном и управляемом режиме:
#Если НаКлиенте Тогда

#КонецЕсли

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

#КонецЕсли

Из справки, т.е. это синонимы, оставлено для совместимости.
22 acsent
 
29.09.09
16:13
В версии документации, которая находится на сентябрьском ИТС, данный раздел переработан (5.8.1.1). Надеемся, что стало лучше.

P.S. Теперь этот раздел имеет номер 4.8.1.1.
С партнерского по этой же теме
23 GROOVY
 
модератор
29.09.09
16:14
Процедуры управляемых форм исполняются ЛИБО на клиенте ЛИБО на сервере, вставлять внутрь эти инструкции (#) не имеет смысла.
24 Ненавижу 1С
 
гуру
29.09.09
16:14
Если я в серверном общем модуле напишу &НаКлиенте что будет?
25 ShoGUN
 
29.09.09
16:14
А, еще! Директивы компиляции работают и в файл-серверном режиме, инструкции препроцессора - только в клиент-серверном.
26 mikecool
 
29.09.09
16:15
(24) имхо - игнор функции
27 mikecool
 
29.09.09
16:34
решил почитать на эту тему ИТС...
кто придумал термины "частотные" и "нечастотные" применимо к командам?
чего-то слух режет...
28 SilentMan
 
29.09.09
22:51
(25) Не фантазируй
29 ShoGUN
 
30.09.09
00:02
(28) В файловом варианте инструкции препроцессору #Если Сервер…, #Если Клиент…, #Если ТолстыйКлиентОбычноеПриложение или #Если ТолстыйКлиентУправляемоеПриложение… пропускаются, поэтому экземпляр кода будет присутствовать всегда.
В тонком клиенте доступны – ТонкийКлиент, НаКлиенте, Клиент.
На серверной части тонкого клиента – Сервер, НаСервере.
Во внешнем соединении – ВнешнееСоединение, НаСервере.
(с) справка по 8.2

Я поторопился, конечно. Но часть инструкций препроцессора - игнорируется в файл-серверном режиме. Директивы компиляции совсем не про то...
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший