4. | Клиент-серверный | ОбщегоНазначенияКлиентСервер |
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.х для начинающих
- Вы здесь:




- Вызов сервера из внешней обработки в обычном приложении
Общие вопросы
Вызов сервера из внешней обработки в обычном приложении
В обычном приложении переход на сервер используется в меньших случаях, чем в управляемых формах.
Единственным известным мне способом вызова сервера из внешней обработки является использование фоновых заданий.
Например есть общий модуль «ОбщийМодульСервер» у которого стоит только флажок «Сервер» и в нём есть экспортная функция «ПолучитьСамыеПродаваемыеНоменклатуры(КонтрагентПокупатель, КоличествоНоменклатур)»
Во внешней обработке эта функция будет не видна поскольку весь код исполняется на Клиенте. Но для фоновых заданий она доступна, поэтому пишем следующее:
Из кода видно, что мы вызываем функцию общего модуля строкой, а параметры передаем в массиве в том порядке в котором они указаны в функции
УФ. Как из клиентской процедуры вызвать серверную функцию?
Добрый день. У меня в УФ есть общий модуль, у него стоят галочки "Клиент", "Сервер", "Вызов сервера". В нем есть клиентская процедура, которая вызывает серверную функцию:
&НаСервере
функция ПолучитьДатуСреза()
возврат НачалоДня(Константы.шапДатаПоследнегоСреза.Получить());
конецфункции
&НаКлиенте
Процедура шапПриНачалеРаботыСистемы() Экспорт
//сообщить("При начале работы системы");
если ПолучитьДатуСреза()+7*24*3600>НачалоДня(ТекущаяДата()) тогда
И почему то ругается синтаксический контроль, что ПолучитьДатуСреза не обнаружена. Подскажите пожалуйста, как лечить? Очень надо из клиентской процедуры вызвать серверную функцию.
Модули в 1с
Модули – объекты методичных, в которых содержится программный код и определяющие поведение приложения.
В Платформе существует достаточно большое количество видов модулей, каждый из которых имеет свое предназначение и особенности.
Виды модулей
- Общими.
- Принадлежащие отдельным объектам.
- Модули состоят из процедур и функций.
Отдельным объектам метаданных принадлежат:
- Модули форм, описывающие поведение экранных форм.
- Модули объектов, описывающие поведение отдельных экземпляров объектов. Например, поведение конкретного товара из справочника номенклатура.
- Модули менеджеров, описывающие поведение целого класса объектов. Например, всех контрагентов из справочника контагенты.
- Модули самой конфигурации.
Общие модули
- Общие модули находятся в ветке дерева метаданных Общие.
- Содержат код, необходимый разным объектам конфигурации.
- Например, если во многих документах нужен код, рассчитывающий сумму и НДС, не нужно копировать его в каждый документ:
- Рискуя совершить ошибки.
- Затрудняя последующее изменение.
Пример общего модуля 1с
- Вы создадите один или несколько общих модулей УчетНДС<…>:
- УчетНДССервер
- УчетНДСКлиент
- РаботаСТабличнымиЧастямиКлиент
- РаботаСТабличнымиЧастямиСервер
- …
Свойства общих модулей
Как у любых объектов метаданных, у модулей есть свойства:
- Имя – по нему программист обращается к модулю в коде, например, УчетНДС.СуммаНДС().
- Синоним – Ни на что не влияет, существует просто потому что есть у всех объектов.
- Комментарий – как правило, не заполняется, но программист может оставить там какую-то информацию.
Отдельные флажки управляют доступностью модуля:
- Глобальный – код в таких модулях можно вызывать, не указывая имя модуля. Загружается в память при старте 1с.
- Сервер – код будет доступен на сервере.
- Клиент – код будет доступен на клиенте.
- Внешнее соединение – код будет доступен для подключения извне.
- Вызов сервера – код будет доступен на клиенте, но работать будет на сервере.
Отдельно разберем свойства Привилегированный и Повторное использование возвращаемых значений
- Флажок Привилегированный означает, что исполнение кода будет игнорировать права доступа.
- Поле ввода Повторное использование возвращаемых значений позволяет включить кэширование результатов операций модуля.
Глобальные модули
- Обычно к коду модуля обращаются, указав имя модуля и, после токи, имя процедуры или функции:
- Иногда код нужен настолько часто, что программист не хочет каждый раз писать имя модуля.
- Тогда его размещают в глобальном общем модуле.
- Злоупотреблять этим не следует:
- Объявив процедуру или функцию в глобальном модуле, вы лишаетесь возможности объявить одноименный объект в других частях конфигурации.
- Например, приложению нужно время от времени проверять уведомления о новых задачах или письмах.
- В этом случае создается глобальный обработчик ожидания и размещается в глобальном общем модуле.
Клиентские модули