|
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 = :Родитель* ну и дальше убрать все лишнее |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |