Директивы препроцессора #если сервер ...КонецЕсли; . #Если Клиент...Коне #293039


#0 by vpaoli
Помогите кто может разобраться с этими директивами. Достаточно странно выглядит сам подход по разделению вычислений.   Исходно у нас есть какая то вычислительная задача и директивы должны быть такими: # На сервере  ... КонецНаСервере  -  т.е данная часть кода должна выполняться на сервере; # На клиенте  ... КонецНаКлиенте  -  т.е данная часть кода должна выполняться на клиенте; В 1С:8.0  все "вверх-тармашкой"  #Если Клиент  ....  -  а зачем мне гадать клиент это или сервер  ???  Задача ведь в другом!!  Какие то вычисления мы должны сделать на сервете, а какие-то на клиенте... Может я чего то не допонимаю?
#1 by Vozhd
Да. Вы чего-то не допонимаете...
#2 by перцептрон
что бы можно было написать Сообщить("Превед Клиент!");
#3 by PowerBoy
Не надо плодить новых конструкций языка.
#4 by Diman000
+1
#5 by vpaoli
пока не видно ни одного конструктивного ответа ...неужели кроме Вождей и Сильных Мальчиков здесь никого нет..??
#6 by IronDemon
#На клиенте  ... КонецНаКлиенте  -  т.е данная часть кода должна выполняться на клиенте -- Нет, она МОЖЕТ выполняться на клиенте
#7 by Vozhd
На Ваш вопрос Вам ответили. Если вы хотите ответ на какой-то другой вопрос, то задайте его, а не конючте, как дите трехлетнее...
#8 by Sonic
а не проще документацию хотя бы пролистнуть?:)
#9 by Vozhd
Документация - для лохов! Настоящие пацаны ее сжигают сразу после покупки коробки!
#10 by Sonic
была идея в том году на мистопопойке сжечь ЖКК, но так никто и не привез. повелись
#11 by Diman000
Во время обучения в универе был у меня спецкурс с громким названием "Параллельное программирование". Мы писали простенькую программку на С++ под несколько процессоров. Фишка была в том, что код был единым и подавался на выполнение сразу всем процессорам. А в функцию main в качестве параметра передавался номер процессора (ну может не передавался именно как параметр, не помню точно, но его можно было получить). Так вот, исходя из этого номера, нужно было распараллелить выполнение, типа, если это процессор №1, то выполнять такой-то участок кода, если №2, то другой, и так далее. Было довольно забавно. Так вот, здесь почти тоже самое. Так что говорить о том, что "Достаточно странно выглядит сам подход по разделению вычислений" нельзя.
#12 by Vozhd
Дык я и говорю: в 1С сообществе нет настоящих пацанов!
#13 by vpaoli
по рекомендации Соника посмотрел док-ю по 1С8.   Там написано:  Для выполнения на сервере: #Если Сервер Тогда … #КонецЕсли Сразу отлегло !! Получается , 1С - вцы просто не в ладах с русским языком...!!  Или я снова не прав?  Диману000 особое спасибо, подумаю над его примером, но сразу хочется сказать, что параллельные вычисления на разных процессорах одного вычислительного алгоритма и разделение вычислений в 1С (оно может быть и последовательным) не одно и тоже.
#14 by Sonic
ты только начал с 1Ской заниматься как я понимаю?
#15 by Vozhd
В 1С нет разделения вычислений. Перечитайте найденный раздел документации еще раз. Только теперь перечитайте его весь, а не только один абзац...
#16 by vpaoli
нет я только первый раз за последние 3 года  зашел на этот форум..
#17 by Зарбазан
тебе русский язык или директивы? p/s/ а с русским там тоже все в порядке...
#18 by vpaoli
Как говрят в одной рекламе - почувствуйте разницу. Мой знакомый стоматолог работает двумя инструментами - щипцами для вытаскивания зубов и бор-машиной. Вот я и представляю как он Вам будет лечить зубы. Хватает щипцы  и #Если это шипцы то дергает Вам зуб  .... а может быть Вам нужно было пломбу поставить?
#19 by vpaoli
Вождь.  Разве в 1С нет разделения вычислений.  Тогда выбросьте сервер приложений раз он ничего не вычисляет и работайте только на клиенте  :)
#20 by Зарбазан
не вижу абсолютно никакой разницы с #Щипцами ... КонецЩипцами кроме того, что в вашем случае, еще и директив понадобится уймова туча, а не одна #Если
#21 by Vozhd
В 1С нет разделения вычислений. И об этом написано в документации. Но Вы читать еще не научились, поэтому к написанию своих программ приступать еще рановато...
#22 by vpaoli
разница состоит в том, что наши предпринимаемые действия должны зависеть не от того, что у нас сейчас в руках - щипцы или бор, а от другого.
#23 by перцептрон
что не понятно? просто можно выполнять код на сервере, и не тягать промежуточные данные каждому клиенту.
#24 by Лефмихалыч
видишь ли, бывают ситуации, когда одну и ту же фукнцию нужно выполнять и на сервере, и на клиенте (к примеру, если у общего модуля включены обе галочки). При этом, существуют конструкции, котрые, к примеру, успешно работают на клиенте, но не работают на сервере. Директивы препроцессора чаще всего используются, чтобы исключить выполнение недопустимых конструкций
#25 by vpaoli
Перцептрон. Я полностью с Вами согласен. Только при чем тут "#Если"
#26 by Diman000
Насчет передачи выполнения на сервер все не совсем так. Вернее совсем не так. Если вызов процедуры происходит с клиента, то конструкция "#Если Сервер" не поможет. Для передачи процедуры серверу приложений тебе придется вызвать общий модуль с флажком Сервер и без флажка Клиент.
#27 by Лефмихалыч
"чаще всего используются" следует читать, как "нужны, например, для того"
#28 by Vozhd
Читайте документацию, там написано при чем тут "#Если"...
#29 by Vozhd
Требование отсутствия флажка "Клиент" лишнее. Перечитайте документацию. Кроме того, фраза "Для передачи процедуры серверу" в контексте 1С:Предприятия вообще звучит дико...
#30 by перцептрон
притом что в 1с нет компилятора что бы обработать #Если Сервер в код для сервера и для клиента отдельно, и если работает во время исполнения.
#31 by vpaoli
Отдельно Левычу.   Да, бывают ситуации когда утюг можно перевезти и на Оке и на Камазе, а холодильник нет!  Но, допустим у нас холодильник.  При этом мы осознаем, что нам нужен Камаз.  А по вашему получается так - если у нас Камаз, то везем холодильник, а если Ока ,  то утюг.  Не нужен мне сейчас утюг !!!
#32 by перцептрон
теперь мне ясно! думаю...
#33 by Vozhd
Если Вам утюг не нужен, то не используйте 1С...
#34 by Sonic
мда... все бльше и больше убеждаюсь что прочитать доки 1Сникам слабо
#35 by перцептрон
+ тут конструкция должна быть так:
#36 by Vozhd
Вы не знаете как возить утюг на камазе? :-)
#37 by vpaoli
Вождь. Возьмите пример с Перцептрона. Он уже задумался... а Вы еще нет!
#38 by Лефмихалыч
ты пьяный что ли?
#39 by Diman000
Ты сам-то пробовал передать выполнение процедуры с клиента на сервер, умник?
#40 by vpaoli
Так вот Перцептрон... конструкция должна быть такой : иначе Сообщить("Отдыхаем") КонецЕсли И никакого Если Камаз ... и т.п.
#41 by Vozhd
Выполнение роцедуры происходит в определенном контексте. Платформа 1С:Предприятия не умеет передавать контекст от клиента к серверу и наоборот. Поэтому "передать выполнение процедуры с клиента на сервер" невозможно в принципе. Поэтому я действительно умник, раз не пытаюсь сделать то, что в принципе не возможно...
#42 by перцептрон
трудно сказать, дофига вариантов
#43 by Diman000
Тут нужно уточнить откуда будет вызываться эта процедура, содержащая это условие
#44 by vpaoli
Диман000 ,  я еще не пробовал.. вот хотел , чтобы ты мне помог советом. А что сложно, что ли?  Пишешь ф-цию в общем модуле, ставиш там галочку "сервер" и   вызываешь ее из кода   Формы документа.  Или ты хочешь сказать , что в форме док-та нужно вызов этой функции делать  внутри #Если Клиент ...  ???
#45 by Лефмихалыч
Ты бы взял бы да и удивил всех, прочитав ЖКК. "Если для некоторых процедур и функций требуется указать <B>возможность использования</B> на клиенте или на сервере" цитата не прямая. Конфигурирование и администрирование, стр. 108, абзац последний
#46 by перцептрон
ХочуВезтиХолодильник ?= Камаз, да/нет?
#47 by Diman000
Понятно, ты просто к формулировке прицепился... Естественно, я имел ввиду вызов процедуры для выполнения на сервере
#48 by Vozhd
А программы Вы тоже не пишите, а только имеете ввиду? ;-)
#49 by Зарбазан
кто мешает написать такую конструкцию?
#50 by vpaoli
Левыч. Я почитаю.. Что такое ЖКК  ?
#51 by Diman000
Все пройдет нормально, если будет только флажок Сервер без наличия флажка Клиент. Если будет Клиент (несмотря на наличие Сервер), то произойдет вызов клиентского экземпляра процедуры из формы документа
#52 by Лефмихалыч
#53 by Diman000
Переформулирую вопрос. Приходилось ли Вам вызывать с клиента процедуру, которая должна быть выполнена на сервере?
#54 by перцептрон
нет, а что это невозможно?
#55 by Diman000
Конечно, возможно. Только в ОМ флажка Клиент не должно быть, а только Сервер. Тем не менее, Вождь в написал, что это условие лишнее.
#56 by vpaoli
Диман000 и др.,  да я  к формулировке прицепился.  Вы согласитесь, что для того, чтобы выполнить кусок кода на сервере нет необходимости делать какие то проверки на условие #Если Сервер ... , а нужно просто написать #ХочуНаСервере
#57 by Vozhd
Да. Пару раз случалось такое делать... И у общего модуля, где была определена эта процедура стояли флажки Исполнять на сервере и Исполнять на клиенте...
#58 by Vozhd
От имени некоторых "др." заявляю, что формулировка "#Если Сервер ..." лучше соответствует работе платформы 1С:Предприятие...
#59 by Diman000
Я соглашусь в том, что эти проверки нужны не для этого И откуда она вызывалась? Неужели с клиента?
#60 by vpaoli
Вождь!  Докажи, что ты Вождь.  Аргументируй чем это она лучше соответствует? Только потому, что в ЖКК стоит?  Тогда ты не Вождь , а Букварь.
#61 by Vozhd
Да, она вызывалась с клиента...
#62 by Diman000
Приношу извинения, был неправ. Действительно, указание директивы препроцессора "#Если Сервер" решает вопрос и отсутствие флажка Клиент в ОМ не обязательно.
#63 by Vozhd
Извинения приняты. Но все же, иногда перечитывайте документацию - там очень много всего описано...
#64 by Лефмихалыч
как бы тебе объяснить, чтоб ты понял?... директива препроцессора не говорит, куда отправлять на выполнение, она говорит, что данный кусок кода можно выполнять, только если условие истинно
#65 by vpaoli
Левычу. Сложные вещи легче понимать на простых примерах.  Допустим нам нужно сложить числа от 1 до 10. Первую сумму а=1+2+3+4  я хочу выполнить на клиенте, а остальное б= а+ 5+6+7+8+9+10 - на сервере. Каков же твой алгоритм  с условием #Если  и зачем это условие здесь необходимо?
#66 by Vozhd
Для того, чтобы использовать инструмент по назначению, желательно ознакомится с его инструкцией...
#67 by Лефмихалыч
я ведь щас гадости говорить буду!... Слушай, vpaoli, во первых, иди в #опу, в ао-аторых, где ты видел, чтобы кто-нибудь из нас или чтобы где-нибудь в литературе по 8.0 было написано, что директивы препроцессора говорят платформе, КУДА ОТПРАВЛЯТЬ на исполнение код? Еще раз, директивы говорят, где ДОПУСТИМО выполнение, а где - нет. Нельзя в рантайм туда-сюда с сервера на клиента один и тот же код кидать: "щас хочу выполнить на сервере, а через минуту захочу на клиенте", тебе это приснилось.
#68 by Diman000
Внимательно, ОЧЕНЬ внимательно прочитай
#69 by Vozhd
Он не умеет читать. Ведь всем известно, что читают только лохи и ботаники...
#70 by vpaoli
Ну наконец то получил один дельный ответ. Спасибо Левычу, хоть он и нервничает. Выходит так. При запуске 1С  препроцеесор на компьютере генерит  исполняемый код  на основе этих условий, т.е. в зависимости от того, где эта 1С запущена, на сервере или на клиенте. Никакого отношения эти директивы к исполнению самого кода не имеют.
#71 by vpaoli
Всем спасибо!
#72 by Vozhd
Именно это и написано в документации. Только немного более развернуто и чуть другими словами...
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С