Имя: Пароль:
1C
 
Клонирование объекта
0 Gorr
 
11.10.04
14:51
Можно ли копировать объект например запрос?
Зачем?
Нужно иметь два экземпляра запроса с одним текстом. Конечно можно вызвать два раза метод выполнить. Но красивее и быстрее было бы выполнить метод один раз и затем просто клонировать объект.
Некоторые скажут выгрузи в ТЗ!!! Но уважаемые ТЗ не поддерживает метод Получить(значГР1,значГР2,и тд) - поиск по нескольким критериям сразу.
1 Волшебник
 
11.10.04
14:53
Зачем нужно иметь два экземпляра запроса с одним текстом?
2 Gorr
 
11.10.04
15:23
ок, я просто сюда приведу фрагмент отчета:
   ТЗ =    "//{{ЗАПРОС(СотрЗапрос)
   |Период с ДатаАктуальности по (КонМесяца(ДатаАктуальности));
   |ВР = ЖурналРасчетов.Зарплата.ВидРасч;
   |рез = ЖурналРасчетов.Зарплата.Результат;
   |подр = ЖурналРасчетов.Зарплата.Объект.Подразделение;
   |сотр = ЖурналРасчетов.Зарплата.Объект;
   |Функция Результат = Сумма(рез);
   |Группировка сотр упорядочить по сотр.Код;
   |Группировка ВР упорядочить по ВР.Очередность;
   |Условие(рез <> 0);
   |Условие(Подр в Подразделение);
   |Условие(ВР.ВходитВГруппу(ГруппаРасчетов.Начисления)=1);
   |"//}}ЗАПРОС
   ;
   
   СотрЗапр = создатьобъект("Запрос");
   если СотрЗапр.Выполнить(ТЗ) = 0 тогда
       сообщить("ошибка запроса");
       возврат;
   конецесли;    
   
   СотрЗапр1 = создатьобъект("Запрос");
   если СотрЗапр1.Выполнить(ТЗ) = 0 тогда
       сообщить("ошибка запроса");
       возврат;
   конецесли;
   
   ВРЗапрос = создатьобъект("Запрос");
   ТЗ =    "//{{ЗАПРОС(ВРЗапрос)
   |Период с ДатаАктуальности по (КонМесяца(ДатаАктуальности));
   |ВР = ЖурналРасчетов.Зарплата.ВидРасч;
   |рез = ЖурналРасчетов.Зарплата.Результат;
   |подр = ЖурналРасчетов.Зарплата.Объект.Подразделение;
   |Функция Результат = Сумма(рез);
   |Группировка ВР упорядочить по ВР.Очередность;
   |Условие(рез <> 0);
   |Условие(Подр в Подразделение);
   |Условие(1 = ВР.ВходитВГруппу(ГруппаРасчетов.Начисления));
   |"//}}ЗАПРОС
   ;
...
   пока 1 = СотрЗапр.Группировка("Сотр") цикл
       ВсегоНач = СотрЗапр.Результат;
       ИтВсегоНач = ИтВсегоНач + ВсегоНач;
       НомерПП = НомерПП+1;
       Таб.ВывестиСекцию("Рез|ЗаглВерт");
       ВРЗапрос.ВНачалоВыборки();
       пока 1=ВРЗапрос.Группировка("ВР") цикл
           РезВР=0;
           если 1 = СотрЗапр1.Получить(СотрЗапр.Сотр,ВРЗапрос.ВР) тогда
               РезВР = СотрЗапр1.Результат;
           конецесли;
           Таб.ПрисоединитьСекцию("Рез|ВР");
       конеццикла;
       Таб.ПрисоединитьСекцию("Рез|ИтогНач");
   конеццикла;
...
Надеюсь идея понятна
3 Gorr
 
11.10.04
15:23
в данном примере функция выполнить вызывается дважды, интереснее было бы клонировать запрос.