Как сделать программное ожидание 1с

Добавил пользователь Валентин П.
Обновлено: 05.10.2024

Рейтинг: 166

Запускает указанный процесс с параметрами и ожидает завершения его и дочерних процессов 1 уровня. Можно указать произвольный таймаут, по истечении которого ожидание прерывается. Также можно заставить скрипт принудительно завершить родительский и дочерние процессы, которые не завершились сами к моменту наступления таймаута.

Скрипт пришлось родить для запуска баз по именам с помощью стартера платформы 1С 8.3.

Известная проблема состоит в том, что стартер (1cestart.exe) завершается раньше запущенного им дочернего процесса, что делает использование команды Start бессмысленым. Данный скрипт опрашивает список процессов по идентификатору родительского процесса PID средствами WMI с указанным интервалом, и завершается, когда ссылок на PID не остается.

Теперь можно забыть о прописывании версий и прочих индивидуальных настроек баз в скрипты, а указывать только файл списка баз (или сослаться на него из 1cv82\common\1CESCmn.cfg) и имя базы - все остальное стартер найдет в списке баз.

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

Разумеется, применение этого скрипта не ограничивается запуском 1С, единственное ограничение - дочерние процессы 2 и следующих уровней не просматриваюся. Допилить на этот случай не так просто, выйдет динамический WMI-запрос неопределенной длины, и наверняка будут проблемы с его исполнением.

Запуск нужно производить при помощи "cscript //nologo . ", чтобы избежать появления диалоговых окон.

Толком не тестил (отладчика под рукой нет, а наколенная разработка уже не радует), но у клиентов работает без нареканий.

Версия 1.0.4, 2015-06-02.
Добавлен контроль времени создания дочерних процессов.
Вероятность попадания процессов с идентичным PID родителя в список ожидания завершения сведена почти к нулю (почти - потому что в некоторых случаях не удается точно определить время запуска и/или завершения корневого процесса).

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

(1) kuzyara, ога! Сам по тому скрипту настраивал архивирование, дополнив его сбросом сделанного архива на ftp(бухгалтеры просили для аудиторов такое устроить). Думаю, Powershell гораздо гибче и удобнее в таких вопросах

(2) GreenDragon, Согласен, гибче и удобнее - если не считать размера интерпретатора и настройку инфраструктуры, чтобы оно вообще могло выполняться. В корпоративной полностью настроенной сети, когда вся автоматизация писана на PS, это выгодно, но не для точечного применения с многократной загрузкой интерпретатора из CMD-скриптов.
WSH многократно легче и совместим с любыми версиями Windows, актуальными на текущий момент. Да и данная конкретная задача таких мощностей не требует.

Это ты о чём вообще?

И зачем в принципе cmd, когда всё прекрасно пишется на PS?


Актуальными на данный момент можно считать только операционки, выпущенные после WinXP. Все они работают с PS (Хотя и WinXP тоже поддерживает PS)

(6) GreenDragon, О времени запуска первого скрипта для начала - PS раскочегаривается медленнее жабы. Но это как раз мелочи.
А вот скажи, ты все скрипты свои подписываешь или демократию у себя в сети развел?
Инструмент действительно мощный, и чтобы ваять вредоносный код на нем семи пядей во лбу быть не надо.
Билли (или кто там теперь рулит) не зря по умолчанию поставил политику restricted.

У CMD своя ниша, у PS - своя. Там, где нужно подряд запустить несколько программ с почти статическими параметрами, раскочегаривать PS нет никакого смысла. Причем ниша последнего сильно наступает на владения компилируемых языков, и приблуды сложнее выложенного здесь скрипта я бы предпочел делать с использованием полноценного отладчика. Того гляди GUI на нем писать начнут, как на питоне и подобных.
CMD безусловно убогий и кривой, зато простой и быстрый. Замечательно, что MS родил наконец что-то не такое глючное и сравнимое по возможностям с интерпретаторами под Linux 30-летней выдержки (и даже слегка перестарался :)), но срочно переползать на него и переписывать имеющееся хозяйство нет никакого желания. Они бы начали делать его лет 15 назад вместе с ядром NT :(

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

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

События жизненного цикла формы

Открытие объекта в форме
Запись объекта в форме
  • ПередЗаписью( ) — Анализ готовности вспомогательных данных для записи объекта
  • ОбработкаПроверкиЗаполненияНаСервере( , ) — Проверка данных, не относящихся к объекту.
    • ПроверяемыеРеквизиты содержит массив имен реквизитов формы
    • ОбработкаПроверкиЗаполнения( , ) — Всё, что относится к проверкам реквизитов основного объекта БД.
      • ПроверяемыеРеквизиты содержит массив имен реквизитов объекта
      • ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) — Объект — основной реквизит формы объекта;
        • ТекущийОбъект — объект, который реально будет записан в БД. Анализировать данные и дозаполнять реквизиты нужно через ТекущийОбъект, модификация Объекта ни к чему не приведет. Обработчик вызывается только при записи из формы
        • ПередЗаписью( ) — Вызывается при любом способе записи. Данные объекта записываются в БД, но транзакция не закрывается
        • ПриЗаписи( ) — Выполняются действия над доп.данными, которые неразрывно связаны с основными данными объекта
        • ПриЗаписиНаСервере( , , ) — Предназначение аналогично ПриЗаписи(), но при обработке доп.данных можно использовать данные формы.
          • ТекущийОбъект — данные, которые были записаны в БД, работать следует именно с ним; Объект — данные основного реквизита формы, которые были до записи, его модификация бесполезна. Если это запись нового объекта, то у Объект свойство Ссылка пустое, а у ТекущийОбъект уже заполнено
          • ПослеЗаписи( ) — Действия, которые невозможно выполнить на сервере, или требующие интерактивного взаимодействия с пользователем. Объект гарантированно записан
          Закрытие формы
          • ПередЗакрытием( , , , ) — Проверка, можно закрыть форму или нельзя. Если отключить стандартную обработку, то форма будет закрыта, независимо от модифицированности
            • ЗавершениеРаботы
              Тип: Булево.
              В параметр передается признак того, что форма закрывается в процессе завершения работы приложения
            • ПриЗакрытии( ) — Выполняется, если форма 100% закрывается. На момент вызова пользователь форму уже не видит
              • ЗавершениеРаботы
                Тип: Булево.
                В параметр передается признак того, что форма закрывается в процессе завершения работы приложения: Истина — если в процессе завершения приложения; Ложь — если закрывается только форма.

              События формы

              ? Форма: ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

              Событие вызывает метод ОповеститьОВыборе( ) в подчиненной форме, при открытии которой был установлен Владелец.

              Фокус формы и ТекущийЭлемент

              Оповещение формы

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

              • ИмяСобытия — Строка, содержит идентификатор вида оповещения
              • Параметр — произвольные данные, передаваемые формам
              • Источник — произвольные данные, передаваемые в качестве источника

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

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

              Все описанные процедуры подключения, вызова и обработки выполняются &НаКлиенте:

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

              🤘

              Cyber_Hawk

              Участник

              Если есть доступ на сервер приложения 1с то можно попробовать перезапустить службу сервера 1с.
              Если появляется такое

              Ошибка соединения с сервером 1С:Предприятие Не запущен ни один рабочий процесс. Соединение с базой невозможно.

              то вот несколько вариантов поиска ошибок и решений:

              Ошибка соединения с сервером 1С:Предприятие 8.2 server_addr=tcp://SERVER:1540 descr=Ошибка сетевого доступа к серверу (Windows Sockets - 10061(0x0000274D). Подключение не установлено, т.к. конечный компьютер отверг запрос на соединение.) line=590 file=.\Src\DataExchangeTcpClientItmpl.cpp

              Для Windows зайдите в каталог c:\program files\1c\1cv82\srvinfo, если Linux - то файлы лежат в домашнем каталоге пользователя от имени которого запускается сервис: usr1cv8/home/.1cv8/1C/1cv8 .

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

              1С фоновое задание

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

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

              Вот что выдаст система если не учесть эти особенности, и запустить фоновое задание в файловом варианте информационной базы.

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

              Какие же средства мы имеем для управления фоновыми заданиями? Этим средством является объект метаданных"МенеджерФоновыхЗадания". У этого объекта есть метод "Выполнить", с помощью этого метода, как раз и запускается фоновое задание.

              Имеет он следующие параметры: "ИмяМетода" - имя процедуры или функции, которую нужно выполнить, причем это должна быть процедура или функция серверного контекста; "Параметры" - массив параметров, количество элементов которого должно соответствовать количеству параметров нашей процедуры/функции, указанной в параметре "ИмяМетода"; "Ключ" - некий ключ уникальности, представляющий из себя строчку, по которой система понимает нужно ли запускать фоновое задание либо такое задание уже запущено; "Наименование" - здесь можно указать произвольное описание нашего метода.

              Возвращаемым значением является объект "ФоновоеЗадание", содержащий текущее имя метода, текущий ключ и еще несколько свойств и методов. Одним из таких методов является метод "ОжидатьЗавершения". Его задачей является то, что мы может указать системе, чтобы ничего не производилось пока не будет завершено фоновое задание.

              Фоновое задание 1С 8.2, 8.3 - Пример использования

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

              Для этого:

              1. Создадим общий модуль "ОбработчикиФоновыхЗаданий", который будет компилироваться на стороне сервера;

              Общий модуль ОбработчикиФоновыхЗаданий

              2. Опишем в нем экспортную процедуру "ПроизветиФоновоеВычисление(Параметр)", которая принимает один параметр строкового типа;

              3. Далее создадим внешнюю обработку и в событии нажатия на кнопку поместим код, запускающий наш алгоритм;

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

              Общий модуль ОбработчикиФоновыхЗаданий

              Теперь обеспечим произведение этих вычислений в фоне, то есть чтобы фоновое задание 1С 8.2, 8.3 выполнялось, но нам не мешало.

              Для этого:

              1. В обработке, в событии нажатия кнопки пропишем следующий код.

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

              Готово. Теперь можем проверять. Перезапускаем нашу обработку нажимаем кнопку, система не подвисает и мы работаем беспрепятственно.

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

              Приведенный выше пример показывает, как работает фоновое задание 1С 8.2, 8.3. То, каким полезным оно может быть в разработке ваших алгоритмов.

              Вы еще не читали? Вам это будет интересно.

              Рабочие процессы 1С

              Пример работы с деревом значений в 1С. Часть вторая - Добавление возможности проставления галок и сопоставление строке картинки.

              Пример работы с деревом значений в 1С. Часть вторая - Добавление возможности проставления галок и сопоставление строке картинки.Рассмотрим на примере, как в дерево значений добавить возможность проставления галок и сопоставлять каждой конкретной строке требуемую нам картинку.

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

              Пример работы с деревом значений в 1С. Часть первая - добавление строк.Работа с деревом значений немного отличается от работы с таблицей значений, в частности это видно на операции добавления строк. Смотрим на примере.

              Отладка фоновых (регламентных) заданий в 1С 8

              Отладка фоновых (регламентных) заданий в 1С 8Иногда возникает необходимость отладить фоновое (регламентное) задание. Как раз с этим-то, зачастую, и возникает проблема.

              Удаленное программирование в 1С. Какие преимущества?

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

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