Часто бывает при поднятии BackUp в тестовую базу регламентные задания, которые должны выполнятся только в «боевой» базе начинают выполнятся в тестовой, хотя это совсем не нужно или вообще недопустимо. Чтобы быть полностью уверенным что задание не отработает в тестовой базе, я решил добавить небольшой код в начало метода регламентного задания.
В этом коде просто выполняется проверка в какой базе выполняется это регламентное задание, если это не нужная мне база я прерываю выполнение. Собственно сам код для клиент-серверной архитектуры:
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
ПолучитьИмяСервера = Сред(СтрокаСоединения, Найти(СтрокаСоединения, «Srvr»)+6);
ПолучитьИмяСервера = Сред(ПолучитьИмяСервера, 1, Найти(ПолучитьИмяСервера, «;»)-2);
ПолучитьИмяБазы = Сред(СтрокаСоединения, Найти(СтрокаСоединения, «Ref»)+5);
ПолучитьИмяБазы = Сред(ПолучитьИмяБазы, 1, Найти(ПолучитьИмяБазы, «;»)-2);
Если ВРег(ПолучитьИмяСервера) <> «SERVER» Или ВРег(ПолучитьИмяБазы) <> «BASE» Тогда
Возврат;
КонецЕсли;
где «SERVER» и «BASE» — это имя сервера 1с Предприятия и имя базы соответственно, должны указываться в верхнем регистре.
Код для файловой базы:
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
ПолучитьПутьКБазе = Сред(СтрокаСоединения, Найти(СтрокаСоединения, «File»)+6);
ПолучитьПутьКБазе = Сред(ПолучитьПутьКБазе, 1, Найти(ПолучитьИмяБазы, «;»)-2);
Если ВРег(ПолучитьПутьКБазе) <> «C:1CV8BASE» Тогда
Возврат;
КонецЕсли;
Где «C:1CV8BASE» — путь к катологу файловой базы, необходимо указать в верхнем регистре.
Понимаю, что есть еще множество разных решений, но вдруг кому пригодится.
для серверной этот вариант не подойдет?
Вообще с точки зрения надежности и администрирования регламентные задания 1с лучше вообще не использовать. бывало что одно из заданий по разным причинам валило весь кластер либо все предприятие все вылетали. прервать штатными средствами невозможно, можно только перезапустить службу 1с. Для себя выбрал назначенные задачи windows.
(1) SpartakM, Ну конечно подойдет. Ну, а когда создали новую базу и туда подняли бэкап и забыли поставить, либо не знающий админ без программиста забыл поставить. А в коде если прописать то решается проблема забыть поставить флаг, либо если поднимет кто нибудь другой.
На личном опыте знаю)) У меня фин. дир. периодически на выходных поднимает себе бэкап для своих целей, и соответственно никто флаг не ставит.
(2) Angeros, Хм интересно, учту. У меня пока такого не случалось.. И сеанс фонового задания даже не завершался? А через задачи Windows запускаешь 1ску и в ней написанную отдельно обработку?
(4) запускается батник, в нем прописана 1с и через /С прописано уид команды. 1с запускается и все понимает что был передан уид команды и там все далее прописано что делать. т.к. это на серваке никого не парят открытые окна, в случае коллапса видно что где как выполняется(оконный интерфейс, прогресс бары). можно тутже все срубить если что не так… Работает стабильно без нареканий…
Воттут ms200999 разместил по этому поводу вот такую картинку
(2) Angeros, странно, до сих пор все регламентные работали как надо и когда надо. Неужели у всех такой негатив? Я наборот считаю их удобными.
(6) ShantinTD, я то поэтому и написал для двух различных вариантов работы разный код.
(7) Hany, У меня тоже всегда все отрабатывает на ура, не разу не замечал описанное в (2). тьфу тьфу тьфу, чтоб не сглазить))
(1)у меня реализована подобная вещь, только через константу :), т.к. иногда в тестовых версия регламентные нужны, просто с другими настройками + хардкодить не люблю
(2)активно пользуюсь именно регламентными 1С, да, описанная вами проблема в 8.1 существует, но в сети есть варианты решений, а вот запускать клиентские сессии для выполнения некоторых регламентных процедур считаю не верным, по многим причинам.
(2) И не согласен, что
В консоли заданий кнопка «Отменить выполнение» — сколько ни пробовал, всегда срабатывает.
(11) gaglo,
у меня бывало такое. Сейчас Роботы (рег.задания) каждый день обрабатывают по несколько файлов (1-20 шт) от 70 подразделений каждый день и на многие сами пишут ответы (после загрузки или не загрузки в базу). Все работает корректно, но пока система ставилась — бывали проблемы и помогала только перезагрузка сервера. Для себя понял, что если при отработке задания возникло модальное окно — то «В консоли заданий кнопка «Отменить выполнение»» не помогает
Минус в том, что проверка жестко закреплена программным кодом. А идея хороша для забывчивых.
Лучше при запуске РЗ проверять, совпадает ли строка подключения с сохраненной в константе, и если не совпадает — программно отключать все разрешенные к выполнению РЗ.
(12) — Откуда возьмется модальное окно в фоновом задании?
(14) gaglo,
1С взаимодействует с другим приложением — приложение выдавало свое окно (в этом окне на сервере некому нажать на какую либо кнопку). Может я неверно выразился, написав «модальное окно».
Так же пользуюсь блокировкой регламентных заданий, очень нужная в отладке вещь.
Использую справочник с предопределенными данными (регламентными заданиями). В справочник можно запихнуть куча параметров, такие как: использовать или не использовать рег задание в тестовой базе, оповещать о завершении,…
Все базы серверные и имена у них уникальны, поэтому проверяем только на имя БД.
Показать
Так же блокировку можно использовать при отправке сообщений из базы.
Показать
Но лучше вынести проверку в отдельную экспортную функцию.