|
Com соединение, вопрос по ссылочным типам. | ☑ | ||
---|---|---|---|---|
0
redding
24.03.15
✎
09:58
|
Получаю базу по com соединению, в ней есть реквизит ссылочного типа, естественно в базе, в которой работаю этот реквизит имеет тип "com объект".
Задача в том, чтобы присвоить значение этому реквизиту из той же базы, которая получена по com, реквизит, который нужно присваивать на моей стороне тоже имеет тип "com объекта", реально ли провернуть такое? |
|||
1
Cube
24.03.15
✎
10:00
|
(0) А ты думал, ты первый такой?
Тип = "Справочник.Валюты"; УникальныйИдентификатор = Строка(СсылкаНаОбъект.УникальныйИдентификатор()); НайденноеЗначение = БазаУПП.XMLЗначение(БазаУПП.ИзXMLТипа(БазаУПП.XMLТипЗнч(БазаУПП.ПредопределенноеЗначение(Тип + ".ПустаяСсылка"))), УникальныйИдентификатор); |
|||
2
Ненавижу 1С
гуру
24.03.15
✎
10:01
|
то есть объекты в одной базе таки?
тогда да |
|||
3
butterbean
24.03.15
✎
10:01
|
если я правильно понял, то тебе нужно в "своей" базе создать такой объект, записать, и ссылку на него уже пихать в реквизит
|
|||
4
бомболюк
24.03.15
✎
10:01
|
запросто
|
|||
5
redding
24.03.15
✎
10:10
|
(2) Объекты в одной базе, но на стороне подключения.
(3) как раз таки в "чужой"), в своей все просто. (4) А поподробнее? |
|||
6
redding
24.03.15
✎
10:13
|
(1) И чего я этим добьюсь? На текущий момент, есть два реквизита с типом "com объект" нужно на стороне базы, к которой я подключаюсь, присвоить один другому.
|
|||
7
butterbean
24.03.15
✎
10:15
|
(5) это в чужой все просто, ничего создавать не надо, получай ссылки, пихай в реквизиты
|
|||
8
redding
24.03.15
✎
10:16
|
(7) Чужая это база, к которой я подключаюсь...
А сделать мне все нужно на стороне базы из которой я подключаюсь. |
|||
9
redding
24.03.15
✎
10:17
|
Запутал сам себя).
база1 - к которой я подключаюсь. база2 - моя база, в которой код исполняется. Нужно на стороне базы2 выполнить эти манипуляции. |
|||
10
butterbean
24.03.15
✎
10:19
|
(9) короче, все также как и при работе внутри одной базы: получаешь объект, заполняешь реквизит, записываешь...
|
|||
11
redding
24.03.15
✎
10:22
|
(10) Они имеют тип "com объекта", если я их просто так запишу, никакого профита в базе1 не будет), потому что в базе1 заполняемые реквизиты ссылочного типа.
|
|||
12
Cube
24.03.15
✎
10:22
|
(6) А, так тебе не надо из базы в базу тащить? Тогда просто "равно"...
Документ.Реквизит = ЗначениеРеквизита. |
|||
13
Ненавижу 1С
гуру
24.03.15
✎
10:24
|
(11) ты пробовал?
|
|||
14
redding
24.03.15
✎
10:28
|
(12) Надо, конечно тащить, иначе все было бы просто.
На стороне базы2 (моей базы) имею два реквизита с типом "com", они получены из базы1 и имеют одинаковый тип в базе1, Мне нужно на стороне базы2 провести с ними манипуляции, чтобы в базе1 один реквизит записался в другой. |
|||
15
redding
24.03.15
✎
10:28
|
(13) Конечно.
|
|||
16
Cube
24.03.15
✎
10:31
|
(14) Вываливай код уже, объяснять ты не умеешь.
|
|||
17
hhhh
24.03.15
✎
10:32
|
(14) это базы 2 они видны как com объекты. А если глянуть из базы 1, то это самые обычные ничем не примечательные объекты. И работать с ними сплошная скукотища, точно так же с подключением, как и без подключения. Обычным тупым присваиванием и обычными операторами.
|
|||
18
redding
24.03.15
✎
10:38
|
(16) Я старался)
Если ТипЗнч(ВыборкаДетальныеЗаписи.Значение) = Тип("СправочникСсылка.ЗначенияСвойствОбъектов") Тогда СТч.Значение = БазаИсточник.Справочники.ЗначенияСвойствОбъектов.найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение); Иначе Стч.Значение = ВыборкаДетальныеЗаписи.Значение; КонецЕсли; |
|||
19
redding
24.03.15
✎
10:40
|
(16) В ветке иначе примитивные типы и все отрабатывает.
Стч.Значение - com объект. БазаИсточник.Справочники.ЗначенияСвойствОбъектов.найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение); - тоже com объект, данные в базе1 находятся. |
|||
20
redding
24.03.15
✎
10:40
|
(17) Ну вот не хотят ссылочные типы тупым присваиванием присваиваться).
|
|||
21
butterbean
24.03.15
✎
10:43
|
(18) код ты выкладываешь еще хуже, чем объясняешь
|
|||
22
Ненавижу 1С
гуру
24.03.15
✎
10:44
|
(18) мне кажется тут достаточно
Стч.Значение = ВыборкаДетальныеЗаписи.Значение; |
|||
23
Cube
24.03.15
✎
10:44
|
(21) +100 =))
|
|||
24
Cube
24.03.15
✎
10:47
|
(18) И что это? Где здесь COM объекты угадать надо?
ВыборкаДетальныеЗаписи.Значение - это COM объект? Если да, то делать надо так: Если БазаИсточник.ТипЗнч(ВыборкаДетальныеЗаписи.Значение) = БазаИсточник.Тип("СправочникСсылка.ЗначенияСвойствОбъектов") Тогда СТч.Значение = БазаИсточник.Справочники.ЗначенияСвойствОбъектов.найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение); Иначе Стч.Значение = ВыборкаДетальныеЗаписи.Значение; КонецЕсли; |
|||
25
hhhh
24.03.15
✎
10:48
|
(19) но ведь тупо бред
найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение); в найти по наименованию строка должна передаваться. а тут ВыборкаДетальныеЗаписи.Значение это же справочник, не строка. |
|||
26
redding
24.03.15
✎
10:49
|
(24) нет, выборкаДетальныезаписи не com объект, все что связано с com я описал:
Стч.Значение - com объект. БазаИсточник.Справочники.ЗначенияСвойствОбъектов.найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение); - тоже com объект, данные в базе1 находятся. Отладчик в эту строчку: СТч.Значение = БазаИсточник.Справочники.ЗначенияСвойствОбъектов.найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение); заходиn |
|||
27
hhhh
24.03.15
✎
10:49
|
БазаИсточник.Справочники.ЗначенияСвойствОбъектов.найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение.Наименование)
|
|||
28
redding
24.03.15
✎
10:50
|
(25) Нормально это отрабатывает, передается строка.
|
|||
29
redding
24.03.15
✎
10:50
|
(27) Все ок с этим, данные в базе1 находятся)
|
|||
30
hhhh
24.03.15
✎
10:51
|
(28) а это?
Если ТипЗнч(ВыборкаДетальныеЗаписи.Значение) = Тип("СправочникСсылка.ЗначенияСвойствОбъектов") Тогда кто-то из черепашек врет? ПЕредается справочник. |
|||
31
hhhh
24.03.15
✎
10:52
|
понял, вы вообще другой кусок программы выложили сюда.
|
|||
32
Cube
24.03.15
✎
10:52
|
Не всё, я больше не могу выносить этот поток сознания... Епи(зачеркнуто) разбирайтесь дальше без меня...
|
|||
33
redding
24.03.15
✎
10:53
|
(30) Никто не врет), код просто не подредактировал.
Говорю же проблема не в этом, в отладчике вижу, что объект находится |
|||
34
redding
24.03.15
✎
10:54
|
(32) Ну а что надо то еще? Код скинул, если весь код процедуры скидывать, то он огромен и будет большое не кому не нужное полотно
|
|||
35
redding
24.03.15
✎
10:57
|
(32) СТч.Значение = БазаИсточник.Справочники.ЗначенияСвойствОбъектов.найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение);
Проблема в этой строчке, отладчик в нее заходит. на стороне базы к которой подключаюсь тип у них одинаковый. на стороне базы к которой код выполняю, оба имеют тип com объекта. БазаИсточник.Справочники.ЗначенияСвойствОбъектов.найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение); значение из базы1 находится Я хз, что еще рассказать.... |
|||
36
hhhh
24.03.15
✎
10:58
|
Если ТипЗнч(ВыборкаДетальныеЗаписи.Значение) = Тип("СправочникСсылка.ЗначенияСвойствОбъектов") Тогда
ВыборкаДетальныеЗаписи.Значение тип справочникСсылка. А на словах нам говорите, что ВыборкаДетальныеЗаписи.Значение - строка. |
|||
37
hhhh
24.03.15
✎
10:59
|
(35) а как поняли, что значение находится? Если не найдется, тоже будет тип com-объект.
|
|||
38
hhhh
24.03.15
✎
11:00
|
ладно, тоже ушел
|
|||
39
redding
24.03.15
✎
11:00
|
(36) так и есть это строка.
(37) "Заглянул" в com объект в отладчике |
|||
40
hhhh
24.03.15
✎
11:04
|
(39) тогда выполняется
Иначе Стч.Значение = ВыборкаДетальныеЗаписи.Значение; |
|||
41
Cube
24.03.15
✎
11:07
|
(35) Эх, доброта моя...
Ты на стороне, где выполняешь код, хотя бы тип определи и сравни... Сообщить(БазаИсточник.Строка(БазаИсточник.ТипЗнч(БазаИсточник.Справочники.ЗначенияСвойствОбъектов.найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение)))); Сообщить(БазаИсточник.Строка(БазаИсточник.ТипЗнч(СТч.Значение))); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |