|
Как узнать, есть ли глобальная переменная в частично-закрытой конфе? | ☑ | ||
---|---|---|---|---|
0
MWWRuza
гуру
04.06.18
✎
22:25
|
Сабж... Конфа не типовая, модуль обычного приложения и все глобальные модули закрыты. Нужно для правильного написания внешней обработки. По идее, должна быть такая переменная, с нужным мне именем. Но, как проверить? Все модули, где она может быть объявлена, открываются с сообщением: "Исходный текст отсутствует"...
|
|||
1
quest
04.06.18
✎
22:30
|
точка останова и смотри в отладчике - если есть то будет значение, если нет - то будет неопределено.
|
|||
2
quest
04.06.18
✎
22:30
|
тьфу, ошибка будет если нет такой переменной
|
|||
3
youalex
04.06.18
✎
23:24
|
вычислить() в попытке
|
|||
4
Cyberhawk
04.06.18
✎
23:45
|
"модуль обычного приложения и все глобальные модули закрыты" // Сурово
|
|||
5
Franchiser
гуру
05.06.18
✎
01:54
|
Легко декомпилировать закрытые модули
|
|||
6
vier
05.06.18
✎
02:16
|
ГлобальнаяП = ГлобальнаяП;
Если ГлобальнаяП <> Неопределенно Тогда Сообшить("Есть"); Иначе Значение = Новый УникальныйИдентификатор; ПрисвоитьГлобальнойП(Значение); Если ГлобальнаяП = Неопределено Тогда Сообщить("Нет"); Иначе ГлобальнаяП = Неопределено; Сообшить("Есть"); КонецЕсли; КонецЕсли; ... Процедура ПрисвоитьГлобальнойП(Значение) ГлобальнаяП = Значение; КонецПроцедуры; Попытошники хреновы |
|||
7
Tateossian
05.06.18
✎
02:42
|
(3) Это если примерно понимать, что вычислять. На самом деле, рефлексии иногда очень не хватает, но половина взломов происходит через реверс инжиниринг с помощью вот рефлексии, например. Функциональности метаданных не хватает - была бы возможность опрашивать общие модули на наличие функций/процедур - и вызывать их, в том числе модификатор Экспорт программно устанавливать...
|
|||
8
vier
05.06.18
✎
02:52
|
(7) И какой бы пиздец начался. И так народ старается отделить публичный апи от внутреннего, хотя бы областями, чтобы хоть на уровне договоренностей знать, что рефакторить, а что для совместимости тащить, чтобы потребители не поломались...
А тут такой персонаж сбоку херакс, экспорт сам воткнул, права доступа нахер послал, на следующий день на изменение вызываемого кода наступил и опять "эта ваша 1с виновата". Попробуй написать что-то посерьёзнее внешней обработки. |
|||
9
Emery
05.06.18
✎
06:43
|
> как проверить?
Можно просто выгрузить конфигурацию в xml-файлы и сделать поиск в UTF-8 по искомому имени. Даже в закрытых модулях все используемые имена присутствуют. |
|||
10
mehfk
05.06.18
✎
06:58
|
(9) ЕМНИП, закрытые модули в файлы не выгружаются.
|
|||
11
Emery
05.06.18
✎
07:16
|
(10) > закрытые модули в файлы не выгружаются
Что за глупости! Вполне себе выгружаются. Только не с расширением *.bsl, а с расширением *.bin, вроде Module.bin. А в этих файлах в кодировке UTF-8 все используемые имена присутствуют. Правда, не исключена обфускация, если применяется не парольная защита, а внешние инструменты, типа WiseAdvise. Но, как правило, обфусцируют обычно локальные имена, а глобальные не меняют. |
|||
12
mehfk
05.06.18
✎
08:08
|
(11) Докажи.
|
|||
13
Адинэснег
05.06.18
✎
08:22
|
(6)
Если ГлобальнаяП <> Неопределенно Тогда А если ГП есть и содержит значение Неопределено? |
|||
14
Фрэнки
05.06.18
✎
08:37
|
Как бы если модуль "закрыт" и документации на установленные внутри модуля переменные нет, то такие переменные следует считать "приватными". Какой смысл обращаться к таким переменным, если они не документированы...
Я с такими вещами сталкивался и до того, как подсел на 1С и там было принято обращаться к внутренним переменным классов "через точку" или параметрами функций/процедур. И предполагалось, что использовать глобальные/внешние переменные в классах моветон. В данном примере разработчик мог и должен был создать глобальные в виде Параметров сеанса, например, если это могло создать существенный и полезный эффект |
|||
15
Emery
05.06.18
✎
14:04
|
(12) > Докажи.
Вот возьмем, например, 1С-КАМИН:Зарплата. Версия 5.0 (5.0.49.2). Там есть защищенные модули, например: \CommonModules\МенеджерИБСервер\Ext\Module.bin и \CommonModules\МодульЗащиты\Ext\Module.bin В первом модуле используются глобальные переменные: //Перем СтандартныеПодсистемыСервер; //Перем ОбщегоНазначенияКлиентСервер; //Перем ОбновлениеИнформационнойБазыСлужебный; //Перем Метаданные; А во втором, переменные: //Перем ОбходРезультатаЗапроса; // Глобальная переменная //Перем _CКМYЩaE2OdЁKсцGоxУШyйяч; // Локальная псевдопеременная для создания проблем с // восстановлением кода Понятно, что эти переменные там не определяются, а только используются, но цель, была, как я понимаю, проверить именно используемые глобальные имена в защищенных модулях. Если «хотится», что-то более конкретное, выкладывайте базу на Яндекс-Диск, а там посмотрим. |
|||
16
1Сергей
05.06.18
✎
14:21
|
ета... А через табло никак?
|
|||
17
youalex
05.06.18
✎
20:02
|
Если просто узнать, то, наверное, можно и через локальные переменные..
|
|||
18
АнализДанных
05.06.18
✎
20:10
|
В EDT есть возможность просматривать все локальные переменные, может там и глобальные будут видны. У меня сейчас нет возможности проверить.
|
|||
19
Tateossian
05.06.18
✎
20:35
|
(18) Локальные и в конфигураторе видно.
|
|||
20
АнализДанных
06.06.18
✎
10:28
|
(19) читай внимательно: может там и глобальные будут видны. сейчас нет возможности проверить
|
|||
21
Buster007
06.06.18
✎
10:38
|
(15) так замучаешься каждому доказывать...
|
|||
22
MWWRuza
гуру
06.06.18
✎
11:28
|
Не, если так все сложно, надо попробовать просто у разработчика конфы спросить. Я думал, есть какой-то более простой способ, что можно увидеть и не "дергать" по пустякам уважаемого человека.
По сути - это все связано с пресловутыми онлайн-кассами. Есть некая полузакрытая конфа. Купленная честным образом два года назад. Работала все это время с ЕНВД чековым принтером. Сейчас - понадобилось онлайн. Но, в силу некоторых моих "шкурных" интересов, ККТ, довольно редко-используемой в малом бизнесе модели. У разработчика их под рукой нет, зато у меня вагон - и в том числе и с эмулятором ФН(МГМ). Обработку я написал, переделав штриховскую из поставки конфигурации. Все в принципе работает, уже второй день в реальном магазине - полет нормальный. Но! Не нравится мне как это все сделано. При каждом обращении к кассе, происходит ее подключение, загрузка драйвера, создание объекта драйвера, получение его ID и т.д... А это около 3 секунд задержка. Потому, что переменная, в которой в виде структуры хранится объект драйвера вместе с параметрами - локальная, объявлена в этой обработке. Естественно, при закрытии обработки она убивается, и при следующем обращением к ней все заново. Было-бы гораздо правильнее, создав объект при первом обращении к кассе, хранить его в глобальной переменной, и при последующих обращениях только проверять что он есть. Все работало-бы быстрее. Но, не имея доступа к закрытым модулям конфигурации, это трудно реализовать... Поэтому и возник вопрос. |
|||
23
Emery
06.06.18
✎
15:30
|
(22) > не имея доступа к закрытым модулям конфигурации, это трудно реализовать
Если будет cf-файл конфы, то могу глянуть ее закрытые модули и если их меньше 100 КБ, то может быть и декомпилировать. |
|||
24
Вафель
06.06.18
✎
15:33
|
а резве синтаксис контроль не сможет это все проверить?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |