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