Имя: Пароль:
1C
 
Как избежать ошибки при компиляции
,
0 eeeio
 
15.10.14
17:34
Проблема: пишу обработку для двух различных конфигураций. Обработка использует некоторые функции первой конфигурации, которых нет во второй (и наоборот). Коллеги, подскажите, как избежать ошибок использования несуществующих объектов при открытии обработки? Вариант с Выполнить("<тут код не проверяется компилятором и не вызывает ошибки>") мне не нравится, может есть более изящный способ?
1 AlexTim03
 
15.10.14
17:42
Написать 2 обработки
2 YFedor
 
15.10.14
17:46
(0) код, специфичный для конфигураций писать в специально созданных формах.

При открытии обработки будет проверяться модуль и модуль основной формы
3 eeeio
 
15.10.14
18:00
Плодить формы и обработки не хочется - большие они слишком. Наверно, через "Выполнить" буду все же делать. Спасибо за ответы.
4 Жан Пердежон
 
15.10.14
18:11
какие объекты?
Для менеджеров справочников, регистров и т.д. можно  импользовать РегистрыСведений[ИмяРегистра]
для общих модулей в типовых есть функция ОбщийМодуль(Имя), которая работает через Вычислить()
5 HEKPOH
 
15.10.14
18:11
(0), (3) вариант с "Выполнить" и позволяет избежать кучи кода :)
6 palpetrovich
 
15.10.14
18:17
(0) Тупо перенести "некоторые функции обеих конфигураций" в обработку. Если дело конечно только в функциях, если метаданные отличаются - то сложнее
7 mehfk
 
15.10.14
18:51
Проверяй имя конфигурации. Даже в типовых так делают

Функция ИДКонфигурации() Экспорт
    
    МетаданныеИмя = Метаданные.Имя;
    
    Если МетаданныеИмя = "БухгалтерияПредприятия" ИЛИ МетаданныеИмя = "БухгалтерияПредприятияБазовая" Тогда
        Возврат "БП";
    ИначеЕсли МетаданныеИмя = "ЗарплатаИУправлениеПерсоналом" ИЛИ МетаданныеИмя = "ЗарплатаИУправлениеПерсоналомБазовая" ИЛИ МетаданныеИмя = "ЗарплатаИУправлениеПерсоналомКОРП" Тогда
        Возврат "ЗУП";
    ИначеЕсли МетаданныеИмя = "УправлениеПроизводственнымПредприятием" Тогда
        Возврат "УПП";
    ИначеЕсли МетаданныеИмя = "КомплекснаяАвтоматизация" Тогда
        Возврат "КА";
    ИначеЕсли МетаданныеИмя = "БухгалтерияБюджетногоУчреждения" ИЛИ МетаданныеИмя = "БухгалтерияБюджетногоУчрежденияБазовая" Тогда
        Возврат "ББУ";
    ИначеЕсли МетаданныеИмя = "БухгалтерияГосударственногоУчреждения" ИЛИ МетаданныеИмя = "БухгалтерияГосударственногоУчрежденияБазовая" Тогда
        Возврат "БГУ";
    ИначеЕсли МетаданныеИмя = "ЗарплатаИКадрыБюджетногоУчреждения" ИЛИ МетаданныеИмя = "БазоваяФункциональностьКадрыЗарплата" Тогда
        Возврат "ЗБУ";
    ИначеЕсли МетаданныеИмя = "БухгалтерияПредприятияКОРП" Тогда
        Возврат "БПКОРП";
    ИначеЕсли МетаданныеИмя = "БухгалтерияАвтономногоУчрежденияКОРП" Тогда
        Возврат "БАУКОРП";
    ИначеЕсли МетаданныеИмя = "БухгалтерияАвтономногоУчреждения" ИЛИ МетаданныеИмя = "БухгалтерияАвтономногоУчрежденияБазовая" Тогда
        Возврат "БАУ";
    Иначе
        Возврат МетаданныеИмя;
    КонецЕсли;
    
КонецФункции
8 DS
 
15.10.14
18:53
(7) И?
9 mehfk
 
15.10.14
19:08
А далее создаешь две вспомогательные формы с одинаковыми экспортными функциями со специфичным кодом
10 Fram
 
15.10.14
19:08
А че Попытка Исключение отменили уже?
11 tridog
 
15.10.14
20:02
(10) И давно Попытка Исключение стало влиять на компиляцию модуля?
12 Рэйв
 
15.10.14
20:17
(11)Давно попытка исключает ошибочное создание объекта или обращение к полю, которого нет в конфе. RTFM
13 H A D G E H O G s
 
15.10.14
20:18
(12) Все правильно tridog сказал. Попытка не отключает проверку при компиляции.
14 Рэйв
 
15.10.14
20:46
(13)на компиляции ему и конфа накидает.
Не путай
15 XLife
 
15.10.14
20:53
(14) *facepalm*
16 Рэйв
 
15.10.14
21:00
(15)Мне вот интересно:-)
аочему это ты  *facepalm*, а не Ёжики? :-)
17 User_Agronom
 
15.10.14
22:16
(13) 1С - компилируемый язык? Я всегда считал, что тут интерпрета?тор...

А по сути да: Попытка Исключение при попытке обратится к несуществующему полю не даст упасть 1С-ке. Но по логике - костыль жесточайший. Лучше так не делать))
18 tridog
 
16.10.14
02:39
(17) Компилируемый. В байт-код, правда, не в машинный.

В (0) описана проблема не с обращением "через точку" к несуществующему объекту, а обращение к несуществующему объекту глобального контекста. Например, к общему модулю, отсутствующему в конфигурации.
19 ArchLord
 
16.10.14
03:49
(18) с тем же успехом можно Джаву\Питон назвать компилируемым языком :)))
20 DrZombi
 
гуру
16.10.14
07:04
(0) анализируй Метаданные, не ленись проставлять условия проверки. Познай силу Структуры :)
21 DrZombi
 
гуру
16.10.14
07:05
(17) А порой, в 1С, это экономит кучу времени, еще ли писать через проверки по Метаданным :)
22 Sasha_Rapira
 
16.10.14
07:25
(0) лучшее решение сделать две обработки под каждую конфу, по человечески.
худшее сидеть и насиловать мозг, подгоняя под разные конфы

P.S. Универсальность <> качество