Здравствуйте. Пытаюсь программно при помощи внешней обработки в режиме "ЗаполнениеОбъекта" заполнить цены в документе УстановкаЦенНоменклатуры прямо из формы в УТ 11.4 УФ. Написал для начала самый простой код

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

По сообщениям вижу, что цена меняется, но в документе в табличной части всё остается по старому. Каким образом "обновить" табличную часть, чтобы отобразились новые цены? Ну или может подскажите, как правильно заполнить цены табличной части?
---
пример
СсылкаНаДокЦен - тип ДокументСсылка, не ДокументОбъект
---
http://forum.infostart.ru/forum86/topic231722/message2349721/#message2349721
---
ваш код вот в принципе не меняет цену в документе!
код - даже коментировать не могу - что он делает....

Если вы хотите поменять что-то в документе программно- зачем вы в форму то лезете?

Получайте документ из ссылки, обращайтесь к табличной части, меняйте цены , сохраняйте...
Форма тут при чем?
---
, смотрите, пользователь интерактивно создает документ УстановкаЦенНоменклатуры, подбирает нужный ему товар, далее нужно, чтобы он нажал на выполнение обработки, подключенной к документу и путем определенных формул ему проставились цены в подобранные товары
---
соглашусь с 2, нужно сначала почитать книжку про управляемые формы, например, Радченко "Практическое пособие разработчика". Потом будет понятнее писаться "самый простой код"
---
данные с формы можно изменить на сервере
передайте таблицу формы на сервер, заполните там и обновите отображение на клиенте
---
подскажите, пожалуйста, каким образом это сделать? Во многих обучающих примерах меняют на клиенте и у них вроде как всё чудесно, а у меня не выходит :(
---
http://forum.infostart.ru/forum86/topic231722/message2349721/#message2349721
---
форма у меня уже открыта интерактивно пользователем и товары уже подобраны, нужно лишь проставить цены в текущую открытую форму
---
попробуйте предложенное решение - оно рабочее, а для того чтобы не открывалась форма обработки заполнения, в процедуре при открытии выполните запуск процедуры заполнения на клиенте, после прочитать форму владелец, затем Закрыть().
Форма документа установки цен непростая, это кросс таблица по видам цен, она не перерисуется если заполнить через ВладелецФормы, а через запись документа и Прочитать() без проблем
---
пробую по вашему примеру

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    Если ВладелецФормы<>Неопределено Тогда
    СсылкаНаДокЦен=ВладелецФормы.Объект.Ссылка;
    КонецЕсли;
    КонецПроцедуры

    &НаСервере
    Процедура УстановитьЦеныНаСервере()
    ДокЦен = СсылкаНаДокЦен.ПолучитьОбъект();
    Для Каждого Стр из ДокЦен.Товары Цикл
    Если ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(Стр.ВидЦены,"Наименование") = "Оптовая" Тогда
    Стр.Цена = 100;
    КонецЕсли;
    КонецЦикла;
    ДокЦен.Записать();
    КонецПроцедуры

    &НаКлиенте
    Процедура УстановитьЦены(Команда)
    УстановитьЦеныНаСервере();
    Если ВладелецФормы<>Неопределено Тогда
    ВладелецФормы.Прочитать();
    КонецЕсли;
    ПоказатьОповещениеПользователя("Готово");
    КонецПроцедуры
```

Показывает ошибку

```1c
    {ВнешняяОбработка.УстановкаЦенНоменклатуры.Форма.Форма.Форма(6)}: Ошибка при установке значения атрибута контекста (СсылкаНаДокЦен)
    СсылкаНаДокЦен=ВладелецФормы.Объект.Ссылка;
    по причине:
    Нельзя изменять поле, содержащее объект данных формы
    Нельзя изменять поле, содержащее объект данных формы
```

Если Реквизит не на форму добавить, а в обработку, тогда ругается

```1c
    {ВнешняяОбработка.УстановкаЦенНоменклатуры.Форма.Форма.Форма(13,11)}: Переменная не определена (СсылкаНаДокЦен)
    ДокЦен = <<?>>СсылкаНаДокЦен.ПолучитьОбъект(); (Проверка: Сервер)
```

Если написать

```1c
    ДокЦен = Объект.СсылкаНаДокЦен.ПолучитьОбъект();
```

Тогда обработка запускается, но при выполнении ругается

```1c
    Метод объекта не обнаружен (ПолучитьОбъект)
    {ВнешняяОбработка.УстановкаЦенНоменклатуры.Форма.Форма.Форма(13)}: ДокЦен = Объект.СсылкаНаДокЦен.ПолучитьОбъект();
```
---
пример
СсылкаНаДокЦен - тип ДокументСсылка, не ДокументОбъект
---
Да, действительно, не тот тип реквизита указал. Спасибо огромное!
---
Спасибо. Пример помог (переписал по своему, вместо открытия формы выполнил запуск клиентского метода, но суть от этого не поменялась), печально только что приходится записывать документ. Пытался заполнить ТОЛЬКО форму, чтобы юзвери могли закрыть её ДО записи дока (если нажали кнопку случайно :\ ), но не взлетело.
---
Вам уважаемый на сервер надо, там объект получать и меняйте что хотите.
---
документ пользователь создает интерактивно и подбирает нужный ему товар интерактивно, от обработки требуется лишь проставить цены в подобранные товары на форме в данном документе, а не в ранее созданные. Я не против и серверными функциями воспользоваться, подскажите как?)
---
Уже попробовал по другому варианту. Вот код модуля обработки

```1c
    Функция СведенияОВнешнейОбработке() Экспорт

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

    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Идентификатор = "УстановитьЦены";
    Команда.Представление = "Установить цены";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();

    Возврат ПараметрыРегистрации;

    КонецФункции
```

Вот код формы

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ОбъектНазначения = Параметры.ОбъектыНазначения[0];
    КонецПроцедуры

    &НаКлиенте
    Процедура УстановитьЦены(Команда)
    ФормаДокумента = ВладелецФормы;
    ОбъектДокумента = ФормаДокумента.Объект;

    ЗаполнитьДокументНаСервере(ОбъектДокумента);

    КопироватьДанныеФормы(ОбъектДокумента, ФормаДокумента.Объект);

    ФормаДокумента.Модифицированность = Истина;

    Закрыть();
    КонецПроцедуры

    &НаСервере
    Процедура ЗаполнитьДокументНаСервере(ОбъектДокумента)

    Для каждого Стр Из ОбъектДокумента.Товары Цикл
    Если ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(Стр.ВидЦены,"Наименование") = "Оптовая" Тогда
    Стр.Цена = 100;
    КонецЕсли;
    КонецЦикла;

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

Всё равно не меняются цены в форме документа... Подскажите, пожалуйста, как же все же изменить цены в открытом документе УстановкаЦенНоменклатуры?
---
в (13) пример, он работает
---
Только эта обработка меняет цены в закрытом документе.
А ТС хочет, как я понял, чтобы цены менялись в форме уже открытого.
---
не, всё норм, меняет в открытом документе
---
У тебя на форме установки цен есть элемент под названием ДеревоЦен.
Именно он и отражает цены на форме. А заполняется это дерево при открытии формы.

Если хочешь обновить цены после изменения их в документе, нужно принудительно обновить дерево цен на клиенте.
Где-то вот тут:

```1c
    &НаКлиенте
    Процедура УстановитьЦены(Команда)
    ФормаДокумента = ВладелецФормы;
    ОбъектДокумента = ФормаДокумента.Объект;

    ЗаполнитьДокументНаСервере(ОбъектДокумента);
    ОбновитьДеревоЦен(ФормаДокумента);
    ...
    &НаКлиенте
    Процедура ОбновитьДеревоЦен(Команда)
    ...
    КонецПроцеДуры
```