|
v7: УложитьСписокОбъектов() к сторонней базе | ☑ | ||
---|---|---|---|---|
0
LisaAlisa
08.11.17
✎
16:39
|
В базе формирую список значений, состоящий из артикулов, СписокМПЗ. Подключаюсь к другой базе и создаю таблицу
рс.УложитьСписокОбъектов(СписокМПЗ, "СписокМПЗ"); (решетки пока не указываю). Далее проверяю значения созданной таблицы select * from списокМПЗ но в результате всего одна строка с пуcтым значением val и isfolder=2. Как правильно передать список артикулов во временную таблицу? В дальнейшем надо получить значение себестоимости по указанному списку |
|||
1
Ёпрст
08.11.17
✎
16:47
|
(0) ну как тебе сказать помягче то ?
|
|||
2
Ёпрст
08.11.17
✎
16:48
|
УложитьСписокОбъектов приводит всё к id9
|
|||
3
LisaAlisa
08.11.17
✎
17:07
|
(2) и что делать?)
|
|||
4
Ёпрст
08.11.17
✎
17:12
|
(3) изначально, список своих артикулов как получаешь ?
|
|||
5
Ёпрст
08.11.17
✎
17:13
|
на форме выбираешь, или что ?
Делай в одном запросе, обращение к этой базе и к сторонней + синхронизация по твоему артикулу |
|||
6
LisaAlisa
09.11.17
✎
12:42
|
(5) из текущей базы запросом получаю список нужных артикулов, вторым запросом планировалось из второй базы получить сведения по ним, базы разные. Попробую сделать в одном запросе обращение к разным базам
|
|||
7
LisaAlisa
09.11.17
✎
12:58
|
(5) а можно набросать простой приер, как присоеинять вторую базу sql и писать единый запрос. Например, вывести наименования МПЗ из обеих баз, соединив таблицы по артикулу
|
|||
8
Ёпрст
09.11.17
✎
13:03
|
(7) ща
|
|||
9
Ёпрст
09.11.17
✎
13:19
|
Процедура Сформировать()
рс=создатьОбъект("ODBCRecordSet"); ТекстЗапроса = " |SELECT | СпрНаш.DESCR as КлиентосВЭтойбазе -- наименование клиентоса в этой базе, можно и не присоединять справочник, а просто типизировать | ,Спр.DESCR as КлиентосВУдаленнойБазе --наименование клиентоса в удаленной базе |FROM $Справочник.Контрагенты СпрНаш |left join dataBase2.dbo.@Справочник.Контрагенты Спр on СпрНаш.Code = Спр.Code |"; глМД = СоздатьОбъект("MetaDataWork"); ТекстЗапроса=глМД.ОбрМетаСКЛ(ТекстЗапроса); глМД2 = СоздатьОбъект("MetaDataWork"); ПутьКБазе2 = "D:\полный путьк базе данных\"; глМД2.ПрисоединитьМД(ПутьКБазе2+"1Cv7.md"); ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"@","$"); ТекстЗапроса=глМД2.ОбрМетаСКЛ(ТекстЗапроса); Т = рс.ВыполнитьИнструкцию(ТекстЗапроса); Т.ВыбратьСтроку(); КонецПроцедуры |
|||
10
Ёпрст
09.11.17
✎
13:26
|
+9 это, ежели вторая база на этом же серваке, либо сервер прилинкован
|
|||
11
LisaAlisa
09.11.17
✎
14:36
|
(10) базы на разных.
что значит "сервер прилинкован"? |
|||
12
Ёпрст
09.11.17
✎
14:45
|
||||
13
LisaAlisa
09.11.17
✎
14:46
|
Выполняю Запрос в базах, расположенных на одном сервере
|SELECT | СпрНаш.DESCR as КлиентосВЭтойбазе -- наименование клиентоса в этой базе, можно и не присоединять справочник, а просто типизировать | ,Спр.DESCR as КлиентосВУдаленнойБазе --наименование клиентоса в удаленной базе |FROM $Справочник.Контрагенты СпрНаш |left join dataBase2.dbo.@Справочник.Контрагенты Спр on СпрНаш.Code = Спр.Code |"; выдает ошибку : State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'dataBase2.dbo.sc46'. |
|||
14
Ёпрст
09.11.17
✎
14:49
|
(13) :)
подставь имя своей базы данных, заместо dataBase2 ЗЫ: если сервер прилинкован, то указывается сначала имя сервера точка имя схемы точка имя базы точка имя таблицы .. |
|||
15
LisaAlisa
09.11.17
✎
15:25
|
Почему запрос работает в виде
|SELECT | Спр.Descr as Наименование, | Спр2.Descr as Наименование2 |FROM | $Справочник.МПЗ as Спр | |LEFT JOIN GM_teach.dbo.@Справочник.МПЗ as Спр2 ON ltrim(rtrim(Спр2.Code))=ltrim(rtrim(Спр.Code)) |"; Но если хочу еще получить поля Спр.КодСистемы и Спр2.КодСистемы, то выдает ошибку Invalid column name "КодСистемы". |
|||
16
LisaAlisa
09.11.17
✎
15:26
|
(15) с последним разобралась
|
|||
17
LisaAlisa
09.11.17
✎
16:35
|
теперь проблема с параметрами. В запросе, выполняемом в текущей базе, МПЗ фильтруются, параметры указываются на форме. При присоединении второй базы выдает ошибку
Meta name parser error: не указан параметр ":ВыбТипНакладной" Ошибка пропадает, если передать конкретное значение, а не параметр |
|||
18
Ёпрст
09.11.17
✎
16:53
|
(17) больше текста, отсюда не видно, че ты там передаешь и чего лепишь
|
|||
19
LisaAlisa
09.11.17
✎
16:57
|
рс = СоздатьОбъект("ODBCRecordset");
ТекстЗапроса = "-- qryMaker:Отчет1.2017.11.08.14.44.30 |SELECT | Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) РН_дата | , $РасходнаяНакладнаяСтроки.Комитент [Комитент $Справочник.Контрагенты] | , Журнал.$ОбщийРеквизит.ЮридическоеЛицо [ЮридическоеЛицо $Справочник.Контрагенты] | , Журнал.DOCNO РН_номер | , $РасходнаяНакладная.Контрагент [Контрагент $Справочник.Контрагенты] | , $МПЗ1.КодСистемы Артикул | , $МПЗ1.ЕдиницаИзмерения ЕдиницаИзмерения | , $РасходнаяНакладнаяСтроки.Количество Количество | , $РасходнаяНакладнаяСтроки.Цена Цена |FROM $Документ.РасходнаяНакладная AS РасходнаяНакладная With (NOLOCK) | INNER JOIN $ДокументСтроки.РасходнаяНакладная AS РасходнаяНакладнаяСтроки With (NOLOCK) ON РасходнаяНакладная.IDDOC = РасходнаяНакладнаяСтроки.IDDOC | INNER JOIN $_1SJOURN AS Журнал With (NOLOCK) ON РасходнаяНакладная.IDDOC = Журнал.IDDOC | INNER JOIN $Справочник.МПЗ AS МПЗ1 With (NOLOCK) ON $РасходнаяНакладнаяСтроки.МПЗ = МПЗ1.ID | INNER JOIN GM_teach.dbo.@Справочник.МПЗ as МПЗ ON ltrim(rtrim(@МПЗ.КодСистемы))=ltrim(rtrim($МПЗ1.КодСистемы)) |WHERE (Cast(Left($Журнал.DATE_TIME_IDDOC, 8) AS datetime) >= :НачДата) | AND (Cast(Left($Журнал.DATE_TIME_IDDOC, 8) AS datetime) <= :КонДата) | AND ($РасходнаяНакладная.ТипНакладной = :ВыбТипНакладной) | AND ($Журнал.$ОбщийРеквизит.ЮридическоеЛицо = :ВыбЮЛ) | AND ($РасходнаяНакладная.Контрагент = :ВыбКонтрагент) | AND ($РасходнаяНакладнаяСтроки.Комитент = :ВыбКомитент) |GROUP BY Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) | , Журнал.DOCNO | , $МПЗ1.КодСистемы | , $МПЗ1.ЕдиницаИзмерения | , $РасходнаяНакладнаяСтроки.Количество | , $РасходнаяНакладнаяСтроки.Комитент | , Журнал.$ОбщийРеквизит.ЮридическоеЛицо | , $РасходнаяНакладная.Контрагент | , $РасходнаяНакладнаяСтроки.Цена |ORDER BY Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) | , Журнал.DOCNO | , $РасходнаяНакладнаяСтроки.Комитент |"; рс.УстановитьТекстовыйПараметр("НачДата", НачДата); рс.УстановитьТекстовыйПараметр("КонДата", КонДата); рс.УстановитьТекстовыйПараметр("ВыбТипНакладной", ВыбТипНакладной); рс.УстановитьТекстовыйПараметр("ВыбЮЛ", ВыбЮЛ); рс.УстановитьТекстовыйПараметр("ВыбКонтрагент", ВыбКонтрагент); рс.УстановитьТекстовыйПараметр("ВыбКомитент", ВыбКомитент); рс.Отладка(1); глМД = СоздатьОбъект("MetaDataWork"); ТекстЗапроса=глМД.ОбрМетаСКЛ(ТекстЗапроса); глМД2 = СоздатьОбъект("MetaDataWork"); ПутьКБазе2 = "\\,,,"; глМД2.ПрисоединитьМД(ПутьКБазе2+"1Cv7.md"); ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"@","$"); ТекстЗапроса=глМД2.ОбрМетаСКЛ(ТекстЗапроса); тз = рс.ВыполнитьИнструкцию(ТекстЗапроса); тз.ВыбратьСтроку(); |
|||
20
LisaAlisa
09.11.17
✎
16:57
|
Если запрос выполнить без присоединения запроса из второй базы, то на параметры ругани нет
|
|||
21
Ёпрст
09.11.17
✎
18:08
|
(20) ааа.. еще раз устанавливай параметры :)
|
|||
22
Ёпрст
09.11.17
✎
18:09
|
или делай составной текст запроса, в котором параметры потом установишь
|
|||
23
Ёпрст
09.11.17
✎
18:11
|
можешь, так например
|--условия далее ТекстЗапроса = СтрЗаменить(ТестЗапроса,"--условия", " | AND ($РасходнаяНакладная.ТипНакладной = :ВыбТипНакладной) | AND ($Журнал.$ОбщийРеквизит.ЮридическоеЛицо = :ВыбЮЛ) | AND ($РасходнаяНакладная.Контрагент = :ВыбКонтрагент) | AND ($РасходнаяНакладнаяСтроки.Комитент = :ВыбКомитент)"); |
|||
24
Ёпрст
09.11.17
✎
18:11
|
ну и установить текстовый параметр в конце.
|
|||
25
Franchiser
гуру
09.11.17
✎
19:22
|
УложитьСписокОбъектов() работает только со ссылками. Можно было попробовать сделать ВыполнитьSQLИзТЗ().
|
|||
26
Franchiser
гуру
09.11.17
✎
19:28
|
+(9) что значит в запросе "@Справочник", и почему "@" затем подменяется?
|
|||
27
Franchiser
гуру
09.11.17
✎
19:29
|
(26) все понял, хитро)
|
|||
28
Franchiser
гуру
09.11.17
✎
19:37
|
(19) ВыбТипНакладной, ВыбЮЛ, ВыбКонтрагент, ВыбКомитент - это ссылки из текущей базы, нет смысла фильтровать в удаленной базы по ним, т.к. тебе не известно как там выглядят эти ссылки. Можно фильтровать только по примитивным типам или же сначала найти ссылки по примитивными типам, затем установить фильтр на ссылки.
|
|||
29
Ёпрст
10.11.17
✎
09:39
|
(28) смотри внимательнее, фильтруются объекты родной базы.
|
|||
30
Eiffil123
10.11.17
✎
10:02
|
я вообще ничего не понял
|
|||
31
Ёпрст
10.11.17
✎
10:20
|
Хотя не, как в (23) уже не покатит.
лень смотреть, что там возвращается после обрметаsql, подсовывает ли он сразу ссылку на справочник, али нет |
|||
32
Ёпрст
10.11.17
✎
10:36
|
короче. посмотри, какой запрос идёт опосля обрметаскл, и если там твои условия не "превращаются" в ид, то тупо получи ид элементов через метадатаворк и подставь ручонками в текст запроса.
|
|||
33
LisaAlisa
10.11.17
✎
23:37
|
(32) ошибка выводится как раз на строке ТекстЗапроса=глМД.ОбрМетаСКЛ(ТекстЗапроса);
|
|||
34
Ёпрст
11.11.17
✎
13:56
|
(33) Получай ид объектов через метадатаворк и подставляй в текст запроса в свои условия.
|
|||
35
LisaAlisa
11.11.17
✎
21:06
|
(34) делаю так
глМД = СоздатьОбъект("MetaDataWork"); IDНачДата = глМД.ЗначениеВСамуюДлиннуюСтрокуБД(НачДата); IDКонДата = глМД.ЗначениеВСамуюДлиннуюСтрокуБД(КонДата); IDВыбТипНакладной = глМД.ЗначениеВСамуюДлиннуюСтрокуБД(ВыбТипНакладной); рс.УстановитьТекстовыйПараметр("НачДата", IDНачДата); рс.УстановитьТекстовыйПараметр("КонДата", IDКонДата); рс.УстановитьТекстовыйПараметр("ВыбТипНакладной", IDВыбТипНакладной); Значения в отладчике IDНачДата = "D20171001 " IDКонДата = "D20171001 " IDВыбТипНакладной = "E1 TC TD " ошибка та же Meta name parser error: не указан параметр ":НачДата" |
|||
36
LisaAlisa
11.11.17
✎
21:20
|
(34) теперь поняла, что без параметров надо сделать.
|
|||
37
LisaAlisa
11.11.17
✎
22:11
|
(34) Ёпрст, Спасибо огромное!!!
|
|||
38
LisaAlisa
11.11.17
✎
22:40
|
Еще вопрос остался, надеюсь, последний)
из сторонней базы мне нужно получить периодический реквизит. Запрос выглядит так ТекстЗапроса = "-- qryMaker:Отчет1.2017.11.08.14.44.30 |SELECT //| $РасходнаяНакладная.IDDOC РНСсылка | Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) РН_дата | , $РасходнаяНакладнаяСтроки.Комитент [Комитент $Справочник.Контрагенты] | , Журнал.$ОбщийРеквизит.ЮридическоеЛицо [ЮридическоеЛицо $Справочник.Контрагенты] | , Журнал.DOCNO РН_номер | , $РасходнаяНакладная.Контрагент [Контрагент $Справочник.Контрагенты] | , $МПЗ1.КодСистемы Артикул | , $МПЗ1.ЕдиницаИзмерения ЕдиницаИзмерения | , $РасходнаяНакладнаяСтроки.Количество Количество | , $РасходнаяНакладнаяСтроки.Цена Цена | , @ПоследнееЗначение.МПЗ.УправленческаяСебестоимость(МПЗ.ID, '"+IDНачДата+"') УправленческаяСебестоимость |FROM $Документ.РасходнаяНакладная AS РасходнаяНакладная With (NOLOCK) | INNER JOIN $ДокументСтроки.РасходнаяНакладная AS РасходнаяНакладнаяСтроки With (NOLOCK) ON РасходнаяНакладная.IDDOC = РасходнаяНакладнаяСтроки.IDDOC | INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РасходнаяНакладная.IDDOC = Журнал.IDDOC | INNER JOIN $Справочник.МПЗ AS МПЗ1 With (NOLOCK) ON $РасходнаяНакладнаяСтроки.МПЗ = МПЗ1.ID | INNER JOIN GM_teach.dbo.@Справочник.МПЗ as МПЗ ON ltrim(rtrim(@МПЗ.КодСистемы))=ltrim(rtrim($МПЗ1.КодСистемы)) |WHERE (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) >= '"+IDНачДата+"') | AND (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) <= '"+IDКонДата+"') | --УсловиеТипНакладной | --УсловиеЮЛ | --УсловиеКонтрагент | --УсловиеКомитент |GROUP BY Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) | , Журнал.DOCNO | , $МПЗ1.КодСистемы | , $МПЗ1.ЕдиницаИзмерения | , $РасходнаяНакладнаяСтроки.Количество | , $РасходнаяНакладнаяСтроки.Комитент | , Журнал.$ОбщийРеквизит.ЮридическоеЛицо | , $РасходнаяНакладная.Контрагент | , $РасходнаяНакладнаяСтроки.Цена | , @ПоследнееЗначение.МПЗ.УправленческаяСебестоимость(МПЗ.ID, '"+IDНачДата+"') |ORDER BY Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) | , Журнал.DOCNO | , $РасходнаяНакладнаяСтроки.Комитент |"; как мне полученное поле "УправленческаяСебестоимость" указать в группировке? В текущем виде запрос не работает |
|||
39
Franchiser
гуру
12.11.17
✎
14:05
|
Самый простой вариант: Оберни во вложенный запрос, или помести во временную таблицу через Into, потом выбери из нее данные с группировкой
|
|||
40
Franchiser
гуру
12.11.17
✎
14:10
|
(35) idшники ты неправильно получаешь, запрос ничего не вернет
|
|||
41
Franchiser
гуру
12.11.17
✎
14:12
|
И к datetime преобразовывать в условие не надо
|
|||
42
LisaAlisa
12.11.17
✎
21:33
|
(40) запрос работает.
Айди получаю глМД = СоздатьОбъект("MetaDataWork"); IDНачДата = Сред(глМД.ЗначениеВСамуюДлиннуюСтрокуБД(НачДата),2,9); IDКонДата = Сред(глМД.ЗначениеВСамуюДлиннуюСтрокуБД(КонДата),2,9); IDВыбТипНакладной = Сред(глМД.ЗначениеВСамуюДлиннуюСтрокуБД(ВыбТипНакладной),7,9); IDВыбЮЛ = Сред(глМД.ЗначениеВСамуюДлиннуюСтрокуБД(ВыбЮЛ),7,9); IDВыбКонтрагент = Сред(глМД.ЗначениеВСамуюДлиннуюСтрокуБД(ВыбКонтрагент),7,9); IDВыбКомитент = Сред(глМД.ЗначениеВСамуюДлиннуюСтрокуБД(ВыбКомитент),7,9); |
|||
43
LisaAlisa
12.11.17
✎
21:44
|
(41) Запрос возвращает корректно данные, полученные из текущей базы, а вот а вот из сторонней возвращает значение NULL
Т.е. , @ПоследнееЗначение.МПЗ.УправленческаяСебестоимость(МПЗ.ID, '"+IDНачДата+"') УправленческаяСебестоимость в sql это выглядит так SELECT Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) РН_дата , РасходнаяНакладнаяСтроки.sp488 [Комитент $Справочник.Контрагенты] , Журнал.sp697 [ЮридическоеЛицо $Справочник.Контрагенты] , Журнал.DOCNO РН_номер , РасходнаяНакладная.sp104 [Контрагент $Справочник.Контрагенты] , МПЗ1.sp178 Артикул , МПЗ1.sp139 ЕдиницаИзмерения , РасходнаяНакладнаяСтроки.sp120 Количество , РасходнаяНакладнаяСтроки.sp121 Цена , ( select top 1 cast(c1281_vv.value as numeric(18, 4)) from _1sconst as c1281_vv (nolock) where c1281_vv.id = 1281 and c1281_vv.objid = МПЗ.ID and (c1281_vv.date <= '20171001') order by c1281_vv.date desc, c1281_vv.time desc, c1281_vv.docid desc, c1281_vv.row_id desc ) УправленческаяСебестоимость FROM dh130 AS РасходнаяНакладная With (NOLOCK) INNER JOIN dt130 AS РасходнаяНакладнаяСтроки With (NOLOCK) ON РасходнаяНакладная.IDDOC = РасходнаяНакладнаяСтроки.IDDOC INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РасходнаяНакладная.IDDOC = Журнал.IDDOC INNER JOIN sc155 AS МПЗ1 With (NOLOCK) ON РасходнаяНакладнаяСтроки.sp119 = МПЗ1.ID INNER JOIN GM_teach.dbo.sc72 as МПЗ ON ltrim(rtrim(МПЗ.sp66))=ltrim(rtrim(МПЗ1.sp178)) WHERE (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) >= '20171001') AND (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) <= '20171001') AND (РасходнаяНакладная.sp1062 = ' TD ') AND (Журнал.sp697 = ' 7 ') AND (РасходнаяНакладная.sp104 = ' EM7C ') AND (РасходнаяНакладнаяСтроки.sp488 = ' B ') |
|||
44
LisaAlisa
12.11.17
✎
21:48
|
(43) при этом если получать из сторонней базы не периодические реквизиты, они возвращаются. Проблема именно с периодическим
|
|||
45
Franchiser
гуру
12.11.17
✎
22:39
|
(44) логично, не используй ПоследнееЗначение, он тебе выдаст неверный результат, т.к. парсер ничего не знает о том что нужно сгенерировать запрос к таблицам другой базы. Например _1sconst по твоему запросу будет взята из текущей базы. Нужно написать gm_teach.dbo._1sconst остальные поля пиши с @, чтобы указать парсеру, что они из другой базы
|
|||
46
Franchiser
гуру
12.11.17
✎
22:41
|
Кстати я не уверен что в ПоследнееЗначение нужно передать идентификатор даты, там д.б. тип дата
|
|||
47
LisaAlisa
13.11.17
✎
07:35
|
(46) с датой прокатывает. Проверяла подобный запрос, используя стороннюю базу как текущую для проверки
|
|||
48
LisaAlisa
13.11.17
✎
07:40
|
(45) @ можно вставлять непосредственно в sql?
такой вариант не прокатывает , ( select top 1 cast(@c1281_vv.value as numeric(18, 4)) from gm_teach.dbo._1sconst as c1281_vv (nolock) where @c1281_vv.id = 1281 and @c1281_vv.objid = МПЗ.ID and (@c1281_vv.date <= '20171001') order by @c1281_vv.date desc, @c1281_vv.time desc, @c1281_vv.docid desc, @c1281_vv.row_id desc ) УправленческаяСебестоимость Must declare the variable '@c1281_vv'. |
|||
49
LisaAlisa
13.11.17
✎
07:47
|
(45) почти получилось. В sql пишу не _1sconst , а gm_teach.dbo._1sconst
но ведь это уже отпарсенный запрос. Но как это описать в виде @ПоследнееЗначение.МПЗ.УправленческаяСебестоимость(МПЗ.ID, '"+IDНачДата+"') УправленческаяСебестоимость или вообще никак? |
|||
50
Ёпрст
13.11.17
✎
09:29
|
(49) Покажи текст запрса, который сейчас не работает.
ЗЫ: используй не ЗначениеВСамуюДлиннуюСтрокуБД,а просто ЗначениеВСтрокуБД - не надо будет всякие сред делать. |
|||
51
Franchiser
гуру
13.11.17
✎
10:47
|
@c1281_vv замени на c1281_vv
|
|||
52
LisaAlisa
13.11.17
✎
12:11
|
(50) Запрос из- 1с
|SELECT | Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) РН_дата | , $РасходнаяНакладнаяСтроки.Комитент [Комитент $Справочник.Контрагенты] | , Журнал.$ОбщийРеквизит.ЮридическоеЛицо [ЮридическоеЛицо $Справочник.Контрагенты] | , Журнал.DOCNO РН_номер | , $РасходнаяНакладная.Контрагент [Контрагент $Справочник.Контрагенты] | , $МПЗ1.КодСистемы Артикул | , $МПЗ1.ЕдиницаИзмерения ЕдиницаИзмерения | , $РасходнаяНакладнаяСтроки.Количество Количество | , $РасходнаяНакладнаяСтроки.Цена Цена | , @ПоследнееЗначение.МПЗ.УправленческаяСебестоимость(МПЗ.ID, '"+IDНачДата+"') УправленческаяСебестоимость |FROM $Документ.РасходнаяНакладная AS РасходнаяНакладная With (NOLOCK) | INNER JOIN $ДокументСтроки.РасходнаяНакладная AS РасходнаяНакладнаяСтроки With (NOLOCK) ON РасходнаяНакладная.IDDOC = РасходнаяНакладнаяСтроки.IDDOC | INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РасходнаяНакладная.IDDOC = Журнал.IDDOC | INNER JOIN $Справочник.МПЗ AS МПЗ1 With (NOLOCK) ON $РасходнаяНакладнаяСтроки.МПЗ = МПЗ1.ID | INNER JOIN GM_teach.dbo.@Справочник.МПЗ as МПЗ ON ltrim(rtrim(@МПЗ.КодСистемы))=ltrim(rtrim($МПЗ1.КодСистемы)) |WHERE (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) >= '"+IDНачДата+"') | AND (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) <= '"+IDКонДата+"') | --УсловиеТипНакладной | --УсловиеЮЛ | --УсловиеКонтрагент | --УсловиеКомитент |
|||
53
LisaAlisa
13.11.17
✎
12:12
|
Запрос возвращает NULL в поле, получаемом из сторонней базы УправленческаяСебестоимость
В sql он выглядит так: SELECT Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) РН_дата , РасходнаяНакладнаяСтроки.sp488 [Комитент $Справочник.Контрагенты] , Журнал.sp697 [ЮридическоеЛицо $Справочник.Контрагенты] , Журнал.DOCNO РН_номер , РасходнаяНакладная.sp104 [Контрагент $Справочник.Контрагенты] , МПЗ1.sp178 Артикул , МПЗ1.sp139 ЕдиницаИзмерения , РасходнаяНакладнаяСтроки.sp120 Количество , РасходнаяНакладнаяСтроки.sp121 Цена , ( select top 1 cast(c1281_vv.value as numeric(18, 4)) from _1sconst as c1281_vv (nolock) where c1281_vv.id = 1281 and c1281_vv.objid = МПЗ.ID and (c1281_vv.date <= '20171001') order by c1281_vv.date desc, c1281_vv.time desc, c1281_vv.docid desc, c1281_vv.row_id desc ) УправленческаяСебестоимость FROM dh130 AS РасходнаяНакладная With (NOLOCK) INNER JOIN dt130 AS РасходнаяНакладнаяСтроки With (NOLOCK) ON РасходнаяНакладная.IDDOC = РасходнаяНакладнаяСтроки.IDDOC INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РасходнаяНакладная.IDDOC = Журнал.IDDOC INNER JOIN sc155 AS МПЗ1 With (NOLOCK) ON РасходнаяНакладнаяСтроки.sp119 = МПЗ1.ID INNER JOIN GM_teach.dbo.sc72 as МПЗ ON ltrim(rtrim(МПЗ.sp66))=ltrim(rtrim(МПЗ1.sp178)) WHERE (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) >= '20171001') AND (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) <= '20171001') AND (РасходнаяНакладная.sp1062 = ' TD ') AND (Журнал.sp697 = ' 7 ') AND (РасходнаяНакладная.sp104 = ' EM7C ') AND (РасходнаяНакладнаяСтроки.sp488 = ' B ') |
|||
54
LisaAlisa
13.11.17
✎
12:15
|
Если вручную подшаманить sql запрос, то результат возвращается верный
Для этого в подзапросе ставим @ перед _1sconst ( select top 1 cast(c1281_vv.value as numeric(18, 4)) from @_1sconst as c1281_vv (nolock) where c1281_vv.id = 1281 and c1281_vv.objid = МПЗ.ID and (c1281_vv.date <= '20171001') order by c1281_vv.date desc, c1281_vv.time desc, c1281_vv.docid desc, c1281_vv.row_id desc ) УправленческаяСебестоимость вопрос в том, как указать эту манипуляцию в выражении @ПоследнееЗначение.МПЗ.УправленческаяСебестоимость(МПЗ.ID, '"+IDНачДата+"') УправленческаяСебестоимость |
|||
55
Ёпрст
13.11.17
✎
12:30
|
(54) элементарно.
| --УправленческаяСебестоимость и после первого ОбрМетаскуэль подменяй на @ПоследнееЗначение.МПЗ.УправленческаяСебестоимость(МПЗ.ID, '"+IDНачДата+"') |
|||
56
Ёпрст
13.11.17
✎
12:32
|
ну или, не используй последнееЗначение, а пиши запрос на периодику руками, пример у тебя есть в развёрнутом виде.
Там, заместо _1sconst пиши @_1sconst и всё. |
|||
57
Ёпрст
13.11.17
✎
12:32
|
в дбф, например, нет ПоследнееЗначение и ничего, всё пишется ручонками :)_
|
|||
58
LisaAlisa
13.11.17
✎
12:52
|
Ёпрст, Franchiser
спасибо вам!!! теперь всё работает и, что еще круче, я стала понимать, что происходит)) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |