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