Имя: Пароль:
1C
1C 7.7
v7: Чем удобнее напрямую работать с базой MSSQL
,
0 mishaPH
 
модератор
12.04.18
08:08
Коллеги.
Чем во вашему удобней залезть в базу MSSQL не 1с для чтения данных из табличек и записи туда же.

для постгри использую какой-то драйвер plsql
который в 1с создает
Conn = СоздатьОбъект("ADODB.Connection");
ААА = Conn.Open(ConnectionString);
Cmd = СоздатьОбъект("ADODB.Command");

ну и работаем с базой посредством уже постгри запросов.

в MSSQL  напрямую не лазил. 1с++, есть toysql.
1 shuhard
 
12.04.18
08:13
(0)[не 1с для чтения данных из табличек и записи туда же.]
под виндой adodb доступно из скриптовых языков, например php,
проще некуда и компиляция не нужна
2 План счетов
 
12.04.18
08:15
v7mysql.dll - нормально работает
база mуsql в локальной сети
3 mishaPH
 
модератор
12.04.18
08:16
(1) в (0) не к нему ли обращение?
только коннект к постгри идет.
4 План счетов
 
12.04.18
08:16
)) Глаза еще не открыл, прочитал mysql вместо mssql
5 mishaPH
 
модератор
12.04.18
08:16
(2) майкрософт у меня. Комп в принципе в домене
6 shuhard
 
12.04.18
08:17
(3) сформулируй ещё раз проблему, ибо я понял, что тебе нужна вызывался ADODB не из среды 1С
7 shuhard
 
12.04.18
08:18
(6) +1
или речь о строке подключения к mssql &
8 mishaPH
 
модератор
12.04.18
08:19
(6) (7) надо из 1с 7.7 законнектиться к базе MS SQL и получить из нужных табличек данные. также в нужные записать
9 mishaPH
 
модератор
12.04.18
08:20
я написать что подключится надо НЕ К 1совской базе скуля
10 shuhard
 
12.04.18
08:29
(9) создаёшь файлик с расширением udl, выбираешь провайдера, тестируешь соединение, копируешь в код строку соединения
11 План счетов
 
12.04.18
08:30
(9) Тоже делал, все работало на ура, все запросы select, insert

Делал так:
Соединение = СоздатьОбъект("ADODB.Connection");        
ConnectionString = "Provider=SQLOLEDB.1;Password=******;Persist Security Info=True;User ID=SA;Initial Catalog=***;Data Source=SRV;";
12 mishaPH
 
модератор
12.04.18
08:31
(10) в запуске внешних шняг есть одно неудобство - мельтешащие черные окна сбивающие позиционирование на текущем окне 1с.  самое удобное какой-то компонентой из 1с напрямую.
13 shuhard
 
12.04.18
08:33
(12) мы тебя не понимаем, в (10) утилита для построения строки соединения для использования в 1С
14 mishaPH
 
модератор
12.04.18
08:34
(11) а т.е. как я к постгри подключаюсь указывая
DRIVER={PostgreSQL Unicode};DATABASE= *****

указать только данные к мс скл.. вся остальная работа по сути тажже. запрос - обработка ответа
15 mishaPH
 
модератор
12.04.18
08:34
(13) я понял кажется
16 toypaul
 
гуру
12.04.18
08:35
чем привычнее тем и делай. можно АДО, можно ТойСКЛ, можно 1С++ (наверное)
17 shuhard
 
12.04.18
08:37
(14) всё верно
Provider=SQLOLEDB
протестировать можно через файлик udl
18 Dotoshin
 
12.04.18
09:11
(0) На VBA можно запрос написать и выполнить.
Вот тут посмотри как сделать http://info-comp.ru/obucheniest/380-vba-access-query.html

Там пример для access, но никто не мешает сделать то же самое в экселе, если access-а под рукой нет.
19 mishaPH
 
модератор
12.04.18
09:13
(18) а зачем мне из екселя лезть когда надо данные в 1с
20 Dotoshin
 
12.04.18
09:24
(19) Ты же в в (0) сказал, что над не в 1с.
Если все же надо из 1с, но читать/писать в другую базу, то ответ в (10) и (11).
Если проблема с написанием строки подключения, создай пустой файл с расширением udl, как советует shuhard, сохрани его и кликни мышкой, должен открыться мастер настройки подключения. Далее заполняешь параметры и с последней вкладки копируешь строку подключения.
21 ADirks
 
12.04.18
09:24
Если из 1С, то через 1С++::ODBCRecordSet телодвижений меньше, чем с ADO.

И не вижу принципиальной разницы, 1С это база, или какая-то другая.
23 Z1
 
15.04.18
19:05
+ к 21  и типизацию можно получить (если в той базе есть типизированые id).
(0) так что используй 1с++
24 trdm
 
15.04.18
19:19
(12) > самое удобное какой-то компонентой из 1с напрямую.

1c++ конечно же. + QA.ert.
Только запросы удобнее писать в конфигураторе с опенконфом + SQLIntellisence.vbs
25 trdm
 
15.04.18
19:21
+(24) Хотя если БД не 1С-ная, то прийдется поизвращаться.
26 mishaPH
 
модератор
15.04.18
20:07
(24) (25) все перечисленное тобой есть. но база не 1с ная внешняя
27 trdm
 
15.04.18
20:37
(26) Ваще не проблема.
1С++ может подсоединяться и к другим БД, не 1С-ным.
28 trdm
 
15.04.18
20:39
//***************************************************************
Процедура Выполнить(Режим = 0)
    Перем Тип,Длина,Точность;
    Если Режим = 2 Тогда
        вВопрос = "Обычно 1С вылетает на этой опции!
        |Отменить операцию?";
        Если Вопрос(вВопрос,"Да+Нет") = "Да" Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    Запрос   = СоздатьОбъект("ODBCRecordset");
    Если MetaInfoClasses.ЭтоSQL_Версия() = 0 Тогда
        Если Режим <> 0 Тогда
            Возврат;
        КонецЕсли;
        DB=СоздатьОбъект("ODBCDatabase");
        Если DB.Соединение("DRIVER={Microsoft Visual FoxPro Driver};Deleted=Yes;Null=Yes;Collate=RUSSIAN;Exclusive=No;SourceType=DBF;SourceDB="+КаталогИБ())=0 Тогда
            глСообщитьОбОшибке(DB.ПолучитьОписаниеОшибки()+" [20150113-1518]");
            Возврат;
        КонецЕсли;
        Запрос.УстБД(DB);
    КонецЕсли;
29 Z1
 
16.04.18
10:28
(26)и что что внешняя.
sql сервер вообще не знает ничего об 1с

Есть таблица есть запрос - все
select * from NameTabl
30 mishaPH
 
модератор
16.04.18
10:29
(29) да это понятно. я пояснил к вопросу
31 trdm
 
16.04.18
11:06
Ну дык в чем проблема-то?
Модифицируешь 1CQA.ert в плане подключения к другой БД
Процедура Выполнить(Режим = 0)
код где пропатчить я в (28) написал и фигачишь себе запросы.
32 mishaPH
 
модератор
16.04.18
11:07
(31) да мерси. все сделаем.
33 trdm
 
16.04.18
11:18
Вот и не вижу проблем. Единственно стремно писать запросы без подсказки по полям, но и тут можно придумать ченить.
Методы разные есть.
34 mishaPH
 
модератор
16.04.18
11:34
(33) что подразумевается под подсказкой?
известна структура таблиц и читать / писать туда надо не в слепую.

все делаю в посгри таблички. в МС скл просто не делал
35 trdm
 
16.04.18
11:45
(34) > что подразумевается под подсказкой?
Вот это: https://github.com/trdm/hlam/blob/master/img/1Сsqlhelp.gif
36 Mihenius
 
16.04.18
11:51
Через 1с++

БазаДанных = СоздатьОбъект("ODBCDataBase");
СтрокаСоединения = "Driver={SQL Server};Server=srv;Database=" + "name" + ";Uid=" + Логин + ";Pwd=" + Пароль + ";";
БазаДанных.Соединение(СтрокаСоединения);
Обработчик = СоздатьОбъект("ODBCRecordset");
Обработчик.УстБД(БазаДанных);

ТекстЗапроса = "
|SELECT  *
|FROM [table1]
|where     field1_id = :field1_id
|";
Обработчик.УстановитьТекстовыйПараметр("field1_id ", field1_id );
Обработчик.Отладка(1);
Результат = Обработчик.ВыполнитьИнструкцию(ТекстЗапроса);
            
ТекстЗапроса = "        
|INSERT INTO [table1]
|      
| VALUES            
|
|(0,NULL,1,:ИдПоля1)
|";
Обработчик.УстановитьТекстовыйПараметр("ИдПоля1", ИдПоля1);
Обработчик.Отладка(1);
Результат = Обработчик.ВыполнитьИнструкцию(ТекстЗапроса);
37 Mihenius
 
16.04.18
11:52
Сами запросы хоть в репортинге рисовать можно...
38 Mihenius
 
16.04.18
11:57
только проблема будет с блокировками и грязным чтением.

т.к. другая твоя программа ничего не знает про твои чтение/запись из 1с

и это нужно как то продумать и согласовать, хоть nolock для начала поставить.
39 mishaPH
 
модератор
16.04.18
12:00
(35) аа. ну да это не обязательно. помошники и конструктор
40 mishaPH
 
модератор
16.04.18
12:01
(38) тут решаемо.
41 Mihenius
 
16.04.18
12:03
Единственное вроде прописать базу нужно в odbcad32

На 64 битных системах она хранится в
C:\Windows\SysWOW64\odbcad32.exe
42 mishaPH
 
модератор
04.05.18
14:42
Продолжаем
законнектился через.
    CmdА = СоздатьОбъект("ADODB.Command");

выборка селект идет нормально.


в общем все также и тот же код как будто подключился к постгри, только коннект строка взял из (36)

мерси всем
43 Ёпрст
 
04.05.18
14:46
(42) нафик адо ?
писать проще через ODBCRecordset
44 Ёпрст
 
04.05.18
14:46
раз у тебя есть 1cpp
45 mishaPH
 
модератор
04.05.18
14:46
(43) а чем? чего проще через то что я делаю
46 mishaPH
 
модератор
04.05.18
14:47
(44) да она есть конечно.. но чесно говоря не использую. да и чего там писать. селекты да инсерты в трансферные базы
47 mishaPH
 
модератор
04.05.18
14:48
тем более запросы всё равно руками делаю. там же нет сложного чего то с соединениями и вложенными запросами. почти.
48 Вафель
 
04.05.18
14:49
(45) в ТЗ можно выгружать одной строчкой
49 mishaPH
 
модератор
04.05.18
14:56
(48) гм. ну да. ест + не надо перебирать все.
50 Вафель
 
04.05.18
14:57
установка параметров а ля список значений
51 Ёпрст
 
04.05.18
15:03
(45) делать подготовленные запросы с изменяемыми параметрами, устанавливать значения параметров ну и т.д.
52 trad
 
04.05.18
15:18
(49) попробуй получи значение типа numeric или decimal или int через ado в семерку
53 mishaPH
 
модератор
04.05.18
15:24
(52) будет ругаться плохой тип? в постгри к переменной ставлю ::text и все.
Кстати а как в мс скл сразу чтобы переменная была типа текст
54 trad
 
04.05.18
15:36
(53) на стороне сервера конвертируешь число в строку, на стороне семерки получаешь вместо числа получаешь строку.
оно тебе надо?
а 1С++::ODBCRecordSet передает число как надо
55 trad
 
04.05.18
15:38
>Кстати а как в мс скл сразу чтобы переменная была типа текст

не совсем понял вопрос, но
cast(Поле as varchar)
56 mishaPH
 
модератор
04.05.18
15:39
(54) а что такого в конвертации. по сути оно что строка что число

дело в том, что 1с++ ну нет времени сейчас осваивать. попробую 1 день посвятить. если взлетит сразу - то перейду. если нет - то придется по уже наработанной технологии
57 trad
 
04.05.18
15:40
кроме всего, ado - это com-обертка всех данных
ODBCRecordSet - передача "прямее"
на больших объемах это может быть важно
58 mishaPH
 
модератор
04.05.18
15:42
(57) ну ты почти уговорил ;) попробую.

но честно говоря нет времени.
59 Ёпрст
 
04.05.18
15:42
(56) там всего-то пару методов
60 trad
 
04.05.18
15:42
(56) затраты на конвертацию
61 trad
 
04.05.18
15:43
(59) я бы даже сказал - один
62 trad
 
04.05.18
15:46
(61) а да, УстБД еще ))
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс