|
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Объект); Возврат Структура[ИмяРеквизита] <> Ключ; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |