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