Автоматизация рутинных действий — одна из ключевых задач разработчика и администратора 1С. Довольно часто возникает необходимость настроить регулярное выполнение определенной обработки (например, периодическую выгрузку каталога товаров на сайт, обмен данными или загрузку прайс-листов) в клиент-серверной базе без участия пользователя. Рассмотрим подробнее, какими способами можно реализовать запуск обработки по заданному расписанию в конфигурации «1С:Управление торговлей 10.3» и на платформе 1С:Предприятие 8.
В конфигурациях на обычных формах (таких как УТ 10.3) в пользовательском интерфейсе часто отсутствует встроенный справочник регламентных заданий. Основным платформенным механизмом является создание объекта метаданных РегламентноеЗадание. Разберем этот процесс по шагам:
РегламентныеПроцедуры) и убедимся, что у него установлены флажки Сервер, Вызов сервера, а флажки клиентского интерфейса сняты.
Процедура ВыполнитьВыгрузкуТоваровНаСайт() Экспорт
// Если обработка встроена в конфигурацию:
ОбработкаОбъект = Обработки.ВыгрузкаТоваровНаСайт.Создать();
ОбработкаОбъект.Параметр1 = "ЗначениеПараметра";
ОбработкаОбъект.ВыполнитьЭкспорт();
// Если требуется запустить внешнюю обработку (.epf):
// ДвоичныеДанные = Новый ДвоичныеДанные("C:\Обработки\ВыгрузкаНаСайт.epf");
// ИмяВременногоФайла = ВнешниеОбработки.Подключить(ДвоичныеДанные, , Ложь);
// ОбработкаОбъект = ВнешниеОбработки.Создать(ИмяВременногоФайла);
// ОбработкаОбъект.ВыполнитьЭкспорт();
КонецПроцедуры
Общие -> Регламентные задания добавим новый элемент. В его свойствах укажем:
РегламентныеПроцедуры.ВыполнитьВыгрузкуТоваровНаСайт.Платформа 1С предоставляет объектную модель для программного управления расписанием и заданиями через объект МенеджерРегламентныхЗаданий. Это позволяет динамически создавать задание на основе существующего метаданного и настраивать его свойства из кода. Проанализируем пример создания регламентного задания:
// Создание нового регламентного задания на основе метаданного
ИмяМетаданных = Метаданные.РегламентныеЗадания.ВыгрузкаНаСайт;
НовоеЗадание = РегламентныеЗадания.СоздатьРегламентноеЗадание(ИмяМетаданных);
НовоеЗадание.Наименование = "Автоматическая выгрузка на сайт";
НовоеЗадание.Использование = Истина;
// Формирование расписания
Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ПериодичностьДней = 1;
Расписание.ВремяНачала = '00010101080000'; // 08:00
Расписание.ВремяКонца = '00010101200000'; // 20:00
Расписание.ПериодПовтораВДне = 3600; // Каждые 60 минут
НовоеЗадание.Расписание = Расписание;
// Запись задания в базу данных
НовоеЗадание.Записать();
Для администрирования, ручного запуска и изменения параметров созданных заданий в режиме «1С:Предприятие» рекомендуется использовать внешнюю обработку «Консоль регламентных и фоновых заданий» (доступна на диске ИТС и в составе БСП).
Если задача заключается исключительно в штатной выгрузке каталога и цен на веб-сайт, в УТ 10.3 предусмотрен встроенный механизм:
Если база данных находится на полной поддержке и внесение изменений в структуру метаданных нежелательно, можно использовать запуск толстого клиента через системный планировщик задач Windows с передачей параметров командной строки:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" ENTERPRISE /S "ИмяСервера\ИмяБазы" /N "Робот" /P "Пароль" /Execute "C:\Обработки\Выгрузка.epf" /C "РежимВыгрузки=Полный" /DisableStartupMessages
ПриОткрытии или в модуле объекта) прочитаем переданную строку через глобальное свойство ПараметрЗапуска:
Процедура ПриОткрытии()
Если Не ПустаяСтрока(ПараметрЗапуска) Тогда
// Обрабатываем параметры
Если Найти(ПараметрЗапуска, "РежимВыгрузки=Полный") > 0 Тогда
ВыполнитьПолнуюВыгрузку();
Иначе
ВыполнитьЧастичнуюВыгрузку();
КонецЕсли;
// Обязательно закрываем сеанс после завершения работы
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецПроцедуры
.bat файлу и настроив требуемое расписание запуска.При настройке фоновых и регламентных заданий на сервере важно учитывать ряд технических нюансов:
Предупреждение(), Вопрос(), ОткрытьФорму() — их наличие приведет к аварийной остановке задания с ошибкой.ЗаписьЖурналаРегистрации().