|   |   | 
| 
 | v7: Получение подчиненных документов прямым запросом в 1С 7.7 | ☑ | ||
|---|---|---|---|---|
| 0
    
        НоваяВолна 20.07.18✎ 07:33 | 
        Вообщем сам сабж 
 Написал вот такой запрос, но подчиненные документы он не подхватывает, хотя они точно есть, хотя бы в одном документе из тех на которых тестировал. Что-то запутался, не могу найти где ошибся. Помогите. ТекстSQLЗапроса = "SELECT | ДокументДоговор.IDDOC [ДокументДоговор $Документ.Договор], | ЖурналДокументов.DOCNO НомерДокумента, | ЖурналОснование.IDDOC [ДоговорОсн $Документ], | ЖурналОснование.IDDOCDEF ДоговорОсн_вид, | ЖурналДокументов.DOCNO НомерДокумента, | CONVERT(DateTime, LEFT(ЖурналДокументов.DATE_TIME_IDDOC, 8), 112) as ДатаДокумента, | Case When $ДокументДоговор.фУстнаяДоговоренность = 1 | then 'Устно' | When rtrim(ltrim(ЖурналДокументов.$ОбщийРеквизит.Основание))='0 0' | then 'Договор' | else 'Доп.' | end ПредставлениеДокумента, | $ДокументДоговор.РегистрационныйНомер as РегистрационныйНомер, | $ДокументДоговор.Субъект [Организация $Справочник.СубъектыУчета], | $ДокументДоговор.Контрагент [Контрагент $Справочник.Контрагенты], | Cast($ДокументДоговор.ДатаНачала as Datetime) ДатаНачала, | Nullif($ДокументДоговор.ДатаКонца,'17530101') ДатаКонца, | Case When $ДокументДоговор.Автопролонгация=0 | then 'нет' | else 'да' | end Автопролонгация, | $ДокументДоговор.ПроцентПредоплаты ПроцентПредоплаты, | $ДокументДоговор.КоличествоДнейОтсрочки КоличествоДнейОтсрочки, | case when $ДокументДоговор.фФакторинг = 1 then 'Ф' else $СпрПредметДоговора.Сокр end Сокр, | Nullif(Cast($ДокументДоговор.ОплатаДо as Datetime),'17530101') ОплатаДо, | $ДокументДоговор.ОтветственноеЛицо [ОтветственноеЛицо $Справочник.Сотрудники] |FROM | $Документ.Договор as ДокументДоговор WITH (NOLOCK) |INNER JOIN | _1SJOURN as ЖурналДокументов WITH (NOLOCK) |ON | ДокументДоговор.IDDOC = ЖурналДокументов.IDDOC | AND | ЖурналДокументов.ISMARK = 0 |LEFT JOIN $Справочник.Контрагенты as СправочникКонтрагенты WITH (NOLOCK) ON СправочникКонтрагенты.ID = :Контрагент |LEFT JOIN _1sjourn ЖурналОснование (nolock) | ON right(ЖурналДокументов.sp1351, 9) = ЖурналОснование.iddoc |LEFT JOIN $Документ.Договор as ДоговорОсн WITH (NOLOCK) | ON ДоговорОсн.IDDOC = ЖурналОснование.IDDOC |LEFT JOIN $Справочник.ПредметДоговора as СпрПредметДоговора WITH (NOLOCK) | ON СпрПредметДоговора.ID = $ДокументДоговор.ПредметДоговора |WHERE $ДокументДоговор.ДатаНачала<=:ДатаДокум | AND ($ДокументДоговор.Контрагент = :Контрагент | or $ДокументДоговор.Контрагент in (select СпрКонтрагентыФилиал.ID from $Справочник.Контрагенты СпрКонтрагентыФилиал WITH (NOLOCK) | WHERE $СпрКонтрагентыФилиал.ИНН = $СправочникКонтрагенты.ИНН and $СправочникКонтрагенты.Филиал = 1)) | AND $СправочникКонтрагенты.ЗапретИспользования = 0 | AND ($ДокументДоговор.ДатаКонца >=:ДатаДокум | OR $ДокументДоговор.ДатаКонца = Cast('17530101' as Datetime) | OR ($ДокументДоговор.ДатаКонца <:ДатаДокум and $ДокументДоговор.Автопролонгация=1)) | AND | ((ЖурналДокументов.CLOSED&1 = 1) OR ((ЖурналДокументов.CLOSED&1 = 0) AND ($ДокументДоговор.Контрагент <> '') ) ) |ORDER BY | ДатаДокумента, РегистрационныйНомер"; ODBCRecordSet = СоздатьОбъект("ODBCRecordSet"); ODBCRecordSet.УстановитьТекстовыйПараметр("Контрагент" , Контрагент); ODBCRecordSet.УстановитьТекстовыйПараметр("ДатаДокум" , КонДата); ТзРезультат = ODBCRecordSet.ВыполнитьИнструкцию(ТекстSQLЗапроса); ТзРезультат.ВыбратьСтроку(); | |||
| 1
    
        Владимир1С 20.07.18✎ 08:44 | 
        (0) отлаживал на тестовой базе ? Получалось всё хорошо? Значит  в рабочей другие параметры, которые используешь в условиях.     | |||
| 2
    
        НоваяВолна 20.07.18✎ 08:59 | 
        (1) У нас тестовая и рабочая совпадают. Но дело не в этом. Я и в тестовой базе простым перебором вижу подчиненные документы для документа Договоры конкретного контрагента. А вот запрос мой их не подтягивает.     | |||
| 3
    
        Ёпрст гуру 20.07.18✎ 09:03 | 
        (0)
 |LEFT JOIN $Справочник.Контрагенты as СправочникКонтрагенты WITH (NOLOCK) ON СправочникКонтрагенты.ID = :Контрагент зачетное соединение.. | |||
| 4
    
        Ёпрст гуру 20.07.18✎ 09:04 | 
        +
 нахрена так писать ? ЖурналДокументов.sp1351 | |||
| 5
    
        Ёпрст гуру 20.07.18✎ 09:05 | 
        +
 $ДокументДоговор.Контрагент <> '' это тоже п...ц стравнивать надо с $ПустойИД | |||
| 6
    
        Ёпрст гуру 20.07.18✎ 09:07 | 
        ну и для поиска подчиненных документов нужна табличка _1scrdoc     | |||
| 7
    
        НоваяВолна 20.07.18✎ 09:11 | 
        (3) что-то не понял причем тут справочник Контрагенты и Чем не понравилось соединение по полю ЖурналДокументов.sp1351? Там по идее и хранятся ссылки на подчиненные документы     | |||
| 8
    
        Ёпрст гуру 20.07.18✎ 09:13 | 
        (7) как бэ, весь запрос в топку.
 Для начала, ознакомься с этим, что ле.. http://www.script-coding.com/v77tables.html | |||
| 9
    
        НоваяВолна 20.07.18✎ 09:19 | 
        (8) сказать так может каждый. в топку... Сам то можешь лучше написать? Так помоги с выбором подчиненных, дай пример. Нечего цепляться  за справочники, когда речь идет о документах     | |||
| 10
    
        Владимир1С 20.07.18✎ 09:34 | 
        (9) С пошаговой методикой отладки надеюсь, знаком. Придётся применить эту методику. Наращивать по одному условию, по одному соединению.     | |||
| 11
    
        НоваяВолна 20.07.18✎ 09:37 | 
        (10) да так и пытаюсь, пока ничего не выходит. Сам то запрос выводит всё что мне нужно за исключением подчиненных документов     | |||
| 12
    
        Эльниньо 20.07.18✎ 09:41 | 
        (9) Да. Ёпрст вообще ничего не может и ничего не знает.
 Всё 1С-сообщество в курсе. Этим он известен и за это его все уважают | |||
| 13
    
        Владимир1С 20.07.18✎ 09:45 | 
        (11) Сделай отдельно запрос по подчинённым для одного дока, без условий, просто получить все подчинённые. ODBCRecordSet.УстановитьТекстовыйПараметр("главныйДокумент"                , докИЗполяФормы);
 Чтобы разбираться было проще. | |||
| 14
    
        Ёпрст гуру 20.07.18✎ 09:51 | ||||
| 15
    
        Инсуран 20.07.18✎ 09:55 | 
        Что то такое надо:
 SELECT Жур.IDDoc [Документ $Документ], Жур.IDDocDef Документ_вид FROM _1SCRDOC Отбор (NOLOCK) INNER JOIN _1Sjourn Жур (NOLOCK) ON Отбор.ChildID = Жур.IDDoc and Жур.IsMark = 0 WHERE Отбор. MDID = 0 AND Отбор.ParentVal = :Родитель* ну и дальше убрать все лишнее | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |