Библиотека функция Фиксина в расширении

Один программист запросил у меня код моей библиотеки функций и я хотел выгрузить ему его в файл CF, но призадумался. Сейчас ведь конфигурации никто не меняет, поэтому библиотеку надо делать в расширении. Перенес модули в расширение бфф, но при обновлении конфигурации столкнулся с ошибкой:

Использование глобальных серверных общих модулей в расширении недопустимо
При проверке метаданных обнаружены ошибки!
Операция не может быть выполнена.

Так вот платформа своими идиотскими ограничениями зачеркнула красивую концепцию.

Я сначала расстроился, потом сделал три общих модуля в расширении:

Но мне не нравился подобный подход. Программисту нужно запоминать какая функция серверная, какая клиентская, какая клиент-серверная. Неудобно, некрасиво, непрактично.

В итоге мне пришла мысль оставить один клиент-серверный модуль бфф.

Создал новую конфигурацию, создал в расширении клиент-сереный модуль бфф:

#Если Клиент Тогда
	Функция П(Текст) Экспорт
		ПоказатьПредупреждение(, Текст);
КонецФункции
	
#КонецЕсли       

#Если Сервер Тогда
	Функция Т() Экспорт
		Возврат Новый ТаблицаЗначений();
	КонецФункции
	
#КонецЕсли

Создал тестовую команду:

&НаСервере
Функция ТестНаСервере()
	Т = бфф.Т();
	Возврат Т.Количество() + 1;
КонецФункции

&НаКлиенте
Процедура Тест(Команда)
	Р = ТестНаСервере();
	бфф.П(Р);
КонецПроцедуры

И она отработала успешно:

Следовательно, можно создать только один модуль бфф, и обращаться к нему без размышлений о том, это серверный или клиентский контекст.

Это приободрило меня и я решил, что всё же библиотеке функций быть на расширении.

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

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 12

  1. rzd:

    С пространством имен и модульностью в 1с итак печально, но ты решил пойти дальше назад в 7.7.

  2. undefined behavior:

    Серверные методы твоего модуля с клиента будут недоступны

    • даже если поставить «Вызов сервера»? проверю.
      Проверил, все доступно:

      &НаКлиенте
      Процедура Тест(Команда)
      Сообщить(бфф.С());
      Р = ТестНаСервере();
      бфф.П(Р);
      КонецПроцедуры

      В модуле бфф:

      Функция С() Экспорт
      Возврат «С»;
      КонецФункции

      Естественно, серверным методам не нужно ставить #Если Сервер
      Но идея понятна, что не происходит переключение на серверный контекст.
      Подумаю, насколько это критично.

      • undefined behavior:

        Что ты проверил и какое было замечание? У тебя вызов клиентского метода произошел, а замечание про серверные методы. Не годится пример

        • я написал про серверные методы. Думаю, это небольшое зло. если нужен будет серверный вызов, оформят серверную функцию.
          в варианте с глобальными было конечно, круче, но сейчас имеет смысл поставлять библиотеку только в виде расширения.

          • undefined behavior:

            Начни с вызова серверных методов из клиентских в собственном модуле

          • не уверен, что прокатит. модуль один, клиент-серверный.
            Значит, при вызове с клиента контекст будет клиентский и на серверный не переключится.

  3. undefined behavior:

    >>не уверен, что прокатит. модуль один, клиент-серверный.

    Вот именно что не прокатит. А значит идея нерабочая

    • всегда можно вызвать из серверного модуля.
      но я думаю, для таких функций создам зеркальный серверный модуль бффс, в котором просто пропишу вызовы бфф.
      Чтобы при желании можно было вызывать с сервера, ок.

      • undefined behavior:

        То есть вернулись к разделению модулей и идея оказалась нерабочей?

        • нет. модуль один бфф. а дублирующий бффс для серверных вызовов.
          модули по функционалу не делю.
          жаль, конечно, глобальные модули были бы круче, но все же сейчас тренд на расширения, а не на допилки в конфигурацию.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *