Имя: Пароль:
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) потому, что на клиенте не существует типа, который лежит в реквизите, который на клиенте виден.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший