Имя: Пароль:
1C
1C 7.7
v7: Оптимизация процедуры
0 Ayvengo
 
26.03.13
12:17
Всем привет! С 7кой не работал, но есть процедура, которая как мне кажется нуждается в оптимизации. Можно ли как то это все сделать одним запросом?

Процедура Сформировать()
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "
   |Период с ВыбНачПериода по ВыбКонПериода;
   |
   |Контрагент        = Документ.РеализацияПродукции.Контрагент;
   |Экспорт        = Документ.РеализацияПродукции.Контрагент.Экспорт;
   |МодельныйРяд    = Документ.РеализацияПродукции.Товар.МодельныйРяд;
   |Количество        = Документ.РеализацияПродукции.Количество;
   |Всего            = Документ.РеализацияПродукции.Всего;
   |НДС            = Документ.РеализацияПродукции.НДС;
   |ТекДок        = Документ.РеализацияПродукции.ТекущийДокумент;
   |
   |Функция КоличествоСумма= Сумма(Количество);
   |Функция ВсегоСумма        = Сумма(Всего) Когда (Экспорт = 0);
   |Функция ВсегоСуммаЭ    = Сумма(Всего) Когда (Экспорт = 1);
   |Функция НДССумма        = Сумма(НДС);
   |
   |Группировка Контрагент без групп;
   |Группировка МодельныйРяд без групп;
   |Группировка День;
   |Группировка ТекДок;
   |
   |";
   
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Сообщить("Не удалось обработать данные по реализациям");
       Возврат;
   КонецЕсли;
   
   Пока Запрос.Группировка(1) = 1 Цикл
       Пока Запрос.Группировка(2) = 1 Цикл
           Пока Запрос.Группировка(3) = 1 Цикл
               Пока Запрос.Группировка(4) = 1 Цикл
                   Коэф = 1;
                   
                   Если ПустоеЗначение(Запрос.ТекДок.ДокументОснование) = 0 Тогда
                       Если Запрос.ТекДок.ДокументОснование.Вид() = "Заявка" Тогда
                           Валюта = Запрос.ТекДок.ДокументОснование.Валюта;
                           
                           Если ПустоеЗначение(Валюта) = 0 Тогда
                               Коэф = Валюта.Курс.Получить(Запрос.ТекДок.ДатаДок);
                               Кратность = Валюта.Кратность.Получить(Запрос.ТекДок.ДатаДок);
                               
                               Если Кратность > 0 Тогда
                                   Коэф = Коэф / Кратность;
                               КонецЕсли;
                           КонецЕсли;
                       КонецЕсли;
                   КонецЕсли;
                   
                   День = Запрос.День;
                   Контрагент = Запрос.Контрагент;
                   МодельныйРяд = Запрос.МодельныйРяд;
                   СуммаСНДС = Запрос.ВсегоСумма + Запрос.ВсегоСуммаЭ * 1.18 * Коэф;
                   СуммаНДС = Запрос.НДССумма + Запрос.ВсегоСуммаЭ * 0.18 * Коэф;
                   Количество = Запрос.КоличествоСумма;
               КонецЦикла;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры
1 1Сергей
 
26.03.13
12:18
Переписывай на прямой запрос
2 Ayvengo
 
26.03.13
12:19
(1) так я за помощью пришел, не шарю как запросы в 7ке писать, какие-то они ...
3 orefkov
 
26.03.13
12:19
А сейчас что, не одним делается?

ЗЫ: Любой клюшечный запрос можно сделать одним запросом. При условии, что это прямой запрос.
4 GLazNik
 
26.03.13
12:19
(2) Переписывай на прямой запрос (c)
5 orefkov
 
26.03.13
12:20
Работает - не трожь :)
На основании чего кажется, что нуждается в оптимизации?
Замеры делал?
6 1Сергей
 
26.03.13
12:21
(2) ну, если ты восьмерошник и тебя не забанили в гугле, то проблем вообще не вижу
7 Ayvengo
 
26.03.13
12:21
(5) да мне нужно его в 8ке использовать для загрузки, не хочу еще код процедуры переписывать.