1с выполнить команду на сервере

Обновлено: 07.07.2024

Использование встроенного языка на сервере 1С:Предприятия

Для вызова встроенного языка на сервере 1С:Предприятия используются общие модули.

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

В демонстрационной конфигурации "Примеры ИТС" приведен пример вызова процедуры на сервере 1С:Предприятия. Для этого используется общий модуль ВыполнениеОперацийНаСервере. У него установлено свойство "Сервер" и не установлено свойство "Клиент". Поэтому процедуры этого модуля не будут располагаться на клиенте, и их вызов будет приводить к переходу управления на сервер 1С:Предприятия.

В общем модуле ВыполнениеОперацийНаСервере располагается процедура ПровестиДокументыНаСервере() , которая выполняет перепроведение всех документов указанного вида на сервере. Для вызова этой процедуры используется обработка ОбработкаДокументов() . При вызове данной процедуры в клиент-серверном варианте, так как она располагается только на сервере, выполнятся переход управления на сервер. На сервере выполняется данная процедура и после ее выполнения управление возвращается вызывающей процедуре на клиенте.

Свойства модулей регулируют расположение процедур в целом для модуля. Оно также может регулироваться и для отдельных процедур инструкциями препроцессора.

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

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

Следует учитывать, что на сервере используется только определенное подмножество типов данных 1С:Предприятия. У некоторых типов при работе на сервере не доступны некоторые свойства и методы. В основном это касается интерфейсных возможностей. На сервере недоступны все механизмы, отвечающие за интерфейс. В документации для типов данных, а также отдельных свойств и методов указывается возможность использования на сервере 1С:Предприятия. Из всех интерфейсных возможностей на сервере доступен только вызов метода Сообщить() .

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

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

Кроме задач повышения производительности, выполнение встроенного языка на сервере 1С:Предприятия может использоваться для решения вопросов ограничения прав доступа. Для этого используется свойство общего модуля Привилегированный.

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

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

На клиенте на сервере

Немного теории о стороне выполнения кода. При работе 1С в режиме клиент-сервера, запускается несколько процессов. На компьютере пользователя запускается 1cv8.exe, на сервере 1С запускается rphost.exe, rmngr.exe и ragent.exe.

ragent.exe

Приложение ragent.exe это по сути и есть наша служба агента 1С, которую мы можем посмотреть в списке служб Windows. Данное приложение отвечает за запуск всех остальных приложений и за распределение нагрузки между рабочими rphost.

rphost.exe

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

Количество ИБ на процесс rphost

rmngr.exe

В общем случае данное приложение отвечает за выполнение регламентных заданий.

Сторона выполнения кода

После того, как мы в общих чертах описали приложения, выполняющиеся на сервере, перейдем к описанию директив препроцессора, т.е. тех самых &НаКлиенте, &НаСервере. В зависимости от того, на какой стороне выполняется код, мы имеем доступ к файлам либо пользовательского компьютера, либо к файлам на сервере. При этом очень важно понимать, что код &НаКлиенте выполняется с правами пользователя, запустившего 1С. Код &НаСервере выполняется с правами пользователя, под которым запущена служба агента 1С. Как правило, это пользователь USR1CV8, если никто этого не поменял.

&НаКлиенте

Код выполняется на том компьютере, за которым сидит пользователь и под теми правами, которые есть у пользователя. Файлы, созданные в процедурах &НаКлиенте будут созданы на пользовательском компьютере. Есть множество ограничений выполнения кода &НаКлиенте, например, здесь нельзя обращаться к СУБД. Это значит нельзя использовать как прямое создание запроса, так и косвенный запрос при обращении к ссылке через точку. Компьютер клиента может быть медленнее сервера, это следует учитывать при написании кода.

&НаСервере

Код выполняется на сервере 1С, в процессе rphost. Файлы, созданные в процедурах &НаСервере, будут сохранены на сервере и смогут быть записаны только в те папки, на которые у пользователя службы агента 1С есть доступ на запись. &НаСервере уже можно свободно писать запросы, обращаться к предопределенным данным и к реквизитам ссылки через точку.

&НаСервереБезКонтекста

Это самый интересный вариант, разберемся для начала, что такое контекст формы. Управляемая форма представляется на уровне платформы в виде XML файла описания расположения элементов и значения реквизитов формы. Соответственно, чем больше элементов на форме и чем больше данных хранится в реквизитах формы, тем больше будет контекст.

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

И вот здесь нам как раз может помочь директива &НаСервереБезКонтекста.

В данном примере произойдет следующее: описание формы, таблица значений с 100000 строк и реквизит1 будут преобразованы в XML, отправлены на сервер. На сервере будет выполнен небольшой неявный запрос к СУБД, в значение реквизит1 будет записан результат этого запроса, все данные опять преобразуются в XML и отправятся на сервер. Учитывая, что таблица значений очень большая, то получится, что мы большой объем данных дважды в холостую передали между клиентом и сервером. Это не оптимально.

Во втором примере мы не стали передавать контекст формы, в итоге произошла только передача ссылки на элемент перечисления с сервера на клиент.

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

Пример 3, предположим, у нас есть название для перечисления, которое хранится в реквизите Реквизит2, мы можем его передать в качестве параметра функции:

Ну и напоследок еще один пример, как делать не надо:

Если мы в качестве параметра передаем ЭтаФорма, то по факту мы внеконтекстный вызов превращаем в контекстный. Если без этого не обойтись, то стоит делать контекстный вызов.

Помимо запуска путем выбора соответствующей пиктограммы из меню «Пуск —Программы» операционной системы MS Windows, запуск системы 1С:Предприятие 8.x может быть выполнен путем запуска исполняемого файла 1CV8.EXE. Такой запуск может быть произведен, например, при помощи пункта «Выполнить» меню «Пуск» операционной системы MS Windows, или двойным щелчком мыши на имени файла 1CV8.EXE в программе Проводник (Explorer).

В командной строке запуска файла 1CV8.EXE можно указать все необходимые параметры: режим запуска, имя каталога с информационной базой, имя пользовательского каталога, и другие. Если параметры командной строки указаны верно, файл 1CV8.EXE будет запущен в одном из режимов запуска: «1С:Предприятие» или «Конфигуратор» — в зависимости от указанных параметров.

Если при запуске файла 1CV8.EXE обнаружена ошибка в параметрах командной строки, или параметры отсутствуют, то после запуска на экран будет выдан диалог «Запуск 1С:Предприятия». В этом диалоге пользователь может выбрать режим запуска файла 1CV8.EXE, имя информационной базы и другие параметры запуска.

Для файлового варианта определен параметр:
File — каталог информационной базы;
Locale — язык (страна), которые будут использованы при создании информационной базы. Допустимые значения такие же как у параметра <Форматная строка> метода Формат. Параметр Locale задавать не обязательно. Если не задан, то будут использованы региональные установки текущей информационной базы.

Для клиент-серверного варианта определены параметры:
Srvr — имя сервера 1С:Предприятия;
Ref — имя информационной базы на сервере;
SQLSrvr — имя SQL сервера;
SQLDB — имя SQL базы данных;
SQLUID — имя пользователя SQL;
SQLPwd — пароль пользователя SQL. Если пароль для пользователя SQL не задан, то данный параметр можно не указывать
SQLYOffs - смещение дат, используемое для хранения дат в SQL Server. Может принимать значения 0 или 2000. Данный параметр задавать не обязательно. Если не задан принимается значение 0.
Locale - язык (страна), (аналогично файловому варианту).

Для всех вариантов определены параметры:
Usr — имя пользователя;
Pwd — пароль
/AddInList - параметр, показывающий, под каким именем добавлять базу в список, если не указан, база не будет добавлена в список. Если не указано имя, используется умолчание, аналогичное интерактивному созданию информационной базы.

Одновременное использование ключей не допускается.

При наличии ссылок на несуществующие объекты:
BadRefCreate - создавать объекты
BadRefClear - очищать объекты
BadRefNone -не изменять

при частичной потере объектов:
BadDataCreate - создавать объекты
BadDataDelete - удалять объекты

Одновременное использование ключей внутри подгруппы параметров не допускается.
Если команда прошла успешно, возвращает код возврата 0, в противном случае — 1 (101, если в данных имеются ошибки).
После выполнения закрывает систему 1С:Предприятие 8.x.

Параметры командной строки пакетного режима создания файлов поставки и обновления:
/CreateDistributionFiles [-cffile<имя cf файла>] [-cfufile <имя cfu файла> [-f<имя cf файла>|-v<версия дистрибутива>]+] - Создание файлов поставки и обновления
-cffile<имя cf файла> - указание создать дистрибутив
-cfufile<имя cfu файла> - указание создать обновление
-f<имя cf файла> - дистрибутив, включаемый в обновление, задан именем
-v<версия дистрибутива>] - дистрибутив, включаемый в обновление, задан версией
Примечание: группа параметров -f<имя cf файла>|-v<версия дистрибутива> повторяется столько раз, сколько файлов дистрибутивов включается в обновление.

Параметры командной строки режима работы с хранилищем конфигурации:
/DepotF - каталог хранилища
/DepotN - имя пользователя хранилища
/DepotP - пароль пользователя хранилища
/DepotDumpCfg<имя cf файла> [-v<номер версии хранилища>] - сохранить конфигурацию из хранилища в файл (пакетный режим)
-v<номер версии хранилища>
v - номер версии, если номер версии не указан, или равен -1, будет сохранена последняя версия.
/DepotUpdateCfg [-v<номер версии хранилища>] [-revised] - Обновить конфигурацию хранилища из файла (пакетный режим)
-v<номер версии хранилища> - номер версии, если номер версии не указан, или равен -1, будет сохранена последняя версия, если конфигурация подключена к хранилищу, то параметр игнорируется
-revised - получать захваченные объекты, если потребуется. Если конфигурация не подключена к хранилищу, то параметр игнорируется.

Параметры командной строки пакетного режима регистрации 1С:Предприятия 8.x в качестве Automation сервера:
/RegServer - регистрация приложения
/UnregServer - удаление регистрации приложения
После выполнения закрывает систему 1С:Предприятие 8.x.
Если значения параметров включают пробелы (например, путь или имя файла), значения должны быть заключены в кавычки.

Помимо запуска путем выбора соответствующей пиктограммы из меню «Пуск —Программы» операционной системы MS Windows, запуск системы 1С:Предприятие 8.x может быть выполнен путем запуска исполняемого файла 1CV8.EXE. Такой запуск может быть произведен, например, при помощи пункта «Выполнить» меню «Пуск» операционной системы MS Windows, или двойным щелчком мыши на имени файла 1CV8.EXE в программе Проводник (Explorer).

В командной строке запуска файла 1CV8.EXE можно указать все необходимые параметры: режим запуска, имя каталога с информационной базой, имя пользовательского каталога, и другие. Если параметры командной строки указаны верно, файл 1CV8.EXE будет запущен в одном из режимов запуска: «1С:Предприятие» или «Конфигуратор» — в зависимости от указанных параметров.

Если при запуске файла 1CV8.EXE обнаружена ошибка в параметрах командной строки, или параметры отсутствуют, то после запуска на экран будет выдан диалог «Запуск 1С:Предприятия». В этом диалоге пользователь может выбрать режим запуска файла 1CV8.EXE, имя информационной базы и другие параметры запуска.

Для файлового варианта определен параметр:
File — каталог информационной базы;
Locale — язык (страна), которые будут использованы при создании информационной базы. Допустимые значения такие же как у параметра <Форматная строка> метода Формат. Параметр Locale задавать не обязательно. Если не задан, то будут использованы региональные установки текущей информационной базы.

Для клиент-серверного варианта определены параметры:
Srvr — имя сервера 1С:Предприятия;
Ref — имя информационной базы на сервере;
SQLSrvr — имя SQL сервера;
SQLDB — имя SQL базы данных;
SQLUID — имя пользователя SQL;
SQLPwd — пароль пользователя SQL. Если пароль для пользователя SQL не задан, то данный параметр можно не указывать
SQLYOffs - смещение дат, используемое для хранения дат в SQL Server. Может принимать значения 0 или 2000. Данный параметр задавать не обязательно. Если не задан принимается значение 0.
Locale - язык (страна), (аналогично файловому варианту).

Для всех вариантов определены параметры:
Usr — имя пользователя;
Pwd — пароль
/AddInList - параметр, показывающий, под каким именем добавлять базу в список, если не указан, база не будет добавлена в список. Если не указано имя, используется умолчание, аналогичное интерактивному созданию информационной базы.

Одновременное использование ключей не допускается.

При наличии ссылок на несуществующие объекты:
BadRefCreate - создавать объекты
BadRefClear - очищать объекты
BadRefNone -не изменять

при частичной потере объектов:
BadDataCreate - создавать объекты
BadDataDelete - удалять объекты

Одновременное использование ключей внутри подгруппы параметров не допускается.
Если команда прошла успешно, возвращает код возврата 0, в противном случае — 1 (101, если в данных имеются ошибки).
После выполнения закрывает систему 1С:Предприятие 8.x.

Параметры командной строки пакетного режима создания файлов поставки и обновления:
/CreateDistributionFiles [-cffile<имя cf файла>] [-cfufile <имя cfu файла> [-f<имя cf файла>|-v<версия дистрибутива>]+] - Создание файлов поставки и обновления
-cffile<имя cf файла> - указание создать дистрибутив
-cfufile<имя cfu файла> - указание создать обновление
-f<имя cf файла> - дистрибутив, включаемый в обновление, задан именем
-v<версия дистрибутива>] - дистрибутив, включаемый в обновление, задан версией
Примечание: группа параметров -f<имя cf файла>|-v<версия дистрибутива> повторяется столько раз, сколько файлов дистрибутивов включается в обновление.

Параметры командной строки режима работы с хранилищем конфигурации:
/DepotF - каталог хранилища
/DepotN - имя пользователя хранилища
/DepotP - пароль пользователя хранилища
/DepotDumpCfg<имя cf файла> [-v<номер версии хранилища>] - сохранить конфигурацию из хранилища в файл (пакетный режим)
-v<номер версии хранилища>
v - номер версии, если номер версии не указан, или равен -1, будет сохранена последняя версия.
/DepotUpdateCfg [-v<номер версии хранилища>] [-revised] - Обновить конфигурацию хранилища из файла (пакетный режим)
-v<номер версии хранилища> - номер версии, если номер версии не указан, или равен -1, будет сохранена последняя версия, если конфигурация подключена к хранилищу, то параметр игнорируется
-revised - получать захваченные объекты, если потребуется. Если конфигурация не подключена к хранилищу, то параметр игнорируется.

Параметры командной строки пакетного режима регистрации 1С:Предприятия 8.x в качестве Automation сервера:
/RegServer - регистрация приложения
/UnregServer - удаление регистрации приложения
После выполнения закрывает систему 1С:Предприятие 8.x.
Если значения параметров включают пробелы (например, путь или имя файла), значения должны быть заключены в кавычки.

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