Как запустить 1с из 1с

Обновлено: 03.07.2024

Помимо запуска путем выбора соответствующей пиктограммы из меню «Пуск —Программы» операционной системы 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.
Если значения параметров включают пробелы (например, путь или имя файла), значения должны быть заключены в кавычки.

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

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

Сегодня мы поговорим о запуске приложений программным способом. А также о некоторых проблемах и способах их решений под Windows и Linux.

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

Исполни это

Причин, когда такое может понадобиться - много, очень много. Все их рассматривать точно не будем. Остановимся на одном простейшем примере - запуск команды ping, чтобы узнать доступность какого-либо ресурса в сети средствами 1С. Иногда еще ping запускают для эмулирования ожидания (метода Sleep), но мы такое извращение делать не будем :)

Наша задача - запустить какое-либо приложение с параметрами и получить результат его работы. И сделать мы это должны безопасным способом!

Последнее означает, что если запускаемое приложение зависнет, запросит интерактивных действий от пользователя (а на сервере мы ничем ему в этом случае помочь не сможем) или просто будет выполняться дольше выделенного для него времени, то мы должны завершить его работу и продолжить выполнение кода в обычном режиме и обработать исключение. Никому ведь не нужны зависшие сеансы 1С?

Мы рассмотрим несколько решений как для Windows, так и для Linux. И так, поехали.

My Little Windows

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

Решения не идеальные, но простые. Например, там можно найти как сохранить файл в кодировке UTF-8 без BOM, получить путь к файлу PowerShell.exe и др. Решения всегда можно улучшать.

Плохой пример

И так, как обычно выполняется запуск приложений из кода встроенного языка? Правильно - с помощью процедуры "ЗапуститьПриложение()":

Первым параметром передаем строку команды запуска и параметры по необходимости. Во втором устанавливаем каталог, что не обязательно. Третий параметр позволяет дождаться завершения приложения, а четвертый получить код возврата. Обычно если код возврата не равен 0, значит что-то пошло не так.

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


В качестве решения может быть реализация таймаута выполнения команды, но для процедуры "ЗапуститьПриложение" такое реализовать практически невозможно. Можно, конечно, попробовать запустить приложение и ожидать файла-результата какое-то время, но это решит проблему частично. Зависания не будет, но приложение будет запущено и дальше, ожидая внешней команды.

WScript.Shell нас спасет

Мы же в среде Windows. Давайте используем ее средства в виде COM-Объекта "WScript.Shell":

Безопасный запуск команды / скрипта через WScript.Shell

Вот такая портянка для безопасного запуска приложений.

Если кратко, то для выполнения команды добавили таймаут. По истечении времени выполнения, приложение завершается и вызывается исключение.

Теперь приложение не зависнет и в случае чего мы сможем завершить его работу принудительно.

Мое имя Power, PowerShell

Пойдем дальше и сделаем наше решение более интересным. Что, если нам нужно запустить не простую команду CMD или BAT'ник, а команду или скрипт PowerShell, но на тех же условиях! Для примера опять же оставим запуск бесконечного пинга :)

Еще одна портянка кода, но куда без них.

Принцип тот же самый, что и в примере выше. Отличие находится в области "ПодготовкаСкриптаPowerShell", где выполняется подготовка скрипта PowerShell для запуска и установка необходимых параметров для приложения PowerShell.exe. Иначе параметры безопасности не дадут нормально запустить скрипт. Подробнее об этом читайте на MSDN.

Фактически, теперь можно запускать любые скрипты хоть CMD, хоть PowerShell. А если сильно хочется, то можно и GIT Bash под Windows использовать или даже подсистему WSL под Windows 10. Но все это уже другая история. Осталось поговорить про Linux.

*.nix is my own

Под *.nix привычнее всего использовать bash для выполнения команд. Можно ли использовать bash из встроенного языка платформы 1С? Да, можно. Можно запускать как отдельные команды, так и целые скрипты. При этом получать результат и, что самое главное, делать это безопасно как в примерах выше.

В далеком 2015 году на Mista была поднята тема "Запуск файлов *.sh в самой 1с". Возможно, информация ниже будет ответом на вопрос, т.к. точного ответа так там и нет. Но может быть я не прав :)

Запускаем bash-скрипты

Первое, что нужно понять - в Linux нет COM-объектов. Значит придется обойтись штатными средствами платформы 1С. Выглядеть это будет так:

Здесь мы устанавливаем произвольный текст команды для Bash и выполняем его. В чем то прием аналогичен тому, что мы делали для Windows. Комментарии даны полные, но на паре моментов остановимся подробнее.

Некоторые нюансы

Первое, что может показаться интересным - это вызов "dos2unix" для сформированного ранее файла скрипта. Зачем это нужно? В операционной системе Windows по умолчанию для переноса строк в файлах используется последовательность символов "\r\n" (перевод каретки + перенос строки). В Unix-подобных системах используется только символ переноса строки "\n". Для Windows символ перевода каретки был добавлен для того, чтобы в древние времена можно было отправлять на печать текст без каких-либо особых драйверов. Телетайп навсегда! Этот легаси остался и по сей день и никому не мешает, ну почти.

Нам же он может сильно помешать по двум причинам:

  1. Несмотря на то, что сервер 1С установлен под Linux - все равно стандартный перенос строки платформа формирует как "\r\n". Даже если для таких классов как "ЗаписьТекста" или "ТекстовыйДокумент" устанавливать символ переноса строки другой (например, Симполв.ПС или по коду символа переноса строки равному 10), то платформа все равно использует символ перевода каретки.
  2. Еще может быть ситуация, когда текст команды для выполнения передается с клиента под управлением Windows на сервер под Linux и символы перевода каретки будут там присутствовать.

Мешать они будут потому что Bash не понимает что с ними делать. Если в файле скрипта будет содержаться символ "\r", то мы получим ошибку:

Вот, например, обсуждение подобной проблемы. Так вот, с помощью команды "dos2unix" можно убрать все символы, несовместимые содержимым скрипта Bash и сделать его корректным. На скриншоте ниже показан пример преобразования содержимого скрипта. (Да, я использую Notepad++ даже в Linux, если Вы его узнали).


Конечно, тут есть минус - пакет "dos2unix" должен быть установлен на сервер. Сделать это проще простого. Вот так это, например, выглядит для Ubuntu:

Но это не единственная особенность. Для того, чтобы ограничить время выполнения команды мы используем штатные возможности - команду timeout. С ее помощью мы можем указать сколько времени выделяется для выполнения команды / скрипта.

В примере выше мы выполняем некоторый скрипт с таймаутом 10 секунд. Подробнее смотрите мануал :)

Теперь Вы можете запускать приложения, скрипты или команды с помощью Bash из Linux безопасным способом.

Скрытая угроза

Частным случаем запуска процессов небезопасным образом является использование COM-объектов. Не все COM-объекты порождают процессы, которые нужно контролировать. Но, например, всеми любимые Word и Excel, которые часто до сих пор ставят на сервера, делают именно так. Они запускают соответствующий процесс "word.exe" или "excel.exe" и дальше управляют им. Не говоря уже про чистоту использования лицензий (эта тема касалась здесь), это еще и не всегда безопасно с точки зрения работы этих приложений.

Тут все просто - в момент создания объекта документа для его обработки как-раз и создается процесс "word.exe". После завершения всех необходимых действий, метод "Quit" закрывает приложение и все работает как надо. Но что, если в момент выполнения алгоритма заполнения произойдет ошибка? Правильно, метод "Quit" не будет выполнен и процесс Word'а останется "висеть". Конечно, можно попытаться обезопасить себя как это рекомендует стандарт разработки 1С и добавить "попытку":


Тут мы пытаемся закрыть приложение и освободить все связанные ресурсы. Часть кейсов это решит, но, к сожалению, не все. Если, например, в момент работы с COM-объектом возникнет не исключение, а падение рабочего процесса, то никакие действия по освобождению ресурсов выполнены не будут и процесс останется висеть в памяти до перезагрузки сервера / компьютера. Ну или пока не будет "убит" принудительно.

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

А у Вас на сервере бывают ситуации с десятком запущенный процессов "excel.exe"? :)

Альтернативные подходы

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

  • Организовать bat/ps/bash скрипт, который будет ночью "убивать" определенные процессы. Например, те же "excel.exe". Костыль? Да. Работает? Да.
  • Сохранять в базе 1С (например, в регистре сведений) информацию о запущенных процессах (идентификатор процесса, имя и др.). Ночью или в другое время запускать регл. задание, которое будет проверять завершение этих процессов. Костыль? Да. Работает? Да.
  • Перезагружать сервер с периодичностью в несколько дней. О сколько проблем можно решить! :) Костыль? Да. Работает? Да :)))


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

Удачи, друзья!

Всем чистого кода, хороших решений и меньше "костылей"! До следующих встреч!

А как Вы работаете со сторонними процессами из 1С?

Другие ссылки

    - инструмент для выполнения команд CMD / PowerShell из 1С

Авторские разработки

Транслятор запросов 1С в SQL - инструмент для трансляции запросов платформы 1С в SQL, а также их диагностики.

Просмотр и анализ структуры базы данных (отчет на СКД) - отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.

Просмотр и анализ журнала регистрации (отчет на СКД) - отчет на базе системы компоновки данных (СКД) для просмотра записей журнала регистрации.

История работы пользователей (отчет на СКД) - отчет для просмотра истории работы пользователей (СКД, просмотр для любого пользователя).

Экспорт журнала регистрации. Набор инструментов (приложения + исходный код) - набор инструментов для экспорта данных журнала регистрации во внешние хранилища для Windows и Linux. Готовые приложения и исходный код.

Путеводитель по истории релизов - отчет по истории выпуска релизов продуктов фирмы "1С" и анализа информации по обновлениям.

    Помощник работы с идентификаторами объектов - инструмент для расширенного анализа идентификаторов объектов.

Анализ производительности APDEX (бесплатный) - отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.

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

Пакетная выгрузка / загрузка внешних отчетов и обработок - пакетная выгрузка / загрузка внешних отчетов и обработок для массовый манипуляций с ними.

Мастер полнотекстового поиска - набор инструментов для работы с полнотекстовым индексом платформы 1С. Стандартные и расширенные возможности.

Командный интерпретатор для 1С - инструмент для выполнения команд CMD / PowerShell из 1С

На первом уроке нашего курса мы с вами установили программу 1С Предприятие 8.3 и конфигурацию 1С Бухгалтерия 8.3. Кроме этого, мы с вами создали две информационные базы:
- Бухгалтерия предприятия учебная – это пустая информационная база для изучения программы 1С Бухгалтерия и заполнения её данными;
- Бухгалтерия предприятия учебная (демо) – это информационная база, которая содержит демонстрационные данные для более наглядного знакомства с возможностями программы 1С.


Запуск программы 1С Бухгалтерия 8.3

Для запуска программы 1С Бухгалтерия 8.3 используем ярлык "1С Предприятие", расположенный на Рабочем столе нашего компьютера (ноутбука).
Перед нами открывается Окно запуска программы 1С.


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

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

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

Режим «1С:Предприятие» - это основной режим работы в программе. Именно в данном режиме работают бухгалтеры, менеджеры, кадровики и т.д.

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

В рамках нашего курса мы с вами будем работать в режиме 1С:Предприятие и лишь иногда использовать режим Конфигуратор (например, на 3 уроке курса).

На уроках нашего курса мы рекомендуем знакомиться с возможностями 1С Бухгалтерии в демонстрационной базе «Бухгалтерия предприятия учебная (демо)» и обращаться к пустой (чистой) информационной базе «Бухгалтерия предприятия учебная» только при необходимости. Здесь следует отметить, что в демонстрационной информационной базе уже заведены пользователи, но у них незаполненные (пустые) пароли.

Знаю, что многих раздражает необходимость ввода имени и пароля пользователя при входе в базу. Особенно для "тройки" (1С:Бухгалтерия 3.0), в которой пользователь "Администратор" с пустым паролем появился автоматически при переходе со второй редакции:

01

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

Вариант первый

1. Запустите окно 1С и выделите в нём нужную базу:

02

03

3. В "Дополнительных параметрах запуска" нам нужно прописать наши имя пользователя и пароль вот в таком виде: /Nимя /Pпароль

Обращаю ваше внимание, что /N и /P пишется английскими буквами.

К примеру, если мы входим в базу под пользователем Администратор с пустым паролем наши параметры будут выглядеть так:

04

Внимание! Если у вас нет пароля, то есть он пустой, имеет смысл вообще не указывать /P. Тогда строка параметров будет такой: /NАдминистратор

Если же мы входим в базу под пользователем Вася с паролем 123, то так:

05

Ну в общем вы поняли, что ничего сложного в составлении этой строки нет

Кстати! Если ваше имя или пароль содержат в себе пробелы, то их нужно заключать в кавычки, например:

/N"Василий Петров" /P"Мой пароль"

После настройки строки параметров запуска нажимаем кнопку "Готово" и пробуем войти в базу.

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

Вариант второй

Если вы пользуетесь моим Обновлятором - всё намного проще.

В этом случае достаточно один раз выделить базу в списке и прописать пользователя (и пароль если требуется) для доступа к базе:


После этого можно смело запускать базу через двойной щелчок или через контекстное меню базы:


Имя и пароль пользователя больше вводить не потребуется.

Мы молодцы, на этом всё

Кстати, подписывайтесь на новые уроки.

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

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

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