&НаКлиенте и &НаСервере | |
---|---|
Зингер Сообщений: 541 Откуда: Белгород Дата регистрации: 02.12.2008 |
Прошу Вашей помощи.
Начал изучать 1С:Предприятие 8.3 через вэбинары. Код модуля формы переключателя (optiongroup):
Если бы на Fox-e, то код бы выглядел элементарно:
Но для модуля из 1С, зачем обращаться к серверу? Как сервер может "знать" что выбрано в переключателе, если еще не нажата "Провести и закрыть"? Я не совсем понимаю конструкцию &НаКлиенте и &НаСервере. Для "препода" вроде как само собой разумеющееся, а для меня "затык". Объясните мне пож-та на пальцах что значит &НаКлиенте, &НаСервере и &НаСерверебезконтекста ? За вопрос прошу сильно не пинать. |
Re: &НаКлиенте и &НаСервере | |
---|---|
Foxtrot Автор Сообщений: 3408 Откуда: Куда: Дата регистрации: 25.04.2003 |
видима потому что объект Перечисления.СпособОплаты.Безналичные не доступен на клиенте, отседа весь этот сырбор
------------------ Мойте ноги, моя ноги вы моете и руки |
Re: &НаКлиенте и &НаСервере | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
В 1С тоже есть подобная конструкция ( ?(,,) ). Но и твоя тоже далеко не идеал и iif() тут, по большому счету, как собаке пятая нога. Цитата:Затем, что на клиенте доступно не все, что есть на сервере. В частности, перечисления. А именно в зависимости от него и производятся нужные действия. Цитата:А ему и не до это знать, к нему не за этим обратились. Не туда смотришь и потому не ловишь суть. Цитата:И это очень плохо ибо на понимании этого построена работа всго управляемого приложения. Цитата:Буквально это и значит. Что процедура/функция после такой директивы будет видна и будет исполнятся в указанном месте. Весь исполняемый код разделен на две части: Клиент и Сервер. И это всегда надо держать в голове и все действия выполнять с учетом этого разделения. И фоксовые привычки богоизбранности тут надо забыть. ------------------ Лень - это неосознанная мудрость. |
Re: &НаКлиенте и &НаСервере | |
---|---|
Зингер Сообщений: 541 Откуда: Белгород Дата регистрации: 02.12.2008 |
В том то и дело, что я понимаю, что я не понимаю. И интуитивно предчувствую, что этот момент нужно четко уяснить для себя, чтобы не возникало дальнейших проблем. И прошу, объяснить как так получилось, что для переключения видимости одного элемента на форме, нужно обратиться к функции сервера? Или понятие "сервер" для 1С другое? Получается, что выбирая что то на переключателе, который отображается на форме, данные передаются на сервер? |
Re: &НаКлиенте и &НаСервере | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Именно! И это очень важно. Цитата:Еще раз для зацикленных на переключении на форме и в упор не видящих эдемент метаданных под названием ПРЕЧИСЛЕНИЕ - не туда смотришь! Не в видимости, не в форме, не в сервере и не в понимании что есть сервере дело. Цитата:Никакое не другое и не надо ему придумывать что-то из того, чего в нем нет. Цитата:НЕТ!. Получается, что ты просто не умеешь читать код 1С и ищешь не там, где потерял, а там где светлее. Ты можешь, наконец, увидеть в коде строку
Ты можешь, наконец-то, обратить внимание на Перечисления.СпособОплаты.Безналичные? Ты можешь попытаться понять, что это отнюдь не 1, и не 2, и не 3 и не какое-то иное заранее определенное программистом значение? И потому вместо него нельзя вот просто так поставить ни 1, ни 2, ни .t. и ни что другое? Что значение этого элемента таки надо получить во время выполнения программы ибо оно не известно в момент написания кода? Это так трудно понять? ------------------ Лень - это неосознанная мудрость. |
Re: &НаКлиенте и &НаСервере | |
---|---|
Зингер Сообщений: 541 Откуда: Белгород Дата регистрации: 02.12.2008 |
М-да. Из всего написанного Вами текста, ценность представляет только предложение
Значения элемента Перечисление.СопособОплаты я внес в конфигураторе на закладке Данные. Как значение может быть неизвестно? Уважаемый, Ssa, я просил не пинать сильно за вопрос и, если Вас раздражает довольно глупый для Вас вопрос, можете просто не отвечать и не ёрничать копируя мои цитаты. Я просил только лишь объяснить см. пост №1, если нет то нет, как-нибудь сам "дойду". |
Re: &НаКлиенте и &НаСервере | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Попробую как начинающий начинающему)
Как я это понимаю. И попробую с точки зрения обычных программ. Фокса например. То что на клиенте, это данные формы, и того с чем она работает. То что точно нужно клиенту. Например, если вводишь кол-во, и известна цена, то сумму надо вычислять на клиенте. Но есть данные, которых у клиента нет. Есть например некоторое значение, но коли ты его хочешь изменить, тебе надо получить весь набор данных. А вот об этом, уже знает только сервер. И потому обращаемся к серверу. Ну а то что сервер, не знает о клиенте, это и понятно. Для примера, откуда ХП может знать, кто и зачем ее вызвал) Вот так примерно мне это видится... Может и не очень точно, но лучше описать свое понимание не могу) Возможно немного сбивает, что в данном случае Перечисления.СпособОплаты.Безналичные всего 2 значения. Но при обращении к другим моментам, может быть гораздо больше. ------------------ Исправлено 1 раз(а). Последнее : Аспид, 02.04.16 15:10 |
Re: &НаКлиенте и &НаСервере | |
---|---|
Зингер Сообщений: 541 Откуда: Белгород Дата регистрации: 02.12.2008 |
to Аспид.
Спасибо, доходчиво. |
Re: &НаКлиенте и &НаСервере | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
В виде числа? Перечисление - набор поименованных числовых констант. И значение перечисления таки число, а не название, под которым оно хранится в конфигурации. Цитата:Оно и известно, Но только серверу. Клиент в конфигурацию лазить не может, он клиент, он работает в отдельном адресном пространстве и может быть вообще на другом компе в другой сети. Цитата:А я что, объясняю какой-то другой пост? ------------------ Лень - это неосознанная мудрость. |
Re: &НаКлиенте и &НаСервере | |
---|---|
pasha_usue Сообщений: 3649 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Вообще, есть функция ПредопределенноеЗначение("Перечисления.СпособОплаты.Безналичные"). Но необходимо помнить, что эта функция обращается на сервер, поэтому желательно ее на клиенте кэшировать.
Ну и ваш код на клиенте преобразуется так:
|
Re: &НаКлиенте и &НаСервере | |
---|---|
pasha_usue Сообщений: 3649 Откуда: Е-бург Дата регистрации: 06.10.2006 |
По вашему коду, это не так. Вы на клиенте вызываете функцию сервера с параметром, который доступен на клиенте. На сервере вы сравниваете переданный параметр с доступным на сервере предопределенным значением перечисления, а результат возвращаете на клиента. НО! При этом, когда вы вызываете вашу серверную функцию, контекст данных формы целиком и полностью отправляется на сервер, а потом возвращается обратно. Все реквизиты, все значения элементов формы. Всё. Об этом эффекте переключения между клиентом и сервером необходимо помнить. И либо использовать директиву "&НаСервереБезКонтекста", либо минимизировать вызовы сервера. Ну, либо пофигу, если производительность устраивает. |
Re: &НаКлиенте и &НаСервере | |
---|---|
Зингер Сообщений: 541 Откуда: Белгород Дата регистрации: 02.12.2008 |
Спасибо, очень информативно и доходчиво. Начал понимать.
Выходит так, что форма в 1С не обладает своими данными, как в Фоксе, т.е. не имеет своей датасессии. Преподаватель также пояснял, что клиент может находиться во Владивостоке, а сервер в Москве, этот факт меня смутил (я подумал, передавать данные, которые отвечают за видимость того или иного элемента формы по сети по маршруту Владивосток-Москва глупо). Насколько я понял, когда пишется &НаСервере или &НаСервереБезКонтекста, то речь идет к обращению на так называемый сервер 1С, где находится конфигурация. И лучше, что бы она была на локалке, т.е. без потери скорости передачи данных и без потери самих данных, т.е. "толстый клиент". |
Re: &НаКлиенте и &НаСервере | |
---|---|
Foxtrot Автор Сообщений: 3408 Откуда: Куда: Дата регистрации: 25.04.2003 |
как говорится если очень хочется а нельзя то можно. тогда твой код мона переписать примерно так
&НаКлиенте Процедура СпособОплатыПриИзменении(Элемент) Элементы.Группа4.Видимость = ПредопределенноеЗначение("Перечисление.СпособОплаты.Безналичные"); КонецПроцедуры ps с днем варенья ------------------ Мойте ноги, моя ноги вы моете и руки |
Re: &НаКлиенте и &НаСервере | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Вон оно как оказывается! Спасибо за инфу. А я то думал, что за зверь такой "&НаСервереБезКонтекста" А оказывается, очень полезная штука! Все так же как в фоксе. Форма имеет те данные, которые ей необходимы. Которые ей предоставили. И точно так же. Если надо подтянуть какие то доп данные, лезишь на сервер. Например у тебя накладная, в ней контрагент, договор. А оказалось договор не тот. За новым ты на сервер и полезешь... И какая разница программисту где он лежит? Лучше как раз рассчитывать Владивосток - Москва. Тогда локально точно быстрее будет))) ------------------ |
Re: &НаКлиенте и &НаСервере | |
---|---|
pasha_usue Сообщений: 3649 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Сервер 1С имеет сервисный процесс RPHOST (или несколько). Этот процесс исполняется на сервере. Он же исполняет весь серверный код (общие серверные модули, модули менеджера объекта, модули объекта, модули формы с директивой &НаСервере). В момент вызова из клиента серверной процедуры, клиент передает контекст с которым он работает на сервер и приостанавливает свою работу. Дальше начинает работать RpHost на сервере. После окончания работы RpHost измененный или неизмененный контекст возвращается на клиента, а клиент возобновляет свою работу. На клиенте доступные все видимые данные. Только доступны они очень ограниченно, по сути, только ссылка на объект и представление этого объекта. Поэтому, если необходимо обратиться к реквизиту договора, например, необходимо либо вызвать сервер, либо специально заранее этот реквизит притащить на клиента. Еще надо понимать, что клиенты могут быть разными. Это может быть андроид-клиент, или веб-клиент. И если у веб-клиента есть прослойка в виде вебсервера, то андроид тянет данные так же как и десктопный клиент. Кстати, при работе с файлами люди очень часто забывают, что сейчас работает RpHost, который расположен на сервере. И он ни о каком вашем диске Це ничегошеньки не знает. PS. В файловой версии вызов сервера обрабатывается тем же процессом, что и клиентское окно. Но парадигма остается той же. |
Re: &НаКлиенте и &НаСервере | |
---|---|
Foxtrot Автор Сообщений: 3408 Откуда: Куда: Дата регистрации: 25.04.2003 |
сори ошибка была в прошлый раз
------------------ Мойте ноги, моя ноги вы моете и руки |
© 2000-2024 Fox Club  |