На форме элемента,справочник Номенклатура. Изменяем объем и вес. Данные обновляются только после нового открытия номенклатуры.

```1c
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

    ПосчитатьОбъемы(Ссылка);

    -----------код-------
    ЭтаФорма.Прочитать();

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

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

    Пока Выборка.Следующий() Цикл
    Элемент = Выборка.Владелец.ПолучитьОбъект();
    Элемент.Объем= Выборка.Объем;
    Элемент.Вес=Выборка.Вес;
    Элемент.Записать();
    КонецЦикла;

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

Помогите пожалуйста...
---
Если вы хотите, чтобы на форме элемента справочника обновлялись реквизиты после закрытия формы Шаблонов, то вам надо написать (для управляемых форм):

В форме элемента шаблонов:

```1c
    &НаКлиенте
    Процедура ПриЗакрытии(ЗавершениеРаботы)
    Оповестить("ЗаписалиШаблонДляНоменклатуры");
    КонецПроцедуры
```

А на форме номенклатуры:

```1c
    &НаКлиенте
    Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "ЗаписалиШаблонДляНоменклатуры" Тогда
    ЭтотОбъект.Прочитать();
    КонецЕсли;
    КонецПроцедуры
```
---
Так в чем вопрос-то? Чем помочь?
---
Данные обновляются только после нового открытия номенклатуры. Не обновляются данные на форме
---
Ну так и написано в процедуре ПередОткрытием. А когда надо?
---
Когда я в шаблоне меняю вес и объем,после этого сразу должно меняться. То есть прям в открытой форме
---
В (5) правильно написали
---
нет,так не срабатывает
---
Нажимаю Перейти -Шаблоны-там заполняю вес и объем.Закрываю потом и надо чтобы данные номенклатуры обновились
---
Чтобы данные обновились на форме надо и менять элементы формы, а не объекта.
---
не поняла
---
Попробуй вместо:

```1c
    Пока Выборка.Следующий() Цикл
    Элемент = Выборка.Владелец.ПолучитьОбъект();
    Элемент.Объем= Выборка.Объем;
    Элемент.Вес=Выборка.Вес;
    Элемент.Записать();
    КонецЦикла;
```

Написать что-то типа этого:

```1c
    Пока Выборка.Следующий() Цикл
    ЭтаФорма.ЭлементыФормы.Объем= Выборка.Объем;
    ЭтаФорма.ЭлементыФормы.Вес=Выборка.Вес;
    ЭтаФорма.Обновить();
    КонецЦикла;
```
---
Поле недоступно для записи.
Все правильно работает у меня.НО надо просто обновить данные на форме.
---
после программной записи объекта его нужно перечитать или обновить. Т.к. клиент не знает, что вы нахимили с объектом что-то!
---
А зачем каждый раз перезаписывать объект, мне кажется достаточно обновить элементы формы
---
автору так больше нравится, хоть это и архитектурная ошибка.
---
Поле объекта недоступно для записи (Объем)
ЭтаФорма.ЭлементыФормы.Объем= Выборка.Объем;
---
Попробуйте так написать:

```1c
    Пока Выборка.Следующий() Цикл
    Объем= Выборка.Объем;
    Вес=Выборка.Вес;
    КонецЦикла;
```
---
обновить не дает теперь
Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(218)}: Ошибка при установке значения атрибута контекста (Доступность)
 ЭлементыФормы.НоменклатурнаяГруппа.Доступность = мфНоменклатураИспользуется;
по причине:
Несоответствие типов
---
Может я не до конца понял задачу?
В открываете Номенклатуру. Из нее подчиненный справочник ШаблоныСхемПакования, там меняете объем и вес в табличной части Состав и нажав ОК Хотите увидеть пересчитанные объем и вес в уже открытой форме номенклатуры?
---
да,все так
---
Тогда как-то так: Записываете объект Номенклатуры как Вы первоначально писали, только не в процедуре формы справочника номенклатура, а при записи элемента справочника ШаблоныСхемПакования, а затем ищете форму элемента справочника Номенклатура и обновляете ее.
---
Я искал открытую форму так (Это для примера, подставите свое наименование формы и имя объекта):
ФормаЭлемента = Объект.ПолучитьФорму("ФормаЭлемента");
---
обновлять не дает из за вот этой строки
ЭлементыФормы.НоменклатурнаяГруппа.ТолькоПросмотр = мфНоменклатураИспользуется;
---
Какая конфигурация? Типовая?
---
нет,самописка
---
```1c
    Процедура ПриЗаписи(Отказ)
    ПосчитатьОбъемы(Ссылка);
    КонецПроцедуры

    Процедура ПосчитатьОбъемы(Ссылка)
    ЗапросОбъем=Новый Запрос;
    ЗапросОбъем.Текст= "ВЫБРАТЬ
    | СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес) КАК Вес,
    | ШаблоныСхемПакования.Владелец,
    | СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем) КАК Объем,
    | ШаблоныСхемПакования.Ссылка
    |ИЗ
    | Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныСхемПакования КАК ШаблоныСхемПакования
    | ПО ШаблоныСхемПакованияТЧСостав.Ссылка = ШаблоныСхемПакования.Ссылка
    |ГДЕ
    | ШаблоныСхемПакования.Владелец = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    | ШаблоныСхемПакования.Владелец,
    | ШаблоныСхемПакования.Ссылка" ;
    ЗапросОбъем.УстановитьПараметр("Ссылка", Ссылка);
    Выборка = ЗапросОбъем.Выполнить().Выбрать();
    формаэл=Справочники.Номенклатура.ПолучитьФорму("ФормаЭлемента");

    Пока Выборка.Следующий() Цикл
    Элемент = Выборка.Владелец.ПолучитьОбъект();
    Элемент.Объем= Выборка.Объем;
    Элемент.Вес=Выборка.Вес;
    Элемент.Записать();
    КонецЦикла;

    КонецПроцедуры
```
---
Перед КонецПроцедуры попробуй написать:

```1c
    ФормаЭлемента = Элемент.ПолучитьФорму("ФормаЭлемента");
    ФормаЭлемента.Обновить();
```
---
Это же процедура ПриЗаписи элемента справочника ШаблоныСхемПакования?
---
да,обновлять не дает
---
Попробуй как в (30) советуют, без обновления
---
работает,но надо перезаходить в номенклатуру
т.е. так же как и было
---
Надо тогда разбираться с ошибкой в строке
ЭлементыФормы.НоменклатурнаяГруппа.ТолькоПросмотр = мфНоменклатураИспользуется; и обновлять форму
---
ну типо только просмотр,может поэтому?
---
Попробуй закомменти эту строку, обновится форма?
---
перенесла вызов процедуры ПосчитатьОбъемы чуть пониже и все работает,но форме не обновляется
---
на форме надо писать этот код в процедуре при изменении данного поля формы
---
так не работает вообще
---
у вас же не управляемые формы, судя по картинке в (11) ?

если так все должно работать, просто на картинке покажите что и как вы делаете

иначе получаются одни гадания
---
нажимаю,перейти-там справочник шаблонов-там меняю вес и объем и в номенклатуре должно поменяться объем и вес
---
Подкорректировал код в (14).
---
А когда надо? ванга думает что при записи )) Форма.Записать();
---
Вам нужно процедуру ПосчитатьОбъемы(Ссылка) вызывать при изменении объема и веса в процедурах ОбъемПриИзменении(Элемент), ВесПриИзменении(Элемент). А сейчас у вас только лишь при открытии
---
раскуривать событие ОбработкаОжидания, смотреть в СП ПодключитьОбработчикОжидания
---
Я смотрю тут одни экстрасенсы собрались... =)
---
ЭтаФорма.ЭлементыФормы.Вес.Значение=Выборка.Вес;
---
Все работает,но не обновляется
---
Попробуете так написать:

Объект.Вес = Выборка.Вес
---
```1c
    ЗапросОбъем=Новый Запрос;
    ЗапросОбъем.Текст= "ВЫБРАТЬ
    | СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес) КАК Вес,
    | ШаблоныСхемПакования.Владелец,
    | СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем) КАК Объем,
    | ШаблоныСхемПакования.Ссылка
    |ИЗ
    | Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныСхемПакования КАК ШаблоныСхемПакования
    | ПО ШаблоныСхемПакованияТЧСостав.Ссылка = ШаблоныСхемПакования.Ссылка
    |ГДЕ
    | ШаблоныСхемПакования.Владелец = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    | ШаблоныСхемПакования.Владелец,
    | ШаблоныСхемПакования.Ссылка" ;
    ЗапросОбъем.УстановитьПараметр("Ссылка", Ссылка);
    Выборка = ЗапросОбъем.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл
    Элемент = Выборка.Владелец.ПолучитьОбъект();
    Элемент.Объем= Выборка.Объем;
    Элемент.Вес=Выборка.Вес;
    Элемент.Записать();
    КонецЦикла;
```

Вернула обратно,к виду который был. Потому что надо прям записывать,т.к. до этого в отчет брались неправильные данные
---
Если вы хотите, чтобы на форме элемента справочника обновлялись реквизиты после закрытия формы Шаблонов, то вам надо написать (для управляемых форм):

В форме элемента шаблонов:

```1c
    &НаКлиенте
    Процедура ПриЗакрытии(ЗавершениеРаботы)
    Оповестить("ЗаписалиШаблонДляНоменклатуры");
    КонецПроцедуры
```

А на форме номенклатуры:

```1c
    &НаКлиенте
    Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "ЗаписалиШаблонДляНоменклатуры" Тогда
    ЭтотОбъект.Прочитать();
    КонецЕсли;
    КонецПроцедуры
```
---
обычные формы
---
Для обычных просто убрать &НаКлиенте
---
нет,не срабатывает
---
Надеюсь процедуры "ПриЗакрытии" и "ОбработкаОповещения" ты прописываешь через события формы? Ну тогда не знаю...
---
да, через события
---
Все сработало,Сделала вот так

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

```1c
    ПосчитатьОбъемы(Ссылка);
    ЭтаФорма.Прочитать();
```

Из за этого вся форма обновляется и теряет те данные. Можно это как то подправить?
---
Самый простой вариант, в Процедуре "ПриОткрытии" перед "ПосчитатьОбъемы(Ссылка);" записать реквизиты, не МЕНЯЮЩИЕСЯ в расчете объема, в переменные ,а потом после "ЭтаФорма.Прочитать()" вернуть реквизитам объекта данные из временных переменных...
---
подскажите пожалуйста,подробнее с примерами
Там очень много реквизитов
---
Как вариант вместо
ЭтаФорма.Прочитать();
написать
Если НЕ ЭтоНовый() Тогда ЭтаФорма.Прочитать(); КонецЕсли;
---
Спасибо,так и сделала уже
---
теперь надо,чтобы при копировании не копировались данные веса и объема ,т.е. были 0
---
В модуле объекта нужно прописать процедуру ПриКопировании:
Процедура ПриКопировании(ОбъектКопирования)
 Объем = 0;
        Вес =0;
КонецПроцедуры