Вход | Регистрация
 

COM: Определить наличие реквизита с заданным именем у документа COM - объекта

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

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


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

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

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

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

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.