Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменение результата запроса  (Прочитано 11166 раз)
0 Пользователей и 1 Гость смотрят эту тему.
alinka1628
Интересующийся

ru
Offline Offline

« : 27-02-2012 05:37 » 

Добрый день!
Подскажите пожалуйста, можно ли при выполнении некоторых условий изменить результат запроса?
Код: (1C v8)
Запрос1 = Новый Запрос;
                Запрос1.УстановитьПараметр("НаименованиеНоменклатуры", ВыборкаДетальныеЗаписи.Номенклатура);
                Запрос1.Текст = СформироватьТекстЗапроса();
                Результат1 = Запрос1.Выполнить();
                ВыборкаДетальныеЗаписи1 = Результат1.Выбрать();
                                       
                //вывод выборки комплектующих номенклатуры из справочника Спецификация номенклатуры
                Если НЕ Результат1.Пустой() Тогда
                 ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
                 ДокументРезультат.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
                 ДокументРезультат.Вывести(ОбластьШапкаДеталиКомплект);
               
                СуммаИтог1 = 0;
                Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
                  ОбластьДеталиКомплект.Параметры.Заполнить(ВыборкаДетальныеЗаписи1);
                  ДокументРезультат.Вывести(ОбластьДеталиКомплект, ВыборкаДетальныеЗаписи1.Уровень());
                  СуммаИтог1 = СуммаИтог1 + ВыборкаДетальныеЗаписи1.Стоимость;
            КонецЦикла;
                 
                  ВыборкаДетальныеЗаписи.Цена = 0;
                  ВыборкаДетальныеЗаписи.Цена = СуммаИтог1;
                  ОбластьДетальныхЗаписей.Параметры.Цена = ВыборкаДетальныеЗаписи.Цена;
                  ВыборкаДетальныеЗаписи.Стоимость = ВыборкаДетальныеЗаписи.Цена * ВыборкаДетальныеЗаписи.Количество;
                  ОбластьДетальныхЗаписей.Параметры.Стоимость = ВыборкаДетальныеЗаписи.Стоимость;

      Иначе
          //вывод строки основного запроса
            ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);  
                ДокументРезультат.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
         
        КонецЕсли;
Выдает ошибку:
{Отчет.СебестоимостьПоКомплектующим.Форма.СебестоимостьПоКомплектующим.Форма(78)}: Поле объекта недоступно для записи (Цена)
        ВыборкаДетальныеЗаписи.Цена = 0;
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #1 : 27-02-2012 08:44 » 

Нет результат запроса изменить нельзя.
Но в вашем случае, по моему, можно обойтись и так:

Код:
  Если НЕ Результат1.Пустой() Тогда
            ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
            ДокументРезультат.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
           ДокументРезультат.Вывести(ОбластьШапкаДеталиКомплект);
               
           СуммаИтог1 = 0;
           Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
                  ОбластьДеталиКомплект.Параметры.Заполнить(ВыборкаДетальныеЗаписи1);
                  ДокументРезультат.Вывести(ОбластьДеталиКомплект, ВыборкаДетальныеЗаписи1.Уровень());
                  СуммаИтог1 = СуммаИтог1 + ВыборкаДетальныеЗаписи1.Стоимость;
            КонецЦикла;

            ОбластьДетальныхЗаписей.Параметры.Цена = СуммаИтог1;
            ОбластьДетальныхЗаписей.Параметры.Стоимость = СуммаИтог1 * ВыборкаДетальныеЗаписи.Количество;

   Иначе
          //вывод строки основного запроса
            ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи); 
             ДокументРезультат.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
   КонецЕсли;

Сомневаюсь в полной правильности этого куска кода и его оптимальности, потому  что задачу не знаю и всего вашего кода не видел.
А еще, для меня остается загадкой, зачем вы пытались "изменить результат запроса".
Записан
alinka1628
Интересующийся

ru
Offline Offline

« Ответ #2 : 27-02-2012 08:57 » new

Спасибо за ответ! хотелось оптимизировать, не нельзя так нельзя, значит сделала правильно. У меня выполняется 2 запроса, поэтому в некоторых случаях необходимо менять значения. Еще раз спасибо, нашла альтернативу!  Ага
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines