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

Всем привет.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Запись опубликована в рубрике Торговля 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 для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.