Здравствуйте! Подскажите пожалуйста. Есть ТЧ документа. В нем есть реквизит "Номер Инвойса" - текстовый. Так же есть реквизит "Справочник Номер Инвойса" - ссылка на справочник. Вот, я пытаюсь из поля "Номер Инвойса" значение вставить в поле "Справочник Номер Инвойса". но как не сделаю пишет : Поле объекта недоступно для записи (СправочникНомерИнвойса)
{ВнешняяОбработка.Инвойс.Форма.Форма.Форма(48)}:Стр.СправочникНомерИнвойса = Справочники.СпрНомерИнвойса.НайтиПоНаименованию(Выборка.НомерИнвойса);
{ВнешняяОбработка.Инвойс.Форма.Форма.Форма(57)}:ПускНаСервере();

Делаю это через обработку по кнопке пуск. За ранее спасибо за помощь!

```1c
    &НаСервере
    Процедура ПускНаСервере()

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЗаказПоставщикуТовары.НомерИнвойса КАК НомерИнвойса,
    | ЗаказПоставщикуТовары.Ссылка КАК Ссылка,
    | ЗаказПоставщикуТовары.Ссылка.Партнер КАК Партнер,
    | ЗаказПоставщикуТовары.СправочникНомерИнвойса КАК СпрНомерИнвойса
    |ИЗ
    | Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
    |ГДЕ
    | ЗаказПоставщикуТовары.НомерИнвойса <> "" ";

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл

    ПолучитьОбъектТч = Выборка.Ссылка.Товары;

    Стр = ПолучитьОбъектТч.Найти(Выборка.НомерИнвойса, "НомерИнвойса");
    Стр.СправочникНомерИнвойса = Справочники.СпрНомерИнвойса.НайтиПоНаименованию(Выборка.НомерИнвойса);

    КонецЦикла;

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

Еще пытался так: ошибка та же

```1c
    Выборка.СправочникНомерИнвойса = Выборка.НомерИнвойса;

    // И так то же самое

    Выборка.СправочникНомерИнвойса = Справочники.СпрНомерИнвойса.НайтиПоНаименованию(Выборка.НомерИнвойса);
```
---
удаляйте все и пишите:
Для Каждого СтрокаТЧ ИЗ Объект.Товары Цикл
СтрокаТЧ.СправочникНомерИнвойса = Справочники.СправочникНомерИнвойса.НайтиПоНаименованию(СтрокаТЧ.НомерИнвойса);
КонецЦикла
---
Понял, тут немного я затупил, думал, что у вас кнопка на форме.
Ваш план таков:
1. пишете запрос - получаете оттуда только ссылки на документы
2. получаете объект по ссылке для изменения
3. меняете нужный реквизит, записываете объект
---
У вас есть выборка, которая попадает в переменную Выборка. Далее вы к каждому полю выборки обращаетесь через точку. В первом варианте вы пытаетесь результату поля СправочникНомерИнвойса присвоить значение результата поля НомерИнвойса. Во втором вы так же пытаетесь присвоить полю выборки, но уже ссылку на объект.
Если реквизит, в который нужно вставить значение выборки находится в ТЧ документа, то необходимо присвоить Объекту ТЧ результат выборки
В модуле формы:
Объект.<ТабличнаяЧасть>.<Реквизит> = Выборка.<Нужное поле выборки>
В модуле объекта: <ТабличнаяЧасть>.<Реквизит> = Выборка.<Нужное поле выборки>

В первом коде где запрос вы получаете только ссылку. Чтобы получить Объект для изменения необходимо использовать метод ПолучитьОбъект()
Объект = Ссылка.ПолучитьОбъект()

Если я правильно понял, то вам вообще достаточно обойти в цикле табличную часть без запроса:
На форме:
Для Каждого СтрокаТЧ ИЗ Объект.<ТабличнаяЧасть> Цикл
       СтрокаТЧ.СправочникНомерИнвойса = Справочники.СправочникНомерИнвойса.НайтиПоНаименованию(СтрокаТЧ.НомерИнвойса);
КонецЦикла

А в дальнейшем, если будут в ручную вводится номера, лучше вообще это обработать в событии ПриИзменении реквизита НомерИнвойса
---
Делаю в модуле формы:

```1c
    ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ДокументОбъект.Товары.СправочникНомерИнвойса = Выборка.НомерИнвойса;
```

Дает ошибку: Поле объекта не обнаружено (СправочникНомерИнвойса)
---
Во-первых, что вы хотите сделать?
Во-вторых, у вас какой-то круговорот инвойса в 1С происходит)
У вас сейчас есть табличная часть где заполнен строковый реквизит НомерИнвойса, но не заполнен реквизит с ссылкой на справочник с номерами инвойсов. Вы нажимаете кнопку, программа на сервере делает запрос к БД, где берет вообще все данные всех табличных частей, которые есть в системе. Далее вы, обходя каждую строку запроса, пытаетесь получить объект по ссылке и найти строку для изменения. Это какая-то ерунда

Для чего вы вообще используете запрос? Запросом можно только получить данные, но не менять их. Табличная часть документа для обработки у вас доступна при обращении к Объект.Товары.
---
Ну так "ДокументОбъект.Товары" это табличная часть, которая состоит из строк. Перебирайте строки и обращайтесь к реквизитам строки. У вас в документах часть реквизитов "Справочник Номер Инвойса" не заполнены или все?
---
Я делал через цикл

Если я правильно понял, то вам вообще достаточно обойти в цикле табличную часть без запроса:
На форме:
Для Каждого СтрокаТЧ ИЗ Объект.<ТабличнаяЧасть> Цикл
СтрокаТЧ.СправочникНомерИнвойса = Справочники.СправочникНомерИнвойса.НайтиПоНаименованию(СтрокаТЧ.НомерИнвойса);
КонецЦикла

Вот так:

```1c
    Для Каждого СтрокаТч Из Метаданные.Документы.ЗаказПоставщику.ТабличныеЧасти.Товары.Реквизиты Цикл
    СтрокаТч.СправочникНомерИнвойса = Справочники.СпрНомерИнвойса.НайтиПоНаименованию(СтрокаТЧ.НомерИнвойса);
    КонецЦикла;
```

Но ошибка "Поле объекта не обнаружено (СправочникНомерИнвойса)"
---
Ну значит нет таких метаданных. Обращайтесь к данным по их именам, а не по тому, как вам удобнее.
---
Очень много точек. Достаточно на форме использовать "Из Объект.Товары Цикл"
И для понятности, делайте точку останова и проверяйте переменную, что в ней вообще находится - правой кнопкой на переменную - вычислить выражение
---
Было первоначально поле "Номер инвойса" оно текстовое, в него вносились номера. Потом захотели добавить поле чтобы туда можно было вносить и дату и комментарий, по этому был создан справочник с формой, а в табличной части реквизит "СправочникНомерИнвойса". В этот справочник я обработкой уже перенес все существующие инвойсы, теперь пытаюсь добавить в поле табличной части СправочникНомерИнвойса = Номер инвойса , чтобы потом удалить поле "Номер инвойса" окончательно
---
удаляйте все и пишите:
Для Каждого СтрокаТЧ ИЗ Объект.Товары Цикл
СтрокаТЧ.СправочникНомерИнвойса = Справочники.СправочникНомерИнвойса.НайтиПоНаименованию(СтрокаТЧ.НомерИнвойса);
КонецЦикла
---
А как указать что мне нужны ТЧ только по документам "Заказ поставщику" ? Если так не верно - Метаданные.Документы.ЗаказПоставщику.ТабличныеЧасти.Товары.Реквизиты
---
Выберите запросом нужные вам документы и перебирайте выборку. Внутри цикла используйте то, что вам написали в (10)
---
Понял, тут немного я затупил, думал, что у вас кнопка на форме.
Ваш план таков:
1. пишете запрос - получаете оттуда только ссылки на документы
2. получаете объект по ссылке для изменения
3. меняете нужный реквизит, записываете объект
---
Насколько я понял у него внешняя обработка и список документов он получает произвольный: "Делаю это через обработку по кнопке пуск"
---
дада, я понял уже, исправил сообщение
---
Да, сделал уже всё успешно. Спасибо за помощь!

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

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | РеализацияТоваровУслуг.Ссылка КАК Ссылка
    |ИЗ
    | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг";

    РезультатЗапроса = Запрос.Выполнить();

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

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