Имя: Пароль:
1C
 
COM: Определить наличие реквизита с заданным именем у документа COM - объекта
0 bvb
 
21.10.20
15:56
собственно сабж

   и  &НаСервере
1 bvb
 
21.10.20
15:58
Пытался применить штуку :
Функция ЕстьРеквизитОбъекта(Объект, ИмяРеквизита) Экспорт
    
    КлючУникальности   = Новый УникальныйИдентификатор;
    
    СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
    
    ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект);
    
    Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
    
КонецФункции


Но на сервере она не живет
2 acht
 
21.10.20
17:30
(1) > Но на сервере она не живет
Живет
3 Hmster
 
21.10.20
17:35
НЕ Объект.Метаданные().Реквизиты.Найти(ИмяРеквизита) = Неопределено
Так не работает?
4 MikhaNik
 
21.10.20
17:46
Если Объект это из COM соединения, то и идентификатор и структуру надо создавать на той стороне
Вместо Новый
используем
Открытие.NewObject("");
т.е. в данной функции не хватает ссылки на "Открытие"
5 bvb
 
21.10.20
17:46
(3)
6 bvb
 
21.10.20
17:47
(1)КлючУникальности   = Новый УникальныйИдентификатор;  недоступно на сервере
(3) нет
7 acht
 
21.10.20
18:22
(6) Доступно

Нехер бездумно копировать куски кода.
КлючУникальности - это реквизит формы. Объект - основной реквизит формы.
8 Little Friend
 
21.10.20
19:33
COMПодключение = Новый COMОбъект("V83.COMConnector");
COMОбъект = COMПодключение.Connect("File=""D:\1C\Проекты\TempBase8"";Usr=""Администратор (ОрловАВ)"";Pwd="""";");

Если COMОбъект.Метаданные.Документы.ПриобретениеТоваровУслуг.Реквизиты.Найти("Валюта") <> Неопределено Тогда
    Сообщить(НСтр("ru='Реквизит существует'"));
Иначе
    Сообщить(НСтр("ru='Реквизит отсутствует'"));
КонецЕсли;
9 Little Friend
 
21.10.20
19:43
// Если есть конкретный объект, например, найденный по номеру документ.
COMДокумент = COMОбъект.Документы.ПриобретениеТоваровУслуг.НайтиПоНомеру("ТД00-000003", '20180101');

// Вариант через метаданные.

Если COMДокумент.Метаданные().Реквизиты.Найти("Валюта") <> Неопределено Тогда
    Сообщить(НСтр("ru='Реквизит существует'"));
Иначе
    Сообщить(НСтр("ru='Реквизит отсутствует'"));
КонецЕсли;

// Вариант со заполнением структуры.

ИмяРеквизита = "Валюта";

COMКлюч = COMОбъект.NewObject("УникальныйИдентификатор");

COMСтруктура = COMОбъект.NewObject("Структура");
COMСтруктура.Вставить(ИмяРеквизита, COMКлюч);

COMОбъект.ЗаполнитьЗначенияСвойств(COMСтруктура, COMДокумент);

Если COMСтруктура[ИмяРеквизита] <> COMКлюч Тогда
    Сообщить(НСтр("ru='Реквизит существует'"));
Иначе
    Сообщить(НСтр("ru='Реквизит отсутствует'"));
КонецЕсли;
10 Little Friend
 
21.10.20
19:46
(6) КлючУникальности   = Новый УникальныйИдентификатор;  недоступно на сервере
недоступен на сервере ключ уникальности, т.к. - это реквизит формы, который недоступен на сервере. Используется другое имя переменной.
Например, просто
Ключ = Новый УникальныйИдентификатор
11 Little Friend
 
21.10.20
19:46
(10) Используется другое имя переменной = ИспользуЙТЕ другое имя переменной.
12 Little Friend
 
21.10.20
19:53
Хотя можно упростить проверку через структуру. Не обязательно объекты создавать на стороне COM объекта.

ИмяРеквизита = "Валюта";

Ключ = Новый УникальныйИдентификатор;
Структура = Новый Структура(ИмяРеквизита, Ключ);
ЗаполнитьЗначенияСвойств(Структура, COMДокумент);

Если Структура[ИмяРеквизита] <> Ключ Тогда
    Сообщить(НСтр("ru='Реквизит существует'"));
Иначе
    Сообщить(НСтр("ru='Реквизит отсутствует'"));
КонецЕсли;
13 bvb
 
22.10.20
15:35
Спасибо большое Маленький Друг . Все получилось
Я не просек что КлючУникальности

Вот функция все получилось :

&НаСервере
Функция ЕстьРеквизитCOMОбъекта(COMОбъект, ИмяРеквизита) Экспорт
    Ключ   = Новый УникальныйИдентификатор;
    Структура = Новый Структура(ИмяРеквизита, Ключ);
    ЗаполнитьЗначенияСвойств(Структура, COMОбъект);
    Возврат Структура[ИмяРеквизита] <> Ключ;
КонецФункции