Имя: Пароль:
1C
1C 7.7
v7: Бухгалтерия v 4.5 ODBC соединение с GESTORI
0 YurAnt
 
21.10.13
15:19
Доброго времени суток, господа-форумчане.
Вопрос такой: Имеется сервак с GESTORI, (сам я сколько себя помню работал только с файловой системой бд). Если запускать обработку с сервера, то

ТипБазы = "SQL";
База = СоздатьОбъект("ODBCDataBase");
База.ПрисоединенныеИБ(ПутьКБазе, "Админ", "ХитрыйПароль");

работает нормально, однако на локальном компе естественно соединение не подымается (да и откуда бы).

Откопал вот такую статейку, и прошу помощи в разборе...

DB = СоздатьОбъект("ODBCDatabase");
DB.Соединение("DRIVER={MySQL ODBC 5.1 Driver}; SERVER=IP_Супер_мега_сервера; DATABASE=Мега_база; USER=Супер_юзер; PASSWORD=пароль_супер_мега_юзера; OPTION=3;");
RS = СоздатьОбъект("ODBCRecordSet");
RS.SetDatabase(DB);
Если RS.Выполнить("set names cp1251") = 0 Тогда
Сообщить("Ошибка подключения к MySQL" + РазделительСтрок + RS.ПолучитьОписаниеОшибки());
СтатусВозврата(0);
Возврат;
КонецЕсли;

В моем случае драйвер если правильно понимаю вот так
http://savepic.su/3565362.png

да и вообще, господа подскажите кто как устанавливал соединение с БД от Gestori ?

и что за Option=3

в DB.Соединение("DRIVER={MySQL ODBC 5.1 Driver}; SERVER=IP_Супер_мега_сервера; DATABASE=Мега_база; USER=Супер_юзер; PASSWORD=пароль_супер_мега_юзера; OPTION=3;");
1 YurAnt
 
21.10.13
15:21
сумбурно...
Итак, имеется сервак с GESTORI. Имеется 1Ска. База в скуле.
обмен с Джестри всегда шел через XMl, сейчас есть необходимость прямого чтения из БД GESTORI в 1С.
2 YurAnt
 
21.10.13
15:23
пытаюсь поднять ODBC соединение из 1Ски напрямую считывать инфу из базы Джестори
3 trad
 
21.10.13
15:28
на всякий случай, ПрисоединенныеИБ имеет смысл только в отношение одинесной информационной базы
4 YurAnt
 
21.10.13
15:31
окей, а вот эту константу откуд брать ?
DRIVER={MySQL ODBC 5.1 Driver};

и что за опшн = 3 ?
5 YurAnt
 
22.10.13
09:28
вот такая шляпа не взлетает(( не может установитьсоединение
где я мог ошибиться?

Процедура ПодключитсяКБазе1С()
    Попытка
        ЗагрузитьВнешнююКомпоненту("1cpp.dll");
        Сообщить("Компонента 1С++ загружена!");
    Исключение
        Сообщить("Пытались, но не загрузили компоненту 1С++ :(");
    КонецПопытки;

    Если ФС.СуществуетФайл(ПутьКБазе + "1Cv7.DD") = 1 Тогда
          ТипБазы = "DBF";
          База = СоздатьОбъект("OLEDBData");
        База.ПрисоединитьИБ(ПутьКБазе);  
      Иначе
          ТипБазы = "SQL";
        База = СоздатьОбъект("ODBCDatabase");
        База.Соединение("DRIVER={OpenLink Lite for Progress 9.1b (Large Client)(32 Bit)}; SERVER=10.1.11.247; DATABASE=ges3; USER=admin; PASSWORD=nt[ybxtcrfz; OPTION=3;");
           Попытка
            Если База.Соединение.Открыта() Тогда
                Сообщить("база подключена!!!");
            КонецЕсли;
        Исключение
            Сообщить("Не могу подключиться к базе!!!");
        КонецПопытки;
      КонецЕсли;
КонецПроцедуры
6 Ёпрст
 
22.10.13
09:31
какая то каша..
7 Ёпрст
 
22.10.13
09:31
тут и мускул на кой то привёл и присоединить ИБ ?...
8 Ёпрст
 
22.10.13
09:31
Твоя гестори на чем хоть ?
9 trad
 
22.10.13
09:35
для начала нужно установить драйвер
http://dev.mysql.com/downloads/connector/odbc/
потом, хотя бы, бегло ознакомится с докой
http://dev.mysql.com/doc/refman/5.6/en/connector-odbc.html

тут можно подсмотреть, наверно, все возможные строки подключения практически к любым источникам данных
http://www.connectionstrings.com/
в частности к MySql http://www.connectionstrings.com/mysql/
b конкретно к ODBC 5.1 http://www.connectionstrings.com/mysql-connector-odbc-5-1/

"опшн = 3" вроде бы это призывает драйвер к "чистому" чтению
10 Ёпрст
 
22.10.13
09:46
(9) а есть уверенность, что база в мускуле ?...
11 Ёпрст
 
22.10.13
09:46
А не на прогрессе, каком нить ?
12 trad
 
22.10.13
09:54
(10) нет уверенности
13 YurAnt
 
22.10.13
10:05
порылся. и да. база на прогрессе
14 YurAnt
 
22.10.13
10:06
копаю дальше
15 Ёпрст
 
22.10.13
10:07
(13) круто, а нафига тогда ты строку от мускула приплетаешь ?

Создай пустой udl файлик - через него слепишь строку подключения, предварительно установив какой-нить драйвер для твоего прогресса (ежели его нема в системе).
Усё.
16 YurAnt
 
22.10.13
10:12
не... про мускул там просто из дефолтного примера кусок привел...
потому и спрашивал где брать константу драйвера
DRIVER={MySQL ODBC 5.1 Driver};

если в моем случае это не мускул, а прогресс
17 Ёпрст
 
22.10.13
10:15
см (15)  - это самое простое
или ходи на коннэкшионстрингс точка ком
18 Ёпрст
 
22.10.13
10:15
19 Ёпрст
 
22.10.13
10:15
хотя проще - udl
20 YurAnt
 
22.10.13
10:17
был. хороший сайт.
DSN = ?
21 Ёпрст
 
22.10.13
10:18
см (15)
22 YurAnt
 
22.10.13
10:46
почти взлетело
http://savepic.su/3593915.png
23 Ёпрст
 
22.10.13
12:11
у тебя через udl файлик проходит хоть тест подключения к базе ?
24 YurAnt
 
22.10.13
12:23
1) ситуация на картинке - это средствами 1Ски:
База = СоздатьОбъект("ODBCDatabase");
База.Соединение("DSN=ges3;HOST=10.1.11.247;DB=ges3;UID=******;PWD=***********;PORT=2517;");

2) вариант 1 пока забросил, и делаю через udl.
будет работать вариант 2, попробую поднять и вариант 1.

3) да, тест проходит.
25 YurAnt
 
22.10.13
12:27
далее полагаю через 1Ску формировать что-то наподобие

Connect = Новый COMОбъект("ADODB.Connection");
Connect.ConnectionString = "File Name="+Файл;
Connect.Open();

только как оно в 7ке делается пока разбираюсь
26 Ёпрст
 
22.10.13
12:30
(25) нафига тебе ado ?
:))
Хочешь выборку ручонками перебирать ?
:)
27 Ёпрст
 
22.10.13
12:31
(24) если тест проходит, открой udl файлик блокнотом и увидишь свою правильную строку подключения.. скармливай её 1с-ине и наслаждайся.
28 YurAnt
 
22.10.13
12:46
База.Соединение("строка_из_udl");

В отладчике пишет База.Соединение("строка_из_udl")=0
=(
29 Ёпрст
 
22.10.13
12:48
Код покажешь, или гадать будем ?
30 YurAnt
 
22.10.13
12:49
стоооп... меня вот что смущает
удл-файл:

[oledb]
; Everything after this line is an OLE DB initstring
Provider=MSDASQL.1;Password=12345;Persist Security Info=True;User ID=admin;Data Source=ges3

oledb ? втф
31 YurAnt
 
22.10.13
12:50
32 YurAnt
 
22.10.13
12:52
ODBС там только один... искать прогрессовский ?
33 YurAnt
 
22.10.13
12:53
а кода там...

Процедура ПодключитсяКБазе1С()
    Если ФС.СуществуетФайл(ПутьКБазе + "1Cv7.DD") = 1 Тогда
          ТипБазы = "DBF";
          База = СоздатьОбъект("OLEDBData");
        База.ПрисоединитьИБ(ПутьКБазе);  
    Иначе
          ТипБазы = "SQL";
        База = СоздатьОбъект("ODBCDatabase");
        База.Соединение("Provider=MSDASQL.1;Password=12345;Persist Security Info=True;User ID=admin;Data Source=ges3");
      КонецЕсли;
КонецПроцедуры
34 Ёпрст
 
22.10.13
13:06
...п..ц
35 YurAnt
 
22.10.13
13:07
(
36 YurAnt
 
22.10.13
13:17
Итак, по шагам.
1) при открытии обработки

Попытка
        ЗагрузитьВнешнююКомпоненту("1cpp.dll");
        Сообщить("Компонента 1С++ загружена!");
    Исключение
        Сообщить("Пытались, но не загрузили компоненту 1С++ :(");
    КонецПопытки;


2)Далее подключается

Процедура ПодключитсяКБазе1С()
    Если ФС.СуществуетФайл(ПутьКБазе + "1Cv7.DD") = 1 Тогда
          ТипБазы = "DBF";
          База = СоздатьОбъект("OLEDBData");
        База.ПрисоединитьИБ(ПутьКБазе);  
    Иначе
          ТипБазы = "SQL";
        База = СоздатьОбъект("ODBCDatabase");
        База.Соединение("Provider=MSDASQL.1;Password=nt[ybxtcrfz;Persist Security Info=True;User ID=admin;Data Source=ges3");
        
    КонецЕсли;
КонецПроцедуры

3) И по клику на баттон

Процедура ИмпортироватьДокумент(ДатаДок)
    //Если БазаОткрыта = 1 Тогда
        RS = СоздатьОбъект("ODBCRecordSet");
        RS.SetDatabase(База);
        RS.УстБД1С();
        ТекстЗапроса = "
            |SELECT
            |    T1.num_nakl,
            |    T1.dt_nakl,
            |    T1.cod_shop,
            |    T1.cod_firm,
            |    T3.address[1],
            |    T1.num_doc,
            |    T1.dt_doc,
            |    T2.Size
            |FROM pr1 T1, pr3 T2, firms T3  
            |WHERE
            |     T1.dt_nakl = &ДатаВходНакл
            |AND    T1.num_nakl = T2.num_nakl
            |AND    T2.cod_nalog = 6
            |AND    T2.Size > 0
            |AND    T1.cod_firm = T3.cod_firm
                |";    
        RS.УстановитьТекстовыйПараметр("ДатаВходНакл", ДатаДок);    
        ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
        ТЗ.ВыбратьСтроки();
37 YurAnt
 
22.10.13
13:19
whatamdoingwrong?
38 Ёпрст
 
22.10.13
13:29
http://www.datadirect.com/support/product-documentation/downloads

отседыва скачай нужного провайдера
39 YurAnt
 
22.10.13
13:30
Ёпрст, я не исключаю наитупейших ошибок в коде((
7ку вижу в глаза только 2й день...(
40 Ёпрст
 
22.10.13
13:34
(36)
не устбд1с, а УстБД
41 Ёпрст
 
22.10.13
13:35
RS = СоздатьОбъект("ODBCRecordSet");
        RS.SetDatabase(База);
//        RS.УстБД1С();

вот так, для начала
42 YurAnt
 
22.10.13
14:30
поставил... и понял что драйвер действительно уже стоит.
Через "Администратор источников ODBC" видно что он есть
http://savepic.su/3604166.png
однако Среди поставщиков ничего не изменилось...
http://savepic.su/3604170.png
43 YurAnt
 
22.10.13
14:35
мозг уже закипает, однако я заставлю её полететь.
44 YurAnt
 
22.10.13
14:39
причем вот с этим удл-ом

[oledb]
; Everything after this line is an OLE DB initstring
Provider=MSDASQL.1;Password=nt[ybxtcrfz;Persist Security Info=True;User ID=admin;Data Source=ges3

проверка проходит успешно.

однако шифт+ф9 возвращает, что соединение = 0

База.Соединение("Provider=MSDASQL.1;Password=nt[ybxtcrfz;Persist Security Info=True;User ID=admin;Data Source=ges3")= 0
45 YurAnt
 
22.10.13
14:40
соответственно последующий запрос уходит в пустоту.
46 Ёпрст
 
22.10.13
15:01
А так ?

ОлеДБ = СоздатьОбъект("OLEDBData");
Соединение = "Provider=MSDASQL.1;Password=nt[ybxtcrfz;Persist Security Info=True;User ID=admin;Data Source=ges3";
Рез = ОлеДБ.Соединение(Соединение);
Сообщить(рез);
47 YurAnt
 
22.10.13
15:15
DBInitialize::Initialize(): [OpenLink][ODBC]Unable to allocate server handle
48 YurAnt
 
22.10.13
15:17
49 YurAnt
 
22.10.13
15:21
Progress with Single-Tier "Lite" Edition Drivers
Первый же пункт кажется уже идет лесом, ибо (по словам админа) не в сокет режиме((

1) Ensure that your Progress database is running in sockets mode.
50 YurAnt
 
22.10.13
20:18
и все таки, господа...
обходил ли кто "DBInitialize::Initialize(): [OpenLink][ODBC]Unable to allocate server handle"

или же это упирается в перенастройку сервера?
Ошибка? Это не ошибка, это системная функция.