Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Получение подчиненных документов прямым запросом в 1С 7.7

v7: Получение подчиненных документов прямым запросом в 1С 7.7
Я
   НоваяВолна
 
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) сказать так может каждый. в топку... Сам то можешь лучше написать? Так помоги с выбором подчиненных, дай пример. Нечего цепляться  за справочники, когда речь идет о документах
   Владимир1С
 
10 - 20.07.18 - 09:34
(9) С пошаговой методикой отладки надеюсь, знаком. Придётся применить эту методику. Наращивать по одному условию, по одному соединению.
 
 Рекламное место пустует
   НоваяВолна
 
11 - 20.07.18 - 09:37
(10) да так и пытаюсь, пока ничего не выходит. Сам то запрос выводит всё что мне нужно за исключением подчиненных документов
   Эльниньо
 
12 - 20.07.18 - 09:41
(9) Да. Ёпрст вообще ничего не может и ничего не знает.
Всё 1С-сообщество в курсе. Этим он известен и за это его все уважают
   Владимир1С
 
13 - 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 = :Родитель* 
ну и дальше убрать все лишнее

Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует