Имя: Пароль:
1C
 
Как программно определить, что это именно менеджер записи регистра сведений
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) И причем здесь попытка?
Не стоите выдавать свою лень и некомпетентность за "заботу о пользователе"
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.