VBS

Раздел для обсуждения программного обеспечения КБ по ККМ Меркурий.
Ответить
Аватара пользователя
Евгений Брешков
Сообщения: 6
Зарегистрирован: 26 окт 2015, 00:58

VBS

Сообщение Евгений Брешков »

У меня нет возможности на VBS указать явный тип переменной, поэтому все функции с переменные OUT выдают ошибку. Причем это касается не только string, но и остальных.
Можно ли как то работать с типом Variant?

пока я выкрутился, КР один.
DevID = 1 всегда.
а на всех переменных OUT указываю Empty
но хотелось бы полноценную работу ))

спасибо)
(использую Меркурий 119)
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: VBS

Сообщение slan »

К сожалению не знаю вижуал бейсика
Аватара пользователя
Евгений Брешков
Сообщения: 6
Зарегистрирован: 26 окт 2015, 00:58

Re: VBS

Сообщение Евгений Брешков »

slan писал(а):К сожалению не знаю вижуал бейсика
Мне тяжело что-либо вам подсказать), но какая разница знаете вы его или нет?
хотелось бы, что бы получать выходные параметры.

сегодня запустил первому клиенту КР, но если я использую CancelCheck, потом Close.
после этого новый чек не открывается. Убрал эти функции.

VBScript имеет только один тип данных, называемый Variant.
но если я не ошибаюсь, эта переменная есть не только тут
Delphi, MS Access, C++ (из поиска)


(Донецк, ПО - Акцент)
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: VBS

Сообщение slan »

Я не понимаю чего Вы от меня тогда хотите?
Выходные параметры прекрасно читаются из 1С (старше восьмерки) и из С++.
Как получать выходные параметры из вижуалбейсика, повторюсь, не знаю.
Если хотите, могу написать как это делается на С++
Аватара пользователя
Евгений Брешков
Сообщения: 6
Зарегистрирован: 26 окт 2015, 00:58

Re: VBS

Сообщение Евгений Брешков »

slan писал(а):Я не понимаю чего Вы от меня тогда хотите?
Выходные параметры прекрасно читаются из 1С (старше восьмерки) и из С++.
Как получать выходные параметры из вижуалбейсика, повторюсь, не знаю.
Если хотите, могу написать как это делается на С++
попробуйте сделать на С++
DeviceID тип переменной = Variant
OpenWithParams выдает ошибку внутри вашей функции - ошибка типа переменной

я прошу рассмотреть вот такой вариант, и если это возможно, разрешить Variant получить необходимое значение BSTR (стать другим типом - как вам удобней)

то же по остальным функциям. где LONG, или DOUBLE, или BSTR.

за ранее благодарен) и еще раз прошу очень и очень слезно)
тенденция наблюдается такая: КР Datecs возможно перепрограммировать только старые. новые невозможно. поэтому все сейчас покупают у вас 119. у меня уже спрашивают про другие ваши модели.
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: VBS

Сообщение slan »

Драйвер разрабатывался в соответствии с документом компании 1С под названием "Требования к разработке драйверов для фискальных регистраторов" (от 17 августа 2009).
Все типы данных прописаны именно в нём, и изменяться не будут, так как прежде всего драйвер разрабатывался для 1С.
Аватара пользователя
Евгений Брешков
Сообщения: 6
Зарегистрирован: 26 окт 2015, 00:58

Re: VBS

Сообщение Евгений Брешков »

slan писал(а):Драйвер разрабатывался в соответствии с документом компании 1С под названием "Требования к разработке драйверов для фискальных регистраторов" (от 17 августа 2009).
Все типы данных прописаны именно в нём, и изменяться не будут, так как прежде всего драйвер разрабатывался для 1С.
хорошо, что делать нам?
Аватара пользователя
balance
Сообщения: 1
Зарегистрирован: 27 окт 2015, 12:45

Re: VBS

Сообщение balance »

slan писал(а):Драйвер разрабатывался в соответствии с документом компании 1С под названием "Требования к разработке драйверов для фискальных регистраторов" (от 17 августа 2009).
Все типы данных прописаны именно в нём, и изменяться не будут, так как прежде всего драйвер разрабатывался для 1С.
Как может драйвер разрабатываться под конкретное прикладное ПО? Он же на то и драйвер, чтобы работать с любым ПО.
Как может разработчик прикладного ПО предъявлять требования к драйверу? В нормальной жизни ведь всё наоборот.

Конечно, если Инкотекс является дочерней структурой 1С, то все вопросы отпадают. Если это не так, то разработчикам стоит учитывать, что кроме 1С есть и другие программы.

Да и проблема-то не требует менять принцип работы Вашего ПО. Просто при проверке типа выходного параметра, если он Variant, то предварительно преобразовывать его BSTR и работать дальше как и сейчас. Заметьте, что возвращать можно уже преобразованный параметр, VBS будет нормально с ним работать
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: VBS

Сообщение slan »

Как может драйвер разрабатываться под конкретное прикладное ПО? Он же на то и драйвер, чтобы работать с любым ПО.
Замечу что данный драйвер является OLE-сервером, а не драйвером в обычном понимании этого термина. Все правильно, драйвер разработан не под конкретное ПО, а под любое ПО по технологии Microsoft OLE Automation. Драйвер не обязан работать вместе со всеми известными языками программирования. Большинство пользователей как-то работают же с драйвером, поищите по форуму.
Как может разработчик прикладного ПО предъявлять требования к драйверу? В нормальной жизни ведь всё наоборот.
Надеюсь ответ выше проясняет ответ на этот вопрос. Однако ж документ такой есть, и игнорить его в пользу программистов vbs я не могу. Впрочем, если я получу задание разработать драйвер именно под vbs от начальства - то естественно я этим займусь, контакты есть на сайте.
Да и проблема-то не требует менять принцип работы Вашего ПО. Просто при проверке типа выходного параметра, если он Variant, то предварительно преобразовывать его BSTR и работать дальше как и сейчас. Заметьте, что возвращать можно уже преобразованный параметр, VBS будет нормально с ним работать
Это не наша проблема, а проблема программирования на vbs. Как Вы себе представляете процесс предварительного преобразования? Например, есть метод getCashierName(BSTR* name). Я не могу поставить VARIANT вместо BSTR, потому как у всех других пользователей драйвера попадают программы
хорошо, что делать нам?
Посоветовать могу написать прослойку, как некоторые делали для 1с 7.7 (с которой данный драйвер версии 2.х так же не работает в плане выходных параметров). Или использовать другой язык программирования
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: VBS

Сообщение slan »

И, кстати, по поводу термина "драйвер". Меркурий-119, оборудованный com-портом, не требует каких-либо специфических драйверов от производителя. С ним можно работать напрямую, через com-порт.
Драйвер (а точнее OLE-сервер), о котором идёт речь на этом форуме, лишь облегчает работу с Меркурий-119, выполняя всё черновую работу по поддержке протокола. Он совсем не обязателен. Если есть желание, можно написать собственную реализацию протокола Меркурий-119, на любом желаемом языке программирования и под любую операционную систему, руководство по программированию есть в свободном доступе на этом сайте.
Аватара пользователя
Евгений Брешков
Сообщения: 6
Зарегистрирован: 26 окт 2015, 00:58

Re: VBS

Сообщение Евгений Брешков »

slan писал(а):
Да и проблема-то не требует менять принцип работы Вашего ПО. Просто при проверке типа выходного параметра, если он Variant, то предварительно преобразовывать его BSTR и работать дальше как и сейчас. Заметьте, что возвращать можно уже преобразованный параметр, VBS будет нормально с ним работать
Это не наша проблема, а проблема программирования на vbs. Как Вы себе представляете процесс предварительного преобразования? Например, есть метод getCashierName(BSTR* name). Я не могу поставить VARIANT вместо BSTR, потому как у всех других пользователей драйвера попадают программы
насколько я понимаю, если выходной параметр метода getCashierName(BSTR* name) сделать VARIANT, а потом преобразовать его в BSTR*, то все будет работать нормально.
но ваша позиция понятна (
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: VBS

Сообщение slan »

Нет. Это не так.
Только что проверил специально. Создал тестовый метод, в котором один выходной параметр типа VARIANT*. Отдаю в него тестовую строку.
Затем вызываю этот метод из тестового приложения, передав в него адрес строки (то есть точно тот же код, как если бы метод требовал BSTR*):

Код: Выделить всё

WideString teststr;
result = Obj.OleFunction("TestMethod", &teststr);
В ответ получил экзепшн "Неверно задана вызываемая сторона".
Если вызывать:

Код: Выделить всё

Variant teststr;
result = Obj.OleFunction("TestMethod", &teststr);
то всё чудесно, однако это приведёт к тому о чем я и говорил - у всех пользователей драйвера перестанут работать программы
p.s. если в драйвере преобразовать строку находящуюся в Variant к BSTR, и попытаться отдать в выходной параметр, то драйвер просто не компилируется
Аватара пользователя
Евгений Брешков
Сообщения: 6
Зарегистрирован: 26 окт 2015, 00:58

Re: VBS

Сообщение Евгений Брешков »

slan писал(а):Нет. Это не так.
Только что проверил специально. Создал тестовый метод, в котором один выходной параметр типа VARIANT*. Отдаю в него тестовую строку.
Затем вызываю этот метод из тестового приложения, передав в него адрес строки (то есть точно тот же код, как если бы метод требовал BSTR*):

Код: Выделить всё

WideString teststr;
result = Obj.OleFunction("TestMethod", &teststr);
В ответ получил экзепшн "Неверно задана вызываемая сторона".
Если вызывать:

Код: Выделить всё

Variant teststr;
result = Obj.OleFunction("TestMethod", &teststr);
то всё чудесно, однако это приведёт к тому о чем я и говорил - у всех пользователей драйвера перестанут работать программы
p.s. если в драйвере преобразовать строку находящуюся в Variant к BSTR, и попытаться отдать в выходной параметр, то драйвер просто не компилируется
спасибо большое, что потратили на меня время)
Ответить