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

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Представление булева в 7.7...

v7: Представление булева в 7.7...
Я
   MWWRuza
 
15.10.18 - 13:26
Добрый день!

Есть некий драйвер, по технологии "COM", естественно разрабатывался изначально под снеговика, с учетом "Требования к разработке драйверов подключаемого оборудования. Версия 2.4", но и под клюшками работает. В принципе, все более-менее нормально, но есть одно НО!
По требованиям к разработке, "Тип возвращаемого значения" - "BOOL".
Под восьмеркой, так и возвращает:
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-244.jpg
А вот под 7.7, логично было-бы предположить, что должен возвращать 1/0... А вот фиг там:
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-243.jpg
Какое-то непонятное число... Почему? Косяк в написании драйвера, или я что-то не так делаю? Если я, то как правильно интерпретировать в 7.7 результат выполнения метода?
 
 
   MWWRuza
 
1 - 15.10.18 - 13:30
В дополнение - под 7.7 драйвер отрабатывает метод "ЗакрытьСмену", смена в ККТ закрывается, Z-отчет печатается, все нормально... Только с возвращаемым значением непонятка...
   big
 
2 - 15.10.18 - 13:38
А что говорит ТипЗначенияСтр(ВыхПар)?  А если сделать Число(ВыхПар) - что покажет?

ЕМНИП при работе из 7-ки с СОМ ложь это 0, а истина -1
   ADirks
 
3 - 15.10.18 - 13:39
(0) в спецификации COM
True == -1
False == любое другое значение (но обычно 0)
   MWWRuza
 
4 - 15.10.18 - 14:03
(2) Сейчас попробую, но, то, что значение без кавычек, наводит на мысль, что это и так число...

(3) Это понятно... Но, тут то не так...

Да, в дополнение - если принудительно внести в исполнение метода ошибку, например передать пустой первый параметр, то метод не исполняется и возвращается: Результат = 1179648...
Бред какой-то. Конечно, если бы быть уверенным, что так будет всегда, то написать функцию преобразования этих непонятных чисел в 1/0 две секунды, три строчки. Но, где гарантия, что это не абстрактные, случайные числа? Может они от чего-то зависят, и сейчас такие а вдругой момент будут другие? Как узнать?
   MWWRuza
 
5 - 15.10.18 - 14:09
(2) Вот:
ТипЗначенияСтр(Результат) = "Число"
Число(Результат) = 1179648

Результат в данном случае "Ложь", так, как смена уже открыта, но, это в принципе без разницы.
   MWWRuza
 
6 - 15.10.18 - 14:19
(2) ВыхПар - в данном примере это строка, она результат исполнения другого метода: Spark.ПолучитьОшибку(ВыхПар); Из описания технологии: "Возвращает код и описание последней произошедшей ошибки." Тут все правильно работает.
Нас интересует другая переменная - "Результат".
   АЛьФ
 
7 - 15.10.18 - 14:31
1179648 = 0х00120000
Явно какая-то константа возвращается.
   ADirks
 
8 - 15.10.18 - 14:35
(+7) Причём, ребята похоже решили таким образом двух зайцев убить. Типа, и False, и код ошибки заодно.
А может, случайно получилось :)
   MWWRuza
 
9 - 15.10.18 - 14:43
(8) Скорее всего случайно. На код ошибки не похоже. Одинаковая фигня возвращается, когда принудительно ошибку вношу, передав пустой первый параметр, и когда ошибка возникает потому, что "смена уже открыта".
Ну да хрен с ней, с "False" имеет право на жизнь, по спецификации - "любое другое значение".
Но, вот с "True" хуже... Должно быть -1 или 1, но ни как ни эта абракадабра - 1245183...
   Cool_Profi
 
10 - 15.10.18 - 14:49
ложь - 0, не ложь (ака истина) не 0.
В чём проблема?
 
 Рекламное место пустует
   ADirks
 
11 - 15.10.18 - 14:54
хм...
похоже, что всё-же какое-то -1, но не врублюсь как
1245183 == 0x12FFFF
(unsigned short)(-1) == 0xFFFF
шо за 0x12 не догоняю
   MWWRuza
 
12 - 15.10.18 - 14:56
(10) Да был бы там 0, не было бы проблем. А там почему-то 1179648. И не факт, что всегда, когда должен быть 0, там именно эта комбинация чисел будет :-(
   Cool_Profi
 
13 - 15.10.18 - 15:01
(12) Там 0? Нет. Так тебе ещё чего надо?
   trad
 
14 - 15.10.18 - 15:10
1245183 == 0x12FFFF
1179648 == 0x120000
это VARIANT, где
0x12 - VT_TYPE = VT_UI2
0xFFFF и 0x0000 - собственно сам UI2, который в свою очередь соответствует TRUE и FALSE
   MWWRuza
 
15 - 15.10.18 - 15:42
(13) Так там никогда не бывает 0. Даже, когда метод не отработал.

(14) А вот это, очень похоже на правду... Значит, можно считать, что 1245183 это 1, а 1179648 это 0. Тогда, все становится на свои места.
   MWWRuza
 
16 - 15.10.18 - 16:49
В общем, как я понял из общения с разработчиком драйвера, в зависимости от того, из какой версии 1С он используется, надо по разному возврат значения делать. Для восьмерки возвращать булево, а для 7.7 число 1/0. Только как из драйвера можно определить, из какой 1С его вызвали? Есть какие-то методы? Драйвер на C++ написан... Кто-нибудь сталкивался с такой задачей?
   MWWRuza
 
17 - 15.10.18 - 19:49
Всем спасибо!
Вопрос решен. Разработчик исправил что-то в драйвере, теперь в 7.7 возвращает -1/0, в восьмерке, как и было, булево. Главное - понять, в чем дело, остальное - дело техники :-)
   Kigo_Kigo
 
18 - 15.10.18 - 21:27
часто замечаю, походу разрабы симофорят наш форум :)
   MWWRuza
 
19 - 16.10.18 - 10:46
(18) Ну, не знаю... Наверняка. И это правильно.
Но, в данном случае, я ему сам ссылку на эту ветку форума дал. В моих интересах, что-бы драйвер работал нормально в том числе и под клюшками. У меня на 7.7 с такими кассами пока еще клиентов много.

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