Настройка автоматического обмена между 1С и сайтом (например, на платформе CS-Cart, Битрикс или Prestashop) — стандартная задача для конфигурации «1С:Управление торговлей 11». Однако при работе в файловом режиме базы данных разработчики и администраторы часто сталкиваются с тем, что регламентное задание обмена упорно отказывается запускаться автоматически. При этом ручной запуск по кнопке «Выполнить сейчас» отрабатывает без нареканий, а другие стандартные задания конфигурации продолжают стабильно функционировать.
В этой статье мы подробно разберем причины такого поведения планировщика 1С, выясним, почему банальная ошибка в настройке расписания может полностью заблокировать работу обмена, и рассмотрим надежные альтернативные варианты запуска регламентных процедур в файловом режиме.
Проанализируем типичную ситуацию настройки расписания, с которой столкнулся автор темы. Изначально расписание было задано следующим образом: «один день; с 8:30:00 по 18:30:00 каждые 600 секунд». При такой настройке система отрабатывает задание ровно один раз в указанную дату начала действия расписания. Как только эти сутки заканчиваются, планировщик 1С считает задачу полностью завершенной и больше к ней не возвращается.
Для того чтобы регламентное задание запускалось регулярно изо дня в день, необходимо изменить этот параметр. Выясним, как правильно настроить периодичность:
После изменения настройки на каждый день планировщик начнет корректно регистрировать необходимость запуска фоновых процессов для выполнения обмена.
В отличие от клиент-серверного варианта работы, где за выполнение расписания отвечает служба кластера серверов 1С, в файловой базе данных физического сервера приложений нет. Всю работу по эмуляции планировщика берет на себя сама платформа внутри запущенных клиентских сеансов пользователей.
Рассмотрим ключевые особенности и ограничения файлового режима:
РоботОбмена) и оставьте этот сеанс открытым. Именно он будет обеспечивать регулярный опрос таблицы заданий и инициацию фоновых процессов.После исправления расписания вы можете столкнуться со следующей проблемой: фоновое задание запускается, мгновенно завершается за 1-2 секунды, а в логах пишется: «Обработано: 0, Загружено: 0. Нет документов для обработки». При этом ручной обмен под тем же пользователем выгружает сотни товаров и заказов. Проанализируем, почему так происходит:
ОбменССайтом. Если регистрация изменений товаров, цен и остатков происходит по узлу «А» (который вы запускаете вручную), а регламентное задание настроено на узел «Б», то автоматический процесс просто не увидит зарегистрированных к выгрузке данных. Проверьте соответствие узлов в настройках сценария обмена.Предупреждение(), Вопрос(), открытие форм или обращение к контексту Клиент). Регламентные задания выполняются исключительно на стороне сервера. При попытке выполнить интерактивное действие в фоновом режиме процесс аварийно завершится (часто «молча», без детального лога в Журнале регистрации).Temp), платформа не сможет сформировать XML-файлы выгрузки (import.xml, offers.xml) для отправки на сайт.Разберем по шагам, как подключиться отладчиком к выполняемому в фоне обмену для локализации ошибок в коде:
Поскольку фоновый обмен при ошибках может пролетать слишком быстро, мы не всегда успеваем физически переключиться на процесс отладки. Чтобы обойти это ограничение, выполним небольшую хитрость: временно установим искусственную задержку в самом начале исполняемой процедуры обмена.
Посмотрим на пример такого кода:
// Временный код в общем модуле для отладки фонового процесса
ТекущееВремяНачала = ТекущаяДата();
Пока ТекущаяДата() - ТекущееВремяНачала < 15 Цикл
// Приостанавливаем выполнение на 15 секунд,
// чтобы успеть перехватить управление в конфигураторе
КонецЦикла;
После этого установите точку останова сразу после цикла ожидания. Как только планировщик запустит задание, конфигуратор автоматически перехватит этот поток выполнения, и вы сможете пошагово проанализировать работу алгоритма обмена.
Если стабильно поддерживать открытые дежурные сеансы в файловой базе 1С затруднительно, наиболее надежным и профессиональным решением будет вынос планирования на уровень операционной системы. Рассмотрим схему реализации этого подхода:
.epf), которая будет программно инициализировать обмен при запуске и закрывать программу.Ниже представлен пример кода для модуля внешней обработки (например, ExchangeStarter.epf):
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Выполняем процедуру обмена на сервере
ВыполнитьПроцедуруОбменаНаСервере();
// Завершаем работу сеанса без лишних вопросов пользователю
ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьПроцедуруОбменаНаСервере()
// Запишем начало операции в Журнал регистрации для контроля
ЗаписьЖурналаРегистрации("ОбменССайтом.ВнешнийЗапуск",
УровеньЖурналаРегистрации.Информация, , ,
"Запущен регламентный обмен через планировщик Windows");
Попытка
// Здесь вызывается метод вашего модуля обмена
// Например: ИнтеграцияССайтомУТ.ВыполнитьОбменПоРасписанию();
Исключение
ЗаписьЖурналаРегистрации("ОбменССайтом.Ошибка",
УровеньЖурналаРегистрации.Ошибка, , ,
ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Теперь настроим запуск этого процесса в Планировщике Windows. Создайте простую задачу с ежедневным повторением каждые 10 минут, где в качестве исполняемого действия укажите запуск командной строки со следующими параметрами:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /F "C:\1C_Bases\UT_SiteExchange" /N "RobotExchange" /P "YourPassword" /Execute "C:\ExternalProc\ExchangeStarter.epf"
Разберем параметры этой строки запуска:
ENTERPRISE — запуск программы в режиме предприятия./F — путь к файловой базе данных 1С./N — имя специально созданного пользователя с полными правами (например, RobotExchange)./P — пароль этого пользователя./Execute — путь к нашей внешней обработке, которая выполнит обмен и закроет сеанс.Использование планировщика операционной системы гарантирует запуск процесса точно по расписанию, снижает нагрузку на оперативную память (так как сеанс запускается только на время выполнения обмена и сразу закрывается) и полностью решает проблему «засыпания» регламентных заданий в файловом режиме базы данных 1С.