Еще раз по контекстам общих модулей
Есть общий модуль ТестовыйМодуль
Есть общая форма Форма
Команды выведены на форму.
По умолчанию у Тестового модуля стоит галка сервер. С ней, логично, можно выполнить только команду КомандаСерверСервер. С одной этой галкой приходится комментить вызовы с клиента, иначе название модуля просто не определяется. Тоже логично.
Далее ставлю "Вызов сервера". Опять же логично, становится возможным вызов команды КомандаКлиентСервер. Можно снять и с первой комментарий, но работать она не будет, что опять же логично, так как обращается она к клиентской процедуре, которая пока недоступна.
Далее если ставлю галку "клиент", то полагаю что будут работать все 3 команды. А вот фиг. СерверСервер работает, КлиентКлиент, теперь тоже начинает работать, а КлиентСервер нет. Почему? Моя догадка в том, что пока не стоит галка "Клиент", клиентская процедура модуля формы ищет процедуру из серверной части общего модуля и находит её. А как только я включаю "Клиент" у общего модуля, то с клиента видно только клиентские процедуры? Не логично ведь? Ну не нашла она среди клиентской части процедуру "НаСервере", ну так есть же галка "вызов сервера", ну пусть еще там поищет? Что не так? Может я все неправильно понимаю?
&НаСервере
Процедура НаСервере() Экспорт
Сообщить("На сервере");
КонецПроцедуры
&НаКлиенте
Процедура НаКлиенте() Экспорт
Сообщить("На клиенте");
КонецПроцедуры
ПоказатьЕсть общая форма Форма
&НаКлиенте
Процедура КомандаКлиентКлиент(Команда)
ТестовыйМодуль.НаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура КомандаКлиентСервер(Команда)
ТестовыйМодуль.НаСервере();
КонецПроцедуры
&НаСервере
Процедура КомандаСерверСерверНаСервере()
ТестовыйМодуль.НаСервере();
КонецПроцедуры
&НаКлиенте
Процедура КомандаСерверСервер(Команда)
КомандаСерверСерверНаСервере();
КонецПроцедуры
ПоказатьКоманды выведены на форму.
По умолчанию у Тестового модуля стоит галка сервер. С ней, логично, можно выполнить только команду КомандаСерверСервер. С одной этой галкой приходится комментить вызовы с клиента, иначе название модуля просто не определяется. Тоже логично.
Далее ставлю "Вызов сервера". Опять же логично, становится возможным вызов команды КомандаКлиентСервер. Можно снять и с первой комментарий, но работать она не будет, что опять же логично, так как обращается она к клиентской процедуре, которая пока недоступна.
Далее если ставлю галку "клиент", то полагаю что будут работать все 3 команды. А вот фиг. СерверСервер работает, КлиентКлиент, теперь тоже начинает работать, а КлиентСервер нет. Почему? Моя догадка в том, что пока не стоит галка "Клиент", клиентская процедура модуля формы ищет процедуру из серверной части общего модуля и находит её. А как только я включаю "Клиент" у общего модуля, то с клиента видно только клиентские процедуры? Не логично ведь? Ну не нашла она среди клиентской части процедуру "НаСервере", ну так есть же галка "вызов сервера", ну пусть еще там поищет? Что не так? Может я все неправильно понимаю?
По теме из базы знаний
- Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- LogosFor1C. Подсистема сквозного логирования на клиенте и сервере в разные приемники
- Если хочется ООП с наследованием и полиморфизмом
- Помогаторы разработчика 1С
Найденные решения
(3)
правильно.
Это из другой оперы. Верно в модулях формы и менеджера формы. Туда же можно отнести модуль объекта, но там и так все методы серверные.
К примеру, общие модули с флагом "Клиент" директивы не нужна и все методы по-умолчанию клиентские.
Эта директива нужна для использования в основном для модуля формы. Этакий микро аналог общего модуля "Клиент"+"Сервер" с похожей реализацией для отдельного метода. Когда создавать отдельный общий модуль нет причин.
Я правильно понял, что если поставить галки и "клиент" и "сервер", то все процедуры без директив попадут и в клиентскую часть и в серверную? А те, у которых явно указано, где компилироваться, только в свою часть?
правильно.
А как же фраза "Все процедуры и функции без указания директивы считаются по-умолчанию с директивой "НаСервере"?
Это из другой оперы. Верно в модулях формы и менеджера формы. Туда же можно отнести модуль объекта, но там и так все методы серверные.
К примеру, общие модули с флагом "Клиент" директивы не нужна и все методы по-умолчанию клиентские.
Зачем же тогда нужна директива НаКлиентеНаСервереБезКонтекста?
Эта директива нужна для использования в основном для модуля формы. Этакий микро аналог общего модуля "Клиент"+"Сервер" с похожей реализацией для отдельного метода. Когда создавать отдельный общий модуль нет причин.
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) есть рекомендация не ставить все галки в свойствах общих модулей. Сами запутаетесь и программу запутаете.
Когда для общего модуля выставлены галки: "Клиент" и "Сервер", тогда при компиляции платформа делает 2 модуля, клиентский и серверный. И при обращении к общему модулю из клиента соответственно ищется в клиентском модуле. "Вызов сервера" тут уже не работает. Почему? Скорее всего разработчики не стали реализовывать функционал в уже существующую реализацию. "Вызов сервера" появился намного позже для реализации тонкого клиента.
То что можно общий модуль пометить и как "Клиент" и как "Сервер" это только для удобства программиста. Платформа все равно для себя разделяет его на два отдельных.
И для Общего модуля с флагами "Клиент" и "Сервер" обычно применяются для процедур, которые могут выполняться как на клиенте, так и на сервере. И для них не указываются директивы &НаКлиенте и &НаСервере. Если нужно указывать директивы, тогда точно выбрано не правильное расположение этих процедур.
Когда для общего модуля выставлены галки: "Клиент" и "Сервер", тогда при компиляции платформа делает 2 модуля, клиентский и серверный. И при обращении к общему модулю из клиента соответственно ищется в клиентском модуле. "Вызов сервера" тут уже не работает. Почему? Скорее всего разработчики не стали реализовывать функционал в уже существующую реализацию. "Вызов сервера" появился намного позже для реализации тонкого клиента.
То что можно общий модуль пометить и как "Клиент" и как "Сервер" это только для удобства программиста. Платформа все равно для себя разделяет его на два отдельных.
И для Общего модуля с флагами "Клиент" и "Сервер" обычно применяются для процедур, которые могут выполняться как на клиенте, так и на сервере. И для них не указываются директивы &НаКлиенте и &НаСервере. Если нужно указывать директивы, тогда точно выбрано не правильное расположение этих процедур.
(2) М-да... И нигде об этом не пишут.
Я правильно понял, что если поставить галки и "клиент" и "сервер", то все процедуры без директив попадут и в клиентскую часть и в серверную? А те, у которых явно указано, где компилироваться, только в свою часть?
А как же фраза "Все процедуры и функции без указания директивы считаются по-умолчанию с директивой "НаСервере"? Она получается в данном случае не работает? Капец, если честно. Я понимаю на практике такой гемор редко встречается, но сама реализация какая-то убогая.
Зачем же тогда нужна директива НаКлиентеНаСервереБезКонтекста? Если можно просто не указать директиву и поставить обе галки?
Я правильно понял, что если поставить галки и "клиент" и "сервер", то все процедуры без директив попадут и в клиентскую часть и в серверную? А те, у которых явно указано, где компилироваться, только в свою часть?
А как же фраза "Все процедуры и функции без указания директивы считаются по-умолчанию с директивой "НаСервере"? Она получается в данном случае не работает? Капец, если честно. Я понимаю на практике такой гемор редко встречается, но сама реализация какая-то убогая.
Зачем же тогда нужна директива НаКлиентеНаСервереБезКонтекста? Если можно просто не указать директиву и поставить обе галки?
(3)
правильно.
Это из другой оперы. Верно в модулях формы и менеджера формы. Туда же можно отнести модуль объекта, но там и так все методы серверные.
К примеру, общие модули с флагом "Клиент" директивы не нужна и все методы по-умолчанию клиентские.
Эта директива нужна для использования в основном для модуля формы. Этакий микро аналог общего модуля "Клиент"+"Сервер" с похожей реализацией для отдельного метода. Когда создавать отдельный общий модуль нет причин.
Я правильно понял, что если поставить галки и "клиент" и "сервер", то все процедуры без директив попадут и в клиентскую часть и в серверную? А те, у которых явно указано, где компилироваться, только в свою часть?
правильно.
А как же фраза "Все процедуры и функции без указания директивы считаются по-умолчанию с директивой "НаСервере"?
Это из другой оперы. Верно в модулях формы и менеджера формы. Туда же можно отнести модуль объекта, но там и так все методы серверные.
К примеру, общие модули с флагом "Клиент" директивы не нужна и все методы по-умолчанию клиентские.
Зачем же тогда нужна директива НаКлиентеНаСервереБезКонтекста?
Эта директива нужна для использования в основном для модуля формы. Этакий микро аналог общего модуля "Клиент"+"Сервер" с похожей реализацией для отдельного метода. Когда создавать отдельный общий модуль нет причин.
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)