Как из внешней обработки Заполнение объекта изменить данные формы документа без записи самого документа (Упр. Форма)?

1. mikl79 118 21.05.18 14:51 Сейчас в теме
Уважаемые коллеги, подскажите, есть вопрос по управляемым формам.
Как из внешней обработки Заполнение объекта изменить данные формы документа без записи самого документа?

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

У меня получается отобразить данные на форме только после записи документа, т.е. отказаться от внесенных изменений уже нельзя.
По теме из базы знаний
Найденные решения
13. user633533_encantado 11 21.05.18 15:33 Сейчас в теме
(12) Создаете внешнюю обработку заполнения объекта, в ее форме в процедуре при открытии получаете владельца:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	

	 СоответствиеЦен = ПолучитьЦеныНаСервере(); //некая функция на сервере готовит для меня данные для заполнения
	 
	 Для Каждого СтрокаТовар из ВладелецФормы.Объект.Товары Цикл
		 
		 СтрокаТовар.Цена  =  СоответствиеЦен.Получить(СтрокаТовар.Номенклатура);
		 СтрокаТовар.Сумма =  СтрокаТовар.Цена * СтрокаТовар.Количество;
	 
	 КонецЦикла;
	 
	 Закрыть();
	 
 КонецПроцедуры
 
 
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. mifka186 8 21.05.18 14:53 Сейчас в теме
после изменения формы установи у неё признак Модифицированность = истина.
4. mikl79 118 21.05.18 15:03 Сейчас в теме
(2), если было бы так просто )
есть такой признак

вообщем приведу пример как сделано (повторюсь - но мне не надо записывать объект):

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
	Док = ОбъектыНазначенияМассив[0]; 
	Объект.СсылкаНаОбъект = Док;
	ОткрытьФорму(ЭтаФорма); 
КонецПроцедуры

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

&НаСервере
Функция ЗаполнитьОбъектНаСервере(Эл)
	если ложь тогда //удалить!!!
		Эл = Документы.ОтражениеЗарплатыВБухучете.ПустаяСсылка();
	конецесли;
	Текст = "";
	Об = Эл.ПолучитьОбъект();
	Для Каждого ТекСтр из Об.НачисленнаяЗарплатаИВзносы Цикл
		НомСтр = ТекСтр.НомерСтроки;
		ТекВидОперации = ТекСтр.ВидОперации;
		Отбор = Новый Структура();
		Отбор.Вставить("ВидОперацииИсх",ТекВидОперации);
		МассивСтр = Объект.ВидыОперацийДляЗамены.НайтиСтроки(Отбор);
		Если МассивСтр.Количество() > 0 Тогда
			ТекСтр.ВидОперации = МассивСтр[0].ВидОперацииКон;
			Текст = "В табл.части Начисленная зарплата и взносы в строке № "+НомСтр+" заменен вид операции с "+ТекВидОперации+" на "+ТекСтр.ВидОперации+Символы.ПС;
		КонецЕсли;
	КонецЦикла;
	Если ЗначениеЗаполнено(Текст) Тогда
		Об.Записать();
	КонецЕсли;
	Возврат Текст;
КонецФункции
Показать
3. vynosmozga 5 21.05.18 14:58 Сейчас в теме
Использовать расширения, в зависимости от версии платформы.
5. mikl79 118 21.05.18 15:05 Сейчас в теме
(3), для чего их использовать? можно поподробнее
6. vynosmozga 5 21.05.18 15:08 Сейчас в теме
(5) Для того, что бы не трогать конфигурацию. Добавляешь форму документа из конфигурации в расширение и допиливаешь штатными событиями. Для этого и придуманы расширения.
7. mikl79 118 21.05.18 15:11 Сейчас в теме
(6), это не выход, нужно все сделать во внешней обработке Заполнение объекта (для того они и нужны эти внешние обработки)
9. vynosmozga 5 21.05.18 15:21 Сейчас в теме
(7)
обработке

Тяжело судить не зная постановки задачи, но в расширении можно сделать кнопку и команду для выполнения.
10. user633533_encantado 11 21.05.18 15:24 Сейчас в теме
(9) Расширения тоже надо с умом использовать, а не совать где попало. Данная задача легко решается дополнительной обработкой.
11. vynosmozga 5 21.05.18 15:26 Сейчас в теме
(10) Это да, это конечно. Не знал.
8. user633533_encantado 11 21.05.18 15:19 Сейчас в теме
Все можно во внешней сделать: при открытии формы внешней обработки туда передается владелец формы, это форма документа. Вот с помощью него можно на форме менять все что хочешь не записывая сам документ.
12. mikl79 118 21.05.18 15:28 Сейчас в теме
(8), а можете привести пример, что-то не получается
13. user633533_encantado 11 21.05.18 15:33 Сейчас в теме
(12) Создаете внешнюю обработку заполнения объекта, в ее форме в процедуре при открытии получаете владельца:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	

	 СоответствиеЦен = ПолучитьЦеныНаСервере(); //некая функция на сервере готовит для меня данные для заполнения
	 
	 Для Каждого СтрокаТовар из ВладелецФормы.Объект.Товары Цикл
		 
		 СтрокаТовар.Цена  =  СоответствиеЦен.Получить(СтрокаТовар.Номенклатура);
		 СтрокаТовар.Сумма =  СтрокаТовар.Цена * СтрокаТовар.Количество;
	 
	 КонецЦикла;
	 
	 Закрыть();
	 
 КонецПроцедуры
 
 
Показать
14. mikl79 118 21.05.18 15:46 Сейчас в теме
(13), большое спасибо, получилось, только нужно добавить признак модифицированности: ВладелецФормы.Модифицированность = Истина;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот