Перебор и изменение элементов справочника

1. P1rate 01.12.16 11:46 Сейчас в теме
Добрый день. Помогите пожалуйста новичку. Есть вот такой запрос:
Запрос = Новый Запрос; 
Запрос.Текст = 
"ВЫБРАТЬ 
|	НоменклатураСостав.Наименование КАК Наименование, 
|	НоменклатураСостав.Количество, 
|	НоменклатураСостав.Цена, 
|	НоменклатураСостав.Стоимость, 
|	СтоимостьМатериалаСрезПоследних.Цена КАК ЦенаРегистра 
|ИЗ 
|	Справочник.Номенклатура.Состав КАК НоменклатураСостав 
|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура 
|	ПО НоменклатураСостав.Ссылка = Номенклатура.Ссылка, 
|	РегистрСведений.СтоимостьМатериала.СрезПоследних(&ПериодВыборки, Цена >0) КАК СтоимостьМатериалаСрезПоследних 
| 
|СГРУППИРОВАТЬ ПО 
|	НоменклатураСостав.Наименование, 
|	НоменклатураСостав.Количество, 
|	НоменклатураСостав.Цена, 
|	НоменклатураСостав.Стоимость, 
|	СтоимостьМатериалаСрезПоследних.Цена 
| 
|УПОРЯДОЧИТЬ ПО 
|	Наименование 
|АВТОУПОРЯДОЧИВАНИЕ"; 
Запрос.УстановитьПараметр("ПериодВыборки",Объект.ПериодВыборки); 

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

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

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



Соответственно запрос подбирает всю номенклатуру с ценой, количеством и общей стоимостью из ТЧ состав справочника номенклатура и левым соединением цены из регистра сведений на определённую дату. Как теперь в цикле пересчитать стоимость для каждой номенклатуры по новой цене из регистра и записать справочник с новыми данными номенклатур?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. romti 01.12.16 12:07 Сейчас в теме
в запрос добавьте еще ссылку на номенклатуру
потом в цикле
НомОбъект = НоменклатураСсылка.ПолучитьОбъект();
НомОбъект.Состав.Цена = Цена;
НомОбъект.Записать();
3. P1rate 01.12.16 13:00 Сейчас в теме
(2)Наверное, делаю что-то не так.


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


Ошибка: Переменная не определена (НоменклатураСсылка)
НомОбъект = <<?>>НоменклатураСсылка.ПолучитьОбъект(); (Проверка: Сервер)
4. shnurov 01.12.16 13:03 Сейчас в теме
ВыборкаДетальныеЗаписи.НоменклатураСсылка.ПолучитьОбъект();

Платформа же написала переменна неопределенна.
5. P1rate 01.12.16 13:05 Сейчас в теме
(4)Да, я писал в начале темы, что я новичок. Просто по самим запросам в интернете много статей и книг, но нигде нет инфы именно про дальнейшую обработку полученных данных.
8. P1rate 01.12.16 13:31 Сейчас в теме
(4)Сделал по вашим советами и теперь у меня вот так

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

Наименование справочника номенклатура мне выводит, но на состав.цену ругается: Поле объекта не обнаружено (Цена)
Сообщить( НоменклатураОбъект.Состав.Цена);
6. S.V.Y 17 01.12.16 13:07 Сейчас в теме
Запрос = Новый Запрос; 
Запрос.Текст = 
"ВЫБРАТЬ 
|    НоменклатураСостав.Наименование КАК Наименование, 
|    НоменклатураСостав.Ссылка КАК Ссылка, 
|    НоменклатураСостав.Количество, 
|    НоменклатураСостав.Цена, 
|    НоменклатураСостав.Стоимость, 
|    СтоимостьМатериалаСрезПоследних.Цена КАК ЦенаРегистра 
|ИЗ 
|    Справочник.Номенклатура.Состав КАК НоменклатураСостав 
|    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура 
|    ПО НоменклатураСостав.Ссылка = Номенклатура.Ссылка, 
|    РегистрСведений.СтоимостьМатериала.СрезПоследних(&ПериодВыборки, Цена >0) КАК СтоимостьМатериалаСрезПоследних 
| 
|СГРУППИРОВАТЬ ПО 
|    НоменклатураСостав.Ссылка, 
|    НоменклатураСостав.Наименование, 
|    НоменклатураСостав.Количество, 
|    НоменклатураСостав.Цена, 
|    НоменклатураСостав.Стоимость, 
|    СтоимостьМатериалаСрезПоследних.Цена 
| 
|УПОРЯДОЧИТЬ ПО 
|    Наименование 
|АВТОУПОРЯДОЧИВАНИЕ"; 
Запрос.УстановитьПараметр("ПериодВыборки",Объект.ПериодВыборки); 

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

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл 
     НоменклатураОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
     // тут обработка тч состав
КонецЦикла; 
 
Показать
7. romti 01.12.16 13:28 Сейчас в теме
(6)
ну отлично, теперь ошибки нет?
поставьте точку останова на КонецЦикла и когда дойдёте до туда, выделяйте переменную НоменклатураОбъект, правой кнопкой по выделению "Вычислить выражение" и там уже ищите реквизит, который хотите изменить.
9. P1rate 01.12.16 13:32 Сейчас в теме
(7)Как в 6 работает не верно, ибо дублирует значения при запросе.
10. S.V.Y 17 02.12.16 10:44 Сейчас в теме
(9) Ничего оно не дублирует, там табличная часть просто. А, ты уже продублировал тему, и решение тебе подсказали.
Оставьте свое сообщение

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