|
v7: Как в запросе выбрать подчиненные документы определенного вида? | ☑ | ||
---|---|---|---|---|
0
Ночной Эльф
24.09.12
✎
08:26
|
Всем доброго времени суток.
Вопрос в следующем есть документ ЗаявкаПокупателя на основании него делается документы Макет и заданиеНаВидео, как из документа ЗаявкаПокупателя выбрать эти подчиненные документы, причем могут быть не только эти два вида на документа введены на основании ЗаявкаПокупателя. Набросал текст запроса ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |ЗаданиеНаМакет = Документ.ЗаданиеНаМакет.ТекущийДокумент; |ОтказОтОптимизацииМакет = Документ.ЗаданиеНаМакет.ОтказОтОптимизации; |КонтрагентМакет = Документ.ЗаданиеНаМакет.Контрагент; |АвторМакет = Документ.ЗаданиеНаМакет.Автор; |ЗаданиеНаИзготовлениеВидеоРолика = Документ.ЗаданиеНаИзготовлениеВидеоРолика.ТекущийДокумент; |АвторВидео = Документ.ЗаданиеНаИзготовлениеВидеоРолика.Автор; |КонтрагентВидео = Документ.ЗаданиеНаИзготовлениеВидеоРолика.Контрагент; |ОтказОтОптимизацииВидео = Документ.ЗаданиеНаИзготовлениеВидеоРолика.ОтказОтОптимизации; |ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент; |Автор = Документ.ЗаявкаПокупателя.Автор; |Контрагент = Документ.ЗаявкаПокупателя.Контрагент; |ОтказОтОптимизации = Документ.ЗаявкаПокупателя.ОтказОтОптимизации; |НомерДокНЗ = Документ.ЗаявкаПокупателя.НомерДок; |ДатаДокНЗ = Документ.ЗаявкаПокупателя.ДатаДок; |ВидОперацииНЗ = Документ.ЗаявкаПокупателя.ВидОперации; |Группировка ЗаявкаПокупателя упорядочить по ЗаявкаПокупателя.ДатаДок; |Условие(ВидОперацииНЗ = Перечисление.ВидыОперацийЗаявок.Неподтвержденная); |"//}}ЗАПРОС ; Но как выбрать именно нужные документы введенные на основании не знаю. Всем заранее спасибо. |
|||
1
kotletka
24.09.12
✎
08:34
|
в 7.7 есть реквизит ДокументОснование?
|
|||
2
Ночной Эльф
24.09.12
✎
08:44
|
Мне нужно на оборот. Когда ДокументОснование является Заявка покупателя и уже относительно его выбрать подчиненные ему, но только в запросе?
|
|||
3
PuhUfa
24.09.12
✎
08:51
|
ДокОснование = Документ.Макет.ДокОснование, Документ.заданиеНаВидео.ДокОснование, Документ.ЗаявкаПокупателя.ТекущийДокумент;
не? |
|||
4
Mikeware
24.09.12
✎
08:55
|
// Возвращает ТЗ подчиненных документов
Функция глВыбратьПодчиененные(ДокОснование,ВидПодчДокумента="", НачДата="",КонДата="", флПроведенные="") Экспорт ТекстЗапроса=" |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 Тогда рс.УстановитьТекстовыйПараметр("Проведенные",флПроведенные); КонецЕсли; результат=рс.ВыполнитьИнструкцию(текстЗапроса); Возврат результат; КонецФункции // глВыбратьПодчиененные |
|||
5
Ночной Эльф
24.09.12
✎
09:00
|
(3) так разве вторая строка не выведет вобще все документы ЗаявкаПокупателя не надо ли условие
Документ.ЗаявкаПокупателя.ДокОснование = ДокОснование ? |
|||
6
PuhUfa
24.09.12
✎
09:31
|
(5) какая вторая строка?
|
|||
7
Ночной Эльф
24.09.12
✎
09:59
|
А еп?ь это же одна строка не заметил, и че получается ДокОснования выведет все подчиненные документы документа ЗаявкаПокупателя.ТекущийДокумент?
|
|||
8
Ночной Эльф
24.09.12
✎
10:05
|
А какая группировка должна быть
|Группировка ЗаявкаПокупателя |Группировка ДокОснование ? |
|||
9
expertus
24.09.12
✎
10:16
|
Сделай 2 запроса: первым найди необходимые документы и запихни их в список значений, во втором сделай фильтр документов по этому списку.
|
|||
10
PuhUfa
24.09.12
✎
10:37
|
(8) лень переправлять на твои реквизиты, поэтому оставлю как есть. Вот только что накидал в пофигураторе на том что было. У меня работает:
//Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ДокОснование = Документ.Реализация.ДокОснование, Документ.ПКО.ДокОснование, Документ.ЗаявкаПокупателя.ТекущийДокумент, Документ.СтрокаВыпискиПриход.ДокОснование; |Док = Документ.Реализация.ТекущийДокумент, Документ.ПКО.ТекущийДокумент, Документ.СтрокаВыпискиПриход.ТекущийДокумент; |Сумма = Документ.ЗаявкаПокупателя.Сумма; |Функция СуммаСумма = Сумма(Сумма); |Группировка ДокОснование; |Группировка Док; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; |
|||
11
Ночной Эльф
24.09.12
✎
14:39
|
(10) странно почему тогда у меня то работает
ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |ОтказОтОптимизацииМакет = Документ.ЗаданиеНаМакет.ОтказОтОптимизации; |КонтрагентМакет = Документ.ЗаданиеНаМакет.Контрагент; |АвторМакет = Документ.ЗаданиеНаМакет.Автор; |АвторВидео = Документ.ЗаданиеНаИзготовлениеВидеоРолика.Автор; |КонтрагентВидео = Документ.ЗаданиеНаИзготовлениеВидеоРолика.Контрагент; |ОтказОтОптимизацииВидео = Документ.ЗаданиеНаИзготовлениеВидеоРолика.ОтказОтОптимизации; |ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент; |Автор = Документ.ЗаявкаПокупателя.Автор; |Контрагент = Документ.ЗаявкаПокупателя.Контрагент; |ОтказОтОптимизации = Документ.ЗаявкаПокупателя.ОтказОтОптимизации; |НомерДокНЗ = Документ.ЗаявкаПокупателя.НомерДок; |ДатаДокНЗ = Документ.ЗаявкаПокупателя.ДатаДок; |ВидОперацииНЗ = Документ.ЗаявкаПокупателя.ВидОперации; |ДокОснование = Документ.ЗаданиеНаМакет.ДокОснование, Документ.ЗаданиеНаИзготовлениеВидеоРолика.ДокОснование,Документ.ЗаявкаПокупателя.ТекущийДокумент; |Док = Документ.ЗаданиеНаМакет.ТекущийДокумент, Документ.ЗаданиеНаИзготовлениеВидеоРолика.ТекущийДокумент; |Группировка ДокОснование; |Группировка Док; |Условие(ВидОперацииНЗ = Перечисление.ВидыОперацийЗаявок.Неподтвержденная); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей ЗаявкаПокупателя Таб.ВывестиСекцию("ЗаявкаПокупателя"); Пока Запрос.Группировка(2) = 1 Цикл Таб.ВывестиСекцию("ДокОсн"); КонецЦикла; КонецЦикла; |
|||
12
Ночной Эльф
24.09.12
✎
14:39
|
Вернее НЕ РАБОТАЕТ
|
|||
13
Ёпрст
24.09.12
✎
14:45
|
(11)це же очевидно - из-за условия по ВидОперацииНЗ на 1 вид документа.
подумай, чему оно равно при выборке из других видов, сделай выводы. |
|||
14
Ночной Эльф
24.09.12
✎
14:57
|
(13) хм и правда заработало, для меня это странно немного
Но вот в чем проблема он выбирает только подчиненные документы которые вошли в период скажем с 01.09.12 по 30.09.12 а у документа заявка покупателя может быть и подчиненные документы аж с июля и они тоже нужны как тут быть ? |
|||
15
Ёпрст
24.09.12
✎
14:58
|
(14) посмотреть в сторону (4).
а в чорном запросе... красиво (и быстро) не получится. |
|||
16
Ёпрст
24.09.12
✎
14:59
|
проще уж тогда ВыбратьПодчиненныеДокументы использовать
|
|||
17
Ночной Эльф
24.09.12
✎
15:06
|
Как хотя бы сделать чтобы он выбирал только по Заявке ?
|
|||
18
Z1
24.09.12
✎
15:53
|
(0)
ВыбратьПодчиненныеДокументы пишется через прямой запрос + доп условие туда же на вид документа. Этот способ самый быстрый |
|||
19
PuhUfa
25.09.12
✎
07:54
|
(14) никак. для любого периода в запросе найдется документ который в него не попадет. либо используй период за все время существования базы.
(17) |Условие (ДокОснование = выбраннаяЗаявка); Вообще непонятно зачем ты уперся в запрос если тебе надо выбрать подчиненные документы для конкретного докоснования. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |