Имя: Пароль:
1C
1С v8
Есть ли метод определения имени процедуры/функции в которой выполняется код ?
0 smaharbA
 
21.10.13
12:43
Как то возможно определить имя процедуры, а не только выполняемой строки (можно определить вызвав исключение) ?
1 1dvd
 
21.10.13
12:44
Этот человек опять чего-то задумал. Инфа 146%
2 ДенисЧ
 
21.10.13
12:44
Да тут уже не 146...
Тут порядка 1000....
3 hhhh
 
21.10.13
12:51
(0) отладку включить, не?
4 Serginio1
 
21.10.13
13:01
Не добавила 1С в ОписаниеОшибки StackTrace
5 Vitamax3
 
21.10.13
13:07
запоминать вначале каждой процедуры
6 Vitamax3
 
21.10.13
13:08
а нет, хрень ))
7 Vitamax3
 
21.10.13
13:11
хотя ...смотря как запоминать..
8 Maxus43
 
21.10.13
13:11
в 8.3 добавили контекст выполнения (ЭтотМодуль) или нет?
9 Сисой
 
21.10.13
13:12
Выгрузить заранее модули в тексты и найти в них строку. Думаю, текст строки и её номер дадут достаточно уникальный ключ. :-)
10 Maxus43
 
21.10.13
13:13
что-то не могу придумать для чего это может быть полезно... Даже если ошибка - разбираться надо всё равно в конфигураторе, а там номера строки достаточно
11 xReason
 
21.10.13
13:15
Отражение(рефликсия) в 1С да это вообще круто, это в 8.3.99 ?
12 Поросенок Петр
 
21.10.13
13:23
Процедура Сделать()
    Сообщить("Эта процедура называется ""Сделать()"", инфа 146%");
13 MKZM
 
21.10.13
13:25
(12) Надо в сообщение добавить полный текст процедуры\функции
14 Лефмихалыч
 
21.10.13
13:25
(0) для каких таких целЕй?
15 Serginio1
 
21.10.13
13:33
(14) Цель видимо одна, найти откуда вызывался данный метод.
В Net активно используют StackTrace, что можно сделать и в 1С

http://msdn.microsoft.com/ru-ru/library/system.exception.stacktrace.aspx
16 Maxus43
 
21.10.13
13:38
Стэк вызовов есть для этого в 1с
17 xReason
 
21.10.13
13:50
(16) он в режиме отладка
18 Maxus43
 
21.10.13
13:51
(17) этого достаточно программисту, а пользователю этого знать не надо вобще
19 Maxus43
 
21.10.13
13:53
Нету и нету, зачем щас разоряться?
Было много срача даже про хранилище конфигурации, на что 1с ответило - на нём сделали УПП, значит его достаточно для всего. Тут также
20 xReason
 
21.10.13
13:54
(18) А если ему надо это узнать, во время работы программы
21 User_Agronom
 
21.10.13
13:54
Где ТС?
22 NcSteel
 
21.10.13
13:56
(20) Интересно в каких ситуациях.
23 Defender aka LINN
 
21.10.13
13:59
(19) Они хитрые, у них много хранилище юзается.
24 smaharbA
 
21.10.13
14:17
(14) При программном добавлении кнопок действий (не знаю причины) действия срабатывают не те, проверено кодом типа

Процедура ДействияФормыОформитьДокументы(Кнопка)
Сообщить(Кнопка.Действие);

Срабатывает на кнопку "ПроводкиДтКт"
Выводит при этом "ДействияФормыПроводкиДтКтНУ"

Зависит от расстановки процедур в модуле формы (зависимость пока не вкурил), причина может быть и кэширование там какое, пока не интересно, вышел из положения добавив подобный код во все процедуры действий


Процедура ДействияФормыОформитьДокументы(Кнопка)
    ИмяПроцедуры="ДействияФормыОформитьДокументы";
    Если Не ""+Кнопка.Действие=ИмяПроцедуры Тогда
        Выполнить(""+Кнопка.Действие+"(Кнопка)");
        Возврат;
    КонецЕсли;
...


Что за бред, пока не знаю.
25 User_Agronom
 
21.10.13
14:20
>> При программном добавлении кнопок действий...
Я может что-то недопонимаю, но что Вы пишите?
Если нужно видеть/невидеть кнопки - можно использовать свойство Видимость.
Наплодить сразу кнопки и в зависимости от ситуации делать их видимыми или невидимыми.
26 Лефмихалыч
 
21.10.13
14:20
(24) демонически не надо было обновляться. Это кэш конфигурации
27 smaharbA
 
21.10.13
14:21
(25) как бы кнопки на форму могут программно добавляться, не ?
28 smaharbA
 
21.10.13
14:21
(26) обработка абсолютно внешняя
29 smaharbA
 
21.10.13
14:22
+ хотя конечно, может и из-за обновлений, обновлять приходит мальчик, чего и как он обновляет не имею представления.
30 hhhh
 
21.10.13
14:24
(29) вы просто не задумались над своим вопросом. Где-то перепутали пару кнопок и теперь для решения этой проблемы вы готовы потратить 3 года для разработки новой платформы 1с?
31 smaharbA
 
21.10.13
14:25
(30) нет не перепутал, читайте внимательно (24) первый абзац и первый код
32 Defender aka LINN
 
21.10.13
14:27
(28) И? Продуй кэш, говорят. Хуже все равно не станет, а в 99,9% случаев подобного колдунства - поможет.
33 smaharbA
 
21.10.13
14:28
(30) кнопки добавляются копированием исходных со всеми свойствами, таким способом крайне затруднительно перепутать, + исходных форм для копирования порядка 30 штук, какие кнопки копировать абсолютно безразлично + специально пробовалось для пары определенных кнопок задавать действие насильно.
34 smaharbA
 
21.10.13
14:29
(32) спасибо, так и сделаю, но таковое поведение не устраивает, вот от того и сабж + код в (24)
35 hhhh
 
21.10.13
14:30
(33) ну вы в (0) задали вопрос, где взять 8 миллиардов, чтобы переписать программу 1с. Как этот вопрос связан с (24)?
36 smaharbA
 
21.10.13
14:31
(35) в (24) все разжевано
37 Vitamax3
 
21.10.13
14:34
а чем может помочь знание процедуры вызова?
38 Vitamax3
 
21.10.13
14:44
+ т.е. из (24) .2 процедуру Вы знаете, но проблема то осталась.
39 DailyLookingOnA Sunse
 
21.10.13
14:56
Действия кнопкам устанавливаются, применяя при этом индекс кнопки в панели?
Ай-яй-яй.
40 smaharbA
 
21.10.13
15:02
(38) внимательно прочтите код (второй) в (24) - он решает в любом случае, если еще знать процедуру в которой он выполняется, тогда не нужно присваивать явно ИмяПроцедуры=...
41 smaharbA
 
21.10.13
15:07
(39) Зачем ?

все создается рекурсивным копированием, а когда обнаружилась байда с действиями, действия принудительно на пару кнопок были повешены, но результат тот же, да и в (24) в первой половине сказано какой эффект

На кнопке "ПроводкиДтКт" повешено действие так
ПроводкиДтКт=ЭтаФорма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("ПроводкиДтКт");
Сообщить(ПроводкиДтКт.Имя);
ПроводкиДтКт.Действие=Новый Действие("ДействияФормыПроводкиДтКтНУ");

Но срабатывает процедура ниже

Процедура ДействияФормыОформитьДокументы(Кнопка)
Сообщить(Кнопка.Действие);

При этом в сообщить выводит - "ДействияФормыПроводкиДтКтНУ"
42 smaharbA
 
21.10.13
15:08
Конечно не "ДействияФормыПроводкиДтКтНУ", а "ДействияФормыПроводкиДтКт"
Но то не ссуть.
43 Vitamax3
 
21.10.13
15:11
(40) Вы в (24) 2 уже определили, что кнопка отработала не то, и Возврат,
Далее задача найти нужную "правильную" процедуру, чтоб отработать,а это не то что в сабже.
44 Rebelx
 
21.10.13
15:13
(0) задай вопрос в софт-поинт, они же вроде как это сделали
45 smaharbA
 
21.10.13
15:15
(43) Это именно то, что в сабже, для универсальности нужен код, подобный такому.

Процедура ДействияФормыОформитьДокументы(Кнопка)
    Если Не ""+Кнопка.Действие=ИмяЭтойПроцедуры() Тогда
        Выполнить(""+Кнопка.Действие+"(Кнопка)");
        Возврат;
    КонецЕсли;
46 smaharbA
 
21.10.13
15:15
(44) спасибо, спрошу, думалось может ИнформацияОбОшибке может выдать, но там походу только имя модуля и строка
47 Vitamax3
 
21.10.13
15:55
Копать дальше

ПодключитьОбработчикОжидания("ПроцедураОбработкиКнопки", 0.1, ИСТИНА);
48 Serg_1960
 
21.10.13
16:09
smaharbA , на всякий случай, проверь алгоритм процедуры ДействияФормыПроводкиДтКтНУ. Может там, так хитро закручено, что вызов программный ДействияФормыОформитьДокументы. А кнопка - по первоисточнику...
49 smaharbA
 
21.10.13
17:09
(48) там всего 4 строки, а вылезло сие, когда стало выдавать ошибки на некоторые кнопки, приглядевшись понял, что выполняются не те процедуры
50 smaharbA
 
21.10.13
17:10
(47), чего копать и где - в своем модуле или на Марсе ?
51 DailyLookingOnA Sunse
 
21.10.13
17:13
Конфигуратор ТС недоступен что-ли?
52 smaharbA
 
21.10.13
17:26
(51) Вы внимательно прочитали сабж и (24) ?
53 smaharbA
 
21.10.13
18:06
Для верующих

http://www.n-d.ru/files/uppaction.png
54 МихаилМ
 
21.10.13
18:09
замер произодительности
55 smaharbA
 
21.10.13
18:10
(54) а он тут при чем ?
Никогда не пользовался.
56 Salimbek
 
21.10.13
18:22
(55) Может одну универсальную процедуру написать, типа той же, что и у тебя, только во всех кнопках вызывается исключительно она, а что именно выполнить передается, например, в поле "Описание".
А по сути, ощущение что стек вызовов у 1С-ки "уплыл". Так что барабашкино поведение лечится только антибарабашкиным кодом :-)
57 mrDSide
 
21.10.13
18:23
Технологический журнал
58 smaharbA
 
21.10.13
18:26
(56) хорошо бы так, но кнопки копируются динамически и рекурсивно с других (штатных) форм со всеми свойствами, т.е. конечно не со всех враз, а при одних условиях с одной, при других с другой на новую пустую форму.
59 МихаилМ
 
21.10.13
18:34
(55)
открываете форму

запускаете замер

нажимаете кнопку.

анализируете список сток кода
60 smaharbA
 
21.10.13
18:38
(59) и что оно даст ?
Про кэширование уже говорили, дак то оно немного понятно, но не стану же все время следить за кэшированием.

А так конечно позырю.
61 Vitamax3
 
22.10.13
08:21
(50) Вам надо было реализовать как-то:

Выполнить(""+Кнопка.Действие+"(Кнопка)");

Можно используя (47) только в процедуре "действия кнопки" надо выполнить процедуру "ПроцедураОбработкиКнопки"
62 smaharbA
 
22.10.13
08:26
(61) ничего не понял, зачем мне обработчик ожидания, нафига мне через 0.1 секунду отправлять вызов, в (24) все реализовано, оставалось, что бы не писать вручную имя процедуры для сравнения определять ее, но и без оного все ок.
63 Vitamax3
 
22.10.13
08:37
сори. не знал что конструкция

Выполнить(""+Кнопка.Действие+"(Кнопка)");

рабочая ((
64 Сисой
 
22.10.13
10:34
(0) Твоя проблема решена на Инфостарте.
http://infostart.ru/public/203843/
65 DailyLookingOnA Sunse
 
22.10.13
12:13
(64)
Чем ему это поможет?
У него уже есть косяк и стек вызовов не поможет, т.к. вызов процедуры производится из события.
Код создания кнопок ТС не предоставил, конфигуратором пользоваться не умеет.
66 Salimbek
 
22.10.13
13:42
(65) ТС, я думаю, может и не только конфигуратором пользоваться. А в некоторых вопросах и многих, тут присутствующих, (например, меня) еще научить.
67 DailyLookingOnA Sunse
 
22.10.13
13:58
(66)
Текущий вопрос оказался не из некоторых?
68 Salimbek
 
22.10.13
15:14
(67) Посмотри скрин в (53) и скажи, как оно так получилось.
69 DailyLookingOnA Sunse
 
22.10.13
15:21
(68)
"Код создания кнопок ТС не предоставил"
Так вот оно и получилось, неизвестным кривым кодом.
70 Salimbek
 
22.10.13
15:32
(69) Кратко по этой теме мы прошлись в (56) и (58). Больше мне добавить нечего, автор умный, если смогет - сам разберется, а если нет, то телепатически все равно не помочь. По фотографии из (58) вылечить не представляется возможным.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан