1. Добавляем новое перечисление в ОбработчикиДрайверовПодключаемогоОборудования ОбработчикИКСФискальныеРегистраторы
2. Далее добавляем новый модуль в "Общие модули" с названием "ПодключаемоеОборудованиеИКСМФискальныеРегистраторы". В принцыпе, я взял модуль Штрих-м и переписал его под ИКС
////////// ОБЩИЕ КОМАНДЫ ВСЕХ ОБРАБОТЧИКОВ //////////////
// Master 16.12.2011 9:09:00
// Функция осуществляет подключение устройства.
//
// Параметры:
// ОбъектДрайвера - <*>
// - ОбъектДрайвера драйвера торгового оборудования.
//
// Возвращаемое значение:
// <Булево> - Результат работы функции.
//
Функция ПодключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт
Результат = Истина;
ПараметрыПодключения.Вставить("СерийныйНомерККМ", "0");
ПараметрыПодключения.Вставить("ИДУстройства", "");
ВыходныеПараметры = Новый Массив();
// Проверка параметров устройства
Порт = Неопределено;
Скорость = Неопределено;
Таймаут = Неопределено;
ПарольПользователя = Неопределено;
ПарольАдминистратора = Неопределено;
ОтменятьЧекПриПодключении = Неопределено;
НаименованиеОплаты1 = Неопределено;
НаименованиеОплаты2 = Неопределено;
НомерСекции = Неопределено;
// Master 15.12.2011 14:27:32 КодСимволаЧастичногоОтреза = Неопределено;
ЖурналОперацийДрайвера = Неопределено;
СовместимыеВерсии = Неопределено;
Параметры.Свойство("Порт" , Порт);
Параметры.Свойство("Скорость" , Скорость);
Параметры.Свойство("Таймаут" , Таймаут);
Параметры.Свойство("ПарольПользователя" , ПарольПользователя);
Параметры.Свойство("ПарольАдминистратора" , ПарольАдминистратора);
Параметры.Свойство("ОтменятьЧекПриПодключении" , ОтменятьЧекПриПодключении);
Параметры.Свойство("НаименованиеОплаты1" , НаименованиеОплаты1);
Параметры.Свойство("НаименованиеОплаты2" , НаименованиеОплаты2);
Параметры.Свойство("НомерСекции" , НомерСекции);
// Master 15.12.2011 14:27:22 Параметры.Свойство("КодСимволаЧастичногоОтреза", КодСимволаЧастичногоОтреза);
Параметры.Свойство("ЖурналОперацийДрайвера" , ЖурналОперацийДрайвера);
Если Порт = Неопределено
Или Скорость = Неопределено
Или Таймаут = Неопределено
Или ПарольПользователя = Неопределено
Или ПарольАдминистратора = Неопределено
Или ОтменятьЧекПриПодключении = Неопределено
Или НаименованиеОплаты1 = Неопределено
Или НаименованиеОплаты2 = Неопределено
Или НомерСекции = Неопределено
// Master 15.12.2011 14:27:38 Или КодСимволаЧастичногоОтреза = Неопределено
Или ЖурналОперацийДрайвера = Неопределено Тогда
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Не настроены параметры устройства.
|Для корректной работы устройства необходимо задать параметры его работы.
|Сделать это можно при помощи формы ""Настройка параметров"" модели
|подключаемого оборудования в форме ""Подключение и настройка оборудования"".'"));
Результат = Ложь;
КонецЕсли;
Если Результат Тогда
Если НЕ ОбъектДрайвера.FPInit(Параметры.Порт,Параметры.Скорость,Параметры.Таймаут,Параметры.Таймаут) тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage;
Результат = Ложь;
Иначе
ПараметрыПодключения.СерийныйНомерККМ = ОбъектДрайвера.GetSerialNumber;
Если Результат И Параметры.ОтменятьЧекПриПодключении И ОбъектДрайвера.GetCheckOpened Тогда
Результат = ОбъектДрайвера.FPResetOrder();
КонецЕсли;
Если Результат И Не ОбъектДрайвера.GetSmenaOpened тогда // Если смена не открыта, проведем регламентные процедуры
//Проверка времени
ВремяСервера = МастерПроцедурыСервера.ТекущаяДатаНаСервере();
Если Результат И НЕ ОбъектДрайвера.CurrentDate=Формат(ВремяСервера,"ДФ=dd.MM.yyyy") тогда
ОбъектДрайвера.CurrentDate=Формат(ВремяСервера,"ДФ=dd.MM.yyyy");
КонецЕсли;
Если Результат И НЕ Лев(ОбъектДрайвера.CurrentTime,7)=Лев(Формат(ВремяСервера,"ДФ=hh:mm:ss"),7) тогда
ОбъектДрайвера.CurrentTime=Формат(МастерПроцедурыСервера.ТекущаяДатаНаСервере(),"ДФ=hh:mm:ss");
КонецЕсли;
Если Результат И ((НЕ ОбъектДрайвера.GetTaxQuantity=1) Или (НЕ ОбъектДрайвера.GetBaseTax_A=2000) Или (НЕ ОбъектДрайвера.GetTaxTypeExt=0) или (НЕ ОбъектДрайвера.GetUseMixedTax)) тогда
Результат = ОбъектДрайвера.FPSetTaxRate(0, // Пароль программирования
1, // Количество программируемых групп, начиная с группы "А"
0, // Вложенный тип НДС ETaxType.ettWithNDS
2000, // Ставка НДС группы "А" в 0.01%
0, // Ставка НДС группы "Б" в 0.01%
0, // Ставка НДС группы "В" в 0.01%
0, // Ставка НДС группы "Г" в 0.01%
0, // Ставка НДС группы "Д" в 0.01%
0, // Сбор в пенсионный фонд группы "А" в 0.01%
0, // Сбор в пенсионный фонд группы "Б" в 0.01%
0, // Сбор в пенсионный фонд группы "В" в 0.01%
0, // Сбор в пенсионный фонд группы "Г" в 0.01%
0, // Сбор в пенсионный фонд группы "Д" в 0.01%
ложь) // Использовать схему составного налога
КонецЕсли;
КонецЕсли;
//Результат = Истина;
Если Не Результат тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage;
КонецЕсли;
КонецЕсли;
//мНДС = Новый Массив();
//мНДС.Добавить(20.00);
//мНДС.Добавить(0.00);
//мНДС.Добавить(0.00);
//мНДС.Добавить(0.00);
//МассивЗначений = Новый Массив;
//МассивЗначений.Добавить(Параметры.Порт);
//МассивЗначений.Добавить(Параметры.Скорость);
//МассивЗначений.Добавить(Параметры.ПарольПользователя);
//МассивЗначений.Добавить(Параметры.ПарольАдминистратора);
//МассивЗначений.Добавить(Параметры.Таймаут);
//МассивЗначений.Добавить(ПараметрыПодключения.СерийныйНомерККМ);
//МассивЗначений.Добавить(мНДС[0]);
//МассивЗначений.Добавить(мНДС[1]);
//МассивЗначений.Добавить(мНДС[2]);
//МассивЗначений.Добавить(мНДС[3]);
//МассивЗначений.Добавить(Ложь);
//МассивЗначений.Добавить(Параметры.ЖурналОперацийДрайвера);
//МассивЗначений.Добавить(Параметры.НаименованиеОплаты1);
//МассивЗначений.Добавить(Параметры.НаименованиеОплаты2);
//Если НЕ ОбъектДрайвера.Подключить(МассивЗначений, ПараметрыПодключения.ИДУстройства) Тогда
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
// Результат = Ложь;
//Иначе
// ПараметрыПодключения.СерийныйНомерККМ = МассивЗначений[5];
// Если Параметры.ОтменятьЧекПриПодключении Тогда
// ОбъектДрайвера.ОтменитьЧек(ПараметрыПодключения.ИДУстройства);
// КонецЕсли;
// Результат = Истина;
//КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
// Master 16.12.2011 9:08:45
// Функция осуществляет отключение устройства.
//
// Параметры:
// ОбъектДрайвера - <*>
// - ОбъектДрайвера драйвера торгового оборудования.
//
// Возвращаемое значение:
// <Булево> - Результат работы функции.
//
Функция ОтключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт
Результат = Ложь;
ВыходныеПараметры = Новый Массив();
Результат = ОбъектДрайвера.FPClose();
Если НЕ Результат тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage;
КонецЕсли;
//Если НЕ ОбъектДрайвера.Отключить(ПараметрыПодключения.ИДУстройства) Тогда
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
//Иначе
// Результат = Истина;
//КонецЕсли;
Возврат Результат;
КонецФункции
// Функция получает, обрабатывает и перенаправляет на исполнение команду к драйверу
//
Функция ВыполнитьКоманду(Команда, ВходныеПараметры = Неопределено, ВыходныеПараметры = Неопределено,
ОбъектДрайвера, Параметры, ПараметрыПодключения) Экспорт
Результат = Истина;
ВыходныеПараметры = Новый Массив();
// Открыть смену
Если Команда = "OpenDay" Тогда
Результат = ОткрытьСмену(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Печать чека
ИначеЕсли Команда = "PrintReceipt" Тогда
ТаблицаНоменклатуры = ВходныеПараметры[0];
ТаблицаОплат = ВходныеПараметры[1];
ОбщиеПараметры = ВходныеПараметры[2];
Результат = ПечатьЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаНоменклатуры,
ТаблицаОплат, ОбщиеПараметры, ВыходныеПараметры);
// Печать слип чека
ИначеЕсли Команда = "PrintText" Тогда
СтрокаТекста = ВходныеПараметры[0];
Результат = ПечатьТекста(ОбъектДрайвера, Параметры, ПараметрыПодключения,
СтрокаТекста, ВыходныеПараметры);
// Печать чека внесения/выемки
ИначеЕсли Команда = "Encash" Тогда
ТипИнкассации = ВходныеПараметры[0];
Сумма = ВходныеПараметры[1];
Результат = Инкассация(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипИнкассации, Сумма, ВыходныеПараметры);
// Печать отчета без гашения
ИначеЕсли Команда = "PrintXReport" Тогда
Результат = НапечататьОтчетБезГашения(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Печать отчета с гашением
ИначеЕсли Команда = "PrintZReport" Тогда
Результат = НапечататьОтчетСГашением(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Тестирование устройства
ИначеЕсли Команда = "CheckHealth" Тогда
Результат = ТестУстройства(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Открытие денежного ящика
ИначеЕсли Команда = "OpenCashDrawer" Тогда
Результат = ОткрытьДенежныйЯщик(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Получение версии драйвера
ИначеЕсли Команда = "ПолучитьВерсиюДрайвера" Тогда
Результат = ПолучитьВерсиюДрайвера(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Указанная команда не поддерживается данным драйвером
Иначе
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Команда ""%Команда%"" не поддерживается данным драйвером.'"));
ВыходныеПараметры[1] = СтрЗаменить(ВыходныеПараметры[1], "%Команда%", Команда);
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции
/////////////////////////////////////
// Функции-исполнители команд
///////// СПЕЦИФИЧНЫЕ ПО ТИПУ ОБОРУДОВАНИЯ КОМАНДЫ ////////////////
// Функция осуществляет открытие смены
Функция ОткрытьСмену(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
Результат = ОбъектДрайвера.FPNullCheck();
Если НЕ Результат тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage;
КонецЕсли;
// Заполнение выходных параметров
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ТекущаяДата());
Возврат Результат;
КонецФункции
// Осуществляет печать фискального чека
Функция ПечатьЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаНоменклатуры,
ТаблицаОплат, ОбщиеПараметры, ВыходныеПараметры)
Результат = Истина;
ЧекНаВозврат = ОбщиеПараметры[0] = 1;
// Открываем чек
Результат = ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения,
ОбщиеПараметры[0] = 1, ОбщиеПараметры[1], ВыходныеПараметры);
// Печатаем строки чека
СуммаЧека = 0;
Если Результат Тогда
Для ИндексМассива = 0 По ТаблицаНоменклатуры.Количество() - 1 Цикл
Наименование = ТаблицаНоменклатуры[ИндексМассива][0].Значение;
Количество = ТаблицаНоменклатуры[ИндексМассива][5].Значение;
Цена = ТаблицаНоменклатуры[ИндексМассива][4].Значение;
ПроцентСкидки = ТаблицаНоменклатуры[ИндексМассива][8].Значение;
Сумма = ТаблицаНоменклатуры[ИндексМассива][9].Значение;
СуммаЧека = СуммаЧека + Сумма;
НомерСекции = ТаблицаНоменклатуры[ИндексМассива][3].Значение;
СтавкаНДС = ТаблицаНоменклатуры[ИндексМассива][12].Значение;
Если (НЕ ЧекНаВозврат) И НЕ НапечататьФискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения,
Наименование, Количество, Цена, ПроцентСкидки, Сумма,
НомерСекции, СтавкаНДС, ВыходныеПараметры) Тогда
Прервать;
ИначеЕсли (ЧекНаВозврат) И НЕ НапечататьФискальнуюСтрокуВозврат(ОбъектДрайвера, Параметры, ПараметрыПодключения,
Наименование, Количество, Цена, ПроцентСкидки, Сумма,
НомерСекции, СтавкаНДС, ВыходныеПараметры) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Master 19.12.2011 7:49:24 необходимо проверить сумму ФР и базы
// Закрываем чек
Если Результат Тогда
Результат = ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры);
КонецЕсли;
Возврат Результат;
КонецФункции
// Осуществляет печать слип-чека
Функция ПечатьТекста(ОбъектДрайвера, Параметры, ПараметрыПодключения,
СтрокаТекста, ВыходныеПараметры)
Результат = Истина;
// Открываем чек
Результат = ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, Ложь, Ложь, ВыходныеПараметры);
// Печатаем строки чека
Если Результат Тогда
Для НомерСтроки = 1 По СтрЧислоСтрок(СтрокаТекста) Цикл
ВыделеннаяСтрока = СтрПолучитьСтроку(СтрокаТекста, НомерСтроки);
Если Найти(ВыделеннаяСтрока, Символ(Параметры.КодСимволаЧастичногоОтреза)) > 0 Тогда
ТаблицаОплат = Новый Массив();
Результат = ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры);
Результат = ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, Ложь, Ложь, ВыходныеПараметры);
Иначе
Если НЕ НапечататьНефискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения,
ВыделеннаяСтрока, ВыходныеПараметры) Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Закрываем чек
Если Результат Тогда
ТаблицаОплат = Новый Массив();
Результат = ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры);
КонецЕсли;
Возврат Результат;
КонецФункции
// Master 16.12.2011 9:36:08
// Функция осуществляет открытие нового чека.
//
Функция ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ЧекВозврата, ФискальныйЧек, ВыходныеПараметры)
Результат = Истина;
НомерСмены = 0;
НомерЧека = 0;
Результат = ОбъектДрайвера.GetSmenaOpened;
Если не Результат тогда
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = "Смена закрыта, печать чека не возможна";
Возврат Результат;
КонецЕсли;
Результат = НЕ ОбъектДрайвера.GetCheckOpened;
Если НЕ Результат тогда
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = "Последний чек не закрыт, закройте чек или перезапустите 1с";
Возврат Результат;
КонецЕсли;
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetNumZReport+1);
Если НЕ ЧекВозврата тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetSaleCheckNumber+1);
Иначе
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetPayCheckNumber+1);
КонецЕсли;
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ТекущаяДата());
// Открываем чек
//Результат = ОбъектДрайвера.ОткрытьЧек(ПараметрыПодключения.ИДУстройства, ФискальныйЧек, ЧекВозврата,
// Истина, НомерЧека, НомерСмены);
//Если НЕ Результат Тогда
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
//Иначе
// // Заполнение выходных параметров
// ВыходныеПараметры.Добавить(НомерСмены);
// ВыходныеПараметры.Добавить(НомерЧека);
// ВыходныеПараметры.Добавить(0);
// ВыходныеПараметры.Добавить(ТекущаяДата());
//КонецЕсли;
Возврат Результат;
КонецФункции
// Master 16.12.2011 14:03:27
// Функция осуществляет печать фискальной строки.
//
Функция НапечататьФискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения,
Наименование, Количество, Цена, ПроцентСкидки, Сумма,
НомерСекции, СтавкаНДС, ВыходныеПараметры)
Результат = Истина;
ТКоличество1 = Формат(Количество*1000,"ЧЦ=12; ЧДЦ=0; ЧГ=0");
ТКоличество2 = Формат(Окр(Количество,0)*1000,"ЧЦ=12; ЧДЦ=0; ЧГ=0");
IsOneQuant = Истина;
Если ТКоличество1=ТКоличество2 тогда
ТКоличество1 = Количество;
//IsOneQuant = Истина;
Иначе
IsOneQuant = Ложь;
ТКоличество1 = Число(ТКоличество1);
КонецЕсли;
Результат = ОбъектДрайвера.FPSaleEx (ТКоличество1, // количество
3, // количество знаков дробной части кол- ва
IsOneQuant,
Формат(Цена*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"), // цена в копейках
0, // налоговая группа « А»
ложь, // не брать описание товара из ЭККР
Лев(Наименование,50), // название товара
МастерПроцедурыСервера.Хэш(Лев(Наименование,50),,,214783648)); // Код товара
Если ПроцентСкидки > 0 тогда
ОбъектДрайвера.FPDiscount(2,Формат(ПроцентСкидки*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"),"");
ИначеЕсли ПроцентСкидки < 0 тогда
ОбъектДрайвера.FPDiscount(3,Формат(ПроцентСкидки*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"),"");
КонецЕсли;
Если НЕ Результат тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage;
КонецЕсли;
//Результат = ОбъектДрайвера.НапечататьФискСтроку(ПараметрыПодключения.ИДУстройства, Наименование, Количество, Цена,
// Сумма, НомерСекции, СтавкаНДС);
//Если НЕ Результат Тогда
// ВыходныеПараметры.Очистить();
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
// ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
//КонецЕсли;
Возврат Результат;
КонецФункции
// Master 16.12.2011 14:03:27
// Функция осуществляет печать фискальной строки.
//
Функция НапечататьФискальнуюСтрокуВозврат(ОбъектДрайвера, Параметры, ПараметрыПодключения,
Наименование, Количество, Цена, ПроцентСкидки, Сумма,
НомерСекции, СтавкаНДС, ВыходныеПараметры)
Результат = Истина;
ТКоличество1 = Формат(Количество*1000,"ЧЦ=12; ЧДЦ=0; ЧГ=0");
ТКоличество2 = Формат(Окр(Количество,0)*1000,"ЧЦ=12; ЧДЦ=0; ЧГ=0");
IsOneQuant = Истина;
Если ТКоличество1=ТКоличество2 тогда
ТКоличество1 = Количество;
//IsOneQuant = Истина;
Иначе
IsOneQuant = Ложь;
ТКоличество1 = Число(ТКоличество1);
КонецЕсли;
Результат = ОбъектДрайвера.FPPayMoneyEx(ТКоличество1, // количество
3, // количество знаков дробной части кол- ва
IsOneQuant,
Формат(Цена*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"), // цена в копейках
0, // налоговая группа « А»
ложь, // не брать описание товара из ЭККР
Лев(Наименование,50), // название товара
МастерПроцедурыСервера.Хэш(Лев(Наименование,50),,,214783648)); // Код товара
Если ПроцентСкидки > 0 тогда
ОбъектДрайвера.FPDiscount(2,Формат(ПроцентСкидки*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"),"");
ИначеЕсли ПроцентСкидки < 0 тогда
ОбъектДрайвера.FPDiscount(3,Формат(ПроцентСкидки*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"),"");
КонецЕсли;
Если НЕ Результат тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage;
КонецЕсли;
//Результат = ОбъектДрайвера.НапечататьФискСтроку(ПараметрыПодключения.ИДУстройства, Наименование, Количество, Цена,
// Сумма, НомерСекции, СтавкаНДС);
//Если НЕ Результат Тогда
// ВыходныеПараметры.Очистить();
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
// ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
//КонецЕсли;
Возврат Результат;
КонецФункции
// Master 16.12.2011 14:03:16
// Функция осуществляет печать нефискальной строки.
//
Функция НапечататьНефискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, СтрокаТекста, ВыходныеПараметры)
Результат = Истина;
Результат = ОбъектДрайвера.НапечататьНефискСтроку(ПараметрыПодключения.ИДУстройства, СтрокаТекста);
Если НЕ Результат Тогда
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
КонецЕсли;
Возврат Результат;
КонецФункции
// Master 16.12.2011 13:57:52
// Функция осуществляет закрытие ранее открытого чека.
//
Функция ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры)
Результат = Истина;
СуммаНаличнойОплаты = 0;
СуммаБезналичнойОплаты1 = 0;
СуммаБезналичнойОплаты2 = 0;
Результат = ОбъектДрайвера.GetCheckOpened;
Если НЕ Результат тогда
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = "Чек не открыт, закрытие не возможно";
Возврат Результат;
КонецЕсли;
Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл
Если ТаблицаОплат[ИндексОплаты][0].Значение = 0 Тогда
СуммаНаличнойОплаты = СуммаНаличнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
ИначеЕсли ТаблицаОплат[ИндексОплаты][0].Значение = 1 Тогда
СуммаБезналичнойОплаты1 = СуммаБезналичнойОплаты1 + ТаблицаОплат[ИндексОплаты][1].Значение;
Иначе
СуммаБезналичнойОплаты2 = СуммаБезналичнойОплаты2 + ТаблицаОплат[ИндексОплаты][1].Значение;
КонецЕсли;
КонецЦикла;
ЗакрытьАвто = Ложь;
Если НЕ СуммаНаличнойОплаты=0 тогда
Если СуммаБезналичнойОплаты1=0 и СуммаБезналичнойОплаты2=0 тогда
ЗакрытьАвто = Истина;
КонецЕсли;
Результат = ОбъектДрайвера.FPPayment (3, // форма оплат – наличными
Формат((СуммаНаличнойОплаты*100),"ЧЦ=12; ЧДЦ=0; ЧГ=0"), // сумма оплаты в копейках
ЗакрытьАвто, // чек не будет закрыт автоматически
Истина , // чек закроется как фискальный
""); // комментарий к этой оплате
КонецЕсли;
Если Результат И (НЕ СуммаБезналичнойОплаты1=0) тогда
Если СуммаБезналичнойОплаты2=0 тогда
ЗакрытьАвто = Истина;
КонецЕсли;
Результат = ОбъектДрайвера.FPPayment (0, // форма оплат – наличными
Формат(СуммаБезналичнойОплаты1*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"), // сумма оплаты в копейках
ЗакрытьАвто, // чек не будет закрыт автоматически
Истина , // чек закроется как фискальный
"Карта №1"); // комментарий к этой оплате
КонецЕсли;
Если Результат И (НЕ СуммаБезналичнойОплаты2=0) тогда
Результат = ОбъектДрайвера.FPPayment (0, // форма оплат – наличными
Формат(СуммаБезналичнойОплаты2*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"), // сумма оплаты в копейках
Истина, // чек не будет закрыт автоматически
Истина , // чек закроется как фискальный
"Карта №2"); // комментарий к этой оплате
КонецЕсли;
Если НЕ Результат тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage;
ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
КонецЕсли;
//Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл
// Если ТаблицаОплат[ИндексОплаты][0].Значение = 0 Тогда
// СуммаНаличнойОплаты = СуммаНаличнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
// ИначеЕсли ТаблицаОплат[ИндексОплаты][0].Значение = 1 Тогда
// СуммаБезналичнойОплаты1 = СуммаБезналичнойОплаты1 + ТаблицаОплат[ИндексОплаты][1].Значение;
// Иначе
// СуммаБезналичнойОплаты2 = СуммаБезналичнойОплаты2 + ТаблицаОплат[ИндексОплаты][1].Значение;
// КонецЕсли;
//КонецЦикла;
//Результат = ОбъектДрайвера.ЗакрытьЧек(ПараметрыПодключения.ИДУстройства,
// СуммаНаличнойОплаты,
// СуммаБезналичнойОплаты1,
// СуммаБезналичнойОплаты2);
//Если НЕ Результат Тогда
// ВыходныеПараметры.Очистить();
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
// ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
//КонецЕсли;
Возврат Результат;
КонецФункции
// Master 16.12.2011 13:57:41
// Функция осуществляет отмену ранее открытого чека.
//
Функция ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
Результат = ОбъектДрайвера.GetCheckOpened;
Если Результат тогда // Если Чек открыт только тогда аннулируем
Результат = ОбъектДрайвера.FPResetOrder();
КонецЕсли;
Если НЕ Результат тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage;
КонецЕсли;
//ОбъектДрайвера.ОтменитьЧек(ПараметрыПодключения.ИДУстройства);
Возврат Результат;
КонецФункции
// Master 16.12.2011 9:51:52
// Функция осуществляет внесение или выемку суммы на ФР.
//
Функция Инкассация(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипИнкассации, Сумма, ВыходныеПараметры)
Результат = Истина;
Если ТипИнкассации=1 тогда
Результат = ОбъектДрайвера.FPInToCash(Формат(Сумма*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"));
Иначе
Результат = ОбъектДрайвера.FPOutOfCash(Формат(Сумма*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"));
КонецЕсли;
Если НЕ Результат Тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage;
Иначе
// Заполнение выходных параметров
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ТекущаяДата());
КонецЕсли;
// Результат = ОбъектДрайвера.НапечататьЧекВнесенияВыемки(ПараметрыПодключения.ИДУстройства,
// ?(ТипИнкассации = 1, Сумма, -Сумма));
// Если НЕ Результат Тогда
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// КодОшибки = ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
// ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Иначе
// // Заполнение выходных параметров
// ВыходныеПараметры.Добавить(0);
// ВыходныеПараметры.Добавить(0);
// ВыходныеПараметры.Добавить(0);
// ВыходныеПараметры.Добавить(ТекущаяДата());
// КонецЕсли;
Возврат Результат;
КонецФункции
// Master 16.12.2011 9:08:28
// Функция осуществляет снятие отчёта без гашения.
//
Функция НапечататьОтчетБезГашения(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
Результат = ОбъектДрайвера.FPDayReport(Параметры.ПарольАдминистратора);
Если НЕ Результат Тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1]=ОбъектДрайвера.GetTextErrorMessage;
КонецЕсли;
//Результат = ОбъектДрайвера.НапечататьОтчетБезГашения(ПараметрыПодключения.ИДУстройства);
//Если НЕ Результат Тогда
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
// ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
//Иначе
//
//КонецЕсли;
Возврат Результат;
КонецФункции
// Master 16.12.2011 9:07:11
// Функция осуществляет снятие отчёта с гашением.
//
Функция НапечататьОтчетСГашением(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
ТОстатокДенегВФР = ОбъектДрайвера.GetMoneyInBox;
ОстатокДенегВФР = ?(ПустаяСтрока(ТОстатокДенегВФР),0,Число(ТОстатокДенегВФР));
Если НЕ ОстатокДенегВФР=0 тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1] = "Остаток суммы наличных в денежном ящике: "+Формат(ОстатокДенегВФР/100,"ЧЦ=12; ЧДЦ=2; ЧРГ=; ЧГ=3,0");
Возврат Ложь;
КонецЕсли;
Результат = ОбъектДрайвера.FPDayClrReport(Параметры.ПарольАдминистратора);
Если НЕ Результат Тогда
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1]=ОбъектДрайвера.GetTextErrorMessage;
КонецЕсли;
//Результат = ОбъектДрайвера.НапечататьОтчетСГашением(ПараметрыПодключения.ИДУстройства);
//Если НЕ Результат Тогда
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
// ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
//Иначе
//
//КонецЕсли;
Возврат Результат;
КонецФункции
// Master 16.12.2011 9:06:12
// Функция осуществляет открытие денежного ящика
//
Функция ОткрытьДенежныйЯщик(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
Результат = ОбъектДрайвера.FPOpenBox();
Если НЕ Результат Тогда
ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1]=ОбъектДрайвера.GetTextErrorMessage;
КонецЕсли;
//Попытка
// Результат = ОбъектДрайвера.ОткрытьДенежныйЯщик(ПараметрыПодключения.ИДУстройства, 0); // номер ящика по умолчанию 0
//Исключение
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить(НСтр("ru='Команда ""Открыть денежный ящик"" не поддерживается данным драйвером.'"));
// Возврат Результат;
//КонецПопытки;
//
//Если НЕ Результат Тогда
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
//КонецЕсли;
Возврат Результат;
КонецФункции
//////////// ДОПОЛНИТЕЛЬНЫЕ КОМАНДЫ ////////////////////
// Master 16.12.2011 9:06:22
// Функция осуществляет тестирование устройства
//
Функция ТестУстройства(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
РезультатТеста = "";
СерийныйНомерККМ = "0";
//мНДС = Новый Массив();
//мНДС.Добавить(20.00);
//мНДС.Добавить(0.00);
//мНДС.Добавить(0.00);
//мНДС.Добавить(0.00);
//МассивЗначений = Новый Массив;
//МассивЗначений.Добавить(Параметры.Порт);
//МассивЗначений.Добавить(Параметры.Скорость);
//МассивЗначений.Добавить(Параметры.ПарольПользователя);
//МассивЗначений.Добавить(Параметры.ПарольАдминистратора);
//МассивЗначений.Добавить(Параметры.Таймаут);
//МассивЗначений.Добавить(СерийныйНомерККМ);
//МассивЗначений.Добавить(мНДС[0]);
//МассивЗначений.Добавить(мНДС[1]);
//МассивЗначений.Добавить(мНДС[2]);
//МассивЗначений.Добавить(мНДС[3]);
//МассивЗначений.Добавить(Ложь);
//МассивЗначений.Добавить(Параметры.ЖурналОперацийДрайвера);
//МассивЗначений.Добавить(Параметры.НаименованиеОплаты1);
//МассивЗначений.Добавить(Параметры.НаименованиеОплаты2);
//Результат = ОбъектДрайвера.ТестУстройства(МассивЗначений, РезультатТеста); // Master 15.12.2011 14:03:11
// { Master 15.12.2011 14:03:16
Если НЕ ОбъектДрайвера.FPInit(Параметры.Порт,Параметры.Скорость,Параметры.Таймаут,Параметры.Таймаут) тогда
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ВыходныеПараметры[1]=ОбъектДрайвера.GetTextErrorMessage;
попытка
ОбъектДрайвера.FPClose(); // попробуем закрыть сессию
Исключение
КонецПопытки;
Иначе
Результат = ОбъектДрайвера.FPLineFeed();
ОбъектДрайвера.FPSendCustomer(True,"Work with 1C");
ОбъектДрайвера.FPPrintVersion();
ОбъектДрайвера.FPClose();
КонецЕсли;
// }
ВыходныеПараметры.Добавить(?(Результат, 0, 999));
ВыходныеПараметры.Добавить(РезультатТеста);
Возврат Результат;
КонецФункции
// Master 16.12.2011 9:06:51
// Функция возвращает версию установленного драйвера
//
Функция ПолучитьВерсиюДрайвера(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
ВыходныеПараметры.Добавить(НСтр("ru='Установлен'"));
ВыходныеПараметры.Добавить(НСтр("ru='Не определена'"));
// { Master 15.12.2011 13:42:25
//Так как в драйвере ИКС нет значение драйвера, возвращем неопределена
// }
Попытка
Если ОбъектДрайвера.FPInit(Параметры.Порт,Параметры.Скорость,Параметры.Таймаут,Параметры.Таймаут) тогда
ВыходныеПараметры[1] = ОбъектДрайвера.GetHardwareVersion;
ОбъектДрайвера.FPClose();
КонецЕсли;
// ВыходныеПараметры[1] = ОбъектДрайвера.ПолучитьНомерВерсии();
Исключение
КонецПопытки;
Возврат Результат;
КонецФункции