public string PrintDocPack(DocPack doc, int MoneyType = -1, bool returnSale = false, decimal?MoneySumm = null, string sendingAddress = "") { currentDrvPassword = doc.CashierPass; currentDocPack = doc.AgrNumber; if (cancelOpenReceipt) { cancelOpenReceipt = false; if (!atolDriver.getParamBool(Constants.LIBFPTR_PARAM_DOCUMENT_CLOSED)) { atolDriver.cancelReceipt(); Log.AddWithCode("поздняя отмена документа"); } } if (MoneyType != -1) { doc.MoneyType = MoneyType; } PrepareDriver(); double SELL_OR_RETURN = (returnSale ? Constants.LIBFPTR_RT_SELL_RETURN : Constants.LIBFPTR_RT_SELL); atolDriver.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, SELL_OR_RETURN); atolDriver.openReceipt(); Log.AddWithCode("открытие чека"); string sendingCheck = String.Empty; if (!String.IsNullOrEmpty(sendingAddress)) { sendingCheck = sendingAddress; } else if (!String.IsNullOrEmpty(doc.Mobile)) { sendingCheck = doc.Mobile; } else if (!String.IsNullOrEmpty(doc.Email)) { sendingCheck = doc.Email; } if (!String.IsNullOrEmpty(sendingCheck)) { Log.Add("отправка СМС/email на адрес: " + sendingCheck); atolDriver.setParam(1008, sendingCheck); } PrintLine("Кассир: " + CRM.cashier, line: true); if (doc.Region) { PrintLine("Договор:" + doc.AgrNumber); PrintLine("BankID:" + doc.BankID, line: true); } foreach (Service service in doc.Services) { PrepareDriver(); double VAT = (service.VAT == 1 ? Constants.LIBFPTR_TAX_VAT20 : Constants.LIBFPTR_TAX_NO); atolDriver.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, VAT); atolDriver.setParam(Constants.LIBFPTR_PARAM_DEPARTMENT, service.Department); atolDriver.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, service.Name); atolDriver.setParam(Constants.LIBFPTR_PARAM_PRICE, (double)service.Price); atolDriver.setParam(Constants.LIBFPTR_PARAM_QUANTITY, service.Quantity); atolDriver.setParam(Constants.LIBFPTR_PARAM_COMMODITY_PIECE, 1); atolDriver.registration(); PrintLine(line: true); } PrepareDriver(); atolDriver.setParam(Constants.LIBFPTR_PARAM_PAYMENT_SUM, (double)(MoneySumm ?? doc.Money)); if (doc.MoneyType == 1) { Log.Add("тип оплаты: наличными"); atolDriver.setParam(Constants.LIBFPTR_PARAM_PAYMENT_TYPE, Constants.LIBFPTR_PT_CASH); } else { Log.Add("тип оплаты: безнал"); atolDriver.setParam(Constants.LIBFPTR_PARAM_PAYMENT_TYPE, Constants.LIBFPTR_PT_ELECTRONICALLY); } atolDriver.payment(); atolDriver.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_RECEIPT_STATE); atolDriver.queryData(); double change = atolDriver.getParamDouble(Constants.LIBFPTR_PARAM_CHANGE); atolDriver.closeReceipt(); Log.AddWithCode("распечатка чека"); while (atolDriver.checkDocumentClosed() < 0) { Log.AddWithCode("проверка статуса чека"); return("ERR2:Не удалось проверить - " + atolDriver.errorDescription()); } if (!atolDriver.getParamBool(Constants.LIBFPTR_PARAM_DOCUMENT_CLOSED)) { Log.Add("документ не закрылся"); atolDriver.cancelReceipt(); Log.AddWithCode("отмена чека"); if (atolDriver.errorCode() != 0) { cancelOpenReceipt = true; } return("ERR2:Документ не закрылся - " + atolDriver.errorDescription()); } string fdForRegion = String.Empty; if (doc.Region) { atolDriver.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_LAST_RECEIPT); atolDriver.fnQueryData(); fdForRegion = ":" + atolDriver.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER).ToString(); } if (!atolDriver.getParamBool(Constants.LIBFPTR_PARAM_DOCUMENT_PRINTED)) { while (atolDriver.continuePrint() < 0) { Log.AddWithCode("чек не удалось допечатать"); int errCode = (doc.Region ? 5 : 2); return("ERR" + errCode.ToString() + ":Не удалось допечатать - " + atolDriver.errorDescription() + fdForRegion); } } if (!MainWindow.TEST_VERSION && !doc.Region) { RepeatPrint(null, null); } return("OK:" + change.ToString() + fdForRegion); }