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

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

У меня получается отобразить данные на форме только после записи документа, т.е. отказаться от внесенных изменений уже нельзя.
---
Создаете внешнюю обработку заполнения объекта, в ее форме в процедуре при открытии получаете владельца:

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

    СоответствиеЦен = ПолучитьЦеныНаСервере(); //некая функция на сервере готовит для меня данные для заполнения

    Для Каждого СтрокаТовар из ВладелецФормы.Объект.Товары Цикл

    СтрокаТовар.Цена = СоответствиеЦен.Получить(СтрокаТовар.Номенклатура);
    СтрокаТовар.Сумма = СтрокаТовар.Цена * СтрокаТовар.Количество;

    КонецЦикла;

    Закрыть();

    КонецПроцедуры
```
---
после изменения формы установи у неё признак Модифицированность = истина.
---
, если было бы так просто )
есть такой признак

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

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

    &НаКлиенте
    Процедура Обработать(Команда)

    //выполним обработку данных
    Текст = ЗаполнитьОбъектНаСервере(Объект.СсылкаНаОбъект);

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

    //выведем сообщение пользователю
    Сообщение = Новый СообщениеПользователю;
    Сообщение.ИдентификаторНазначения = ФормаДока.УникальныйИдентификатор;
    Сообщение.Текст = Текст;
    Сообщение.Сообщить();
    КонецЕсли;

    Закрыть();

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

    &НаСервере
    Функция ЗаполнитьОбъектНаСервере(Эл)
    если ложь тогда //удалить!!!
    Эл = Документы.ОтражениеЗарплатыВБухучете.ПустаяСсылка();
    конецесли;
    Текст = ";
    Об = Эл.ПолучитьОбъект();
    Для Каждого ТекСтр из Об.НачисленнаяЗарплатаИВзносы Цикл
    НомСтр = ТекСтр.НомерСтроки;
    ТекВидОперации = ТекСтр.ВидОперации;
    Отбор = Новый Структура();
    Отбор.Вставить("ВидОперацииИсх",ТекВидОперации);
    МассивСтр = Объект.ВидыОперацийДляЗамены.НайтиСтроки(Отбор);
    Если МассивСтр.Количество() > 0 Тогда
    ТекСтр.ВидОперации = МассивСтр[0].ВидОперацииКон;
    Текст = "В табл.части Начисленная зарплата и взносы в строке № "+НомСтр+" заменен вид операции с "+ТекВидОперации+" на "+ТекСтр.ВидОперации+Символы.ПС;
    КонецЕсли;
    КонецЦикла;
    Если ЗначениеЗаполнено(Текст) Тогда
    Об.Записать();
    КонецЕсли;
    Возврат Текст;
    КонецФункции
```
---
Использовать расширения, в зависимости от версии платформы.
---
, для чего их использовать? можно поподробнее
---
Для того, что бы не трогать конфигурацию. Добавляешь форму документа из конфигурации в расширение и допиливаешь штатными событиями. Для этого и придуманы расширения.
---
, это не выход, нужно все сделать во внешней обработке Заполнение объекта (для того они и нужны эти внешние обработки)
---
обработке
Тяжело судить не зная постановки задачи, но в расширении можно сделать кнопку и команду для выполнения.
---
Расширения тоже надо с умом использовать, а не совать где попало. Данная задача легко решается дополнительной обработкой.
---
Это да, это конечно. Не знал.
---
Все можно во внешней сделать: при открытии формы внешней обработки туда передается владелец формы, это форма документа. Вот с помощью него можно на форме менять все что хочешь не записывая сам документ.
---
, а можете привести пример, что-то не получается
---
Создаете внешнюю обработку заполнения объекта, в ее форме в процедуре при открытии получаете владельца:

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

    СоответствиеЦен = ПолучитьЦеныНаСервере(); //некая функция на сервере готовит для меня данные для заполнения

    Для Каждого СтрокаТовар из ВладелецФормы.Объект.Товары Цикл

    СтрокаТовар.Цена = СоответствиеЦен.Получить(СтрокаТовар.Номенклатура);
    СтрокаТовар.Сумма = СтрокаТовар.Цена * СтрокаТовар.Количество;

    КонецЦикла;

    Закрыть();

    КонецПроцедуры
```
---
, большое спасибо, получилось, только нужно добавить признак модифицированности: ВладелецФормы.Модифицированность = Истина;