Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Инспекция прямого запроса (число прочтений - 22032 )
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Инспекция прямого запроса
12. Декабря 2007 :: 22:47
Печать  
Я по прямым запросам - нуль, если писать самому.. если смотреть на написанное - то чуток получше...
есть черный запрос
есть его аналог на DBF (фокспрошный драйвер) - писали за небольшую оплату... есть сомнения в оптимальности запроса и еще по одному пункту.
если кому - жаба не давит - просьба дать квалифицированное заключение/подправить запрос (вопрос оплаты решаем)
.
сабж:
описание выхода запроса (запрос формируем на !!!_ТА_!!!):
"штатная" ТиС, получить перечень "незакрытых" заявок покупателей (сумма или колво ненулевые) по условию:
а) - просроченные, т.е. где (Заявка.ДатаОтгрузки+КолвоДнейНаПринятиеРешения) >= ТекущаяДата()
б) - непросроченные, т.е. где (Заявка.ДатаОтгрузки+КолвоДнейНаПринятиеРешения) < ТекущаяДата()
d) Все
черный запрос такой:
    ТекстЗапроса = "
    |Заявка = Регистр.Заявки.ЗаявкаПокупателя;
    |Контрагент = Регистр.Заявки.ДоговорПокупателя.Владелец;
    |Менеджер = Регистр.Заявки.ДоговорПокупателя.Владелец.БВК_Менеджер;
    |Договор = Регистр.Заявки.ДоговорПокупателя;
    |Склад = Регистр.Заявки.ЗаявкаПокупателя.Склад;
    |Фирма = Регистр.Заявки.Фирма;
    |ДатаОтгрузки = Регистр.Заявки.ЗаявкаПокупателя.ДатаОтгрузки;
    |СуммаЗаявки = Регистр.Заявки.СтоимостьРасход;
    |КолЗаявки = Регистр.Заявки.КоличествоРасход;
    |Функция КонОстС = КонОст(СуммаЗаявки);
    |Функция КонОстК = КонОст(КолЗаявки);";
 
    Если парамРежимФормирования = -1
    Тогда //условий не накладываем, полный отчет
    Иначе
     ТекстЗапроса = ТекстЗапроса +"
     |Условие(ЗаявкаУжеПросрочена(ДатаОтгрузки)=парамРежимФормирования);";
    КонецЕсли;
   
    Если НАЙТИ(ВРЕГ(НазваниеНабораПрав()),"АДМИН")=0 Тогда
     ТекстЗапроса = ТекстЗапроса +"
     |Условие (Менеджер в глПользователь);";
    КонецЕсли;
   
    ТекстЗапроса = ТекстЗапроса +"
    |Группировка Контрагент Без Групп;
    |Группировка Заявка;
    |";
 
    Запрос = СоздатьОбъект("Запрос");
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
парамРежимФормирования = 1 если нужны просроченные
парамРежимФормирования = 0 если нужны непросроченные
..
используемая функция:

//ТекущаяДатаРаботы = ТекущаяДата() (=ТА)
//ДатаОтгрузки - Заявка.ДатаОтгрузки
Функция ЗаявкаУжеПросрочена(ДатаОтгрузки)
  Если (ТекущаяДатаРаботы - ДатаОтгрузки) > КолвоДнейНаПринятиеРешения
  Тогда Возврат 1; //просрочено
  Иначе Возврат 0; //непросрочено
  КонецЕсли;
КонецФункции //ЗаявкаУжеПросрочена()
..
..
вот прямой запрос на фокспрошном драйвере
ТекстЗапроса = "
    |SELECT
    | т.Заявка as [Заявка $Документ.ЗаявкаПокупателя],
    | т.Договор as [Договор $Справочник.Договоры],
    | т.Фирма as [Фирма $Справочник.Фирмы],
    | т.Склад as [Склад $Справочник.Склады],
    | т.ДатаОтгрузки as ДатаОтгрузки,
    | т.Контрагент as [Контрагент $Справочник.Контрагенты],
    | т.Менеджер as [Менеджер $Справочник.Пользователи],
    | т.Количество as КонОстК,
    | т.Сумма as КонОстС,
    | т.Флаг as Флаг
    |FROM(
    |SELECT
    | $Рег.ЗаявкаПокупателя as Заявка,
    | $Рег.ДоговорПокупателя as Договор,
    | $Рег.Фирма as Фирма,
    | $Док.Склад as Склад,
    | $Док.ДатаОтгрузки as ДатаОтгрузки,
    | Спр1.id as Контрагент,
    | $Спр1.БВК_Менеджер as Менеджер,
    | SUM($Рег.КоличествоРасход) as Количество,
    | SUM($Рег.СтоимостьРасход) as Сумма,
    | IIF(:ДатаРаботы~~ >$Док.ДатаОтгрузки,1,0) as Флаг
    |FROM
    | $РегистрИтоги.Заявки as Рег
    | INNER JOIN $Документ.ЗаявкаПокупателя Док on Док.IDDoc = Right($Рег.ЗаявкаПокупателя,9)
    | INNER JOIN $Справочник.Договоры Спр on Спр.id = $Рег.ДоговорПокупателя
    | INNER JOIN $Справочник.Контрагенты Спр1 on Спр1.id = Спр.ParentExt
    |WHERE Рег.Period = :ДатуТА~~
    | GROUP BY узки,Спр1.id,$Спр1.БВК_Менеджер) as т
    |WHERE
    | т.Сумма+т.Количество>0";
    Если НАЙТИ(ВРЕГ(НазваниеНабораПрав()),"АДМИН")=0 Тогда
     ТекстЗапроса = ТекстЗапроса + "
     | and т.Менеджер = :ГлПользователь";
    КонецЕсли;
    Если парамРежимФормирования = -1
    Тогда //условий не накладываем, полный отчет
    Иначе
     ТекстЗапроса = ТекстЗапроса +"
     | and т.Флаг=:парамРежимФормирования";
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса +"
    | Order by т.Контрагент,т.Заявка";
   
    ДатаРаботы = ТекущаяДата()-ВыбДень;
    Запрос.УстановитьТекстовыйПараметр("ДатаРаботы" ,ДатаРаботы);
       Запрос.УстановитьТекстовыйПараметр("ГлПользователь" ,ГлПользователь);
     Запрос.УстановитьТекстовыйПараметр("ДатуТА" ,НачМесяца(РабочаяДата()));
       Запрос.УстановитьТекстовыйПараметр("парамРежимФормирования" ,парамРежимФормирования);
       ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

..
..
Монопольно - Управление опертивными итогами - периодичность сохранения остатков
.. и тут как раз вылазит бяка!
вызывает вопрос вот это:
   |WHERE Рег.Period = :ДатуТА~~
в совокупности
Запрос.УстановитьТекстовыйПараметр("ДатуТА" ,НачМесяца(РабочаяДата()));
.. при этом похоже что запрос будет цеплять лишние данные...

Спасибо!
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #1 - 12. Декабря 2007 :: 23:52
Печать  
1. При доступе к таблице регистра не попал в индекс, из за чего будет считана вся таблица

2. Запрос.УстановитьТекстовыйПараметр("ДатуТА" ,НачМесяца(РабочаяДата()));
Правильно, непонятно что вызывает вопрос.
Ну разве что Запрос.УстановитьТекстовыйПараметр("ДатуТА" ,НачМесяца(ПолучитьДатуТА()); чуть получше

3. INNER JOIN
соединение промисходит до группировки из за чего на него будут затрачены большие ресурсы.(соединение к большей таблице)
И почему не LEFT.

4.На выходе запроса нужно делать соединение со спр и журналом, получая наименования,
номера документов , их даты и т.п. В противном случае при выводе на печать системе придется
в каждой строке делать запрос к базе получая представление
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #2 - 13. Декабря 2007 :: 00:16
Печать  
2 kiruha
1. понял, но думаю что смутно понял:
как написать "чтоб попал в индекс"?
2. вопрос в том - зачем здесь в запросе начало месяца, если идет обращение к итогам НА ТА? (или итоги на ТА невозможно получит сразу а надо "считать" от начала месяца плюс-минус движения?) и зачем начало месяца, если у меня периодичность сохранения остатков = 5 дней?
3. втыкнул процентов на 10% - не более, т.е. практически не втыкнул (так, на уровне подсознания) - SQL для чайников пролистал бегло, тщательнее - времени не особо... отсюда тот же вопрос: как сделать правильно...? почему не лефт - не знаю... по той же причине...
4. да, именно так и есть - потом из результатов запроса вытягиваю через точку нужные реквизиты - но это пока несущественно - если можно то как тоже сделать?
..
как написано выше - вопрос оплаты решаем.
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #3 - 13. Декабря 2007 :: 00:53
Печать  
Цитата:
2 kiruha
1. понял, но думаю что смутно понял:
как написать "чтоб попал в индекс"?
2. вопрос в том - зачем здесь в запросе начало месяца, если идет обращение к итогам НА ТА? (или итоги на ТА невозможно получит сразу а надо "считать" от начала месяца плюс-минус движения?) и зачем начало месяца, если у меня периодичность сохранения остатков = 5 дней?
3. втыкнул процентов на 10% - не более, т.е. практически не втыкнул (так, на уровне подсознания) - SQL для чайников пролистал бегло, тщательнее - времени не особо... отсюда тот же вопрос: как сделать правильно...? почему не лефт - не знаю... по той же причине...
4. да, именно так и есть - потом из результатов запроса вытягиваю через точку нужные реквизиты - но это пока несущественно - если можно то как тоже сделать?
..
как написано выше - вопрос оплаты решаем.


5. Оплата не для этого сайта Улыбка

2. Периодичность сохранения остатков 5 дней?
Тогда нужно получить ближайшую дату делящуюся на 5 видимо
- случай нестандартный

1. Чтобы попасть в индекс (для Fox)
нужно писать подзапрос к регистру вида

Код
Выбрать все
| (SELECT
    | $Рег.ЗаявкаПокупателя as Заявка,
    | $Рег.ДоговорПокупателя as Договор,
    | $Рег.Фирма as Фирма,
    | SUM($Рег.КоличествоРасход) as Количество,
    | SUM($Рег.СтоимостьРасход) as Сумма,
    |FROM
    | $РегистрИтоги.Заявки as Рег
|  WHERE г.ЗаявкаПокупателя
|	   LIKE (DTOS(:ДатуТА~~ )"+L_(9+9+9+9)+")
| GROUP BY $Рег.ЗаявкаПокупателя,$Рег.ДоговорПокупателя,$Рег.Фирма) as РегЗаявки
 


Где
Код
Выбрать все
Функция L_(нн)   Экспорт
	 ВозврСтр="'";

	 Для ИИ=1 По нн Цикл
		   ВозврСтр=ВозврСтр+"_";
	 КонецЦикла;
	 ВозврСтр=ВозврСтр+"'";
	 Возврат ВозврСтр;
КонецФункции 



почему так - прикреплена статья
http://www.1cpp.ru/forum/YaBB.pl?num=1184317705

все остальное не так важно
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #4 - 13. Декабря 2007 :: 06:14
Печать  
Цитата:
2. вопрос в том - зачем здесь в запросе начало месяца, если идет обращение к итогам НА ТА? (или итоги на ТА невозможно получит сразу а надо "считать" от начала месяца плюс-минус движения?) и зачем начало месяца, если у меня периодичность сохранения остатков = 5 дней?

Цитата:
2. Периодичность сохранения остатков 5 дней?
Тогда нужно получить ближайшую дату делящуюся на 5 видимо
- случай нестандартный

Случай вполне стандартный, надо писать так:
Цитата:
Запрос.УстановитьТекстовыйПараметр("ДатуТА", Запрос.мд.ПолучитьНачПериода(ПолучитьДатуТА()));
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #5 - 13. Декабря 2007 :: 11:25
Печать  
Пиши в аську, ув. тов. Чебуратор
Что там по поводу адресного склада?  Подмигивание
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
CDX
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 13. Декабря 2007
Re: Инспекция прямого запроса
Ответ #6 - 13. Декабря 2007 :: 14:04
Печать  
Запрос.мд.ПолучитьНачПериода(ПолучитьДатуТА()));

Сорри, что есть Запрос.мд ?  Да и ПолучитьНачПериода()  тоже.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #7 - 13. Декабря 2007 :: 14:12
Печать  
Цитата:
Свойства
мд / md свойство содержит статический объект типа MetaDataWork.
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #8 - 14. Декабря 2007 :: 00:42
Печать  
В результате имеем: "деньги не для этого форума" и никто вообщем-то толково запрос не переписал.. даже за денежку.. все самому придется, блин...
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #9 - 14. Декабря 2007 :: 07:59
Печать  
Цитата:
В результате имеем: "деньги не для этого форума" и никто вообщем-то толково запрос не переписал.. даже за денежку.. все самому придется, блин...


Ну если подставить подзапрос вместо
Код
Выбрать все
|FROM
    | $РегистрИтоги.Заявки as Рег  

это так сложно ....

Вроде очень много толковых вещей на инфостарте  Озадачен
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #10 - 14. Декабря 2007 :: 08:14
Печать  
Ещё надо заметить, что Чеб хочет, чтобы это работало как на ДБФ, так и на СКЛ версии, поэтому перед формированием запроса необходимо сделать:
Код
Выбрать все
МетаИнфо=СоздатьОбъект("MetaInfoClasses");
	флЭтоСКЛ=МетаИнфо.ЭтоSQL_Версия(); 


и далее в запросе везде, где идёт сравнение дат надо ставить:
Код
Выбрать все
":ДатаРаботы~"+?(флЭтоСКЛ=1,"","~")+">$Док.ДатаОтгрузки" 


+ ес-но, если будешь использовать совет, который дал тебе Кирюха:
Код
Выбрать все
WHERE г.ЗаявкаПокупателя
|	   LIKE (DTOS(:ДатуТА~~ )"+L_(9+9+9+9)+") 


то также надо обращать на это внимание, либо просто оставить как было:
Код
Выбрать все
"Рег.Period = :ДатуТА~"+?(флЭтоСКЛ=1,"","~") 

  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #11 - 14. Декабря 2007 :: 08:20
Печать  
Чебуратора просто жаба давит, что за поделку заплочено... и он хочет тыркнуть разработчика носом, дескать, смотри какую хрень наваял, вертай половину бабла  Смех
Другое объяснение такого поведения найти не могу, ведь можно обратиться к разработчику непосредственно
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #12 - 14. Декабря 2007 :: 09:45
Печать  
Мы здесь все-таки в основном рассчитываем на людей пытливых, которые сами могут все сделать с помощью наших подсказок Улыбка

Попробуй заинтересуй знающего спеца с этого форуме чем-нибудь типа деньги или своей интересной прогой или еще чем Улыбка
Сам понимаешь, с нуля никому не хочется запрос переписывать и тратить свое время.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #13 - 14. Декабря 2007 :: 10:37
Печать  
1. БЛИН, КАКИЕ ТУТ ВСЕ ЗЛЫЕ Подмигивание
2. А я что, денег не предлагал? - сразу же в первом посте, на что было сказано что тут все забесплатно - ну я и ламанулся...
3. а насчет "тут типа подсказывают а дальше сам" - я сразу тоже написал - я в ПЗ = 0.
4. СКУЛЬНЫЙ ЗАПРОС ИДЕТ ОТДЕЛЬНОЙ ВЕТКОЙ АЛГОРИТМА!!! не надо его суда примешивать...
5. Человеку которому было заплачено - мну жаба не давит! и никуда тыкать не собираюсь Подмигивание потому как я считаю было заплачено адекватно и претензий к выполненной работе нет... - запрос работает, выдает правильные данные, ошибочка с нестандартным периодом остатков - решена с вашей поммощью я думаю... А то что не сильно оптимальный запрос - ТАК ИМЕННО СЮДА И ЛОМАНУЛСЯ ИЗ_ЗА ЭТОГО... максималист я...
а вы здые.. такими и останетсеь если не допомогните...
  
Наверх
www  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #14 - 14. Декабря 2007 :: 11:14
Печать  
Цитата:
4. СКУЛЬНЫЙ ЗАПРОС ИДЕТ ОТДЕЛЬНОЙ ВЕТКОЙ АЛГОРИТМА!!! не надо его суда примешивать...

Тебя не поймёшь... То ты говоришь, чтоб запрос отрабатывал на ЛЮБОЙ базе, то у тебя оказывается, что для СКЛ у тебя отдельный запрос.
Ну тогда бери и собирай все из этой ветки в одну кучу, пробуй и потом спрашивай что у тебя не получилось, что сделать лучше и показывай уже новый запрос.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #15 - 14. Декабря 2007 :: 11:38
Печать  
Ну если совсем лень,то предполагая что рег Заявки типовой
Код
Выбрать все
Функция L_(нн)
	 ВозврСтр="'";

	 Для ИИ=1 По нн Цикл
		   ВозврСтр=ВозврСтр+"_";
	 КонецЦикла;
	 ВозврСтр=ВозврСтр+"'";
	 Возврат ВозврСтр;
КонецФункции
//*******************************************
Процедура Сформировать()

	ОлеДБ = СоздатьОбъект("OLEDBData");

	Рез=ОлеДБ.Соединение("
	|Provider=VFPOLEDB.1;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN=""""");
	// Это ВАЖНО !!! соединение Collating Sequence=MACHINE

	Запрос=ОлеДБ.СоздатьКоманду();

	ТекстЗапроса = "
	|SELECT
	| т.Заявка as [Заявка $Документ.ЗаявкаПокупателя],
	| т.Договор as [Договор $Справочник.Договоры],
	| т.Фирма as [Фирма $Справочник.Фирмы],
	| т.Склад as [Склад $Справочник.Склады],
	| т.ДатаОтгрузки as ДатаОтгрузки,
	| т.Контрагент as [Контрагент $Справочник.Контрагенты],
	| т.Менеджер as [Менеджер $Справочник.Пользователи],
	| т.Количество as КонОстК,
	| т.Сумма as КонОстС,
	| т.Флаг as Флаг
	|FROM(
	|SELECT
	| РегЗаявки.ЗаявкаПокупателя as Заявка,
	| РегЗаявки.ДоговорПокупателя as Договор,
	| РегЗаявки.Фирма as Фирма,
	| $Док.Склад as Склад,
	| $Док.ДатаОтгрузки as ДатаОтгрузки,
	| Спр1.id as Контрагент,
	| $Спр1.БВК_Менеджер as Менеджер,
	| SUM(РегЗаявки.КоличествоРасход) as Количество,
	| SUM(РегЗаявки.СтоимостьРасход) as Сумма,
	| IIF(:ДатаРаботы~~ >$Док.ДатаОтгрузки,1,0) as Флаг
	|FROM
	| (
	| SELECT
	| $Рег.ЗаявкаПокупателя as ЗаявкаПокупателя,
	| $Рег.ДоговорПокупателя as ДоговорПокупателя,
	| $Рег.Фирма as Фирма,
	| $Рег.КоличествоРасход as КоличествоРасход,
	| $Рег.СтоимостьРасход as СтоимостьРасход
	|FROM
	| $РегистрИтоги.Заявки as Рег
	|  WHERE Покупателя
	|	   LIKE (DTOS(:ДатуТА~~ )+"+L_(9+9+9+9)+")
	| ) as РегЗаявки
	//	| $РегистрИтоги.Заявки as Рег
	| LEFT JOIN $Документ.ЗаявкаПокупателя Док on Док.IDDoc = Right(РегЗаявки.ЗаявкаПокупателя,9)
	| LEFT JOIN $Справочник.Договоры Спр on Спр.id = РегЗаявки.ДоговорПокупателя
	| LEFT JOIN $Справочник.Контрагенты Спр1 on Спр1.id = Спр.ParentExt
	| GROUP BY д,$Док.ДатаОтгрузки,Спр1.id,$Спр1.БВК_Менеджер) as т
//	| GROUP BY д,$Док.ДатаОтгрузки,Спр1.id) as т
	|WHERE
	| т.Сумма>0 AND т.Количество>0
    |";
	Если НАЙТИ(ВРЕГ(НазваниеНабораПрав()),"АДМИН")=0 Тогда
		ТекстЗапроса = ТекстЗапроса + "
		| and т.Менеджер = :ГлПользователь";
	КонецЕсли;
	Если парамРежимФормирования = -1
	Тогда //условий не накладываем, полный отчет
	Иначе
		ТекстЗапроса = ТекстЗапроса +"
		| and т.Флаг=:парамРежимФормирования";
	КонецЕсли;
	ТекстЗапроса = ТекстЗапроса +"
	| Order by т.Контрагент,т.Заявка";
//	ВыбДень=1;
	ДатаРаботы = ТекущаяДата()-ВыбДень;
	Запрос.УстановитьТекстовыйПараметр("ДатаРаботы" ,ДатаРаботы);
	Запрос.УстановитьТекстовыйПараметр("ГлПользователь" ,ГлПользователь);

	МД = СоздатьОбъект("MetaDataWork");
	ДатуТА=МД.ПолучитьНачПериода(ПолучитьДатуТА());

	Запрос.УстановитьТекстовыйПараметр("ДатуТА" ,НачМесяца(РабочаяДата()));
//	Запрос.УстановитьТекстовыйПараметр("парамРежимФормирования" ,парамРежимФормирования);
Сообщить(ТекстЗапроса);
	ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	ТЗЗ.ВыбратьСтроку();
КонецПроцедуры 



Только основная оптимизация. Остальные пункты сам.
Проверил на типовой - ОК.

Интерсны также будут результаты на живой(!) этого
и первоначального.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #16 - 14. Декабря 2007 :: 12:12
Печать  
А зачем там 3 селекта фпринципе?
ЗЫ. В качестве апа
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #17 - 15. Декабря 2007 :: 08:46
Печать  
ну, не знаю... мне казалось что я тут речь веду про фокспрошный драйвер и DBF
..злые вы все-таки...
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #18 - 15. Декабря 2007 :: 08:58
Печать  
2 kiruha:
Да, вот зачем тут три селекта - кратенько если можно?

ОШИБКИ (мое скромное имхо)
1.
+ условие
|WHERE т.Сумма>0 AND т.Количество>0 - неверное, может получиться так, что 1. количество =0, а сумма - висит... 2. количество (как и сумма) в определенных моментах может быть отрицательное
т.е. надо типа
|WHERE т.Сумма<>0 OR т.Количество<>0
2.
результаты кода
МД = СоздатьОбъект("MetaDataWork");
ДатуТА=МД.ПолучитьНачПериода(ПолучитьДатуТА());
в запросе не используются - т.е. есть шанс что на нестандартных периодах сохранения остатков - будет косячить..
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #19 - 15. Декабря 2007 :: 10:20
Печать  
Цитата:
2 kiruha:
Да, вот зачем тут три селекта - кратенько если можно?

ОШИБКИ (мое скромное имхо)
1.
+ условие
|WHERE т.Сумма>0 AND т.Количество>0 - неверное, может получиться так, что 1. количество =0, а сумма - висит... 2. количество (как и сумма) в определенных моментах может быть отрицательное
т.е. надо типа
|WHERE т.Сумма<>0 OR т.Количество<>0
2.
результаты кода
МД = СоздатьОбъект("MetaDataWork");
ДатуТА=МД.ПолучитьНачПериода(ПолучитьДатуТА());
в запросе не используются - т.е. есть шанс что на нестандартных периодах сохранения остатков - будет косячить..


а. Насчет |WHERE т.Сумма<>0 OR т.Количество<>0 и других дополнений - как угодно, это же только костяк.

б. Условие на ДатуТА однозначно задается в Like :
|  WHERE DTOS(Рег.period)+$Рег.Фирма+$Рег.Номенклатура+$Рег.ДоговорПокупателя
+$Рег.ЗаявкаПокупателя
|         LIKE (DTOS(:ДатуТА~~ )+"+L_(9+9+9+9)+")

оно эквивалентно  WHERE Рег.period=:ДатуТА~~

в. "Много Select" . Fox не SQL, где отлично работает план выполнения запроса.
Ему нужны подсказки, в том числе о порядке выполнения и использования индексов.
Использование же вложенных запросов лишь на несколько процентов увеличивает время выполнения,
т.е. их можно делать сколько угодно без заметного падения производительности.

с.Вообще не понимаю дискуссии - сначала пытались объяснить - ответ : не надо, дайте готовый запрос.
Дали готовый запрос -теперь появилось "почему ".
Почему бы просто не запустить на клиенте и не замерить время выполнения 1 и 2 и потом привести
здесь цифры?
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #20 - 15. Декабря 2007 :: 10:22
Печать  
РЕЗЮМЕ:
1. внедрил вариант kiruha
2. оставил старый вариант
3. 1 и 2 сделал максимально похожими (подправил условие попадания заявок в выборку, определение ДатуТА)

погонял старый и новый вариант: результаты идентичные (правильные)
ИТОГО:
старый вариант = 2.05 сек;
новый   вариант = 2.93 сек;
...спрашивается: ЭТО ОПТИМИЗАЦИЯ?
внизу выложены текстовки старого и нового
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #21 - 15. Декабря 2007 :: 10:25
Печать  
ИСХОДНЫЙ (СТАРЫЙ ЗАПРОС)
     ИначеЕсли ФлагСиквел = -1 Тогда
           Время1 = _GetPerformanceCounter();
           Попытка База            = СоздатьОбъект("OLEDBData");
                       Соединение      = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=MACHINE;DSN=""";
                       RS                  = База.Соединение(Соединение);
                       Запрос            = База.СоздатьКоманду();
           Исключение 
                       текОшибка            = ВРег(ОписаниеОшибки());
                       КритичнаяОшибка = 1;
                       Для ы = 1 По СЗнекритичныхОшибок.РазмерСписка() Цикл
                             Если Найти(текОшибка,СЗнекритичныхОшибок.ПолучитьЗначение(ы)) <> 0 Тогда
                                   КритичнаяОшибка = 0;
                                   ЗаписьЖурналаРегистрации("монопольно="+МонопольныйРежим()+", "+текОшибка,"Provider=VFPOLEDB.1","Ошибка времени выполнения");
                                   Прервать;
                             КонецЕсли;      
                       КонецЦикла;      
                     Если КритичнаяОшибка <> 0 Тогда
                             Предупреждение("Обнаружена ошибка: "+ОписаниеОшибки()+"      
                                                  |Сообщите программисту!");
                       КонецЕсли;
     
                       ФлагСиквел = 0;      
                       ВыполнитьТекстЗапросаБыстро(ТЗЗ,парамРежимФормирования,ФлагСиквел);
                       Возврат;
           КонецПопытки;
                       
           ТекстЗапроса = "
           |SELECT
           | т.Заявка                  as [Заявка $Документ.ЗаявкаПокупателя],
           | т.Договор            as [Договор $Справочник.Договоры],
           | т.Фирма                  as [Фирма $Справочник.Фирмы],
           | т.Склад                  as [Склад $Справочник.Склады],
           | т.ДатаОтгрузки      as ДатаОтгрузки,
           | т.Контрагент            as [Контрагент $Справочник.Контрагенты],
           | т.Менеджер            as [Менеджер $Справочник.Пользователи],
           | т.Количество            as КонОстК,
           | т.Сумма                  as КонОстС, 
           | т.Флаг                  as Флаг
           |FROM(
           |SELECT
           | $Рег.ЗаявкаПокупателя            as Заявка,
           | $Рег.ДоговорПокупателя            as Договор,
           | $Рег.Фирма                              as Фирма,
           | $Док.Склад                              as Склад,
           | $Док.ДатаОтгрузки                  as ДатаОтгрузки,
           | Спр1.id                                    as Контрагент,
           | $Спр1.БВК_Менеджер                  as Менеджер,
           | SUM($Рег.КоличествоРасход)      as Количество,
           | SUM($Рег.СтоимостьРасход)      as Сумма,
           | IIF(:ДатаРаботы~~  >$Док.ДатаОтгрузки,1,0) as Флаг
           |FROM
           |            $РегистрИтоги.Заявки as Рег
           | INNER JOIN $Документ.ЗаявкаПокупателя Док on Док.IDDoc  = Right($Рег.ЗаявкаПокупателя,9)
           | INNER JOIN $Справочник.Договоры Спр on Спр.id = $Рег.ДоговорПокупателя
           | INNER JOIN $Справочник.Контрагенты Спр1 on Спр1.id = Спр.ParentExt
           |WHERE  Рег.Period = :ДатуТА~~
           | GROUP BY узки,Спр1.id,$Спр1.БВК_Менеджер) as т
           |WHERE
           | т.Сумма<>0 OR т.Количество<>0";
           Если НАЙТИ(ВРЕГ(НазваниеНабораПрав()),"АДМИН")=0 Тогда                                                                      
                 ТекстЗапроса = ТекстЗапроса + "
                 |       and т.Менеджер = :ГлПользователь";
           КонецЕсли;

           Если  парамРежимФормирования = -1
           Тогда //условий не накладываем, полный отчет
           Иначе
                 ТекстЗапроса = ТекстЗапроса +"
                 |       and т.Флаг=:парамРежимФормирования";
           КонецЕсли;
           
           ТекстЗапроса = ТекстЗапроса +"
           | Order by т.Контрагент,т.Заявка";
           
           ДатаРаботы = ТекущаяДата()-ВыбДень;
           Попытка Запрос.УстановитьТекстовыйПараметр("ДатаРаботы"                        ,ДатаРаботы);
                       Запрос.УстановитьТекстовыйПараметр("ГлПользователь"                  ,ГлПользователь);
                       МД            = СоздатьОбъект("MetaDataWork");
                       ДатуТА      = МД.ПолучитьНачПериода(ПолучитьДатуТА());
                       Запрос.УстановитьТекстовыйПараметр("ДатуТА"                              ,ДатуТА);
                       Запрос.УстановитьТекстовыйПараметр("парамРежимФормирования"      ,парамРежимФормирования);
                       ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
                       ЗатраченоВремени = " "+Окр((_getPerformanceCounter() - Время1)/1000,3,1)+" сек.";
                       //Форма.ТЗ.Видимость(1);
                       Возврат;
           Исключение
                       текОшибка            = ВРег(ОписаниеОшибки());
                       КритичнаяОшибка = 1;
                       Для ы = 1 По СЗнекритичныхОшибок.РазмерСписка() Цикл
                             Если Найти(текОшибка,СЗнекритичныхОшибок.ПолучитьЗначение(ы)) <> 0 Тогда
                                   КритичнаяОшибка = 0;
                                   ЗаписьЖурналаРегистрации("монопольно="+МонопольныйРежим()+", "+текОшибка,"Provider=VFPOLEDB.1","Ошибка времени выполнения");
                                   Прервать;
                             КонецЕсли;      
                       КонецЦикла;      
                     Если КритичнаяОшибка <> 0 Тогда
                             Предупреждение("Обнаружена ошибка: "+ОписаниеОшибки()+"      
                                                  |Сообщите программисту!");
                       КонецЕсли;

                       ФлагСиквел = 0;
                       ВыполнитьТекстЗапросаБыстро(ТЗЗ,парамРежимФормирования,ФлагСиквел);
                       Возврат;
           КонецПопытки;
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #22 - 15. Декабря 2007 :: 10:26
Печать  
НОВЫЙ ЗАПРОС (вариант kiruha):
     ИначеЕсли ФлагСиквел = -1 Тогда
           Время1 = _GetPerformanceCounter();
           Попытка База            = СоздатьОбъект("OLEDBData");
                       RS = База.Соединение("
                       |Provider=VFPOLEDB.1;
                       |Null = Yes;
                       |Exclusive = No;
                       |SourceType = DBF;
                       |Data Source=" + КаталогИБ() + ";
                       |Mode=ReadWrite;
                       |Extended Properties="""";
                       |User ID="""";
                       |Password="""";
                       |Mask Password=False;
                       |Collating Sequence=MACHINE;   
                       |DSN=""""");
                       //Это ВАЖНО !!! соединение Collating Sequence=MACHINE
                       Запрос = База.СоздатьКоманду();
           Исключение 
                       текОшибка            = ВРег(ОписаниеОшибки());
                       КритичнаяОшибка = 1;
                       Для ы = 1 По СЗнекритичныхОшибок.РазмерСписка() Цикл
                             Если Найти(текОшибка,СЗнекритичныхОшибок.ПолучитьЗначение(ы)) <> 0 Тогда
                                   КритичнаяОшибка = 0;
                                   ЗаписьЖурналаРегистрации("монопольно="+МонопольныйРежим()+", "+текОшибка,"Provider=VFPOLEDB.1","Ошибка времени выполнения");
                                   Прервать;
                             КонецЕсли;      
                       КонецЦикла;      
                     Если КритичнаяОшибка <> 0 Тогда
                             Предупреждение("Обнаружена ошибка: "+ОписаниеОшибки()+"      
                                                  |Сообщите программисту!");
                       КонецЕсли;
     
                       ФлагСиквел = 0;      
                       ВыполнитьТекстЗапросаБыстро(ТЗЗ,парамРежимФормирования,ФлагСиквел);
                       Возврат;
           КонецПопытки;
           
           ТекстЗапроса = "
           |SELECT
           | т.Заявка                  as [Заявка $Документ.ЗаявкаПокупателя],
           | т.Договор            as [Договор $Справочник.Договоры],
           | т.Фирма                  as [Фирма $Справочник.Фирмы],
           | т.Склад                  as [Склад $Справочник.Склады],
           | т.ДатаОтгрузки      as ДатаОтгрузки,
           | т.Контрагент            as [Контрагент $Справочник.Контрагенты],
           | т.Менеджер            as [Менеджер $Справочник.Пользователи],
           | т.Количество            as КонОстК,
           | т.Сумма                  as КонОстС,
           | т.Флаг                  as Флаг
           |FROM(
           |SELECT
           | РегЗаявки.ЗаявкаПокупателя                        as Заявка,
           | РегЗаявки.ДоговорПокупателя                        as Договор,
           | РегЗаявки.Фирма                                          as Фирма,
           | $Док.Склад                                                as Склад,
           | $Док.ДатаОтгрузки                                    as ДатаОтгрузки,
           | Спр1.id                                                      as Контрагент,
           | $Спр1.БВК_Менеджер                                    as Менеджер,
           | SUM(РегЗаявки.КоличествоРасход)                  as Количество,
           | SUM(РегЗаявки.СтоимостьРасход)                  as Сумма,
           | IIF(:ДатаРаботы~~ >$Док.ДатаОтгрузки,1,0) as Флаг
           |FROM
           | (
           | SELECT
           | $Рег.ЗаявкаПокупателя      as ЗаявкаПокупателя,
           | $Рег.ДоговорПокупателя      as ДоговорПокупателя,
           | $Рег.Фирма                        as Фирма,
           | $Рег.КоличествоРасход      as КоличествоРасход,
           | $Рег.СтоимостьРасход            as СтоимостьРасход
           |FROM
           | $РегистрИтоги.Заявки as Рег
           |  WHERE Покупателя
           |         LIKE (DTOS(:ДатуТА~~ )+"+L_(9+9+9+9)+")
           | ) as РегЗаявки
           | LEFT JOIN $Документ.ЗаявкаПокупателя Док on Док.IDDoc = Right(РегЗаявки.ЗаявкаПокупателя,9)
           | LEFT JOIN $Справочник.Договоры Спр on Спр.id = РегЗаявки.ДоговорПокупателя
           | LEFT JOIN $Справочник.Контрагенты Спр1 on Спр1.id = Спр.ParentExt
           | GROUP BY д,$Док.ДатаОтгрузки,Спр1.id,$Спр1.БВК_Менеджер) as т
           |WHERE
           | т.Сумма<>0 OR т.Количество<>0";

         Если НАЙТИ(ВРЕГ(НазваниеНабораПрав()),"АДМИН")=0 Тогда
                 ТекстЗапроса = ТекстЗапроса + "
                 | and т.Менеджер = :ГлПользователь";
           КонецЕсли;
           Если парамРежимФормирования = -1
           Тогда //условий не накладываем, полный отчет
           Иначе
                 ТекстЗапроса = ТекстЗапроса +"
                 | and т.Флаг=:парамРежимФормирования";
           КонецЕсли;
           ТекстЗапроса = ТекстЗапроса +"
           | Order by т.Контрагент,т.Заявка";

           ДатаРаботы = ТекущаяДата()-ВыбДень;
           Попытка Запрос.УстановитьТекстовыйПараметр("ДатаРаботы"                        ,ДатаРаботы);
                       Запрос.УстановитьТекстовыйПараметр("ГлПользователь"                  ,ГлПользователь);
                       МД            = СоздатьОбъект("MetaDataWork");
                       ДатуТА      = МД.ПолучитьНачПериода(ПолучитьДатуТА());
                       Запрос.УстановитьТекстовыйПараметр("ДатуТА",ДатуТА);
                       Запрос.УстановитьТекстовыйПараметр("парамРежимФормирования"      ,парамРежимФормирования);
                       ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
                       ЗатраченоВремени = " "+Окр((_getPerformanceCounter() - Время1)/1000,3,1)+" сек.";
//                        //Форма.ТЗ.Видимость(1);
                       Возврат;
           Исключение
                       текОшибка            = ВРег(ОписаниеОшибки());
                       КритичнаяОшибка = 1;
                       Для ы = 1 По СЗнекритичныхОшибок.РазмерСписка() Цикл
                             Если Найти(текОшибка,СЗнекритичныхОшибок.ПолучитьЗначение(ы)) <> 0 Тогда
                                   КритичнаяОшибка = 0;
                                   ЗаписьЖурналаРегистрации("монопольно="+МонопольныйРежим()+", "+текОшибка,"Provider=VFPOLEDB.1","Ошибка времени выполнения");
                                   Прервать;
                             КонецЕсли;      
                       КонецЦикла;      
                     Если КритичнаяОшибка <> 0 Тогда
                             Предупреждение("Обнаружена ошибка: "+ОписаниеОшибки()+"      
                                                  |Сообщите программисту!");
                       КонецЕсли;

                       ФлагСиквел = 0;
                       ВыполнитьТекстЗапросаБыстро(ТЗЗ,парамРежимФормирования,ФлагСиквел);
                       Возврат;
           КонецПопытки;

  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #23 - 15. Декабря 2007 :: 10:30
Печать  
> с.Вообще не понимаю дискуссии - сначала пытались объяснить - ответ:
> не надо, дайте готовый запрос.
> Дали готовый запрос -теперь появилось "почему ".
ну, вопрос звучит не "почему", а "если можно - объясните", если в лом объяснять - я и так прожую (или постучусь еще к кому-нибудь), не проблема Подмигивание

> Почему бы просто не запустить на клиенте и не замерить время выполнения 1 и 2 и потом привести  здесь цифры?
пока я писал гонял замеры и писал ответ с цифрами замеров - вы умудрились успеть этот вопрос запостить... Подмигивание
..
цифры замеров - стабильные...
вот тут я уже ХОТЕЛ БЫ задать вопрос "ПОЧЕМУ?" откуда такая "разбежка"? - это "не несколько процентов"...
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #24 - 15. Декабря 2007 :: 10:49
Печать  
Приведи структуру рег Заявки из файла DD
Я исходил из стандартного :
Цитата:
#==TABLE no 150    : Регистр Заявки
# Name    |Descr                         |Type[A/S/U]|DBTableName|ReUsable 
T=RG4674  |Регистр Заявки                |A          |RG4674     |1         
#-----Fields-------
# Name      |Descr               |Type|Length|Precision
F=PERIOD    |Period Registr      |D   |8     |0       
F=SP4668    |(P)Фирма            |C   |9     |0       
F=SP4669    |(P)Номенклатура     |C   |9     |0       
F=SP4670    |(P)ДоговорПокупателя|C   |9     |0       
F=SP4671    |(P)ЗаявкаПокупателя |C   |9     |0       
F=SP4672    |(P)КоличествоРасход |N   |16    |5       
F=SP4673    |(P)СтоимостьРасход  |N   |16    |2       
#----Indexes------
# Name     |Descr         |Unique|Indexed fields                                              |DBName    
I=PROP     |PERIOD+PROP   |0     |PERIOD,SP4668,SP4669,SP4670,SP4671                          |PROP      
I=VIA4671  |VIA4671       |0     |PERIOD,SP4671                                               |VIA4671


Интересует индекс
I=PROP     |PERIOD+PROP   |0     |PERIOD,SP4668,SP4669,SP4670,SP4671                          |PROP

У тебя часом ЗаявкаПокупателя не произвольный документ?
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #25 - 15. Декабря 2007 :: 10:55
Печать  
привожу:

#==TABLE no 166    : Регистр Заявки
# Name    |Descr                         |Type[A/S/U]|DBTableName|ReUsable 
T=RG4674  |Регистр Заявки                |A          |RG4674     |1         
#-----Fields-------
# Name      |Descr               |Type|Length|Precision
F=PERIOD    |Period Registr      |D   |8     |0       
F=SP4668    |(P)Фирма            |C   |9     |0       
F=SP4669    |(P)Номенклатура     |C   |9     |0       
F=SP4670    |(P)ДоговорПокупателя|C   |9     |0       
F=SP4671    |(P)ЗаявкаПокупателя |C   |9     |0       
F=SP4672    |(P)КоличествоРасход |N   |16    |5       
F=SP4673    |(P)СтоимостьРасход  |N   |16    |2       
#----Indexes------
# Name     |Descr         |Unique|Indexed fields                                              |DBName    
I=PROP     |PERIOD+PROP   |0     |PERIOD,SP4668,SP4669,SP4670,SP4671                          |PROP      
I=VIA4671  |VIA4671       |0     |PERIOD,SP4671                                               |VIA4671   
#
.. а если старый запрос попробуй у себя выполнить...? какие у тебя цифры получатся?
.. убегаю до вечера, интересно будет эту тему добить... не может быть чтобы явное указание "улучшающее выборку" так притормаживало...
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #26 - 15. Декабря 2007 :: 12:08
Печать  
Проведи пожалуйста Тест
Код
Выбрать все
 Функция L_(нн)
	 ВозврСтр="'";

	 Для ИИ=1 По нн Цикл
		   ВозврСтр=ВозврСтр+"_";
	 КонецЦикла;
	 ВозврСтр=ВозврСтр+"'";
	 Возврат ВозврСтр;
КонецФункции

Процедура Тест()
	База		= СоздатьОбъект("OLEDBData");
	RS = База.Соединение("
	|Provider=VFPOLEDB.1;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN=""""");
	//Это ВАЖНО !!! соединение Collating Sequence=MACHINE
	Запрос = База.СоздатьКоманду();

	ТекстЗапроса = "
	|SELECT
	| $Рег.ЗаявкаПокупателя	as ЗаявкаПокупателя,
	| $Рег.ДоговорПокупателя	as ДоговорПокупателя,
	| $Рег.Фирма				as Фирма,
	| $Рег.КоличествоРасход	as КоличествоРасход,
	| $Рег.СтоимостьРасход		as СтоимостьРасход
	|FROM
	| $РегистрИтоги.Заявки as Рег
	|  WHERE Рег.period= :ДатуТА~~
	|";


	ТекстЗапросаИндекс = "
	|SELECT
	| $Рег.ЗаявкаПокупателя	as ЗаявкаПокупателя,
	| $Рег.ДоговорПокупателя	as ДоговорПокупателя,
	| $Рег.Фирма				as Фирма,
	| $Рег.КоличествоРасход	as КоличествоРасход,
	| $Рег.СтоимостьРасход		as СтоимостьРасход
	|FROM
	| $РегистрИтоги.Заявки as Рег
	|  WHERE Покупателя
	|	   LIKE (DTOS(:ДатуТА~~ )+"+L_(9+9+9+9)+")
	|";

	МД		= СоздатьОбъект("MetaDataWork");
	ДатуТА	= МД.ПолучитьНачПериода(ПолучитьДатуТА());

	// Тест индекс
	Запрос = База.СоздатьКоманду();

	ВремяНачалоЗапроса=_GetPerformanceCounter();

	Запрос.УстановитьТекстовыйПараметр("ДатуТА",ДатуТА);
	ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапросаИндекс);

	Запрос.УстановитьТекстовыйПараметр("ДатуТА",ДатуТА);
	ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапросаИндекс);

	Запрос.УстановитьТекстовыйПараметр("ДатуТА",ДатуТА);
	ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапросаИндекс);

	ВремяКонецЗапроса=_GetPerformanceCounter();
	ВремяЗапроса=ВремяКонецЗапроса-ВремяНачалоЗапроса;
	Сообщить("Запрос индекс  длился "+(ВремяЗапроса/1000)+"с");
	Запрос.Закрыть();
	ТЗЗ.ВыбратьСтроку();

	// Тест обычный
	Запрос = База.СоздатьКоманду();

	ВремяНачалоЗапроса=_GetPerformanceCounter();

	Запрос.УстановитьТекстовыйПараметр("ДатуТА",ДатуТА);
	ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

	Запрос.УстановитьТекстовыйПараметр("ДатуТА",ДатуТА);
	ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

	Запрос.УстановитьТекстовыйПараметр("ДатуТА",ДатуТА);
	ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

	ВремяКонецЗапроса=_GetPerformanceCounter();
	ВремяЗапроса=ВремяКонецЗапроса-ВремяНачалоЗапроса;
	Сообщить("Запрос обычный длился "+(ВремяЗапроса/1000)+"с");
	Запрос.Закрыть();
	ТЗЗ.ВыбратьСтроку();



	// На всякий случай структу рег
	МетРег=Метаданные.Регистр("Заявки");
	СчетчикЦикла = 0;
	Для СчетчикЦикла = 1 По МетРег.Измерение() Цикл
		Изм=МетРег.Измерение(СчетчикЦикла);
		ИмяИзм=Изм.Идентификатор;
		ТипИзм=Изм.Тип;
		ВидИзм=Изм.Вид;
		ДлинаИзм=Изм.Длина;

		Сообщить(""+СчетчикЦикла+" "+ИмяИзм+" "+ТипИзм+"."+ВидИзм);

	КонецЦикла;


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


Установил в Демо типовой 5 дней. К сожалению только локальная и с минимальными данными
Цитата:
Запрос индекс  длился 0.008с
Запрос обычный длился 0.037с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя


В мнгопользовательском режиме и больших данных (как у тебя) - разница должна быть в порядки больше
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #27 - 15. Декабря 2007 :: 17:28
Печать  
Потестил дома варинты запросов, картина аналогичная:
старый запрос - 4.9 сек
новый запрос - 6.2 сек
..
сечас запущу предложенный тест..
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #28 - 15. Декабря 2007 :: 18:53
Печать  
Кажется разобрался - забыл сгруппировать по номенклатуре.
Если у тебя индекс взлетел попробуй оконч вариант (убрал лишние Select по просьбе Вадимко)
Код
Выбрать все
ТекстЗапроса = "
|SELECT
| РегЗаявки.ЗаявкаПокупателя			     as [Заявка $Документ.ЗаявкаПокупателя]
| ,РегЗаявки.ДоговорПокупателя			    as  [Договор $Справочник.Договоры]
| ,РегЗаявки.Фирма					     as [Фирма $Справочник.Фирмы]
| ,$Док.Склад						    as [Склад $Справочник.Склады]
| ,$Док.ДатаОтгрузки						as ДатаОтгрузки
| ,Спр1.id							  as [Контрагент $Справочник.Контрагенты]
| ,$Спр1.БВК_Менеджер					    as [Менеджер $Справочник.Пользователи]
| ,РегЗаявки.Количество			as КонОстК
| ,РегЗаявки.Сумма			as КонОстС
| ,IIF(:ДатаРаботы~~ >$Док.ДатаОтгрузки,1,0) as Флаг
|FROM
| (
|SELECT
| $Рег.ЗаявкаПокупателя	as ЗаявкаПокупателя,
| $Рег.ДоговорПокупателя	as ДоговорПокупателя,
| $Рег.Фирма				as Фирма,
| SUM($Рег.КоличествоРасход)	as Количество,
| SUM($Рег.СтоимостьРасход)	as Сумма
|FROM
| $РегистрИтоги.Заявки as Рег
|  WHERE Покупателя
|	   LIKE (DTOS(:ДатуТА~~ )+"+L_(9+9+9+9)+")
|  GROUP BY ЗаявкаПокупателя,ДоговорПокупателя,Фирма
| ) as РегЗаявки
| LEFT JOIN $Документ.ЗаявкаПокупателя Док on Док.IDDoc = РегЗаявки.ЗаявкаПокупателя
| LEFT JOIN $Справочник.Договоры Спр on Спр.id = РегЗаявки.ДоговорПокупателя
| LEFT JOIN $Справочник.Контрагенты Спр1 on Спр1.id = Спр.ParentExt
|WHERE
| РегЗаявки.Сумма<>0 OR РегЗаявки.Количество<>0";
Если НАЙТИ(ВРЕГ(НазваниеНабораПрав()),"АДМИН")=0 Тогда
	ТекстЗапроса = ТекстЗапроса + "
	| and Спр1.БВК_Менеджер = :ГлПользователь";
КонецЕсли;
Если парамРежимФормирования = -1
Тогда //условий не накладываем, полный отчет
Иначе
	ТекстЗапроса = ТекстЗапроса +"
	| and Флаг=:парамРежимФормирования";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса +"
| Order by Спр1.id ,РегЗаявки.ЗаявкаПокупателя "; 



оттестируй пожалуйста
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #29 - 15. Декабря 2007 :: 19:08
Печать  
Отчистил машину - убрал антивирь и прочее..
потестил твой первый тест, 94 прогона, среднее время
запрос индекс длился 10.66
запрос обычный длился 10.45:
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #30 - 15. Декабря 2007 :: 19:24
Печать  
Цитата:
Отчистил машину - убрал антивирь и прочее..
потестил твой первый тест, 94 прогона, среднее время
запрос индекс длился 10.66
запрос обычный длился 10.45:


А что сообщает тест?
И какие данные на демо 1С (чтобы можно было сравнить)?
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #31 - 15. Декабря 2007 :: 19:41
Печать  
второй тест еще не прогнал...
демо базы нет... если можно - заверни свою и на e.meil@mail.ru
я сейчас второй погоняю..
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #32 - 15. Декабря 2007 :: 20:28
Печать  
вот первый тесть на моей живой базе.. просто инфа..
Запрос индекс  длился      8.493с
Запрос обычный длился      9.046с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.229с
Запрос обычный длился      8.488с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.148с
Запрос обычный длился      7.789с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      8.638с
Запрос обычный длился      9.215с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.353с
Запрос обычный длился      9.415с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.087с
Запрос обычный длился      8.668с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.688с
Запрос обычный длился      8.328с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.206с
Запрос обычный длился      8.991с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.019с
Запрос обычный длился      9.257с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.139с
Запрос обычный длился      9.356с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.248с
Запрос обычный длился      9.35с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.291с
Запрос обычный длился      9.254с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      8.681с
Запрос обычный длился      9.355с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      8.634с
Запрос обычный длился      8.938с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.612с
Запрос обычный длился      8.543с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      8.959с
Запрос обычный длился      8.426с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      8.607с
Запрос обычный длился      8.757с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.62с
Запрос обычный длился      9.341с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      8.68с
Запрос обычный длился      8.974с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.268с
Запрос обычный длился      9.509с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.252с
Запрос обычный длился      9.389с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      8.922с
Запрос обычный длился      8.899с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.506с
Запрос обычный длился      9.499с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      8.754с
Запрос обычный длился      9.282с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.636с
Запрос обычный длился      9.169с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      9.678с
Запрос обычный длился      9.083с
1 Фирма Справ
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #33 - 15. Декабря 2007 :: 20:33
Печать  
Может быть, драйвер какой-нибудь не той версии у мення...?
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #34 - 15. Декабря 2007 :: 20:50
Печать  
Тест (первый) на демо базе
Запрос индекс  длился      0.013с
Запрос обычный длился      0.054с
1 Фирма Справочник.Фирмы
2 Номенклатура Справочник.Номенклатура
3 ДоговорПокупателя Справочник.Договоры
4 ЗаявкаПокупателя Документ.ЗаявкаПокупателя
Запрос индекс  длился      0.012с
Запрос обычный длился      0.049с
Запрос индекс  длился      0.013с
Запрос обычный длился      0.054с
Запрос индекс  длился      0.012с
Запрос обычный длился      0.048с
Запрос индекс  длился      0.012с
Запрос обычный длился      0.072с
Запрос индекс  длился      0.014с
Запрос обычный длился      0.047с
Запрос индекс  длился      0.008с
Запрос обычный длился      0.038с
Запрос индекс  длился      0.009с
Запрос обычный длился      0.037с
Запрос индекс  длился      0.009с
Запрос обычный длился      0.043с
Запрос индекс  длился      0.017с
Запрос обычный длился      0.048с
Запрос индекс  длился      0.013с
Запрос обычный длился      0.047с
Запрос индекс  длился      0.013с
Запрос обычный длился      0.051с
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #35 - 15. Декабря 2007 :: 20:59
Печать  
А в большой базе нет каких либо нестандартов, типа кодовой страницы? (пальцем в небо)

Драйвер от uzhast : http://uzhast.fatal.ru/vfpoledb/
но маловероятно. Cортировка - при подключении OLEDB : Collating Sequence=MACHINE; 
и при просмотре файла ДБФ в Fox должно быть  Collate MACHINE
Кодовая страница 1251 русский,....
Судя по демке - вроде индекс работает...

Еще возможно , что надо тестить вместо ВыполнитьИнструкцию просто Выполнить -
тогда время на пресылку в 1С не будет учитываться.

....

Ну и второй запрос - есть результаты?
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #36 - 15. Декабря 2007 :: 21:49
Печать  
кодовая страница = 1251,
схема регистров штатная.
..
последний вариант запроса - естьсущественные изменения..
1. результаты правильные (режим "все заявки", на просроченных и только активных - ломается на значение FAILED! ICommandText::Execute(): SQL: Column '&#212;&#203;&#192;&#195;' is not found - тут я думаю можно понять про что речь Подмигивание
2. время выполнения - более чем в 2 раза меньше чем оригинальный запрос. Новый запрос = 2.1 сек, оригинал запроса 4.2-4.4
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #37 - 15. Декабря 2007 :: 22:10
Печать  
Цитата:
кодовая страница = 1251,
схема регистров штатная.
..
последний вариант запроса - естьсущественные изменения..
1. результаты правильные (режим "все заявки", на просроченных и только активных - ломается на значение FAILED! ICommandText::Execute(): SQL: Column '&#212;&#203;&#192;&#195;' is not found - тут я думаю можно понять про что речь Подмигивание
2. время выполнения - более чем в 2 раза меньше чем оригинальный запрос. Новый запрос = 2.1 сек, оригинал запроса 4.2-4.4


На SQL условие c LIKE надо заменить на стандартное
|  WHERE Рег.period= :ДатуТА~~

Ломается - видимо все таки есть пустые значения в измерениях регистра.
Тогда нужно или заменить LEFT на INNER JOIN (но тогда эти пустые отсеются), либо писать
вместо
| ,IIF(:ДатаРаботы~~ >$Док.ДатаОтгрузки,1,0) as Флаг
Код
Выбрать все
|   ,IIF(ISNULL($Док.ДатаОтгрузки),0,IIF(:ДатаРаботы~~ >$Док.ДатаОтгрузки,1,0)) as Флаг 


что почтавить 0 или 1 по смыслу в пустом случае смотри по задаче
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #38 - 15. Декабря 2007 :: 22:24
Печать  
Ругается на
FAILED! ICommandText::Execute(): SQL: Column 'ФЛАГ' is not found.
т.е. это не связано с пустыми значениями или чем-то подобным.. тут по идее просто синтаксис ошибочный или что-то еще мелкое.. т.е. ругается если пристыковывается условие
ТекстЗапроса = ТекстЗапроса +"
| and Флаг=:парамРежимФормирования";
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #39 - 15. Декабря 2007 :: 22:29
Печать  
В условии должно быть
Код
Выбрать все
|WHERE
| ( Сумма<>0 OR РегЗаявки.Количество<>0 )
| AND IIF(ISNULL($Док.ДатаОтгрузки),0,IIF(:ДатуТА~~ >$Док.ДатаОтгрузки,1,0))=:парамРежимФормирования 



вторая строка - вместо
Флаг=:парамРежимФормирования
в первую - добавить скобки
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #40 - 15. Декабря 2007 :: 22:32
Печать  
На серверном варианте в многопользовательском режиме интесно было бы цифры посмотреть.
Выигрыш должен быть выше.
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #41 - 15. Декабря 2007 :: 22:47
Печать  
Сейчас внесу изменения связанные с флагом, попробую исправленный вариант...
В многопользовательском режиме - это в понедельник, вряд ли думаю что намного улучшится по сравнению с текущим... данный запрос юзается редко.. т.е. не в режиме постоянного обсчета..
а с чем (впринципе) былм связаны тормоза в предыдущем варинте...?
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #42 - 15. Декабря 2007 :: 22:58
Печать  
Цитата:
Сейчас внесу изменения связанные с флагом, попробую исправленный вариант...
В многопользовательском режиме - это в понедельник, вряд ли думаю что намного улучшится по сравнению с текущим... данный запрос юзается редко.. т.е. не в режиме постоянного обсчета..
а с чем (впринципе) былм связаны тормоза в предыдущем варинте...?


А причины я писал в первом посте.
Хорошо бы еще добавить Наименования, Номер и дату заявки и прочие необходимые вещи для отчета в запрос,
чтобы потом не обращаться к базе при выводе
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #43 - 15. Декабря 2007 :: 23:07
Печать  
имеются в виду не тормоза оригинального запроса (предоставленного на инспекцию), а вашего предыдущего варианта...?
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #44 - 15. Декабря 2007 :: 23:16
Печать  
хм.. где то в условии на Флаг (парамРежимФормирования) нарушение по логике - неверная выборка по просроченным заявкам (выдается только одна) - хотя просроченных несколько, в режиме "только активные заявки" - выдаются все - и активные и просроченные, за исключением одной записи - которая попала в просроченные... сейчас попытаюсь установить закономерность...
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #45 - 15. Декабря 2007 :: 23:28
Печать  
понял... вот здесь
| AND IIF(ISNULL($Док.ДатаОтгрузки),0,IIF(:ДатуТА~~ >$Док.ДатаОтгрузки,1,0))=:парамРежимФормирования
надо не ДатуТА, а ДатуРаботы
| AND IIF(ISNULL($Док.ДатаОтгрузки),0,IIF(:ДатаРаботы~~ >$Док.ДатаОтгрузки,1,0))=:парамРежимФормирования
...
только непонятно, зачем в таком случае в выборке
           ТекстЗапроса = " 
           |SELECT
           |  РегЗаявки.ЗаявкаПокупателя      as [Заявка $Документ.ЗаявкаПокупателя]
           | ,РегЗаявки.ДоговорПокупателя      as [Договор $Справочник.Договоры]
           | ,РегЗаявки.Фирма                        as [Фирма $Справочник.Фирмы]
           | ,$Док.Склад                              as [Склад $Справочник.Склады]
           | ,$Док.ДатаОтгрузки                  as ДатаОтгрузки
           | ,Спр1.id                                    as [Контрагент $Справочник.Контрагенты]
           | ,$Спр1.БВК_Менеджер                as [Менеджер $Справочник.Пользователи]
           | ,РегЗаявки.Количество                  as КонОстК
           | ,РегЗаявки.Сумма                        as КонОстС
           | ,IIF(:ДатаРаботы~~ >$Док.ДатаОтгрузки,1,0) as Флаг
..
стока с "...as Флаг" нужна...?
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #46 - 15. Декабря 2007 :: 23:34
Печать  
Понятия не имею Улыбка
Была в исходном запросе.
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #47 - 15. Декабря 2007 :: 23:46
Печать  
ФЛАГ - признак просрочена заявка или нет
т.е. было
| ,IIF(:ДатаРаботы~~ >$Док.ДатаОтгрузки,1,0) as Флаг
и фильтр на него
| and Флаг=:парамРежимФормирования";
теперича фильтр стоит унизу
| AND IIF(ISNULL($Док.ДатаОтгрузки),0,IIF(:ДатаРаботы~~ >$Док.ДатаОтгрузки,1,0))=:парамРежимФормирования";
и определение "...as Флаг" - не нужно...
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #48 - 15. Декабря 2007 :: 23:47
Печать  
а вот сейчас уже сожно задавать вопросу по сути запроса? Подмигивание
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #49 - 16. Декабря 2007 :: 00:08
Печать  
думаю, что аналогичный запрос по просроченным резервам - постараюсь сам осилит.. тупыт так сказать дятлокопированием Подмигивание
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #50 - 17. Декабря 2007 :: 09:06
Печать  
Затестил на рабочей базе в офисе.
Все нормуль.
старый запрос - порядка 2.2 сек
новый запрос - порядка 1.2 сек
  
Наверх
www  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #51 - 17. Декабря 2007 :: 09:13
Печать  
А "старый" - это тот, который лежит в 0-вом посте? А можешь показать циферьки, которые были до использования прямого запроса, т.е. "штатным" запросом?
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #52 - 17. Декабря 2007 :: 09:15
Печать  
могу и штатным показать... навскидку насколько помню - секунд 7... сейчас просчитаю...
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #53 - 17. Декабря 2007 :: 09:25
Печать  
штатный запрос
           ТекстЗапроса      = "
           |Заявка            = Регистр.Заявки.ЗаявкаПокупателя;
           |Контрагент      = Регистр.Заявки.ДоговорПокупателя.Владелец;
           |Менеджер            = Регистр.Заявки.ДоговорПокупателя.Владелец.БВК_Менеджер;
           |Договор            = Регистр.Заявки.ДоговорПокупателя;
           |Склад                  = Регистр.Заявки.ЗаявкаПокупателя.Склад;
           |Фирма                  = Регистр.Заявки.Фирма;
           |ДатаОтгрузки      = Регистр.Заявки.ЗаявкаПокупателя.ДатаОтгрузки;
           |СуммаЗаявки      = Регистр.Заявки.СтоимостьРасход;
           |КолЗаявки            = Регистр.Заявки.КоличествоРасход;
           |Функция КонОстС = КонОст(СуммаЗаявки);
           |Функция КонОстК = КонОст(КолЗаявки);";
     
           Если  парамРежимФормирования = -1
           Тогда //условий не накладываем, полный отчет
           Иначе
                 ТекстЗапроса = ТекстЗапроса +"
                 |Условие(ЗаявкаУжеПросрочена(ДатаОтгрузки)=парамРежимФормирования);";
           КонецЕсли;
           
           Если НАЙТИ(ВРЕГ(НазваниеНабораПрав()),"АДМИН")=0 Тогда
                 ТекстЗапроса = ТекстЗапроса +"
                 |Условие (Менеджер в глПользователь);";
           КонецЕсли;      
           
           ТекстЗапроса = ТекстЗапроса +"
           |Группировка Контрагент Без Групп;
           |Группировка Заявка;
           |";
     
           Запрос = СоздатьОбъект("Запрос");
         Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
//
время выполнения = 26 сек... пару раз замерял - стабильно...
  
Наверх
www  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #54 - 17. Декабря 2007 :: 09:41
Печать  
ПолуОФФ: а говорят, что прямые запросы для ДБФ-это баловство. Вот реальные результаты тов. Чебур получил:
Штатный - 26 сек
Прямой - 1.2 сек.
Прирост в 22(!) раза??  Ужас (ажник самому слабо верится)
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #55 - 17. Декабря 2007 :: 10:37
Печать  
Это просто ОЧЕНЬ криво написано штатно
Итоги надобно выгружать и все Улыбка
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #56 - 17. Декабря 2007 :: 10:40
Печать  
2 Вадимко: согласен... Подмигивание тут я лажанулся конкретно... $-)
тем не менее - цифры они и есть цифры...
итоги можно выгрузить на ТА, но не выгрузишь на вчера - а иногда бывает надо... + всякие допусловия в запросе "проще" налагать...
вот ради интереса к концу дня перепишу с выгрузкой итогов и фильтрацией ТЗ - посмотрим что получится...
  
Наверх
www  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #57 - 17. Декабря 2007 :: 10:50
Печать  
На вчера - временный расчет регистра с фильтрами
В любом случае быстрее (особенно если учесть что 2 группировки)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #58 - 17. Декабря 2007 :: 10:51
Печать  
А чем временный расчет на вчера отличается от штатного запроса на вчера?
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #59 - 17. Декабря 2007 :: 10:52
Печать  
Цитата:
На вчера - временный расчет регистра с фильтрами
В любом случае быстрее (особенно если учесть что 2 группировки)


Извини, но -  Злой

Зачем такое писать???
Ведь легко все проверить

P.S. Очень уважаю сообщения Вадимко, замечание исключительно к этому вопросу.
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #60 - 17. Декабря 2007 :: 10:59
Печать  
> Прирост в 22(!) раза??
почему бы и нет.. на скуле вообще бешенно все получается... у мну по одному запросу было 7 минут против 15 сек...
  
Наверх
www  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #61 - 17. Декабря 2007 :: 11:08
Печать  
kiruha писал(а) 17. Декабря 2007 :: 10:52:
Зачем такое писать???
Ведь легко все проверить

P.S. Очень уважаю сообщения Вадимко, замечание исключительно к этому вопросу.


Что проверить? Ну проверь замером если не веришь  Подмигивание
1С получает набор данных а потом еще в своих кишках группирует его - а нам это нужно?
Думаю что нет
ЗЫ. Спасибо за уважение к моим сообщениям  Улыбка
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #62 - 17. Декабря 2007 :: 11:16
Печать  
Спасибо вообще всем, кто откликнулся - сижу развесив уши (как на аватаре у Вадимко) - внемлю...
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #63 - 17. Декабря 2007 :: 11:16
Печать  
Цитата:
kiruha писал(а) 17. Декабря 2007 :: 10:52:
Зачем такое писать???
Ведь легко все проверить

P.S. Очень уважаю сообщения Вадимко, замечание исключительно к этому вопросу.


Что проверить? Ну проверь замером если не веришь  Подмигивание
1С получает набор данных а потом еще в своих кишках группирует его - а нам это нужно?
Думаю что нет
ЗЫ. Спасибо за уважение к моим сообщениям  Улыбка


У меня основные тормоза в базе были из за временного расчета.
Это второй по неэффективности алгоритм в 1С после запросов.
Прямые запросы дали уменьшение по времени на порядок.
Это из личного опыта. ДБФ (может на SQL более эффективные расчеты(? ))
Также об этом здесь на форуме многие писали.
И тест можем прогнать.

  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #64 - 17. Декабря 2007 :: 11:27
Печать  
Я говорю о сравнении запроса с целью получения ОСТАТКОВ с выгрузкой итогов
На ТА или нет - без разницы, чем больше группировок тем дальше запрос отстает от выгрузки
Речь о штатном получении итогов
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #65 - 17. Декабря 2007 :: 11:47
Печать  
Цитата:
Я говорю о сравнении запроса с целью получения ОСТАТКОВ с выгрузкой итогов
На ТА или нет - без разницы, чем больше группировок тем дальше запрос отстает от выгрузки
Речь о штатном получении итогов


Если не затруднит Чебур-а, может он сделает на ТА  замеры
Код
Выбрать все
ВремРегистры=СоздатьОбъект("Регистры");
// Фильтры ставим ? Какие ? - нужен менеджер
РегЗаявки=ВремРегистры.Заявки;
Итоги=СоздатьОбъект("ТаблицаЗначений");
РегЗаявки.ВыгрузитьИтоги(Итоги,1,1);  



В разделенном режиме, разумеется.

Не на ТА должно быть совсем ...
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #66 - 17. Декабря 2007 :: 11:55
Печать  
Замеры сделаю! В конце дня перерисую штатный запрос на выгрузку итогов в ТЗ с наложением фильтров, которые в запросе фигурируют...
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #67 - 17. Декабря 2007 :: 11:57
Печать  
Цитата:
Замеры сделаю! В конце дня перерисую штатный запрос на выгрузку итогов в ТЗ с наложением фильтров, которые в запросе фигурируют...


Только не забудь - время выгрузки в многопользовательском режиме и локальном может отличаться в разы.
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #68 - 17. Декабря 2007 :: 12:08
Печать  
учел, и так и так прогоню
  
Наверх
www  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #69 - 20. Декабря 2007 :: 18:37
Печать  
Извините за задержку.
Докладываю результаты.
Вместо черного запроса на ТА сделал выгрузку итогов регистра - как справедливо по этому поводу ткнул меня Вадимко.
Черный запрос на ТА - отрабатывает очень долго - больше 10 сек. а то и еще больше... заморачиваться на нем не стал... даже не знаю, чего это меня на ТА потянуло итоги запросом тянуть..? от бездуховности наверное...
итак, черный запрос переписал на выгрузку итогов регистра + код, который обеспечивает идентичность данных выгрузки (далее это все именую "выгрузкой") со структурой итогов прямого запроса. Результаты такие:
- ДЛЯ РАЗДЕЛЕННОГО РЕЖИМА
прямой запрос 1.06 сек
выгрузка 2.02 сек
- ДЛЯ МОНОПОЛЬНОГО РЕЖИМА
прямой запрос не гонял (патченный драйвер не юзал)
выгрузка - 1.2 сек

замечания к результатам:
- 10 прогонов, усреднено на глаз;
- в разделенном режиме - РАБОТАЮ ТОЛЬКО ОДИН Я СЕЙЧАС, с большим количеством юзверей - завтра;
- выборки строились на объеме порядка 120 заявок в среднем по 100 строк в заявке

наложение дополнительных условий на выборки (как прямого запроса, так и выгрузки, где условия делались филтром ТЗ) - существенно картину не изменили.

будет интереснее посмотреть на работу выгрузки прямого в условиях разделенной базы при нескольких пользователях.

пока все.
..а можно мне еще сюда приходить и вопросы задавать...?


  
Наверх
www  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #70 - 21. Декабря 2007 :: 10:46
Печать  
Цитата:
..а можно мне еще сюда приходить и вопросы задавать...?


тю, нет канечна!  Смех
ЗЫ. Про ускорение в 5 раз - так и думал (средний ожидаемый результат)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #71 - 21. Декабря 2007 :: 11:28
Печать  
А теперь самое слабое место выгрузки - многопользовательский режим задним числом.

Прямой запрос в этом случае обращается к 2 таблицам регистра, т.е. условно можно считать время на выпонение
прямого равное 2 * Время прямого запроса ТА (чтобы не тратить время на написание прямого)

P.S. Интересно, фильтр на менеджера как ставился ?
Вычислением списка договоров? Время на формирование этого списка учитывалось?
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #72 - 21. Декабря 2007 :: 11:40
Печать  
в контексте моей задачи выгрузка на заднее число неактуальна...
в итоге выгрузкой итогов фильтр по менеджеру ставился прописыванием 1 в колонку для записей которые надо удалить и потом массово ТЗ перевыгружалась
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инспекция прямого запроса
Ответ #73 - 21. Декабря 2007 :: 11:54
Печать  
Цитата:
в контексте моей задачи выгрузка на заднее число неактуальна...
в итоге выгрузкой итогов фильтр по менеджеру ставился прописыванием 1 в колонку для записей которые надо удалить и потом массово ТЗ перевыгружалась


ОК.
Осталось посмотреть выгрузку при >2 пользователей. У меня в базе торможение
выгрузки начинается именно при нескольких пользователях.
  
Наверх
 
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Инспекция прямого запроса
Ответ #74 - 09. Января 2008 :: 11:08
Печать  
Цитата:
думаю, что аналогичный запрос по просроченным резервам - постараюсь сам осилит.. тупыт так сказать дятлокопированием Подмигивание

АСИЛИЛ!!!
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать