Отслеживание выполнения фонового задания

17.08.19

Разработка - Работа с интерфейсом

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

Тема достаточно широко освещена, но мне не попадалась информация о том, как отслеживать выполнение фонового задания собственным прогрессом, расположенным на форме.

Ниже несколько ссылок по фоновому выполнению кода:

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

Второй и третий варианты хорошие, в них используется функционал БСП для отслеживания хода выполнения задания:

НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтаФорма);
НастройкиОжидания.ВыводитьПрогрессВыполнения = Истина;
НастройкиОжидания.ВыводитьСообщения = Истина;
НастройкиОжидания.ТекстСообщения = НСтр("ru = 'Выполняется обработка данных.'");
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Неопределено, НастройкиОжидания);

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

Возьмем понемногу из всех вариантов, описанных выше, и получим следующее решение:

Запуск фонового задания из модуля внешней обработки, подключенной к конфигурации с помощью функционала «Дополнительные отчеты и обработки». Причем обработку можно открывать как внешнюю. При этом код длительной операции будет выполняться из варианта, сохраненного в базе.

Для запуска фонового задания используем метод из БСП ДлительныеОперации.ВыполнитьВФоне.

Для отслеживания хода выполнения создадим на форме обработки два элемента управления: Прогресс и Тестовое поле.

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

Дальше возникает вопрос, как получать информацию из фонового задания?

Это можно сделать несколькими способами:

  1. Через механизм сообщений – самый простой и распространенный способ, который используют методы из БСП.
  2. Через сервер взаимодействия – вариант не плохой, но сложный. Нужно разворачивать сам сервер взаимодействия. Понятно, что только для получения информации из фоновых заданий, это делать смысла нет.
  3. Через временное хранилище – в некоторых источниках описывается данный вариант взаимодействия, но он работает только для файловых баз. В клиент-серверном режиме работы, получить данные из временного хранилища можно только после завершения фонового задания. Это нам не подходит.   
  4. Через хранилище общих настроек – я не тестировал данный вариант, но в статье про менеджер потоков судя по всему используется именно этот вариант.

Будем пользоваться первым способом используя методы БСП:

  • ДлительныеОперации.СообщитьПрогресс
  • ДлительныеОперации.ПрочитатьПрогресс
  • ДлительныеОперации.СообщенияПользователю

Ниже привожу тексты модуля обработки и модуля формы:

Обработка выполнения в фоне

 

Тексты процедур модуля обработки

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

Создаем одну команда для открытия формы, вторую для выполнения в фоне.

Не забудьте указать версию БСП. Если ее не указать, запуск процедуры модуля обработки с указанием структуры параметров работать не будет.

Процедура ЗадержкаПоВремени(Время)
   
   Дата = ТекущаяДата()+Время;
   Пока Дата > ТекущаяДата() Цикл
   КонецЦикла;	
	
КонецПроцедуры	

Процедура ВыполнитьКоманду(Идентификатор, Параметры) Экспорт
	
   Если Идентификатор = "ВыполнениеВФоне" Тогда

      ДатаНачала = Параметры.СтруктураДанных.ДатаНачала;
      ДатаОкончания = Параметры.СтруктураДанных.ДатаОкончания;

      Отказ = ПерепровестиДокументы(ДатаНачала, КоличествоДней);	
      Если Отказ тогда
         ЗадержкаПоВремени (1);
         Возврат;
      КонецЕсли; 
 	
      ДлительныеОперации.СообщитьПрогресс(100, "Документы успешно проведены!");
      ЗадержкаПоВремени (1);
		
   КонецЕсли;
	
КонецПроцедуры

Функция ПолучитьСписокДокументовНаСервере(ТекДата)
	
   Запрос = новый Запрос("ВЫБРАТЬ
	                      |	ТоварыОрганизаций.Регистратор КАК Документ,
	                      |	ТоварыОрганизаций.Период КАК Период
	                      |ИЗ
	                      |	РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
	                      |ГДЕ
	                      |	ТоварыОрганизаций.Период >= &ДатаНачала
	                      |	И ТоварыОрганизаций.Период <= &ДатаОкончания
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ТоварыОрганизаций.Регистратор,
	                      |	ТоварыОрганизаций.Период
	                      |
	                      |УПОРЯДОЧИТЬ ПО
	                      |	Период");
	
   Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекДата));
   Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ТекДата));

   Результат = Запрос.Выполнить();
   СписокДокументов = Результат.Выгрузить();
	      
   Возврат СписокДокументов;
	 
КонецФункции

Функция ПерепровестиДокументы(ТекДата, КоличествоДней)
	
   ДокументыДляПроведения = ПолучитьСписокДокументовНаСервере(ТекДата);
	
   ТекущийДокумент = 0;
   ВсегоДокументов = ДокументыДляПроведения.Количество();
	
   Для каждого СтрокаТЗ Из ДокументыДляПроведения Цикл
		
      ДокументОбъект = СтрокаТЗ.Документ.ПолучитьОбъект();
	
      Попытка
         ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
      Исключение
         ДлительныеОперации.СообщитьПрогресс(-1, "Ошибка проведения документа: " + ДокументСсылка);
         Возврат Истина;
      КонецПопытки;
		
      ТекущийДокумент = ТекущийДокумент + 1;
      Если НЕ (ТекущийДокумент % 5) Тогда
         ДлительныеОперации.СообщитьПрогресс(Формат(ТекущийДокумент/ВсегоДокументов*100, "ЧЦ=3; ЧДЦ="), "Выполняется проведение документа: " + ДокументСсылка);
      КонецЕсли;			
		
   КонецЦикла;	
   Возврат Ложь;
	
КонецФункции

Здесь все просто, выполняется выборка документов по регистру «ТоварыОрганизаций» за переданный в фоновое задание период и документы последовательно перепроводятся. После каждого 5 документа отправляются данные о состоянии выполнения основному сеансу. В случае ошибки отправляется информация о документе, в котором произошла ошибка. Задержка в одну секунду нужна для обработки информации об ошибки в основном сеансе.

 

Тексты процедур модуля формы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

Если обработка открыта из списка внешних отчетов и обработок базы, свойство «ДополнительнаяОбработкаСсылка» будет заполнено. Если открываем обработку как внешнюю, ищем сохраненный вариант в базе.
 

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

&НаКлиенте
Процедура ПерепровестиДокументы(Команда)
	
   СтруктураДанных = новый Структура;
   СтруктураДанных.Вставить("ДатаНачала", ДатаНачала);
   СтруктураДанных.Вставить("ДатаОкончания", ДатаОкончания);
	
   // выполнить команду в фоновом режиме
   ВыполняемаяКоманда = Новый Структура("Ссылка, Идентификатор, СтруктураДанных", ДополнительнаяОбработкаСсылка, "ВыполнениеВФоне", СтруктураДанных);
   ДлительнаяОперация = НачатьВыполнениеСервернойКомандыВФоне(ВыполняемаяКоманда, Новый УникальныйИдентификатор);
	
   ИдентификаторЗадания = ДлительнаяОперация.ИдентификаторЗадания;
   ПодключитьОбработчикОжидания("ПроверитьПрогрессВыполнения", 0.3, Истина);

КонецПроцедуры

Создаем фоновое задание, передаем в него параметры по периоду. Сохраняем идентификатор задания в реквизите формы и создаем обработчик ожидания.

&НаКлиенте
Процедура ПроверитьПрогрессВыполнения()

   СтруктураДанныхВыполнения = ОбновитьПрогрессНаСервере(ИдентификаторЗадания);
	
   Если СтруктураДанныхВыполнения.Свойство("ПроцентВыполнения") Тогда 
      ПроцентВыполнения = СтруктураДанныхВыполнения.ПроцентВыполнения;
   КонецЕсли;
	
   Если СтруктураДанныхВыполнения.Свойство("СостояниеВыполнения") Тогда
      СостояниеВыполнения = СтруктураДанныхВыполнения.СостояниеВыполнения;
   КонецЕсли;	
	    	
   Если НЕ СтруктураДанныхВыполнения.ЗаданиеВыполнено Тогда
      ПодключитьОбработчикОжидания("ПроверитьПрогрессВыполнения", 0.3, Истина);
   КонецЕсли;	

КонецПроцедуры // ПроверитьПрогрессВыполнения()

&НаСервереБезКонтекста
Функция ОбновитьПрогрессНаСервере(ИдентификаторЗадания)
	
   СтруктураДанныхВыполнения = новый Структура;
   ЗавершитьЗадание = Ложь;

   МассивСообщений = ДлительныеОперации.СообщенияПользователю(Ложь, ИдентификаторЗадания); 
   Если ТипЗнч(МассивСообщений) = Тип("ФиксированныйМассив") Тогда
		
      Для Каждого СтрокаСообщения Из МассивСообщений Цикл 
         Сообщить(СтрокаСообщения.Текст);
      КонецЦикла;
		
   КонецЕсли;
	
   РезультатВыгрузки = ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторЗадания);
   Если ТипЗнч(РезультатВыгрузки) = Тип("Структура") Тогда
      
      Если РезультатВыгрузки.Свойство("Процент") Тогда
         
         Если РезультатВыгрузки.Процент = -1 Тогда
    	    ЗавершитьЗадание = Истина;
	 КонецЕсли;	 
         СтруктураДанныхВыполнения.Вставить("ПроцентВыполнения", РезультатВыгрузки.Процент);
			
      КонецЕсли;
		
      Если РезультатВыгрузки.Свойство("Текст") Тогда
        СтруктураДанныхВыполнения.Вставить("СостояниеВыполнения", РезультатВыгрузки.Текст);
      КонецЕсли;
		
   КонецЕсли;
	
   Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда
      СтруктураДанныхВыполнения.Вставить("ЗаданиеВыполнено", Истина);
   Иначе
      СтруктураДанныхВыполнения.Вставить("ЗаданиеВыполнено", Ложь);
   КонецЕсли;

   Если ЗавершитьЗадание Тогда
      ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);
      СтруктураДанныхВыполнения.Вставить("ЗаданиеВыполнено", Истина);
   КонецЕсли;
	
   Возврат СтруктураДанныхВыполнения;
	
КонецФункции

Проверяем состояние выполнения задания. Информацию о стадии выполнения задания отображаем виде прогресса, расположенного на форме и текстового поля. Также выводим сообщения, сформированные в фоновом задании. Например, если будет ошибка проведения документа, информация будет выведена в текстовом поле и в окне сообщений формы.

Если задание не выполнено, подключаем опять обработчик ожидания. Если в задании была ошибка при проведении документа «РезультатВыгрузки.Процент = -1», закрываем его принудительно. На всякий случай, так как оно и так должно закрыться через секунду.

&НаКлиенте
Процедура ПериодПриИзменении(Элемент)
	
   ДатаНачала = Период.ДатаНачала;
   ДатаОкончания = Период.ДатаОкончания;
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаНачаллаПриИзменении(Элемент)
	
   Период.ДатаНачала = ДатаНачала;
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаОкончанияПриИзменении(Элемент)
	
   Период.ДатаОкончания = ДатаОкончания;
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗавершитьВыполнениеНаСервере(ИдентификаторЗадания)
	
   ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗавершитьВыполнение(Команда)
	
   ЗавершитьВыполнениеНаСервере(ИдентификаторЗадания);
   ПроцентВыполнения = 0;
   СостояниеВыполнения = "Выполнение прервано пользователем!"
	
КонецПроцедуры

Тут особо комментировать нечего. Настройка периода и принудительное завершение фонового задания.

Вот и все, получаем отслеживание работы фонового задания непосредственно в форме обработки.

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

До новых встреч!

См. также

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

2400 руб.

29.06.2020    14761    18    4    

25

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    7650    1    2    

6

Редактор граф

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

1500 руб.

06.10.2020    8750    6    7    

8

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    7366    141    acces969    31    

106

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    2086    kalyaka    2    

19

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    10516    1    5    

9

Программный интерфейс для доработки форм

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    7758    AtamanovYS    19    

129

[mobile] Переносим HTML интерфейс на 1С

Работа с интерфейсом Мобильная разработка Платформа 1С v8.3 Мобильная платформа Конфигурации 1cv8 Бесплатно (free)

Разберем методы переноса HTML интерфейса на 1С на примере реализации нижнего меню для мобильного приложения. Сравним методы между собой. Данные методы можно применять не только для мобильной разработки, но и для веб-клиента и т.д

02.11.2020    15000    leobrn    83    

113
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. mi1man 244 17.08.19 10:55 Сейчас в теме
Спасибо. Тема про "многопоточность" интересна .. буду ждать продолжения)
Andy1981; ids79; +2 Ответить
15. PowerBoy 3290 24.10.19 11:33 Сейчас в теме
(1) Кому интересна тема многопоточности и хочет поэкспериментировать можете воспользоваться обработкой
PowerTools (https://infostart.ru/public/167865/). Умеет запускать в многопоток как различные операции обработки данных, так и произвольный код. Умеет распределять потоки по выбранным полям таблицы.
2. Xershi 1402 17.08.19 17:05 Сейчас в теме
Действительно, плохо искали. Мало того имея БСП 2.3 с доработкой или 2.4 уже можно не рисовать на форме элементы а выводить прогресс отдельно и многопоточность тоже уже реализована! А перепроведение как уже говорилось не подойдет, потому что оно будет накладывать взаимоблокировки. Придется и их учесть при написании кода, что усложнит алгоритм на порядок.
4. ids79 7968 17.08.19 21:53 Сейчас в теме
(2)Многопоточность сама по себе ничего сверхестественного из себя не представляет. Интересен как раз сам механизм разбиения данных на блоки для выполнения в разных потоках. То-есть выделять группы документов, которые не будут мешать друг другу при проведении.
ilego; logarifm; +2 Ответить
3. aximo 1994 17.08.19 18:48 Сейчас в теме
Дмитрий, ты молодец! интересные вещи пишешь!
5. ids79 7968 17.08.19 21:54 Сейчас в теме
(3)Спасибо
6. logarifm 1112 18.08.19 10:24 Сейчас в теме
Можно добавить лепту? Если операции действительно длительные то для оптимизации можно бы подумать в сторону "шага процента" чтобы не долбить проверками каждые 0.3 секунд.
8. ids79 7968 19.08.19 10:05 Сейчас в теме
(6)В принципе, можно увеличить это время, так как все равно данные отправляются после каждого пятого документа.
7. comptr 3 19.08.19 08:29 Сейчас в теме
Про многопоточное проведение вот тут достаточно подробно рассказано: https://infostart.ru/public/1102042
9. ids79 7968 19.08.19 10:06 Сейчас в теме
(7)Да, я тоже привел ссылку на эту статью в публицации
10. comptr 3 19.08.19 12:58 Сейчас в теме
(9) оу, невнимательно прочитал, смотрел больше на код...
11. Darklight 30 19.08.19 13:18 Сейчас в теме
Мне кажется не очень хорошей идея - проверять прогресс каждые 0.3 сек через серверные вызовы. Ну тут можно долго спорить на тему оптимизации клиент-серверного взаимодействия, но от серверных вызовов тут никак не уйти (ну разве что всё взаимодействие не вынести во внешнюю Native-компоненту, которая будет подключена и в фоновом процессе и в клиенте, и будет производить обмен сообщениями через свой канал, например через TCP - но тут сложно искать универсальное решение), иначе всё сведётся лишь к увеличению периода опроса сервера
12. ids79 7968 19.08.19 15:19 Сейчас в теме
(11)Ну да, вариантов взаимодействия много, некоторые я привел в статье. Это не все, естественно.
Спасибо за дополнение
13. DonAlPatino 175 20.08.19 11:40 Сейчас в теме
Немножко не в тему, но коль про многопоточность заговорили ... а в oscript можно ее как-то организовать и результаты в главную программу вернуть? Что-то не нашел ничего на вскидку...
14. ids79 7968 20.08.19 13:03 Сейчас в теме
(13)Я не в курсе. Задайте вопрос Андрею Овсянкину
16. qbdp 29.10.19 15:00 Сейчас в теме
Ещё как вариант - использовать временный файл. Записывать в фоновом задании, а затем через вызов сервера (в сеансе пользователя) его читать.
17. MarryJane 31 16.05.21 19:42 Сейчас в теме
А подскажите такую операцию, как запустить поток выборки в фоне и затем получить результат выборки. Например основная процедура занимается выборкой данных, получает некий набор номенклатура, выводит его на форму и в тоже время запускает фоновый процесс дополнительной выборки. Когда фоновый процесс завершается он возвращает результат дополнительной выборки и сообщает форме что завершился, получите результаты выборки.
18. ids79 7968 17.05.21 13:09 Сейчас в теме
(17)Можно через временное хранилище.
19. MarryJane 31 17.05.21 23:14 Сейчас в теме
Спасибо нашел уже на просторах нета. Если кому интересно https://kb.mista.ru/article.php?id=696
20. ilnur75 24.09.21 15:38 Сейчас в теме
Добрый день!

помогите разобраться. сделал как в статье , платформа 8.3.15 , внешняя обработка, версия БСП "2.4.4.120"
конф УТ 11.4...

В процедуре ДлительныеОперации.СообщитьПрогресс(...) у меня сразу идет проверка :

Если ПолучитьТекущийСеансИнформационнойБазы().ПолучитьФоновоеЗадание() = Неопределено Тогда
Возврат;
КонецЕсли;

так вот результат этой проверки = Неопределено

а почему ?

в итоге у меня никакой информации о ходе процесса не выходит, и в статье я не нашел каким образом заполняются поля формы Прогресс и Тестовое поле ?
21. ids79 7968 27.09.21 12:37 Сейчас в теме
(20)Попробуйте вызвать просто ПолучитьФоновоеЗадание()
22. ilnur75 27.09.21 13:19 Сейчас в теме
немного запутался с ДополнительнаяОбработкаСсылка . Мне пришлось в внешнюю обработку добавить как реквизит формы, а вот тип у этого реквизита какой должен быть? оставил пока "строка". При создании формы в параметрах такого свойства нет. Я принудительно присваиваю ссылку из справочника ДопОтчетыОбработки, т.к. тоже добавил внешнюю обработку в это справочник.

В результате исполняется команда загрузки данных, а вот индикатор показывает только конечный результат (цифр 100 и фон этого поля ввода не окрашивается) и текст. Нет промежуточных показаний.
23. dimaster 39 18.11.22 10:53 Сейчас в теме
(22)
ДополнительнаяОбработкаСсылка

параметр формы "ДополнительнаяОбработкаСсылка" с типом "СправочникСсылка.ДополнительныеОтчетыИОбработки"

может кому пригодится
Elvira_Saydasheva; klaus38; +2 Ответить
Оставьте свое сообщение