|
Как писать напрямую в SQL таблицы | ☑ | ||
---|---|---|---|---|
0
sergdi
26.04.12
✎
14:43
|
Большинство полей в таблицах 1C V82 на SQL сервере типа бинари. Как в них записывать напрямую данные.
|
|||
1
Джинн
26.04.12
✎
14:44
|
Зачем?
|
|||
2
UnknownNick
26.04.12
✎
14:45
|
напрямую бы не советовал, попробуйте через АДО.
|
|||
3
Serginio1
26.04.12
✎
14:46
|
||||
4
Стальная Крыса
26.04.12
✎
14:46
|
От куда ?
|
|||
5
Kreont
26.04.12
✎
14:46
|
я б вообще не писал вручную...
Да и по лиц.условиях запрещено :( |
|||
6
UnknownNick
26.04.12
✎
14:48
|
да кто его читает?
|
|||
7
sergdi
26.04.12
✎
14:48
|
(5) очень нужно, как подготовить поле для бинари
|
|||
8
Fish
26.04.12
✎
14:50
|
(7) Читаем лицензионные условия 1С. долго думаем. :))
|
|||
9
UnknownNick
26.04.12
✎
14:50
|
вы главное не останавливайтесь, вы добавите много удовольствия для пользователей 1С.
|
|||
10
Джинн
26.04.12
✎
14:50
|
(7) Есть масса более безболезненных способов лишится премии.
|
|||
11
sergdi
26.04.12
✎
14:50
|
(4) например VB
|
|||
12
Kreont
26.04.12
✎
14:51
|
Дай ответ на (4), и может тогда проще соединиться из 1С "Туда" и аккуратно вставлять уже из 1С.
|
|||
13
sergdi
26.04.12
✎
14:52
|
(8) Сформилирую по-другому. Просто хочется узнать много нового и интересного
Нарушать ничего не будем |
|||
14
sergdi
26.04.12
✎
14:52
|
(12) данный вариант не подходит
|
|||
15
UnknownNick
26.04.12
✎
14:53
|
узнавайте сразу на рабочей базе, к черту сомнения и условности!
|
|||
16
Fish
26.04.12
✎
14:53
|
(13) Сотри бухгалтерскую базу перед сдачей отчётности. Сразу узнаешь много нового и интересного.
|
|||
17
ОчкарикСлава
26.04.12
✎
14:54
|
(13) , Вам надо в Х-Ветку....
сюда: OFF: Х-Ветка |
|||
18
Стальная Крыса
26.04.12
✎
14:56
|
Если прямо в тексте запроса:
Insert into MyTable (BinaryField) Value('{00000000-0000-0000-000000000000}') |
|||
19
andrey153
26.04.12
✎
14:56
|
(7) Например, селектом из других таблиц базы. Что именно нужно записывать в базу?
|
|||
20
rsv
26.04.12
✎
14:58
|
(0) Скорее речь идет о апдейте ?
|
|||
21
sergdi
26.04.12
✎
14:59
|
(19) Для начала хочу создавать элементы справочника контрагенты.
|
|||
22
sergdi
26.04.12
✎
14:59
|
Там даже поле пометка удаления бинари
|
|||
23
sergdi
26.04.12
✎
15:00
|
(20) нужно создавать новые
|
|||
24
Kreont
26.04.12
✎
15:00
|
зачем тогда 1С покупали?
|
|||
25
rsv
26.04.12
✎
15:00
|
+(21)Не взлетит.
|
|||
26
sergdi
26.04.12
✎
15:01
|
(25) Почему.
|
|||
27
UnknownNick
26.04.12
✎
15:02
|
да все взлетит, используй insert. если поле не читаемое, это не значит, что нужно останавливаться!
|
|||
28
andrey153
26.04.12
✎
15:02
|
(21) О! С пометкой-то как раз все просто целое отлично преобразуется к нулю или единице в формате бинари. А вот как угадать очередной id справочника не в курсе. Но можно попробовать вычислить эмпирическим путем :)
|
|||
29
Ахиллес
26.04.12
✎
15:02
|
(26) Потому, что кто знает, тот не скажет.
|
|||
30
UnknownNick
26.04.12
✎
15:04
|
стаж 7 лет и 7 месяцев ТС меня вводит в ступор, аккаунт краденный?
|
|||
31
rsv
26.04.12
✎
15:04
|
(26) Патамушта как минимум неизветсно как генерится значение поля FIDRRef.
|
|||
32
sergdi
26.04.12
✎
15:05
|
(28) id - это уникальный идентификатор который читается в 1С его думаю можно сформировать
|
|||
33
UnknownNick
26.04.12
✎
15:06
|
за 8 лет сложно было понять, что справочник Клиенты в 1С это куча взаимосвязанных таблиц?
|
|||
34
Serginio1
26.04.12
✎
15:07
|
||||
35
sergdi
26.04.12
✎
15:08
|
(31) Это где такое поле я его не увидел
|
|||
36
sergdi
26.04.12
✎
15:09
|
(33) и что из того. Кучи будем разгребать
|
|||
37
Serginio1
26.04.12
✎
15:09
|
34+
Функция ПолучитьGUIDПоУникальномуИдентификатору(UUID1) UUID=ВРЕГ(UUID1); ч1 = Сред(UUID,20,4); ч2 = Сред(UUID,25,12); ч3 = Сред(UUID,15,4); ч4 = Сред(UUID,10,4); ч5 = Сред(UUID,1,8); Возврат "0x" + ч1 + ч2 + ч3 + ч4 + ч5; КонецФункции |
|||
38
rsv
26.04.12
✎
15:13
|
+(35) В скуле - _IDRRef
|
|||
39
sergdi
26.04.12
✎
15:14
|
(38)это уникальный идентификатор (37)
|
|||
40
rsv
26.04.12
✎
15:16
|
(39) А что такое в (37) за параметр UUID1 в Функции ?
|
|||
41
sergdi
26.04.12
✎
15:20
|
(40) кто как генерит ГУИД поделитесь секретом
|
|||
42
Serginio1
26.04.12
✎
15:23
|
(40) УникальныйИдентификатор()
|
|||
43
rsv
26.04.12
✎
15:24
|
(42) В Бейсике ??? или T-SQL ??? :)
|
|||
44
Serginio1
26.04.12
✎
15:25
|
||||
45
Serginio1
26.04.12
✎
15:26
|
(43) А разве функция 37 написана на Бейсике ??? или T-SQL ???
|
|||
46
rsv
26.04.12
✎
15:27
|
(45) А разве эта функция не может быть написана на Бейсике ??? Так что с параметром UUID1 ? :)
|
|||
47
Serginio1
26.04.12
✎
15:29
|
Ну уж точно не на T-SQL. Давно я в руках Бейсик не держал там есть Функция и КонецФункции?
|
|||
48
rsv
26.04.12
✎
15:31
|
(47) Так что с параметром ? :)
|
|||
49
Serginio1
26.04.12
✎
15:44
|
(48) так устроит? "e7e05c5d-31ae-464b-9488-c7bdc97c3473"
|
|||
50
rsv
26.04.12
✎
15:49
|
(49) Увы. Не устроит.
|
|||
51
sergdi
26.04.12
✎
15:52
|
это не подойдет ?
http://www.vbnet.ru/forum/show.aspx?id=37975 |
|||
52
Aprobator
26.04.12
✎
15:54
|
(0) правильно, а в конце разобраться как все это побитово прописывать.
|
|||
53
rsv
26.04.12
✎
15:57
|
(51) Неа.
|
|||
54
Serginio1
26.04.12
✎
16:17
|
(53) А что тебя не устраивает? Если из 1С нужно найти ID по её уникальному идентификатору то
Declare @Прайс as binary(16) = "+ПолучитьGUIDПоУникальномуИдентификатору(ТипЦен.УникальныйИдентификатор()) если новый то Convert(binary(16),NEWID())) |
|||
55
sergdi
10.05.12
✎
17:51
|
Одна и та же конфигурация, две разные базы данных на сервере. В одной документ реализации товаров и услуг называется как Document203, в другой Document205
Получается что названия на сервере меняются. Как идентифицировать ? |
|||
56
shuhard
10.05.12
✎
17:56
|
(55) неужели ещё не предлагали:
ПолучитьСтруктуруХраненияБазыДанных |
|||
57
sergdi
10.05.12
✎
17:57
|
(56) предлагали по ней и видно.
|
|||
58
sergdi
10.05.12
✎
17:59
|
(56) где на сервере хранится ссылка что реализация в одном случае 203, а в другом 205
|
|||
59
Serginio1
10.05.12
✎
17:59
|
Смотри ПолучитьСтруктуруХраненияБазыДанных
|
|||
60
Serginio1
10.05.12
✎
18:00
|
(58) Вообще то запрос нужно формировать динамически и брать имена полей из текущей базы
|
|||
61
shuhard
10.05.12
✎
18:01
|
(58) я бы включил профайлер и запустил ПолучитьСтруктуруХраненияБазыДанных
|
|||
62
sergdi
10.05.12
✎
18:01
|
(59) Я смотрю. Конфигурация одна и та же а, в разных базах получились разные названия таблиц.
|
|||
63
Serginio1
10.05.12
✎
18:01
|
Процедура ПолучитьSqlИмяСервераИБазы(Сервер,Порт,ИмяБазы,SqlServer,SqlBaseName)
Соединитель = Новый COMОбъект("V82.COMConnector"); СоединениеСАгентом = Соединитель.ConnectAgent(Сервер); Кластеры = СоединениеСАгентом.GetClusters(); Кластер = Кластеры.GetValue(Кластеры.GetLowerBound()); // первый кластер СоединениеСАгентом.Authenticate(Кластер, "", ""); РабочиеПроцессы = СоединениеСАгентом.GetWorkingProcesses(Кластер); РабочийПроцесс = РабочиеПроцессы.GetValue(РабочиеПроцессы.GetLowerBound()); // первый рабочий процесс АдресРабочегоПроцесса = "tcp://" + РабочийПроцесс.HostName + ":" + XMLСтрока(РабочийПроцесс.MainPort); СоединениеСРабочимПроцессом = Соединитель.ConnectWorkingProcess(АдресРабочегоПроцесса); СоединениеСРабочимПроцессом.AddAuthentication("ADM","3403178"); ИнформационныеБазы = СоединениеСРабочимПроцессом.GetInfoBases(); Для каждого База из ИнформационныеБазы Цикл Если Врег(База.Name)=Врег(ИмяБазы) Тогда Сообщить(База.DBServerName); Сообщить(База.DBName); SqlServer=База.DBServerName; SqlBaseName=База.DBName; КонецЕсли; КонецЦикла; КонецПроцедуры Функция ПолучитьТекущийСерверИБазу() Перем SqlServer,SqlBaseName; // Сообщить(СтрокаСоединенияИнформационнойБазы()); Массив=ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрЗаменить(СтрокаСоединенияИнформационнойБазы(),"""",""),";"); Резулт=Новый Структура; Для Каждого стр из Массив Цикл Если ЗначениеЗаполнено(Стр) Тогда КейВалуе=ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(стр,"="); Резулт.Вставить(КейВалуе[0],КейВалуе[1]) КонецЕсли; КонецЦикла; ПолучитьSqlИмяСервераИБазы(Резулт.Srvr,1540,Резулт.Ref,SqlServer,SqlBaseName); Резулт.Srvr=SqlServer; Резулт.Ref=SqlBaseName; возврат Резулт; КонецФункции Функция ВыполнитьКомандуSQL(ТекстЗапроса) Экспорт ДанныеСервера=ПолучитьТекущийСерверИБазу(); ConnectionString ="DRIVER=SQL Server; |UID=администратор; |Network=DBMSSOCN; |LANGUAGE=русский; |DATABASE="+ДанныеСервера.Ref+"; |WSID="+ДанныеСервера.Srvr+"; |APP=Microsoft® Windows® Operating System; |Trusted_Connection=Yes; |SERVER="+ДанныеСервера.Srvr; //Сообщить(СтрокаСоединенияИнформационнойБазы()); Connection = Новый COMОбъект("ADODB.Connection"); //ADO_Recordset = Новый COMОбъект("ADODB.Recordset"); //ADO_Command = Новый COMОбъект("ADODB.Command"); // ADO_Connection. // Соединение.ConnectionString = "DSN=" + ДСН + ";UID=" + УИД + ";PWD=" + ПВД; Connection.ConnectionString = ConnectionString; Connection.CommandTimeOut=0; Connection.ConnectionTimeout = 0; Connection. CursorLocation= 3; Сообщить(Connection.ConnectionString); Connection.Open(); Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection=Connection; Command.CommandType = 1; Command.CommandTimeout=0; Command.CommandText=ТекстЗапроса; //RecordSet = Новый COMОбъект("ADODB.RecordSet"); РекордСет=Command.Execute(); Резулт=""; Пока РекордСет<>неопределено Цикл Если РекордСет.Fields.Count>0 Тогда Поле=РекордСет.Fields(0); Стр=Поле.Name+" "+Поле.Value; Если ЗначениеЗаполнено(Резулт) тогда Резулт=Резулт+" |"+Стр иначе Резулт=Стр; КонецЕсли; КонецЕсли; РекордСет=РекордСет.NextRecordSet(); КонецЦикла; Сообщить(Резулт); Возврат Резулт КонецФункции |
|||
64
sergdi
10.05.12
✎
18:11
|
(63) Хотел из VB создавать новые документы и чтобы не надо было корректировать названия таблиц, если база поменялась.
|
|||
65
Serginio1
10.05.12
✎
18:16
|
(64) Подключись к 1С через COM и узнавай поля. Вообще то если файл конфигурации один и тотже то все поля одинаковы, просто у тебя из-за обновлений разошлись имена. У меня две базы одна тестовая другая рабочая и все поля одинаковы хотя я и обновляю через слияние.
|
|||
66
sergdi
10.05.12
✎
18:23
|
(65) Подключаться к 1С можно, но наверное сами имена таблиц должны тоже храниться в таблице, но я не нашел где.
|
|||
67
Serginio1
10.05.12
✎
18:42
|
Воспользуйся советом shuhard (61) и сообщи нам
|
|||
68
NcSteel
10.05.12
✎
18:47
|
(31)
|
|||
69
NcSteel
10.05.12
✎
18:47
|
(68) + известно как
|
|||
70
NcSteel
10.05.12
✎
18:48
|
(61) это лишнее, достаточно открыть проф разработку
|
|||
71
Serginio1
10.05.12
✎
19:00
|
67. По уму вся информация хранится в конфигурационном файле хранящееся в поле Config BinaryData [jnz vjue b jib,fnmcz. Скорее всего из него и надо вытаскивать информацию.
|
|||
72
0xFFFFFF
10.05.12
✎
21:07
|
(21) "Для начала хочу создавать элементы справочника контрагенты."
Страшно подумать о последующих желаниях, но тем не менее спрошу - а накуа? У тя каждый день появляется мильен контрагентов, которых нужно напихать в базу? Откуда возникло такое страстное желание сэкономить несколько секунд и приобрести геморроя на несколько месяцев? |
|||
73
Ненавижу 1С
гуру
10.05.12
✎
21:11
|
ну в 7.7 же писали и проводили так даже документы
не пробовал: мне на собеседовнаии года 4 назад рассказывали |
|||
74
sergdi
11.05.12
✎
09:21
|
(72) 1C 8.2 не поддерживает распределенные транзакции при обмене данными с другой программой
|
|||
75
nicxxx
11.05.12
✎
09:57
|
(73) в 7.7 и структура базы попроще
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |