Имя: Пароль:
1C
1С v8
БСП. Для чего эти функции?
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
сотга
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший