Имя: Пароль:
1C
1С v8
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) Эх, доброта моя...

Ты на стороне, где выполняешь код, хотя бы тип определи и сравни...

Сообщить(БазаИсточник.Строка(БазаИсточник.ТипЗнч(БазаИсточник.Справочники.ЗначенияСвойствОбъектов.найтиПоНаименованию(ВыборкаДетальныеЗаписи.Значение))));

Сообщить(БазаИсточник.Строка(БазаИсточник.ТипЗнч(СТч.Значение)));
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn