Имя: Пароль:
1C
1C 7.7
v7: Запрос - СЗ документов не имеющих подчиненных.
0 Bagirius
 
22.10.12
12:22
Есть Документ вида X. У него могут быть подчиненные документы вида Y. Нужно запросом выбрать все документы вида X, у которых нет подчиненного вида Y.

Что-то не могу догнать как. Перебирать все доки в цикле, долго. Т.к. Период большой (за всю историю базы).
1 Изучаю1С8
 
22.10.12
12:24
1с++?
2 Bagirius
 
22.10.12
12:25
есть такое чудо.
3 Bagirius
 
22.10.12
12:26
А как прямой запрос сделать такой???
4 Изучаю1С8
 
22.10.12
12:42
У меня есть функция на основе класа ПрямойЗапрос

Функция глВернутьПодчиненныеДокументы(Конт,ВидПодчиненногоДокумента="") Экспорт
   
   ТекстЗапроса = "
   
   |ВЫБРАТЬ
   |    
   |    ПодчДок.ТекущийДокумент [Док $Документ],
   |    ПодчДок.ВидДокумента КАК Док_вид,
   |    ПодчДок.ДатаДокумента [ДатаДок $Дата],
   |    ПодчДок.НомерДокумента [НомерДок $Число]
   |    
   |ИЗ $ПодчиненныеДокументы.Потомки(:Док,:НачДата,:КонДата) КАК ПодчДок
   |";
   
   Если ПустоеЗначение(ВидПодчиненногоДокумента) = 0 Тогда
       ТекстЗапроса = ТекстЗапроса + "
       |ГДЕ ПодчДок.ВидДокумента = :ВидДокумента."+ВидПодчиненногоДокумента+"
       |";
   КонецЕсли;
   
   глЗапросВернутьПодчиненныеДокументы.Текст = ТекстЗапроса;
   глЗапросВернутьПодчиненныеДокументы.УстановитьТекстовыйПараметр("НачДата",НачГода(ТекущаяДата()));
   глЗапросВернутьПодчиненныеДокументы.УстановитьТекстовыйПараметр("КонДата",ТекущаяДата());
   глЗапросВернутьПодчиненныеДокументы.УстановитьТекстовыйПараметр("Док",Конт);
   ИтТз = глЗапросВернутьПодчиненныеДокументы.Выполнить("ИндексированнаяТаблица");
   Возврат ИтТз;
   
КонецФункции // глВернутьПодчиненныеДокументы
5 Изучаю1С8
 
22.10.12
12:45
Хотя нет, тут проще руками написать а не смотреть тек у кого табличка пустая.
6 Mikeware
 
22.10.12
12:46
(4) немножко полнее:
//==============================
// Возвращает ТЗ подчиненных документов
Функция  глВыбратьПодчиененные(ДокОснование,ВидПодчДокумента="", НачДата="",КонДата="", флПроведенные="") Экспорт
       ТекстЗапроса="
   |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
   |";

   Если ПустоеЗначение(НачДата)=0 Тогда
       рс.УстановитьТекстовыйПараметр("НачДата", НачДата);
   КонецЕсли;
   Если ПустоеЗначение(КонДата)=0 Тогда
       рс.УстановитьТекстовыйПараметр("КонДата",КонДата);
   КонецЕсли;
   рс.УстановитьТекстовыйПараметр("ВыбОснование",ДокОснование);
   Если ПустоеЗначение(флПроведенные)=0 Тогда
       рс.УстановитьТекстовыйПараметр("Проведенные",флПроведенные);
   КонецЕсли;
   результат=рс.ВыполнитьИнструкцию(текстЗапроса);
   Возврат результат;
КонецФункции // глВыбратьПодчиененные
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший