Доброго дня профессионалы! Подскажите как заполнить столбец ТЧ документа из выгрузки запроса. в выгрузке через отладку необходимое поле получаю. Но в ТЧ записать не могу, подскажите как?

```1c
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выгрузить();

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

    КонецЦикла;
```
---
```1c
    СписокНоменклатуры = Товары.Выгрузить().ВыгрузитьКолонку("Номенклатура");

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

    Выборка = Запрос.Выполнить.Выбрать();
    СоответствиеНоменклатураНомерГТД = Новый Соответствие;

    Пока Выборка.Следующий() Цикл
    СоответствиеНоменклатураНомерГТД.Вставить(Выборка.Номенклатура, Выборка.НомерГТД);
    КонецЦикла;

    Для Каждого СтрокаТЧ Из Товары Цикл
    СтрокаТЧ.НомерГТД = СоответствиеНоменклатураНомерГТД.Получить(СтрокаТЧ.Номенклатура);
    КонецЦикла;
```

PS. в корректности текста запроса сомневаюсь, но пусть будет так.
---
ChatGPT и иже с ним про 1С знают не много, не нужно их спрашивать про код.
---
1. Ну код красив: стандарты соблюдены, отступы, имена переменных, результат запросы, выгрузка...
2. А дальше нужно примерно понимать, что же мы хотим сделать.
3. По всему видно, что хочется заполнить поле НомерГТД в табличной части.
4. По всему ясно, что это справочник элемента (ну или элемент справочника).
5. Ну а дальше надо ответить на несколько простых вопросов: что в результате запроса? Почему там нет ГТД? Как туда этот ГТД добавить? Как найти в выборке запроса нужный ГТД? Ну а как это засунуть в табличную часть - тут без претензий.
---
то есть через .выгрузить никак ?
---
У каждой задачи есть сотни решений. Но если Вы никогда такие задачи не решали, то у Вас есть способность открыть еще как минимум одно решение. Там в п.5 есть вопросы - ответьте на них себе.
---
Выборка = РезультатЗапроса.Выгрузить();
Выборка у вас Таблицазначений;
.....НайтиПоКоду(Выборка); - бред!
---
Для Каждого НОВАЯСТРОКА тоже необычно ... Какой-то винегрет он собрал ...
---
Попробуй подумать в сторону обхода выборки, а не выгрузки в ТаблицуЗначений

```1c
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    // обходим результат запроса
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

    // добавляем строку ТЧ
    НоваяСтрока = Объект.Товары.Добавить();
    // присваиваем значение, если в выборке поле код называется по другому, замени на другое
    НоваяСтрока.НомерГТД = Справочники.НомераГТД.НайтиПоКоду(ВыборкаДетальныеЗаписи.Код);

    КонецЦикла;
```
---
через .выбрать в результате ничего нет, только через выгрузить. Как так?
---
через .выбрать в результате ничего нетРезультатом Выбрать является Выборка - курсор некий, указывающий на пока еще никакую позицию. Для перехода к следующей позиции (строке) нужно делать Выборка.Следующий(), результатом которого является Да или Нет (ну или истина или ложь). Если результат - истина, то в переменной Выборка будут поля очередной строки запроса. Если ложь - все, строки в запросе закончились. Поэтому обычно сия конструкция используется таким образом: Пока Выборка.Следующий() Цикл ...
---
если у вас запрос формируется самостоятельно и наименования колонок соответствует наименованию колонок ТЧ.
то самое простое будет:

Объект.Товары.Загрузить(Запрос.Выполнить().Выгрузить());

в случае если что-то не соответствует и требуется построчная дообработка данных, то смотри(4).
---
в запросе одно наименование получаю, а в тч их много
---
Что нетак с запросом? в консоле получаю поле с номером ГТД, в выгрузке тоже, а в выборке неопределено, в каких случаях такое может быть. запрос без связей, простейший из регистра, в регистре все заполнено.

```1c
    ВЫБРАТЬ
    | ТоварыОрганизаций.ДокументРеализации КАК ДокументРеализации,
    | ТоварыОрганизаций.Номенклатура КАК Номенклатура,
    | ТоварыОрганизаций.НомерГТД КАК НомерГТДБезРНПТ,
    | ТоварыОрганизаций.ДокументРеализации.Контрагент КАК ДокументРеализацииКонтрагент,
    | ТоварыОрганизаций.Номенклатура.Артикул КАК НоменклатураАртикул,
    | ТоварыОрганизаций.НомерГТД.РНПТ КАК НомерГТДРНПТ
    |ПОМЕСТИТЬ ВТ_ТоварыОрг
    |ИЗ
    | РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
    |ГДЕ
    | ТоварыОрганизаций.Номенклатура = &Номенклатура
    | И ТоварыОрганизаций.НомерГТД.РНПТ = ЛОЖЬ
    | И ТоварыОрганизаций.ДокументРеализации.Контрагент = &Контрагент
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВТ_ТоварыОрг.НомерГТДБезРНПТ КАК НомерГТДБезРНПТ
    |ИЗ
    | ВТ_ТоварыОрг КАК ВТ_ТоварыОрг
```
---
в Выборке колонка должна называться так же как в ТЧ. Потом просто В ТЧ "Загрузите" это колонку. Цикл не нужен, посмотрите методы ТЧ (он же таблица значений если не ошибаюсь).
---
в выборке из запроса значение неопределено, оно только в выгрузке есть
---
перечитай 11 ответ, тебе же черным по белому написали что выборку надо проходить с помощью цикла "Пока Выборка.Следующий() Цикл".

https://its.1c.ru/db/metod8dev/content/2582/hdoc
Сделай как показано в пункте 4, у тебя будет примерно так

```1c
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.НомерГТДБезРНПТ);
    КонецЦикла;
```
---
вы скорее всего отладку не правильно ведете - Выборка.НазваниеПоля
---
скрин к выгрузке здесь все норм
---
у вас в самом верху "Выгрузка" называется "Выборка" - посмотрите как переменную проименовали.
Брать колонку естественно нужно из выгрузки, которая создается методом "Выгрузить" и ее загружать в табличную часть.
---
можете поточней описать? в выгрузке если я правильно понимаю тип строка, а в тч тип ссылка. как правильно из строки в ссылку преобразовать?
---
в выгрузке у вас Таблица значений.
из строки в ссылку преобразовывать достаточно сложно и чаще всего не зачем.

вы лучше конкретный кусок кода приведите и место где у вас что-то не получается.
---
```1c
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выгрузить();

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

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

проблема вставить результаты выгрузки, скриншот прикрепляю, в столбец табличной части
---
)) в табличной части тип ссылка, потому что вы ее не получили.
я не помню точно как к табличной части обращаться, если вы в модуле формы, то по моему просто по имени можно:
- примарно так ТабличнаяЧасть.Загрузить(ИмяТаблицыЗначений);

Только толи все названия колонок должны совпадать, толи ваша колонка в ТаблицеЗначений должна совпасть хотя-бы с одной из ТЧ. Погуглите
---
вам же написали уже 2 раза в (4) и в (11).

у запроса есть два метода Выгрузить() и Выбрать().
У Выгрузить() - результат помещается в таблицу значений - сразу.
у Выбрать() - происходит обход по строчно методом Следующий() см. (4).

Значение Неопределено не может там быть.

на этапе выбрать там будет пустое значение типа ВыборкаИзРезультатаЗапроса.
после команды Следующий() - будет некая "структура" с расшифровкой вашей строки запроса.

такое ощущение что вы не пытаетесь разобраться, а пытаетесь нас запутать.

также допускаю еще один вараинт проблемы, что у вас НомерГТД ссылочный тип(судя по запросу), а в ТАбличной части некий другой тип и они разные - в следствии чего значения сбрасываются.
Но из ваших описаний не похоже на эту ошибку.
---
то есть, то что через отладку в выборке значение не определено, на самом деле определено?? я же скинул скриншот, значение только в выгрузке определяется, в выборке же = неопределено.

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

Неработает...
столбец не заполняется, да еще и подставляется снизу пустая строка в тч
---
ну вот с 7 утра до 13 часов мы пытались выяснить в чем проблема...
про строчку
НоваяСтрока.НомерГТД = Справочники.НомераГТД.НайтиПоКоду(Выборка.НомерГТДБезРНПТ);
никто ничего не говорил...

у вас команда
Справочники.НомераГТД.НайтиПоКоду(Выборка.НомерГТДБезРНПТ)
работает следующим образом:
1. в Выборка.НомерГТДБезРНПТ - у вас ссылка типа справочникссылка.НомерГТД
2. команда Справочники.НомераГТД.НайтиПоКоду( ... предполагает что вы введете текстовый индтивикатор Код по которому система найдет соответсвие и выдаст вам это значение. когда вы пихаете туда ссылку, она ничего не находит естественно.

попробуйте так:
НоваяСтрока.НомерГТД =Выборка.НомерГТДБезРНПТ;

или если вам требуется наименование строковое, то так :
НоваяСтрока.НомерГТД = строка(Выборка.НомерГТДБезРНПТ);
---
НоваяСтрока.НомерГТД =Выборка.НомерГТДБезРНПТ;

в форме номерГТД это ссылочный тип

```1c
    Для каждого НоваяСтрока Из Объект.Товары Цикл
    НоваяСтрока.НомерГТД = Выборка.НомерГТДБезРНПТ;
    КонецЦикла;
```

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

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

здесь ничего не заполняется, и добавляется пустая строка снизу
---
```1c
    СписокНоменклатуры = Товары.Выгрузить().ВыгрузитьКолонку("Номенклатура");

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

    Выборка = Запрос.Выполнить.Выбрать();
    СоответствиеНоменклатураНомерГТД = Новый Соответствие;

    Пока Выборка.Следующий() Цикл
    СоответствиеНоменклатураНомерГТД.Вставить(Выборка.Номенклатура, Выборка.НомерГТД);
    КонецЦикла;

    Для Каждого СтрокаТЧ Из Товары Цикл
    СтрокаТЧ.НомерГТД = СоответствиеНоменклатураНомерГТД.Получить(СтрокаТЧ.Номенклатура);
    КонецЦикла;
```

PS. в корректности текста запроса сомневаюсь, но пусть будет так.
---
"ВЫБРАТЬ
| ТоварыОрганизаций.Номенклатура КАК Номенклатура,
| ТоварыОрганизаций.НомерГТД КАК НомерГТД
|ИЗ
| РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
|ГДЕ
| ТоварыОрганизаций.Номенклатура В (&СписокНоменклатуры)
| И ТоварыОрганизаций.НомерГТД.РНПТ = ЛОЖЬ
| И ТоварыОрганизаций.ДокументРеализации.Контрагент = &Контрагент";

завтра обязательно отпишусь
---
В (&СписокНоменклатуры)

Все работает! Спасибо! решение сложнее чем я думал

p.s через выгрузку у меня тоже получилось записать значение в ТЧ, при обращении через индекс Выборка[0].НомерГТДБезРНПТ. Но записывалась только одна строка, если в ТЧ было больше одной строки, то ошибка индекс выходит за пределы массива.