def begin(self, host_datetime=datetime.now()): """ Начало работы с кассой :param host_datetime: Время управляющего компьютера """ query = Output(0x10) query.add_param(host_datetime) self.send(query)
def open_doc(self, doc_type: DocumentType, mode_bulk: bool = False, mode_delay: bool = False, departament: int = 0, number: int = 0): """ Открыть документ В пакетном режиме формирования документа, при успешном выполнении команд формирования чека - (Не реализовано) Установить дополнительные реквизиты позиции - print_text: Печать текста - print_barcode: Печатать штрих-код - add_item: Добавить товарную позицию - doc_subtotal: Подытог - Скидка на чек - doc_payment: Оплата - Внесение / изъятие суммы - Печать реквизита - Сравнить сумму по чеку , ответ на команду не посылается. Если какая-либо команда выполняется с ошибкой, то на нее возвращается стандартный ответ с кодом ошибки. Последующие команды формирования чека игнорируются, на каждую такую комадну возвращается стандартный ответ с кодом ошибки "Функция невыполнима при данном статусе ККТ" до поступления команд “Завершить документ” или “Аннулировать документ”. При возникновении ошибки в процессе наполнения документа в пакетном режиме необходимо аннулировать документ и полностью сформировать документ заново, начиная с команды "Открыть документ". :param doc_type: Тип документа :param mode_bulk: Пакетный режим формирования документа :param mode_delay: Режим отложенной печати реквизитов :param departament: Номер отдела (1-99) :param number: Номер документа """ param = doc_type.value if mode_bulk: param = param & 1 << 4 if mode_delay: param = param & 1 << 5 query = Output(0x30) query.add_param(str(param)) query.add_param(str(departament)) query.add_param(self.operator) if number == 0 and self.settings.cheque.external_counter: raise Exception( "Настроена внешняя нумерация чеков, необходимо передавать номер документа!" ) query.add_param(str(number)) query.add_param(self.tax_system) self.send(query)
def add_item(self, title: str, article: str, count: float, price: float, number_tax: int, payment_type: PaymentType, subject_matter: SubjectMatter, discount_total: float = 0, number_item: str = "", number_departament: int = 0, code_country: str = None, number_customs: str = None, excise_total: float = None): """ Добавить товарную позицию Эта команда может быть вызвана сразу после открытия чека и может повторяться любое количество раз (если признак способа расчета не равен 7) внутри текущего документа для отражения всего списка товаров. Если позиция не может быть добавлена в ФН, на чеке после данных о позиции печатается строка “ОПЕРАЦИЯ ОТМЕНЕНА” и возвращается соответствующий код ошибки ФН. Для повышения точности вычислений, можно передавать количество с точностью до 9 знаков после запятой, при этом в умножении на цену будет участвовать 9 знаков после запятой, а печататься только первые 3. Сумма позиции, получаемая в результате умножения цены на количество, округляется к ближайшему целому, т.е. часть менее 0.5 коп отбрасывается, 0.5 коп и более округляется до 1 коп. Параметры ”Номер товарной позиции” и “Номер секции” не являются обязательными и могут отсутствовать. Если номер секции отсутствует (или равен нулю), учет ведется на номер отдела, указанный при открытии документа. Номер позиции - символьное поле, состоящее из цифр и символа разделителя, которым может быть пробел, двоеточие, тире и другие символы. В связи с требованиями ФФД поле "Название товара" при длине, большей 128 символов, будет обрезано до 128 символов. :param title: название товара(0..224) :param article: артикул или штриховой код товара/номер ТРК :param count: количество товара в товарной позиции :param price: цена товара по данному артикулу :param number_tax: номер ставки налога (Номер налога в регистре кассы обычно (1-20%, 2-10%, 3-Без НДС или 0%)) :param number_item: номер товарной позиции :param number_departament: номер секции :param discount_total: сумма скидки :param payment_type: признак способа расчета :param subject_matter: признак предмета расчета :param code_country: код страны происхождения товара (номер) :param number_customs: номер таможенной декларации :param excise_total: сумма акциза :return: """ query = Output(0x42) query.add_param(title) query.add_param(article) query.add_param("%0.3f" % count) query.add_param("%0.3f" % price) query.add_param(str(number_tax)) query.add_param(number_item) query.add_param(str(number_departament)) query.add_param("").add_param("") query.add_param("%0.3f" % discount_total) query.add_param(str(payment_type.value)) query.add_param(str(subject_matter.value)) # Насколько я понял нужны только для расчетов ЮР лиц if code_country: query.add_param(code_country) if number_customs: query.add_param(number_customs) if excise_total: query.add_param(excise_total) self.send(query)
def close_doc(self, cut: CutFlag, sign_internet_payment: bool = None, address: str = None, title: str = None, value: str = None, buyer: str = None, buyer_inn: str = None) -> CloseDocData: """ Завершить документ Фискальный признак возвращается только при завершении чеков на приход, возврат прихода, расход и возврат расхода. В пакетном режиме формирования документа, команда “Завершить документ” выключает пакетный режим. Если в пакетном режиме ошибка возникла ранее команды “Завершить документ”, то ответ команду “Завершить документ” не возвращается. Можно продолжить формирование документа, начиная с команды вернувшей ошибку, обычном режиме. :param cut: флаг отрезки документов :param sign_internet_payment: установить признак расчетов в интернет :param address: адрес покупателя # TODO Email? :param title: название дополнительного реквизита пользователя :param value: значение дополнительного реквизита пользователя :param buyer: покупатель :param buyer_inn: ИНН покупателя :return: """ query = Output(0x31) query.add_param(cut) if address: query.add_param(address) if sign_internet_payment: query.add_param(sign_internet_payment) if title: query.add_param(title) if value: query.add_param(value) if buyer: query.add_param(buyer) if buyer_inn: query.add_param(buyer_inn) packet = self.send(query) return CloseDocData(packet)