|
Как программно определить, что это именно менеджер записи регистра сведений | ☑ | ||
---|---|---|---|---|
0
SeiOkami
03.12.16
✎
14:58
|
Собственно, как вообще это сделать? Не проверять же так:
СтрНачинаетсяС(Строка(ТипЗнч(ЭлементДанных)), "Регистр сведений менеджер записи") |
|||
1
Lexey_
03.12.16
✎
15:09
|
(0) нет конечно, с типом сравнивай
|
|||
2
SeiOkami
03.12.16
✎
15:10
|
(1), как ? я уже все варианты перебрал
|
|||
3
Rio_1c
03.12.16
✎
15:11
|
Тип()
|
|||
4
Rio_1c
03.12.16
✎
15:11
|
Если ТипЗнч(...) = Тип(...) Тогда
|
|||
5
SeiOkami
03.12.16
✎
15:14
|
Нельзя так делать:
Тип("РегистрСведенийМенеджерЗаписи") Нужно указывать конкретный регистр сведений. Но не перебирать же все регистры сведейни конфигурации |
|||
6
SeiOkami
03.12.16
✎
15:17
|
пока только такой костыль придумал:
Функция ЭтоМенеджерЗаписиРегистраСведений(ЭлементДанных) ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных)); Если Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда ЭтоМенеджерЗаписиРегистраСведений = ТипЗнч(РегистрыСведений[ОбъектМетаданных.Имя].СоздатьМенеджерЗаписи()) = ТипЗнч(ЭлементДанных); Иначе ЭтоМенеджерЗаписиРегистраСведений = Ложь; КонецЕсли; Возврат ЭтоМенеджерЗаписиРегистраСведений; КонецФункции |
|||
7
SeiOkami
03.12.16
✎
15:18
|
Хотя это даже хуже будет, чем СтрНачинаетсяС(Строка(ТипЗнч(ЭлементДанных)), "Регистр сведений менеджер записи")
|
|||
8
SeiOkami
03.12.16
✎
15:19
|
Быть не может, чтобы не было нормального способа
|
|||
9
SeiOkami
03.12.16
✎
15:29
|
up
|
|||
10
SleepyHead
гуру
03.12.16
✎
15:31
|
ТипВсеСсылки() уже предлагали?
|
|||
11
SeiOkami
03.12.16
✎
15:32
|
(10) народ, вы вообще тему читаете?
При чем тут ТипВсеСсылки()? |
|||
12
Mauser
03.12.16
✎
15:33
|
Спроси у пользователя при помощи метода "Вопрос", тем самым переводишь ответвенность на него.
|
|||
13
SleepyHead
гуру
03.12.16
✎
15:33
|
Да, действительно, для регистров накопления такого метода нет.
|
|||
14
SleepyHead
гуру
03.12.16
✎
15:34
|
Ну перебирай тогда метаданные, трудно тебе что ли?
|
|||
15
SeiOkami
03.12.16
✎
15:36
|
(14), это идиотизм какой-то. Не верю, что нет нормального метода
|
|||
16
Mauser
03.12.16
✎
15:38
|
(15) Перед "не верю" надо было паузу подержать. Станиславский был бы тобоц недоволен.
|
|||
17
SeiOkami
03.12.16
✎
15:40
|
(16), я выдержал, просто по тексту это не так заметно
|
|||
18
SeiOkami
03.12.16
✎
15:55
|
Вот, так думаю лучше. Но всё равно глупость какая-то:
Функция ЭтоМенеджерЗаписиРегистраСведений(ЭлементДанных) Экспорт //ХЗ как иначе. //Или так или Возврат СтрНачинаетсяС(Строка(ТипЗнч(ЭлементДанных)), "Регистр сведений менеджер записи"); ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных)); Если Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда ЭтоМенеджерЗаписиРегистраСведений = (Тип("РегистрСведенийМенеджерЗаписи." + ОбъектМетаданных.Имя) = ТипЗнч(ЭлементДанных)); Иначе ЭтоМенеджерЗаписиРегистраСведений = Ложь; КонецЕсли; Возврат ЭтоМенеджерЗаписиРегистраСведений; КонецФункции |
|||
19
youalex
03.12.16
✎
16:07
|
Метаданные.РегистрыСведений.Содержит(Метаданные.НайтиПоТипу(ТипЗнч(МенеджерЗаписи)))
|
|||
20
SeiOkami
03.12.16
✎
16:09
|
(19), это не означает, что это именно "РегистрСведенийМенеджерЗаписи". Если в проверяемой переменной будет НаборЗаписей, то результат будет такой же
|
|||
21
Фрэнки
03.12.16
✎
16:16
|
что мешает создать такой менеджер и сравнить типы?
|
|||
22
youalex
03.12.16
✎
16:19
|
|
|||
23
youalex
03.12.16
✎
16:21
|
Или создать ОписаниеТипов, запихнуть в него менеджеры всех РС, и проверять по ОписаниеТипов.СодержитТип()
|
|||
24
SeiOkami
03.12.16
✎
16:22
|
(21), вера в то, что у 1С есть нормальные способы
|
|||
25
Фрэнки
03.12.16
✎
16:23
|
(24) вот я только не понимаю, где бы этот способ был нужен
|
|||
26
Mauser
03.12.16
✎
16:29
|
(25) Он уже создал отдельную тему с критикой БСП =)
|
|||
27
SleepyHead
гуру
03.12.16
✎
16:43
|
(24) Ты уже больше времени потратил на поиск "нормального способа".
|
|||
28
SeiOkami
03.12.16
✎
17:01
|
(27), и правильно. Чем лучше будет написан код, тем лучше будет работать ПО. А костыль всегда можно вставить
|
|||
29
h-sp
03.12.16
✎
17:02
|
(24) потому что по-нормальному делать через наборы записей. Менеджер записи - это какой-то обрубок, в общем - дерьмо.
|
|||
30
Лефмихалыч
03.12.16
✎
19:50
|
Функция ЭтоМенеджерЗаписиРегистраСведений(ОбъектДанных)
ЭтоРегистрСведений = РегистрыСведений.ТипВсеСсылки.СодержитТип(ТипЗнч(ЭлементДанных)); ЕстьДопсвойства = Ложь; Попытка Ы = ОбъектДанных.ДополнительныеСвойства; ЕстьДопсвойства = Истина; Искючение КонецПопытки; Возврат ЭтоРегистрСведений и не ЕстьДопсвойства; КонецФункции перацкий хак, но работать будет. |
|||
31
RomanYS
03.12.16
✎
20:14
|
(30) фигня какая-то
Даже если у менеджера РегистрыСведений есть свойство ТипВсеСсылки (в чём я сильно сомневаюсь), то кроме набора и менеджера записи есть ещё просто запись, регистрсведенийсписок и ключ записи. И всех нет дополнительных свойств. |
|||
32
Лефмихалыч
03.12.16
✎
20:33
|
(31) ну, замени ТипВсеСсылки на
попытка РегистрыСведений[ОбъектДанных.Метаданные().Имя] КонецПопытки делов-то. Я концепцию просто показал. |
|||
33
youalex
03.12.16
✎
20:44
|
(32) попытка , имхо, - зло там где можно обойтись без неё
|
|||
34
Матиус-IV
03.12.16
✎
21:02
|
(0) 1С вообще - глупость. Нормальные програмеры пишут на С++, на худой конец Джава. Крутые на ассемблере. Не опускайся, бро.
|
|||
35
Любопытная
03.12.16
✎
22:35
|
(0) А зачем?
|
|||
36
Лефмихалыч
03.12.16
✎
22:41
|
(33) у тебя попыткофобия
|
|||
37
youalex
03.12.16
✎
23:21
|
(36) Да) Но это лучше чем попыткофилия. Потому что - последнее - это прогрессирующая болезнь (мне приходилось иметь отношения с четвертым уровнем попытковложенности, причем без сообщений об ошибках - нет ошибки нет проблемы)
|
|||
38
Torquader
05.12.16
✎
01:48
|
(37) Иногда пользователю лучше не видеть, что что-то пошло не так, особенно, если программа потом это что-то сама исправит.
|
|||
39
Mauser
05.12.16
✎
07:10
|
(38) И причем здесь попытка?
Не стоите выдавать свою лень и некомпетентность за "заботу о пользователе" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |