Имя: Пароль:
1C
1С v8
Как увидеть все "Переменные окружения" в 1С
0 И Р
 
02.03.19
14:37
Здравствуйте! В различных языках есть  возможность вывести полный список переменных окружения и процедур доступных вам внутри данного фрейма, процедуры, функции.
Возможно ли это сделать как то в 1С?
Т.е. например  есть процедура, где "ОпределитьЦену" в ней мне нужно увидеть из какого документа она была вызвана.
Можно конечно в эту процедуру передавать в качестве параметра документ откуда она вызывается,
НО учитывая характер 1С допускаю что эта информацию уже присутствует внутри этой функции. Как можно увидеть все метаданные, объекты и т.д. которые доступны внутри данной функции?
1 ДенисЧ
 
02.03.19
14:40
Нет, рефлексии в 1с нет.
2 Сияющий в темноте
 
02.03.19
15:35
для каждого модуля вверху можно увидеть список процедур и функций в нем.
помошник автоподстановки умеет показывать то,что доступно,в процессе набора кода.
3 Alexor
 
02.03.19
16:54
(0) при отладке, вызвать локальные переменные
4 ДенисЧ
 
02.03.19
17:01
(2) (3) И как программно вызвать стек вызовов? Расскажите мне тупому...
5 Лефмихалыч
 
02.03.19
19:59
(0) метаданные доступны решительно все. Все остальное - согласно области видимости модуля, в котором лежит метод.
Тебе зачем это все?
6 И Р
 
11.03.19
14:03
(5) В принципе описал зачем это всё в первом сообщении.
Но вот ещё пример заходишь значит в модуль где определяется цена. Тебе в зависимости от того из какого документа была вызвана функция нужно вернуть либо рассчитанную цену, либо фиксированную. Но функция была вызвана через 4-15 скачков. Соответственно интересно есть ли в окружении этой процедуры данные о том из какого документа она в итоге была вызвана или нет, чтобы не городить огород на 4-15 промежуточных скачках.
7 rsv
 
11.03.19
14:17
(6) вот и ходить отладчиком ф11 по этому огороду.Кто кого вызывает.
8 И Р
 
11.03.19
14:21
(7) хорошо, ты узнал кто кого вызывает, допустим это будет 10 скачков.
Вопрос зачем эти данные через 10 скачков тягать, если они и так есть где то? Это не целесообразно ни с точки зрения производительности, ни с точки зрения трудозатрат. Например в php есть суперглобальный массив $_ENV.
9 Xapac
 
модератор
11.03.19
14:31
(8)Зачем с точки зрения практики?
10 Жан Пердежон
 
11.03.19
14:55
(8) ставишь точку останова,
а дальше
Отладка - Стек вызовов
Отладка - Локальные переменные

Всё, тему можно закрывать
11 Xapac
 
модератор
11.03.19
15:00
я не понимаю "чтобы было" вы хотите?
Или есть какой-то практичный смысл?
12 Жан Пердежон
 
11.03.19
15:04
(11) практический смысл: говнокодить как на пхп
13 Лефмихалыч
 
11.03.19
15:39
(6) >Тебе в зависимости от того из какого документа была вызвана функция нужно вернуть либо рассчитанную цену, либо фиксированную

это называется говнокод и непрофессионализм


ДОлжно быть два разных метода для получения двух разных цен. Вызывающий контекст должен сам решать, что вызывать. Тогда вот эта вся иеромантия из сабжа не нужна.
14 Лефмихалыч
 
11.03.19
15:39
(8) функционирование НЕ ДОЛЖНО зависеть от вызывающей стороны. Ни когда. Единственное, от чего можно зависеть - это входные параметры и данные в БД. Всё.
15 И Р
 
11.03.19
15:41
(10) Точка останова стоит  в Общем модуле под названием "орОтраслевыеРешения"
в окне "Локальные переменные" присутствует  переменная ЭтотОбъект, но при попытке обратиться к ней с позиции точки останова ошибка, что переменная не определена.
16 И Р
 
11.03.19
15:48
(14) Давай так, есть функция которая возвращает цену, которая в свою очередь рассчитывается из множества факторов.
В этой функции прописано что если у номенклатуры установлен реквизит "ФиксированнаяЦена" то нужно вернуть именно её. Однако проблемы с документом Приход товаров, где из-за этого проставляется ФиксированнаяЦена вместо предыдущей цены закупки. И тут можно либо поставить в самой функции "Если документ Приход товаров, то не обращать внимания на ФиксированнаяЦена" либо что вы предлагаете?
17 Вафель
 
11.03.19
15:51
добавь парам в функцию ; игнорировать фикс цену
18 И Р
 
11.03.19
15:54
(17) да, это можно вот только тащить этот парам через 4-15 скачков до непосредственного вызова этой функции. Поэтому и интересуюсь может ли эта информация храниться уже где-то в окружении её вызова.
19 Мимохожий Однако
 
11.03.19
16:04
(15) Конкретизируй ситуацию:платформа, модуль, директивы. Есть определенные стандарты. Их не просто так придумали
20 И Р
 
11.03.19
16:30
Мне уже интересно почему в окне "Локальные переменные" присутствует  переменная ЭтотОбъект, но при попытке обратиться к ней с позиции точки останова ошибка, что переменная не определена. )))
21 Asmody
 
11.03.19
16:54
(16) Тебе знакома концепция "чистых функций"?
22 VladZ
 
11.03.19
17:04
(0) Отладчик в руки - и вперед!
23 И Р
 
12.03.19
14:47
(21) Если то что переменные используемые внутри функций не доступны вне их, пока не указано Экспорт то да. Или вы что то другое имеете в виду?
24 Вафель
 
12.03.19
14:50
(23) нет, функция опирается только на параметры и не делает никаких сайд эффектов
25 Лефмихалыч
 
12.03.19
21:51
(16) все что ты написал, означает "мне нужно два разных метода - один я буду вызывать везде, а второй - в приходной накладной". Все, что у методов общее, они тоже должны вызывать откуда-то, а не дублировать внутри себя. Это и называется "программирование". А вот это вот "рассчитывается из множества факторов" и "проблемы с документом Приход товаров, где из-за этого" - это всё от недостатка опыта и понимания происходящего.
26 Лефмихалыч
 
12.03.19
21:53
(20) потому, что на клиенте не существует типа, который лежит в реквизите, который на клиенте виден.