Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Как узнать, есть ли глобальная переменная в частично-закрытой конфе?

Как узнать, есть ли глобальная переменная в частично-закрытой конфе?
Я
   MWWRuza
 
04.06.18 - 22:25
Сабж... Конфа не типовая, модуль обычного приложения и все глобальные модули закрыты. Нужно для правильного написания внешней обработки. По идее, должна быть такая переменная, с нужным мне именем. Но, как проверить? Все модули, где она может быть объявлена, открываются с сообщением: "Исходный текст отсутствует"...
 
 
   quest
 
1 - 04.06.18 - 22:30
точка останова и смотри в отладчике - если есть то будет значение, если нет - то будет неопределено.
   quest
 
2 - 04.06.18 - 22:30
тьфу, ошибка будет если нет такой переменной
   youalex
 
3 - 04.06.18 - 23:24
вычислить() в попытке
   Cyberhawk
 
4 - 04.06.18 - 23:45
"модуль обычного приложения и все глобальные модули закрыты" // Сурово
   Franchiser
 
5 - 05.06.18 - 01:54
Легко декомпилировать закрытые модули
   vier
 
6 - 05.06.18 - 02:16
ГлобальнаяП = ГлобальнаяП;
Если ГлобальнаяП <> Неопределенно Тогда
    Сообшить("Есть");
Иначе
    Значение = Новый УникальныйИдентификатор;
    ПрисвоитьГлобальнойП(Значение);
    Если ГлобальнаяП = Неопределено Тогда
        Сообщить("Нет");
    Иначе
        ГлобальнаяП = Неопределено;
        Сообшить("Есть");
    КонецЕсли;
КонецЕсли;
...
Процедура ПрисвоитьГлобальнойП(Значение)
    ГлобальнаяП = Значение;
КонецПроцедуры;


Попытошники хреновы
   Tateossian
 
7 - 05.06.18 - 02:42
(3) Это если примерно понимать, что вычислять. На самом деле, рефлексии иногда очень не хватает, но половина взломов происходит через реверс инжиниринг с помощью вот рефлексии, например. Функциональности метаданных не хватает - была бы возможность опрашивать общие модули на наличие функций/процедур - и вызывать их, в том числе модификатор Экспорт программно устанавливать...
   vier
 
8 - 05.06.18 - 02:52
(7) И какой бы пиздец начался. И так народ старается отделить публичный апи от внутреннего, хотя бы областями, чтобы хоть на уровне договоренностей знать, что рефакторить, а что для совместимости тащить, чтобы потребители не поломались...
А тут такой персонаж сбоку херакс, экспорт сам воткнул, права доступа нахер послал, на следующий день на изменение вызываемого кода наступил и опять "эта ваша 1с виновата".
Попробуй написать что-то посерьёзнее внешней обработки.
   Emery
 
9 - 05.06.18 - 06:43
> как проверить?

Можно просто выгрузить конфигурацию в xml-файлы и сделать поиск в UTF-8 по искомому имени. Даже в закрытых модулях все используемые имена присутствуют.
   mehfk
 
10 - 05.06.18 - 06:58
(9) ЕМНИП, закрытые модули в файлы не выгружаются.
 
 Рекламное место пустует
   Emery
 
11 - 05.06.18 - 07:16
(10) > закрытые модули в файлы не выгружаются

Что за глупости! Вполне себе выгружаются. Только не с расширением *.bsl, а с расширением *.bin, вроде Module.bin. А в этих файлах в кодировке UTF-8 все используемые имена присутствуют. Правда, не исключена обфускация, если применяется не парольная защита, а внешние инструменты, типа WiseAdvise. Но, как правило, обфусцируют обычно локальные имена, а глобальные не меняют.
   mehfk
 
12 - 05.06.18 - 08:08
(11) Докажи.
   Адинэснег
 
13 - 05.06.18 - 08:22
(6)
Если ГлобальнаяП <> Неопределенно Тогда

А если ГП есть и содержит значение Неопределено?
   Фрэнки
 
14 - 05.06.18 - 08:37
Как бы если модуль "закрыт" и документации на установленные внутри модуля переменные нет, то такие переменные следует считать "приватными". Какой смысл обращаться к таким переменным, если они не документированы...

Я с такими вещами сталкивался и до того, как подсел на 1С и там было принято обращаться к внутренним переменным классов "через точку" или параметрами функций/процедур. И предполагалось, что использовать глобальные/внешние переменные в классах моветон.

В данном примере разработчик мог и должен был создать глобальные в виде Параметров сеанса, например, если это могло создать существенный и полезный эффект
   Emery
 
15 - 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йяч;  // Локальная псевдопеременная для создания проблем с 

// восстановлением кода

Понятно, что эти переменные там не определяются, а только используются, но цель, была, как я понимаю, проверить именно используемые глобальные имена в защищенных модулях.

Если «хотится», что-то более конкретное, выкладывайте базу на Яндекс-Диск, а там посмотрим.
   1Сергей
 
16 - 05.06.18 - 14:21
ета... А через табло никак?
   youalex
 
17 - 05.06.18 - 20:02
Если просто узнать, то, наверное, можно и через локальные переменные..
   АнализДанных
 
18 - 05.06.18 - 20:10
В EDT есть возможность просматривать все локальные переменные, может там и глобальные будут видны. У меня сейчас нет возможности проверить.
   Tateossian
 
19 - 05.06.18 - 20:35
(18) Локальные и в конфигураторе видно.
   АнализДанных
 
20 - 06.06.18 - 10:28
(19) читай внимательно: может там и глобальные будут видны. сейчас нет возможности проверить
   Buster007
 
21 - 06.06.18 - 10:38
(15) так замучаешься каждому доказывать...
   MWWRuza
 
22 - 06.06.18 - 11:28
Не, если так все сложно, надо попробовать просто у разработчика конфы спросить. Я думал, есть какой-то более простой способ, что можно увидеть и не "дергать" по пустякам уважаемого человека.

По сути - это все связано с пресловутыми онлайн-кассами. Есть некая полузакрытая конфа. Купленная честным образом два года назад. Работала все это время с ЕНВД чековым принтером. Сейчас - понадобилось онлайн. Но, в силу некоторых моих "шкурных" интересов, ККТ, довольно редко-используемой в малом бизнесе модели. У разработчика их под рукой нет, зато у меня вагон - и в том числе и с эмулятором ФН(МГМ). Обработку я написал, переделав штриховскую из поставки конфигурации. Все в принципе работает, уже второй день в реальном магазине - полет нормальный.
Но! Не нравится мне как это все сделано. При каждом обращении к кассе, происходит ее подключение, загрузка драйвера, создание объекта драйвера, получение его ID и т.д... А это около 3 секунд задержка. Потому, что переменная, в которой в виде структуры хранится объект драйвера вместе с параметрами - локальная, объявлена в этой обработке. Естественно, при закрытии обработки она убивается, и при следующем обращением к ней все заново. Было-бы гораздо правильнее, создав объект при первом обращении к кассе, хранить его в глобальной переменной, и при последующих обращениях только проверять что он есть. Все работало-бы быстрее. Но, не имея доступа к закрытым модулям конфигурации, это трудно реализовать...  Поэтому и возник вопрос.
   Emery
 
23 - 06.06.18 - 15:30
(22) > не имея доступа к закрытым модулям конфигурации, это трудно реализовать

Если будет cf-файл конфы, то могу глянуть ее закрытые модули и если их меньше 100 КБ, то может быть и декомпилировать.
   Вафель
 
24 - 06.06.18 - 15:33
а резве синтаксис контроль не сможет это все проверить?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует