Skip to content

Instantly share code, notes, and snippets.

@FullZero5

FullZero5/kkm.js Secret

Created July 16, 2018 13:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FullZero5/38c810551eb82d1cda5627a9e8a228d1 to your computer and use it in GitHub Desktop.
Save FullZero5/38c810551eb82d1cda5627a9e8a228d1 to your computer and use it in GitHub Desktop.
use driver atol ActivX
//*********************************************************************************//
// Примеры работы с ККТ АТОЛ под новый порядок. //
// Примеры предназначены для работы с прошивками, поддерживающими ФФД 1.0. //
// Так как в примерах создаются чеки для ОСН и ЕНВД, то ККТ должна //
// быть зарегистрирована как минимум на эти 2 СНО. //
// Примеры необходимо запускать в 32-ух битном интерпретаторе WScript: //
// C:\Windows\SysWOW64\WScript.exe ФФД_1_0_примеры.js //
//*********************************************************************************//
// Вспомогательные функции для отладочного логирования
function AddLeft(str, add, len)
{
// Потому что в JScript нет функций форматированного вывода
str = String(str);
while (str.length < len)
str = add + str;
return str;
}
function dump(Text)
{
var DumpFolder = "C:\\DUMPS\\";
var now = new Date();
var DumpFile = now.getYear() + '_' + AddLeft(now.getMonth() + 1, '0', 2) + '_' + AddLeft(now.getDate(), '0', 2) + '_' + AddLeft(now.getHours(), '0', 2) + '_' + AddLeft(now.getMinutes(), '0', 2) + '_' + AddLeft(now.getSeconds(), '0', 2) + '_' + AddLeft(now.getMilliseconds(), '0',3) + ".txt";
fso = new ActiveXObject("Scripting.FileSystemObject");
if (!fso.FolderExists(DumpFolder))
fso.CreateFolder(DumpFolder);
ts = fso.OpenTextFile(DumpFolder + DumpFile, 8, true);
ts.WriteLine(Text);
ts.Close();
}
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// --------------------------- Подключение к устройству -----------------------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
var driver = new ActiveXObject ("AddIn.FPrnM8");
// Программное указание параметров подключения
driver.AddDevice();
driver.Model = 69;
driver.UseAccessPassword = 1;
driver.DefaultPassword = 30;
// Номер COM порта 8 соответствует значению PortNumber 1008
driver.PortNumber = 1009;
driver.BaudRate = 18;
// Подключение через окно настройки свойств
driver.ShowProperties();
driver.DeviceEnabled = 1;
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ---------------------------------- Поддерживаемая версия ФФД ------------------------------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
driver.Mode = 0;
driver.SetMode ();
driver.Caption = "Чтение поддерживаемой версии ФФД";
driver.Alignment = 1;
driver.TextWrap = 1;
driver.PrintString();
driver.Alignment = 0;
driver.Caption = "Формат x.y.z:";
driver.PrintString();
driver.Caption = "x - версия ФФД ККТ";
driver.PrintString();
driver.Caption = "y - версия ФФД ФН";
driver.PrintString();
driver.Caption = "z - версия ФФД";
driver.PrintString();
driver.Caption = "Список значений:";
driver.PrintString();
driver.Caption = "1 – ФФД 1.0";
driver.PrintString();
driver.Caption = "2 – ФФД 1.05";
driver.PrintString();
driver.Caption = "3 – ФФД 1.1";
driver.PrintString();
driver.RegisterNumber = 54;
driver.GetRegister();
driver.Caption = "Значение из ККТ: " + driver.ROMVersion;
driver.PrintString();
// Печать клише
driver.PrintHeader();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ---------------------------------- Открыть смену ------------------------------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
driver.Mode = 1;
driver.SetMode();
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
driver.OpenSession();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ---------- Чек прихода без отправки электронного чека покупателю ---------- //
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
// Mode - Режим:
// 0 - Выбора
// 1 - Регистрации
// 2 - Отчётов без гашения
// 3 - Отчётов с гашением
driver.Mode = 1;
driver.SetMode();
// Записать должность и ФИО кассира
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
// CheckType - Тип чека:
// 1 - Приход
// 2 - Возврат прихода
// 4 - Расход
// 5 - Возврат расхода
// 7 - Коррекция прихода
// 9 - Коррекция расхода
driver.CheckType = 1;
// CheckMode - Режим формирования чека:
// 0 - только в электронном виде без печати на чековой ленте
// 1 - печатать на чековой ленте
driver.CheckMode = 1;
driver.OpenCheck();
// Применяемая система налогооблажения в чеке:
// ОСН - 1
// УСН доход - 2
// УСН доход-расход - 4
// ЕНВД - 8
// ЕСН - 16
// ПСН - 32
driver.AttrNumber = 1055;
driver.AttrValue = 1;
driver.WriteAttribute();
// Регистрация товара или услуги
driver.BeginItem();
driver.Name = "Молоко 3.2%";
driver.Price = 50.33;
driver.Quantity = 2;
// Если значение |Summ - Price * Quantity| > 0.01 , то ККТ посчитает, что была скидка и будет при необходимости преобразовывать позицию, разделяя её на 2
driver.Summ = 100.66;
// Признак предмета расчёта. Свойство ItemType может принимать значения:
// 1 - товар, за исключением подакцизного товара
// 2 - подакцизный товар
// 3 - работа
// 4 - услуга
// 5 - приём ставок при деятельность по организации и проведению азартных игр
// 6 - выплата выигрышей в азартных играх
// 7 - реализация лотерейных билетов или ставок при деятельность по организации и проведению лотерей
// 8 - выплата выигрышей в лотереях
// 9 - прав на использование результатов интеллектуальной деятельности или средств индивидуализации
// 10 - аванс, задаток, предоплата, кредит, взносе в счет оплаты, пени, штраф, вознаграждение, бонус и иной аналогичный предмет расчета
// 11 - предмет расчета, состоящий из предметов, каждому из которых может быть присвоено значение от 0 до 10 (набор)
// 12 - предмет расчета, не относящийся к предметам расчета, которым может быть присвоено значение от 0 до 11
driver.ItemType = 1;
// Признак способа расчёта. Свойство PaymentMode может принимать значения:
// 1 - Полная предварительная оплата до момента передачи предмета расчета
// 2 - Частичная предварительная оплата до момента передачи предмета расчета
// 3 - Аванс
// 4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета
// 5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит
// 6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит
// 7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита)
driver.PaymentMode = 1;
driver.Department = 0;
// TaxTypeNumber - Номер налога:
// 0 - Налог из секции
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18%
// 4 - без НДС
// 5 - НДС 10/110
// 6 - НДС 18/118
driver.TaxTypeNumber = 2;
// Способ исчисления суммы налога. Доступные значения TaxMode:
// 0 - налог расчитывается от суммы позиции
// 1 - налог расчитывается от цены позиции
driver.TaxMode = 1;
// Сумма налога TaxSumm. Если передаётся 0, то ККТ считает самостоятельно по TaxTypeNumber и TaxMode. В противном случае в ОФД отправляется переданная сумма, но при значении настройки Т2Р1П114 бит 1 = 1 ККТ бедет осуществлять контроль переданных данных, при чём контроль в будущем нельзя будет отключить (Русинова).
driver.TaxSumm = Math.round(50.33 * 10 / 110 * 100) / 100;
// Скидка больше не изменяет сумму позиции, теперь она просто добавляет информационную печать. Необходимо рассчитывать в кассовом ПО цену со скидкой, а информацию по начисленным скидкам печатать нефискальной печатью и не передавать скидку в ККМ, поэтому код для начисления скидки закомментирован
//driver.DiscountValue = 10;
// DiscountType - Тип скидки:
// 0 - суммовая
// 1 - процентная
//driver.DiscountType = 0;
driver.EndItem();
driver.Caption = "В том числе скидка: 4.67";
driver.PrintString();
driver.Caption = "Цена без скидки: 55.00";
driver.PrintString();
// Отброс копеек (округление чека без распределения по позициям). Скидка на чек доступна только для его округления до рубля. Таким образом недоступны: надбавки, назначение "на позицию", процентные значения. SummCharge(), PercentsCharge(), PercentsDiscount () и ResetChargeDiscount () более недоступны
// Destination - Назначение скидки:
// 0 - на чек
// 1 - на позицию (недоступно)
driver.Destination = 0;
driver.Summ = 0.66;
driver.SummDiscount();
// Нефискальная печать с информацией по скидкам чека
driver.Caption = "--Скидки по чеку--";
driver.PrintString();
driver.Caption = "Сумма чека без скидок 110.00";
driver.PrintString();
driver.Caption = "Скидки по карте: 9.34";
driver.PrintString();
driver.Caption = "Округление: 0.66";
driver.PrintString();
// Оплата и закрытие чека
// TypeClose - Тип оплаты:
// 0 - Наличными
// 1 - Электронными средствами платежа
driver.TypeClose = 0;
driver.Summ = 500.00;
driver.Payment();
driver.CloseCheck();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ----- Чек возврата прихода без отправки электронного чека покупателю ---- //
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
// Mode - Режим:
// 0 - Выбора
// 1 - Регистрации
// 2 - Отчётов без гашения
// 3 - Отчётов с гашением
driver.Mode = 1;
driver.SetMode();
// Записать должность и ФИО кассира
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
// CheckType - Тип чека:
// 1 - Приход
// 2 - Возврат прихода
// 4 - Расход
// 5 - Возврат расхода
// 7 - Коррекция прихода
// 9 - Коррекция расхода
driver.CheckType = 2;
// CheckMode - Режим формирования чека:
// 0 - только в электронном виде без печати на чековой ленте
// 1 - печатать на чековой ленте
driver.CheckMode = 1;
driver.OpenCheck();
// Применяемая система налогооблажения в чеке:
// ОСН - 1
// УСН доход - 2
// УСН доход-расход - 4
// ЕНВД - 8
// ЕСН - 16
// ПСН - 32
driver.AttrNumber = 1055;
driver.AttrValue = 1;
driver.WriteAttribute();
// Регистрация товара или услуги
driver.BeginItem();
driver.Name = "Молоко 3.2%";
driver.Price = 50.33;
driver.Quantity = 2;
// Если значение |Summ - Price * Quantity| > 0.01 , то ККТ посчитает, что была скидка и будет при необходимости преобразовывать позицию, разделяя её на 2
driver.Summ = 100.66;
// Признак предмета расчёта. Свойство ItemType может принимать значения:
// 1 - товар, за исключением подакцизного товара
// 2 - подакцизный товар
// 3 - работа
// 4 - услуга
// 5 - приём ставок при деятельность по организации и проведению азартных игр
// 6 - выплата выигрышей в азартных играх
// 7 - реализация лотерейных билетов или ставок при деятельность по организации и проведению лотерей
// 8 - выплата выигрышей в лотереях
// 9 - прав на использование результатов интеллектуальной деятельности или средств индивидуализации
// 10 - аванс, задаток, предоплата, кредит, взносе в счет оплаты, пени, штраф, вознаграждение, бонус и иной аналогичный предмет расчета
// 11 - предмет расчета, состоящий из предметов, каждому из которых может быть присвоено значение от 0 до 10 (набор)
// 12 - предмет расчета, не относящийся к предметам расчета, которым может быть присвоено значение от 0 до 11
driver.ItemType = 1;
// Признак способа расчёта. Свойство PaymentMode может принимать значения:
// 1 - Полная предварительная оплата до момента передачи предмета расчета
// 2 - Частичная предварительная оплата до момента передачи предмета расчета
// 3 - Аванс
// 4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета
// 5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит
// 6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит
// 7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита)
driver.PaymentMode = 1;
driver.Department = 0;
// TaxTypeNumber - Номер налога:
// 0 - Налог из секции
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18%
// 4 - без НДС
// 5 - НДС 10/110
// 6 - НДС 18/118
driver.TaxTypeNumber = 2;
// Способ исчисления суммы налога. Доступные значения TaxMode:
// 0 - налог расчитывается от суммы позиции
// 1 - налог расчитывается от цены позиции
driver.TaxMode = 1;
// Сумма налога TaxSumm. Если передаётся 0, то ККТ считает самостоятельно по TaxTypeNumber и TaxMode. В противном случае в ОФД отправляется переданная сумма, но при значении настройки Т2Р1П114 бит 1 = 1 ККТ бедет осуществлять контроль переданных данных, при чём контроль в будущем нельзя будет отключить (Русинова).
driver.TaxSumm = Math.round(50.33 * 10 / 110 * 100) / 100;
// Скидка больше не изменяет сумму позиции, теперь она просто добавляет информационную печать. Необходимо рассчитывать в кассовом ПО цену со скидкой, а информацию по начисленным скидкам печатать нефискальной печатью и не передавать скидку в ККМ, поэтому код для начисления скидки закомментирован
// driver.DiscountValue = 10;
// // DiscountType - Тип скидки:
// // 0 - суммовая
// // 1 - процентная
// driver.DiscountType = 0;
driver.EndItem();
driver.Caption = "В том числе скидка: 4.67";
driver.PrintString();
driver.Caption = "Цена без скидки: 55.00";
driver.PrintString();
// Отброс копеек (округление чека без распределения по позициям). Скидка на чек доступна только для его округления до рубля. Таким образом недоступны: надбавки, назначение "на позицию", процентные значения. SummCharge(), PercentsCharge(), PercentsDiscount () и ResetChargeDiscount () более недоступны
// Destination - Назначение скидки:
// 0 - на чек
// 1 - на позицию (недоступно)
driver.Destination = 0;
driver.Summ = 0.66;
driver.SummDiscount();
// Нефискальная печать с информацией по скидкам чека
driver.Caption = "--Скидки по чеку--";
driver.PrintString();
driver.Caption = "Сумма чека без скидок 110.00";
driver.PrintString();
driver.Caption = "Скидки по карте: 9.34";
driver.PrintString();
driver.Caption = "Округление: 0.66";
driver.PrintString();
// Оплата и закрытие чека
// TypeClose - Тип оплаты:
// 0 - Наличными
// 1 - Электронными средствами платежа
driver.TypeClose = 0;
driver.Summ = 500.00;
driver.Payment();
driver.CloseCheck();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // // ---------- Чек прихода с отправкой электронного чека покупателю ---------- //
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
// Mode - Режим:
// 0 - Выбора
// 1 - Регистрации
// 2 - Отчётов без гашения
// 3 - Отчётов с гашением
driver.Mode = 1;
driver.SetMode();
// Записать должность и ФИО кассира
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
// CheckType - Тип чека:
// 1 - Приход
// 2 - Возврат прихода
// 4 - Расход
// 5 - Возврат расхода
// 7 - Коррекция прихода
// 9 - Коррекция расхода
driver.CheckType = 1;
// CheckMode - Режим формирования чека:
// 0 - только в электронном виде без печати на чековой ленте
// 1 - печатать на чековой ленте
driver.CheckMode = 1;
driver.OpenCheck();
// Применяемая система налогооблажения в чеке:
// ОСН - 1
// УСН доход - 2
// УСН доход-расход - 4
// ЕНВД - 8
// ЕСН - 16
// ПСН - 32
driver.AttrNumber = 1055;
driver.AttrValue = 1;
driver.WriteAttribute();
// Запись контакта покупателя для отправки электронного чека
driver.AttrNumber = 1008;
driver.AttrValue = "+79091235566";
driver.WriteAttribute();
// Регистрация товара или услуги
driver.BeginItem();
driver.Name = "Детсткое питание Тёма";
driver.Price = 47.70;
driver.Quantity = 6;
// Если значение |Summ - Price * Quantity| > 0.01 , то ККТ посчитает, что была скидка и будет при необходимости преобразовывать позицию, разделяя её на 2
driver.Summ = 286.20;
// Признак предмета расчёта. Свойство ItemType может принимать значения:
// 1 - товар, за исключением подакцизного товара
// 2 - подакцизный товар
// 3 - работа
// 4 - услуга
// 5 - приём ставок при деятельность по организации и проведению азартных игр
// 6 - выплата выигрышей в азартных играх
// 7 - реализация лотерейных билетов или ставок при деятельность по организации и проведению лотерей
// 8 - выплата выигрышей в лотереях
// 9 - прав на использование результатов интеллектуальной деятельности или средств индивидуализации
// 10 - аванс, задаток, предоплата, кредит, взносе в счет оплаты, пени, штраф, вознаграждение, бонус и иной аналогичный предмет расчета
// 11 - предмет расчета, состоящий из предметов, каждому из которых может быть присвоено значение от 0 до 10 (набор)
// 12 - предмет расчета, не относящийся к предметам расчета, которым может быть присвоено значение от 0 до 11
driver.ItemType = 1;
// Признак способа расчёта. Свойство PaymentMode может принимать значения:
// 1 - Полная предварительная оплата до момента передачи предмета расчета
// 2 - Частичная предварительная оплата до момента передачи предмета расчета
// 3 - Аванс
// 4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета
// 5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит
// 6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит
// 7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита)
driver.PaymentMode = 1;
driver.Department = 0;
// TaxTypeNumber - Номер налога:
// 0 - Налог из секции
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18%
// 4 - без НДС
// 5 - НДС 10/110
// 6 - НДС 18/118
driver.TaxTypeNumber = 2;
// Способ исчисления суммы налога. Доступные значения TaxMode:
// 0 - налог расчитывается от суммы позиции
// 1 - налог расчитывается от цены позиции
driver.TaxMode = 1;
// Сумма налога TaxSumm. Если передаётся 0, то ККТ считает самостоятельно по TaxTypeNumber и TaxMode. В противном случае в ОФД отправляется переданная сумма, но при значении настройки Т2Р1П114 бит 1 = 1 ККТ бедет осуществлять контроль переданных данных, при чём контроль в будущем нельзя будет отключить (Русинова).
driver.TaxSumm = Math.round(47.70 * 10 / 110 * 100) / 100;
// Скидка больше не изменяет сумму позиции, теперь она просто добавляет информационную печать. Необходимо рассчитывать в кассовом ПО цену со скидкой, а информацию по начисленным скидкам печатать нефискальной печатью и не передавать скидку в ККМ, поэтому код для начисления скидки закомментирован
// driver.DiscountValue = 10;
// // DiscountType - Тип скидки:
// // 0 - суммовая
// // 1 - процентная
// driver.DiscountType = 0;
driver.EndItem();
driver.Caption = "В том числе скидка: 5.30";
driver.PrintString();
driver.Caption = "Цена без скидки: 53.00";
driver.PrintString();
driver.BeginItem();
driver.Name = "Коньяк Победа 0,5";
driver.Price = 813.50;
driver.Quantity = 1;
// Если значение |Summ - Price * Quantity| > 0.01 , то ККТ посчитает, что была скидка и будет при необходимости преобразовывать позицию, разделяя её на 2
driver.Summ = 813.50;
// Признак предмета расчёта. Свойство ItemType может принимать значения:
// 1 - товар, за исключением подакцизного товара
// 2 - подакцизный товар
// 3 - работа
// 4 - услуга
// 5 - приём ставок при деятельность по организации и проведению азартных игр
// 6 - выплата выигрышей в азартных играх
// 7 - реализация лотерейных билетов или ставок при деятельность по организации и проведению лотерей
// 8 - выплата выигрышей в лотереях
// 9 - прав на использование результатов интеллектуальной деятельности или средств индивидуализации
// 10 - аванс, задаток, предоплата, кредит, взносе в счет оплаты, пени, штраф, вознаграждение, бонус и иной аналогичный предмет расчета
// 11 - предмет расчета, состоящий из предметов, каждому из которых может быть присвоено значение от 0 до 10 (набор)
// 12 - предмет расчета, не относящийся к предметам расчета, которым может быть присвоено значение от 0 до 11
driver.ItemType = 2;
// Признак способа расчёта. Свойство PaymentMode может принимать значения:
// 1 - Полная предварительная оплата до момента передачи предмета расчета
// 2 - Частичная предварительная оплата до момента передачи предмета расчета
// 3 - Аванс
// 4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета
// 5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит
// 6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит
// 7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита)
driver.PaymentMode = 1;
driver.Department = 0;
// TaxTypeNumber - Номер налога:
// 0 - Налог из секции
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18%
// 4 - без НДС
// 5 - НДС 10/110
// 6 - НДС 18/118
driver.TaxTypeNumber = 3;
// Способ исчисления суммы налога. Доступные значения TaxMode:
// 0 - налог расчитывается от суммы позиции
// 1 - налог расчитывается от цены позиции
driver.TaxMode = 1;
// Сумма налога TaxSumm. Если передаётся 0, то ККТ считает самостоятельно по TaxTypeNumber и TaxMode. В противном случае в ОФД отправляется переданная сумма, но при значении настройки Т2Р1П114 бит 1 = 1 ККТ бедет осуществлять контроль переданных данных, при чём контроль в будущем нельзя будет отключить (Русинова).
driver.TaxSumm = Math.round(813.50 * 18 / 118 * 100) / 100;
// Скидка больше не изменяет сумму позиции, теперь она просто добавляет информационную печать. Необходимо рассчитывать в кассовом ПО цену со скидкой, а информацию по начисленным скидкам печатать нефискальной печатью и не передавать скидку в ККМ, поэтому код для начисления скидки закомментирован
// driver.DiscountValue = 10;
// // DiscountType - Тип скидки:
// // 0 - суммовая
// // 1 - процентная
// driver.DiscountType = 0;
driver.EndItem();
// Отброс копеек (округление чека без распределения по позициям). Скидка на чек доступна только для его округления до рубля. Таким образом недоступны: надбавки, назначение "на позицию", процентные значения. SummCharge(), PercentsCharge(), PercentsDiscount () и ResetChargeDiscount () более недоступны
// Destination - Назначение скидки:
// 0 - на чек
// 1 - на позицию (недоступно)
driver.Destination = 0;
driver.Summ = 0.70;
driver.SummDiscount();
// Нефискальная печать с информацией по скидкам чека
driver.Caption = "--Скидки по чеку--";
driver.PrintString();
driver.Caption = "Сумма чека без скидок 1131.50";
driver.PrintString();
driver.Caption = "Скидки по карте: 31.80";
driver.PrintString();
driver.Caption = "Округление: 0.70";
driver.PrintString();
// TypeClose - Тип оплаты:
// 0 - Наличными
// 1 - Электронными средствами платежа
driver.TypeClose = 0;
driver.Summ = 1500.00;
driver.Payment();
driver.CloseCheck();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ---------- Чек прихода с отправкой электронного чека покупателю -----------//
// // ---------------------------- без печати на чековой ленте ---------------------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
// Mode - Режим:
// 0 - Выбора
// 1 - Регистрации
// 2 - Отчётов без гашения
// 3 - Отчётов с гашением
driver.Mode = 1;
driver.SetMode();
// Записать должность и ФИО кассира
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
// CheckType - Тип чека:
// 1 - Приход
// 2 - Возврат прихода
// 4 - Расход
// 5 - Возврат расхода
// 7 - Коррекция прихода
// 9 - Коррекция расхода
driver.CheckType = 1;
// CheckMode - Режим формирования чека:
// 0 - только в электронном виде без печати на чековой ленте
// 1 - печатать на чековой ленте
driver.CheckMode = 0;
driver.OpenCheck();
// Запись контакта покупателя для отправки электронного чека. Внимание!!! Обязательно передавать сразу после открытия чека
driver.AttrNumber = 1008;
driver.AttrValue = "+79091235566";
driver.WriteAttribute();
// Применяемая система налогооблажения в чеке:
// ОСН - 1
// УСН доход - 2
// УСН доход-расход - 4
// ЕНВД - 8
// ЕСН - 16
// ПСН - 32
driver.AttrNumber = 1055;
driver.AttrValue = 1;
driver.WriteAttribute();
// Регистрация товара или услуги
driver.BeginItem();
driver.Name = "Детсткое питание Тёма";
driver.Price = 47.70;
driver.Quantity = 6;
// Если значение |Summ - Price * Quantity| > 0.01 , то ККТ посчитает, что была скидка и будет при необходимости преобразовывать позицию, разделяя её на 2
driver.Summ = 286.20;
// Признак предмета расчёта. Свойство ItemType может принимать значения:
// 1 - товар, за исключением подакцизного товара
// 2 - подакцизный товар
// 3 - работа
// 4 - услуга
// 5 - приём ставок при деятельность по организации и проведению азартных игр
// 6 - выплата выигрышей в азартных играх
// 7 - реализация лотерейных билетов или ставок при деятельность по организации и проведению лотерей
// 8 - выплата выигрышей в лотереях
// 9 - прав на использование результатов интеллектуальной деятельности или средств индивидуализации
// 10 - аванс, задаток, предоплата, кредит, взносе в счет оплаты, пени, штраф, вознаграждение, бонус и иной аналогичный предмет расчета
// 11 - предмет расчета, состоящий из предметов, каждому из которых может быть присвоено значение от 0 до 10 (набор)
// 12 - предмет расчета, не относящийся к предметам расчета, которым может быть присвоено значение от 0 до 11
driver.ItemType = 1;
// Признак способа расчёта. Свойство PaymentMode может принимать значения:
// 1 - Полная предварительная оплата до момента передачи предмета расчета
// 2 - Частичная предварительная оплата до момента передачи предмета расчета
// 3 - Аванс
// 4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета
// 5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит
// 6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит
// 7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита)
driver.PaymentMode = 1;
driver.Department = 0;
// TaxTypeNumber - Номер налога:
// 0 - Налог из секции
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18%
// 4 - без НДС
// 5 - НДС 10/110
// 6 - НДС 18/118
driver.TaxTypeNumber = 2;
// Способ исчисления суммы налога. Доступные значения TaxMode:
// 0 - налог расчитывается от суммы позиции
// 1 - налог расчитывается от цены позиции
driver.TaxMode = 1;
// Сумма налога TaxSumm. Если передаётся 0, то ККТ считает самостоятельно по TaxTypeNumber и TaxMode. В противном случае в ОФД отправляется переданная сумма, но при значении настройки Т2Р1П114 бит 1 = 1 ККТ бедет осуществлять контроль переданных данных, при чём контроль в будущем нельзя будет отключить (Русинова).
driver.TaxSumm = Math.round(47.70 * 10 / 110 * 100) / 100;
// Скидка больше не изменяет сумму позиции, теперь она просто добавляет информационную печать. Необходимо рассчитывать в кассовом ПО цену со скидкой, а информацию по начисленным скидкам печатать нефискальной печатью и не передавать скидку в ККМ, поэтому код для начисления скидки закомментирован
// driver.DiscountValue = 10;
// // DiscountType - Тип скидки:
// // 0 - суммовая
// // 1 - процентная
// driver.DiscountType = 0;
driver.EndItem();
driver.Caption = "В том числе скидка: 5.30";
driver.PrintString();
driver.Caption = "Цена без скидки: 53.00";
driver.PrintString();
driver.BeginItem();
driver.Name = "Коньяк Победа 0,5";
driver.Price = 813.50;
driver.Quantity = 1;
// Если значение |Summ - Price * Quantity| > 0.01 , то ККТ посчитает, что была скидка и будет при необходимости преобразовывать позицию, разделяя её на 2
driver.Summ = 813.50;
// Признак предмета расчёта. Свойство ItemType может принимать значения:
// 1 - товар, за исключением подакцизного товара
// 2 - подакцизный товар
// 3 - работа
// 4 - услуга
// 5 - приём ставок при деятельность по организации и проведению азартных игр
// 6 - выплата выигрышей в азартных играх
// 7 - реализация лотерейных билетов или ставок при деятельность по организации и проведению лотерей
// 8 - выплата выигрышей в лотереях
// 9 - прав на использование результатов интеллектуальной деятельности или средств индивидуализации
// 10 - аванс, задаток, предоплата, кредит, взносе в счет оплаты, пени, штраф, вознаграждение, бонус и иной аналогичный предмет расчета
// 11 - предмет расчета, состоящий из предметов, каждому из которых может быть присвоено значение от 0 до 10 (набор)
// 12 - предмет расчета, не относящийся к предметам расчета, которым может быть присвоено значение от 0 до 11
driver.ItemType = 2;
// Признак способа расчёта. Свойство PaymentMode может принимать значения:
// 1 - Полная предварительная оплата до момента передачи предмета расчета
// 2 - Частичная предварительная оплата до момента передачи предмета расчета
// 3 - Аванс
// 4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета
// 5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит
// 6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит
// 7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита)
driver.PaymentMode = 1;
driver.Department = 0;
// TaxTypeNumber - Номер налога:
// 0 - Налог из секции
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18%
// 4 - без НДС
// 5 - НДС 10/110
// 6 - НДС 18/118
driver.TaxTypeNumber = 3;
// Способ исчисления суммы налога. Доступные значения TaxMode:
// 0 - налог расчитывается от суммы позиции
// 1 - налог расчитывается от цены позиции
driver.TaxMode = 1;
// Сумма налога TaxSumm. Если передаётся 0, то ККТ считает самостоятельно по TaxTypeNumber и TaxMode. В противном случае в ОФД отправляется переданная сумма, но при значении настройки Т2Р1П114 бит 1 = 1 ККТ бедет осуществлять контроль переданных данных, при чём контроль в будущем нельзя будет отключить (Русинова).
driver.TaxSumm = Math.round(813.50 * 18 / 118 * 100) / 100;
// Скидка больше не изменяет сумму позиции, теперь она просто добавляет информационную печать. Необходимо рассчитывать в кассовом ПО цену со скидкой, а информацию по начисленным скидкам печатать нефискальной печатью и не передавать скидку в ККМ, поэтому код для начисления скидки закомментирован
// driver.DiscountValue = 10;
// // DiscountType - Тип скидки:
// // 0 - суммовая
// // 1 - процентная
// driver.DiscountType = 0;
driver.EndItem();
// Отброс копеек (округление чека без распределения по позициям). Скидка на чек доступна только для его округления до рубля. Таким образом недоступны: надбавки, назначение "на позицию", процентные значения. SummCharge(), PercentsCharge(), PercentsDiscount () и ResetChargeDiscount () более недоступны
// Destination - Назначение скидки:
// 0 - на чек
// 1 - на позицию (недоступно)
driver.Destination = 0;
driver.Summ = 0.70;
driver.SummDiscount();
// Нефискальная печать с информацией по скидкам чека
driver.Caption = "--Скидки по чеку--";
driver.PrintString();
driver.Caption = "Сумма чека без скидок 1131.50";
driver.PrintString();
driver.Caption = "Скидки по карте: 31.80";
driver.PrintString();
driver.Caption = "Округление: 0.70";
driver.PrintString();
// TypeClose - Тип оплаты:
// 0 - Наличными
// 1 - Электронными средствами платежа
driver.TypeClose = 0;
driver.Summ = 1500.00;
driver.Payment();
driver.CloseCheck();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ------ Приём операций от лица банковского платёжного агента (1057 = 1) ------ //
// // ---------------------------- Или субагента (1057 = 2) ------------------------------------------ //
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
// Mode - Режим:
// 0 - Выбора
// 1 - Регистрации
// 2 - Отчётов без гашения
// 3 - Отчётов с гашением
driver.Mode = 1;
driver.SetMode();
// Записать должность и ФИО кассира
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
// CheckType - Тип чека:
// 1 - Приход
// 2 - Возврат прихода
// 4 - Расход
// 5 - Возврат расхода
// 7 - Коррекция прихода
// 9 - Коррекция расхода
driver.CheckType = 1;
// CheckMode - Режим формирования чека:
// 0 - только в электронном виде без печати на чековой ленте
// 1 - печатать на чековой ленте
driver.CheckMode = 1;
driver.OpenCheck();
driver.AttrNumber = 1055;
// Применяемая система налогооблажения в чеке:
// ОСН - 1
// УСН доход - 2
// УСН доход-расход - 4
// ЕНВД - 8
// ЕСН - 16
// ПСН - 32
driver.AttrValue = 1;
driver.WriteAttribute();
driver.AttrNumber = 1057;
// Указание признака агента:
// Банковскй платежный агент - 1
// Банковскй платежный субагент - 2
// Платежный агент - 4
// Платежный субагент - 8
// Проверенный агент - 16
// Комиссионер - 32
// Иной агент - 64
driver.AttrValue = 4;
driver.WriteAttribute();
// Адрес оператора по переводу денежных средств
driver.AttrNumber = 1005;
driver.AttrValue = "г. Москва, ул. Пушкина, д. колотушкина";
driver.WriteAttribute();
// ИНН оператора по переводу денежных средств
driver.AttrNumber = 1016;
driver.AttrValue = "006449013711";
driver.WriteAttribute();
// Наименование оператора по переводу денежных средств
driver.AttrNumber = 1026;
driver.AttrValue = "ООО Супер Банк";
driver.WriteAttribute();
// Операция платёжного агента
driver.AttrNumber = 1044;
driver.AttrValue = "Перевод";
driver.WriteAttribute();
// Телефон платёжного агента
driver.AttrNumber = 1073;
driver.AttrValue = "8-800-111-11-11";
driver.WriteAttribute();
// Телефон оператора перевода
driver.AttrNumber = 1075;
driver.AttrValue = "8-800-222-22-22";
driver.WriteAttribute();
// Телефон поставщика
driver.AttrNumber = 1171;
driver.AttrValue = "8-800-333-33-33";
driver.WriteAttribute();
// Телефон поставщика
driver.AttrNumber = 1171;
driver.AttrValue = "8-800-444-44-44";
driver.WriteAttribute();
// Регистрация товара или услуги
driver.BeginItem();
driver.Name = "Денежный перевод";
driver.Price = 110.00;
driver.Quantity = 1;
// Если значение |Summ - Price * Quantity| > 0.01 , то ККТ посчитает, что была скидка и будет при необходимости преобразовывать позицию, разделяя её на 2
driver.Summ = 110;
// Признак предмета расчёта. Свойство ItemType может принимать значения:
// 1 - товар, за исключением подакцизного товара
// 2 - подакцизный товар
// 3 - работа
// 4 - услуга
// 5 - приём ставок при деятельность по организации и проведению азартных игр
// 6 - выплата выигрышей в азартных играх
// 7 - реализация лотерейных билетов или ставок при деятельность по организации и проведению лотерей
// 8 - выплата выигрышей в лотереях
// 9 - прав на использование результатов интеллектуальной деятельности или средств индивидуализации
// 10 - аванс, задаток, предоплата, кредит, взносе в счет оплаты, пени, штраф, вознаграждение, бонус и иной аналогичный предмет расчета
// 11 - предмет расчета, состоящий из предметов, каждому из которых может быть присвоено значение от 0 до 10 (набор)
// 12 - предмет расчета, не относящийся к предметам расчета, которым может быть присвоено значение от 0 до 11
driver.ItemType = 4;
// Признак способа расчёта. Свойство PaymentMode может принимать значения:
// 1 - Полная предварительная оплата до момента передачи предмета расчета
// 2 - Частичная предварительная оплата до момента передачи предмета расчета
// 3 - Аванс
// 4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета
// 5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит
// 6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит
// 7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита)
driver.PaymentMode = 1;
driver.Department = 0;
// TaxTypeNumber - Номер налога:
// 0 - Налог из секции
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18%
// 4 - без НДС
// 5 - НДС 10/110
// 6 - НДС 18/118
driver.TaxTypeNumber = 3;
// Способ исчисления суммы налога. Доступные значения TaxMode:
// 0 - налог расчитывается от суммы позиции
// 1 - налог расчитывается от цены позиции
driver.TaxMode = 1;
// Сумма налога TaxSumm. Если передаётся 0, то ККТ считает самостоятельно по TaxTypeNumber и TaxMode. В противном случае в ОФД отправляется переданная сумма, но при значении настройки Т2Р1П114 бит 1 = 1 ККТ бедет осуществлять контроль переданных данных, при чём контроль в будущем нельзя будет отключить (Русинова).
driver.TaxSumm = Math.round(110 * 18 / 118 * 100) / 100;
// Скидка больше не изменяет сумму позиции, теперь она просто добавляет информационную печать. Необходимо рассчитывать в кассовом ПО цену со скидкой, а информацию по начисленным скидкам печатать нефискальной печатью и не передавать скидку в ККМ, поэтому код для начисления скидки закомментирован
// driver.DiscountValue = 10;
// // DiscountType - Тип скидки:
// // 0 - суммовая
// // 1 - процентная
// driver.DiscountType = 0;
driver.EndItem();
// Оплата и закрытие чека
// TypeClose - Тип оплаты:
// 0 - Наличными
// 1 - Электронными средствами платежа
driver.TypeClose = 0;
driver.Summ = 500.00;
driver.Payment();
driver.CloseCheck();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ------- Выполнение операций от лица платёжного агента (1057 = 4) -------//
// // ------------------------------- Или субагента (1057 = 8) ------------------------------- //
// // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
// Mode - Режим:
// 0 - Выбора
// 1 - Регистрации
// 2 - Отчётов без гашения
// 3 - Отчётов с гашением
driver.Mode = 1;
driver.SetMode();
// Записать должность и ФИО кассира
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
// CheckType - Тип чека:
// 1 - Приход
// 2 - Возврат прихода
// 4 - Расход
// 5 - Возврат расхода
// 7 - Коррекция прихода
// 9 - Коррекция расхода
driver.CheckType = 1;
// CheckMode - Режим формирования чека:
// 0 - только в электронном виде без печати на чековой ленте
// 1 - печатать на чековой ленте
driver.CheckMode = 1;
driver.OpenCheck();
driver.AttrNumber = 1055;
// Применяемая система налогооблажения в чеке:
// ОСН - 1
// УСН доход - 2
// УСН доход-расход - 4
// ЕНВД - 8
// ЕСН - 16
// ПСН - 32
driver.AttrValue = 1;
driver.WriteAttribute();
driver.AttrNumber = 1057;
// Указание признака агента:
// Банковскй платежный агент - 1
// Банковскй платежный субагент - 2
// Платежный агент - 4
// Платежный субагент - 8
// Проверенный агент - 16
// Комиссионер - 32
// Иной агент - 64
driver.AttrValue = 4;
driver.WriteAttribute();
// Телефон платёжного агента
driver.AttrNumber = 1073;
driver.AttrValue = "8-800-111-11-11";
driver.WriteAttribute();
// Телефон оператора по приёму платежей
driver.AttrNumber = 1074;
driver.AttrValue = "8-800-222-22-22";
driver.WriteAttribute();
// Телефон поставщика
driver.AttrNumber = 1171;
driver.AttrValue = "8-800-333-33-33";
driver.WriteAttribute();
// Телефон поставщика
driver.AttrNumber = 1171;
driver.AttrValue = "8-800-444-44-44";
driver.WriteAttribute();
// Регистрация товара или услуги
driver.BeginItem();
driver.Name = "Оплата услуг";
driver.Price = 110.00;
driver.Quantity = 1;
// Если значение |Summ - Price * Quantity| > 0.01 , то ККТ посчитает, что была скидка и будет при необходимости преобразовывать позицию, разделяя её на 2
driver.Summ = 110;
// Признак предмета расчёта. Свойство ItemType может принимать значения:
// 1 - товар, за исключением подакцизного товара
// 2 - подакцизный товар
// 3 - работа
// 4 - услуга
// 5 - приём ставок при деятельность по организации и проведению азартных игр
// 6 - выплата выигрышей в азартных играх
// 7 - реализация лотерейных билетов или ставок при деятельность по организации и проведению лотерей
// 8 - выплата выигрышей в лотереях
// 9 - прав на использование результатов интеллектуальной деятельности или средств индивидуализации
// 10 - аванс, задаток, предоплата, кредит, взносе в счет оплаты, пени, штраф, вознаграждение, бонус и иной аналогичный предмет расчета
// 11 - предмет расчета, состоящий из предметов, каждому из которых может быть присвоено значение от 0 до 10 (набор)
// 12 - предмет расчета, не относящийся к предметам расчета, которым может быть присвоено значение от 0 до 11
driver.ItemType = 4;
// Признак способа расчёта. Свойство PaymentMode может принимать значения:
// 1 - Полная предварительная оплата до момента передачи предмета расчета
// 2 - Частичная предварительная оплата до момента передачи предмета расчета
// 3 - Аванс
// 4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета
// 5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит
// 6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит
// 7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита)
driver.PaymentMode = 1;
driver.Department = 0;
// TaxTypeNumber - Номер налога:
// 0 - Налог из секции
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18%
// 4 - без НДС
// 5 - НДС 10/110
// 6 - НДС 18/118
driver.TaxTypeNumber = 3;
// Способ исчисления суммы налога. Доступные значения TaxMode:
// 0 - налог расчитывается от суммы позиции
// 1 - налог расчитывается от цены позиции
driver.TaxMode = 1;
// Сумма налога TaxSumm. Если передаётся 0, то ККТ считает самостоятельно по TaxTypeNumber и TaxMode. В противном случае в ОФД отправляется переданная сумма, но при значении настройки Т2Р1П114 бит 1 = 1 ККТ бедет осуществлять контроль переданных данных, при чём контроль в будущем нельзя будет отключить (Русинова).
driver.TaxSumm = Math.round(110 * 18 / 118 * 100) / 100;
// Скидка больше не изменяет сумму позиции, теперь она просто добавляет информационную печать. Необходимо рассчитывать в кассовом ПО цену со скидкой, а информацию по начисленным скидкам печатать нефискальной печатью и не передавать скидку в ККМ, поэтому код для начисления скидки закомментирован
// driver.DiscountValue = 10;
// // DiscountType - Тип скидки:
// // 0 - суммовая
// // 1 - процентная
// driver.DiscountType = 0;
driver.EndItem();
// Оплата и закрытие чека
// TypeClose - Тип оплаты:
// 0 - Наличными
// 1 - Электронными средствами платежа
driver.TypeClose = 0;
driver.Summ = 500.00;
driver.Payment();
driver.CloseCheck();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ----------- Выполнение операций от лица проверенного (1057 = 16) ---------------//
// // ------------------------------------- комиссионера (1057 = 32) -------------------------------//
// // ------------------------------- или иного агента (1057 = 64) ---------------------------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
// Mode - Режим:
// 0 - Выбора
// 1 - Регистрации
// 2 - Отчётов без гашения
// 3 - Отчётов с гашением
driver.Mode = 1;
driver.SetMode();
// Записать должность и ФИО кассира
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
// CheckType - Тип чека:
// 1 - Приход
// 2 - Возврат прихода
// 4 - Расход
// 5 - Возврат расхода
// 7 - Коррекция прихода
// 9 - Коррекция расхода
driver.CheckType = 1;
// CheckMode - Режим формирования чека:
// 0 - только в электронном виде без печати на чековой ленте
// 1 - печатать на чековой ленте
driver.CheckMode = 1;
driver.OpenCheck();
driver.AttrNumber = 1055;
// Применяемая система налогооблажения в чеке:
// ОСН - 1
// УСН доход - 2
// УСН доход-расход - 4
// ЕНВД - 8
// ЕСН - 16
// ПСН - 32
driver.AttrValue = 1;
driver.WriteAttribute();
driver.AttrNumber = 1057;
// Указание признака агента:
// Банковскй платежный агент - 1
// Банковскй платежный субагент - 2
// Платежный агент - 4
// Платежный субагент - 8
// Проверенный агент - 16
// Комиссионер - 32
// Иной агент - 64
driver.AttrValue = 16;
driver.WriteAttribute();
// Телефон поставщика
driver.AttrNumber = 1171;
driver.AttrValue = "8-800-333-33-33";
driver.WriteAttribute();
// Телефон поставщика
driver.AttrNumber = 1171;
driver.AttrValue = "8-800-444-44-44";
driver.WriteAttribute();
// Регистрация товара или услуги
driver.BeginItem();
driver.Name = "Оплата услуг";
driver.Price = 110.00;
driver.Quantity = 1;
// Если значение |Summ - Price * Quantity| > 0.01 , то ККТ посчитает, что была скидка и будет при необходимости преобразовывать позицию, разделяя её на 2
driver.Summ = 110;
// Признак предмета расчёта. Свойство ItemType может принимать значения:
// 1 - товар, за исключением подакцизного товара
// 2 - подакцизный товар
// 3 - работа
// 4 - услуга
// 5 - приём ставок при деятельность по организации и проведению азартных игр
// 6 - выплата выигрышей в азартных играх
// 7 - реализация лотерейных билетов или ставок при деятельность по организации и проведению лотерей
// 8 - выплата выигрышей в лотереях
// 9 - прав на использование результатов интеллектуальной деятельности или средств индивидуализации
// 10 - аванс, задаток, предоплата, кредит, взносе в счет оплаты, пени, штраф, вознаграждение, бонус и иной аналогичный предмет расчета
// 11 - предмет расчета, состоящий из предметов, каждому из которых может быть присвоено значение от 0 до 10 (набор)
// 12 - предмет расчета, не относящийся к предметам расчета, которым может быть присвоено значение от 0 до 11
driver.ItemType = 4;
// Признак способа расчёта. Свойство PaymentMode может принимать значения:
// 1 - Полная предварительная оплата до момента передачи предмета расчета
// 2 - Частичная предварительная оплата до момента передачи предмета расчета
// 3 - Аванс
// 4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета
// 5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит
// 6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит
// 7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита)
driver.PaymentMode = 1;
driver.Department = 0;
// TaxTypeNumber - Номер налога:
// 0 - Налог из секции
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18%
// 4 - без НДС
// 5 - НДС 10/110
// 6 - НДС 18/118
driver.TaxTypeNumber = 3;
// Способ исчисления суммы налога. Доступные значения TaxMode:
// 0 - налог расчитывается от суммы позиции
// 1 - налог расчитывается от цены позиции
driver.TaxMode = 1;
// Сумма налога TaxSumm. Если передаётся 0, то ККТ считает самостоятельно по TaxTypeNumber и TaxMode. В противном случае в ОФД отправляется переданная сумма, но при значении настройки Т2Р1П114 бит 1 = 1 ККТ бедет осуществлять контроль переданных данных, при чём контроль в будущем нельзя будет отключить (Русинова).
driver.TaxSumm = Math.round(110 * 18 / 118 * 100) / 100;
// Скидка больше не изменяет сумму позиции, теперь она просто добавляет информационную печать. Необходимо рассчитывать в кассовом ПО цену со скидкой, а информацию по начисленным скидкам печатать нефискальной печатью и не передавать скидку в ККМ, поэтому код для начисления скидки закомментирован
// driver.DiscountValue = 10;
// // DiscountType - Тип скидки:
// // 0 - суммовая
// // 1 - процентная
// driver.DiscountType = 0;
driver.EndItem();
// Оплата и закрытие чека
// TypeClose - Тип оплаты:
// 0 - Наличными
// 1 - Электронными средствами платежа
driver.TypeClose = 0;
driver.Summ = 500.00;
driver.Payment();
driver.CloseCheck();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ----------------------------- Чек коррекции прихода ------------------------------- //
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
// Mode - Режим:
// 0 - Выбора
// 1 - Регистрации
// 2 - Отчётов без гашения
// 3 - Отчётов с гашением
driver.Mode = 1;
driver.SetMode();
// Записать должность и ФИО кассира
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
// CheckType - Тип чека:
// 1 - Приход
// 2 - Возврат прихода
// 4 - Расход
// 5 - Возврат расхода
// 7 - Коррекция прихода
// 9 - Коррекция расхода
driver.CheckType = 7;
// CheckMode - Режим формирования чека:
// 0 - только в электронном виде без печати на чековой ленте
// 1 - печатать на чековой ленте
driver.CheckMode = 1;
driver.OpenCheck();
// Применяемая система налогооблажения в чеке:
// ОСН - 1
// УСН доход - 2
// УСН доход-расход - 4
// ЕНВД - 8
// ЕСН - 16
// ПСН - 32
driver.AttrNumber = 1055;
driver.AttrValue = 1;
driver.WriteAttribute();
// // Тип коррекции:
// // 0 - самостоятельная операция
// // 1 - операция по предписанию
driver.AttrNumber = 1173;
driver.AttrValue = 1;
driver.WriteAttribute();
// Начало записи комплексного атрибута 1174
driver.AttrNumber = 1174;
driver.BeginComplexAttribute();
// Наименование основания для коррекции. Произвольная строка 256 символов
driver.AttrNumber = 1177;
driver.AttrValue = "Чека покупателя не давал. Деньга из касса вытаскивал, а тута насяльника пришел... бельменде... кульманде...";
driver.WriteAttribute();
// Дата документа основания для коррекции. В формате unixtime
driver.AttrNumber = 1178;
date = new Date();
driver.AttrValue = parseInt(date.getTime()/1000);
driver.WriteAttribute();
// Номер документа основания для коррекции. Произвольная строка 32 символа
driver.AttrNumber = 1179;
driver.AttrValue = "1234567890";
driver.WriteAttribute();
// Конец записи комплексного атрибута 1174
driver.EndComplexAttribute();
// Регистрация суммы коррекции. В чеках коррекции можно зарегистрировать только одну позицию в количестве 1 на сумму коррекции. Передавать скидки/надбавки, цену, количество запрещено. Чек коррекции можно только закрыть без сдачи по нескольким типам оплаты.
// Регистрация товара или услуги
driver.BeginItem();
// Свойства Name, Price и Quantity не имеют смысла в чеке коррекции, так как в коррекции нет единицы товара, а регистрируется сумма коррекции
//driver.Name = "Коррекция прихода";
//driver.Price = 109.33;
//driver.Quantity = 1;
driver.Summ = 109.33;
// driver.Department = 0;
// TaxTypeNumber - Номер налога:
// 0 - Налог из секции
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18%
// 4 - без НДС
// 5 - НДС 10/110
// 6 - НДС 18/118
driver.TaxTypeNumber = 2;
// Способ исчисления суммы налога. Свойство не имеет смысла в чеке коррекции, так как в коррекции нет единицы товара, а регистрируется сумма коррекции. Доступные значения TaxMode:
// 0 - налог расчитывается от суммы позиции
// 1 - налог расчитывается от цены позиции
//driver.TaxMode = 1;
// Сумма налога TaxSumm. Если передаётся 0, то ККТ считает самостоятельно по TaxTypeNumber и TaxMode. В противном случае в ОФД отправляется переданная сумма, но при значении настройки Т2Р1П114 бит 1 = 1 ККТ бедет осуществлять контроль переданных данных, при чём контроль в будущем нельзя будет отключить (Русинова).
driver.TaxSumm = Math.round(109.33 * 10 / 110 * 100) / 100;
driver.EndItem();
// Оплата и закрытие чека
// TypeClose - Тип оплаты:
// 0 - Наличными
// 1 - Электронными средствами платежа
driver.TypeClose = 0;
driver.Summ = 99.33;
driver.Payment();
driver.TypeClose = 1;
driver.Summ = 10.00;
driver.Payment();
driver.CloseCheck();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ---------------------------------- Закрыть смену -------------------------------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
driver.Mode = 3;
driver.SetMode();
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
driver.ReportType = 1;
driver.Report();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ------------------------- Отчёт о состоянии расчётов ------------------------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
driver.Mode = 2;
driver.SetMode();
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
// Записать ИНН кассира
driver.AttrNumber = 1203;
driver.AttrValue = "526317984689";
driver.WriteAttribute();
driver.ReportType = 42;
driver.Report();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ----------- Получение состояния связи фискального накопителя --------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
driver.Mode = 0;
driver.SetMode();
driver.Caption = "Состояния связи фискального накопителя";
driver.Alignment = 1;
driver.TextWrap = 1;
driver.PrintString();
driver.Alignment = 0;
// Расшифровки кодов приведены в документации на протокол ККТ.
// Код ошибки сети
driver.RegisterNumber = 43;
driver.OFDLastError = 1;
driver.GetRegister();
driver.Caption = "Код ошибки сети: " + driver.OFDLastError;
driver.PrintString();
// Код ошибки ОФД
driver.RegisterNumber = 43;
driver.OFDLastError = 2;
driver.GetRegister();
driver.Caption = "Код ошибки ОФД: " + driver.OFDLastError;
driver.PrintString();
// Код ошибки ФН
driver.RegisterNumber = 43;
driver.OFDLastError = 3;
driver.GetRegister();
driver.Caption = "Код ошибки ФН: " + driver.OFDLastError;
driver.PrintString();
// Печать клише
driver.PrintHeader();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ----------- Получение количества неотправленных документов и --------------//
// //------------------- даты самого старого неотправленного -------------------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
driver.Mode = 0;
driver.SetMode();
driver.Caption = "Данные по неотправленным документам";
driver.Alignment = 1;
driver.TextWrap = 1;
driver.PrintString();
driver.Alignment = 0;
// // Количество неотправленных документов:
driver.RegisterNumber = 44;
driver.GetRegister();
driver.Caption = "Количество неотправленных документов: " + driver.Count;
driver.PrintString();
// Дата самого старого неотправленного документа
driver.RegisterNumber = 45;
driver.GetRegister();
driver.Caption = "Дата самого старого неотправленного документа: " + driver.Day + "." + driver.Month + "." + driver.Year + " " + driver.Hour + ":" + driver.Minute;
driver.PrintString();
// Печать клише
driver.PrintHeader();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // ----------- Получение регистрационных данных ККТ ----------------------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
driver.Mode = 0;
driver.SetMode();
driver.Caption = "Регистрационный данные ККТ";
driver.Alignment = 1;
driver.TextWrap = 1;
driver.PrintString();
driver.Alignment = 0;
// Наименование пользователя
driver.AttrNumber = 1048;
driver.ReadAttribute();
driver.Caption = "Наименование пользователя: " + driver.AttrValue;
driver.PrintString();
// ИНН пользователя
driver.AttrNumber = 1018;
driver.ReadAttribute();
driver.Caption = "ИНН пользователя: " + driver.AttrValue;
driver.PrintString();
// Набор выбранных СНО в виде значения в десятичной системе исчисления, которое в двоичной соответствует битовой маске. Например 41 соответствует маске 101001 (ОСН 1, УСН доход 0, УСН доход-расход 0, ЕНВД 1, ЕСН 0, ПСН 1)
driver.AttrNumber = 1062;
driver.ReadAttribute();
driver.Caption = "Выбранные СНО: " + driver.AttrValue;
driver.PrintString();
// Регистрационный номер ККТ
driver.AttrNumber = 1037;
driver.ReadAttribute();
driver.Caption = "Регистрационный номер ККТ: " + driver.AttrValue;
driver.PrintString();
// аналогичным образом запрашиваются и остальные атрибуты
// Печать клише
driver.PrintHeader();
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// // -------------------- Получение прочих данных из ККТ ---------------------------//
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
driver.NewDocument();
driver.Mode = 0;
driver.SetMode();
driver.Caption = "Получение прочих данных из ККТ";
driver.Alignment = 1;
driver.TextWrap = 1;
driver.PrintString();
driver.Alignment = 0;
// Номер фискального накопителя
driver.RegisterNumber = 47;
driver.GetRegister();
driver.Caption = "Номер фискального накопителя: " + driver.SerialNumber;
driver.PrintString();
// Номер фискального документа последней регистрации/перерегистрации, а также дата и время
driver.RegisterNumber = 48;
driver.GetRegister();
driver.Caption = "Номер ФД последней регистрации/перерегистрации: " + driver.DocNumber;
driver.PrintString();
driver.Caption = "Дата ФД последней регистрации/перерегистрации: " + driver.Day + "." + driver.Month + "." + driver.Year + " " + driver.Hour + ":" + driver.Minute;
driver.PrintString();
// Данные по последнему фискальному документу чека
driver.RegisterNumber = 51;
driver.GetRegister();
driver.Caption = "Номер фискального документа: " + driver.DocNumber;
driver.PrintString();
driver.Caption = "Тип чека: " + driver.LastCheckType;
driver.PrintString();
driver.Caption = "Сумма чека: " + driver.Summ;
driver.PrintString();
driver.Caption = "Дата и время чека: " + driver.Day + "." + driver.Month + "." + driver.Year + " " + driver.Hour + ":" + driver.Minute;
driver.PrintString();
driver.Caption = "Фискальный признак документа: " + driver.FiscalSign;
driver.PrintString();
// Данные по последнему фискальному документу
driver.RegisterNumber = 52;
driver.GetRegister();
driver.Caption = "Номер фискального документа: " + driver.DocNumber;
driver.PrintString();
driver.Caption = "Тип чека: " + driver.LastCheckType;
driver.PrintString();
driver.Caption = "Сумма чека: " + driver.Summ;
driver.PrintString();
driver.Caption = "Дата и время чека: " + driver.Day + "." + driver.Month + "." + driver.Year + " " + driver.Hour + ":" + driver.Minute;
driver.PrintString();
driver.Caption = "Фискальный признак документа: " + driver.FiscalSign;
driver.PrintString();
// Получение статуса фискального накопителя
// ValuePurpose - назначение параметра:
// 0 – проверить наличие ФН. 0 – ФН отсутствует, 1 – ФН есть.
// 1 – получить фазу жизни ФН. ответ – битовая маска: бит 0 – проведена настройка ФН, бит 1- открыт фискальный режим, бит 2 – постфискальный режим, бит 3 – закончена передача фискальных данныхв ОФД. Установленный бит 2 означает, что архив ФН закрыт
driver.ValuePurpose = 0;
driver.ReadFNStatus();
driver.Caption = "Наличие ФН: " + driver.Value;
driver.PrintString();
driver.ValuePurpose = 1;
driver.ReadFNStatus();
driver.Caption = "Фаза жизни ФН: " + driver.Value;
driver.PrintString();
// Получение параметров фискального накопителя
// ValuePurpose - назначение параметра:
// 0 – получить серийный номер ФН;
// 1 – получить номер последнего документа регистрации/перерегистрации ФН;
// 2 - получить срок действия ФН, оставшееся количество перегистраций, количество созданных отчётов решистрации/перергистраций
driver.ValuePurpose = 0;
driver.ReadFNParam();
driver.Caption = "Серийный номер ФН: " + driver.InboundStream;
driver.PrintString();
driver.ValuePurpose = 1;
driver.ReadFNParam();
driver.Caption = "Номер посл. документа регистрации/перерегистрации ФН: " + driver.InboundStream;
driver.PrintString();
driver.ValuePurpose = 2;
driver.ReadFNParam();
driver.Caption = "Срок действия ФН: " + driver.Day + "." + driver.Month + "." + driver.Year + " " + driver.Hour + ":" + driver.Minute;
driver.PrintString();
driver.Caption = "Оставшееся количество перегистраций ФН: " + driver.Duration;
driver.PrintString();
driver.Caption = "Количество созданных отчётов регистраций/перегистраций: " + driver.Count;
driver.PrintString();
// Печать клише
driver.PrintHeader();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment