Обмен между 1С:Предприятие 8 и совершенно другой системой на базе SQL.

1. thorben 17 04.11.10 10:30 Сейчас в теме
Подскажите, как настроить обмен между 1С: Предприятие 8 и другой базой данных на базе SQL?
В нашем международном концерне работа с клиентами ведется в программе на базе SQL и Access. Эта программа раз в сутки считывает данные из других систем, в том числе и 1С: Предприятие (серверный вариант). Т.е. программа подключается к базе и зная где и в какой таблице хранятся данные, запрашивает их. Табличную структуру пришлось перед этим долго изучать.

Но табличная структура 1С: Предприятия меняется с переходом на новую платформу 8.2
И программа не будет знать в какой таблице находятся т.е. или иные данные. Мы это уже протестировали. Т.е. программистам надо снова исследовать табличную структуру уже на новой платформе.

Как настроить обмен, который бы не зависел от табличной структуры базы? Неужели только выгрузкой в XML и дальнейшей его загрузкой? :?:
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sadovnikov 04.11.10 11:02 Сейчас в теме
(1) "Эта программа раз в сутки считывает данные из других систем, в том числе и 1С" - в курсе, что пиратством занимаетесь? То есть, нарушаете лицензионное соглашение.
+
3. thorben 17 04.11.10 11:09 Сейчас в теме
А что за лицензионное соглашение? Производится же обмен данными между УТ и БП. А если у нас БП или другая программа не на базе 1С, что тогда делать? Во всем мире это норма. Если у нас данные хранятся на SQL, мы их вправе считывать при помощи любого интерфейса. Или?
+
4. Ish_2 1104 04.11.10 11:54 Сейчас в теме
Остается надеяться , что платформа 8.3 выйдет не раньше чем через 2-3 года.
И перед переходом на 8.3 снова изучить структуру базы. Не так плохо.
Лучше , чем XML.
+
5. I_G_O_R 69 04.11.10 15:22 Сейчас в теме
забирать данные через com соединение
+
6. thorben 17 04.11.10 15:58 Сейчас в теме
Я подключился к базе таким образом.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cntr As Object
Dim trade As Object
Dim Элемент As Object
Dim СправочникКонтрагентов As Object

Set cntr = CreateObject("V81.COMConnector")
Set trade = cntr.Connect("File=""С:\My Documents\InfoBase1"";Usr=""Администратор"";")

Set СправочникКонтрагентов = trade.Справочники.Контрагенты

End Sub

Как мне перебрать из элементы справочника? Дело в том, что программист, той программы, которая собирается забирать данные, по-русски совсем не может. Поэтому мне надо ему помогать писать скрипт на VB.

Да еще, а как подсоединяться к серверному варианту базы?
+
7. I_G_O_R 69 04.11.10 17:54 Сейчас в теме
(6)запросом можно,
а еще лучше я бы посоветал, в вашей конфе написать экспортные функции, которые бы возвращали например таблицы значений, о составе колонок договоритесь, а дальше каждое сам свое напишит.
+
8. I_G_O_R 69 04.11.10 18:05 Сейчас в теме
(6)
опыта нет писать VB, но наверное будет выглядеть как-то так:
Dim Запрос as object
Запрос = trade.NewObject("Запрос")
Запрос.Текст = "ВЫБРАТЬ Т.Наименование, Т.ИНН, Т.КПП ИЗ Справочник.Контрагенты КАК Т"
Dim Выборка as object
Выборка = Запрос.Выполнить().Выбрать();
....

второй вариант бы выглядел так:
Dim ТЗКонтаргенты as object
ТЗКонтрагенты = trade.ПолучитьКонтрагентов()


как работать с таблицей честно не знаю, но в любом случае можно получить количество строк и строку получить по индексу: ТЗКонтрагенты.Получить(Индекс)
+
9. thorben 17 08.11.10 09:58 Сейчас в теме
Вот так у меня работает.

Dim cntr As Object
Dim trade As Object
Dim Клиенты As Object
Dim Результат As String

'In den naechsten 2.Zeilen wird die Verbindung hergestellt
Set cntr = CreateObject("V81.COMConnector")
Set trade = cntr.Connect("srvr=""сервер1"";Ref=""Trade"";Usr=""Администратор"";Pwd=""пароль"";")

Set Клиенты = trade.Catalogs.Контрагенты.Select()
т= 1

Do While Клиенты.Next()
Результат = Результат & Клиенты.Наименование & "; "
Loop


MsgBox (Результат)


А вот запрос выполнить из базы Access не получается. Кто нибудь мог бы подсказать, как запрос на VBA сделать, и вытащить данные из 1С?
+
10. PlatonStepan 38 08.11.10 11:44 Сейчас в теме
запрос на VB :
Set мойзапрос = trade.NewObject("Запрос","текст запроса")
+
11. thorben 17 08.11.10 12:11 Сейчас в теме
Set мойзапрос = trade.NewObject("Запрос","Выбрать Контрагенты.Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты")

Вверху все работает. А вот следующие строки выдают ошибку.

Выборка = мойзапрос.Выполнить().Выбрать();
Выборка = мойзапрос.Execute().Choose()

Что я неправильно делаю? Как получить выборку, чтобы потом перебрать ее?
+
12. РУБЛЬ 08.11.10 12:53 Сейчас в теме
Если у вас обмен происходит через SQL таблицу,то почему не использовать COMObject("ADODB.Connection")

СтрокаПодключения="Provider=SQLOLEDB.1;Password=Пароль;Persist Security Info=True;User ID=billing_daemon;Initial Catalog=Таблица;Data Source=имяБазы";
Попытка
DataBaseConnection = Новый COMObject("ADODB.Connection");
Кодировка = "windows-1251";
DataBaseConnection.ConnectionString =СтрокаПодключения ;
DataBaseConnection.Open();

Команда=Новый COMОбъект("ADODB.Command");
Команда.ActiveConnection=DataBaseConnection;
RS = Новый COMОбъект("ADODB.Recordset");
НаборЗаписей=RS;

Запрос = Новый Запрос;
Запрос.Текст =
|"Выбрать
|
|
;
ВыборкаРез=Запрос.Выполнить().Выбрать();

Пока ВыборкаРез.Следующий()Цикл


ТекстЗапроса="INSERT INTO dbo.io_agent_debt VALUES ('"+Формат(ВыборкаРез.Data,"ДФ=""ММ/дд/гггг""")+"','"
+ВыборкаРез.Контрагент+"',"
+ВыборкаРез.ИНН+"',"
+ВыборкаРез.КПП+"',"
+ВыборкаРез.Сумма+"'," ;

Команда.CommandText=ТекстЗапроса;
НаборЗаписей.MoveNext();
КонецЦикла;

Исключение
Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;
Попытка
НаборЗаписей.Close();
исключение
КонецПопытки;
DataBaseConnection.Close();
+
13. thorben 17 08.11.10 13:16 Сейчас в теме
ADODB.Connection возвращает по-моему структуру таблиц, которая меняется с каждым переходом на новую платформу. А нам хотелось бы обращаться на уровне объектов.
+
14. thorben 17 08.11.10 13:37 Сейчас в теме
Всем спасибо! Разобрался!
+
15. thorben 17 10.11.10 14:35 Сейчас в теме
А как в Access установить параметр для запроса в 1С?

Запрос. УстановитьПараметр ("Параметр", "Адрес") выдает ошибку
Set Параметр = Запрос. УстановитьПараметр ("Параметр", "Адрес") также выдает ошибку
+
16. thorben 17 02.12.10 13:01 Сейчас в теме
Со многим вроде бы разобрался. И все работает. Но хотелось бы задекларировать в Access переменную ВыборкаРезв которую я выгружаю Запрос.Выполнить().Выбрать();

Если я ее не декларирую то работает так:
Set ВыборкаРез = Запрос.Выполнить().Выбрать();
Если я ее декларирую как Dim ВыборкаРез As ADODB.Recordset, то не работает. :(
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот