Имя: Пароль:
1C
1С v8
Передача данных из 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
Всё, всем спасибо, пойду кино смотреть и спать. Завтра доделаю обработку.