![]() |
![]() |
![]() |
|
Таблицы 1с и SQL | ☑ | ||
---|---|---|---|---|
0
kamysh
29.02.08
✎
09:58
|
Подскажите, как можно узнать какая таблица в SQL 2005 соответсвует данным в 1с 8.0?
нашел V8Viewer, но там демка. |
|||
1
kamysh
29.02.08
✎
11:11
|
up
|
|||
2
Salvador Limones
29.02.08
✎
11:12
|
Enterprise Integrator, ищи на инфостарте.
|
|||
3
Mich
29.02.08
✎
11:53
|
на сколько я помню в 8.1 реализована возможность смотреть соответствие объектов и их реквизитов таблицам скуля.....на курсах говорили...но не проверял
|
|||
4
Salvador Limones
29.02.08
✎
12:23
|
(3) Наверное ты про ПолучитьСтруктуруХраненияБазыДанных.
|
|||
5
Elementarno
29.02.08
✎
14:37
|
По Уникальному идентификатору (УИ).
1.Получаешь УИ 2.Получаешь его в виде строки: Функция GUID(Ссылка) Экспорт Стр = Строка(Ссылка.УникальныйИдентификатор()); Return Сред(Стр,27,2)+Сред(Стр,25,2)+Сред(Стр,22,2)+Сред(Стр,20,2)+ "-"+Сред(Стр,31,2)+Сред(Стр,29,2)+ "-"+Сред(Стр,35,2)+Сред(Стр,33,2)+ "-"+Сред(Стр,15,4)+ "-"+Сред(Стр,10,4)+Сред(Стр,1,8); КонецФункции 3.Через СОМ Cnn = Новый COMОбъект("ADODB.Connection"); запускаешь SQL (а уж там можно сделатьвсЁ в отличие от 1С) 4.Например: CREATE PROCEDURE dbo.kkk_Find_Table -- Ищем таблицы по ссылке в документе и пишем соответствие в таблицу KirSYSOBJECTS @Link as char(36), -- Это УИ @cName as varchar(255), -- Это название объекта в 1С @Tip as char(1)='C' -- Это чтоб побыстрее -- "5050edbf-5054-3030-11da-e7009eb351f0" AS declare @C int, @name sysname, @sqlstmt varchar(255), @nameL sysname --CLOSE crs1 --DEALLOCATE crs1 if @Tip='C' -- Справочники begin DECLARE crs1 CURSOR FAST_FORWARD READ_ONLY FOR --select NAME --from SYSOBJECTS where xtype='U' order by name SELECT name FROM [1c_EX].dbo.sysobjects -- 1c_EX База 1С WHERE (type = 'U') AND (LEFT(name, 10) = '_Reference') AND (CHARINDEX('VT', name) = 0) AND (CHARINDEX('Change', name) = 0) ORDER BY name end if @Tip='D' -- Документы begin DECLARE crs1 CURSOR FAST_FORWARD READ_ONLY FOR SELECT TOP 100 PERCENT name FROM [1c_EX].dbo.sysobjects WHERE (type = 'U') AND (CHARINDEX('VT', name) = 0) AND (LEFT(name, 2) = '_D') AND (CHARINDEX('Change', name) = 0) AND (CHARINDEX('jour', name) = 0)--Change ORDER BY name end OPEN crs1 FETCH NEXT FROM crs1 INTO @name WHILE (@@FETCH_STATUS=0) BEGIN Set @nameL='[1c_EX].dbo.' + @name SET @sqlstmt='INSERT KirSYSOBJECTS SELECT '+char(39)+@cName+char(39)+' , '+char(39)+@name+char(39)+' , (SELECT COUNT(*) FROM '+@nameL+' where _IDRRef = CONVERT(uniqueidentifier,'+char(39)+@Link+char(39)+') ) ' --select @sqlstmt EXECUTE (@sqlstmt) FETCH NEXT FROM crs1 INTO @name END CLOSE crs1 DEALLOCATE crs1 delete from KirSYSOBJECTS where C=0 if @C>0 RETURN 0 else RETURN -1 GO 5.Табличные части проще по количеству полей в них WHERE CHARINDEX('_VT', name)>1 and CHARINDEX(@name, name)>0 and (type = 'U') AND LEN(name)>LEN(@name) 6.Потом находим соответствие полей: INSERT into KIRSYSCOLUMNS SELECT @ColName, ColName,ID, Tip, length, c_Name, sql_Name FROM dbo.C_Columns(@Tname, @J) 7.Регистры (а если база не пустая, то и для всего) проще по количеству записей в них.(К счастью в SQL оно совпадает с 1С :-))) CREATE PROCEDURE SizT -- Test_1C.[].SizT AS declare @D as datetime, @N as int , @nameT as sysname --, MN as int select @N=max(N) FROM KirSz --DELETE [].KirSz INSERT INTO KirSz(Nt) SELECT NAME FROM [1C_EX].dbo.SYSOBJECTS where xtype='U' order by name DECLARE crs1 CURSOR FAST_FORWARD READ_ONLY FOR select NAME from [1C_EX].dbo.SYSOBJECTS where xtype='U' order by name DECLARE @name sysname,@s varchar(128), @sqlstmt varchar(255), @cnt int OPEN crs1 FETCH NEXT FROM crs1 INTO @name WHILE (@@FETCH_STATUS=0) BEGIN --SET @sqlstmt='SELECT max('+@cnt+'), COUNT(*) FROM '+@name select @nameT = '[1C_EX].dbo.[' + @name + ']' --Test_1C.[].KirSz. Test_1C.[].KirSz. --select @nameT SET @sqlstmt='UPDATE KirSz SET Sz= (SELECT COUNT(*) FROM '+@nameT+') FROM KirSz WHERE Nt = '+char(39)+@name+char(39) +' and N = 0' --select @sqlstmt EXECUTE (@sqlstmt) SET @sqlstmt='UPDATE KirSz SET N='+cast(@N+1 as char(6))+' FROM KirSz WHERE Nt = '+char(39)+@name+char(39) +' and N = 0' EXECUTE (@sqlstmt) FETCH NEXT FROM crs1 INTO @name END SELECT @N+1 as Lastt SELECT * from KirSz where N=@N+1 CLOSE crs1 DEALLOCATE crs1 GO |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |