Проблемы с подключением 119Ф

Модели:
Меркурий-114.1К, Меркурий 115Ф, Меркурий 119Ф, Меркурий 130ф, Меркурий MS-K
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Проблемы с подключением 119Ф

Сообщение slan »

Вы приложите чек, укажите версию прошивки и версию драйвера. Тогда можно будет что-то сказать.

Теги:
Аватара пользователя
lopstop
Сообщения: 52
Зарегистрирован: 27 дек 2017, 15:48

Re: Проблемы с подключением 119Ф

Сообщение lopstop »

Версия драйвера 2.0.1
Обработка обслуживания 2.0.0.1
Версия ПО 2
СБОРКА 4

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

Re: Проблемы с подключением 119Ф

Сообщение slan »

И всё же без скриншота чека сложно о чём-то говорить. Вот, например, мой чек из 1ски:
Изображение
Аватара пользователя
lopstop
Сообщения: 52
Зарегистрирован: 27 дек 2017, 15:48

Re: Проблемы с подключением 119Ф

Сообщение lopstop »

Вот фото чека в 1с (скидка стоит) и распечатанный чек.

https://yadi.sk/i/mqUSTgH-3XEL3A
https://yadi.sk/i/SVthtHH53XELXj

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

Re: Проблемы с подключением 119Ф

Сообщение slan »

С точки зрения 54-ФЗ так и должно быть. В ОФД должна уйти сумма со скидкой и бумажный чек не обязан содержать информацию о примененных скидках. Однако, драйвер текстовой строкой выводит на бумажном чеке сумму скидки, почему этого не происходит у вас - будем разбираться. У вас УТ 10.3?
Аватара пользователя
lopstop
Сообщения: 52
Зарегистрирован: 27 дек 2017, 15:48

Re: Проблемы с подключением 119Ф

Сообщение lopstop »

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"/>

Исходя из лога сумму дисконта не передает в чек
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Проблемы с подключением 119Ф

Сообщение slan »

Забыл, что у вас отладочная версия. Да, исходя из этих данных, драйвер не напечатает стоку скидки, так как она пустая. Эту строку формирует 1С. Видимо, в УТ 10.3 это не реализовано, иначе ваш чек выглядел бы как мой.
Аватара пользователя
lopstop
Сообщения: 52
Зарегистрирован: 27 дек 2017, 15:48

Re: Проблемы с подключением 119Ф

Сообщение lopstop »

Раньше передавало, с первыми версиями дров и прошивок
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Проблемы с подключением 119Ф

Сообщение slan »

Раньше, это когда?
Если речь о прошивках 1.х (и драйвере 1.х), то это был протокол работы ФФД 1.0, там были совсем другие поля.
Вы же сейчас используете прошивку устройства 2.х, (и драйвер 2.х) соответственно протокол ФФД 1.0.5. К нему требования 1С другие.
Аватара пользователя
lopstop
Сообщения: 52
Зарегистрирован: 27 дек 2017, 15:48

Re: Проблемы с подключением 119Ф

Сообщение lopstop »

Да, с первыми релизами. Я понял. Спасибо.
Аватара пользователя
sdknk
Сообщения: 9
Зарегистрирован: 18 дек 2018, 18:11

Re: Проблемы с подключением 119Ф

Сообщение sdknk »

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 );
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Проблемы с подключением 119Ф

Сообщение slan »

кусок кода из моей тестовой утилитки:

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

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"---------------------------------------");
Аватара пользователя
sdknk
Сообщения: 9
Зарегистрирован: 18 дек 2018, 18:11

Re: Проблемы с подключением 119Ф

Сообщение sdknk »

Большое спасибо! Осталось только узнать про Идентификатор подключенного устройства DeviceID. Я либо его неправильно указываю, либо туда метод Подключить возвращает что попало. Не могли бы Вы показать, как происходит объявление DeviceID и если можно, то кусок кода с методом Подключить? Я его объявляю как глобальную переменную WideString DeviceID = ""; Это правильно? Сам метод Подключить выглядит так: res = FP.OleFunction(L"Подключить", &DeviceID); Это правильно? Почему то все методы, которые работают с DeviceID дают ошибку "Устройство с таким номером отсутствует"
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Проблемы с подключением 119Ф

Сообщение slan »

Да у вас вроде всё правильно, кроме одного: все методы, принимающие первым параметром DeviceID, по документации хотят BSTR. Вы же пытаетесь подсунуть WideString. Наверное из-за этого и проблемы. Посмотрите на мой пример выше, там deviceId.c_bstr()
Аватара пользователя
sdknk
Сообщения: 9
Зарегистрирован: 18 дек 2018, 18:11

Re: Проблемы с подключением 119Ф

Сообщение sdknk »

Исправил, то же самое. "Устройство с таким номером отсутствует" Что содержится в DeviceID после метода Подключить? У меня там -1 при подключении через USB. Там же полагаю вместо -1 адресная ссылка должна быть?
Делаю вроде как в описании
Методом GetUsbNameFromNumber получаю "Mercury-119F USB #1"
Методом GetUsbPortNumberFromName получаю номер порта -1
Методом УстановитьПараметр устанавливаю значения Port=-1, Protocol=1, Speed=115200.
Затем метод Подключить, который почему то возвращает в DeviceID -1.
Может пришлете кусок с методом Подключить?
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Проблемы с подключением 119Ф

Сообщение slan »

Всё правильно. При подключенном единственном USB устройстве Меркурий к компьютеру, и должно быть DeviceID = "-1".
Аватара пользователя
sdknk
Сообщения: 9
Зарегистрирован: 18 дек 2018, 18:11

Re: Проблемы с подключением 119Ф

Сообщение sdknk »

Спасибо огромное за помощь! Все работает как часы!
Аватара пользователя
sdknk
Сообщения: 9
Зарегистрирован: 18 дек 2018, 18:11

Re: Проблемы с подключением 119Ф

Сообщение sdknk »

Еще побеспокою Вас, уже надеюсь последний вопрос. Все работает, кроме главного метода - СформироватьЧек (ProcessCheck)
Чего только не делал, результат один - "error 16: Неверный формат команды". Точно ли описан метод в MercuryComOFDFPDriver Manual.pdf,
не устарело ли описание? При печати чека через панель управления есть код товара (КТН), в описанной структуре XML его нет... Параметров передается точно восемь? Кассир точно передается в свойствах, по идее он же должен входить в структуру XML. Почему он VARIANT в данном случае, когда в других методах драйвера он BSTR? Обязательные поля в XML соответствуют описанию? Вопросов много, а времени до 01.01.19 уже просто почти не осталось. Поэтому можно пример обязательно рабочего XML для ФФД 1.05 и как правильно указать переменную для кассира и передать ее в метод?
Аватара пользователя
slan
Сообщения: 1157
Зарегистрирован: 18 фев 2011, 11:36
Откуда: Курск

Re: Проблемы с подключением 119Ф

Сообщение slan »

Это косяки документации.
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"---------------------------------------");
Аватара пользователя
sdknk
Сообщения: 9
Зарегистрирован: 18 дек 2018, 18:11

Re: Проблемы с подключением 119Ф

Сообщение sdknk »

Работает кажется все! Все нужные методы попробовал. Огромное Вам спасибо!!!
Ответить