| 
    
        
     
     | 
    
    
  | 
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) а да, УстБД еще ))     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |