Имя: Пароль:
1C
1С v8
Определить Тип объекта через сом соединение
,
0 SlavCO
 
21.04.13
15:59
Всем привет.
Стоит задача перезалить в базу 1 из базы 2 некоторые документы.
Если в реализации товаров в базе2 поле сделка имеет тип "Счет на оплату покупателю", то предварительно залить этот счет, а уже потом эту реализацию

Столкнулся с тем, что не получается определить тип поля "Сделка" и узнать что там стоит - счетнаоплату или заказ

Может кто-нибудь стыкался с такой проблемой?
1 craxx
 
21.04.13
15:59
Волшебное слово Метаданные
2 SlavCO
 
21.04.13
16:01
Я так и думал, но чуть поподробнее, плз
3 craxx
 
21.04.13
16:02
конкретно Метаданные.Имя
4 SlavCO
 
21.04.13
16:04
У меня есть переменная док, которая имеет тип com объект. док.метаданные.имя  - выдает ошибку :(
5 craxx
 
21.04.13
16:05
кусок кода полностью сюда запости
6 SlavCO
 
21.04.13
16:08
док = ком.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ном,ДатаЗ);

Теперь мне нужно определить тип поля

док.сделка
7 SlavCO
 
21.04.13
16:09
док.сделка.метаданные.имя  - ошибка
8 SlavCO
 
21.04.13
16:10
Сорри, я Лошара. () не поставил после метаданные. Извини.

Спасибо и большой Респект
9 Wobland
 
21.04.13
16:10
(7) в которой русским языком всё написано, да?
10 craxx
 
21.04.13
16:10
Если Док.Сделка<>Неопределено Тогда
    Если Док.Сделка.Метаданные.Имя="ЗаказПокупателя" Тогда
         //............................................
    КонецЕсли;
КонецЕсли;
11 GANR
 
21.04.13
16:12
// пример 1
СсылкаCOM = COM.ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Ссылка));
СсылкаЭтаБаза = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(СсылкаCOM));

Если ТипЗнч(СсылкаЭтаБаза) = тип("ДокументСсылка.Документ1") Тогда
   // ...
ИначеЕсли ТипЗнч(СсылкаЭтаБаза) = тип("ДокументСсылка.Документ2") Тогда
   // ...
Иначе
   ВызватьИсключение "Непригодный тип документа";
КонецЕсли;

// пример 2
ПолноеИмя =СсылкаCOM.Метаданные().ПолноеИмя();
Имя = СсылкаCOM.Метаданные().Имя;
12 SlavCO
 
21.04.13
16:12
Все уже работает, я кавычки забыл поставить. Всем спасибо и хорошего настроения
13 craxx
 
21.04.13
16:14
(11)не прокатит... у тебя ком, там все типы имеют "СОМобъект"
14 craxx
 
21.04.13
16:14
и внутреннее значение тоже тупо другое будет
15 GANR
 
21.04.13
16:15
(13) это лишь примеры - не рабочий код
16 GANR
 
21.04.13
16:18
(13) ЗначениеВСтрокуВнутр / ЗначениеИзСтрокиВнутр спасали нас не раз уже.
17 GANR
 
21.04.13
16:25
Да, +(11)(13), исправим
СсылкаCOM = COM.ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Ссылка));
СсылкаЭтаБаза = ЗначениеИзСтрокиВнутр(COM.ЗначениеВСтрокуВнутр(СсылкаCOM));
18 craxx
 
21.04.13
16:29
(17) да не прокатит такой вариант...
не факт что одинаковые айдишники обоих документов
для перечислений вероятность такого больше, если конфы идентичные
19 GANR
 
21.04.13
16:39
(18) Если одна конфа копия другой - ссылки будут одинаковые и GUIDы (или UUID)  м е т а д а н н ы х   тоже. Вот имена таблиц в MS SQL будут разными - это да. И ЗначениеВстрокуВнутр в разных базах из-за этого вернет неодинаковое значение - были споры по этому поводу
v8: ЗначениеИзСтрокиВнутр разные строки, ссылка одна.
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=605639#605639
20 GANR
 
21.04.13
16:43
+(19) За конфу cf-cfu не ручаюсь, но если dt выгрузить/загрузить - точно
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс