Есть общий модуль ТестовыйМодуль

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

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

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

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

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

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

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

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

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

Зачем же тогда нужна директива НаКлиентеНаСервереБезКонтекста?
Эта директива нужна для использования в основном для модуля формы. Этакий микро аналог общего модуля "Клиент"+"Сервер" с похожей реализацией для отдельного метода. Когда создавать отдельный общий модуль нет причин.
---
есть рекомендация не ставить все галки в свойствах общих модулей. Сами запутаетесь и программу запутаете.
Когда для общего модуля выставлены галки: "Клиент" и "Сервер", тогда при компиляции платформа делает 2 модуля, клиентский и серверный. И при обращении к общему модулю из клиента соответственно ищется в клиентском модуле. "Вызов сервера" тут уже не работает. Почему? Скорее всего разработчики не стали реализовывать функционал в уже существующую реализацию. "Вызов сервера" появился намного позже для реализации тонкого клиента.
То что можно общий модуль пометить и как "Клиент" и как "Сервер" это только для удобства программиста. Платформа все равно для себя разделяет его на два отдельных.
И для Общего модуля с флагами "Клиент" и "Сервер" обычно применяются для процедур, которые могут выполняться как на клиенте, так и на сервере. И для них не указываются директивы &НаКлиенте и &НаСервере. Если нужно указывать директивы, тогда точно выбрано не правильное расположение этих процедур.
---
М-да... И нигде об этом не пишут.
Я правильно понял, что если поставить галки и "клиент" и "сервер", то все процедуры без директив попадут и в клиентскую часть и в серверную? А те, у которых явно указано, где компилироваться, только в свою часть?
А как же фраза "Все процедуры и функции без указания директивы считаются по-умолчанию с директивой "НаСервере"? Она получается в данном случае не работает? Капец, если честно. Я понимаю на практике такой гемор редко встречается, но сама реализация какая-то убогая.
Зачем же тогда нужна директива НаКлиентеНаСервереБезКонтекста? Если можно просто не указать директиву и поставить обе галки?
---
Я правильно понял, что если поставить галки и "клиент" и "сервер", то все процедуры без директив попадут и в клиентскую часть и в серверную? А те, у которых явно указано, где компилироваться, только в свою часть?
правильно.

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

Зачем же тогда нужна директива НаКлиентеНаСервереБезКонтекста?
Эта директива нужна для использования в основном для модуля формы. Этакий микро аналог общего модуля "Клиент"+"Сервер" с похожей реализацией для отдельного метода. Когда создавать отдельный общий модуль нет причин.
---
Большое спасибо! Ваши ответы пролили свет!
---
Если создаю общие модули, то обычно создаю сразу 3 общих модуля: Клиент, Сервер, ВызовСервера.
Гораздо проще потом что-то в них найти
---
Да мне просто хочется с концепцией разобраться и реализацией. Я понимаю, что лучше разносить все по отдельным модулям.