Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: 1c++ подключение к другой базе 1с 77

v7: 1c++ подключение к другой базе 1с 77
Я
   dk
 
27.09.17 - 14:02
Вроде была возможность натравить 1с++ на другой мд и на другой скуль чтобы нормально запрос выполнялся вида "SELECT * FROM $Справочник.Товары"
как подключиться к другому нашел, а как указать чтобы брал другой MD?
 
 
   Дык ё
 
1 - 27.09.17 - 14:04
   dk
 
2 - 27.09.17 - 14:08
(1) спб, видимо хелп в моей 1с-ке старый нет там такого метода
   dk
 
3 - 27.09.17 - 14:15
что-то не выходит каменный цветок
   dk
 
4 - 27.09.17 - 14:33
Функция ПолучитьДанныеСклада()
    Перем Результат;
    
    Результат = СоздатьОбъект("ТаблицаЗначений");
    Результат.НоваяКолонка("УИД", "Строка", 9);
    Результат.НоваяКолонка("Документ_дата", "Дата");
    
    Каталог1С    = "\\****\base\sklad\";     
    СерверSQL    = "*****";
    БазаSQL        = "sklad2014";
    userSQL        = "*****";
    pwdSQL        = "******";    
    
    БазаПодкл = СоздатьОбъект("ODBCDatabase");
    БазаПодкл.ПрисоединитьИБ(Каталог1С);
    СтрокаСоединения = "DRIVER=SQL Server;SERVER="+СокрЛП(СерверSQL)+";UID="+СокрЛП(userSQL)+";PWD="+СокрЛП(pwdSQL)+";DATABASE="+СокрЛП(БазаSQL)+";";
    Если БазаПодкл.Соединение(СтрокаСоединения) = 0 Тогда         
        Сообщить("Не удалось подключится к базе " + БазаSQL + " - проверьте параметры подключения!");
        Возврат Результат;
    КонецЕсли;
    
    ЗапросСклад = СоздатьОбъект("ODBCRecordSet");
    ЗапросСклад.УстБД(БазаПодкл);
    
    ТекстЗапроса = "
    |SELECT $Поставка.УИД УИД
    |    , MAX(NullIf(Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime), '17530101')) Документ_дата
    |FROM $Документ.ВводОВХ AS ВводОВХ With (NOLOCK)
    |    INNER JOIN $Документ.Поставка AS Поставка With (NOLOCK) ON $ВводОВХ.Основание = $ВидДокумента36.Поставка + Поставка.IDDOC
    |    INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ВводОВХ.IDDOC = Журнал.IDDOC
    |WHERE (Журнал.DATE_TIME_IDDOC >= :д1) AND ((Журнал.CLOSED & 1)=1)
    |GROUP BY
    |    $Поставка.УИД
    |";
    
    ЗапросСклад.УстановитьТекстовыйПараметр("д1", ДобавитьМесяц(НачДата, -12));
    
    ЗапросСклад.ВыполнитьИнструкцию(ТекстЗапроса, Результат);
    
    Возврат Результат;
    
КонецФункции


Матерится на 
ЗапросСклад.ВыполнитьИнструкцию(ТекстЗапроса, Результат);
{C:\USERS\******\ОТЧЕТ ПО СБРОСУ.ERT(38)}: Meta name parser error: объект не найден "$Документ.ВводОВХ"
   dk
 
5 - 27.09.17 - 14:51
Функция ПолучитьДанныеСклада()
    Перем Результат;
    
    Результат = СоздатьОбъект("ТаблицаЗначений");
    Результат.НоваяКолонка("УИД", "Строка", 9);
    Результат.НоваяКолонка("Документ_дата", "Дата");
    
    Каталог1С    = "\\****\base\sklad\";     
    СерверSQL    = "*****";
    БазаSQL        = "sklad2014";
    userSQL        = "*****";
    pwdSQL        = "******";    
    
    БазаПодкл = СоздатьОбъект("ODBCDatabase");
    СтрокаСоединения = "DRIVER=SQL Server;SERVER="+СокрЛП(СерверSQL)+";UID="+СокрЛП(userSQL)+";PWD="+СокрЛП(pwdSQL)+";DATABASE="+СокрЛП(БазаSQL)+";";
    Если БазаПодкл.Соединение(СтрокаСоединения) = 0 Тогда         
        Сообщить("Не удалось подключится к базе " + БазаSQL + " - проверьте параметры подключения!");
        Возврат Результат;
    КонецЕсли;
    БазаПодкл.ПрисоединитьИБ(Каталог1С);
    
    ЗапросСклад = СоздатьОбъект("ODBCRecordSet");
    ЗапросСклад.УстБД(БазаПодкл);
    
    ТекстЗапроса = "
    |SELECT $Поставка.УИД УИД
    |    , MAX(NullIf(Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime), '17530101')) Документ_дата
    |FROM $Документ.ВводОВХ AS ВводОВХ With (NOLOCK)
    |    INNER JOIN $Документ.Поставка AS Поставка With (NOLOCK) ON $ВводОВХ.Основание = $ВидДокумента36.Поставка + Поставка.IDDOC
    |    INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ВводОВХ.IDDOC = Журнал.IDDOC
    |WHERE (Журнал.DATE_TIME_IDDOC >= :д1) AND ((Журнал.CLOSED & 1)=1)
    |GROUP BY
    |    $Поставка.УИД
    |";
    
    ЗапросСклад.УстановитьТекстовыйПараметр("д1", ДобавитьМесяц(НачДата, -12));
    
    ЗапросСклад.ВыполнитьИнструкцию(ТекстЗапроса, Результат);
    
    Возврат Результат;
    
КонецФункции


Вот так заработало
   Ёпрст
 
6 - 27.09.17 - 14:55
Можно пользовать ПрисоединитьМД.
Это, если нужно, чтоб метапарсер понимал id-ники второй базы.

ЗЫ: если че, можно писать с помощью метапарсера запрос к обоим базам одновременно.
   Ёпрст
 
7 - 27.09.17 - 14:57
Процедура Сформировать()
    
    
    рс=создатьОбъект("ODBCRecordSet");
    
     ТекстЗапроса = "
    |SELECT
    |    СпрНаш.DESCR as КлиентосВЭтойбазе  -- наименование клиентоса в  этой базе, можно и не присоединять справочник, а просто типизировать
    |    ,Спр.DESCR as КлиентосВУдаленнойБазе --наименование клиентоса в удаленной базе
    |FROM $Справочник.Контрагенты СпрНаш
    |left join dataBase2.dbo.@Справочник.Контрагенты Спр on СпрНаш.Code = Спр.Code
    |";    
    глМД = СоздатьОбъект("MetaDataWork");
    ТекстЗапроса=глМД.ОбрМетаСКЛ(ТекстЗапроса);
    глМД2 = СоздатьОбъект("MetaDataWork");
    ПутьКБазе2 = "D:\полный путьк базе данных\";
    глМД2.ПрисоединитьМД(ПутьКБазе2+"1Cv7.md");
    ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"@","$");
    ТекстЗапроса=глМД2.ОбрМетаСКЛ(ТекстЗапроса);
    
    Т = рс.ВыполнитьИнструкцию(ТекстЗапроса);
    Т.ВыбратьСтроку();

КонецПроцедуры
   Ёпрст
 
8 - 27.09.17 - 14:58
Это, для прилинкованного сервера, или для базы на одном скульсервере
   dk
 
9 - 27.09.17 - 15:04
Ёпрст спб, прикольно
----
можно попробовать прилинковаться прямо в запросе через opendatasource
   dk
 
10 - 27.09.17 - 15:58
еще нюансик выполз
БазаПодкл.ПрисоединитьИБ(Каталог1С);
{C:\USERS\****\ОТЧЕТ ПО СБРОСУ.ERT(51)}: Введенный пароль неверен.
----
в одну базу норм цепляется, а в 2 филиала по vpn матерится
сетевые каталоги филиалов открываются в проводнике нормально
Есть идеи?
 
 Рекламное место пустует
   dk
 
11 - 27.09.17 - 16:00
query analyzer норм с указанными логинами и паролями цепляется в филиалы
   dk
 
12 - 28.09.17 - 07:50
вверх
   FN
 
13 - 28.09.17 - 08:33
Укажи логин пароль пользователя 1с, а не скуля
   varelchik
 
14 - 28.09.17 - 09:15
Дарю.
Функция глСоединение(ТипСоединения="",ПутьИБ="",Пользователь="Admin",Пароль="111111",ИмяСервера="") Экспорт
    Каталог=КаталогИБ();
    Если Врег(ТипСоединения)="SQL" Тогда
        Попытка
            БД =СоздатьОбъект("ODBCDataBase");
            Запрос=СоздатьОбъект("ODBCRecordSet");
            Если ПустоеЗначение(ПутьИБ)=0 Тогда
                БД.ПрисоединитьИБ(ПутьИБ,Пользователь,Пароль);
                Запрос.УстБД(БД);
            КонецЕсли;
            Возврат Запрос;
        Исключение
            Возврат 0;
        КонецПопытки;
    ИначеЕсли Врег(ТипСоединения)="ОЛЕ" Тогда
        Попытка
            БД = СоздатьОбъект("OLEDBData");   
            Если ПустоеЗначение(ПутьИБ)=0 Тогда
                БД.ПрисоединитьИБ(ПутьИБ);
            Иначе 
                СтрокаСоединения = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + Каталог 
                + ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""";;
                БД.Соединение(СтрокаСоединения);
            КонецЕсли;
            Команда=БД.СоздатьКоманду();
            Команда.УстановитьКаталогВремТаблиц(КаталогВременныхФайлов());
            Возврат Команда;
        Исключение
            Возврат глСоединение("ДБФ",ПутьИБ);
        КонецПопытки;
    ИначеЕсли Врег(ТипСоединения)="ДБФ" Тогда
        Попытка
            
            БД =СоздатьОбъект("ODBCDataBase");
            Если ПустоеЗначение(ПутьИБ)=0 Тогда
                БД.ПрисоединитьИБ(ПутьИБ);
            Иначе
                БД.Соединение("DRIVER={Microsoft Visual FoxPro Driver};Deleted=Yes;
                |Null=Yes;Collate=RUSSIAN;Exclusive=No;SourceType=DBF;SourceDB="+Каталог);
            КонецЕсли;
            Запрос=СоздатьОбъект("ODBCRecordSet");
            Запрос.УстБД(БД);
            Возврат Запрос;
        Исключение
            Возврат 0;
        КонецПопытки;
    ИначеЕсли Врег(ТипСоединения)="SQLITE" Тогда
        база = СоздатьОбъект("SQLiteBase");
        база.Открыть(":memory:");
        Запрос = база.НовыйЗапрос();
        Запрос.ВыполнитьЗапрос("PRAGMA journal_mode=WAL");
        Возврат Запрос;
    ИначеЕсли Врег(ТипСоединения)="SQL_NEW" Тогда
        Попытка
            БД =СоздатьОбъект("ODBCDataBase");
            Запрос=СоздатьОбъект("ODBCRecordSet");
            СтрокаСоединения="Driver={SQL Server};Server="+ИмяСервера+";Database="+ПутьИБ+";Uid="+Пользователь+";Pwd="+Пароль+";";
            
            Бд.Соединение(СтрокаСоединения);
            Запрос.УстБД(БД);
            Возврат Запрос;
        Исключение
            Возврат 0;
        КонецПопытки;
    Иначе
        МФ=СоздатьОбъект("MetaInfoClasses");
        Если МФ.ЭтоSQL_Версия()=1 Тогда
            Возврат глСоединение("SQL");
        Иначе
            Возврат глСоединение("SQLite");
        КонецЕсли;
    КонецЕсли;
КонецФункции    // глСоединение
   varelchik
 
15 - 28.09.17 - 09:16
Пользователь именно 1С.
   dk
 
16 - 28.09.17 - 11:51
спасибо
подключение через логин пароль каталог 1с заработало
   dk
 
17 - 03.10.17 - 11:33
щас проверил - подключение по OLE решает еще 1 старую проблему получения остатков на ТА (когда ТА в базах в разных месяцах)
1c++  и точка актуальности

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует