|
v7: ПрямойЗапрос подчиненных документов | ☑ | ||
---|---|---|---|---|
0
Dolly_EV
17.04.12
✎
08:06
|
Вобщем запутался я, требуется хелп :(
[code] // ПрямойЗапрос ВТ $ПодчиненныеДокументы ЗапросПодч = СоздатьОбъект("ПрямойЗапрос"); ЗапросПодч.БухгалтерскийУчет = 0; ЗапросПодч.ОперативныйУчет = 0; ЗапросПодч.ПериодическиеЗначения = 0; ЗапросПодч.РежимОтладки = 0; ЗапросПодч.Текст=" |ВЫБРАТЬ | ПодчДок.ТекущийДокумент КАК [ДокПодч $Документ] | ,ПодчДок.ВидДокумента КАК [ДокПодч_вид $ВидДокумента] |ИЗ | $ПодчиненныеДокументы.Потомки(@ДокОсн) КАК ПодчДок |ГДЕ"; Если глЭтоSQL=1 Тогда ЗапросПодч.Текст=ЗапросПодч.Текст+" | ВидДокумента = @лВидДок"; лЗначВидДок=глМетаДата.ИДДокумента("ПриходныйОрдер"); Иначе ЗапросПодч.Текст=ЗапросПодч.Текст+" | СОКРЛ(ВидДокумента) = @лВидДок"; лЗначВидДок=глМетаДата.ЧислоВСтроку(глМетаДата.ИДДокумента("ПриходныйОрдер"),36); КонецЕсли; ЗапросПодч.ОписаниеПараметра("ДокОсн","Неопределенный"); ЗапросПодч.ОписаниеПараметра("лВидДок","ВидДокумента"); ЗапросПодч.ПодготовитьПараметризованныйЗапрос(); ВремяВып = _GetPerformanceCounter(); тзДок.ВыбратьСтроки(); Пока тзДок.ПолучитьСтроку()=1 Цикл ЗапросПодч.ПодставлятьПараметры("ДокОсн",тзДок.Док); ЗапросПодч.ПодставлятьПараметры("лВидДок",лЗначВидДок); тзВрем = ЗапросПодч.ВыполнитьПараметризованныйЗапрос(); тзВрем.ВыбратьСтроки(); Пока тзВрем.ПолучитьСтроку()=1 Цикл тзПодч.НоваяСтрока(); тзПодч.Док=тзДок.Док; тзПодч.ДокПодч=тзВрем.ДокПодч; тзПодч.ВсегоПодч=тзПодч.ДокПодч.Сумма; КонецЦикла; КонецЦикла; [/code] Для СКЛя условие ГДЕ не срабатывает - выдает пустую таблицу с подчиненными :( Пните в нужном направлении?? и как-нибудь так пните, чтобы в параметр Запроса можно было просто передать "ПриходныйОрдер" и все взлетело? |
|||
1
kalleka
17.04.12
✎
09:30
|
(0) Велосипед изобретаешь, все давно есть, куча обработок по структуре подчиненности
|
|||
2
kalleka
17.04.12
✎
09:31
|
(0) тебе для других целей, не посмотрел спросоня, сорри
|
|||
3
Mikeware
17.04.12
✎
09:35
|
Функция глВыбратьПодчиненные(ДокОснование,ВидПодчДокумента="", НачДата="",КонДата="", флПроведенные="") Экспорт
ТекстЗапроса=" |SELECT | distinct | Жур.IDDoc [Док $Документ], | Жур.IDDocDef Док_вид |FROM | _1SJourn Жур (nolock) |INNER JOIN | _1SCRDOC Отбор ON Отбор.ChildID = Жур.IDDoc AND | Отбор. MDID = 0 AND | Отбор.ParentVal = :ВыбОснование* "; Если ПустоеЗначение(НачДата)=0 Тогда ТекстЗапроса=ТекстЗапроса+" | AND Отбор.Child_Date_Time_IDDoc >:НачДата "; КонецЕсли; Если ПустоеЗначение(КонДата)=0 Тогда ТекстЗапроса=ТекстЗапроса+" | AND Отбор.Child_Date_Time_IDDoc < :КонДата~"; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" |where Жур.ismark=0"; Если ПустоеЗначение(флПроведенные)=0 Тогда ТекстЗапроса=ТекстЗапроса+" | and Жур.closed&1=:Проведенные"; КонецЕсли; Если ПустоеЗначение(ВидПодчДокумента)=0 Тогда ТекстЗапроса=ТекстЗапроса+" | and Жур.IDDocDef=$ВидДокумента."+ВидПодчДокумента; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" |order by Жур.iddoc |"; рс=СоздатьОбъект("ODBCRecordset"); Если ПустоеЗначение(НачДата)=0 Тогда рс.УстановитьТекстовыйПараметр("НачДата", НачДата); КонецЕсли; Если ПустоеЗначение(КонДата)=0 Тогда рс.УстановитьТекстовыйПараметр("КонДата",КонДата); КонецЕсли; рс.УстановитьТекстовыйПараметр("ВыбОснование",ДокОснование); Если ПустоеЗначение(флПроведенные)=0 Тогда рс.УстановитьТекстовыйПараметр("Проведенные",флПроведенные); КонецЕсли; результат=рс.ВыполнитьИнструкцию(текстЗапроса); Возврат результат; КонецФункции // глВыбратьПодчиненные |
|||
4
Dolly_EV
17.04.12
✎
09:59
|
(3) Не канает.. надо ПАРАМЕТРИЗОВАННЫЙ запрос.. Т.к. он выполняется на форме в некоторых местах, твой вариант будет медленный
|
|||
5
Mikeware
17.04.12
✎
10:01
|
Если у тебя условия все время одинаковые - переделать в параметризованный - раз плюнуть.
а тут функция на кучу случаев жизни - найти такие подчиненные, сякие, проведенные-непроведенные, и т.п.... |
|||
6
Dolly_EV
17.04.12
✎
10:02
|
(3) это я из отчета кусок вставил, а на самом деле с такой же функцией в глобальнике борюсь
|
|||
7
Dolly_EV
17.04.12
✎
10:05
|
(3) ну и универсальность (SQL/DBF)
|
|||
8
Mikeware
17.04.12
✎
10:17
|
(7) я не юзаю файловые базы в принципе, поэтому передо мной такого вопроса не стоит. Хотя стремление похвальное
|
|||
9
Dolly_EV
17.04.12
✎
10:54
|
(8) А если у тебя, к примеру, клиент, у которого один единственный какой-нить Celeron 1.6/DDR-2 512Мб/HDD 80Гб/ Ты ему на эту железяку Вин2003+МССкл ставишь?))
|
|||
10
Mikeware
17.04.12
✎
11:09
|
(9) у меня нет "клиентов" :-) мне легче
|
|||
11
Dolly_EV
17.04.12
✎
14:13
|
(0) все, вопрос закрыт. База SQL, на которой тесты гонял, была с битой таблицей _1SCRDOC. Так что все работает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |