|
v7: Как сделать переопределение функции? | ☑ | ||
---|---|---|---|---|
0
Злопчинский
14.07.20
✎
13:00
|
Например, в типовых конфигах есть экспортная глобальная процедура
. глИдентификаторКонфигурации(); . допустим, есть универсальная обработка где необходимо получить идентификатор конфигурации. для типовой конфиги будет ОК. . а для нетиповой? чтобы например типа если есть глобальная экспортная процедура - то выполняется она, а если нет - то выполнить процедуру с таким же именем из кода обработки? |
|||
1
Serginio1
14.07.20
✎
13:09
|
попытка
исключение |
|||
2
Ёпрст
14.07.20
✎
13:20
|
(0) через выполняемый модуль в попытке компилируешь, если не удача, процы нет
|
|||
3
Ёпрст
14.07.20
✎
13:20
|
(1) так не катит, будет ошибка синтаксиса сразу
|
|||
4
Злопчинский
14.07.20
✎
13:22
|
(3) ошибки не будеь, если есть локальная процедура с таким же именем.. но это не поможет
|
|||
5
Злопчинский
14.07.20
✎
13:22
|
(2) это уже на крайняк...
|
|||
6
Сияющий Асинхраль
14.07.20
✎
13:24
|
Аааа... Забыл семерку, но можно ведь было прочитать идентификатор конфигурации: "Бухгалтерский учет, редакция 4.5" и даже релиз из комментария. Учитывая количество типовых это вполне можно обработать без Попытки...
|
|||
7
Ёпрст
14.07.20
✎
13:27
|
(5) почему крайняк ? кроме шаблона, у тебя штатно ничего нет
Вот наличие глоб переменной лекгко проверить, через ф=ф; |
|||
8
Злопчинский
14.07.20
✎
13:28
|
(7) а шаблон тут как?
|
|||
9
Злопчинский
14.07.20
✎
13:28
|
(7) это понятно, с этим еще фича есть, если использовать неинициализированную переменную
то а=а/0; нифига исключения не даст |
|||
10
Злопчинский
14.07.20
✎
13:30
|
(6) до этого я сам минут 10 назад дошел ;-)
но это не факт, заголовок могут поменять адски, хотя внутрях танцевать от типовой... |
|||
11
Сияющий Асинхраль
14.07.20
✎
13:35
|
(10) Ну, если уж заголовок конфы поменяли, значит уже нетиповая :-(
Просто это, по сути, единственный вариант без использования Попытки (ну не люблю я ее использовать, что в семерке, что в восьмерке). А тут, Метаданные.Идентификатор дает Название конфы, а Метаданные.Комментарий ее релиз. Ну да, ясно, что работает только для полностью типовых, ну тут уж чем-то жертвовать надо, либо попыткой, либо красотой :-( |
|||
12
Сияющий Асинхраль
14.07.20
✎
13:39
|
А еще там есть:
Метаданные.АвторРазвернутаяИнформация Метаданные.АвторКороткаяИнформация где тоже фигурирует название конфы... |
|||
13
Serginio1
14.07.20
✎
14:11
|
(3) А через вычислить?
|
|||
14
Serginio1
14.07.20
✎
14:16
|
Да давно не брал я в руки семерку. Шаблон же
|
|||
15
Злопчинский
14.07.20
✎
14:20
|
(13) Не прокатит.
если функции такой нет - даст синтаксическую ошибку, попыткой не экранируется, вернет саму строку шаблона . Попытка Результат = Шаблон("[глИдентификаторКонфигурацииА()]"); Исключение Сообщить("Ошибка "+ОписаниеОшибки()); КонецПопытки; Сообщить(Результат+", "+Метаданные.Идентификатор); . глИдентификаторКонфигурацииА<<?>>() Функция не обнаружена (глИдентификаторКонфигурацииА) [глИдентификаторКонфигурацииА()], Торговля+Склад, редакция 9.2 (в.2020-06-20-0305) |
|||
16
Сияющий Асинхраль
14.07.20
✎
14:31
|
(15) А кстати, а что ты собираешься писать, если конфа нетиповая?
|
|||
17
vova1122
14.07.20
✎
14:32
|
(0) если есть глобальная экспортная процедура - то выполняется она, а если нет - то выполнить процедуру с таким же именем из кода обработки?
А разве так можно. Стандартное поведение платформы совсем обратное. Сначала ищет процедуру в своем модуле, а если не находит, то экспортную в глобальном. |
|||
18
Сияющий Асинхраль
14.07.20
✎
14:34
|
(17) Ну никто же тебе не запрещает в обработке назначить нужной процедуре нужное тебе имя, пусть даже немножко другое, например, локИдентификаторКонфигурации()
|
|||
19
Serginio1
14.07.20
✎
14:37
|
(15) Ну тогда проще проанализировать Результат.
|
|||
20
Креатив
14.07.20
✎
14:37
|
(0)Запускай сразу свою процедуру. Она же всё равно есть.
|
|||
21
Сияющий Асинхраль
14.07.20
✎
14:38
|
+(18) И делать что-то типа:
Функция локИдентификаторКонфигурации() Попытка глИдентификаторКонфигурации() Исключение // .... КонецПопытки; КонецФункции |
|||
22
Garykom
гуру
14.07.20
✎
14:42
|
Предлагаю свою функцию написать например по набору констант через метаданные ))
|
|||
23
Aleksey
14.07.20
✎
14:44
|
(21) Процедура не обнаружена (глИдентификаторКонфигурации)
|
|||
24
Злопчинский
14.07.20
✎
14:45
|
(19) в табло вываливается ошибка, некузяво.
и, блин, где-тоя подымал ветку как подавить в табло сообщение об ошибке, там даже решение было |
|||
25
Злопчинский
14.07.20
✎
14:45
|
(21) не прокатит, обработк ане запустится, не пройдет синтаксическйи контроль
|
|||
26
Сияющий Асинхраль
14.07.20
✎
14:45
|
А, кстати, в Бухе семерочной есть константа "НомерРелиза" ручками не меняется только программно, можно поглядеть есть ли нечто подобное во всех остальных конфах...
|
|||
27
Сияющий Асинхраль
14.07.20
✎
14:46
|
+(26) Сколько я помню по номерам конфигураций можно было практически однозначно сказать что за конфа...
|
|||
28
Сияющий Асинхраль
14.07.20
✎
14:49
|
(25) Тут согласен... Лажанулся
|
|||
29
Ёпрст
14.07.20
✎
14:57
|
Чебур, не ипи мозг, сделай как в (2) и не парься
|
|||
30
Злопчинский
14.07.20
✎
15:07
|
(29) это конечно да, но всякре бывает. запрещено использование ВК и все...
|
|||
31
Ёпрст
14.07.20
✎
15:08
|
(30) делай как я, встраивай все вк в саму поделку, и пофик там на религию индусов
|
|||
32
Сияющий Асинхраль
14.07.20
✎
15:11
|
(31) А кстати, ВК прокатит под любым пользователем? Не возникнет проблем с правами?
|
|||
33
trad
14.07.20
✎
15:12
|
(0) перенести глИдентификаторКонфигурации() из типовой в свою универсальную обработку уже предлагали?
|
|||
34
Сияющий Асинхраль
14.07.20
✎
15:14
|
(33) А ты глядел содержание этой процедурки :-)))
|
|||
35
Злопчинский
14.07.20
✎
15:16
|
(32) ну, 1С++ и formex - должны прокатить
|
|||
36
Ёпрст
14.07.20
✎
15:18
|
(32) да, под любым, 1сpp и формекс сто лет в обед не требуют регистрации в реестре
|
|||
37
Сияющий Асинхраль
14.07.20
✎
15:20
|
(35)(36) Понял. Спасибо.
(35) Но все-таки, что будешь делать, если нетиповая, иными словами что хочешь отследить? Может там достаточно увериться что план счетов есть, или еще что... |
|||
38
victuan1
14.07.20
✎
15:28
|
//проверим объявлена ли ф-я глИдентификаторКонфигурации() в гл. модуле
Попытка Модуль = СоздатьОбъект("ВыполняемыйМодуль"); //1С++ был загружен ранее Модуль.УстановитьМодуль("т = глИдентификаторКонфигурации()"); Исключение мсообщить("Неудачная попытка использования объекта ""ВыполняемыйМодуль"". Возможно, нужно установить более новую версию 1cpp.dll"); Возврат 0 КонецПопытки; Попытка //Модуль.РазрешитьИсключения(); Модуль.КомпилироватьМодуль(); ФункцияглИдентификаторКонфигурацииОбъявлена = 1; Исключение ФункцияглИдентификаторКонфигурацииОбъявлена = 0; КонецПопытки; |
|||
39
trad
14.07.20
✎
15:29
|
(34) нет. с типовыми лет 15+ не имел дела ))
|
|||
40
Сияющий Асинхраль
14.07.20
✎
15:33
|
(39) Просто эта функция состоит из одной строчки, она на уровне кода :-( возвращает с какой типовой конфигурацией мы работаем, бухгалтерия, ТиС, УсН и т.д. По сути вся и задача состоит в том, а как еще можно это определить...
|
|||
41
trad
14.07.20
✎
15:35
|
(40) а, т.е. ИдентификаторКонфигурации захардкоден (захардкожен?). ясно
|
|||
42
Злопчинский
14.07.20
✎
15:36
|
(38) спсб
|
|||
43
Злопчинский
14.07.20
✎
15:37
|
(41) о, сколько нам открытий чудных...
|
|||
44
trad
14.07.20
✎
15:51
|
(43) нуу, так себе открытие...
|
|||
45
Garykom
гуру
14.07.20
✎
15:59
|
EvalExpr в попытке не?
|
|||
46
victuan1
14.07.20
✎
17:22
|
(42) Это код для совета из (2).
|
|||
47
victuan1
14.07.20
✎
17:40
|
Так что спсб Ёпрсту. Как обычно ;)
|
|||
48
Djelf
14.07.20
✎
18:06
|
(0) Ну не красиво, но и не критично, если надо без ВК сделать, просто выведи предупреждение, до использования Шаблона что надо поставить галочку "Нестандартная конфигурация" при сбое.
Потом будет как обычно, без этого сбоя. |
|||
49
Злопчинский
14.07.20
✎
19:40
|
Всем спасибо.
|
|||
50
Ёпрст
14.07.20
✎
22:31
|
Вообще в (2), нужно , чтоб проверять, загружен ли доп глобальник формековский, чтоб его повторно не грузить.
Предложил Артур на 1cpp давным давно |
|||
51
Ёпрст
14.07.20
✎
22:31
|
Ну и Чебуру, тоже подойдёт
|
|||
52
Сияющий в темноте
14.07.20
✎
23:48
|
если все равно использовать замену,если нет,то зачем искать-проще соазу считать,что ее нет.
при подключении по Com,точнее по Ole,так как семерка только так умеет,можно получить DispId ыункции,если она есть,если нет то будет ошибка получения Id. разница с попыткой в том,что попытка ввйдет в исключение,если функция есть,но внутри ее ошибка,а также будет исполнение,чего в случае запроса DispId не будет. |
|||
53
Злопчинский
14.07.20
✎
23:51
|
(52) хм.. зачем искать работу (богатым айтишнегом), проще сразу считать что ее нет (или идти грузчиком) ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |