Еще раз по контекстам общих модулей

1. AndrewKop 14.08.17 10:25 Сейчас в теме
Есть общий модуль ТестовыйМодуль
&НаСервере
Процедура НаСервере() Экспорт
	Сообщить("На сервере");
КонецПроцедуры

&НаКлиенте
Процедура НаКлиенте() Экспорт
	Сообщить("На клиенте");
КонецПроцедуры
Показать


Есть общая форма Форма

&НаКлиенте
Процедура КомандаКлиентКлиент(Команда)
	ТестовыйМодуль.НаКлиенте();
КонецПроцедуры

&НаКлиенте
Процедура КомандаКлиентСервер(Команда)
	ТестовыйМодуль.НаСервере();
КонецПроцедуры

&НаСервере
Процедура КомандаСерверСерверНаСервере()
	ТестовыйМодуль.НаСервере();
КонецПроцедуры

&НаКлиенте
Процедура КомандаСерверСервер(Команда)
	КомандаСерверСерверНаСервере();
КонецПроцедуры
Показать


Команды выведены на форму.
По умолчанию у Тестового модуля стоит галка сервер. С ней, логично, можно выполнить только команду КомандаСерверСервер. С одной этой галкой приходится комментить вызовы с клиента, иначе название модуля просто не определяется. Тоже логично.
Далее ставлю "Вызов сервера". Опять же логично, становится возможным вызов команды КомандаКлиентСервер. Можно снять и с первой комментарий, но работать она не будет, что опять же логично, так как обращается она к клиентской процедуре, которая пока недоступна.
Далее если ставлю галку "клиент", то полагаю что будут работать все 3 команды. А вот фиг. СерверСервер работает, КлиентКлиент, теперь тоже начинает работать, а КлиентСервер нет. Почему? Моя догадка в том, что пока не стоит галка "Клиент", клиентская процедура модуля формы ищет процедуру из серверной части общего модуля и находит её. А как только я включаю "Клиент" у общего модуля, то с клиента видно только клиентские процедуры? Не логично ведь? Ну не нашла она среди клиентской части процедуру "НаСервере", ну так есть же галка "вызов сервера", ну пусть еще там поищет? Что не так? Может я все неправильно понимаю?
По теме из базы знаний
Найденные решения
6. spacecraft 14.08.17 12:47 Сейчас в теме
(3)
Я правильно понял, что если поставить галки и "клиент" и "сервер", то все процедуры без директив попадут и в клиентскую часть и в серверную? А те, у которых явно указано, где компилироваться, только в свою часть?

правильно.

А как же фраза "Все процедуры и функции без указания директивы считаются по-умолчанию с директивой "НаСервере"?

Это из другой оперы. Верно в модулях формы и менеджера формы. Туда же можно отнести модуль объекта, но там и так все методы серверные.
К примеру, общие модули с флагом "Клиент" директивы не нужна и все методы по-умолчанию клиентские.

Зачем же тогда нужна директива НаКлиентеНаСервереБезКонтекста?

Эта директива нужна для использования в основном для модуля формы. Этакий микро аналог общего модуля "Клиент"+"Сервер" с похожей реализацией для отдельного метода. Когда создавать отдельный общий модуль нет причин.
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 14.08.17 10:57 Сейчас в теме
(1) есть рекомендация не ставить все галки в свойствах общих модулей. Сами запутаетесь и программу запутаете.
Когда для общего модуля выставлены галки: "Клиент" и "Сервер", тогда при компиляции платформа делает 2 модуля, клиентский и серверный. И при обращении к общему модулю из клиента соответственно ищется в клиентском модуле. "Вызов сервера" тут уже не работает. Почему? Скорее всего разработчики не стали реализовывать функционал в уже существующую реализацию. "Вызов сервера" появился намного позже для реализации тонкого клиента.
То что можно общий модуль пометить и как "Клиент" и как "Сервер" это только для удобства программиста. Платформа все равно для себя разделяет его на два отдельных.
И для Общего модуля с флагами "Клиент" и "Сервер" обычно применяются для процедур, которые могут выполняться как на клиенте, так и на сервере. И для них не указываются директивы &НаКлиенте и &НаСервере. Если нужно указывать директивы, тогда точно выбрано не правильное расположение этих процедур.
3. AndrewKop 14.08.17 12:35 Сейчас в теме
(2) М-да... И нигде об этом не пишут.
Я правильно понял, что если поставить галки и "клиент" и "сервер", то все процедуры без директив попадут и в клиентскую часть и в серверную? А те, у которых явно указано, где компилироваться, только в свою часть?
А как же фраза "Все процедуры и функции без указания директивы считаются по-умолчанию с директивой "НаСервере"? Она получается в данном случае не работает? Капец, если честно. Я понимаю на практике такой гемор редко встречается, но сама реализация какая-то убогая.
Зачем же тогда нужна директива НаКлиентеНаСервереБезКонтекста? Если можно просто не указать директиву и поставить обе галки?
6. spacecraft 14.08.17 12:47 Сейчас в теме
(3)
Я правильно понял, что если поставить галки и "клиент" и "сервер", то все процедуры без директив попадут и в клиентскую часть и в серверную? А те, у которых явно указано, где компилироваться, только в свою часть?

правильно.

А как же фраза "Все процедуры и функции без указания директивы считаются по-умолчанию с директивой "НаСервере"?

Это из другой оперы. Верно в модулях формы и менеджера формы. Туда же можно отнести модуль объекта, но там и так все методы серверные.
К примеру, общие модули с флагом "Клиент" директивы не нужна и все методы по-умолчанию клиентские.

Зачем же тогда нужна директива НаКлиентеНаСервереБезКонтекста?

Эта директива нужна для использования в основном для модуля формы. Этакий микро аналог общего модуля "Клиент"+"Сервер" с похожей реализацией для отдельного метода. Когда создавать отдельный общий модуль нет причин.
7. AndrewKop 14.08.17 12:49 Сейчас в теме
(6) Большое спасибо! Ваши ответы пролили свет!
4. Anchoret 60 14.08.17 12:39 Сейчас в теме
Если создаю общие модули, то обычно создаю сразу 3 общих модуля: Клиент, Сервер, ВызовСервера.
Гораздо проще потом что-то в них найти
5. AndrewKop 14.08.17 12:41 Сейчас в теме
Да мне просто хочется с концепцией разобраться и реализацией. Я понимаю, что лучше разносить все по отдельным модулям.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)