Библиотека функция Фиксина в расширении
Один программист запросил у меня код моей библиотеки функций и я хотел выгрузить ему его в файл CF, но призадумался. Сейчас ведь конфигурации никто не меняет, поэтому библиотеку надо делать в расширении. Перенес модули в расширение бфф, но при обновлении конфигурации столкнулся с ошибкой:
Использование глобальных серверных общих модулей в расширении недопустимо
При проверке метаданных обнаружены ошибки!
Операция не может быть выполнена.
Так вот платформа своими идиотскими ограничениями зачеркнула красивую концепцию.
Я сначала расстроился, потом сделал три общих модуля в расширении:

Но мне не нравился подобный подход. Программисту нужно запоминать какая функция серверная, какая клиентская, какая клиент-серверная. Неудобно, некрасиво, непрактично.
В итоге мне пришла мысль оставить один клиент-серверный модуль бфф.
Создал новую конфигурацию, создал в расширении клиент-сереный модуль бфф:
#Если Клиент Тогда Функция П(Текст) Экспорт ПоказатьПредупреждение(, Текст); КонецФункции #КонецЕсли #Если Сервер Тогда Функция Т() Экспорт Возврат Новый ТаблицаЗначений(); КонецФункции #КонецЕсли
Создал тестовую команду:
&НаСервере Функция ТестНаСервере() Т = бфф.Т(); Возврат Т.Количество() + 1; КонецФункции &НаКлиенте Процедура Тест(Команда) Р = ТестНаСервере(); бфф.П(Р); КонецПроцедуры
И она отработала успешно:

Следовательно, можно создать только один модуль бфф, и обращаться к нему без размышлений о том, это серверный или клиентский контекст.
Это приободрило меня и я решил, что всё же библиотеке функций быть на расширении.
Внутри библиотеки все вызовы функций будут через бфф. (бфф с точкой), чтобы проще их было оформить в единый общий модуль, который можно добавить, например, во внешнюю обработку. Тогда всем функциям нужно будет добавить префикс бфф, а бфф с точкой заменить просто на бфф.

С пространством имен и модульностью в 1с итак печально, но ты решил пойти дальше назад в 7.7.
да. в старое доброе PHP. Вся эта суета с именами модулей лишняя.
Серверные методы твоего модуля с клиента будут недоступны
даже если поставить «Вызов сервера»? проверю.
Проверил, все доступно:
&НаКлиенте
Процедура Тест(Команда)
Сообщить(бфф.С());
Р = ТестНаСервере();
бфф.П(Р);
КонецПроцедуры
В модуле бфф:
Функция С() Экспорт
Возврат «С»;
КонецФункции
Естественно, серверным методам не нужно ставить #Если Сервер
Но идея понятна, что не происходит переключение на серверный контекст.
Подумаю, насколько это критично.
Что ты проверил и какое было замечание? У тебя вызов клиентского метода произошел, а замечание про серверные методы. Не годится пример
я написал про серверные методы. Думаю, это небольшое зло. если нужен будет серверный вызов, оформят серверную функцию.
в варианте с глобальными было конечно, круче, но сейчас имеет смысл поставлять библиотеку только в виде расширения.
Начни с вызова серверных методов из клиентских в собственном модуле
не уверен, что прокатит. модуль один, клиент-серверный.
Значит, при вызове с клиента контекст будет клиентский и на серверный не переключится.
>>не уверен, что прокатит. модуль один, клиент-серверный.
Вот именно что не прокатит. А значит идея нерабочая
всегда можно вызвать из серверного модуля.
но я думаю, для таких функций создам зеркальный серверный модуль бффс, в котором просто пропишу вызовы бфф.
Чтобы при желании можно было вызывать с сервера, ок.
То есть вернулись к разделению модулей и идея оказалась нерабочей?
нет. модуль один бфф. а дублирующий бффс для серверных вызовов.
модули по функционалу не делю.
жаль, конечно, глобальные модули были бы круче, но все же сейчас тренд на расширения, а не на допилки в конфигурацию.