v7: УложитьСписокОбъектов() к сторонней базе #808082


#0 by LisaAlisa
В базе формирую список значений, состоящий из артикулов, СписокМПЗ. Подключаюсь к другой базе и создаю таблицу рс.УложитьСписокОбъектов(СписокМПЗ, "СписокМПЗ"); (решетки пока не указываю). Далее проверяю значения созданной таблицы select * from списокМПЗ но в результате всего одна строка с пуcтым значением val и isfolder=2. Как правильно передать список артикулов во временную таблицу? В дальнейшем надо получить значение себестоимости по указанному списку
#1 by Ёпрст
ну как тебе сказать помягче то ?
#2 by Ёпрст
УложитьСписокОбъектов приводит всё к id9
#3 by LisaAlisa
и что делать?)
#4 by Ёпрст
изначально, список своих артикулов как получаешь ?
#5 by Ёпрст
на форме выбираешь, или что ? Делай в одном запросе, обращение к этой базе и к сторонней + синхронизация по твоему артикулу
#6 by LisaAlisa
из текущей базы запросом получаю список нужных артикулов, вторым запросом планировалось из второй базы получить сведения по ним, базы разные. Попробую сделать в одном запросе обращение к разным базам
#7 by LisaAlisa
а можно набросать простой приер, как присоеинять вторую базу sql и писать единый запрос. Например, вывести наименования МПЗ из обеих баз, соединив таблицы по артикулу
#8 by Ёпрст
ща
#9 by Ёпрст
#10 by Ёпрст
+9 это, ежели вторая база на этом же серваке, либо сервер прилинкован
#11 by LisaAlisa
базы на разных. что значит "сервер прилинкован"?
#12 by Ёпрст
#13 by LisaAlisa
Выполняю Запрос в базах, расположенных на одном сервере     |SELECT     |    СпрНаш.DESCR as КлиентосВЭтойбазе  -- наименование клиентоса в  этой базе, можно и не присоединять справочник, а просто типизировать     |"; выдает ошибку : State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'dataBase2.dbo.sc46'.
#14 by Ёпрст
:) подставь имя своей базы данных, заместо dataBase2 ЗЫ: если сервер прилинкован, то указывается сначала имя сервера точка имя схемы точка имя базы точка имя таблицы ..
#15 by LisaAlisa
Почему запрос работает в виде |SELECT     |    Спр.Descr as Наименование, Но если хочу еще получить поля Спр.КодСистемы и Спр2.КодСистемы, то выдает ошибку Invalid column name "КодСистемы".
#16 by LisaAlisa
с последним разобралась
#17 by LisaAlisa
теперь проблема с параметрами. В запросе, выполняемом в текущей базе, МПЗ фильтруются, параметры указываются на форме. При присоединении второй базы выдает ошибку Meta name parser error: не указан параметр ":ВыбТипНакладной" Ошибка пропадает, если передать конкретное значение, а не параметр
#18 by Ёпрст
больше текста, отсюда не видно, че ты там передаешь и чего лепишь
#19 by LisaAlisa
#20 by LisaAlisa
Если запрос выполнить без присоединения запроса из второй базы, то на параметры ругани нет
#21 by Ёпрст
ааа.. еще раз устанавливай параметры :)
#22 by Ёпрст
или делай составной текст запроса, в котором параметры потом установишь
#23 by Ёпрст
#24 by Ёпрст
ну и установить текстовый параметр в конце.
#25 by Franchiser
УложитьСписокОбъектов  работает только со ссылками. Можно было попробовать сделать ВыполнитьSQLИзТЗ.
#26 by Franchiser
+ что значит в запросе "@Справочник", и почему "@" затем подменяется?
#27 by Franchiser
все понял, хитро)
#28 by Franchiser
ВыбТипНакладной, ВыбЮЛ, ВыбКонтрагент, ВыбКомитент - это ссылки из текущей базы, нет смысла фильтровать в удаленной базы по ним, т.к. тебе не известно как там выглядят эти ссылки. Можно фильтровать только по примитивным типам или же сначала найти ссылки по примитивными типам, затем установить фильтр на ссылки.
#29 by Ёпрст
смотри внимательнее, фильтруются объекты родной базы.
#30 by Eiffil123
я вообще ничего не понял
#31 by Ёпрст
Хотя не, как в уже не покатит. лень смотреть, что там возвращается после обрметаsql, подсовывает ли он сразу ссылку на справочник, али нет
#32 by Ёпрст
короче. посмотри, какой запрос идёт опосля обрметаскл, и если там твои условия не "превращаются" в ид, то тупо получи ид элементов через метадатаворк и подставь ручонками в текст запроса.
#33 by LisaAlisa
ошибка выводится как раз на строке ТекстЗапроса=глМД.ОбрМетаСКЛ(ТекстЗапроса);
#34 by Ёпрст
Получай ид объектов через метадатаворк и подставляй в текст запроса в свои условия.
#35 by LisaAlisa
IDВыбТипНакладной = "E1  TC    TD           " ошибка та же Meta name parser error: не указан параметр ":НачДата"
#36 by LisaAlisa
теперь поняла, что без параметров надо сделать.
#37 by LisaAlisa
Ёпрст, Спасибо огромное!!!
#38 by LisaAlisa
Еще вопрос остался, надеюсь, последний) из сторонней базы мне нужно получить периодический реквизит. Запрос выглядит так     ТекстЗапроса = "-- qryMaker:Отчет1.2017.11.08.14.44.30 как мне полученное поле "УправленческаяСебестоимость" указать в группировке? В текущем виде запрос не работает
#39 by Franchiser
Самый простой вариант: Оберни во вложенный запрос, или помести во временную таблицу через Into, потом выбери из нее данные с группировкой
#40 by Franchiser
idшники ты неправильно получаешь, запрос ничего не вернет
#41 by Franchiser
И к datetime преобразовывать в условие не надо
#42 by LisaAlisa
запрос работает.
#43 by LisaAlisa
Запрос возвращает корректно данные, полученные из текущей базы, а вот а вот из сторонней возвращает значение NULL Т.е. , @ПоследнееЗначение.МПЗ.УправленческаяСебестоимость(МПЗ.ID, '"+IDНачДата+"') УправленческаяСебестоимость в sql это выглядит так SELECT select top 1 cast(c1281_vv.value as numeric(18, 4)) from _1sconst as c1281_vv (nolock) where (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))
#44 by LisaAlisa
при этом если получать из сторонней базы не периодические реквизиты, они возвращаются. Проблема именно с периодическим
#45 by Franchiser
логично, не используй ПоследнееЗначение, он тебе выдаст неверный результат, т.к. парсер ничего не знает о том что нужно сгенерировать запрос к таблицам другой базы. Например _1sconst по твоему запросу будет взята из текущей базы. Нужно написать gm_teach.dbo._1sconst остальные поля пиши с @, чтобы указать парсеру, что они из другой базы
#46 by Franchiser
Кстати  я не уверен что в ПоследнееЗначение нужно передать идентификатор даты, там д.б. тип дата
#47 by LisaAlisa
с датой прокатывает. Проверяла подобный запрос, используя стороннюю базу как текущую для проверки
#48 by LisaAlisa
@ можно вставлять непосредственно в sql? такой вариант не прокатывает     , ( select top 1 cast(@c1281_vv.value as numeric(18, 4)) from gm_teach.dbo._1sconst as c1281_vv (nolock) where 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 by LisaAlisa
почти получилось. В sql пишу не _1sconst , а gm_teach.dbo._1sconst но ведь это уже отпарсенный запрос. Но как это описать в виде @ПоследнееЗначение.МПЗ.УправленческаяСебестоимость(МПЗ.ID, '"+IDНачДата+"') УправленческаяСебестоимость или вообще никак?
#50 by Ёпрст
Покажи текст запрса, который сейчас не работает. ЗЫ: используй не ЗначениеВСамуюДлиннуюСтрокуБД,а просто ЗначениеВСтрокуБД - не надо будет всякие сред делать.
#51 by Franchiser
@c1281_vv замени на c1281_vv
#52 by LisaAlisa
#53 by LisaAlisa
Запрос возвращает NULL в поле, получаемом из сторонней базы УправленческаяСебестоимость В sql он выглядит так: SELECT select top 1 cast(c1281_vv.value as numeric(18, 4)) from _1sconst as c1281_vv (nolock) where (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))
#54 by LisaAlisa
Если вручную подшаманить sql запрос, то результат возвращается верный Для этого в подзапросе ставим @ перед _1sconst ( select top 1 cast(c1281_vv.value as numeric(18, 4)) from @_1sconst as c1281_vv (nolock) where (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 by Ёпрст
элементарно. | --УправленческаяСебестоимость и после первого ОбрМетаскуэль подменяй на @ПоследнееЗначение.МПЗ.УправленческаяСебестоимость(МПЗ.ID, '"+IDНачДата+"')
#56 by Ёпрст
ну или, не используй последнееЗначение, а пиши запрос на периодику руками, пример у тебя есть в развёрнутом виде. Там, заместо _1sconst пиши @_1sconst и всё.
#57 by Ёпрст
в дбф, например, нет ПоследнееЗначение и ничего, всё пишется ручонками :)_
#58 by LisaAlisa
спасибо вам!!! теперь всё работает и, что еще круче, я стала понимать, что происходит))
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С