Допустим на форме нужно в зависимости от интерактивного изменения флажка устанавливать значение какого-либо реквизита, это можно сделаеть так:
Вариант 1:
&НаКлиенте
Процедура ФлажокПриИзменении(Элемент)
ФлажокПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ФлажокПриИзмененииНаСервере()
Объект.Статус = Перечисления.СтатусыЗаказовКлиентов.КОбеспечению;
// или так: Объект.Статус = Перечисления.СтатусыЗаказовКлиентов.ПустаяСсылка;
КонецПроцедуры
Или так:
Вариант 2:
&НаКлиенте
Процедура ФлажокПриИзменении(Элемент)
Объект.Статус = ВернутьСтатусНаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВернутьСтатусНаСервере ()
Возврат Перечисления.СтатусыЗаказовКлиентов.КОбеспечению;
// или так: Возврат = Перечисления.СтатусыЗаказовКлиентов.ПустаяСсылка;
КонецФункции
Строго говоря, оба эти варианта "неправильные", т.е. работать они конечно же будут, но неэффентивно, так же неэффективен следующий вариант (есть в УТ11):
Вариант 3:
&НаКлиенте
Процедура ФлажокПриИзменении(Элемент)
Объект.Статус = РаботаСФомулами.ВычислитьФормулу("Перечисления.СтатусыЗаказовКлиентов.КОбеспечению");
КонецПроцедуры
Здесь производится вывов стандартной серверной функции, реализованной в общем модуле УТ11 РаботаСФомулами.ВычислитьФормулу. Её реализация:
Функция ВычислитьФормулу(ТекстРасчета) Экспорт
Возврат Вычислить(ТекстРасчета);
КонецФункции
Эта "фича", которая позволяет не описывать процедуры/функции исполняемой на сервере, а использует уже готовую "универсальную", но существует и "пара но", а именно:
- уже есть функция платформы, которая может выполнять, почти тоже самое(об этом позднее);
- если у вас есть РаботаСФомулами.ВычислитьФормулу, а база опубликована в веб, то любой человек может выполнять на вашем сервере произвольный 1С-код, просто передавая туда HTTP-запросы (Evil Beaver)
Функция платформы, которая позволяет сделать тоже самое, но с одной стороны без привязки к конфигурации, с другой кэшируя полученное значение:
Вариант 4:
&НаКлиенте
Процедура ФлажокПриИзменении(Элемент)
Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказовКлиентов.КОбеспечению");
КонецПроцедуры
Последний вариант с одной стороны позволяет не прибегать к увеличению кода, за счет вызова на клиенте, с другой кэширует полученное значение на уровне платформы. Есть у него и незначительный недостаток, который, впрочем, возникает при "некрасивом стиле" программирования, например таком:
&НаКлиенте
Процедура ФлажокПриИзменении(Элемент)
Объект.Группа = РаботаСФомулами.ВычислитьФормулу("Справочники.Партнеры.НайтиПоКоду(""00002"")");
КонецПроцедуры
Такое значение нельзя вычислить используя Вариант 4, но правильнее в этом случае использовать предопределенный элемент справочника, тогда Вариант 4 вполне применим, например так:
&НаКлиенте
Процедура ФлажокПриИзменении(Элемент)
Объект.Группа = ПредопределенноеЗначение("Справочник.Партнеры.НашеПредприятие");
КонецПроцедуры
+/- | Возможность \ Вариант | Вариант 1 | Вариант 2 | Вариант 3 | Вариант 4 |
Количество вызовов сервера при первоначальном использовании одного значения формы | 1 | 1 | 1 | 1 | |
Количество вызовов сервера при первоначальном использовании N значений формы | 1 | N | N | N | |
Количество вызовов сервера при повторном использовании уже полученного одного значения | 1 | 1 | 1 | 0 | |
Количество вызовов сервера при повторном использовании уже полученных N значений | 1 | N | N | 0 | |
+ | Контекстная подсказка при написании кода | Есть | Есть | Нет | Есть |
+ | Возможность использования предопределенных и пустых значений объектов | Есть | Есть | Есть | Есть |
+ | Использование функций типа НайтиПоКоду, НайтиПоНаименованию... | Есть | Есть | Есть | Нет |
+ | Нагладность кода | Есть | Есть | Есть | Есть |
+ | Возможность проверки, используя синтаксис контроль | Есть | Есть | Нет | Нет |
+ | Возможность проверки, используя контроль при сохранении (со словами "Возможно ошибочный параметр") | Нет | Нет | Нет | Есть |
- | Необходимость написания процедуры/функции исполняемой на сервере | Есть | Есть | Нет | Нет |
Исходя из данной таблицы, наиболее выигрышными являются варианты 1 и 4, причем Вариант 1 лучше использовать когда нужно установить несколько значений формы, возможно со сложными вычислениями (например, Запросами), Вариант 4 - в простейших случаях, к которым можно сводить конструкции типа НайтиПоКоду, НайтиПоНаименованию, через предопределенные значения.
Вариант 2 - вообще желательно не употеблять ввиду его недостатков и возможность замещения другими, более эффективными вариантами.
Вариант 3 - можно рекомендовать только как временное решение (если база не опубликована в веб), до добавления предопределенного значения.
ЗЫ: Особое спасибо Magisterу, Поручику и Evil Beaver, за то что наставили на "путь истины", критикой в комментариях (изначально статья имела совсем другое содержание и выводы).