|
Проверить значение на План Видов Характеристик | ☑ | ||
---|---|---|---|---|
0
PaulMuller
30.07.18
✎
17:50
|
Формирую текст запроса в цикле. Для правильного формирования мне нужно заранее знать, является ли реквизит документа (или каталога, или ТЧ того или иного, неважно) типом План Видов Характеристик. Если в конфигураторе явно задать реквизиту тип "ПХВТакойТо", и проверить тот же реквизит на тип программно, то выдаст Описание типов, со всеми прописанными в Плане Характеристик типами, когда все что мне нужно, это знание, что вот этот реквизит имеет тип ПХВ, а в идеале и название Плана видов характеристик. Повторюсь, заранее я не знаю мой реквизит имеет просто ссылочный тип, составной тип или ПХВ, поэтому для правильного формирования запроса это мне и нужно узнать. С радостью привел бы код, но он уж совсем не информативен для поставленного вопроса.
Пытался так: Метаданные.Документы.ДокТакойТО.ТабличныеЧасти.НазваниеТЧ.Реквизиты.НужныйРеквизитДляПРоверки.Тип Возвращает Описание типов, а мне нужно получить "План видов характеристик такой - то". |
|||
1
Lexey_
30.07.18
✎
17:54
|
(0) Метаданные.Документы.ДокТакойТО.ТабличныеЧасти.НазваниеТЧ.Реквизиты.НужныйРеквизитДляПРоверки.Тип.Типы()
|
|||
2
PaulMuller
30.07.18
✎
17:56
|
Зачем мне типы? Мне нужен именно тот контейнер ПХВ в котором эти типы прописаны.
|
|||
3
PaulMuller
30.07.18
✎
17:57
|
Грубо говоря увидеть объект метаданных ПХВТакойТо, а не типы которые он содержит.
|
|||
4
hhhh
30.07.18
✎
18:04
|
(3) ну там и будет тип пхв.
|
|||
5
hhhh
30.07.18
✎
18:06
|
(3) или ты думаешь, что метаданные на ходу расшифровываются, ты у реквизита задал тип пвх, а у тебя вдруг возникли 70 типов неизвестно откуда? Там точно будет один тип, без вариантов.
|
|||
6
ДНН
30.07.18
✎
18:13
|
(0) Метаданные.ПланыВидовХарактеристик.Содержит(Метаданные.Документы.ДокТакойТО.ТабличныеЧасти.НазваниеТЧ.Реквизиты.НужныйРеквизитДляПРоверки)
|
|||
7
PaulMuller
30.07.18
✎
19:50
|
(1) Не то, выдает список типов прописанных в указанном ПХВ, а мне нужно само ПХВ, в котором эти типы прописаны.
(4) Тип "План видов характеристик" ? Сомневаюсь (+ проверил, правильно сомневался) Там типы, которые данный ПХВ сохержит, а не сам ПХВ. (5) Нет, не думаю. Там 1 уже выбранный тип, но мне нужен не он, а ПХВ в котором он прописан (6) Хорошая идея, но нет. Если у меня в документе реквизит назван как "Реквизит1", с типом "ПХВТакойТо", то в Метанные.ПланыВидовХарактеристик у меня набор типов, и нет атрибутов никаких. "Реквизит1" оно не найдет у меня ни при каких условиях, и будет выдавать false. |
|||
8
PaulMuller
30.07.18
✎
19:52
|
ПХВ - я имею ввиду ПВХ, очепятка
|
|||
9
youalex
30.07.18
✎
20:36
|
У ОписанияТипов - есть метод Типы()
У Метаданных - есть Метаданные.НайтиПоТипу() Еще есть Метаданные.ПланыВидовХарактеристик.Содержит() как вариант |
|||
10
Cyberhawk
30.07.18
✎
20:41
|
Метод "Метаданные" от значения реквизита даст тебе объект МД = ПВХ
|
|||
11
PaulMuller
31.07.18
✎
12:39
|
(10) Блин, возможно это и работает, пытался применить, но в моем случае, значение реквизита у меня на данном этапе нету, я его честно говоря и пытаюсь вытянуть этим запросом, который формирую. Неужели нет возможности узнать тип реквизита "ПВХ" через метаданные?
|
|||
12
Вафель
31.07.18
✎
12:40
|
(11) нельзя.
Но без этого можно и обойтись |
|||
13
Cyberhawk
31.07.18
✎
12:41
|
"узнать тип реквизита "ПВХ" через метаданные?" // Покажи на картинке, что это за реквизит (где он в метаданных)
|
|||
14
Вафель
31.07.18
✎
12:42
|
(13) посмотри регистр "ДопСвойства" измерение "Значение"
|
|||
15
PaulMuller
31.07.18
✎
12:46
|
(13) https://drive.google.com/file/d/1PTMPdZVItTh5zCgP3Dw7a5EA3_m1qOb5/view?usp=sharing
Ну вот, это то что я хочу получить |
|||
16
Cyberhawk
31.07.18
✎
13:15
|
Все равно не ясно, что автор хочет получить. То ли то, что в дереве метаданных, то ли тип конкретного значения в реквизите объекта БД?
|
|||
17
Lexey_
31.07.18
✎
13:27
|
(15) так это не ПВХ, а Характеристика
|
|||
18
PaulMuller
31.07.18
✎
13:48
|
(16) Тип конкретного значения меня на данном этапе не интересует. Только коллекция в которой этот тип находится. (17) А характеристику можно узнать через метаданные? Возможно я действительно по незнанию не правильно назвал то что я хочу получить.
|
|||
19
Мыш
31.07.18
✎
13:56
|
(18) Свойство ПВХ.
ОбъектМетаданных: ПланВидовХарактеристик (MetadataObject: ChartOfCharacteristicTypes) Характеристики (Characteristics) Использование: Только чтение. Описание: Тип: ОписанияХарактеристик. Содержит описания характеристик плана видов характеристик. |
|||
20
youalex
31.07.18
✎
13:59
|
(18) ну, типа ты можешь сравнить типы в твоем реквизите с типами из (19)
|
|||
21
RomanYS
31.07.18
✎
14:02
|
Попробую "расшифровать" проблему ТС.
В конфигураторе у реквизита стоит тип, например, Характеристика.ВидыСубконтоХозрасчетные, но когда вы этот тип проверяете через метаданные, то возвращается составной тип состоящих из типов доступных для ПВХ. ТС не знает как это обойти. |
|||
22
youalex
31.07.18
✎
14:05
|
сравнить два описания типа, из Метаданные.Док.ТЧ.Рек.Тип
И Метаданные.ПланВидовХарактеристик.ПВХ.Тип больше, вроде никак, то что можно выбрать в свойстве реквизита "Характеристика." - это не тип, а описание типов, аналог (предтеча) определяемых типов |
|||
23
PaulMuller
31.07.18
✎
14:07
|
(21) <3
|
|||
24
Вафель
31.07.18
✎
14:09
|
Это ты так субконто чтоли проверяешь?
Задай через массив имена реквизитов |
|||
25
RomanYS
31.07.18
✎
14:09
|
(22) похоже, что так. При этом совпадении типов никак не гарантирует, что в конфигураторе выбран "тип" характеристика.... Возможно просто выбран (вручную) совпадающий составной тип.
|
|||
26
PaulMuller
31.07.18
✎
14:14
|
(25) Согласен, в теории это может произойти и создаст кучу проблем.
Может есть костыли на примете? Например трай кетчем (попытка/исключение), или еще как-то... Я пока попробую реализовать что-то подобное, отпишу потом в тему. |
|||
27
тарам пам пам
31.07.18
✎
14:25
|
(26) ты бы лучше написал, на кой черт тебе знать, что в реквизите именно характеристика, а не просто составной тип. Все запросы ведь должны совпадать в любом случае.
|
|||
28
PaulMuller
31.07.18
✎
14:34
|
(27) Формируя запрос, в отбор мне нужно подставлять мой реквизит, и сравнивать его с нужным мне значением. Но заранее я реквизит не знаю. И если этот реквизит имеет тип ПВХ, то мне нужно сравнивать через .Value, иначе без.
Вот, пример кода, даже вся функция, если разберетесь. Спрашивайте что не понятно, постараюсь разъяснить. <code> &AtServer Function SelectRequiredAttributeInListOfPossiblePlacements(RelatedObjectsList) _UnionAll = " | |UNION ALL | |"; ConfigurationObjectRepresentation =""; ConfigurationObjectNameRepresentation =""; ConfigurationObjectAttributeRepresentation =""; ConfigurationObjectTabularSectionRepresentation =""; ConfigurationObjectRequiredAttributeRepresentation =""; ConfigurationObjectTabularSectionAttributeRepresentation =""; //--------------------------------------------------------query forming start --------------------------------------------------------\\ RefsVT = new ValueTable; RefsVT.Columns.Add("ReferenceToDocOrCatalog", new TypeDescription("String")); For Each Row in ItemsToChange do if not Row.Check then continue; endif; Query = New Query; Query.Text = ""; For Each Relation in RelatedObjectsList do if NOT Metadata.Documents[Relation.ObjectName] = undefined then MetadataConfigurationObject = "Document"; elsIf NOT Metadata.Catalogs[Relation.ObjectName] = undefined then MetadataConfigurationObject = "Catalog"; endIf; IsCharacteristic = ?( IsCharacteristic_(MetadataConfigurationObject, Relation.ObjectName, Relation.TabularSectionAttributeMetaObj, Relation.AttributeMetaObj) ,".Value",""); ConfigurationObjectRepresentation =""; ConfigurationObjectNameRepresentation =""; ConfigurationObjectAttributeRepresentation =""; ConfigurationObjectTabularSectionRepresentation =""; ConfigurationObjectRequiredAttributeRepresentation =""; //ConfigurationObjectTabularSectionAttributeRepresentation =""; ConfigurationObjectRequiredTabularSectionAttributeRepresentation =""; ConfigurationObjectRepresentation = MetadataConfigurationObject; ConfigurationObjectNameRepresentation = Relation.ObjectName; ConfigurationObjectAttributeRepresentation = Relation.AttributeMetaObj; ConfigurationObjectTabularSectionRepresentation = Relation.TabularSectionAttributeMetaObj; ConfigurationObjectRequiredAttributeRepresentation = Row.Reference;//REF ON OLD VALUE //ConfigurationObjectTabularSectionAttributeRepresentation = Relation.TabularSectionAttributeMetaObj; ConfigurationObjectRequiredTabularSectionAttributeRepresentation = Row.Reference;//REF ON OLD VALUE Template = "SELECT | "+ConfigurationObjectNameRepresentation+".Ref |FROM | "+ConfigurationObjectRepresentation+"."+ConfigurationObjectNameRepresentation+" AS "+ConfigurationObjectNameRepresentation+" |WHERE | "+ ?(not ValueIsFilled(ConfigurationObjectTabularSectionRepresentation), //if true ConfigurationObjectNameRepresentation+"."+ConfigurationObjectAttributeRepresentation+IsCharacteristic+" = &ConfigurationObjectRequiredAttributeRepresentation", //if false ConfigurationObjectNameRepresentation+"."+ConfigurationObjectTabularSectionRepresentation+"."+ConfigurationObjectAttributeRepresentation+IsCharacteristic+" = &ConfigurationObjectRequiredAttributeRepresentation") +""; Query.Text = Query.Text + ?(ValueIsFilled(Query.Text), //If true _UnionAll + Template ,//if false Template ); endDo; Query.Parameters.Insert("ConfigurationObjectRequiredAttributeRepresentation",Row.Reference); SelectionDetailRecords =Query.Execute().Select(); While SelectionDetailRecords.Next() Do row = RefsVT.Add(); row.ReferenceToDocOrCatalog = SelectionDetailRecords.Ref; EndDo; endDo; return RefsVT; endFunction </code> |
|||
29
PaulMuller
31.07.18
✎
14:40
|
Суть задачи свел к
IsCharacteristic = ?( IsCharacteristic_(MetadataConfigurationObject, Relation.ObjectName, Relation.TabularSectionAttributeMetaObj, Relation.AttributeMetaObj) ,".Value",""); |
|||
30
DomovoiAtakue
31.07.18
✎
14:58
|
Это база в Польше?
|
|||
31
тарам пам пам
31.07.18
✎
14:59
|
(28) Что-то ты не то пытаешься сделать. В параметре RelatedObjectsList что передается? Понятно что коллекция, что в элементах этой коллекции? Ты случаем не пытаешься руками платформенный механизм характеристик повторить?
|
|||
32
PaulMuller
31.07.18
✎
14:59
|
(30) нееееисключено!
|
|||
33
PaulMuller
31.07.18
✎
15:05
|
(31) Мне нужно создать обработку массового заполнения реквизитов, по типу стандартных, но со своими фишками, и от части мне нужно получать ссылки на все документы и справочники в которых присутствует изменяемый реквизит (похожее реализовано в стандартной обработке Удаление помеченных на удаление).
в RelatedObjectsList коллекция "адресов" возможного размещения нужного мне значения в строковом представлении, например: строка Документ строка ДокументТакойТо строка ТЧДокумента (может отсутствовать) строка НазваниеАтрибута и так енное кол-во строк |
|||
34
PaulMuller
31.07.18
✎
15:06
|
Имеется ввиду одна строка содержит строковые колонки описанные выше.
|
|||
35
тарам пам пам
31.07.18
✎
15:20
|
Так куда ты там собрался .Value добавлять? Для поиска ссылок тебе просто нужно, чтобы в твоем RelatedObjectsList присутствовала строка с нужным адресом. Например, для ERP и справочника Номенклатура: Relation.ObjectName = "Номенклатура", Relation.TabularSectionAttributeMetaObj = "ДополнительныеСвойства", Relation.AttributeMetaObj = "Значение". И запрос ничем не будет отличаться от поиска по обычному реквизиту в таб. части.
|
|||
36
PaulMuller
31.07.18
✎
15:33
|
(35) оу, спасибо, буду вкуривать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |