1с как из клиентского общего модуля вызвать серверную функцию
Перейти к содержимому

1с как из клиентского общего модуля вызвать серверную функцию

  • автор:

Правила создания общих модулей

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

1.2. При разработке общих модулей следует выбирать один из четырех контекстов выполнения кода:



2.1. Серверные общие модули предназначены для размещения серверных процедур и функций, не доступных для использования из клиентского кода. В них реализуется вся внутренняя серверная бизнес-логика приложения.
Для корректной работы конфигурации в режимах внешнего соединения, управляемого и обычного приложений, серверные процедуры и функции следует размещать в общих модулях с признаками:

  • Сервер (флажок Вызов сервера снят),
  • Клиент (обычное приложение) ,
  • Внешнее соединение .

В таком случае гарантируется возможность вызова серверных процедур и функций с параметрами мутабельных типов (например, СправочникОбъект , ДокументОбъект и т.п.). Как правило, это:

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

Серверные общие модули называются по общим правилам именования объектов метаданных .
Например: РаботаСФайлами , FilesOperations .

В отдельных случаях для предотвращения конфликта имен со свойствами глобального контекста может быть добавлен постфикс «Сервер» (англ. «Server» ).
Например: РегламентныеЗаданияСервер , ScheduledJobsServer .

2.2. Серверные общие модули для вызова с клиента содержат серверные процедуры и функции, доступные для использования из клиентского кода. Они составляют клиентский программный интерфейс сервера приложения.
Такие процедуры и функции размещаются в общих модулях с признаком:

  • Сервер (флажок Вызов сервера установлен)

Серверные общие модули для вызова с клиента называются по общим правилам именования объектов метаданных и должны именоваться с постфиксом «ВызовСервера» (англ. «ServerCall» ).
Например: РаботаСФайламиСлужебныйВызовСервера , FilesOperationsInternalServerCall .

Следует иметь в виду, что экспортные процедуры и функции в таких общих модулях не должны содержать параметров мутабельных типов ( СправочникОбъект , ДокументОбъект и т.п.), так как их передача из (или в) клиентского кода невозможна.

2.3. Клиентские общие модули содержат клиентскую бизнес-логику (функциональность, определенную только для клиента) и имеют признаки:

  • Клиент (управляемое приложение) ,
  • Клиент (обычное приложение) .

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

Клиентские общие модули именуются с постфиксом «Клиент» (англ. «Client» ).
Например: РаботаСФайламиКлиент , FilesOperationsClient .

2.4. Для того чтобы избежать дублирования кода, рекомендуется создавать клиент-серверные общие модули с теми процедурами и функциями, содержание которых одинаково на сервере и на клиенте. Такие процедуры и функции размещаются в общих модулях с признаками:

  • Клиент (управляемое приложение) ,
  • Сервер (флажок Вызов сервера сброшен),
  • Клиент (обычное приложение) ,
  • Внешнее соединение .

Общие модули этого вида именуются с постфиксом «КлиентСервер» (англ. «ClientServer» ).
Например: РаботаСФайламиКлиентСервер , FilesOperationsClientServer .

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

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

3.1. Имена общих модулей рекомендуется строить по общим правилам именования объектов метаданных. Название общего модуля должно совпадать с названием подсистемы или отдельного механизма, процедуры и функции которой он реализует. Рекомендуется избегать в названиях общих модулей таких общих слов как «Процедуры», «Функции», «Обработчики», «Модуль», «Функциональность» и т.п. и применять их только в исключительных случаях, когда они более полно раскрывают назначение модуля.

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

3.2. Дополнительно к общим модулям могут быть добавлены уточняющие постфиксы.

3.2.1. Для глобальных модулей добавляется постфикс «Глобальный» (англ. «Global» ), в этом случае постфикс «Клиент» добавлять не следует.
Например: РаботаСФайламиСлужебныйГлобальный , FilesOperationsInternalGlobal .

3.2.2. Модули, выполняющиеся в привилегированном режиме, имеющие признак Привилегированный , именуются с постфиксом «ПолныеПрава» (англ. «FullAccess» ).
Например: РаботаСФайламиСлужебныйПолныеПрава , FilesOperationsInternalFullAccess .

3.2.3. Модули, предназначенные для реализации на сервере или на клиенте функций с повторным использованием возвращаемых значений (на время вызова или на время сеанса), именуются с постфиксом «ПовтИсп» (англ. «Cached» ) и «КлиентПовтИсп» (англ. «ClientCached» ) соответственно.
Например: РаботаСФайламиСлужебныйКлиентПовтИсп , FilesOperationsInternalClientCached .

3.2.4. Серверные и клиентские модули библиотечных конфигураций (которые предназначены не для самостоятельного использования, а для разработки других конфигураций) с процедурами и функциями, допускающие изменение своей реализации, именуются с постфиксами «Переопределяемый» (англ. «Overridable» ) и «КлиентПереопределяемый» (англ. «ClientOverridable» ).
Например: РаботаСФайламиКлиентПереопределяемый , FilesOperationsClientOverridable .

3.2.5. В локализуемых конфигурациях, на базе которых выпускаются национальные прикладные решения для различных стран или регионов, модули, реализующие национальную специфику, именуются с постфиксами «Локализация» (англ. «Localization» ) и «КлиентЛокализация» (англ. «Client Localization » ).
Например: ЭлктроннаяПодписьСлужебныйЛокализация , ElectonicSignatureInternalLocalization .

Программирование 1С 8.х для начинающих

  • Вы здесь:  
  • Вызов сервера из внешней обработки в обычном приложении

Общие вопросы

Вызов сервера из внешней обработки в обычном приложении

  •  Печать 
  • E-mail

В обычном приложении переход на сервер используется в меньших случаях, чем в управляемых формах.

Единственным известным мне способом вызова сервера из внешней обработки является использование фоновых заданий.

Например есть общий модуль «ОбщийМодульСервер» у которого стоит только флажок «Сервер» и в нём есть экспортная функция «ПолучитьСамыеПродаваемыеНоменклатуры(КонтрагентПокупатель, КоличествоНоменклатур)»

Во внешней обработке эта функция будет не видна поскольку весь код исполняется на Клиенте. Но для фоновых заданий она доступна, поэтому пишем следующее:

Из кода видно, что мы вызываем функцию общего модуля строкой, а параметры передаем в массиве в том порядке в котором они указаны в функции

УФ. Как из клиентской процедуры вызвать серверную функцию?

Добрый день. У меня в УФ есть общий модуль, у него стоят галочки "Клиент", "Сервер", "Вызов сервера". В нем есть клиентская процедура, которая вызывает серверную функцию:
&НаСервере
функция ПолучитьДатуСреза()
возврат НачалоДня(Константы.шапДатаПоследнегоСреза.Получить());
конецфункции

&НаКлиенте
Процедура шапПриНачалеРаботыСистемы() Экспорт
//сообщить("При начале работы системы");
если ПолучитьДатуСреза()+7*24*3600>НачалоДня(ТекущаяДата()) тогда

И почему то ругается синтаксический контроль, что ПолучитьДатуСреза не обнаружена. Подскажите пожалуйста, как лечить? Очень надо из клиентской процедуры вызвать серверную функцию.

Модули в 1с

Модули – объекты методичных, в которых содержится программный код и определяющие поведение приложения.

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

Виды модулей

  • Общими.
  • Принадлежащие отдельным объектам.
  • Модули состоят из процедур и функций.

Отдельным объектам метаданных принадлежат:

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

Общие модули

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

    Пример общего модуля 1с

    • Вы создадите один или несколько общих модулей УчетНДС<…>:
      • УчетНДССервер
      • УчетНДСКлиент
      • РаботаСТабличнымиЧастямиКлиент
      • РаботаСТабличнымиЧастямиСервер

      Свойства общих модулей

      Как у любых объектов метаданных, у модулей есть свойства:

      • Имя – по нему программист обращается к модулю в коде, например, УчетНДС.СуммаНДС().
      • Синоним – Ни на что не влияет, существует просто потому что есть у всех объектов.
      • Комментарий – как правило, не заполняется, но программист может оставить там какую-то информацию.

      Отдельные флажки управляют доступностью модуля:

      • Глобальный – код в таких модулях можно вызывать, не указывая имя модуля. Загружается в память при старте 1с.
      • Сервер – код будет доступен на сервере.
      • Клиент – код будет доступен на клиенте.
      • Внешнее соединение – код будет доступен для подключения извне.
      • Вызов сервера – код будет доступен на клиенте, но работать будет на сервере.

      Отдельно разберем свойства Привилегированный и Повторное использование возвращаемых значений

      • Флажок Привилегированный означает, что исполнение кода будет игнорировать права доступа.
      • Поле ввода Повторное использование возвращаемых значений позволяет включить кэширование результатов операций модуля.
      Глобальные модули
      • Обычно к коду модуля обращаются, указав имя модуля и, после то��ки, имя процедуры или функции:
      • Иногда код нужен настолько часто, что программист не хочет каждый раз писать имя модуля.
        • Тогда его размещают в глобальном общем модуле.
        • Злоупотреблять этим не следует:
          • Объявив процедуру или функцию в глобальном модуле, вы лишаетесь возможности объявить одноименный объект в других частях конфигурации.
          • Например, приложению нужно время от времени проверять уведомления о новых задачах или письмах.
          • В этом случае создается глобальный обработчик ожидания и размещается в глобальном общем модуле.
          Клиентские модули
          • Клиентские модули исполняются в клиентском приложении:
            • в тонком клиенте;
            • в толстом клиенте;
            • в веб-клиенте (т.е. в браузере);
            • в мобильном клиенте.
            • Например, к файлам или к сертификату электронной подписи.

            Примеры клиентского общего модуля:

            • Код, вызываемый перед закрытием любой формы.
              • Показывает вопрос пользователю.
              • Предупреждает пользователя о чем-то.
              • Например, форму вопроса или ввода многострочного комментария.
              Серверные модули
              • Модули с флажком Сервер исполняются на сервере (при работе в клиент-серверном режиме) или, в файловом режиме – на клиенте.
              • Отвесают, как правило, за бизнес-логику и за взаимодействие с СУБД
                • В трехзвенной архитектуре обращение к СУБД с клиента запрещено.

                Пример серверного общего модуля:

                • Код, получащиий из БД данные указанного объекта.
                  • Например, реквизиты контрагента.
                  • Учет взаиморасчетов;
                  • Учет НДС;
                  • Учет остатков товаров.

                  Если есть выбор, лучше придерживаться принципа:

                  Все, что может выполняться на сервере и не является немедленной реакцией на действия пользователя, должно размещаться на сервере.

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

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

Тип общего модуля Пример наименования Вызов сервера Сервер Внешнее соединение Клиент
(обычное приложение)
Клиент
(управляемое приложение)
1. Серверный ОбщегоНазначения (или ОбщегоНазначенияСервер)
2. Серверный для вызова с клиента ОбщегоНазначенияВызовСервера
3. Клиентский ОбщегоНазначенияКлиент (или ОбщегоНазначенияГлобальный)
4. Клиент-серверный ОбщегоНазначенияКлиентСервер