заполнить табличную часть из выгрузки запроса

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

РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выгрузить();
		
	Для каждого НоваяСтрока Из Объект.Товары Цикл
		ОбъектВыборки = Справочники.НомераГТД.НайтиПоКоду(Выборка);
		НоваяСтрока.НомерГТД = ОбъектВыборки;
				
	КонецЦикла;
По теме из базы знаний
Найденные решения
29. Anton_new01 19.12.23 14:30 Сейчас в теме
СписокНоменклатуры = Товары.Выгрузить().ВыгрузитьКолонку("Номенклатура");

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

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

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

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



PS. в корректности текста запроса сомневаюсь, но пусть будет так.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. nomad_irk 76 19.12.23 10:06 Сейчас в теме
(1)ChatGPT и иже с ним про 1С знают не много, не нужно их спрашивать про код.
user1619761; +1 Ответить
9. starik-2005 3039 19.12.23 10:21 Сейчас в теме
(1) 1. Ну код красив: стандарты соблюдены, отступы, имена переменных, результат запросы, выгрузка...
2. А дальше нужно примерно понимать, что же мы хотим сделать.
3. По всему видно, что хочется заполнить поле НомерГТД в табличной части.
4. По всему ясно, что это справочник элемента (ну или элемент справочника).
5. Ну а дальше надо ответить на несколько простых вопросов: что в результате запроса? Почему там нет ГТД? Как туда этот ГТД добавить? Как найти в выборке запроса нужный ГТД? Ну а как это засунуть в табличную часть - тут без претензий.
user1619761; +1 Ответить
10. StasOOn83 19.12.23 10:23 Сейчас в теме
(9) то есть через .выгрузить никак ?
konsta2006; +1 Ответить
12. starik-2005 3039 19.12.23 10:28 Сейчас в теме
(10) У каждой задачи есть сотни решений. Но если Вы никогда такие задачи не решали, то у Вас есть способность открыть еще как минимум одно решение. Там в п.5 есть вопросы - ответьте на них себе.
2. PowerBoy 3364 19.12.23 07:47 Сейчас в теме
Выборка = РезультатЗапроса.Выгрузить();
Выборка у вас Таблицазначений;
.....НайтиПоКоду(Выборка); - бред!
3. user1608137 19.12.23 08:18 Сейчас в теме
(2) Для Каждого НОВАЯСТРОКА тоже необычно ... Какой-то винегрет он собрал ...
4. user620512 19.12.23 09:36 Сейчас в теме
Попробуй подумать в сторону обхода выборки, а не выгрузки в ТаблицуЗначений

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

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

КонецЦикла;
Показать
8. StasOOn83 19.12.23 10:19 Сейчас в теме
(4)через .выбрать в результате ничего нет, только через выгрузить. Как так?
11. starik-2005 3039 19.12.23 10:25 Сейчас в теме
(8)
через .выбрать в результате ничего нет
Результатом Выбрать является Выборка - курсор некий, указывающий на пока еще никакую позицию. Для перехода к следующей позиции (строке) нужно делать Выборка.Следующий(), результатом которого является Да или Нет (ну или истина или ложь). Если результат - истина, то в переменной Выборка будут поля очередной строки запроса. Если ложь - все, строки в запросе закончились. Поэтому обычно сия конструкция используется таким образом: Пока Выборка.Следующий() Цикл ...
5. Anton_new01 19.12.23 10:05 Сейчас в теме
если у вас запрос формируется самостоятельно и наименования колонок соответствует наименованию колонок ТЧ.
то самое простое будет:

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

в случае если что-то не соответствует и требуется построчная дообработка данных, то смотри(4).
user1619761; +1 Ответить
7. StasOOn83 19.12.23 10:17 Сейчас в теме
(5)в запросе одно наименование получаю, а в тч их много
13. StasOOn83 19.12.23 10:57 Сейчас в теме
Что нетак с запросом? в консоле получаю поле с номером ГТД, в выгрузке тоже, а в выборке неопределено, в каких случаях такое может быть. запрос без связей, простейший из регистра, в регистре все заполнено.
	ВЫБРАТЬ
	|	ТоварыОрганизаций.ДокументРеализации КАК ДокументРеализации,
	|	ТоварыОрганизаций.Номенклатура КАК Номенклатура,
	|	ТоварыОрганизаций.НомерГТД КАК НомерГТДБезРНПТ,
	|	ТоварыОрганизаций.ДокументРеализации.Контрагент КАК ДокументРеализацииКонтрагент,
	|	ТоварыОрганизаций.Номенклатура.Артикул КАК НоменклатураАртикул,
	|	ТоварыОрганизаций.НомерГТД.РНПТ КАК НомерГТДРНПТ
	|ПОМЕСТИТЬ ВТ_ТоварыОрг
	|ИЗ
	|	РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
	|ГДЕ
	|	ТоварыОрганизаций.Номенклатура = &Номенклатура
	|	И ТоварыОрганизаций.НомерГТД.РНПТ = ЛОЖЬ
	|	И ТоварыОрганизаций.ДокументРеализации.Контрагент = &Контрагент
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ВТ_ТоварыОрг.НомерГТДБезРНПТ КАК НомерГТДБезРНПТ
	|ИЗ
	|	ВТ_ТоварыОрг КАК ВТ_ТоварыОрг
Показать
14. konsta2006 19.12.23 10:58 Сейчас в теме
в Выборке колонка должна называться так же как в ТЧ. Потом просто В ТЧ "Загрузите" это колонку. Цикл не нужен, посмотрите методы ТЧ (он же таблица значений если не ошибаюсь).
16. StasOOn83 19.12.23 11:05 Сейчас в теме
(14)в выборке из запроса значение неопределено, оно только в выгрузке есть
Прикрепленные файлы:
19. user620512 19.12.23 12:59 Сейчас в теме
(16) перечитай 11 ответ, тебе же черным по белому написали что выборку надо проходить с помощью цикла "Пока Выборка.Следующий() Цикл".

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

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
  Сообщить(Выборка.НомерГТДБезРНПТ);
КонецЦикла;
15. konsta2006 19.12.23 10:59 Сейчас в теме
(13)вы скорее всего отладку не правильно ведете - Выборка.НазваниеПоля
17. StasOOn83 19.12.23 11:08 Сейчас в теме
скрин к выгрузке здесь все норм
Прикрепленные файлы:
18. konsta2006 19.12.23 11:11 Сейчас в теме
(17) у вас в самом верху "Выгрузка" называется "Выборка" - посмотрите как переменную проименовали.
Брать колонку естественно нужно из выгрузки, которая создается методом "Выгрузить" и ее загружать в табличную часть.
21. StasOOn83 19.12.23 13:21 Сейчас в теме
(18)можете поточней описать? в выгрузке если я правильно понимаю тип строка, а в тч тип ссылка. как правильно из строки в ссылку преобразовать?
22. Anton_new01 19.12.23 13:37 Сейчас в теме
(21) в выгрузке у вас Таблица значений.
из строки в ссылку преобразовывать достаточно сложно и чаще всего не зачем.

вы лучше конкретный кусок кода приведите и место где у вас что-то не получается.
24. StasOOn83 19.12.23 13:47 Сейчас в теме
(22)
РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выгрузить();
        
    Для каждого НоваяСтрока Из Объект.Товары Цикл
        ОбъектВыборки = Справочники.НомераГТД.НайтиПоКоду(Выборка);
        НоваяСтрока.НомерГТД = ОбъектВыборки;
                
    КонецЦикла;


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

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

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

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

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

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

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

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



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

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

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

или если вам требуется наименование строковое, то так :
НоваяСтрока.НомерГТД = строка(Выборка.НомерГТДБезРНПТ);
26. StasOOn83 19.12.23 14:07 Сейчас в теме
(25)
НоваяСтрока.НомерГТД =Выборка.НомерГТДБезРНПТ;


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

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


ошибка
Поле объекта не обнаружено (НомерГТДБезРНПТ)
Прикрепленные файлы:
27. Anton_new01 19.12.23 14:14 Сейчас в теме
(24)
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.НомерГТД = Выборка.НомерГТДБезРНПТ;
КонецЦикла;


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


здесь ничего не заполняется, и добавляется пустая строка снизу
Прикрепленные файлы:
29. Anton_new01 19.12.23 14:30 Сейчас в теме
СписокНоменклатуры = Товары.Выгрузить().ВыгрузитьКолонку("Номенклатура");

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

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

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

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



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


завтра обязательно отпишусь
31. StasOOn83 20.12.23 08:24 Сейчас в теме
(29)
В (&СписокНоменклатуры)


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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот