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

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) Ничего оно не дублирует, там табличная часть просто. А, ты уже продублировал тему, и решение тебе подсказали.
Оставьте свое сообщение

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