| 
    
        
     
     | 
    
    
  | 
Передача данных из MSSQL в 1С | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        sx55    
     03.08.21 
            ✎
    15:17 
 | 
         
        Здравствуйте гуру, у меня вопрос следующего характера...
 
        Есть сторонняя база MSSQL, в которой имеется куча таблиц из которых нужно получить данные и передать в 1С. Сам я давно не занимался MSSQL (более пятнадцати лет) и уже ничего не помню, а времени тратить на воспоминания нет. Если кто сможет предоставить работающий пример передачи данных из определённой таблицы, в определённой базе MSSQL, то буду очень благодарен. Вот мой набросок кода из 1С СтрокаСоединения = ("Driver=SQL Server;Server=") + Объект.SQLServer + (";UID=") + Объект.Login + (";PWD=") + Объект.Password + (";DataBase") + Объект.ИмяБД; СоединениеSQL = Новый ComObject("ADODB.Connection"); СоединениеSQL.ConnectionString=СтрокаСоединения; Попытка Сообщить("Open"); СоединениеSQL.Open(); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; ЗаписиSQL = Новый ComObject("ADODB.RecordSet"); ЗаписиSQL.ActiveConnection = СоединениеSQL; СоединениеSQL.Close(); Теперь, по логике, нужно получить количество колонок в указанной таблице и считать их содержимое. Но я не помню язык запросов и как передать данные в таблицу 1С. :(  | 
|||
| 
    1
    
        ДенисЧ    
     03.08.21 
            ✎
    15:23 
 | 
         
        Надо вспомнить. Без вспоминания SQL ты ничего не сделаешь. 
 
        Ну, или ВИДы настраивать... А так... rs = СоединениеSQL.Execute("select * from TableFromBigHeapOfTables"); Для каждого fld ИЗ rs.Fields Цикл сообщить("" + rs.Name)$ КонецЦикла так ты получишь имена колонок  | 
|||
| 
    2
    
        Aleksey    
     03.08.21 
            ✎
    15:24 
 | 
||||
| 
    3
    
        sx55    
     03.08.21 
            ✎
    15:26 
 | 
         
        (1) - Подожди, я не совсем понял логику "TableFromBigHeapOfTables", это название таблицы?     
         | 
|||
| 
    4
    
        sx55    
     03.08.21 
            ✎
    15:27 
 | 
         
        (2) - Спасибо за ссылки, видимо придётся вновь пройти этот путь ради простенькой задачки. :(     
         | 
|||
| 
    5
    
        ДенисЧ    
     03.08.21 
            ✎
    15:27 
 | 
         
        (3) Так ты не только SQL, но и английский забыл? Я старался, называл... ((     
         | 
|||
| 
    6
    
        sx55    
     03.08.21 
            ✎
    15:30 
 | 
         
        (5) - Я после работы занимаюсь, голова кругом. )))     
         | 
|||
| 
    7
    
        sx55    
     03.08.21 
            ✎
    15:39 
 | 
         
        Так, я похоже сложно объяснил.
 
        Есть база, "DataBase", к которой я подключился. В ней, есть куча таблиц, имя одной из которых "Tab1", в которой есть колонки "Col1", "Col2" и т.д. Нужно получить имена колонок и содержимое таблицы. (5) - Твой пример не сработал, ругается на "Недопустимое имя объекта".  | 
|||
| 
    8
    
        ДенисЧ    
     03.08.21 
            ✎
    15:41 
 | 
         
        rs = СоединениеSQL.Execute("select col1, col2 from Tab1");
 
        Пока НЕ rs.EOF Цикл Сообщить("Col1 " + rs.Fields("Col1").value + " Col2 "+ rs.Fields("Col2").value); rs.MoveNext(); КонецЦикла  | 
|||
| 
    9
    
        sx55    
     03.08.21 
            ✎
    15:50 
 | 
         
        (8) - Погоди, может я не правильно задаю имя таблицы?
 
        Вот код: rs = СоединениеSQL.Execute("select * from dbo.UserLogin"); Пока НЕ rs.EOF Цикл Сообщить("Col1 " + rs.Fields("UserName").value); rs.MoveNext(); КонецЦикла; Результат: river][SQL Server]Недопустимое имя объекта "dbo.UserLogin". {ВнешняяОбработка.ИмпортДанных.Форма.Форма.Форма(27)}: rs = СоединениеSQL.Execute("select * from dbo.UserLogin"); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя объекта "dbo.UserLogin"  | 
|||
| 
    10
    
        ДенисЧ    
     03.08.21 
            ✎
    15:53 
 | 
         
        Нет такой таблицы... Попробуй без dbo. И проверь имя БД, к которой обращаешься.
 
        Можешь попробовать bdname.dboUserLogin  | 
|||
| 
    11
    
        Ёпрст    
     гуру 
    03.08.21 
            ✎
    15:54 
 | 
         
        (9) открой ужо ssms и на нужной табличке пкм - выбрать первые...создаст тебе правильный селект     
         | 
|||
| 
    12
    
        sx55    
     03.08.21 
            ✎
    15:55 
 | 
         
        (10) - Увы, уже.
 
        Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя объекта "UserLogin". {ВнешняяОбработка.ИмпортДанных.Форма.Форма.Форма(27)}: rs = СоединениеSQL.Execute("select * from UserLogin"); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя объекта "UserLogin".  | 
|||
| 
    13
    
        sx55    
     03.08.21 
            ✎
    15:56 
 | 
         
        (11) - Мне нужны все данные, а не их часть.     
         | 
|||
| 
    14
    
        ДенисЧ    
     03.08.21 
            ✎
    15:58 
 | 
         
        (12) Ну нету у тебя такой таблицы в твоей базе, что поделаешь...     
         | 
|||
| 
    15
    
        sx55    
     03.08.21 
            ✎
    16:01 
 | 
         
        (11) - Спасибо тебе душевное человек, часть проблемы помог решить. Я уже и забыл про это. )))
 
        (12) - Ошибка была тут... rs = СоединениеSQL.Execute("select * from [Database].[dbo].[UserLogin]");  | 
|||
| 
    16
    
        sx55    
     03.08.21 
            ✎
    16:03 
 | 
         
        Всё, всем спасибо, пойду кино смотреть и спать. Завтра доделаю обработку.     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |