Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как сделать переопределение функции?

v7: Как сделать переопределение функции?
Я
   Злопчинский
 
14.07.20 - 13:00
Например, в типовых конфигах есть экспортная глобальная процедура
.
глИдентификаторКонфигурации();
.
допустим, есть универсальная обработка где необходимо получить идентификатор конфигурации.
для типовой конфиги будет ОК.
.
а для нетиповой? чтобы например типа
если есть глобальная экспортная процедура - то выполняется она, а если нет - то выполнить процедуру с таким же именем из кода обработки?
   Serginio1
 
1 - 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
А еще там есть:

Метаданные.АвторРазвернутаяИнформация
Метаданные.АвторКороткаяИнформация

где тоже фигурирует название конфы...
   Serginio1
 
13 - 14.07.20 - 14:11
(3) А через вычислить?
   Serginio1
 
14 - 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) А кстати, а что ты собираешься писать, если конфа нетиповая?
   vova1122
 
17 - 14.07.20 - 14:32
(0) если есть глобальная экспортная процедура - то выполняется она, а если нет - то выполнить процедуру с таким же именем из кода обработки?

А разве так можно. Стандартное поведение платформы совсем обратное. Сначала ищет процедуру в своем модуле, а если не находит, то экспортную в глобальном.
   Сияющий Асинхраль
 
18 - 14.07.20 - 14:34
(17) Ну никто же тебе не запрещает в обработке назначить нужной процедуре нужное тебе имя, пусть даже немножко другое, например, локИдентификаторКонфигурации()
   Serginio1
 
19 - 14.07.20 - 14:37
(15) Ну тогда проще проанализировать Результат.
   Креатив
 
20 - 14.07.20 - 14:37
(0)Запускай сразу свою процедуру. Она же всё равно есть.
   Сияющий Асинхраль
 
21 - 14.07.20 - 14:38
+(18) И делать что-то типа:

Функция локИдентификаторКонфигурации()
Попытка
  глИдентификаторКонфигурации()
Исключение
  // ....

КонецПопытки;
КонецФункции
   Garykom
 
22 - 14.07.20 - 14:42
Предлагаю свою функцию написать например по набору констант через метаданные ))
   Aleksey
 
23 - 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) А кстати, ВК прокатит под любым пользователем? Не возникнет проблем с правами?
   trad
 
33 - 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) Но все-таки, что будешь делать, если нетиповая, иными словами что хочешь отследить? Может там достаточно увериться что план счетов есть, или еще что...
   victuan1
 
38 - 14.07.20 - 15:28
//проверим объявлена ли ф-я глИдентификаторКонфигурации() в гл. модуле

    Попытка
        Модуль = СоздатьОбъект("ВыполняемыйМодуль");//1С++ был загружен ранее

        Модуль.УстановитьМодуль("т = глИдентификаторКонфигурации()");
    Исключение
        мсообщить("Неудачная попытка использования объекта ""ВыполняемыйМодуль"". Возможно, нужно установить более новую версию 1cpp.dll");
        Возврат 0
    КонецПопытки;
    Попытка
        //Модуль.РазрешитьИсключения();

        Модуль.КомпилироватьМодуль();
        ФункцияглИдентификаторКонфигурацииОбъявлена = 1;
    Исключение
        ФункцияглИдентификаторКонфигурацииОбъявлена = 0;
    КонецПопытки;
   trad
 
39 - 14.07.20 - 15:29
(34) нет. с типовыми лет 15+ не имел дела ))
   Сияющий Асинхраль
 
40 - 14.07.20 - 15:33
(39) Просто эта функция состоит из одной строчки, она на уровне кода :-( возвращает с какой типовой конфигурацией мы работаем, бухгалтерия, ТиС, УсН и т.д. По сути вся и задача состоит в том, а как еще можно это определить...
   trad
 
41 - 14.07.20 - 15:35
(40) а, т.е. ИдентификаторКонфигурации захардкоден (захардкожен?). ясно
   Злопчинский
 
42 - 14.07.20 - 15:36
(38) спсб
   Злопчинский
 
43 - 14.07.20 - 15:37
(41) о, сколько нам открытий чудных...
   trad
 
44 - 14.07.20 - 15:51
(43) нуу, так себе открытие...
   Garykom
 
45 - 14.07.20 - 15:59
EvalExpr в попытке не?
   victuan1
 
46 - 14.07.20 - 17:22
(42) Это код для совета из (2).
   victuan1
 
47 - 14.07.20 - 17:40
Так что спсб Ёпрсту. Как обычно ;)
   Djelf
 
48 - 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) хм.. зачем искать работу (богатым айтишнегом), проще сразу считать что ее нет (или идти грузчиком) ?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.