Имя: Пароль:
1C
1С v8
Поле объекта недоступно для записи (ОсновнаяСкидка)
0 Sanjik
 
18.02.15
19:09
Здравствуйте форумчане, моя первая обработка, перечитал около 15-ти топиков по этой теме, понял, что надо использовать "ПолучитьОбъект()", но не могу понять как его использовать. Пробовал: "Объект = Результат.ПолучитьОбъект()" - ругается, "Объект = Результат.ОсновнаяСкидка.ПолучитьОбъект()" - тоже ругается.
ОсновнаяСкидка просто строка в табличной части документа.


Процедура КнопкаВыполнитьНажатие(Кнопка)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказТовары.Ссылка,
        |    ЗаказТовары.НомерСтроки,
        |    ЗаказТовары.Номенклатура,
        |    ЗаказТовары.Количество,
        |    ЗаказТовары.Размер,
        |    ЗаказТовары.СуммаБезСкидок,
        |    ЗаказТовары.Свойство,
        |    ЗаказТовары.ОсновнаяСкидка,
        |    ЗаказТовары.ЦенаПослеСкидки,
        |    ЗаказТовары.ДопСкидка1,
        |    ЗаказТовары.ЦенаПослеДопСкидки1,
        |    ЗаказТовары.ДопСкидка2,
        |    ЗаказТовары.ЦенаПослеДопСкидки2,
        |    ЗаказТовары.Сумма,
        |    ЗаказТовары.СкидкаДляРасчетаСебестоимости,
        |    ЗаказТовары.Себестоимость
        |ИЗ
        |    Документ.Заказ.Товары КАК ЗаказТовары";

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

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецПроцедуры
1 hhhh
 
18.02.15
19:14
об = Результат.Ссылка.ПолучитьОбъект();
2 Крошка Ру
 
18.02.15
19:25
(0)

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

Ты собрался записать выборку из запроса?
3 Sanjik
 
18.02.15
19:29
Нет, я хочу записать значение функции "ПолучитьОсновнуюФункцию" в строку табличной части "ОсновнаяСкидка".
Первый вариант работает, но не понял, а как от сюда обратится к табличной части "Товары"?
4 Sanjik
 
18.02.15
19:31
Вот по первому варианту, учитывая замечание. Но не работает.

Процедура КнопкаВыполнитьНажатие(Кнопка)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказТовары.Ссылка,
        |    ЗаказТовары.НомерСтроки,
        |    ЗаказТовары.Номенклатура,
        |    ЗаказТовары.Количество,
        |    ЗаказТовары.Размер,
        |    ЗаказТовары.СуммаБезСкидок,
        |    ЗаказТовары.Свойство,
        |    ЗаказТовары.ОсновнаяСкидка,
        |    ЗаказТовары.ЦенаПослеСкидки,
        |    ЗаказТовары.ДопСкидка1,
        |    ЗаказТовары.ЦенаПослеДопСкидки1,
        |    ЗаказТовары.ДопСкидка2,
        |    ЗаказТовары.ЦенаПослеДопСкидки2,
        |    ЗаказТовары.Сумма,
        |    ЗаказТовары.СкидкаДляРасчетаСебестоимости,
        |    ЗаказТовары.Себестоимость
        |ИЗ
        |    Документ.Заказ.Товары КАК ЗаказТовары";

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

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецПроцедуры
5 Sanjik
 
18.02.15
19:33
Ой, вот так:
Процедура КнопкаВыполнитьНажатие(Кнопка)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказТовары.Ссылка,
        |    ЗаказТовары.НомерСтроки,
        |    ЗаказТовары.Номенклатура,
        |    ЗаказТовары.Количество,
        |    ЗаказТовары.Размер,
        |    ЗаказТовары.СуммаБезСкидок,
        |    ЗаказТовары.Свойство,
        |    ЗаказТовары.ОсновнаяСкидка,
        |    ЗаказТовары.ЦенаПослеСкидки,
        |    ЗаказТовары.ДопСкидка1,
        |    ЗаказТовары.ЦенаПослеДопСкидки1,
        |    ЗаказТовары.ДопСкидка2,
        |    ЗаказТовары.ЦенаПослеДопСкидки2,
        |    ЗаказТовары.Сумма,
        |    ЗаказТовары.СкидкаДляРасчетаСебестоимости,
        |    ЗаказТовары.Себестоимость
        |ИЗ
        |    Документ.Заказ.Товары КАК ЗаказТовары";

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

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецПроцедуры
6 Крошка Ру
 
18.02.15
19:40
Тебе базовых знаний не хватает. Даже хз, что посоветовать. Ищи, гугли, читай Синтакс-Помошник.
А по теме:

Объект.Товары - это таб часть очередного документа из выборки. С ней работают через цикл Для Каждого Цикл КонецЦикла;

Опять-таки - Результат.Записать() - это очень плохо;

Ну и РасчетТабЧасти() - это ужже модуль telepat.dll надо подключать, а чёта лень.
7 intglass
 
18.02.15
19:40
ПолучитьОбъект() тебе нужно у Документа, а не у "ОсновнаяСкидка просто строка в табличной части документа". Т.е. "объект" это Документ, а не строка.
А вот у Объекта документа есть табличная часть Товары, которую тебе надо перебрать(не запросом).
Т.е. что то типа:
ОбДокумент = ТвояСсылкаНаДокументЗаказ.ПолучитьОбъект();
Для Каждого Строка Из ОбДокумент.Товары Цикл
Строка.ОсновнаяСкидка = 0;
КонецЦикла;
ОбДокумент.Записать();
8 Sanjik
 
18.02.15
20:34
Спасибо ОГРОМНОЕ intglass за объяснения! Все заработало! Знаю что у меня мало опыта, но все когда-то также начинали!
Рабочий вариант:


Процедура КнопкаВыполнитьНажатие(Кнопка)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказТовары.Ссылка,
        |    ЗаказТовары.НомерСтроки,
        |    ЗаказТовары.Номенклатура,
        |    ЗаказТовары.Количество,
        |    ЗаказТовары.Размер,
        |    ЗаказТовары.СуммаБезСкидок,
        |    ЗаказТовары.Свойство,
        |    ЗаказТовары.ОсновнаяСкидка,
        |    ЗаказТовары.ЦенаПослеСкидки,
        |    ЗаказТовары.ДопСкидка1,
        |    ЗаказТовары.ЦенаПослеДопСкидки1,
        |    ЗаказТовары.ДопСкидка2,
        |    ЗаказТовары.ЦенаПослеДопСкидки2,
        |    ЗаказТовары.Сумма,
        |    ЗаказТовары.СкидкаДляРасчетаСебестоимости,
        |    ЗаказТовары.Себестоимость
        |ИЗ
        |    Документ.Заказ.Товары КАК ЗаказТовары";

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

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


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