Delphi. Подключение фискального регистратора ATOL, STRICH-M
В связи с последними событиями связанными с массовым внедрением он-лайн касс, в сети (на фрилансе в частности) появилось много запросов от программистов. У нас это сделано в lazarus, но суть от этого не меняется. Используется подключение по COM к драйверу ККМ. Синтаксис у атола и штрих-м немного отличается, ознакомиться с примерами можно в примерах для атол- C:\Program Files\ATOL\Drivers8\Samples\FprnM\JScript.
Сам код полностью не привожу, тут все бурно меняется.
//создали объект
ECR := CreateOleObject(‘AddIn.FprnM45′);
ECR.ApplicationHandle := Application.Mainform.Handle;
//заняли порт
ecr.DeviceEnabled:=1;
//пароль кассира=1
pwd_kass:=’1’;
…………………………………………………………………………
Главное — это принцип, использование COM-объекта. Также можно посмотреть этот принцип в примере для 1С 7.7. И вообще, чем писать свой софт, может лучше Tandem7pi использовать ? Ключ к одной торговой точке — 2500 р. Количество рабочих мест в одной торговой точке не ограничено.
——- Добавлено 20.09.19
«Грабли» при переходе на ATOL DTO 10…..
Ну во первых нужно пользоваться 32 разрядной версией.
Во вторых при запуске установки не забыть отметить, чтобы установилась поддержка 1С 8… Это и есть поддержка работы через COM — объекты.
Попутно. Как определяет драйвер имя кассира? По его паролю. Народ просто ставит везде пароль 30 (и кассиру и сис.админу) и в тест-драйвере меняет имя сис.админ на Ф.И.О. продавца, там же и ИНН вводят.
Код с переходом на драйвер 10 поменялся значительно.
FR := CreateOleObject(‘AddIn.Fptr10′);
fr.setSingleSetting(Fr.LIBFPTR_SETTING_ACCESS_PASSWORD,0);
fr.setSingleSetting(Fr.LIBFPTR_SETTING_USER_PASSWORD,30);
fr.applySingleSettings();
FR.open;
//активируем кассира
FR.operatorLogin;
FR.checkDocumentClosed;//закрыли на всяк случай зависший чек
if fr.errorDescription<>’Ошибок нет’ then
showmessage(fr.errorDescription);
if vid=’prodaga’ then
begin
FR.setParam(FR.LIBFPTR_PARAM_RECEIPT_TYPE, FR.LIBFPTR_RT_SELL);
end else
if vid=’vozvrat’ then
begin
FR.setParam(FR.LIBFPTR_PARAM_RECEIPT_TYPE, FR.LIBFPTR_RT_SELL_RETURN);
end;
//открыли чек
FR.openReceipt;
//наименование
FR.setParam(FR.LIBFPTR_PARAM_COMMODITY_NAME,str);
//цена
FR.setParam(FR.LIBFPTR_PARAM_PRICE, form1.strtocurrmy(stringgrid1.Cells[1,i]));
//кол-во
FR.setParam(FR.LIBFPTR_PARAM_QUANTITY,form1.strtocurrmy(stringgrid1.Cells[2,i]));
//ндс
FR.setParam(FR.LIBFPTR_PARAM_TAX_TYPE,FR.LIBFPTR_TAX_NO);
//режим 105
// fr.setParam(1212, 1);// # товар
// fr.setParam(1214, 4);// # полный расчет
if marka<>» then fr.setParam(FR.LIBFPTR_PARAM_MARKING_CODE, marka);//хрен его знает ?
//зарегистрировали позицию
predmet:=1;
FR.setParam(1212,predmet);
FR.registration;
P.S. А еще есть простое решение. На pi-d.ru размещена наша программулина tandem7pi_simple. Печатает чек из любой программы через простейший текстовый файлик обмена. А также может быть доработана для печати из Вашей программы .