![]() |
|
БСП. Для чего эти функции? | ☑ | ||
---|---|---|---|---|
0
Fram
14.03.12
✎
15:53
|
Какой тайный смысл заложен в функции вроде
Функция ИмяТипаРегистрыСведений() Экспорт Возврат "РегистрыСведений"; КонецФункции ? |
|||
1
vmv
14.03.12
✎
15:56
|
для доступа к методу менеджеров объектов
допустим у нас ссылка на нечто или запись регистра, по ним мы можем узнать тип и имя объекта метаданных зная тип таблицы БД "РегистрСведений" по этой функции выходим на тип МЕНЕДЖЕРА |
|||
2
Maxus43
14.03.12
✎
15:56
|
а вдруг поменяется он?) "РегСВД" какойнить
|
|||
3
Maxus43
14.03.12
✎
15:57
|
(1) чем поможет эта функция? чтоб её вызвать мы должны знать уже что надо вызвать именно ИмяТипаРегистрыСведений()
|
|||
4
MRAK
14.03.12
✎
15:57
|
(0) такие дурные функции попадаются время от времени...
|
|||
5
vmv
14.03.12
✎
15:58
|
(2) + (1) уточню
РегистрыСведений - имя класса Менеджеров РегистрСведений - имя класса таблиц БД они, имена классов неизменны) |
|||
6
Maxus43
14.03.12
✎
16:00
|
(5) пример кода приведи где это используется лучше. не вижу практического применения
|
|||
7
Галахад
гуру
14.03.12
✎
16:00
|
Проверка на синтаксис. :-)
Вдруг кто "РегситрыСведений" напишет, а функция сразу упадет. |
|||
8
vmv
14.03.12
✎
16:00
|
(4) если посмотреть где и как они вызываються, то не такие уж и дурные - моментом получаем менеджер по ссылке или записи без дурацких поисков в метаданных, что не быстро, или преобразований хмл
|
|||
9
kuromanlich
14.03.12
✎
16:01
|
(0) наверное готовятся к возможному переходу на 9.0 ) чтобы быстро перейти
|
|||
10
IamAlexy
14.03.12
✎
16:03
|
тайный смысл большинства функций БСП: отсев из отрасли тупарей...
|
|||
11
Maxus43
14.03.12
✎
16:04
|
(8) что мешает написать руками "РегистрыСведений", коли известно что имено менеджер регистра нужен?
|
|||
12
vmv
14.03.12
✎
16:05
|
(3) опустим регистры
у меня где-то в коде, допустим при работе с УФ есть полученная ссылка на справочник "Товары", допустим "булка сдобная" и мне в УФ надо определить по этой ссылке другие показатели, которые проще всего получить через менеджер. кароче ну вас, посмотрите использование или попробуйте не писать код в лоб. эти функции позволяют шаблинизировать код, причем при в их, на первый взгляд гупости, они наиболее просто устанавливают СООТВЕТСВИЕ между классами таблиц и классами менеджеров |
|||
13
vmv
14.03.12
✎
16:07
|
(11) мешает то, что если у тебя общая форма по обработке объектов, где тип изначально составной, то ты запаришься все везде прописывать ручками или ты любитель создавать десятки форм для одной и той же логики обработки и совершенно не видишь путей унификации кода и шаблонизации алгоритмов и форм?
|
|||
14
Fram
14.03.12
✎
16:10
|
(1) А можно пример того, что ты написал?
|
|||
15
vmv
14.03.12
✎
16:11
|
(6) я не собираюсь повышать вашу квалификацию, видимо (10) прав)
|
|||
16
ptiz
14.03.12
✎
16:16
|
(13) Т.е. написать "ИмяТипаРегистрыСведений()" проще чем "РегистрыСведений"?
|
|||
17
IamAlexy
14.03.12
✎
16:18
|
(16) это задел на будущее..
вдруг решат что "регистрысведений" теперь называются "рестрыматьихтакихтосведений" в конфе бац, поправил одну строчечку и не надо переписывать все решение... походу действительно к 8.3 готовятся :) |
|||
18
Галахад
гуру
14.03.12
✎
16:18
|
(16) Ну да. ИмяТипа + Ctrl + пробел.
|
|||
19
Stim
14.03.12
✎
16:20
|
(17) да жесть. переписать впадло, а нам разбирайся в этих 100500 функциях, когда вложенность уже идет на десятки
|
|||
20
IamAlexy
14.03.12
✎
16:21
|
(19) бгыыы вложенность рулит...
это специально врагов запутывают.. не ну а чо.. процедуры печати - шикарно же..... отладчиком по ним "гулять" - самое оно... |
|||
21
ptiz
14.03.12
✎
16:21
|
(17) Если только так. Но тогда, боюсь, только этим они не отделаются.
|
|||
22
Мыш
14.03.12
✎
16:22
|
(19) Да вообще волки, понаписали конфигураций. )
|
|||
23
Stim
14.03.12
✎
16:23
|
(22) и не говори.. работать приходится)
|
|||
24
Maxus43
14.03.12
✎
16:27
|
(17) вот именно, в (3) ещё писал. а товарища vmv я не понимаю, а он ещё и в (15) обзывается)
данная функция (0) не имеет никакой практической пользы в данный момент. |
|||
25
IamAlexy
14.03.12
✎
16:28
|
(24) то что вы не видите смысла - не значит что этого смысла нет..
просто это лично ВЫ не видите смысла... |
|||
26
Maxus43
14.03.12
✎
16:29
|
(25) вы видите? кроме (2)(17)?
|
|||
27
Мыш
14.03.12
✎
16:32
|
(24) А я его понимаю. Он правильно обзывается.
|
|||
28
Stim
14.03.12
✎
16:34
|
"вдруг решат что "регистрысведений" теперь называются "рестрыматьихтакихтосведений"
в конфе бац, поправил одну строчечку и не надо переписывать все решение..." прикольно ты рассуждаешь. поправили одну строчку и во всех запросах вдруг регистрыСведений вдруг стали рестрыматьихтакихтосведений =)) |
|||
29
Maxus43
14.03.12
✎
16:35
|
(27) куды идти то мне? в грузчики?
|
|||
30
asp
14.03.12
✎
16:36
|
хорошо что проги законы не пишут. а то бы сдача отчетности усложнилась раз в 20.
|
|||
31
Maxus43
14.03.12
✎
16:36
|
(29) + никто пока не привёл примера использования именно ЭТОЙ функции. Просто никто и не знает, а обзываться все горазды)
|
|||
32
Мыш
14.03.12
✎
16:36
|
(28) Он шутит.
(29) Не, в начальники. ) |
|||
33
IamAlexy
14.03.12
✎
16:38
|
(28) ну так если у тебя объект метаданных вдруг изменил название..
что, будешь везде копипастом хреначить? а тут бац - и одну строчечу достаточно изменить :) |
|||
34
pumbaEO
14.03.12
✎
16:40
|
(33) только от запросов это не спасает, а самая большая жесть это конечно запросы в пользовательском окружении...
|
|||
35
Злобный Фей
14.03.12
✎
16:40
|
(33) От изменения запросов это не спасёт.
Если у меня поменяется объект метаданныхЪ, то у мен ядл этого в конфигураторе предусмотрена глобальная замена. |
|||
36
Stim
14.03.12
✎
16:41
|
(33) не понял. функция возвращает не имя объекта МД, а имя класса объектов. Это имя используется почти в каждом модуле. Если изменится имя класса объектов - придется переписывать всю конфу в любом случае.
Да и никто не будет менять такое. Это ведь нужно будет переписывать ВСЕ типовые и совместимые решения. Одинесники устроят митинг протеста перед зданием на селезневке |
|||
37
Нева
14.03.12
✎
16:41
|
Ну так чо, при мер использования будет али нет...
|
|||
38
Fram
14.03.12
✎
16:41
|
(33) да, действительно, а "вдруг" ))) менеджер проекта скажет "а давайте название всех объектов похерачим"
|
|||
39
Maxus43
14.03.12
✎
16:42
|
(37) нет, горазды все только на (15)(25)
|
|||
40
IamAlexy
14.03.12
✎
16:44
|
// Определяет принадлежность объекта метаданных к общему типу "Регистр сведений"
// // Параметры: // ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу // // Возвращаемое значение: // Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. // Функция ЭтоРегистрСведений(ОбъектМетаданных) Экспорт Возврат ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных) = ИмяТипаРегистрыСведений(); КонецФункции |
|||
41
IamAlexy
14.03.12
✎
16:45
|
И процедуры и функции обмена соответственно:
Процедура ВыполнитьПравилоРегистрацииОбъектаДляНабораЗаписей(МассивУзловРезультат, ПРО, Объект, ОбъектМетаданных, ИмяПланаОбмена, Замещение, Выгрузка) // определяем массив узлов-получателей по текущему набору записей ОпределитьМассивПолучателейПоНаборуЗаписей(МассивУзловРезультат, Объект, ПРО, ОбъектМетаданных, ИмяПланаОбмена, Ложь, Выгрузка); Если Замещение Тогда // определяем старый набор записей из глобального контекста ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений() Тогда СтарыйНаборЗаписей = РегистрыСведений[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыНакопления() Тогда |
|||
42
Stim
14.03.12
✎
16:45
|
(40)(41)это не то) ты давай по сабжу отдувайся)
|
|||
43
GenV
14.03.12
✎
16:45
|
Я думаю задел на будущее для обмена с конфами с основным языком не русским. Там метаданные по другому называются.
|
|||
44
IamAlexy
14.03.12
✎
16:45
|
а вот еще
|
|||
45
IamAlexy
14.03.12
✎
16:45
|
// Выполняет проверку механизма дат запрета изменения для объекта.
// Процедура используется для проверки объекта без открытия транзакции записи. // // Параметры: // Источник – объект, для которого необходимо выполнить проверку. Может быть следующих типов: // СправочникОбъект // ПланВидовХарактеристикОбъект // ПланСчетовОбъект // ПланВидовРасчетаОбъект // БизнесПроцессОбъект // ЗадачаОбъект // ПланОбменаОбъект // ДокументОбъект // РегистрСведенийНаборЗаписей // РегистрНакопленияНаборЗаписей // РегистрБухгалтерииНаборЗаписей // РегистрРасчетаНаборЗаписей // // Отказ – Булево – флаг отказа; Истина – объект не проходит проверки дат запрета изменения; Ложь – проходит. // Процедура ВыполнитьПроверкуДатыЗапретаИзменения(Источник, Отказ) Экспорт ОбъектМетаданных = Источник.Метаданные(); ИсточникиДанных = ДатыЗапретаИзмененияПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения().НайтиСтроки(Новый Структура("Таблица", ОбъектМетаданных.ПолноеИмя())); Если ИсточникиДанных.Количество() = 0 Тогда Возврат; // для текущего типа объекта не определены запреты по датам КонецЕсли; ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаСправочники() ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовХарактеристик() ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыСчетов() ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовРасчета() ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаБизнесПроцессы() ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаЗадачи() ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыОбмена() Тогда ПроверитьДатуЗапретаИзмененияПередЗаписью(Источник, Отказ); ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаДокументы() Тогда ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента(Источник, Отказ, Неопределено, Неопределено); ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений() ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыНакопления() Тогда ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписей(Источник, Отказ, Истина); ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыБухгалтерии() Тогда ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраБухгалтерии(Источник, Отказ, Неопределено); ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыРасчета() Тогда ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраРасчета(Источник, Отказ, Истина, Неопределено, Неопределено, Неопределено); КонецЕсли; КонецПроцедуры |
|||
46
Maxus43
14.03.12
✎
16:46
|
(40) ну наконецто контекст показали, тут понятно, но не понятно почему не:
Возврат ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных) = "РегистрыСведений"; |
|||
47
IamAlexy
14.03.12
✎
16:47
|
хотя да.. орать что в 1Се сидят идиоты и разрабатывают типовые полные дауны проще чем глянуть в код и воспользоваться поиском :)
|
|||
48
asp
14.03.12
✎
16:48
|
это чтобы новые процессоры Интел успешно покупались.
ведь если не накручивать код, все летало бы и на iP-III. |
|||
49
Stim
14.03.12
✎
16:48
|
бла-бла-бла. по сути функции в сабже так никто ничего и не скажет. кроме 43, пока это наиболее правдоподобное объяснение
|
|||
50
IamAlexy
14.03.12
✎
16:49
|
(49) чем тебе 45 не вариант?
|
|||
51
Stim
14.03.12
✎
16:49
|
+ хотя все равно не понятно, зачем писать
Имя = ИмяТипаРегистрыСведений(); вместо Имя = "РегистрыСведений"; |
|||
52
Нева
14.03.12
✎
16:50
|
(50) так а чем оно лучше
ИмяБазовогоТипа = "РегистрыСведений" |
|||
53
GenV
14.03.12
✎
16:50
|
(51) Менять проще. Мало ли где такая проверка есть. А так только в одном месте поменять.
|
|||
54
IamAlexy
14.03.12
✎
16:50
|
а вас не смущает то что количество секунд в дне зачастую в переменную выносят..
а не пишут в коде 24*60*60 или 86400 |
|||
55
Нева
14.03.12
✎
16:51
|
(50) я просто понять хочу, для развития так сказать...
|
|||
56
Нева
14.03.12
✎
16:52
|
(54) это другое
|
|||
57
IamAlexy
14.03.12
✎
16:52
|
(56) нет
|
|||
58
Maxus43
14.03.12
✎
16:52
|
в типовых как раз было раньше ИмяБазовогоТипа = "РегистрыСведений"
|
|||
59
Stim
14.03.12
✎
16:53
|
(53) еще раз - если придется менять "РегистрыСведений" на "РегистрыматьИхсведений", то разница будет несущественной.
Сравни, сколько раз вызывается функция ИмяТипаРегистрыСведений() и сколько раз используется в конфе словосочетание "РегистрыСведений", тогда поймешь. |
|||
60
ptiz
14.03.12
✎
16:53
|
(54) Никогда этого не понимал.
|
|||
61
Stim
14.03.12
✎
16:54
|
(54)обычно 50/50 случаются такие варианты. кста, уже был холивар на эту темы, правильнее писать именно 24*60*60
|
|||
62
Нева
14.03.12
✎
16:54
|
(60) ну читается легче, а (0) действительно не понятен
|
|||
63
pumbaEO
14.03.12
✎
16:54
|
Все равно упираемся в
Функция ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных) Экспорт Если Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда Возврат ИмяТипаДокументы(); ИначеЕсли Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда Возврат ИмяТипаСправочники(); и т.д. |
|||
64
Нева
14.03.12
✎
16:56
|
(57) ну как нет, если да.
|
|||
65
ptiz
14.03.12
✎
16:56
|
И, кстати, функции типа
ЭтоРегистрСведений() (в которых как раз применяется ИмяТипатрампампам()) работают очень неоптимально Вместо того, чтобы написать: Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных) вызывается универсальная функция (в ней тоже применяется ИмяТипа...()), которая может сделать до десятка проверок вхолостую. |
|||
66
Fram
14.03.12
✎
16:57
|
согласен, что может пригодиться при внешнем соединении. все остальные объяснения и примеры - бред
|
|||
67
Нева
14.03.12
✎
16:58
|
(66) то есть другого, сакрального смысла нет?
|
|||
68
Stim
14.03.12
✎
16:59
|
(65) просто разработки типовых ведется блочно, разными разработчиками. И универсализм уже перешел грани разумного. там, где нужны 2 простые, но разные процедуры, разработчики пишут 20 в общих модулях, передавая параметры из одной в другую
|
|||
69
Stim
14.03.12
✎
17:00
|
+имхо, конечно же
|
|||
70
Fram
14.03.12
✎
17:01
|
(67) а кто нибудь действительно верит, что они могут переименовать то, что сейчас называется "Справочник" или "Документ" и тд?
|
|||
71
Maxus43
14.03.12
✎
17:01
|
слова приписываемые Нуралиеву: "Лучше безобразно но Однообразно" (с)\
|
|||
72
Ненавижу 1С
гуру
14.03.12
✎
17:01
|
это виртуальная функция, по сути абстрактная заготовка, override нужен
|
|||
73
pumbaEO
14.03.12
✎
17:02
|
(65) Сервер - сервер хороший - облака - много облаков - греется хорошо - нагреваем воздух - воздух воду - пускаем по батареям -людям тепло - цивилизация... Ничего вы не понимаете в колбасных обрезках.
|
|||
74
Maxus43
14.03.12
✎
17:02
|
(70) один раз уже переименовали, в 8.2 :) Представление типа было "СпраочникСсылка.ТрампамПам", а щас "Трампам Пам" (т.е. синоним)
|
|||
75
Stim
14.03.12
✎
17:04
|
разработчики отсеивают халявщегов вобщем.
|
|||
76
Нева
14.03.12
✎
17:05
|
(70) ну тут люди понтуются, типа есть сакральный смысл, я понять хочу, для общего развития
|
|||
77
Нева
14.03.12
✎
17:06
|
(75) пока самый убедительный вариант.
|
|||
78
Maxus43
14.03.12
✎
17:06
|
(75)(77) т.е. халявщег увидев такой код - запутается в процедурах и поменяет профессию?
|
|||
79
GenV
14.03.12
✎
17:06
|
(59) Ты же не считаешь что конфа полностью идеальна и в ней везде будут универсальные возможности, а не простые затычки. Это просто один из способ дать универсальный механизм работы с метаданными. Я так за вариант разбор ОбъектМетаданных.ПолноеИмя(), чем чем поиск через Метаданные.Содержит().
(63) Вот если у конфы другой язык будет и изменен результат этих функций тогда думую будет понятнее ) |
|||
80
GenV
14.03.12
✎
17:09
|
79+ я с похожими сложностями столкнулся, когда метаданные грузил через внешнее соединение из конфы с английским языком. Наверное, если такой вариант использовать код будет более понятнее )
|
|||
81
Fram
14.03.12
✎
17:10
|
Интересно, что если отследить код то эти функции в результате сравниваются с самими собой или такими же функциями.
Что то они все таки задумали! |
|||
82
Jolly Roger
14.03.12
✎
17:11
|
(59) дело вовсе не в "менять". просто код ИмяБазовогоТипа = ИмяТипаСправочники() тестирования не требует и заработает сразу, а код ИмяБазовогоТипа = "Справoчники" таит в себе скрытую ошибку и хрен ты ее сразу найдешь. проверь: почему "Справочники" не равно "Справoчники"...
|
|||
83
pumbaEO
14.03.12
✎
17:12
|
(78) Сразу бы тогда писали на корявом англицком суржике. Точно тогда халявщики бы профессию поменяли.
|
|||
84
Fram
14.03.12
✎
17:12
|
(82) ну, согласился
|
|||
85
Maxus43
14.03.12
✎
17:12
|
(82) только очень суровые люди меняют раскладку посредине слова
|
|||
86
Fram
14.03.12
✎
17:13
|
(85) пунто свитчер бывает иногда очень суровым ))
|
|||
87
ilpar
14.03.12
✎
17:14
|
(0)
инкапсуляция - что ты слышал об этом ? Почитай любой тяжелый учебник по программированию на языках. |
|||
88
Jolly Roger
14.03.12
✎
17:14
|
(85) суровые или нет - не знаю, но мудрые по граблям не ходят - это точно...
|
|||
89
ilpar
14.03.12
✎
17:15
|
(87)
тут применение - возможность переопределить в будущем поведение без гемороя |
|||
90
vde69
14.03.12
✎
17:16
|
как вариант такая проверка
если не ЗначениеЗаполнено(ИмяМодуля.ИмяТипаРегистрыСведений) тогда сообщить("подсистема не установлена"); конецЕсли |
|||
91
Fragster
гуру
14.03.12
✎
17:18
|
(85) Напишешь Cgh, выматеришься, сотрешь 2 буквы и допишешь правочники - вот и не попал...
|
|||
92
Fragster
гуру
14.03.12
✎
17:19
|
(90) а разве так начилие функции можно определить?
|
|||
93
vde69
14.03.12
✎
17:20
|
(92) да
|
|||
94
Bugmenot
14.03.12
✎
17:20
|
Такая обертка в общем-то имеет смысл для часто используемых строковых констант, что бы не опечататься случайно, ИМХО.
|
|||
95
Reset
14.03.12
✎
17:21
|
Как то версия с написанием функции {Справочник() возврат "Справочник"}
только для того, чтобы, не дай бог, не ошибиться с написанием строковой константы.. выглядит натянутой, имхо |
|||
96
Fram
14.03.12
✎
17:23
|
(95) пока самое правдоподобное объяснение
|
|||
97
vde69
14.03.12
✎
17:26
|
еще как вариант - это для легкого отказа от русского транслита в метаданных
|
|||
98
pumbaEO
14.03.12
✎
17:26
|
Пальцем в небо : может для unit тестирования?
|
|||
99
Bugmenot
14.03.12
✎
17:28
|
(95) А тут уже выше было озвучено мнение, что у писателей типовых универсализация все разумные рамки перешагнула. Типа, один написал функцию в общем модуле, проверил, все остальные пользуются и синтаксический контроль на уже на 1С ложится.
|
|||
100
Stim
14.03.12
✎
17:28
|
сотга
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |