powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Интеграция 1с со внешними системами
10 сообщений из 10, страница 1 из 1
Интеграция 1с со внешними системами
    #36941301
Evgeniy Shubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, есть задача в сторонней системе (Cognos) построить отчеты и OLAP кубы на данных, которые хранятся в 1с. Cognos не имеет своего коннектора к 1с.

1c 8.2 + MS SQL Server.
Попробовал подключится к базе, которую 1с использует для работы. Оттуда можно достать кое-какую информацию, но связи между таблицами мне установить не удалось. Т.к. в полях, где, по-моему скромному мнению, должны храниться id-шники хранится <binary data>.

Поэтому появились вопросы, подскажите где знаете:
1) Есть ли у 1c 8.2 что-то вроде публикации данных в реляционку (пофиг в каком виде и как будут называться таблицы, главное чтобы можно было установить связи между таблицами и получить любые данные)?
2) Может есть какие-то сторонние разработки для осуществления публикации (см. п. 1)
3) Каким образом Вы осуществляли интеграцию 1с с внешними системами (хотябы одностороннюю).

П.С. Ручками писать процедуры выгрузки в файлы или реляционку для кажого объекта 1с не предлагать ))
...
Рейтинг: 0 / 0
Интеграция 1с со внешними системами
    #36941351
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПолучитьСтруктуруХраненияБазыДанных
...
Рейтинг: 0 / 0
Интеграция 1с со внешними системами
    #36941379
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ole com xml (txt )
...
Рейтинг: 0 / 0
Интеграция 1с со внешними системами
    #36941384
Evgeniy Shubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1сПолучитьСтруктуруХраненияБазыДанных
Вы мне даете функцию 1с. Спасибо за функцию.

Но пограммировать в 1с нет времени и компетенций.
Я просил ответить на один из трех вопросов. По существу вы не дали ответ ни на один их них. Т.к. в структуре таблиц разобраться не сложно и я это, вроде, сделал. Вопрос в том, что связей между таблицами нет. Вернее они где-то зашиты в полях с Binary Data, поэтому работать с базой, в которой 1с хранит данные - не вариант. Нужна витрина в любом виде (пусть таблицы и поля в них хоть как убого называются. Главное чтобы можно было на основе просто джоина связать эти таблицы и получить требуемые данные).

Мои вопросы относился к тому, чтобы быстро можно было выгружать данные в такую витрину. А также последний вопрос был о том, как Вы это делаете.
...
Рейтинг: 0 / 0
Интеграция 1с со внешними системами
    #36941431
oleg_shishkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) 1c не является реляционной БД. А есть попытка отобразить иерархические данные на реляционные БД. Система закрыта. Никакой прямой выгрузки и загрузки никогда не будет - это маркетинговая политика.
2) Т.к. система закрыта - то все разработки будут действовать до следущей версии
3) Для интеграции только работать с ADO. Если нужны функции работы с данными 1с - пишите - можно предоставить. Например функция, которая описывает связи между данными:

Procedure SaveTableReferencies() export
П = Новый Структура;
ТекстЗапроса = "ВЫБРАТЬ
| КОЛИЧЕСТВО(СвязиДанных.Ссылка)
|ИЗ
| Справочник.СвязиДанных КАК СвязиДанных
|ГДЕ
| СвязиДанных.ПервичнаяТаблица = &ПервичнаяТаблица
| И СвязиДанных.КолонкаПервичнойТаблицы = &КолонкаПервичнойТаблицы
| И СвязиДанных.СвязаннаяТаблица = &СвязаннаяТаблица
| И СвязиДанных.КолонкаСвязаннойТаблицы = &КолонкаСвязаннойТаблицы";

СвязиДанных = Справочники.СвязиДанных;

НачатьТранзакцию(РежимУправленияБлокировкойДанных.Автоматический);
// сохраняем данные о связях справочников
for each Справочник in Метаданные.Справочники do
// Обрабатываем реквизиты
for each Реквизит in Справочник.Реквизиты do
ТипыР = Реквизит.Тип.Типы();
for i = 0 to ТипыР.count() - 1 do
МетаТип = Метаданные.НайтиПоТипу(ТипыР[i]);
if not IsNull(МетаТип) then
Менеджер = ПолучитьМенеджерОбъекта(МетаТип.Имя);
if not IsNull(Менеджер) then
П.Clear();
П.Вставить("ПервичнаяТаблица",mid(Справочник.ПолноеИмя(),find(Справочник.ПолноеИмя(),".") + 1));
П.Вставить("КолонкаПервичнойТаблицы",Реквизит.Имя);
П.Вставить("СвязаннаяТаблица",mid(МетаТип.ПолноеИмя(),find(МетаТип.ПолноеИмя(),".") + 1));
П.Вставить("КолонкаСвязаннойТаблицы","Ссылка");
cnt = Выполнить_Запрос_1С_Результат(ТекстЗапроса,П);
if cnt = 0 then
Объект = СвязиДанных.СоздатьЭлемент();
Объект.ПервичнаяТаблица = П.ПервичнаяТаблица;
Объект.КолонкаПервичнойТаблицы = П.КолонкаПервичнойТаблицы;
Объект.СвязаннаяТаблица = П.СвязаннаяТаблица;
Объект.КолонкаСвязаннойТаблицы = П.КолонкаСвязаннойТаблицы;
Объект.ТипСвязи = "ЛЕВОЕ СОЕДИНЕНИЕ";
Объект.Записать();
endif;
endif;
endif;
enddo;
enddo;
// Обрабатываем табличные части
for each ТабличнаяЧасть in Справочник.ТабличныеЧасти do
П.Clear();
П.Вставить("ПервичнаяТаблица",mid(Справочник.ПолноеИмя(),find(Справочник.ПолноеИмя(),".") + 1));
П.Вставить("КолонкаПервичнойТаблицы","Ссылка");
П.Вставить("СвязаннаяТаблица",СтрЗаменить(СтрЗаменить(mid(ТабличнаяЧасть.ПолноеИмя(),find(ТабличнаяЧасть.ПолноеИмя(),".") + 1),"ТабличнаяЧасть.",""),".",""));
П.Вставить("КолонкаСвязаннойТаблицы","Ссылка");

cnt = Выполнить_Запрос_1С_Результат(ТекстЗапроса,П);
if cnt = 0 then
Объект = СвязиДанных.СоздатьЭлемент();
Объект.ПервичнаяТаблица = П.ПервичнаяТаблица;
Объект.КолонкаПервичнойТаблицы = П.КолонкаПервичнойТаблицы;
Объект.СвязаннаяТаблица = П.СвязаннаяТаблица;
Объект.КолонкаСвязаннойТаблицы = П.КолонкаСвязаннойТаблицы;
Объект.ТипСвязи = "ЛЕВОЕ СОЕДИНЕНИЕ";
Объект.Записать();
endif;
enddo;

//Добавляем Владельцев
for each Владелец in Справочник.Владельцы do
П.Clear();
П.Вставить("ПервичнаяТаблица",mid(Владелец.ПолноеИмя(),find(Владелец.ПолноеИмя(),".") + 1));
П.Вставить("КолонкаПервичнойТаблицы","Ссылка");
П.Вставить("СвязаннаяТаблица",mid(Справочник.ПолноеИмя(),find(Справочник.ПолноеИмя(),".") + 1));
П.Вставить("КолонкаСвязаннойТаблицы","Ссылка");

cnt = Выполнить_Запрос_1С_Результат(ТекстЗапроса,П);
if cnt = 0 then
Объект = СвязиДанных.СоздатьЭлемент();
Объект.ПервичнаяТаблица = П.ПервичнаяТаблица;
Объект.КолонкаПервичнойТаблицы = П.КолонкаПервичнойТаблицы;
Объект.СвязаннаяТаблица = П.СвязаннаяТаблица;
Объект.КолонкаСвязаннойТаблицы = П.КолонкаСвязаннойТаблицы;
Объект.ТипСвязи = "ЛЕВОЕ СОЕДИНЕНИЕ";
Объект.Записать();
endif;
enddo;

enddo;

// сохраняем данные о связях документов
for each Документ in Метаданные.Документы do
// Обрабатываем реквизиты
for each Реквизит in Документ.Реквизиты do
ТипыР = Реквизит.Тип.Типы();
for i = 0 to ТипыР.count() - 1 do
МетаТип = Метаданные.НайтиПоТипу(ТипыР[i]);
if not IsNull(МетаТип) then
Менеджер = ПолучитьМенеджерОбъекта(МетаТип.Имя);
if not IsNull(Менеджер) then
//П.Clear();
//П.Вставить("ПервичнаяТаблица",Документ.ПолноеИмя());
//П.Вставить("КолонкаПервичнойТаблицы",Реквизит.Имя);
//П.Вставить("СвязаннаяТаблица",МетаТип.ПолноеИмя());
//П.Вставить("КолонкаСвязаннойТаблицы","Ссылка");
//cnt = Выполнить_Запрос_1С_Результат(ТекстЗапроса,П);
//if cnt = 0 then
// Объект = СвязиДанных.СоздатьЭлемент();
// Объект.ПервичнаяТаблица = П.ПервичнаяТаблица;
// Объект.КолонкаПервичнойТаблицы = П.КолонкаПервичнойТаблицы;
// Объект.СвязаннаяТаблица = П.СвязаннаяТаблица;
// Объект.КолонкаСвязаннойТаблицы = П.КолонкаСвязаннойТаблицы;
// Объект.ТипСвязи = "ЛЕВОЕ СОЕДИНЕНИЕ";
// Объект.Записать();
//endif;

П.Clear();
П.Вставить("ПервичнаяТаблица",mid(Документ.ПолноеИмя(),find(Документ.ПолноеИмя(),".") + 1));
П.Вставить("КолонкаПервичнойТаблицы",Реквизит.Имя);
П.Вставить("СвязаннаяТаблица",mid(МетаТип.ПолноеИмя(),find(МетаТип.ПолноеИмя(),".") + 1));
П.Вставить("КолонкаСвязаннойТаблицы","Ссылка");
cnt = Выполнить_Запрос_1С_Результат(ТекстЗапроса,П);
if cnt = 0 then
Объект = СвязиДанных.СоздатьЭлемент();
Объект.ПервичнаяТаблица = П.ПервичнаяТаблица;
Объект.КолонкаПервичнойТаблицы = П.КолонкаПервичнойТаблицы;
Объект.СвязаннаяТаблица = П.СвязаннаяТаблица;
Объект.КолонкаСвязаннойТаблицы = П.КолонкаСвязаннойТаблицы;
Объект.ТипСвязи = "ЛЕВОЕ СОЕДИНЕНИЕ";
Объект.Записать();
endif;
endif;
endif;
enddo;
enddo;
// Обрабатываем табличные части
for each ТабличнаяЧасть in Документ.ТабличныеЧасти do
П.Clear();
П.Вставить("ПервичнаяТаблица",mid(Документ.ПолноеИмя(),find(Документ.ПолноеИмя(),".") + 1));
П.Вставить("КолонкаПервичнойТаблицы","Ссылка");
П.Вставить("СвязаннаяТаблица",СтрЗаменить(СтрЗаменить(mid(ТабличнаяЧасть.ПолноеИмя(),find(ТабличнаяЧасть.ПолноеИмя(),".") + 1),"ТабличнаяЧасть.",""),".",""));
П.Вставить("КолонкаСвязаннойТаблицы","Ссылка");

cnt = Выполнить_Запрос_1С_Результат(ТекстЗапроса,П);
if cnt = 0 then
Объект = СвязиДанных.СоздатьЭлемент();
Объект.ПервичнаяТаблица = П.ПервичнаяТаблица;
Объект.КолонкаПервичнойТаблицы = П.КолонкаПервичнойТаблицы;
Объект.СвязаннаяТаблица = П.СвязаннаяТаблица;
Объект.КолонкаСвязаннойТаблицы = П.КолонкаСвязаннойТаблицы;
Объект.ТипСвязи = "ЛЕВОЕ СОЕДИНЕНИЕ";
Объект.Записать();
endif;
enddo;
enddo;

ЗафиксироватьТранзакцию();
СП = Новый СообщениеПользователю;
СП.Текст = "Данные сохранены !";
СП.Сообщить();
endprocedure
...
Рейтинг: 0 / 0
Интеграция 1с со внешними системами
    #36942075
Evgeniy Shubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_shishkin, большое спасибо за исчерпывающий ответ по всем пунктам.

Запостил еще здесь
Также получил полезные советы.

Наиболее полезным оказался этот тред
...
Рейтинг: 0 / 0
Интеграция 1с со внешними системами
    #36942188
oleg_shishkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Evgeniy Shubin,

если надо функции работы с binary могу выложить
...
Рейтинг: 0 / 0
Интеграция 1с со внешними системами
    #36943036
Evgeniy Shubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_shishkinEvgeniy Shubin,

если надо функции работы с binary могу выложить

Было бы полезно.
Заранее спасибо!
...
Рейтинг: 0 / 0
Интеграция 1с со внешними системами
    #36943371
oleg_shishkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Evgeniy Shubin,

Функции конвертации Binary -> hex string и обратно. Если надо работу что-то с ADO пишите

create function dbo.sp_hexadecimal ( @binvalue varbinary(255) )
returns nvarchar(255)
as
begin
declare
@charvalue nvarchar(255)
,@i int
,@length int
,@hexstring nchar(16)
,@tempint int
,@firstint int
,@secondint int

select @charvalue = '0x'
select @i = 1
select @length = datalength(@binvalue)
-- select @hexstring = '0123456789abcdef'
select @hexstring = '0123456789ABCDEF'

while (@i <= @length) begin
select @tempint = convert(int, substring(@binvalue,@i,1))
select @firstint = floor(@tempint/16)
select @secondint = @tempint - (@firstint*16)
select @charvalue = @charvalue + substring(@hexstring, @firstint+1, 1) + substring(@hexstring, @secondint+1, 1)
select @i = @i + 1
end

return ( @charvalue )
end
go

ALTER FUNCTION dbo.HexStrToVarBinary(@hexstring nvarchar(8000))
RETURNS varbinary(8000)
AS
BEGIN

declare
@a varbinary(8000)

select @a = cast('' as xml).value('xs:hexBinary( substring(sql:variable("@hexstring"), sql:column("t.pos")) )', 'varbinary(max)')
from (select case substring(@hexstring, 1, 2) when '0x' then 3 else 0 end) as t(pos)

return @a
END
go
...
Рейтинг: 0 / 0
Интеграция 1с со внешними системами
    #36943375
oleg_shishkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если надо работу c GUID - пишите мылом
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Интеграция 1с со внешними системами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]