Требуется помощь.
В документе имеется реквизит Номенклатура и табличная часть ОбъемРемонта, в табличной части ссылки на справочник с о перечнем работ.
Как при сохранении документа в элементы справочника. которые были задействованы, записать информацию о номенклатуре, для которой они были использованы.

У меня при попытке записи в справочник с переченем работ вылетает ошибка "Объект недоступен для изменения" т.е элементы которые используюттся в форме не доступны для редактирования.

Цель задачи записать в справочник информацию о номенклатуре для которой используется элемент, для дальнейшего использования этих данных при отборе работ для конкретной номенклатуры.
---
А прямо так и писать

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

```1c
    Для Каждого СтрокаТЧ Из Работы.ОбъемРемонта Цикл
    Сообщить(СтрокаТЧ.ОбъемРаботы);
    ЭлементОбъект = СтрокаТЧ.ОбъемРаботы.ПолучитьОбъект();
    НоваяСтрока = ЭлементОбъект.Ссылка.Номенклатура.Добавить();
    на это строке ошибка "Объект недоступен для изменения."

    НоваяСтрока.Номенклатура = Номенклатура;

    ЭлементОбъект.Записать();

    КонецЦикла;
```
---
```1c
    НоваяСтрока = ЭлементОбъект.Номенклатура.Добавить();
```

Не надо в ссылку писать.
Но это все дичь, если честно.
Второй раз запишите документ, еще раз добавится.
100 раз запишите документ, будет 100 записей.
И так при записи каждого документа.
---
Поменял. теперь Поле объекта не обнаружено (Номенклатура)

контроль на повторную запись я потом сделаю. Сначала нужно понять как записать.
Хотя через отладку табличную часть "Номенклатура" видно.
---
Если цель - получить информацию, в какой работе какая номенклатура использовалась, было бы проще сделать отчет на СКД.
---
нет цель собрать данные какая номенклатура используется для какой работы, чтобы в дальнейшем по этим данным сделать автоподбор для выбора работ для конкретной номенклатуры. Сначала хотел в ручную ввести соответствие, но это получается несколько тысяч позиций. а так оно само постепенно соберется.
---
Наймите программиста, это не будет дорого
Это все делается не так, архитектуру программы тоже надо сделать правильно, и язык программирования 1с тоже не настолько банален, как кажется на первый взгляд из-за того, что там все по-русски.
---
исправил код.

```1c
    Для Каждого СтрокаТЧ Из Работы.ОбъемРемонта Цикл
    Сообщить(СтрокаТЧ.ОбъемРаботы);
    ЭлементОбъект = СтрокаТЧ.ОбъемРаботы.ПолучитьОбъект();
    НоваяСтрока = ЭлементОбъект.Номенклатура.Добавить();

    НоваяСтрока.Деталь = Номенклатура_оборудования;

    ЭлементОбъект.Записать();

    КонецЦикла;
```

Но все равно пишет

Ошибка при установке значения атрибута контекста (Объект)
{Документ.Работы.Форма.ФормаДокумента.Форма(177)}: НаполнениеЦенника( Объект, Объект.Номенклатура);
по причине:
Нельзя изменять поле, содержащее объект данных формы
---
Код процедуры НаполнениеЦенника полностью приведите.
---
```1c
    &НаСервере
    Процедура НаполнениеЦенника(Работы, Номенклатура_оборудования)
    Для Каждого СтрокаТЧ Из Работы.ОбъемРемонта Цикл
    Сообщить(СтрокаТЧ.ОбъемРаботы);
    ЭлементОбъект = СтрокаТЧ.ОбъемРаботы.ПолучитьОбъект();
    НоваяСтрока = ЭлементОбъект.Номенклатура.Добавить();

    НоваяСтрока.Деталь = Номенклатура_оборудования;

    ЭлементОбъект.Записать();

    КонецЦикла;
    //
    КонецПроцедуры
```
---
А зачем передавать туда объект? И Объект и Объект.Номенклатура на сервере в контекстном вызове так же доступен, как и на клиенте.
---
А как тогда это можно написать?
---
А прямо так и писать

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