Skip to content
лого - блог 1с программиста

Блог 1С программиста

Наработки, заметки и другая информация по 1С

  • Главная
  • Типовые конфигурации
    • ЗУП 3.1
      • Разработка
        • Обработки
        • Отчеты
        • Печатные формы
        • Расширения
      • Инструкции
      • Ответы техподдержки 1С
      • Общие вопросы
    • ДО 2.1
    • УХ 3.2
    • УПП 1.3
  • Интеграции и обмены
  • Шаблоны и заготовки
    • Типовые приемы
    • Отчеты
    • Обработки
    • Печатные формы
    • Расширения
  • Платформа 1С
  • Разработки
    • Контакты
  • Toggle search form

Запуск внешней обработки через «Длительную операцию»

Posted on 19 сентября 24 г.20 сентября 24 г. By Алексей 1 комментарий к записи Запуск внешней обработки через «Длительную операцию»

Содержание:

  • Файлы материала
  • Описание
  • Листинг кода «Обработки с командой запуска»
  • Листинг кода «Внешней обработки со сложным расчетом»
  • Дополнение
Файлы материала
Обработка с командой запуска (УФ)Скачать
Внешняя обработка со «Сложным расчетом» (УФ)Скачать
Запуск внешней обработки через Длительную операцию
Описание

Все серверные вызовы, которые могут длиться больше 8 секунд 1С рекомендует реализовывать через длительные операции, более подробно из официальных источников можно почитать тут.

В данной статье приведен пример «Внешней обработки со сложным расчетом» и «Обработки с командой запуска» этого расчета в фоновом режиме — через «Длительную операцию» (протестировано на ЗУП 3.1 с БСП 3.1.7.343).

«Внешняя обработка со сложным расчетом» предварительно должна быть подключена в разделе Администрирование -> Печатные формы, отчеты и обработки -> Дополнительные отчеты и обработки.

Листинг кода «Обработки с командой запуска»

Формируем команду запуска внешней обработки и выполняем ее в фоне через длительную операцию.

1С (Код)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ЗапуститьВыполнениеСложногоРасчета(Команда)
// 1. Заполнение команды вызова "Внешней обработки"
ВыполняемаяКоманда = Новый Структура(
"Ссылка, Представление,
|Идентификатор, ВариантЗапуска, ПоказыватьОповещение,
|Модификатор, ОбъектыНазначения, ЭтоОтчет, Вид");
ЗаполнитьКомандуНаСервере(ВыполняемаяКоманда);
Если Не ЗначениеЗаполнено(ВыполняемаяКоманда.Ссылка) Тогда
Возврат;
КонецЕсли;
ЗаголовокСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Выполняется команда ""%1""'"),
ВыполняемаяКоманда.Представление);  
// 2. Запуск фонового задания на сервере.
ДлительнаяОперация = НачатьВыполнениеСервернойКомандыВФоне(ВыполняемаяКоманда, УникальныйИдентификатор);
// 3. Подключение обработчика завершения фонового задания
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ТекстСообщения = ЗаголовокСостояния;
ПараметрыОжидания.ОповещениеПользователя.Показать = Истина;
ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
ВыполняемаяКоманда.ЭтоОтчет = Ложь;
ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеЗавершенияВыполненияСервернойКомандыВФоне", ЭтотОбъект, ВыполняемаяКоманда);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
 
КонецПроцедуры
#КонецОбласти
 
#Область СлужебныеПроцедурыИФункции
&НаСервереБезКонтекста
Процедура ЗаполнитьКомандуНаСервере(ВыполняемаяКоманда)
СсылкаОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Внешняя обработка со сложным расчетом");
 
ВыполняемаяКоманда.Ссылка = СсылкаОбработка;
ВыполняемаяКоманда.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ВыполняемаяКоманда.Представление = НСтр("ru = 'Выполнить сложный расчет'");
ВыполняемаяКоманда.Идентификатор = "АВ_ВыполнеиеСложногоРасчета";
ВыполняемаяКоманда.ВариантЗапуска = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
ВыполняемаяКоманда.ЭтоОтчет = Ложь;
 
КонецПроцедуры
 
&НаСервере
Функция НачатьВыполнениеСервернойКомандыВФоне(ВыполняемаяКоманда, УникальныйИдентификатор)
ИмяПроцедуры = "ДополнительныеОтчетыИОбработки.ВыполнитьКоманду";
ПараметрыПроцедуры = Новый Структура("ДополнительнаяОбработкаСсылка, ИдентификаторКоманды, ОбъектыНазначения");
ПараметрыПроцедуры.ДополнительнаяОбработкаСсылка = ВыполняемаяКоманда.Ссылка;
ПараметрыПроцедуры.ИдентификаторКоманды          = ВыполняемаяКоманда.Идентификатор;
ПараметрыПроцедуры.ОбъектыНазначения             = ВыполняемаяКоманда.ОбъектыНазначения;
НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
НастройкиЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Дополнительные отчеты и обработки: Выполнение серверного метода обработки'");
Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, НастройкиЗапуска);
КонецФункции
 
&НаКлиенте
Процедура ПослеЗавершенияВыполненияСервернойКомандыВФоне(Задание, ВыполняемаяКоманда) Экспорт
Если Задание = Неопределено Тогда
Возврат;
КонецЕсли;
Если Задание.Статус = "Ошибка" Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось выполнить команду по причине:
|%1.'"), Задание.КраткоеПредставлениеОшибки);
Иначе
Результат = ПолучитьИзВременногоХранилища(Задание.АдресРезультата);
ОповеститьФормы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ОповеститьФормы");
Если ОповеститьФормы <> Неопределено Тогда
СтандартныеПодсистемыКлиент.ОповеститьФормыОбИзменении(ОповеститьФормы);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
Листинг кода «Внешней обработки со сложным расчетом»

Перед исполнением необходимо подключить в «Дополнительны отчетах и обработках»

1С (Код)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#Область ПрограммныйИнтерфейс
// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки
 
// Возвращает сведения о внешней обработке.
//
// Возвращаемое значение:
//   см. ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке
//
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73"); // ВерсияБСП
//ПараметрыРегистрации.Наименование =  НСтр("ru = 'Выполнение сложного расчета'");
ПараметрыРегистрации.Информация = НСтр("ru = 'Выполнение сложного расчета'");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0.1.1";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = НСтр("ru = 'Выполнить сложный расчет'");
Команда.Идентификатор = "АВ_ВыполнеиеСложногоРасчета";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Команда.ПоказыватьОповещение = Истина;
Команда.Модификатор = "";
//Команда.ЗаменяемыеКоманды = "ПереченьСотрудников";
Возврат ПараметрыРегистрации;
КонецФункции
// Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки
 
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
Если ИдентификаторКоманды = "АВ_ВыполнеиеСложногоРасчета" Тогда
ВыполнитьСложныйРасчет();
КонецЕсли;
КонецПроцедуры
 
Процедура ВыполнитьСложныйРасчет() Экспорт
// тут сложный расчет
КонецПроцедуры
#КонецОбласти
Дополнение

Если при выполнении команды не появляется окно с «Колесом загрузки», то возможно вы находитесь в режиме отладки.

Отладка длительной операции

Рекомендации

  • Шаблон "Внешней обработки с запуском по расписанию" (УФ)
  • Программное заполнение документа "Перенос данных"
  • Шаблон сохранения настроек для внешней обработки
Обработки, Шаблоны и заготовки Tags:длительная операция

Навигация по записям

Previous Post: Как включить РМК в УПП 1.3
Next Post: Расхождение резервов (НУ) и оценочных обязательств (БУ) по отпускам после инвентаризации ЗУП 3.1

Комментарий (1) on “Запуск внешней обработки через «Длительную операцию»”

  1. Илья:
    12 декабря 25 г. в 11:30

    В сведених БезопасныйРежим лучше делать = Истина
    А дальше использовать разрешения
    // Разрешения
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина,Истина,»Требуется хранение и обработка временных файлов, создаваемых в процессе работы»);
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);

    А то при размещении в облаке могут быть сложности.

    Ответить

Добавить комментарий Отменить ответ

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

ДзенTelegram

Разработки

  • Печатная форма "Расходный кассовый ордер" для ЗУП 3.1 Печатная форма "Расходный кассовый ордер" ЗУП 3.1 650,00 ₽
  • Отчет "План-факт отпусков сотрудников в виде диаграммы Ганта Отчет "План-факт по отпускам сотрудников" ЗУП 3.1 650,00 ₽
  • Приказ об отмене трудового договора (рис 1) Печатная форма "Отмена приема на работу" ЗУП 3.1 650,00 ₽
  • Обработка “Выплата сотруднику через банк” ЗУП 3.1 Обработка “Выплата сотруднику через банк” ЗУП 3.1 0,00 ₽
  • Тестирование API Яндекс GPT Обработка "Работа с API YandexGPT" 650,00 ₽

MDM web-сервис XML БСП ЕФС-1 ИИ КД 2.0 НДФЛ СЗВ-СТАЖ СЗВ-ТД СКД СТД-Р СФР СЭДО ФСС ФСС НС больничные листы взносы вычеты длительная операция запрос интерфейс кадровая история кадровые данные кадровые переводы легкий труд мастер-данных обмен данными общий модуль отбор отпуска печать без проверки печать с диалогом пользователи представление прием на работу резервы отпусков сверхурочные синхронизация ЗУП и БП средний заработок табель таблица периодов табличный документ фотография штатное расписание

Яндекс.Метрика

© 2022-2026 myblog-1c.ru

Пользовательское соглашение

Контакты