Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Запрос к другой базе ДБФ возвращает элемент текущей базы. (число прочтений - 6448 )
SinChao
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Июня 2010
Запрос к другой базе ДБФ возвращает элемент текущей базы.
18. Июня 2010 :: 08:35
Печать  
Доброго времени суток колеги.

Краткое описание задачи:
    Есть списое к материалами. Нужно получить остатки по данным материалам из другой ДБФ.  Справочники материалы синхронизированы по коду и по наименованию. Для теста - наименование ведущего элемента заканчивается на "**" а элемента второй БД \*/. От простого к сложному:


 Получаем элементы справочника второй БД с условием по коду

    Текст кода:

     //**** Формируем строку с кодами для условия в запросе

     УсловияМат = "(";
     УсловияНом = "(";
     
     ПервоеЗначениеМат = 0;
     ПервоеЗначениеНом = 0;

     Для х = 1 По СписМПЗ.РазмерСписка() Цикл
           
           ЗначениеСписка = СписМПЗ.ПолучитьЗначение(х);
           
           Если ЗначениеСписка.Вид() = "Материалы" Тогда
                 Если ПервоеЗначениеМат > 0 Тогда
                       УсловияМат = УсловияМат + ","      
                 КонецЕсли;
                 УсловияМат = УсловияМат + "'" + ЗначениеСписка.Код + "'";
                 ПервоеЗначениеМат = 1;
           Иначе    
                 Если ПервоеЗначениеНом > 0 Тогда
                       УсловияМат = УсловияМат + ","      
                 КонецЕсли;
                 УсловияНом = УсловияНом + "'" + ЗначениеСписка.Код + "'";
                 ПервоеЗначениеНом = 1;
           КонецЕсли;
           Если х = СписМПЗ.РазмерСписка() Тогда
                 УсловияМат = УсловияМат + ")";
                 УсловияНом = УсловияНом + ")";
           КонецЕсли;      
     КонецЦикла;


     
     
     
     База = СоздатьОбъект("OLEDBData");
     Соединение = "Provider=VFPOLEDB.1;Data Source=D:\Базы_1С8\Копия ПОДК для теста запросов;Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""";
     База.ПрисоединитьИБ("D:\Базы_1С8\Копия ПОДК для теста запросов\", Соединение);
     Запрос = База.СоздатьКоманду();
     
     
     //***** Получим элементы материалов ПОДК
     ТЗМат = СоздатьОбъект("ТаблицаЗначений");
     
     Если УсловияМат <> "()" Тогда
           
           
           ТекстЗапроса = "
           |SELECT
           |      Спр.ID as [Элемент $Справочник.Материалы]
           |FROM
           |      $Справочник.Материалы as Спр
           |WHERE
           |      Спр.Code IN " + УсловияМат;
           
     
     
           ТЗМат = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
           ТЗМат.ВыбратьСтроку();
     КонецЕсли;


В результате я получаю ТЗ с элементами из первой ДБФ, об это свидетельствует наименование элемента с окончанием "**" и о получении остатков из второй можно не мечтать.

В чем облом?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #1 - 18. Июня 2010 :: 08:43
Печать  
зачет типизировать элементы Другой базы в текущей.

ЗЫ: ознакомься
http://www.1cpp.ru/forum/YaBB.pl?num=1182497837/19#19
  
Наверх
 
IP записан
 
SinChao
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Июня 2010
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #2 - 18. Июня 2010 :: 08:56
Печать  
Я это уже читал. Причем здесь типизация. Есть вторая база данных, МД-шники одинаковые, есть условие. Условие ТЕКСТОВОЕ. Синхронизация не нужна, она и так есть, поетому использовать левое соединение нет смысла.

Вопрос простой - почему в выборке данные из базы где я выполняю запрос, а не из той к которой я подключился?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #3 - 18. Июня 2010 :: 09:06
Печать  
Потому, что ты типизируешь к текущей базе..

ЗЫ: получай строку - Наименование, а не пытайся привести элементы чужой базы к типу Справочник текущей базы..

  
Наверх
 
IP записан
 
SinChao
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Июня 2010
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #4 - 18. Июня 2010 :: 09:19
Печать  
Понятно. Уже все увидел.
Дописал

           |   Спр.Descr as Наименование

И получилось:

           |   Спр.Descr as Наименование

DC#Знак_тенис**  |  DC#Знак_тенис\*/

Однако смогу-ли я оперировать данной выборкой для получения отбора в регистре?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #5 - 18. Июня 2010 :: 09:22
Печать  
Конечно!
Оперируй id элемента и всё..
А потом можешь привести к типу справочник, найдя по коду элемент текущей базы (прям в запросе приджойнишь справочник с условием на code) и всё.
  
Наверх
 
IP записан
 
SinChao
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Июня 2010
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #6 - 18. Июня 2010 :: 09:27
Печать  
Спасибо. Пробую...
Результат напишу, может кому-то будет интересно...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #7 - 18. Июня 2010 :: 09:30
Печать  
результат напиши.
И еще  - строка подключения у тебя старая, нужно другую      Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
чтоб в тексте запроса писать конструкции для попадания в индекс.
  
Наверх
 
IP записан
 
SinChao
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Июня 2010
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #8 - 18. Июня 2010 :: 10:52
Печать  
Друзья мои, ничего не понимаю(((

Вот запрос:

           ТекстЗапроса = "
           |SELECT
           |      $Р.МПЗ AS РегМПЗ,         
           |      $Р.МестоХранения AS Склад,         
           |      $Р.Количество AS КолвоОст
           |FROM
           |      $РегистрИтоги.МестаХранения as Р
           |
           |LEFT JOIN
         |            (SELECT            
           |                  Спр.ID AS Мат,
           |               Спр.Descr as Наим
           |             FROM
           |                  $Справочник.Материалы as Спр
           |             WHERE
           |                  Спр.Code IN " + УсловияМат + ") AS СписМПЗ
           |        ON СписМПЗ.Мат = Р.РегМПЗ
           |WHERE
           |      (period = :ДатаПериодаОстатков~~)";


И вот что пишет:

FAILED! ICommandText::Execute(): SQL: Column 'РЕГМПЗ' is not found.

Нифига не въеду(((
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #9 - 18. Июня 2010 :: 10:55
Печать  
Код
Выбрать все
	  |	  ON СписМПЗ.Мат = $Р.РегМПЗ 

  
Наверх
IP записан
 
SinChao
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Июня 2010
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #10 - 18. Июня 2010 :: 11:17
Печать  
Я так уже делал.

В ответ:

Meta name parser error: ПолеТаблицы не найдено "$P.РегМПЗ"
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #11 - 18. Июня 2010 :: 11:20
Печать  
У тебя поле называется МПЗ, а не РегМПЗ
  
Наверх
 
IP записан
 
SinChao
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Июня 2010
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #12 - 18. Июня 2010 :: 11:31
Печать  
Спасибо огромное)))!!!

Но разве в условии сравнении таблиц мы не можем использовать объявленные псевдонимы?
В 8-ке по моему так можно.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #13 - 18. Июня 2010 :: 11:32
Печать  
весьма забавный текст запроса, функции то где ? + условие на период + присоедиение таблички движений (ежели остатки не на ТА нужны)

ЗЫ: возьми готовый пример по ссылке - его и переделай, там и метапарсер работает и в 1 запросе можно к разным ИБ подключаться.
  
Наверх
 
IP записан
 
SinChao
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Июня 2010
Re: Запрос к другой базе ДБФ возвращает элемент текущей базы.
Ответ #14 - 18. Июня 2010 :: 11:36
Печать  
JohnyDeath писал(а) 18. Июня 2010 :: 11:20:
У тебя поле называется МПЗ, а не РегМПЗ


Кстати запрос срабатывает, но отбора нет. т.е. выводить все остатки.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать