8.х Как отключить проверку кода обработки

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем demowood, 25 апр 2014.

  1. TopicStarter Overlay
    demowood
    Offline

    demowood

    Регистрация:
    12 июл 2012
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    Всем привет!
    Потребовалось мне написать универсальную внешнюю обработку для разных конфигураций.
    В обработке есть вызов функций общих модулей. Их вызов организован в условии по, заранее определённому, типу конфигурации.
    При открытии обработки возникает ошибка либо общий модуль не обнаружен, либо такая функция общего модуля не обнаружена. По факту, в этой конфигурации, вызов функций (из ошибки) не производится (т.к. находится в другой ветке условия), и нормальной работе это мешать не должно. Но из-за проверки кода перед запуском, обработка не запускается. Можно, конечно, поместить обращение к общим модулям в конструкцию Выполнить(), но это сильно затрудняет отладку(
    Вопрос: можно ли как-то отключить проверку кода при запуске внешней обработки?
    Вроде бы вполне понятно написал... Надеюсь есть решение...
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    С общими модулями определенные проблемы.

    Как-то так попробуйте:
    Код:
       
        ЕстьОбщийМодуль = Метаданные.ОбщиеМодули.Найти("<ИмяНужногоМодуля>") <> Неопределено;
        Если НЕ ЕстьОбщийМодуль Тогда
            ИмяНужногоМодуля = Неопределено;
        Иначе
            //Делаем что там нужно в процедуре.
            ...
            ИмяНужногоМодуля.ИмяМоейФункции();
            ...
        КонецЕсли;
    
    Вставлять в начало процедуры, где есть вызов из соответствующего общего модуля.
    Смысл в том, что если такого модуля в конфигурации нет, то инициализировать локальную переменную с именем как у отсутствующего общего модуля каким нибудь значением.
  3. TopicStarter Overlay
    demowood
    Offline

    demowood

    Регистрация:
    12 июл 2012
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    Идея хорошая. А что если нужный модуль есть во всех конфигурациях, но функции в нём называются по разному (увы такое бывает очень часто)? То есть нужно определить есть ли в общем модуле ИмяМоейФункции(). Через метаданные это уже не проверить. Или я заблуждаюсь?
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Так если общий модуль есть во всех конфигурациях, зачем вам вышеприведенная конструкция?
    Обращения через точку ведь не проверяются в момент открытия.
    Если Конф = "конф1" Тогда
    общиймодуль.Функция1();
    ИначеЕсли Конф= "Конф2" Тогда
    общиймодуль.Функция2();
    КонецЕсли;
    --- Объединение сообщений, 25 апр 2014 ---
    А, да. Чет подумал. Дополнение к посту #2. Возможно такой длинный код с метаданными там и не нужен. Попробуйте просто вместо всего этого написать просто в начале процедуры:
    Код:
    Если Ложь Тогда
        ИмяНужногоМодуля = Неопределено;
    КонецЕсли;
    
    Последнее редактирование: 25 апр 2014
  5. TopicStarter Overlay
    demowood
    Offline

    demowood

    Регистрация:
    12 июл 2012
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    Да, точно... Под конец рабочего дня прогрессирует паранойя, ожидаю ошибок со всех сторон...

Поделиться этой страницей