Имя: Пароль:
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) вылечить не представляется возможным.