Имя: Пароль:
1C
1C 7.7
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

спасибо вам!!! теперь всё работает и, что еще круче, я стала понимать, что происходит))