Проблемы с подключением 119Ф
Re: Проблемы с подключением 119Ф
Вы приложите чек, укажите версию прошивки и версию драйвера. Тогда можно будет что-то сказать.
Теги:
Re: Проблемы с подключением 119Ф
Версия драйвера 2.0.1
Обработка обслуживания 2.0.0.1
Версия ПО 2
СБОРКА 4
сегодня прошил сборку 5, но еще не работал с ней.
Обработка обслуживания 2.0.0.1
Версия ПО 2
СБОРКА 4
сегодня прошил сборку 5, но еще не работал с ней.
Re: Проблемы с подключением 119Ф
И всё же без скриншота чека сложно о чём-то говорить. Вот, например, мой чек из 1ски:
Re: Проблемы с подключением 119Ф
Вот фото чека в 1с (скидка стоит) и распечатанный чек.
https://yadi.sk/i/mqUSTgH-3XEL3A
https://yadi.sk/i/SVthtHH53XELXj
Кассу обновил до 5 сборки
https://yadi.sk/i/mqUSTgH-3XEL3A
https://yadi.sk/i/SVthtHH53XELXj
Кассу обновил до 5 сборки
Re: Проблемы с подключением 119Ф
С точки зрения 54-ФЗ так и должно быть. В ОФД должна уйти сумма со скидкой и бумажный чек не обязан содержать информацию о примененных скидках. Однако, драйвер текстовой строкой выводит на бумажном чеке сумму скидки, почему этого не происходит у вас - будем разбираться. У вас УТ 10.3?
Re: Проблемы с подключением 119Ф
1С:Предприятие 8.3 (8.3.12.1412)
"Управление торговлей (базовая)", редакция 10.3 (10.3.47.3)
<Parameters PaymentType="1" TaxVariant="1" CashierName="xxx" CustomerEmail="" CustomerPhone=""/>
<Positions>
<FiscalString Name="Ключ трубчатый ER-72213 12х13 мм ЭВРИКА шт" Quantity="1" PriceWithDiscount="76.5" SumWithDiscount="76.5" DiscountSum="" Department="1" Tax="none" SignMethodCalculation="4" SignCalculationObject="1" TaxSum=""/>
</Positions>
<Payments Cash="130.5" ElectronicPayment="0" Credit="0" AdvancePayment="0" CashProvision="0"/>
Исходя из лога сумму дисконта не передает в чек
"Управление торговлей (базовая)", редакция 10.3 (10.3.47.3)
<Parameters PaymentType="1" TaxVariant="1" CashierName="xxx" CustomerEmail="" CustomerPhone=""/>
<Positions>
<FiscalString Name="Ключ трубчатый ER-72213 12х13 мм ЭВРИКА шт" Quantity="1" PriceWithDiscount="76.5" SumWithDiscount="76.5" DiscountSum="" Department="1" Tax="none" SignMethodCalculation="4" SignCalculationObject="1" TaxSum=""/>
</Positions>
<Payments Cash="130.5" ElectronicPayment="0" Credit="0" AdvancePayment="0" CashProvision="0"/>
Исходя из лога сумму дисконта не передает в чек
Re: Проблемы с подключением 119Ф
Забыл, что у вас отладочная версия. Да, исходя из этих данных, драйвер не напечатает стоку скидки, так как она пустая. Эту строку формирует 1С. Видимо, в УТ 10.3 это не реализовано, иначе ваш чек выглядел бы как мой.
Re: Проблемы с подключением 119Ф
Раньше передавало, с первыми версиями дров и прошивок
Re: Проблемы с подключением 119Ф
Раньше, это когда?
Если речь о прошивках 1.х (и драйвере 1.х), то это был протокол работы ФФД 1.0, там были совсем другие поля.
Вы же сейчас используете прошивку устройства 2.х, (и драйвер 2.х) соответственно протокол ФФД 1.0.5. К нему требования 1С другие.
Если речь о прошивках 1.х (и драйвере 1.х), то это был протокол работы ФФД 1.0, там были совсем другие поля.
Вы же сейчас используете прошивку устройства 2.х, (и драйвер 2.х) соответственно протокол ФФД 1.0.5. К нему требования 1С другие.
Re: Проблемы с подключением 119Ф
Да, с первыми релизами. Я понял. Спасибо.
Re: Проблемы с подключением 119Ф
slan, Если не трудно, подскажите в чем ошибка. Порт открывается нормально, но при попытке открыть смену выдает
Получить параметры ... error 131072: Устройство с таким номером отсутствует. Но... пару раз получилось открыть смену, снять Х отчет и закрыть смену!
WideString DeviceID = ""; // глобальная переменная
Variant FP;
VARIANT_BOOL res;
WideString errorDescription = "";
int idError = 0;
FP = CreateOleObject(L"MercuryCom.OfdFPDriver");
WideString port = L"Port";
VARIANT vPort;
vPort.vt = VT_I4;
vPort.intVal = -1;
WideString protocol = L"Protocol";
VARIANT vProtocol;
vProtocol.vt = VT_I4;
vProtocol.intVal = 1;
WideString speed = L"Speed";
VARIANT vSpeed;
vSpeed.vt = VT_I4;
vSpeed.intVal = 115200;
WideString UsbID;
res = FP.OleFunction(L"GetUsbNameFromNumber", 1,&UsbID);
if(res == VARIANT_FALSE) Memo1->Lines->Append(L"Id USB не определен");
else Memo1->Lines->Append((WideString)"USB " + UsbID);
res = FP.OleFunction(L"GetUsbPortNumberFromName", UsbID,&vPort);
if(res == VARIANT_FALSE) Memo1->Lines->Append(L"Номер порта USB не определен");
else Memo1->Lines->Append((WideString)"Port " + WideString(vPort.intVal));
res = FP.OleFunction(L"УстановитьПараметр", port.c_bstr(), vPort);
if(res == VARIANT_FALSE) Memo1->Lines->Append(L"Параметр Port не установлен");
res = FP.OleFunction(L"УстановитьПараметр", protocol.c_bstr(), vProtocol);
if(res == VARIANT_FALSE) Memo1->Lines->Append(L"Параметр Protocol не установлен");
res = FP.OleFunction(L"УстановитьПараметр", speed.c_bstr(), vSpeed);
if(res == VARIANT_FALSE) Memo1->Lines->Append(L"Параметр Speed не установлен");
res = FP.OleFunction(L"Подключить", &DeviceID);
if(res == VARIANT_TRUE){
Memo1->Lines->Append((WideString)"Порт открыт "+DeviceID);
Memo1->Lines->Append(L"---------------------------------------");
}
else{
idError = FP.OleFunction((WideString)"ПолучитьОшибку", &errorDescription);
Memo1->Lines->Append((WideString)"Получить параметры ... error " + WideString(idError) + (WideString)": " + errorDescription);
Memo1->Lines->Append((WideString)"---------------------------------------");
}
А смену пытаюсь открыть так: res = FP.OleFunction(L"ОткрытьСмену", DeviceID, Kassir, &numsm, &numch );
Получить параметры ... error 131072: Устройство с таким номером отсутствует. Но... пару раз получилось открыть смену, снять Х отчет и закрыть смену!
WideString DeviceID = ""; // глобальная переменная
Variant FP;
VARIANT_BOOL res;
WideString errorDescription = "";
int idError = 0;
FP = CreateOleObject(L"MercuryCom.OfdFPDriver");
WideString port = L"Port";
VARIANT vPort;
vPort.vt = VT_I4;
vPort.intVal = -1;
WideString protocol = L"Protocol";
VARIANT vProtocol;
vProtocol.vt = VT_I4;
vProtocol.intVal = 1;
WideString speed = L"Speed";
VARIANT vSpeed;
vSpeed.vt = VT_I4;
vSpeed.intVal = 115200;
WideString UsbID;
res = FP.OleFunction(L"GetUsbNameFromNumber", 1,&UsbID);
if(res == VARIANT_FALSE) Memo1->Lines->Append(L"Id USB не определен");
else Memo1->Lines->Append((WideString)"USB " + UsbID);
res = FP.OleFunction(L"GetUsbPortNumberFromName", UsbID,&vPort);
if(res == VARIANT_FALSE) Memo1->Lines->Append(L"Номер порта USB не определен");
else Memo1->Lines->Append((WideString)"Port " + WideString(vPort.intVal));
res = FP.OleFunction(L"УстановитьПараметр", port.c_bstr(), vPort);
if(res == VARIANT_FALSE) Memo1->Lines->Append(L"Параметр Port не установлен");
res = FP.OleFunction(L"УстановитьПараметр", protocol.c_bstr(), vProtocol);
if(res == VARIANT_FALSE) Memo1->Lines->Append(L"Параметр Protocol не установлен");
res = FP.OleFunction(L"УстановитьПараметр", speed.c_bstr(), vSpeed);
if(res == VARIANT_FALSE) Memo1->Lines->Append(L"Параметр Speed не установлен");
res = FP.OleFunction(L"Подключить", &DeviceID);
if(res == VARIANT_TRUE){
Memo1->Lines->Append((WideString)"Порт открыт "+DeviceID);
Memo1->Lines->Append(L"---------------------------------------");
}
else{
idError = FP.OleFunction((WideString)"ПолучитьОшибку", &errorDescription);
Memo1->Lines->Append((WideString)"Получить параметры ... error " + WideString(idError) + (WideString)": " + errorDescription);
Memo1->Lines->Append((WideString)"---------------------------------------");
}
А смену пытаюсь открыть так: res = FP.OleFunction(L"ОткрытьСмену", DeviceID, Kassir, &numsm, &numch );
Re: Проблемы с подключением 119Ф
кусок кода из моей тестовой утилитки:
Код: Выделить всё
errorDescription = "";
idError = 0;
WideString In = L"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<InputParameters>\
<Parameters CashierName=\"Иванов\" CashierVATIN=\"324562345234\"/>\
</InputParameters>";
long shiftNum, checkNum;
WideString Out;
res = FP.OleFunction("ОткрытьСмену2", deviceId.c_bstr(), In.c_bstr(), &Out, &shiftNum, &checkNum);
if(res == VARIANT_TRUE){
Form2->Memo1->Lines->Append(L"Смена открыта");
Form2->Memo1->Lines->Append(L"Номер смены: " + WideString(shiftNum));
Form2->Memo1->Lines->Append(L"Номер документа: " + WideString(checkNum));
Form2->Memo1->Lines->Append(L"Output params: " + Out);
}
else
{
idError = FP.OleFunction(L"ПолучитьОшибку", &errorDescription);
Form2->Memo1->Lines->Append(L"ОткрытьСмену2... error " + WideString(idError) + L": " + errorDescription);
}
Form2->Memo1->Lines->Append(L"---------------------------------------");
Re: Проблемы с подключением 119Ф
Большое спасибо! Осталось только узнать про Идентификатор подключенного устройства DeviceID. Я либо его неправильно указываю, либо туда метод Подключить возвращает что попало. Не могли бы Вы показать, как происходит объявление DeviceID и если можно, то кусок кода с методом Подключить? Я его объявляю как глобальную переменную WideString DeviceID = ""; Это правильно? Сам метод Подключить выглядит так: res = FP.OleFunction(L"Подключить", &DeviceID); Это правильно? Почему то все методы, которые работают с DeviceID дают ошибку "Устройство с таким номером отсутствует"
Re: Проблемы с подключением 119Ф
Да у вас вроде всё правильно, кроме одного: все методы, принимающие первым параметром DeviceID, по документации хотят BSTR. Вы же пытаетесь подсунуть WideString. Наверное из-за этого и проблемы. Посмотрите на мой пример выше, там deviceId.c_bstr()
Re: Проблемы с подключением 119Ф
Исправил, то же самое. "Устройство с таким номером отсутствует" Что содержится в DeviceID после метода Подключить? У меня там -1 при подключении через USB. Там же полагаю вместо -1 адресная ссылка должна быть?
Делаю вроде как в описании
Методом GetUsbNameFromNumber получаю "Mercury-119F USB #1"
Методом GetUsbPortNumberFromName получаю номер порта -1
Методом УстановитьПараметр устанавливаю значения Port=-1, Protocol=1, Speed=115200.
Затем метод Подключить, который почему то возвращает в DeviceID -1.
Может пришлете кусок с методом Подключить?
Делаю вроде как в описании
Методом GetUsbNameFromNumber получаю "Mercury-119F USB #1"
Методом GetUsbPortNumberFromName получаю номер порта -1
Методом УстановитьПараметр устанавливаю значения Port=-1, Protocol=1, Speed=115200.
Затем метод Подключить, который почему то возвращает в DeviceID -1.
Может пришлете кусок с методом Подключить?
Re: Проблемы с подключением 119Ф
Всё правильно. При подключенном единственном USB устройстве Меркурий к компьютеру, и должно быть DeviceID = "-1".
Re: Проблемы с подключением 119Ф
Спасибо огромное за помощь! Все работает как часы!
Re: Проблемы с подключением 119Ф
Еще побеспокою Вас, уже надеюсь последний вопрос. Все работает, кроме главного метода - СформироватьЧек (ProcessCheck)
Чего только не делал, результат один - "error 16: Неверный формат команды". Точно ли описан метод в MercuryComOFDFPDriver Manual.pdf,
не устарело ли описание? При печати чека через панель управления есть код товара (КТН), в описанной структуре XML его нет... Параметров передается точно восемь? Кассир точно передается в свойствах, по идее он же должен входить в структуру XML. Почему он VARIANT в данном случае, когда в других методах драйвера он BSTR? Обязательные поля в XML соответствуют описанию? Вопросов много, а времени до 01.01.19 уже просто почти не осталось. Поэтому можно пример обязательно рабочего XML для ФФД 1.05 и как правильно указать переменную для кассира и передать ее в метод?
Чего только не делал, результат один - "error 16: Неверный формат команды". Точно ли описан метод в MercuryComOFDFPDriver Manual.pdf,
не устарело ли описание? При печати чека через панель управления есть код товара (КТН), в описанной структуре XML его нет... Параметров передается точно восемь? Кассир точно передается в свойствах, по идее он же должен входить в структуру XML. Почему он VARIANT в данном случае, когда в других методах драйвера он BSTR? Обязательные поля в XML соответствуют описанию? Вопросов много, а времени до 01.01.19 уже просто почти не осталось. Поэтому можно пример обязательно рабочего XML для ФФД 1.05 и как правильно указать переменную для кассира и передать ее в метод?
Re: Проблемы с подключением 119Ф
Это косяки документации.
CashierName имеет тип BSTR. Параметров точно 8.
Имя кассира можно также передать и в структуре CheckPackage в теге Parameters с именем CashierName, тогда он заменит собой CashierName, переданный вторым параметром в метод СформироватьЧек (но он всё равно нужен, хотя бы пустой строкой). Это сделано для совместимости со старыми конфигурациями 1С 8.
Код товара на данный момент не поддерживается драйвером.
CashierName имеет тип BSTR. Параметров точно 8.
Имя кассира можно также передать и в структуре CheckPackage в теге Parameters с именем CashierName, тогда он заменит собой CashierName, переданный вторым параметром в метод СформироватьЧек (но он всё равно нужен, хотя бы пустой строкой). Это сделано для совместимости со старыми конфигурациями 1С 8.
Код товара на данный момент не поддерживается драйвером.
Код: Выделить всё
WideString cashier = L"Иванов Пётр";
long shiftNum, checkNum;
WideString FiscalSign, AddressSite;
WideString check = L"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<CheckPackage>\
<Parameters PaymentType=\"1\" TaxVariant=\"0\" CustomerEmail=\"\" CustomerPhone=\"\"/>\
<Positions>\
<FiscalString Name=\"Товар\" Quantity=\"1\" Price=\"50\" Amount=\"50\" Tax=\"10\"/>\
</Positions>\
<Payments Cash=\"0\" CashLessType1=\"50\" CashLessType2=\"0\" CashLessType3=\"0\"/>\
</CheckPackage>";
res = FP.OleFunction("СформироватьЧек", deviceId.c_bstr(), cashier.c_bstr(), VARIANT_FALSE, check.c_bstr(), &checkNum, &shiftNum, &FiscalSign, &AddressSite);
if(res == VARIANT_TRUE){
Form2->Memo1->Lines->Append(L"Чек распечатан");
Form2->Memo1->Lines->Append(L"Номер документа: " + WideString(checkNum));
Form2->Memo1->Lines->Append(L"Номер смены: " + WideString(shiftNum));
Form2->Memo1->Lines->Append(L"Фискальный признак: " + FiscalSign);
Form2->Memo1->Lines->Append(L"Адрес сайта проверки: " + AddressSite);
}
else
{
idError = FP.OleFunction(L"ПолучитьОшибку", &errorDescription);
Form2->Memo1->Lines->Append(L"СформироватьЧек... error " + WideString(idError) + L": " + errorDescription);
}
Form2->Memo1->Lines->Append(L"---------------------------------------");
Re: Проблемы с подключением 119Ф
Работает кажется все! Все нужные методы попробовал. Огромное Вам спасибо!!!