Пример печати чека на ККМ Атол посредством JavaScript

Накопал на просторах интернета.. Выложил, чтоб подсматривать саму методику работы. Принцип на любом языке одинаковый.

//*********************************************************************************//
// Примеры работы с ККТ АТОЛ под новый порядок.                                              //
// Примеры предназначены для работы с прошивками, поддерживающими ФФД 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();

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.