Запуск внешней обработки по расписанию в конфигурации «Управление торговлей 11»

Всем привет.

В комментариях к статье был задан в вопрос «Как пользоваться в УТ11 запуском СВОИХ обработок по расписанию«.

Постараюсь все подробно объяснить. Начнем.

1. Скачать шаблон обработки.

2. Отредактировать процедуру «СведенияОВнешнейОбработке» в модуле обработке. Все выделенные параметры на рисунке заменить на свои значения

Сведения о внешней обработке

3. Описать код команды для выполнения. Для этого необходимо отредактировать процедуру «ВыполнитьКоманду«.

Выполнение команды

4. Добавить обработку для выполнения и настроить расписание.

  • Перейти в раздел «Администрирование» и выбрать пункт в панели навигации «Печатные формы, отчеты и обработки». Выполнить пункт «Дополнительные отчеты и обработки».

Открыть доп. обработки

  • В форме списка обработок и печатных форм по кнопке «Создать» добавить нашу обработку

Обработка с расписанием

  • В колонке «Расписание» настраиваем наш регламент.
  • После всех настроек необходимо выполнить команду «Записать и закрыть»

Если все выполнено правильно, то обработка будет добавлена в список регламентных заданий.

Обработка в списке рег. заданий

Популярность: 91%

Запись опубликована в рубрике Торговля 3.0 для РБ с метками . Добавьте в закладки постоянную ссылку.

45 Responses to Запуск внешней обработки по расписанию в конфигурации «Управление торговлей 11»

  1. irina говорит:

    Спасибо за помощь! Все понятно. Очень понравились все ваши материалы. Доступно и просто.

  2. pmwn говорит:

    в списке регламентных заданий написано что выполнено, но на самом деле обработка ничего не сделала. Нажимаю Выполнить сейчас — все отрабатывает корректно. В чем может быть проблема?

    • Сергей Сопелев говорит:

      1. Посмотрите в журнале регистрации, может есть ошибки при выполнении задания планировщиком
      2. Если ошибок нет, добавьте в код вывод отладочной информации в журнал регистрации.
      3. Какой у Вас релиз торговли?

    • Тимофей говорит:

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

      • Сергей Сопелев говорит:

        Здравствуйте. Проверил на платформе 8.3.6.2041 конфигурация «УТ 11.1.10.86 (файловая)» — обработка запускает и код выполняется. Проверить можно прописав
        перед началом выполнения команды ДополнительныеОтчетыИОбработки.ЗаписатьИнформацию(ПараметрыВыполненияКоманды, "До выполнения команды");
        там где выполняется команда ДополнительныеОтчетыИОбработки.ЗаписатьИнформацию(ПараметрыВыполненияКоманды, "Выполнение команды");
        Затем посмотреть в журнале регистрации результат.
        Если записей не будет, тогда надо искать причину, в коде конфигурации либо в настройках (возможно используются профили безопасности и обработка выполняется
        в безопасном режиме либо установлено выполнение в безопасном режиме, что накладывает свои ограничения).

  3. Сергей Семенов говорит:

    В списке регламентных и фоновых есть , выполнить сейчас — все выполняется ,по расписанию — не запускается…Конфа бух 3.0 типовая. Не подскажите в чем может быть дело? И версия БСП в параметрах регистрации если нужна , то откуда взять?

    • Сергей Сопелев говорит:

      Здравствуйте.
      К сожалению Вы не уточнили какой у Вас тип СУБД (файловый или клиент-серверный) и релиз конфигурации.
      Если клиент-серверный, то должно все выполняться если нет ограничений в настройках базы в кластере (регламентные и фоновые задания отключены).
      Если файловый, то например в Бух 3.0.23 надо было запускать отдельный сеанс для выполнения регламентных заданий.
      Из последних версий проверил шаблон из статьи на 3.0.39 — все работает (отдельный сеанс не нужен).

  4. Сергей Семенов говорит:

    в том то и дело , что клиент-сервер и в кластере не стоит галка запрета.

    • Сергей Сопелев говорит:

      К сожалению есть какая то особенность в Вашей базе, потому проверил на демо-базе Бух 3.0.39 платформа 8.3.6 на клиент-сервере, тоже все хорошо.

    • Сергей Семенов говорит:

      сама обработка делает COM соединение с другой базой , может где то надо добавить права? Насильственно я запускаю ее под администратором , а по расписанию она под кем запустится(под какими правами)?

      • Сергей Сопелев говорит:

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

  5. Татьяна говорит:

    Пишу:

    Функция СведенияОВнешнейОбработке() Экспорт
    РегистрационныеДанные = Новый Структура;
    РегистрационныеДанные.Вставить("Вид", "ДополнительнаяОбработка");
    РегистрационныеДанные.Вставить("Наименование", "Прайс по отобранным соглашениям с КЗ расширенный серв.3");
    РегистрационныеДанные.Вставить("Версия", "3.00");
    РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);
    РегистрационныеДанные.Вставить("Информация", "Прайс по отобранным соглашениям с КЗ расширенный серв.3");
    ТЗКоманды = Новый ТаблицаЗначений;
    ТЗКоманды.Колонки.Добавить("Идентификатор");
    ТЗКоманды.Колонки.Добавить("Представление");
    ТЗКоманды.Колонки.Добавить("Модификатор");
    ТЗКоманды.Колонки.Добавить("ПоказыватьОповещение");
    ТЗКоманды.Колонки.Добавить("Использование");
    СтрокаКоманды = ТЗКоманды.Добавить();
    СтрокаКоманды.Представление = "Прайс по соглашениям c кратностью Заказа расширенный серв";
    СтрокаКоманды.ПоказыватьОповещение = Ложь;
    //СтрокаКоманды.Использование = "ОткрытиеФормы";
    строкаКоманды.Использование = "ВызовСерверногоМетода";
    СтрокаКоманды.Идентификатор = "Прайс расширенный регламентный";
    СтрокаКоманды.Модификатор = "";
    РегистрационныеДанные.Вставить("Команды", ТЗКоманды);
    Возврат РегистрационныеДанные;
    КонецФункции

    Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды)
    Если ИдентификаторКоманды = "Прайс расширенный регламентный" Тогда
    ЗаполнитьНастройки();
    СформироватьНаСервере() ;
    КонецЕсли;
    КонецПроцедуры

    ….
    Регистрирую обработку в УТ11 (клиент-сервер). Задаю ей расписание (запуск внешних… разрешен). После сохранения расписание очищается. Регламентное задание не создается. Обработка «руками» запускается и работает нормально.
    В чем может быть дело, не подскажете?

    • Сергей Сопелев говорит:

      Здравствуйте.
      В указанный код я бы добавил в процедуру «СведенияОВнешнейОбработке» строку

      РегистрационныеДанные.Вставить("ВерсияБСП", "1.2.1.4");

      и процедуру «ВыполнитьКоманду» сделал бы экспортной.
      С внесенными правками в присланный код, обработка корректно отработала на платформе 8.3.6.2100 и конфигурации «УТ 11.1.10»

  6. Татьяна говорит:

    Не помогло. Может, версия БСП не та? Как её узнать? УТ у меня 11.1.2.10

    • Сергей Сопелев говорит:

      Здравствуйте.
      К сожалению данная проблема связана с конфигурацией УТ 11.1.2
      В коде общего модуля «ДополнительныеОтчетыИОбработкиРегламентныеЗадания» есть ошибка: нет проверки что включено разделение и конфигурация работает в модели сервиса.
      Здесь два способа решения, но все они связаны с редактирование конфигурации
      1. В общем модуле «ДополнительныеОтчетыИОбработкиРегламентныеЗадания» изменить процедуру «НайтиЗадание».
      Условие

      "Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда"

      переписать на

      Если ОбщегоНазначенияПовтИсп.РазделениеВключено()
      И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда

      2. Подсистему «ДополнительныеОтчетыИОбработкиВМоделиСервиса» в ветке «СтандартныеПодсистемы.РаботаВМоделиСервиса» переименовать например на «ДополнительныеОтчетыИОбработкиВМоделиСервиса_», но
      это при условие что у Вас не используется разделение.

  7. Татьяна говорит:

    Сергей, разделение у нас включено. Внесла рекомендованные Вами изменения по первому пункту. Ругань пошла несусветная на неправильное использование разделяемых данных. Стала смотреть в отладчике… Все хорошо вплоть до записи Задания. А когда выходим на Форму, расписание становится недоступным для редактирования и пустым.

    По второму варианту внести нужное расписание с созданием регламентного задания удалось. Теперь буду ждать его исполнения. Есть сомнение: при таком методе параметры задания не помещаются в Хранилище, а при отработке модуля в модели сервиса при создании Задания параметры и расписание помещаются в Хранилище.

    • Сергей Сопелев говорит:

      Здравствуйте.
      1. Хочу сказать, что в УТ 11.1.2.10 есть ошибки в общем модуле «ДополнительныеОтчетыИОбработкиРегламентныеЗадания».
      Во всех функциях должна быть проверка «ОбщегоНазначенияПовтИсп.РазделениеВключено()», по крайней мере так в УТ 11.1.2.27
      2. Когда используется разделение данных, то используются другие объекты метаданных: в обычном режиме — объект метаданных «Регламентные задания»;
      в режиме «разделение данных» — объект справочник «ОчередьЗаданий» и «ОчередьЗаданийОбластейДанных» и запускает их отдельное регламентное задание.
      Исходя из пункта 1 полагаю что есть ошибки и в других модулях, которые отвечают за работу регламентных заданий.

      • ddr говорит:

        там еще есть где добавить
        Если ОбщегоНазначенияПовтИсп.РазделениеВключено()
        И

        Функция СоздатьНовоеЗадание(Знач Наименование) Экспорт

        Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует(«СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса») Тогда
        Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль(«ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса»);
        Возврат Модуль.СоздатьНовоеЗадание();
        КонецЕсли;

        Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(«ЗапускДополнительныхОбработок»);
        Задание.Использование = Ложь;
        Задание.Наименование = Наименование;
        Задание.Записать();

        Возврат Задание;

        КонецФункции

  8. Татьяна говорит:

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

  9. Александр говорит:

    Конфа не УТТ, а фитнес 1с

    Ни как не пойму чего ей надо, в БП отрабатывает нормально.

    {ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(682)}: Значение не является значением объектного типа (Метаданные)
    ЗаписьЖурналаРегистрации(НСтр(«ru = ‘Дополнительные отчеты и обработки'»),

    • Сергей Сопелев говорит:

      Добрый день. В статье описывается пример для работы с конфигурациями, построенными на базе БСП.
      Я к сожалению не знаю есть ли БСП в конфигурации «Фитнес», а если есть какой версии.

      Я бы Вам посоветовал сравнить процедуру, где возникает ошибка, с такой же процедурой в конфигурации «БП»

  10. Екатерина говорит:

    Здравствуйте, Сергей,
    подскажите пожалуйста, как обойти
    Предупреждение безопасности

    Открывается «Шаблон обрабтки с запуском по расписанию».

    Рекомендуется обращать внимание на источник, из которого был получен данный файл. Если с источником нет договоренности о разработке дополнительных модулей, или есть сомнения в содержимом файла, то его не рекомендуется открывать, поскольку это может нанести вред компьютеру и данным.

    Разрешить открывать данный файл?
    Это пишется в журнал регистрации, и естественно, действий никаких не происходит.
    в вашу обработку добавила только «Сообщить(«Надо позвонить «);»
    Спасибо

  11. Дмитрий говорит:

    Спасибо. Редко встретишь лаконичную и полезную инфу по 1С на просторах интернета. Статья помогла все сделать за 5 мин!

  12. Anton говорит:

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

    • Сергей Сопелев говорит:

      В процедуре «СведенияОВнешнейОбработке» описываете еще одну команду с методом «Открытие формы»

      
      	Команда = ПараметрыРегистрации.Команды.Добавить();
      	Команда.Представление = НСтр("ru = 'Параметры запуска'");
      	Команда.Идентификатор = "ФормаНастройки";
      	Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
      	Команда.ПоказыватьОповещение = Истина;
      

      Создаете форму и назначаете ее основной. На форме добавляете реквизиты какие Вам необходимы для работы рег.задания (например я сделал «Страна мира»)
      Обязательно в параметрах формы должны быть параметры «ДополнительнаяОбработкаСсылка» тип «СправочникСсылка.ДополнительныеОтчетыИОбработки» и «ИдентификаторФормы» тип строка.
      Пример формы
      Добавляете кнопку по записи параметров. Обработчик будет типа такого

      
      &НаКлиенте
      Процедура ЗаписатьИЗакрыть(Команда)
      	СохранитьНастройкиФормы(Параметры.ДополнительнаяОбработкаСсылка, СтранаМира);
      	Закрыть();
      КонецПроцедуры
      
      &НаСервереБезКонтекста
      Процедура СохранитьНастройкиФормы(ДополнительнаяОбработкаСсылка, СтранаМира)
      	СохраняемоеЗначение = Новый Структура("СтранаМира", СтранаМира);
      	
      	ДополнительнаяОбработкаОбъект = ДополнительнаяОбработкаСсылка.ПолучитьОбъект();
      	ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(СохраняемоеЗначение);
      	ДополнительнаяОбработкаОбъект.Записать();
      КонецПроцедуры
      

      И дальше уже в модуле объекта в процедуре «Выполнить команду» получить сохраненные данные

      
      Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт
      	ХранилищеНастроек = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрыВыполнения.ДополнительнаяОбработкаСсылка, "ХранилищеНастроек");
      	Настройки = ХранилищеНастроек.Получить();
      	Если ТипЗнч(Настройки) = Тип("Структура") Тогда
      		СтранаМира = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Настройки, "СтранаМира");
      	КонецЕсли;
      	
      	ВыполнитьДальше(СтранаМира);
      КонецПроцедуры
      

      При открытии формы настроек также надо еще прочитать сохраненные данные.

      
      &НаСервере
      Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
      	Если ЗначениеЗаполнено(Параметры.ДополнительнаяОбработкаСсылка) Тогда
      		ХранилищеНастроек = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
      			Параметры.ДополнительнаяОбработкаСсылка,
      			"ХранилищеНастроек");
      		Настройки = ХранилищеНастроек.Получить();
      		Если ТипЗнч(Настройки) = Тип("Структура") Тогда
      			СтранаМира = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Настройки, "СтранаМира");
      		КонецЕсли;
      	Иначе
      		Параметры.ИдентификаторКоманды = "ФормаНастройки";
      	КонецЕсли;
      КонецПроцедуры
      
  13. Вадим говорит:

    Спасибо друже! Часто помогает Ваш чудесный сайт!

  14. Евгений говорит:

    все сделал, как написано, но в модуле обработки команда ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды), не «видит» 2й параметр… выдается ошибка «недостаточно фактических параметров..», которую можно исправить если переписать так:
    ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды=неопределено)… что ессно не хорошо…

    • Сергей Сопелев говорит:

      Здравствуйте. Для какой версии БСП вы делаете обработку или какая у Вас версия УТ? Бывает отличаются реализации.

      • Евгений говорит:

        Розница 2.3.4

        • Сергей Сопелев говорит:

          В процедуре «СведенияОВнешнейОбработке» установить версию БСП как 2.2.2.1 (ПараметрыРегистрации.Вставить(«ВерсияБСП», «2.2.2.1»)) — это если вы брали за основу обработки из статьи.
          Либо ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(«2.2.2.1»);

          • Евгений говорит:

            заработало!

          • Евгений говорит:

            но если я правильно понял, это не последняя версия БСП… а как интересно в актуальной?

            • Сергей Сопелев говорит:

              Это пример из последней версии БСП 3.1

              • Евгений говорит:

                тогда совсем не понятно… в итоге у меня команда модуля «увидела» параметры после «понижения» версии БСП как вы и посоветовали…

                • Сергей Сопелев говорит:

                  Что там внутри я сильно не смотрел по этому поводу, но это пример из документации к БСП 3.1
                  Для версии БСП 3.0 в примерах документации так указано

                  
                  ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
                  
                  
  15. Евгений говорит:

    просто не могу сообразить как передать в ПараметрыВыполненияКоманды сохраненные настройки обработки (из реквизитов формы)…

  16. Ева говорит:

    Добрый вечер.
    Регламентное задание создано из обработки, видно в списке регламентных.
    Вручную запускается. Все нормально.
    Ждем автоматического запуска — его не происходит.
    В чем может быть дело?
    Строка в расписании сейчас такая: «каждый день; каждые 100 секунд».
    Пробовали разные варианты.

    • Ева говорит:

      в данный момент так:
      Функция СведенияОВнешнейОбработке() Экспорт

      ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(«3.1.2.424»);
      ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
      ПараметрыРегистрации.Наименование = НСтр(«ru=’Выгрузка ФОТ ‘»);
      ПараметрыРегистрации.Информация = НСтр(«ru=’Выгрузка данных ФОТ'»);
      ПараметрыРегистрации.Версия = «1.0»;
      ПараметрыРегистрации.БезопасныйРежим = Ложь;

      Команда = ПараметрыРегистрации.Команды.Добавить();
      Команда.Идентификатор = «ВыгрузкаФОТ»;
      Команда.Представление = «Выгрузка ФОТ «;
      Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

      Возврат ПараметрыРегистрации;

      КонецФункции

      • Сергей Сопелев говорит:

        Здравствуйте. Попробуйте так.

        
        ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
        

        или

        
        ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
        
  17. Иван говорит:

    Добрый день! Сделал, всё как описано — опять же, если выполнить обработку через кнопку «Выполнить» — всё работает отлично, однако!
    Если поставить регламентное задание — оно не выполняется, по журналу регистрации после начала задания происходит отмена..
    Что может быть?
    УТ 11.4

Добавить комментарий для Сергей Сопелев Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.