Каталог решений - Перезапуск обработки или отчета с сохранением введенных данных (Обычные формы) !

Перезапуск обработки или отчета с сохранением введенных данных (Обычные формы) !

Перезапуск обработки или отчета с сохранением введенных данных (Обычные формы) !

В наличии

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

Категория:

Описание

Приведенная ниже функция перезапускает внешнюю обработку или отчет с сохранением введенных на форме данных. Таких как:

  • Реквизиты
  • Табличные части
  • Таблицы значений
  • Дерево значений
  • Отбор компоновщикаСКД
  • Выбранные поля компоновщикаСКД
  • Список значений

 

Процедура ПерезапуститьВнешнююОбработку()
	
	ЭтоФайл = Найти(ТипЗнч(ЭтотОбъект),"Внешн")=1;
	КоманднаяПанель = ЭтаФорма.ЭлементыФормы.Найти("ОсновныеДействияФормы");
	
	Если КоманднаяПанель = Неопределено Тогда
		КоманднаяПанель = ЭтаФорма.ЭлементыФормы.Найти("ДействияФормы");
	КонецЕсли; 
	
	Если (НЕ ЭтоФайл) ИЛИ (КоманднаяПанель = Неопределено) Тогда
		Возврат;
	КонецЕсли; 
	
	КнопкаПерезапустить_УжеСуществует = КоманднаяПанель.Кнопки.Найти("Перезапустить") <> Неопределено;
	Если КнопкаПерезапустить_УжеСуществует Тогда
		
		СохранятьЗначенияРеквизитов = Истина;
		
		// Перезапустить обработку
		Для Каждого Форма Из ЭтаФорма.Метаданные().Формы Цикл
			
			ТекущаяФорма = ПолучитьФорму(Форма);
			Если НЕ ТекущаяФорма = ЭтаФорма Тогда
				Продолжить;
			КонецЕсли;
			
			// Сохранить значения реквизитов
			СписокСохраняемыхРеквизитов = Новый Структура(); 
			СписокСохраняемыхТабЧастей = Новый Структура();
			Если СохранятьЗначенияРеквизитов Тогда
				Для Каждого итЭлемент Из ТекущаяФорма.ЭлементыФормы Цикл
					Если ТипЗнч(итЭлемент) = Тип("ПолеВвода")
						ИЛИ ТипЗнч(итЭлемент) = Тип("ПолеВыбора")
						ИЛИ ТипЗнч(итЭлемент) = Тип("Флажок") 
						ИЛИ ТипЗнч(итЭлемент) = Тип("Переключатель")Тогда
						СписокСохраняемыхРеквизитов.Вставить(итЭлемент.Имя, итЭлемент.Значение); 
					ИначеЕсли ТипЗнч(итЭлемент) = Тип("ТабличноеПоле") Тогда
						СписокСохраняемыхТабЧастей.Вставить(итЭлемент.Имя, итЭлемент.Значение);
					КонецЕсли;
				КонецЦикла; // Элементы формы
			КонецЕсли;
			
			ЭтаФорма.Закрыть();
			ЭтоОбработка = Найти(Строка(ТипЗнч(ЭтотОбъект)), "Внешняя обработка объект:") = 1;
			
			Если ЭтоОбработка Тогда
				Форма = ВнешниеОбработки.Создать(ЭтотОбъект.ИспользуемоеИмяФайла).ПолучитьФорму(Форма.Имя);
			Иначе 
				Форма = ВнешниеОтчеты.Создать(ЭтотОбъект.ИспользуемоеИмяФайла).ПолучитьФорму(Форма.Имя);
			КонецЕсли;
			
			
			
			// Восстанавить значения реквизитов
			Для каждого итЭлемент Из СписокСохраняемыхРеквизитов Цикл
				Попытка
					Форма.ЭлементыФормы[итЭлемент.Ключ].Значение = итЭлемент.Значение;
				Исключение
				КонецПопытки;
			КонецЦикла; 
			
			
			// Восстанавить значения ТабЧастей
			ВосстановитьПослеОткрытия = Новый Структура();
			Для каждого итЭлемент Из СписокСохраняемыхТабЧастей Цикл
				Попытка
					Если ТипЗнч(итЭлемент.Значение) = Тип("СписокЗначений") Тогда 
						Форма.ЭлементыФормы[итЭлемент.Ключ].Значение.ЗагрузитьЗначения(итЭлемент.Значение.ВыгрузитьЗначения())
						
					ИначеЕсли ТипЗнч(итЭлемент.Значение) = Тип("ОтборКомпоновкиДанных") Тогда 
						ВосстановитьПослеОткрытия.Вставить(итЭлемент.Ключ,итЭлемент.Значение);
					ИначеЕсли ТипЗнч(итЭлемент.Значение) = Тип("ВыбранныеПоляКомпоновкиДанных") Тогда 
						ВосстановитьПослеОткрытия.Вставить(итЭлемент.Ключ,итЭлемент.Значение);
						
					ИначеЕсли ТипЗнч(итЭлемент.Значение) = Тип("ТаблицаЗначений") ИЛИ ТипЗнч(итЭлемент.Значение) = Тип("ДеревоЗначений") Тогда 
						Форма.ЭлементыФормы[итЭлемент.Ключ].Значение = итЭлемент.Значение;
						Форма.ЭлементыФормы[итЭлемент.Ключ].СоздатьКолонки();
					Иначе // пока для всех остальных
						Форма.ЭлементыФормы[итЭлемент.Ключ].Значение.Загрузить(итЭлемент.Значение.Выгрузить());
					КонецЕсли;
				Исключение
				КонецПопытки;
			КонецЦикла;
			
			Форма.Открыть();
			
			//Восстановить значния табличных частей после открытия формы
			//
			Для каждого итЭлемент Из ВосстановитьПослеОткрытия Цикл
				
				Если ТипЗнч(итЭлемент.Значение) = Тип("ОтборКомпоновкиДанных") Тогда 
					Форма.ЭлементыФормы[итЭлемент.Ключ].Значение.Элементы.Очистить();
					Для Каждого ЭлементОтбора Из итЭлемент.Значение.Элементы Цикл
						ЗаполнитьЗначенияСвойств(Форма.ЭлементыФормы[итЭлемент.Ключ].Значение.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")), ЭлементОтбора); 
					КонецЦикла;
				КонецЕсли;
				
				Если ТипЗнч(итЭлемент.Значение) = Тип("ВыбранныеПоляКомпоновкиДанных") Тогда 
					Форма.ЭлементыФормы[итЭлемент.Ключ].Значение.Элементы.Очистить();
					Для Каждого ЭлементВыбранноеПоле Из итЭлемент.Значение.Элементы Цикл
						ЗаполнитьЗначенияСвойств(Форма.ЭлементыФормы[итЭлемент.Ключ].Значение.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")), ЭлементВыбранноеПоле); 
					КонецЦикла;
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЦикла;
		
	Иначе
		
		КоманднаяПанель.Кнопки.Добавить("РазделительПерезапустить", ТипКнопкиКоманднойПанели.Разделитель);
		
		// Добавить кнопку
		Действие = Новый Действие("ПерезапуститьВнешнююОбработку");
		НоваяКнопка = КоманднаяПанель.Кнопки.Добавить("Перезапустить", ТипКнопкиКоманднойПанели.Действие, "Перезапустить", Действие);
		НоваяКнопка.Картинка = БиблиотекаКартинок.Обновить;
		НоваяКнопка.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка; 
		НоваяКнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.F4, , , Истина); // Shift-F4
		
	КонецЕсли;
	
КонецПроцедуры

has been added to your cart:
Оформление заказа