|   |   | 
| 
 | v7: Как обойти без ошибки отсутствие в конфигурации требуемой процедуры | ☑ | ||
|---|---|---|---|---|
| 0
    
        Злопчинский 11.04.17✎ 22:34 | 
        например, в открываемой обработке есть код типа:
 Чтото= глПредставлениеДокумента1(Докум.ДокОснование); //отсылка к глобальному модулю, в конфигурации процедуры может не быть чтобы: 1. при открытии обработки не вывалилось в синт.ошибку 2. понять, что процедуры нет и выполнить альтернативный код ? что-то типа СтрокаКода = "[глПредставлениеДокумента(Докум.ДокОснование)]"; ДокументРасчета = Шаблон(СтрокаКода); //тут вываливает в табло сообщение... надо этого избежать Если ДокументРасчета = СтрокаКода Тогда //здесь алтернативный код, все норм ДокументРасчета = Докум.ДокОснование; КонецЕсли; | |||
| 1
    
        ТакВотЖе 11.04.17✎ 22:44 | 
        по моему никак     | |||
| 2
    
        Злопчинский 12.04.17✎ 00:00 | 
        (1) неудовлетворительный ответ
 должен, должен быть вариант! (без ВК) | |||
| 3
    
        AlexYurg 12.04.17✎ 00:16 | 
        Попытка-Исключение разве не поможет?     | |||
| 4
    
        novichok79 12.04.17✎ 00:18 | 
        в БСП есть по-моему, ОбщийМодуль.Найти, или как-то так.     | |||
| 5
    
        novichok79 12.04.17✎ 00:18 | 
        (4) но это уже 8.3, для 7.7 такого нет     | |||
| 6
    
        Salimbek 12.04.17✎ 00:19 | 
        (2)(3) Там же платформа еще на запуске обработки проведет синтаксический контроль и ругнется на ошибку. Обернуть запуск в Попытку можно, конечно, только что потом с ней делать...     | |||
| 7
    
        Злопчинский 12.04.17✎ 00:31 | 
        вот запуск в попытку обернуть не надо. все д.б внутри обработки     | |||
| 8
    
        Torquader 12.04.17✎ 01:22 | 
        Тут две проблемы:
 1) В 7.7 нет команды выполнить, то есть весь код нужно или вызывать через шаблон (что не всегда приятно) или писать явно в коде. 2) Если в коде есть ссылка на процедуру или функцию, которой нет, то выдаётся ошибка компиляции - и никак повлиять на поведение транслятора нельзя. Если мы хотим проверить наличие глобальной процедуры в конфигурации (проверку локальной процедуры производить бессмысленно так как если процедуры нет в коде, то его автор - дятел), то можно сделать следующее - с помощью записи двоичных данных через сценарий на VbScript, вызываемый через MsScriptControl, записать файл внешней обработки с процедурой, в которой вызывается данная функция. После этого остаётся только открыть эту обработку, в процедуре которой ПриОткрытии устанавливается СтатусВозврата(0) и меняется объект, переданный, как параметр открытия - тогда пользователь обработку не увидит, а по изменению объекта в параметры мы сможем понять - выполнялась обработка или нет (то есть компилировался ли модуль нашей обработки или вызвал ошибку компиляции). Вот и всё. | |||
| 9
    
        Злопчинский 12.04.17✎ 01:33 | 
        (8) то есть никак.. придется смириться с тем, что работает как надо, но не удастся избавиться от выдачи в табло сообщения.?     | |||
| 10
    
        Torquader 12.04.17✎ 01:54 | 
        (9) Табло сообщений можно закрыть после выдачи.     | |||
| 11
    
        Злопчинский 12.04.17✎ 03:02 | 
        (10) Можно, но это неспортивно     | |||
| 12
    
        Злопчинский 12.04.17✎ 03:03 | 
        (10) хм, а без ВК как закрыть табло?     | |||
| 13
    
        NSSerg 12.04.17✎ 03:06 | 
        (12) Скриптами     | |||
| 14
    
        Злопчинский 12.04.17✎ 03:08 | 
        (13) это я знаю, но это неспортивно - ведь может же быть вариант что скрипты выключены?     | |||
| 15
    
        vcv 12.04.17✎ 05:35 | 
        Шаблон нужен, что бы обойти синтаксический контроль. А выводит в окно сообщений, как я понимаю, ошибку, когда функции нет? Тут только проверять, в какой конфигурации запущено и по конфигурации предполагать, есть ли функция.
 Типа Если Метаданные.Регистр("ОстаткиТМЦ").Выбран() = 1 Тогда // Это ТиС СтрокаКода = "[глПредставлениеДокумента(Докум.ДокОснование)]"; Иначе СтрокаКода = Докум.ДокОснование.Вид()+" "+Докум.ДокОснование.НомерДок; КонецКода | |||
| 16
    
        Рэйв 12.04.17✎ 06:49 | 
        Попытка
 Выполнить("ТвояПроц()"); Исключение Выполнить("Другое()"); КонецПопытки; | |||
| 17
    
        Рэйв 12.04.17✎ 06:49 | 
        аа..77.
 Тогда сторно | |||
| 18
    
        Злопчинский 12.04.17✎ 12:32 | 
        (15) в типовых есть глИдентификаторКонфигурации() - но тут масло масленое получается... ;-)
 В принципе, ладно, через шаблон слома проги не идет - максимум в табло сообщение об ошибке - это известно где выдается и когда выдается - можно в табло плюнуть следом сообщение типа "Ошибка некритичная, можно работать дальше..." | |||
| 19
    
        Vladal 12.04.17✎ 12:41 | 
        (18) глИдентификаторКонфигурации не из типовой константы берет результат?
 Если да, то почитай в Метаданных конфигурации её идентификатор. Если нет, то как раз на результат типовой и ориентируйся. | |||
| 20
    
        Ёпрст гуру 12.04.17✎ 12:42 | 
        (0) есть обход , штатно     | |||
| 21
    
        Ёпрст гуру 12.04.17✎ 12:42 | 
        инициализация переменной или неявная инициализация в условии     | |||
| 22
    
        NSSerg 12.04.17✎ 21:23 | 
        (21) Речь ведь не о переменной, а о функции     | |||
| 23
    
        Djelf 12.04.17✎ 21:41 | 
        Можно сделать процедуру Инициализация() в ней проверка через Шаблон и записать результат проверки куда то. Один раз обработка поругается в табло и успокоится.     | |||
| 24
    
        Это_mike 13.04.17✎ 07:12 | 
        хм.
 при начале работы вызвать функцию через "шаблон" если вывалится в ошибку - создать и загрузить глобальный модуль с требуемой функцией/процедурой. Правда, нужен формекс.. | |||
| 25
    
        trad 13.04.17✎ 09:08 | 
        усилием воли скопипастить глПредставлениеДокумента в модуль обработки     | |||
| 26
    
        Это_mike 13.04.17✎ 09:27 | 
        (25) а если в основной конфигурации оно специфическое?     | |||
| 27
    
        trad 13.04.17✎ 09:36 | 
        (26) если в разных конфигах обработке допускается работать по-разному, то ой     | |||
| 28
    
        Это_mike 13.04.17✎ 09:41 | 
        (27) кстати, я б скопипастил функцию внутрь, и в ней  пытался получить даные от встроенной. если облом - возвращал вычисленныею     | |||
| 29
    
        trad 13.04.17✎ 09:54 | 
        "в ней  пытался получить даные от встроенной"
 такой модуль не скомпилится | |||
| 30
    
        Это_mike 13.04.17✎ 10:07 | 
        (29) через шаблон. или формексом...     | |||
| 31
    
        Ёпрст гуру 13.04.17✎ 10:18 | 
        (0)Ч через ВыполняемыйМодуль скомпилить в попытке, если удача - функция есть, неудача - нема.     | |||
| 32
    
        Ёпрст гуру 13.04.17✎ 10:18 | 
        но, это если религия позволяет 1cpp пользовать     | |||
| 33
    
        Ёпрст гуру 13.04.17✎ 10:22 | 
        Тип того
 Модуль = СоздатьОбъект("ВыполняемыйМодуль"); Модуль.УстановитьМодуль("т = глПредставлениеДокумента(""Вася"")"); Попытка Модуль.КомпилироватьМодуль(); Исключение Серв = СоздатьОбъект("Сервис"); Серв.ДобавитьГлобальныйМодуль(ТекстГМ); КонецПопытки; в ТекстГМ добавишь свою глПредставлениеДокумента | |||
| 34
    
        trad 13.04.17✎ 11:24 | 
        (30) через шаблон - будет сообщение об ошибке
 ВК ТС не хотит все это выше сказано | |||
| 35
    
        Злопчинский 13.04.17✎ 11:48 | 
        ок. всем спасибо.
 вопрос считаем закрытым. | |||
| 36
    
        Djelf 13.04.17✎ 18:43 | 
        (35) Чего это закрываем?
 Раз надо штатно значит штатно Используем пустую форму с тз (чтобы не текло) и #ЗагрузитьИзФайла ПроверкаПроцедуры.txt 
 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |