Имя: Пароль:
1C
1C 7.7
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) |Условие (ДокОснование = выбраннаяЗаявка);

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