|
Как избежать ошибки при компиляции | ☑ | ||
---|---|---|---|---|
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. Универсальность <> качество |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |