Включает перемещение по ячейкам, стикеровку МП, синхронизацию справочников и обработку кодов маркировки. Co-authored-by: Cursor <cursoragent@cursor.com>
4385 lines
376 KiB
Plaintext
4385 lines
376 KiB
Plaintext
|
||
#Область ПрограммныйИнтерфейс
|
||
|
||
// Заполнить структуру фискализации чека
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура.
|
||
Функция ПараметрыФискализацииЧека() Экспорт
|
||
|
||
ПараметрыФискализации = Новый Структура();
|
||
|
||
ПараметрыФискализации.Вставить("Кассир");
|
||
ПараметрыФискализации.Вставить("КассирИНН");
|
||
|
||
ПараметрыФискализации.Вставить("ДокументОснование");
|
||
ПараметрыФискализации.Вставить("ИдентификаторФискальнойЗаписи");
|
||
|
||
ПараметрыФискализации.Вставить("Организация");
|
||
ПараметрыФискализации.Вставить("ТорговыйОбъект");
|
||
ПараметрыФискализации.Вставить("КорректируемыйДокумент");
|
||
ПараметрыФискализации.Вставить("ЕстьПерсональныеДанные", Ложь);
|
||
ПараметрыФискализации.Вставить("СубъектПерсональныхДанных");
|
||
ПараметрыФискализации.Вставить("ТипПерсональныхДанных");
|
||
|
||
ПараметрыФискализации.Вставить("ТипРасчета");
|
||
ПараметрыФискализации.Вставить("ТипДокумента");
|
||
ПараметрыФискализации.Вставить("ТипИнкассации");
|
||
|
||
ПараметрыФискализации.Вставить("РевизияИнтерфейса");
|
||
ПараметрыФискализации.Вставить("ШиринаСтроки");
|
||
ПараметрыФискализации.Вставить("РегистрационныйНомерККТ");
|
||
ПараметрыФискализации.Вставить("ЗаводскойНомерФН");
|
||
ПараметрыФискализации.Вставить("ДополнительныйРеквизит");
|
||
|
||
ПараметрыФискализации.Вставить("НомерСменыККТ" , 0); // Номер смены.
|
||
ПараметрыФискализации.Вставить("НомерЧекаККТ" , 0); // Номер фискального чека.
|
||
ПараметрыФискализации.Вставить("НомерЧекаЗаСмену", 0); // Номер чека за смену.
|
||
ПараметрыФискализации.Вставить("ДатаВремяЧека"); // Дата и время фискализации чека на ККТ.
|
||
ПараметрыФискализации.Вставить("ТекущаяСмена");
|
||
|
||
ПараметрыФискализации.Вставить("СуммаЧека", 0);
|
||
ПараметрыФискализации.Вставить("ОплатаНаличные" , 0);
|
||
ПараметрыФискализации.Вставить("ОплатаЭлектронно", 0);
|
||
ПараметрыФискализации.Вставить("ОплатаПредоплата", 0);
|
||
ПараметрыФискализации.Вставить("ОплатаПостоплата", 0);
|
||
ПараметрыФискализации.Вставить("ОплатаВстречноеПредоставление", 0);
|
||
|
||
ПараметрыФискализации.Вставить("ФискальныйПризнак" , ""); // Фискальный признак документа.
|
||
ПараметрыФискализации.Вставить("АдресСайтаПроверки", ""); // Адрес сайта проверки ФНС.
|
||
ПараметрыФискализации.Вставить("ОшибкаПечати" , Ложь); // Ошибка при печати бумажной формы чека
|
||
|
||
ПараметрыФискализации.Вставить("Электронно" , Ложь);
|
||
ПараметрыФискализации.Вставить("Отправляет1СSMS" , Ложь);
|
||
ПараметрыФискализации.Вставить("Отправляет1СEmail", Ложь);
|
||
ПараметрыФискализации.Вставить("АвтономныйРежим" , Ложь);
|
||
ПараметрыФискализации.Вставить("ПокупательEmail" ); // Строка,Необязательно - Адрес электронной почты покупателя.
|
||
ПараметрыФискализации.Вставить("ПокупательНомер" ); // Строка,Необязательно - Телефонный номер покупателя. В формате +{Ц}.
|
||
|
||
ПараметрыФискализации.Вставить("ДанныеЧекаXML");
|
||
ПараметрыФискализации.Вставить("ДанныеЧекаXMLПерсональныеДанные");
|
||
ПараметрыФискализации.Вставить("РезультатОперацииXML");
|
||
ПараметрыФискализации.Вставить("ТекстСообщения");
|
||
|
||
ПараметрыФискализации.Вставить("ТекущееСостояние", ПараметрыФискальнойОперации());
|
||
|
||
ПараметрыФискализации.Вставить("ЧекКоррекцииСторно");
|
||
ПараметрыФискализации.Вставить("СформироватьЧекКоррекцииСторно", Истина);
|
||
ПараметрыФискализации.Вставить("ЧекКоррекцииНаККТ", Истина);
|
||
|
||
ПараметрыФискализации.Вставить("НеприменениеККТ", Истина);
|
||
ПараметрыФискализации.Вставить("ВерсияФФДККТ11" , Ложь);
|
||
|
||
ПараметрыФискализации.Вставить("Результат", Истина);
|
||
ПараметрыФискализации.Вставить("ОперацияЗаписана", Истина);
|
||
ПараметрыФискализации.Вставить("ТекстОшибки");
|
||
|
||
ПараметрыФискализации.Вставить("СтатусСмены", 0);
|
||
ПараметрыФискализации.Вставить("ТестовыеЧеки", Новый Массив);
|
||
ПараметрыФискализации.Вставить("ТекстЧека");
|
||
ПараметрыФискализации.Вставить("КопияЧека", Новый Массив);
|
||
ПараметрыФискализации.Вставить("ДополнительныеДокументы", Новый Массив);
|
||
|
||
ПараметрыФискализации.Вставить("ЕдиныйЧек", Ложь);
|
||
|
||
ПараметрыФискализации.Вставить("ИдентификаторОплатыПлатежнойСистемы");
|
||
ПараметрыФискализации.Вставить("ТипПлатежнойСистемы");
|
||
|
||
ПараметрыФискализации.Вставить("ДетализацияОплатыДобавлено", Ложь);
|
||
ПараметрыФискализации.Вставить("QRКодДобавлено", Ложь);
|
||
|
||
ПараметрыФискализации.Вставить("ШтрихкодыПродукции", Новый Соответствие);
|
||
Возврат ПараметрыФискализации;
|
||
|
||
КонецФункции
|
||
|
||
// Параметры фискальной операции.
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойОперации.
|
||
Функция ПараметрыФискальнойОперации() Экспорт
|
||
|
||
Возврат ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойОперации();
|
||
|
||
КонецФункции
|
||
|
||
#Область ПараметрыРегистрации
|
||
|
||
// Процедура предназначена для сохранения параметров регистрации устройства
|
||
//
|
||
// Параметры:
|
||
// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства -
|
||
// ПараметрыРегистрации - Структура -
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево.
|
||
Функция СохранитьПараметрыРегистрацииУстройства(Идентификатор, ПараметрыРегистрации) Экспорт
|
||
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
|
||
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
|
||
| ПодключаемоеОборудование.Ссылка КАК Ссылка
|
||
|ИЗ
|
||
| Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
|
||
|ГДЕ
|
||
| ПодключаемоеОборудование.Ссылка = &Идентификатор");
|
||
|
||
Запрос.УстановитьПараметр("Идентификатор", Идентификатор);
|
||
РезультатЗапроса = Запрос.Выполнить();
|
||
|
||
Если РезультатЗапроса.Пустой() Тогда
|
||
Результат = Ложь;
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
|
||
НачатьТранзакцию();
|
||
Попытка
|
||
БлокировкаДанных = Новый БлокировкаДанных();
|
||
ЭлементБлокировки = БлокировкаДанных.Добавить("Справочник.ПодключаемоеОборудование");
|
||
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
|
||
ЭлементБлокировки.УстановитьЗначение("Ссылка", Идентификатор);
|
||
БлокировкаДанных.Заблокировать();
|
||
|
||
Выборка = РезультатЗапроса.Выбрать();
|
||
Выборка.Следующий();
|
||
|
||
ОбъектСсылка = Выборка.Ссылка; // СправочникСсылка.ПодключаемоеОборудование
|
||
ОбъектСправочника = ОбъектСсылка.ПолучитьОбъект();
|
||
ОбъектСправочника.ПараметрыРегистрации.Очистить();
|
||
Для Каждого ПараметрРегистрации Из ПараметрыРегистрации Цикл
|
||
НоваяСтрока = ОбъектСправочника.ПараметрыРегистрации.Добавить();
|
||
НоваяСтрока.НаименованиеПараметра = ПараметрРегистрации.Ключ;
|
||
Если ТипЗнч(ПараметрРегистрации.Значение) = Тип("Булево") Тогда
|
||
НоваяСтрока.ЗначениеПараметра = XMLСтрока(ПараметрРегистрации.Значение);
|
||
Иначе
|
||
НоваяСтрока.ЗначениеПараметра = ПараметрРегистрации.Значение;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ОбъектСправочника.Записать();
|
||
Результат = Истина;
|
||
|
||
ЗафиксироватьТранзакцию();
|
||
Исключение
|
||
ОтменитьТранзакцию();
|
||
Результат = Ложь;
|
||
КонецПопытки;
|
||
|
||
УстановитьПривилегированныйРежим(Ложь);
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Функция возвращает по идентификатору устройства параметры регистрации.
|
||
//
|
||
// Параметры:
|
||
// Идентификатор - СправочникСсылка.ПодключаемоеОборудование
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура.
|
||
//
|
||
Функция ПараметрыРегистрацииУстройства(Идентификатор) Экспорт
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| ПодключаемоеОборудование.Ссылка КАК Ссылка,
|
||
| ПодключаемоеОборудованиеПараметрыРегистрации.НаименованиеПараметра КАК НаименованиеПараметра,
|
||
| ПодключаемоеОборудованиеПараметрыРегистрации.ЗначениеПараметра КАК ЗначениеПараметра
|
||
|ИЗ
|
||
| Справочник.ПодключаемоеОборудование.ПараметрыРегистрации КАК ПодключаемоеОборудованиеПараметрыРегистрации
|
||
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
|
||
| ПО ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка = ПодключаемоеОборудование.Ссылка
|
||
|ГДЕ
|
||
| (ПодключаемоеОборудование.Ссылка = &Идентификатор)";
|
||
|
||
Запрос.УстановитьПараметр("Идентификатор", Идентификатор);
|
||
|
||
РезультатЗапроса = Запрос.Выполнить();
|
||
|
||
ЕстьДанные = Ложь;
|
||
ДанныеХранения = Новый Структура();
|
||
|
||
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
||
// Вставить обработку выборки ВыборкаДетальныеЗаписи
|
||
ДанныеХранения.Вставить(ВыборкаДетальныеЗаписи.НаименованиеПараметра, ВыборкаДетальныеЗаписи.ЗначениеПараметра);
|
||
ЕстьДанные = Истина;
|
||
КонецЦикла;
|
||
|
||
РезультатОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ();
|
||
РезультатОперации.Вставить("ЕстьДанные", ЕстьДанные);
|
||
|
||
Если ЕстьДанные Тогда
|
||
РезультатОперации.РегистрационныйНомерККТ = ДанныеХранения.РегистрационныйНомерККТ;
|
||
РезультатОперации.ОрганизацияНазвание = ДанныеХранения.ОрганизацияНазвание;
|
||
РезультатОперации.ОрганизацияИНН = ДанныеХранения.ОрганизацияИНН;
|
||
|
||
Если ДанныеХранения.Свойство("АдресПроведенияРасчетов") Тогда
|
||
РезультатОперации.АдресПроведенияРасчетов = ДанныеХранения.АдресПроведенияРасчетов;
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("МестоПроведенияРасчетов") Тогда
|
||
РезультатОперации.МестоПроведенияРасчетов = ДанныеХранения.МестоПроведенияРасчетов;
|
||
КонецЕсли;
|
||
|
||
РезультатОперации.КодыСистемыНалогообложения = ДанныеХранения.КодыСистемыНалогообложения;
|
||
|
||
Если ДанныеХранения.Свойство("ПризнакАвтономногоРежима") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакАвтономногоРежима) Тогда
|
||
РезультатОперации.ПризнакАвтономногоРежима = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакАвтономногоРежима);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("ПризнакШифрованиеДанных") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакШифрованиеДанных) Тогда
|
||
РезультатОперации.ПризнакШифрованиеДанных = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакШифрованиеДанных);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("ПризнакРасчетовЗаУслуги") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакРасчетовЗаУслуги) Тогда
|
||
РезультатОперации.ПризнакАвтономногоРежима = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакАвтономногоРежима);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("ПризнакФормированияБСО") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакФормированияБСО) Тогда
|
||
РезультатОперации.ПризнакФормированияБСО = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакФормированияБСО);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("ПризнакРасчетовТолькоВИнтернет") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакРасчетовТолькоВИнтернет) Тогда
|
||
РезультатОперации.ПризнакРасчетовТолькоВИнтернет = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакРасчетовТолькоВИнтернет);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("ПродажаПодакцизногоТовара") И НЕ ПустаяСтрока(ДанныеХранения.ПродажаПодакцизногоТовара) Тогда
|
||
РезультатОперации.ПродажаПодакцизногоТовара = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПродажаПодакцизногоТовара);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("ПроведенияАзартныхИгр") И НЕ ПустаяСтрока(ДанныеХранения.ПроведенияАзартныхИгр) Тогда
|
||
РезультатОперации.ПроведенияАзартныхИгр = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПроведенияАзартныхИгр);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("ПроведенияЛотерей") И НЕ ПустаяСтрока(ДанныеХранения.ПроведенияЛотерей) Тогда
|
||
РезультатОперации.ПроведенияЛотерей = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПроведенияЛотерей);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("УстановкаПринтераВАвтомате") И НЕ ПустаяСтрока(ДанныеХранения.УстановкаПринтераВАвтомате) Тогда
|
||
РезультатОперации.УстановкаПринтераВАвтомате = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.УстановкаПринтераВАвтомате);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("ПризнакАвтоматическогоТорговогоАвтомата") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакАвтоматическогоТорговогоАвтомата) Тогда
|
||
РезультатОперации.ПризнакАвтоматическогоТорговогоАвтомата = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакАвтоматическогоТорговогоАвтомата);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("ПризнакОказанииУслугОбщественногоПитания") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакОказанииУслугОбщественногоПитания) Тогда
|
||
РезультатОперации.ПризнакОказанииУслугОбщественногоПитания = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакОказанииУслугОбщественногоПитания);
|
||
КонецЕсли;
|
||
Если ДанныеХранения.Свойство("ПризнакОптовойТорговлиСОрганизациями") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакОптовойТорговлиСОрганизациями) Тогда
|
||
РезультатОперации.ПризнакОптовойТорговлиСОрганизациями = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакОптовойТорговлиСОрганизациями);
|
||
КонецЕсли;
|
||
|
||
Если ДанныеХранения.Свойство("ПризнакиАгента") Тогда
|
||
РезультатОперации.ПризнакиАгента = ДанныеХранения.ПризнакиАгента;
|
||
КонецЕсли;
|
||
|
||
РезультатОперации.НомерАвтоматаДляАвтоматическогоРежима = ДанныеХранения.НомерАвтоматаДляАвтоматическогоРежима;
|
||
РезультатОперации.ОрганизацияОФДИНН = ДанныеХранения.ОрганизацияОФДИНН;
|
||
РезультатОперации.ОрганизацияОФДНазвание = ДанныеХранения.ОрганизацияОФДНазвание;
|
||
РезультатОперации.ЗаводскойНомерККТ = ДанныеХранения.ЗаводскойНомерККТ;
|
||
РезультатОперации.ЗаводскойНомерФН = ДанныеХранения.ЗаводскойНомерФН;
|
||
РезультатОперации.ВерсияФФДККТ = ДанныеХранения.ВерсияФФДККТ;
|
||
РезультатОперации.ВерсияФФДФН = ДанныеХранения.ВерсияФФДФН;
|
||
Если ДанныеХранения.Свойство("ПризнакФискализации") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакФискализации) Тогда
|
||
РезультатОперации.ПризнакФискализации = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакФискализации);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатОперации;
|
||
|
||
КонецФункции
|
||
|
||
// Обновляет параметры регистрации ККТ
|
||
//
|
||
// Параметры:
|
||
// ПараметрыРегистрацииТаблица - ТаблицаЗначений -
|
||
// ПараметрыРегистрации - ТаблицаЗначений -
|
||
Процедура ОбновитьПараметрыРегистрацииККТ(ПараметрыРегистрацииТаблица, ПараметрыРегистрации) Экспорт
|
||
|
||
Для Каждого ПараметрРегистрации Из ПараметрыРегистрации Цикл
|
||
|
||
Параметр = ПараметрыРегистрацииТаблица.Добавить();
|
||
НаименованиеПараметра = ПараметрРегистрации.НаименованиеПараметра;
|
||
ЗначениеПараметра = ПараметрРегистрации.ЗначениеПараметра;
|
||
|
||
Если НаименованиеПараметра = "РегистрационныйНомерККТ" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Регистрационный номер ККТ'")
|
||
ИначеЕсли НаименованиеПараметра = "ОрганизацияНазвание" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Название организации'")
|
||
ИначеЕсли НаименованиеПараметра = "ОрганизацияИНН" Тогда
|
||
НаименованиеПараметра = НСтр("ru='ИНН организации'")
|
||
ИначеЕсли НаименованиеПараметра = "АдресПроведенияРасчетов" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Адрес проведения расчетов'")
|
||
ИначеЕсли НаименованиеПараметра = "КодыСистемыНалогообложения" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Системы налогообложения'");
|
||
СистемыНалогообложения = СтрРазделить(ЗначениеПараметра, ",");
|
||
ЗначениеПараметра = "";
|
||
Для Каждого СистемаНалогообложения Из СистемыНалогообложения Цикл
|
||
ЗначениеПараметра = ?(Не ПустаяСтрока(ЗначениеПараметра), ЗначениеПараметра + ",", "");
|
||
Если Не ПустаяСтрока(СистемаНалогообложения) Тогда
|
||
ЗначениеПараметра = ЗначениеПараметра + """"+ ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеСистемыНалогообложения(Число(СистемаНалогообложения)) + """";
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакАвтономногоРежима" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Автономный режим'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакАвтоматическогоРежима" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Автоматический режим'")
|
||
ИначеЕсли НаименованиеПараметра = "НомерАвтоматаДляАвтоматическогоРежима" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Номер автомата для автоматического режима'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакШифрованиеДанных" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Шифрование данных'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакРасчетовЗаУслуги" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Расчет за услуги'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакФормированияБСО" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Формирования БСО'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакРасчетовТолькоВИнтернет" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Расчет только в интернет'")
|
||
ИначеЕсли НаименованиеПараметра = "ОрганизацияОФДИНН" Тогда
|
||
НаименованиеПараметра = НСтр("ru='ОФД ИНН'")
|
||
ИначеЕсли НаименованиеПараметра = "ОрганизацияОФДНазвание" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Наименование ОФД'")
|
||
ИначеЕсли НаименованиеПараметра = "ЗаводскойНомерККТ" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Заводской номер ККТ'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакФискализации" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Признак фискализации'")
|
||
ИначеЕсли НаименованиеПараметра = "ЗаводскойНомерФН" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Заводской номер ФН'")
|
||
ИначеЕсли НаименованиеПараметра = "НомерДокументаФискализации" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Номер документа фискализации'")
|
||
ИначеЕсли НаименованиеПараметра = "ДатаВремяФискализации" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Дата и время фискализации'")
|
||
ИначеЕсли НаименованиеПараметра = "ВерсияФФДККТ" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Версия ФФД ККТ'")
|
||
ИначеЕсли НаименованиеПараметра = "ВерсияФФДФН" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Версия ФФД ФН'")
|
||
// ФФД 1.05 и ФФД 1.1
|
||
ИначеЕсли НаименованиеПараметра = "МестоПроведенияРасчетов" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Место проведения расчетов'")
|
||
ИначеЕсли НаименованиеПараметра = "ПродажаПодакцизногоТовара" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Продажа подакцизного товара'")
|
||
ИначеЕсли НаименованиеПараметра = "ПроведенияАзартныхИгр" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Проведения азартных игр'")
|
||
ИначеЕсли НаименованиеПараметра = "ПроведенияЛотерей" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Проведения лотерей'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакиАгента" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Признаки агента'")
|
||
ИначеЕсли НаименованиеПараметра = "УстановкаПринтераВАвтомате" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Установка принтера в автомате'")
|
||
// ФФД 1.2
|
||
ИначеЕсли НаименованиеПараметра = "ПроведенияРасчетаВИнтернет" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Проведения расчета в интернет'")
|
||
ИначеЕсли НаименованиеПараметра = "ПродажаМаркированныхТоваров" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Продажа маркированных товаров'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакПримененияЛомбардами" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Применения ломбардами'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакДеятельностиПоСтрахованию" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Деятельность по страхованию'")
|
||
// ФФД 1.2 - Приказ ФНС России от 12.04.2023 N ЕД-7-20/239@
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакАвтоматическогоТорговогоАвтомата" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Применение в автоматическом торговом автомате'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакОказанииУслугОбщественногоПитания" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Оказании услуг общественного питания'")
|
||
ИначеЕсли НаименованиеПараметра = "ПризнакОптовойТорговлиСОрганизациями" Тогда
|
||
НаименованиеПараметра = НСтр("ru='Оптовая торговля с организациями и ИП'")
|
||
КонецЕсли;
|
||
Параметр.НаименованиеПараметра = НаименованиеПараметра;
|
||
Параметр.ЗначениеПараметра = ЗначениеПараметра;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Функция возвращает поддерживает ли фискальное устройство.
|
||
//
|
||
// Параметры:
|
||
// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево - Фискальное устройство поддерживает проверку кодов маркировки
|
||
Функция ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства) Экспорт
|
||
|
||
Результат = Ложь;
|
||
ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ИдентификаторУстройства);
|
||
Если ПараметрыРегистрации <> Неопределено Тогда
|
||
Результат = ПараметрыРегистрации.Свойство("ВерсияФФДККТ") И ПараметрыРегистрации.ВерсияФФДККТ = "1.2"
|
||
И ПараметрыРегистрации.Свойство("ВерсияФФДФН") И ПараметрыРегистрации.ВерсияФФДФН = "1.2";
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Функция возвращает для фискального устройства версию ФФД.
|
||
//
|
||
// Параметры:
|
||
// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Неопределено - Фискальное устройство поддерживает версию ФФД
|
||
Функция ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства) Экспорт
|
||
|
||
Результат = Неопределено;
|
||
ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ИдентификаторУстройства);
|
||
Если ПараметрыРегистрации <> Неопределено И ПараметрыРегистрации.Свойство("ВерсияФФДККТ") Тогда
|
||
Результат = ПараметрыРегистрации.ВерсияФФДККТ;
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ФискальныеОперации
|
||
|
||
// Записать операцию в журнал фискальных операций.
|
||
//
|
||
// Параметры:
|
||
// ПараметрыФискализации - Структура -
|
||
Процедура ЗаписатьФискальнуюОперацию(ПараметрыФискализации) Экспорт
|
||
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
|
||
Если ПустаяСтрока(ПараметрыФискализации.ИдентификаторФискальнойЗаписи) Тогда
|
||
ИдентификаторЗаписи = Строка(Новый УникальныйИдентификатор);
|
||
ПараметрыФискализации.ИдентификаторФискальнойЗаписи = ИдентификаторЗаписи;
|
||
Иначе
|
||
ИдентификаторЗаписи = ПараметрыФискализации.ИдентификаторФискальнойЗаписи;
|
||
КонецЕсли;
|
||
// ФискальныеОперации
|
||
НаборЗаписей = РегистрыСведений.ФискальныеОперации.СоздатьНаборЗаписей();
|
||
НаборЗаписей.Отбор.ДокументОснование.Установить(ПараметрыФискализации.ДокументОснование, Истина);
|
||
НаборЗаписей.Отбор.ИдентификаторЗаписи.Установить(ИдентификаторЗаписи, Истина);
|
||
|
||
НоваяСтрока = НаборЗаписей.Добавить();
|
||
НоваяСтрока.Дата = ПараметрыФискализации.ДатаВремяЧека;
|
||
НоваяСтрока.ИдентификаторЗаписи = ИдентификаторЗаписи;
|
||
НоваяСтрока.ДокументОснование = ПараметрыФискализации.ДокументОснование;
|
||
НоваяСтрока.ФискальныйПризнак = ПараметрыФискализации.ФискальныйПризнак;
|
||
НоваяСтрока.ТипДокумента = ПараметрыФискализации.ТипДокумента;
|
||
НоваяСтрока.Организация = ПараметрыФискализации.Организация;
|
||
НоваяСтрока.ТорговыйОбъект = ПараметрыФискализации.ТорговыйОбъект;
|
||
НоваяСтрока.ТипРасчета = ПараметрыФискализации.ТипРасчета;
|
||
НоваяСтрока.НомерСменыККМ = ПараметрыФискализации.НомерСменыККТ;
|
||
НоваяСтрока.НомерЧекаККМ = ПараметрыФискализации.НомерЧекаККТ;
|
||
НоваяСтрока.Сумма = ПараметрыФискализации.СуммаЧека;
|
||
НоваяСтрока.ОплатаНаличные = ПараметрыФискализации.ОплатаНаличные;
|
||
НоваяСтрока.ОплатаЭлектронно = ПараметрыФискализации.ОплатаЭлектронно;
|
||
НоваяСтрока.ОплатаПостоплата = ПараметрыФискализации.ОплатаПостоплата;
|
||
НоваяСтрока.ОплатаПредоплата = ПараметрыФискализации.ОплатаПредоплата;
|
||
НоваяСтрока.ОплатаВстречноеПредоставление = ПараметрыФискализации.ОплатаВстречноеПредоставление;
|
||
НоваяСтрока.ДополнительныйРеквизит = ПараметрыФискализации.ДополнительныйРеквизит;
|
||
НоваяСтрока.АдресСайтаПроверки = ПараметрыФискализации.АдресСайтаПроверки;
|
||
НоваяСтрока.ЗаводскойНомерФН = ПараметрыФискализации.ЗаводскойНомерФН;
|
||
НоваяСтрока.РегистрационныйНомерККТ = ПараметрыФискализации.РегистрационныйНомерККТ;
|
||
НоваяСтрока.КорректируемыйДокумент = ПараметрыФискализации.КорректируемыйДокумент;
|
||
НоваяСтрока.СубъектПерсональныхДанных = ПараметрыФискализации.СубъектПерсональныхДанных;
|
||
НоваяСтрока.ЕдиныйЧек = ПараметрыФискализации.ЕдиныйЧек;
|
||
НоваяСтрока.ТипПлатежнойСистемы = ПараметрыФискализации.ТипПлатежнойСистемы;
|
||
НоваяСтрока.ИдентификаторОплатыПлатежнойСистемы = ПараметрыФискализации.ИдентификаторОплатыПлатежнойСистемы;
|
||
Если ПараметрыФискализации.ДанныеЧекаXML <> Неопределено Тогда
|
||
НоваяСтрока.ДанныеXML = Новый ХранилищеЗначения(ПараметрыФискализации.ДанныеЧекаXML);
|
||
КонецЕсли;
|
||
|
||
НаборЗаписей.Записать();
|
||
|
||
Если ПараметрыФискализации.Свойство("ЗаписьОперацииКМ") Тогда
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
ПараметрыЗаписи = МодульМенеджерОборудованияМаркировка.ПараметрыЗаписиРезультатаПроверкиКМ();
|
||
ПараметрыЗаписи.Ключ.ИдентификаторСессии = ПараметрыФискализации.ЗаписьОперацииКМ.ИдентификаторСессии;
|
||
ПараметрыЗаписи.Ключ.ИдентификаторЗапроса = ПараметрыФискализации.ЗаписьОперацииКМ.ИдентификаторЗапроса;
|
||
Если ПараметрыФискализации.ЗаписьОперацииКМ.ВыполнялосьПодтверждениеПокупки Тогда
|
||
ПараметрыЗаписи.ПокупкаПодтверждена = Истина;
|
||
КонецЕсли;
|
||
МодульМенеджерОборудованияМаркировка.ОбновитьРезультатыПроверкиКодаМаркировкиВРегистре(ПараметрыЗаписи);
|
||
МодульМенеджерОборудованияМаркировка.ОбновитьИдентификаторФискальнойОперацииРезультатаПроверкиКодаМаркировки(
|
||
ПараметрыФискализации.ЗаписьОперацииКМ.ИдентификаторСессии, ИдентификаторЗаписи);
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыФискализации.Свойство("ЗаписьОперацииЕГАИС") Тогда
|
||
|
||
ЗаписьОперацииЕГАИС = ПараметрыФискализации.ЗаписьОперацииЕГАИС;
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
ПараметрыЗаписи = МодульМенеджерОборудованияМаркировка.ПараметрыЗаписиРезультатаПроверкиЕГАИС();;
|
||
ПараметрыЗаписи.ИдентификаторФискальнойОперации = ИдентификаторЗаписи;
|
||
ПараметрыЗаписи.Выполнено = ЗаписьОперацииЕГАИС.Выполнено;
|
||
ПараметрыЗаписи.ШтрихкодыПродукции = ПараметрыФискализации.ШтрихкодыПродукции;
|
||
ПараметрыЗаписи.ИдентификаторЗапроса = ЗаписьОперацииЕГАИС.АдресЧека;
|
||
ПараметрыЗаписи.ПодписьЧека = ЗаписьОперацииЕГАИС.ПодписьЧека;
|
||
ПараметрыЗаписи.ВходящееСообщение = ЗаписьОперацииЕГАИС.ВходящееСообщение;
|
||
ПараметрыЗаписи.ИсходящееСообщение = ЗаписьОперацииЕГАИС.ИсходящееСообщение;
|
||
ПараметрыЗаписи.СообщениеПередано = ЗаписьОперацииЕГАИС.СообщениеПередано;
|
||
ПараметрыЗаписи.ТекстОшибки = ЗаписьОперацииЕГАИС.ОписаниеОшибки;
|
||
МодульМенеджерОборудованияМаркировка.ДобавитьРезультатыОтправкиЕГАИС(ПараметрыЗаписи);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// АПК: 142-выкл обратная совместимость
|
||
|
||
// Получить данные журнала фискальных операций.
|
||
//
|
||
// Параметры:
|
||
// ДокументСсылка - ДокументСсылка - Документ-основание.
|
||
// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - запись фискальной операции.
|
||
// ТипыДокументов - ПеречислениеСсылка.ТипыФискальныхДокументовККТ - типы документов.
|
||
// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - тип расчета.
|
||
// ФискальныйПризнак - Строка - Фискальный признак документа
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Структура по свойствами:
|
||
// * НомерСменыККМ - Число - Номер чека ККМ.
|
||
// * Сумма - Число - Сумма.
|
||
// * ДокументОснование - ДокументСсылка - Документ-основание.
|
||
// * ДанныеXML - ХранилищеЗначения - Данные чека, переданные в ККТ (XML).
|
||
//
|
||
Функция ДанныеФискальнойОперации(ДокументСсылка, ИдентификаторЗаписи = Неопределено, ТипыДокументов = Неопределено, ТипРасчета = Неопределено, ФискальныйПризнак = Неопределено) Экспорт
|
||
|
||
ФискальнаяОперация = Неопределено;
|
||
|
||
Если Не (ЗначениеЗаполнено(ДокументСсылка)
|
||
Или ЗначениеЗаполнено(ИдентификаторЗаписи)
|
||
Или ЗначениеЗаполнено(ТипыДокументов)
|
||
Или ЗначениеЗаполнено(ТипРасчета)
|
||
Или ЗначениеЗаполнено(ФискальныйПризнак)) Тогда
|
||
Возврат ФискальнаяОперация;
|
||
КонецЕсли;
|
||
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
|
||
Запрос = Новый Запрос(
|
||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||
| ФискальныеОперации.ИдентификаторЗаписи КАК ИдентификаторЗаписи,
|
||
| ФискальныеОперации.Дата КАК Дата,
|
||
| ФискальныеОперации.НомерЧекаККМ КАК НомерЧекаККМ,
|
||
| ФискальныеОперации.НомерСменыККМ КАК НомерСменыККМ,
|
||
| ФискальныеОперации.ТипДокумента КАК ТипДокумента,
|
||
| ФискальныеОперации.ТипРасчета КАК ТипРасчета,
|
||
| ФискальныеОперации.Организация КАК Организация,
|
||
| ФискальныеОперации.ТорговыйОбъект КАК ТорговыйОбъект,
|
||
| ФискальныеОперации.ЗаводскойНомерФН КАК ЗаводскойНомерФН,
|
||
| ФискальныеОперации.РегистрационныйНомерККТ КАК РегистрационныйНомерККТ,
|
||
| ФискальныеОперации.ДокументОснование КАК ДокументОснование,
|
||
| ФискальныеОперации.КорректируемыйДокумент КАК КорректируемыйДокумент,
|
||
| ФискальныеОперации.Сумма КАК Сумма,
|
||
| ФискальныеОперации.ФискальныйПризнак КАК ФискальныйПризнак,
|
||
| ФискальныеОперации.ДополнительныйРеквизит КАК ДополнительныйРеквизит,
|
||
| ФискальныеОперации.ЕдиныйЧек КАК ЕдиныйЧек,
|
||
| ФискальныеОперации.ИдентификаторОплатыПлатежнойСистемы КАК ИдентификаторОплатыПлатежнойСистемы,
|
||
| ФискальныеОперации.ТипПлатежнойСистемы КАК ТипПлатежнойСистемы,
|
||
| ФискальныеОперации.ДанныеXML КАК ДанныеXML
|
||
|ИЗ
|
||
| РегистрСведений.ФискальныеОперации КАК ФискальныеОперации
|
||
|ГДЕ ИСТИНА "
|
||
+ ?(ЗначениеЗаполнено(ДокументСсылка), " И (ФискальныеОперации.ДокументОснование = &ДокументСсылка)", "")
|
||
+ ?(ИдентификаторЗаписи = Неопределено, "", " И (ФискальныеОперации.ИдентификаторЗаписи = &ИдентификаторЗаписи)")
|
||
+ ?(ТипыДокументов = Неопределено, "", " И (ФискальныеОперации.ТипДокумента В (&ТипыДокументов))")
|
||
+ ?(ТипРасчета = Неопределено, "", " И (ФискальныеОперации.ТипРасчета = &ТипРасчета)")
|
||
+ ?(ФискальныйПризнак = Неопределено, "", " И (ФискальныеОперации.ФискальныйПризнак = &ФискальныйПризнак)")
|
||
+ " УПОРЯДОЧИТЬ ПО ФискальныеОперации.Дата УБЫВ, ФискальныеОперации.НомерСменыККМ УБЫВ");
|
||
|
||
Если ЗначениеЗаполнено(ДокументСсылка) Тогда
|
||
Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка);
|
||
КонецЕсли;
|
||
|
||
Если ИдентификаторЗаписи <> Неопределено Тогда
|
||
Запрос.УстановитьПараметр("ИдентификаторЗаписи", ИдентификаторЗаписи);
|
||
КонецЕсли;
|
||
|
||
Если ТипыДокументов <> Неопределено Тогда
|
||
// Подготовка типов документов для запроса.
|
||
МассивТипыДокументов = Новый Массив();
|
||
Если ТипЗнч(ТипыДокументов) = Тип("Массив") Тогда
|
||
Для Каждого ТипДокумента Из ТипыДокументов Цикл
|
||
МассивТипыДокументов.Добавить(ТипДокумента);
|
||
КонецЦикла;
|
||
Иначе
|
||
МассивТипыДокументов.Добавить(ТипыДокументов);
|
||
КонецЕсли;
|
||
Запрос.УстановитьПараметр("ТипыДокументов", МассивТипыДокументов);
|
||
КонецЕсли;
|
||
|
||
Если ТипРасчета <> Неопределено Тогда
|
||
Запрос.УстановитьПараметр("ТипРасчета", ТипРасчета);
|
||
КонецЕсли;
|
||
|
||
Если ФискальныйПризнак <> Неопределено Тогда
|
||
Запрос.УстановитьПараметр("ФискальныйПризнак", ФискальныйПризнак);
|
||
КонецЕсли;
|
||
|
||
Выборка = Запрос.Выполнить().Выбрать();
|
||
Если Выборка.Следующий() Тогда
|
||
ФискальнаяОперация = Новый Структура;
|
||
ФискальнаяОперация.Вставить("ИдентификаторЗаписи");
|
||
ФискальнаяОперация.Вставить("Дата");
|
||
ФискальнаяОперация.Вставить("НомерЧекаККМ");
|
||
ФискальнаяОперация.Вставить("НомерСменыККМ");
|
||
ФискальнаяОперация.Вставить("ЗаводскойНомерФН");
|
||
ФискальнаяОперация.Вставить("РегистрационныйНомерККТ");
|
||
ФискальнаяОперация.Вставить("ТипДокумента");
|
||
ФискальнаяОперация.Вставить("ТипРасчета");
|
||
ФискальнаяОперация.Вставить("Организация");
|
||
ФискальнаяОперация.Вставить("ТорговыйОбъект");
|
||
ФискальнаяОперация.Вставить("Сумма");
|
||
ФискальнаяОперация.Вставить("ДокументОснование");
|
||
ФискальнаяОперация.Вставить("КорректируемыйДокумент");
|
||
ФискальнаяОперация.Вставить("ФискальныйПризнак");
|
||
ФискальнаяОперация.Вставить("ДополнительныйРеквизит");
|
||
ФискальнаяОперация.Вставить("ЕдиныйЧек");
|
||
ФискальнаяОперация.Вставить("ДанныеXML");
|
||
ФискальнаяОперация.Вставить("ИдентификаторОплатыПлатежнойСистемы");
|
||
ФискальнаяОперация.Вставить("ТипПлатежнойСистемы");
|
||
ЗаполнитьЗначенияСвойств(ФискальнаяОперация, Выборка);
|
||
КонецЕсли;
|
||
|
||
Возврат ФискальнаяОперация;
|
||
|
||
КонецФункции
|
||
|
||
// АПК: 142-вкл
|
||
|
||
// Получить данные журнала фискальных операций.
|
||
//
|
||
// Параметры:
|
||
// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - Идентификатор записи.
|
||
//
|
||
// Возвращаемое значение:
|
||
// РегистрСведенийЗапись.ФискальныеОперации.
|
||
Функция ФискальнаяОперацииПоИдентификатору(ИдентификаторЗаписи) Экспорт
|
||
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
|
||
Запрос = Новый Запрос(
|
||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||
| ФискальныеОперации.ИдентификаторЗаписи КАК ИдентификаторЗаписи,
|
||
| ФискальныеОперации.Дата КАК Дата,
|
||
| ФискальныеОперации.НомерЧекаККМ КАК НомерЧекаККМ,
|
||
| ФискальныеОперации.НомерСменыККМ КАК НомерСменыККМ,
|
||
| ФискальныеОперации.ТипДокумента КАК ТипДокумента,
|
||
| ФискальныеОперации.ТипРасчета КАК ТипРасчета,
|
||
| ФискальныеОперации.Организация КАК Организация,
|
||
| ФискальныеОперации.ТорговыйОбъект КАК ТорговыйОбъект,
|
||
| ФискальныеОперации.ЗаводскойНомерФН КАК ЗаводскойНомерФН,
|
||
| ФискальныеОперации.РегистрационныйНомерККТ КАК РегистрационныйНомерККТ,
|
||
| ФискальныеОперации.ДокументОснование КАК ДокументОснование,
|
||
| ФискальныеОперации.КорректируемыйДокумент КАК КорректируемыйДокумент,
|
||
| ФискальныеОперации.Сумма КАК Сумма,
|
||
| ФискальныеОперации.ФискальныйПризнак КАК ФискальныйПризнак,
|
||
| ФискальныеОперации.ДополнительныйРеквизит КАК ДополнительныйРеквизит,
|
||
| ФискальныеОперации.ЕдиныйЧек КАК ЕдиныйЧек,
|
||
| ФискальныеОперации.ИдентификаторОплатыПлатежнойСистемы КАК ИдентификаторОплатыПлатежнойСистемы,
|
||
| ФискальныеОперации.ТипПлатежнойСистемы КАК ТипПлатежнойСистемы,
|
||
| ФискальныеОперации.ДанныеXML КАК ДанныеXML
|
||
|ИЗ
|
||
| РегистрСведений.ФискальныеОперации КАК ФискальныеОперации
|
||
|ГДЕ
|
||
| (ИдентификаторЗаписи = &ИдентификаторЗаписи)");
|
||
|
||
Запрос.УстановитьПараметр("ИдентификаторЗаписи", ИдентификаторЗаписи);
|
||
|
||
Выборка = Запрос.Выполнить().Выбрать();
|
||
Если Выборка.Следующий() Тогда
|
||
ФискальнаяОперация = Новый Структура;
|
||
ФискальнаяОперация.Вставить("ИдентификаторЗаписи");
|
||
ФискальнаяОперация.Вставить("Дата");
|
||
ФискальнаяОперация.Вставить("НомерЧекаККМ");
|
||
ФискальнаяОперация.Вставить("НомерСменыККМ");
|
||
ФискальнаяОперация.Вставить("ЗаводскойНомерФН");
|
||
ФискальнаяОперация.Вставить("РегистрационныйНомерККТ");
|
||
ФискальнаяОперация.Вставить("ТипДокумента");
|
||
ФискальнаяОперация.Вставить("ТипРасчета");
|
||
ФискальнаяОперация.Вставить("Организация");
|
||
ФискальнаяОперация.Вставить("ТорговыйОбъект");
|
||
ФискальнаяОперация.Вставить("Сумма");
|
||
ФискальнаяОперация.Вставить("ДокументОснование");
|
||
ФискальнаяОперация.Вставить("КорректируемыйДокумент");
|
||
ФискальнаяОперация.Вставить("ФискальныйПризнак");
|
||
ФискальнаяОперация.Вставить("ДополнительныйРеквизит");
|
||
ФискальнаяОперация.Вставить("ЕдиныйЧек");
|
||
ФискальнаяОперация.Вставить("ДанныеXML");
|
||
ФискальнаяОперация.Вставить("ИдентификаторОплатыПлатежнойСистемы");
|
||
ФискальнаяОперация.Вставить("ТипПлатежнойСистемы");
|
||
ЗаполнитьЗначенияСвойств(ФискальнаяОперация, Выборка);
|
||
Возврат ФискальнаяОперация;
|
||
КонецЕсли;
|
||
|
||
Возврат Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
// Получить список журнала фискальных операций.
|
||
//
|
||
// Параметры:
|
||
// ДокументСсылка - ДокументСсылка - Документ-основание.
|
||
// ТипыДокументов - ПеречислениеСсылка.ТипыФискальныхДокументовККТ - типы фискальных документов.
|
||
// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - типы расчета.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Массив Из Структура - Структура по свойствами:
|
||
// * НомерСменыККМ - Число - Номер чека ККМ.
|
||
// * Сумма - Число - Сумма.
|
||
// * ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО - Документ-основание.
|
||
// * ДанныеXML - ХранилищеЗначения - Данные чека, переданные в ККТ (XML).
|
||
//
|
||
Функция СписокФискальныхОпераций(ДокументСсылка, ТипыДокументов = Неопределено, ТипРасчета = Неопределено) Экспорт
|
||
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
|
||
Запрос = Новый Запрос(
|
||
"ВЫБРАТЬ
|
||
| ФискальныеОперации.ИдентификаторЗаписи КАК ИдентификаторЗаписи,
|
||
| ФискальныеОперации.НомерЧекаККМ КАК НомерЧекаККМ,
|
||
| ФискальныеОперации.НомерСменыККМ КАК НомерСменыККМ,
|
||
| ФискальныеОперации.ТипДокумента КАК ТипДокумента,
|
||
| ФискальныеОперации.ТипРасчета КАК ТипРасчета,
|
||
| ФискальныеОперации.Организация КАК Организация,
|
||
| ФискальныеОперации.ТорговыйОбъект КАК ТорговыйОбъект,
|
||
| ФискальныеОперации.ЗаводскойНомерФН КАК ЗаводскойНомерФН,
|
||
| ФискальныеОперации.РегистрационныйНомерККТ КАК РегистрационныйНомерККТ,
|
||
| ФискальныеОперации.ДокументОснование КАК ДокументОснование,
|
||
| ФискальныеОперации.КорректируемыйДокумент КАК КорректируемыйДокумент,
|
||
| ФискальныеОперации.Сумма КАК Сумма,
|
||
| ФискальныеОперации.ФискальныйПризнак КАК ФискальныйПризнак,
|
||
| ФискальныеОперации.ДополнительныйРеквизит КАК ДополнительныйРеквизит,
|
||
| ФискальныеОперации.ДанныеXML КАК ДанныеXML
|
||
|ИЗ
|
||
| РегистрСведений.ФискальныеОперации КАК ФискальныеОперации
|
||
|ГДЕ
|
||
| (ФискальныеОперации.ДокументОснование = &ДокументСсылка)"
|
||
+ ?(ТипыДокументов = Неопределено, "", " И (ФискальныеОперации.ТипДокумента В (&ТипыДокументов))")
|
||
+ ?(ТипРасчета = Неопределено, "", " И (ФискальныеОперации.ТипРасчета = &ТипРасчета)")
|
||
+ " УПОРЯДОЧИТЬ ПО ФискальныеОперации.Дата УБЫВ, ФискальныеОперации.НомерСменыККМ УБЫВ");
|
||
|
||
Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка);
|
||
|
||
Если ТипыДокументов <> Неопределено Тогда
|
||
// Подготовка типов документов для запроса.
|
||
МассивТипыДокументов = Новый Массив();
|
||
Если ТипЗнч(ТипыДокументов) = Тип("Массив") Тогда
|
||
Для Каждого ТипДокумента Из ТипыДокументов Цикл
|
||
МассивТипыДокументов.Добавить(ТипДокумента);
|
||
КонецЦикла;
|
||
Иначе
|
||
МассивТипыДокументов.Добавить(ТипыДокументов);
|
||
КонецЕсли;
|
||
Запрос.УстановитьПараметр("ТипыДокументов", МассивТипыДокументов);
|
||
КонецЕсли;
|
||
|
||
Если ТипРасчета <> Неопределено Тогда
|
||
Запрос.УстановитьПараметр("ТипРасчета", ТипРасчета);
|
||
КонецЕсли;
|
||
|
||
СписокОпераций = Новый Массив();
|
||
|
||
Выборка = Запрос.Выполнить().Выбрать();
|
||
Пока Выборка.Следующий() Цикл
|
||
ФискальнаяОперация = Новый Структура;
|
||
ФискальнаяОперация.Вставить("ИдентификаторЗаписи");
|
||
ФискальнаяОперация.Вставить("НомерЧекаККМ");
|
||
ФискальнаяОперация.Вставить("НомерСменыККМ");
|
||
ФискальнаяОперация.Вставить("ЗаводскойНомерФН");
|
||
ФискальнаяОперация.Вставить("РегистрационныйНомерККТ");
|
||
ФискальнаяОперация.Вставить("ТипДокумента");
|
||
ФискальнаяОперация.Вставить("ТипРасчета");
|
||
ФискальнаяОперация.Вставить("Организация");
|
||
ФискальнаяОперация.Вставить("ТорговыйОбъект");
|
||
ФискальнаяОперация.Вставить("Сумма");
|
||
ФискальнаяОперация.Вставить("ДокументОснование");
|
||
ФискальнаяОперация.Вставить("КорректируемыйДокумент");
|
||
ФискальнаяОперация.Вставить("ФискальныйПризнак");
|
||
ФискальнаяОперация.Вставить("ДополнительныйРеквизит");
|
||
ФискальнаяОперация.Вставить("ДанныеXML");
|
||
ЗаполнитьЗначенияСвойств(ФискальнаяОперация, Выборка);
|
||
СписокОпераций.Добавить(ФискальнаяОперация);
|
||
КонецЦикла;
|
||
|
||
Возврат СписокОпераций;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ФормированиеДанныхККТ
|
||
|
||
// Возвращает для каких типов товаров будет заполняться отраслевой реквизит.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * ИзделияИзНатуральногоМеха - Булево - Заполнения для изделия из натурального меха.
|
||
// * ОбъемноСортовойУчет - Булево - Заполнения для товаров объемно сортового учета.
|
||
// * МолочнаяПродукцияСНечитаемымиКМ - Булево - Заполнения для молочной продукция с нечитаемыми КМ.
|
||
//
|
||
Функция ТипыТоваровДляЗаполненияОтраслевогоРеквизита() Экспорт;
|
||
|
||
ТипыТоваров = Новый Структура();
|
||
ТипыТоваров.Вставить("ИзделияИзНатуральногоМеха", Истина);
|
||
ТипыТоваров.Вставить("ОбъемноСортовойУчет", Истина);
|
||
ТипыТоваров.Вставить("ОбщественноеПитание", Истина);
|
||
ТипыТоваров.Вставить("МолочнаяПродукцияСНечитаемымиКМ", Ложь);
|
||
ТипыТоваров.Вставить("ВетеринарныеПрепараты", Истина);
|
||
Возврат ТипыТоваров;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает для каких типов товаров будет заполняться отраслевой реквизит.
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. ТипыТоваровДляЗаполненияОтраслевогоРеквизита
|
||
//
|
||
Функция ОтраслевойРеквизитЗаполняетсяДляТиповТоваров() Экспорт
|
||
|
||
ТипыТоваров = ТипыТоваровДляЗаполненияОтраслевогоРеквизита();
|
||
МенеджерОборудованияВызовСервераПереопределяемый.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(ТипыТоваров);
|
||
Возврат ТипыТоваров;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает ведется объемно сортовой учет.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево.
|
||
//
|
||
Функция ВедетсяОбъемноСортовойУчет() Экспорт
|
||
|
||
Результат = Ложь;
|
||
ОбъемноСортовойУчет = Результат;
|
||
СтандартнаяОбработка = Истина;
|
||
МенеджерОборудованияВызовСервераПереопределяемый.ВедетсяОбъемноСортовойУчет(ОбъемноСортовойУчет, СтандартнаяОбработка);
|
||
Результат = ?(СтандартнаяОбработка, Результат, ОбъемноСортовойУчет);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает оказываются ли услуги общественного питания.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево.
|
||
//
|
||
Функция ОказываютсяУслугиОбщественноеПитания() Экспорт
|
||
|
||
Результат = Ложь;
|
||
ОбщественноеПитание = Результат;
|
||
СтандартнаяОбработка = Истина;
|
||
МенеджерОборудованияВызовСервераПереопределяемый.ОказываютсяУслугиОбщественноеПитания(ОбщественноеПитание, СтандартнаяОбработка);
|
||
Результат = ?(СтандартнаяОбработка, Результат, ОбщественноеПитание);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает ативность контроля фискализации безналичных платежей
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево.
|
||
//
|
||
Функция КонтрольФискализацииБезналичныхПлатежей() Экспорт
|
||
|
||
Результат = Истина;
|
||
ФискализацииБезналичныхПлатежей = Результат;
|
||
СтандартнаяОбработка = Истина;
|
||
МенеджерОборудованияВызовСервераПереопределяемый.КонтрольФискализацииБезналичныхПлатежей(ФискализацииБезналичныхПлатежей, СтандартнаяОбработка);
|
||
Результат = ?(СтандартнаяОбработка, Результат, ФискализацииБезналичныхПлатежей);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Сформировать таблицу параметров в XML для операции с ФН.
|
||
//
|
||
// Параметры:
|
||
// СтруктураПараметров - Структура
|
||
// РевизияИнтерфейса - Число - Ревизия интерфейса
|
||
//
|
||
// Возвращаемое значение:
|
||
// ЗаписьXML.
|
||
//
|
||
Функция СформироватьТаблицуПараметровДляОперацииФН(СтруктураПараметров, РевизияИнтерфейса = 0) Экспорт
|
||
|
||
ЗаписьXML = Новый ЗаписьXML;
|
||
ЗаписьXML.УстановитьСтроку("UTF-8");
|
||
ЗаписьXML.ЗаписатьОбъявлениеXML();
|
||
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("ParametersFiscal");
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierName" , XMLСтрока(?(СтруктураПараметров.Свойство("Кассир") , XMLСтрока(СтруктураПараметров.Кассир), НСтр("ru='Администратор'"))));
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierINN" , XMLСтрока(?(СтруктураПараметров.Свойство("КассирИНН"), XMLСтрока(СтруктураПараметров.КассирИНН), "")));
|
||
Если РевизияИнтерфейса >= 3004 Тогда
|
||
// Коды причин изменения сведений о ККТ.
|
||
Если Не ПустаяСтрока(СтруктураПараметров.КодыПричинИзмененияСведений) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("RegistrationLabelCodes", XMLСтрока(СтруктураПараметров.КодыПричинИзмененияСведений));
|
||
КонецЕсли;
|
||
Иначе
|
||
// Код причины перерегистрации.
|
||
ЗаписьXML.ЗаписатьАтрибут("RegistrationReasonCode", XMLСтрока(СтруктураПараметров.КодПричиныПеререгистрации));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьАтрибут("KKTNumber" , XMLСтрока(СтруктураПараметров.РегистрационныйНомерККТ));
|
||
ЗаписьXML.ЗаписатьАтрибут("CompanyName" , XMLСтрока(СтруктураПараметров.ОрганизацияНазвание));
|
||
ЗаписьXML.ЗаписатьАтрибут("INN" , XMLСтрока(СтруктураПараметров.ОрганизацияИНН));
|
||
ЗаписьXML.ЗаписатьАтрибут("SaleAddress" , XMLСтрока(СтруктураПараметров.АдресПроведенияРасчетов));
|
||
ЗаписьXML.ЗаписатьАтрибут("SaleLocation" , XMLСтрока(СтруктураПараметров.МестоПроведенияРасчетов));
|
||
ЗаписьXML.ЗаписатьАтрибут("TaxationSystems" , XMLСтрока(СтруктураПараметров.КодыСистемыНалогообложения));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsOffline" , XMLСтрока(СтруктураПараметров.ПризнакАвтономногоРежима));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsEncrypted" , XMLСтрока(СтруктураПараметров.ПризнакШифрованиеДанных));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsService" , XMLСтрока(СтруктураПараметров.ПризнакРасчетовЗаУслуги));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsExcisable" , XMLСтрока(СтруктураПараметров.ПродажаПодакцизногоТовара));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsGambling" , XMLСтрока(СтруктураПараметров.ПроведенияАзартныхИгр));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsLottery" , XMLСтрока(СтруктураПараметров.ПроведенияЛотерей));
|
||
ЗаписьXML.ЗаписатьАтрибут("AgentTypes" , XMLСтрока(СтруктураПараметров.ПризнакиАгента));
|
||
ЗаписьXML.ЗаписатьАтрибут("BSOSing" , XMLСтрока(СтруктураПараметров.ПризнакФормированияБСО));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsOnlineOnly" , XMLСтрока(СтруктураПараметров.ПризнакРасчетовТолькоВИнтернет));
|
||
Если РевизияИнтерфейса >= 3004 Тогда // Версия стандарта 3.4 (ОФД 1.2)
|
||
ЗаписьXML.ЗаписатьАтрибут("IsOnline" , XMLСтрока(СтруктураПараметров.ПроведенияРасчетаВИнтернет));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsMarking" , XMLСтрока(СтруктураПараметров.ПродажаМаркированныхТоваров));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsPawnshop" , XMLСтрока(СтруктураПараметров.ПризнакПримененияЛомбардами));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsAssurance" , XMLСтрока(СтруктураПараметров.ПризнакДеятельностиПоСтрахованию));
|
||
КонецЕсли;
|
||
Если РевизияИнтерфейса >= 4000 Тогда // Версия стандарта 4.0 (ОФД 1.2)
|
||
ЗаписьXML.ЗаписатьАтрибут("IsVendingMachine" , XMLСтрока(СтруктураПараметров.ПризнакАвтоматическогоТорговогоАвтомата));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsCateringServices", XMLСтрока(СтруктураПараметров.ПризнакОказанииУслугОбщественногоПитания));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsWholesaleTrade" , XMLСтрока(СтруктураПараметров.ПризнакОптовойТорговлиСОрганизациями));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьАтрибут("IsAutomaticPrinter", XMLСтрока(СтруктураПараметров.УстановкаПринтераВАвтомате));
|
||
ЗаписьXML.ЗаписатьАтрибут("IsAutomatic" , XMLСтрока(СтруктураПараметров.ПризнакАвтоматическогоРежима));
|
||
ЗаписьXML.ЗаписатьАтрибут("AutomaticNumber" , XMLСтрока(СтруктураПараметров.НомерАвтоматаДляАвтоматическогоРежима));
|
||
ЗаписьXML.ЗаписатьАтрибут("OFDCompany" , XMLСтрока(СтруктураПараметров.ОрганизацияОФДНазвание));
|
||
ЗаписьXML.ЗаписатьАтрибут("OFDCompanyINN" , XMLСтрока(СтруктураПараметров.ОрганизацияОФДИНН));
|
||
Если Не ПустаяСтрока(СтруктураПараметров.ОтправительEmail) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("SenderEmail", XMLСтрока(СтруктураПараметров.ОтправительEmail));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(СтруктураПараметров.АдресСайтаФНС) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("FNSURL", XMLСтрока(СтруктураПараметров.АдресСайтаФНС));
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters");
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierName" , XMLСтрока(?(СтруктураПараметров.Свойство("Кассир") , XMLСтрока(СтруктураПараметров.Кассир), НСтр("ru='Администратор'"))));
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierVATIN", XMLСтрока(?(СтруктураПараметров.Свойство("КассирИНН"), XMLСтрока(СтруктураПараметров.КассирИНН), "")));
|
||
// ФФД 1.0.0
|
||
ЗаписьXML.ЗаписатьАтрибут("KKTNumber" , XMLСтрока(СтруктураПараметров.РегистрационныйНомерККТ));
|
||
ЗаписьXML.ЗаписатьАтрибут("OFDVATIN" , XMLСтрока(СтруктураПараметров.ОрганизацияОФДИНН));
|
||
ЗаписьXML.ЗаписатьАтрибут("OFDOrganizationName", XMLСтрока(СтруктураПараметров.ОрганизацияОФДНазвание));
|
||
ЗаписьXML.ЗаписатьАтрибут("OrganizationName" , XMLСтрока(СтруктураПараметров.ОрганизацияНазвание));
|
||
ЗаписьXML.ЗаписатьАтрибут("VATIN" , XMLСтрока(СтруктураПараметров.ОрганизацияИНН));
|
||
ЗаписьXML.ЗаписатьАтрибут("AddressSettle" , XMLСтрока(СтруктураПараметров.АдресПроведенияРасчетов));
|
||
ЗаписьXML.ЗаписатьАтрибут("TaxVariant" , XMLСтрока(СтруктураПараметров.КодыСистемыНалогообложения));
|
||
ЗаписьXML.ЗаписатьАтрибут("OfflineMode" , XMLСтрока(СтруктураПараметров.ПризнакАвтономногоРежима));
|
||
ЗаписьXML.ЗаписатьАтрибут("DataEncryption" , XMLСтрока(СтруктураПараметров.ПризнакШифрованиеДанных));
|
||
ЗаписьXML.ЗаписатьАтрибут("ServiceSign" , XMLСтрока(СтруктураПараметров.ПризнакРасчетовЗаУслуги));
|
||
ЗаписьXML.ЗаписатьАтрибут("BSOSing" , XMLСтрока(СтруктураПараметров.ПризнакФормированияБСО));
|
||
ЗаписьXML.ЗаписатьАтрибут("CalcOnlineSign" , XMLСтрока(СтруктураПараметров.ПризнакРасчетовТолькоВИнтернет));
|
||
ЗаписьXML.ЗаписатьАтрибут("AutomaticMode" , XMLСтрока(СтруктураПараметров.ПризнакАвтоматическогоРежима));
|
||
ЗаписьXML.ЗаписатьАтрибут("AutomaticNumber" , XMLСтрока(СтруктураПараметров.НомерАвтоматаДляАвтоматическогоРежима));
|
||
// ФФД 1.05 & 1.1
|
||
ЗаписьXML.ЗаписатьАтрибут("PlaceSettle" , XMLСтрока(СтруктураПараметров.МестоПроведенияРасчетов));
|
||
ЗаписьXML.ЗаписатьАтрибут("SaleExcisableGoods" , XMLСтрока(СтруктураПараметров.ПродажаПодакцизногоТовара));
|
||
ЗаписьXML.ЗаписатьАтрибут("SignOfGambling" , XMLСтрока(СтруктураПараметров.ПроведенияАзартныхИгр));
|
||
ЗаписьXML.ЗаписатьАтрибут("SignOfLottery" , XMLСтрока(СтруктураПараметров.ПроведенияЛотерей));
|
||
ЗаписьXML.ЗаписатьАтрибут("SignOfAgent" , XMLСтрока(СтруктураПараметров.ПризнакиАгента));
|
||
ЗаписьXML.ЗаписатьАтрибут("PrinterAutomatic" , XMLСтрока(СтруктураПараметров.УстановкаПринтераВАвтомате));
|
||
// Изменение параметров регистрации.
|
||
ЗаписьXML.ЗаписатьАтрибут("ReasonCode" , XMLСтрока(СтруктураПараметров.КодПричиныПеререгистрации));
|
||
Если Не ПустаяСтрока(СтруктураПараметров.КодыПричинИзмененияСведений) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("InfoChangesReasonsCodes", XMLСтрока(СтруктураПараметров.КодыПричинИзмененияСведений));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(СтруктураПараметров.ОтправительEmail) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("SenderEmail", XMLСтрока(СтруктураПараметров.ОтправительEmail));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(СтруктураПараметров.АдресСайтаФНС) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("FNSWebSite", XMLСтрока(СтруктураПараметров.АдресСайтаФНС));
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
Возврат ЗаписьXML.Закрыть();
|
||
|
||
КонецФункции
|
||
|
||
// Получить таблицу параметров из ККТ.
|
||
//
|
||
// Параметры:
|
||
// Данные - Структура - Данные.
|
||
// РевизияИнтерфейса - Число - Ревизия интерфейса
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Параметры из XMLПакета ККТ:
|
||
// * ПризнакФискализации - Строка.
|
||
// * НомерДокументаФискализации - Число.
|
||
// * ДатаВремяФискализации - Дата.
|
||
Функция ПараметрыИзXMLПакетаККТ(Данные, РевизияИнтерфейса = 0) Экспорт
|
||
|
||
ЧтениеXML = Новый ЧтениеXML;
|
||
ЧтениеXML.УстановитьСтроку(Данные);
|
||
ЧтениеXML.ПерейтиКСодержимому();
|
||
|
||
Параметры = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ();
|
||
Параметры.Вставить("ТипОборудования", Перечисления.ТипыПодключаемогоОборудования.ККТ);
|
||
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
|
||
Если (ЧтениеXML.Имя = "Parameters" Или ЧтениеXML.Имя = "TableParametersKKT") И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
|
||
Параметры.ВерсияФФДФН = "1.1";
|
||
ВерсияФФДФН = ЧтениеXML.ЗначениеАтрибута("FFDVersionFN");
|
||
Если ВерсияФФДФН = "1.0" Тогда
|
||
Параметры.ВерсияФФДФН = "1.0"
|
||
ИначеЕсли ВерсияФФДФН = "1.0.5" Или ВерсияФФДФН = "1.05" Тогда
|
||
Параметры.ВерсияФФДФН = "1.05"
|
||
ИначеЕсли ВерсияФФДФН = "1.2" Тогда
|
||
Параметры.ВерсияФФДФН = "1.2"
|
||
КонецЕсли;
|
||
|
||
Параметры.ВерсияФФДККТ = "1.1";
|
||
ВерсияФФДККТ = ЧтениеXML.ЗначениеАтрибута("FFDVersionKKT");
|
||
Если ВерсияФФДККТ = "1.0" Тогда
|
||
Параметры.ВерсияФФДККТ = "1.0"
|
||
ИначеЕсли ВерсияФФДККТ = "1.0.5" Или ВерсияФФДККТ = "1.05" Тогда
|
||
Параметры.ВерсияФФДККТ = "1.05"
|
||
ИначеЕсли ВерсияФФДККТ = "1.2" Тогда
|
||
Параметры.ВерсияФФДККТ = "1.2"
|
||
КонецЕсли;
|
||
|
||
// ФФД 1.0
|
||
Параметры.РегистрационныйНомерККТ = СокрЛП(ЧтениеXML.ЗначениеАтрибута("KKTNumber"));
|
||
Параметры.ЗаводскойНомерККТ = СокрЛП(ЧтениеXML.ЗначениеАтрибута("KKTSerialNumber"));
|
||
Параметры.ЗаводскойНомерФН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("FNSerialNumber"));
|
||
Параметры.ОрганизацияНазвание = ЧтениеXML.ЗначениеАтрибута("CompanyName");
|
||
Параметры.ОрганизацияИНН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("INN"));
|
||
Параметры.АдресПроведенияРасчетов = ЧтениеXML.ЗначениеАтрибута("SaleAddress");
|
||
Параметры.МестоПроведенияРасчетов = ЧтениеXML.ЗначениеАтрибута("SaleLocation");
|
||
Параметры.КодыСистемыНалогообложения = ЧтениеXML.ЗначениеАтрибута("TaxationSystems");
|
||
Параметры.ПризнакАвтономногоРежима = ВРег(ЧтениеXML.ЗначениеАтрибута("IsOffline")) = "TRUE";
|
||
Параметры.ПризнакШифрованиеДанных = ВРег(ЧтениеXML.ЗначениеАтрибута("IsEncrypted")) = "TRUE";
|
||
Параметры.ПризнакРасчетовЗаУслуги = ВРег(ЧтениеXML.ЗначениеАтрибута("IsService")) = "TRUE";
|
||
Параметры.ПродажаПодакцизногоТовара = ВРег(ЧтениеXML.ЗначениеАтрибута("IsExcisable")) = "TRUE";
|
||
Параметры.ПроведенияАзартныхИгр = ВРег(ЧтениеXML.ЗначениеАтрибута("IsGambling")) = "TRUE";
|
||
Параметры.ПроведенияЛотерей = ВРег(ЧтениеXML.ЗначениеАтрибута("IsLottery")) = "TRUE";
|
||
Параметры.ПризнакиАгента = ЧтениеXML.ЗначениеАтрибута("AgentTypes");
|
||
Параметры.ПризнакФормированияБСО = ВРег(ЧтениеXML.ЗначениеАтрибута("BSOSing")) = "TRUE";
|
||
Параметры.ПризнакРасчетовТолькоВИнтернет = ВРег(ЧтениеXML.ЗначениеАтрибута("IsOnlineOnly")) = "TRUE";
|
||
Параметры.УстановкаПринтераВАвтомате = ВРег(ЧтениеXML.ЗначениеАтрибута("IsAutomaticPrinter")) = "TRUE";
|
||
Параметры.ПризнакАвтоматическогоРежима = ВРег(ЧтениеXML.ЗначениеАтрибута("IsAutomatic")) = "TRUE";
|
||
Параметры.НомерАвтоматаДляАвтоматическогоРежима = ЧтениеXML.ЗначениеАтрибута("AutomaticNumber");
|
||
Параметры.ОрганизацияОФДНазвание = ЧтениеXML.ЗначениеАтрибута("OFDCompany");
|
||
Параметры.ОрганизацияОФДИНН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("OFDCompanyINN"));
|
||
Параметры.ПризнакФискализации = ВРег(ЧтениеXML.ЗначениеАтрибута("Fiscal")) = "TRUE";
|
||
Параметры.НомерДокументаФискализации = ЧтениеXML.ЗначениеАтрибута("DocumentNumber");
|
||
Параметры.ДатаВремяФискализации = ЧтениеXML.ЗначениеАтрибута("DateTime");
|
||
Параметры.ОтправительEmail = ЧтениеXML.ЗначениеАтрибута("SenderEmail");
|
||
Параметры.АдресСайтаФНС = ЧтениеXML.ЗначениеАтрибута("FNSURL");
|
||
Если РевизияИнтерфейса >= 3004 Тогда // Версия стандарта 3.4 (ОФД 1.2)
|
||
Параметры.ПроведенияРасчетаВИнтернет = ВРег(ЧтениеXML.ЗначениеАтрибута("IsOnline")) = "TRUE";
|
||
Параметры.ПродажаМаркированныхТоваров = ВРег(ЧтениеXML.ЗначениеАтрибута("IsMarking")) = "TRUE";
|
||
Параметры.ПризнакПримененияЛомбардами = ВРег(ЧтениеXML.ЗначениеАтрибута("IsPawnshop")) = "TRUE";
|
||
Параметры.ПризнакДеятельностиПоСтрахованию = ВРег(ЧтениеXML.ЗначениеАтрибута("IsAssurance")) = "TRUE";
|
||
КонецЕсли;
|
||
Если РевизияИнтерфейса >= 4000 Тогда // Версия стандарта 4.0 (ОФД 1.2)
|
||
Параметры.ПризнакАвтоматическогоТорговогоАвтомата = ВРег(ЧтениеXML.ЗначениеАтрибута("IsVendingMachine")) = "TRUE";
|
||
Параметры.ПризнакОказанииУслугОбщественногоПитания = ВРег(ЧтениеXML.ЗначениеАтрибута("IsCateringServices")) = "TRUE";
|
||
ПризнакОптовойТорговлиСОрганизациями = ЧтениеXML.ЗначениеАтрибута("IsWholesaleTrade");
|
||
Если НЕ ПустаяСтрока(ПризнакОптовойТорговлиСОрганизациями) Тогда
|
||
Параметры.ПризнакОптовойТорговлиСОрганизациями = ВРег(ПризнакОптовойТорговлиСОрганизациями) = "TRUE";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
Если ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Параметры.ВерсияФФДФН = ЧтениеXML.ЗначениеАтрибута("FFDVersionFN");
|
||
Если ПустаяСтрока(Параметры.ВерсияФФДФН) Тогда
|
||
Параметры.ВерсияФФДФН = "1.0";
|
||
КонецЕсли;
|
||
Параметры.ВерсияФФДККТ = ЧтениеXML.ЗначениеАтрибута("FFDVersionKKT");
|
||
Если ПустаяСтрока(Параметры.ВерсияФФДККТ) Тогда
|
||
Параметры.ВерсияФФДККТ = "1.0";
|
||
КонецЕсли;
|
||
// ФФД 1.0
|
||
Параметры.РегистрационныйНомерККТ = СокрЛП(ЧтениеXML.ЗначениеАтрибута("KKTNumber"));
|
||
Параметры.ОрганизацияНазвание = ЧтениеXML.ЗначениеАтрибута("OrganizationName");
|
||
Параметры.ОрганизацияИНН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("VATIN"));
|
||
Параметры.АдресПроведенияРасчетов = ЧтениеXML.ЗначениеАтрибута("AddressSettle");
|
||
Параметры.МестоПроведенияРасчетов = ЧтениеXML.ЗначениеАтрибута("PlaceSettle");
|
||
Параметры.КодыСистемыНалогообложения = ЧтениеXML.ЗначениеАтрибута("TaxVariant");
|
||
Если ПустаяСтрока(Параметры.КодыСистемыНалогообложения) Тогда
|
||
Параметры.КодыСистемыНалогообложения = ЧтениеXML.ЗначениеАтрибута("TaxVarinat");
|
||
КонецЕсли;
|
||
Параметры.ПризнакАвтономногоРежима = ВРег(ЧтениеXML.ЗначениеАтрибута("OfflineMode")) = "TRUE";
|
||
Параметры.ПризнакАвтоматическогоРежима = ВРег(ЧтениеXML.ЗначениеАтрибута("AutomaticMode")) = "TRUE";
|
||
Параметры.НомерАвтоматаДляАвтоматическогоРежима = ЧтениеXML.ЗначениеАтрибута("AutomaticNumber");
|
||
Параметры.ПризнакФормированияБСО = ВРег(ЧтениеXML.ЗначениеАтрибута("BSOSing")) = "TRUE";
|
||
Параметры.ПризнакРасчетовТолькоВИнтернет = ВРег(ЧтениеXML.ЗначениеАтрибута("CalcOnlineSign")) = "TRUE";
|
||
Параметры.ПризнакШифрованиеДанных = ВРег(ЧтениеXML.ЗначениеАтрибута("DataEncryption")) = "TRUE";
|
||
Параметры.ОрганизацияОФДИНН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("OFDVATIN"));
|
||
Параметры.ОрганизацияОФДНазвание = ЧтениеXML.ЗначениеАтрибута("OFDOrganizationName");
|
||
Параметры.ЗаводскойНомерККТ = СокрЛП(ЧтениеXML.ЗначениеАтрибута("KKTSerialNumber"));
|
||
Параметры.ПризнакФискализации = ВРег(ЧтениеXML.ЗначениеАтрибута("Fiscal")) = "TRUE";
|
||
Параметры.ЗаводскойНомерФН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("FNSerialNumber"));
|
||
Параметры.НомерДокументаФискализации = ЧтениеXML.ЗначениеАтрибута("DocumentNumber");
|
||
Параметры.ДатаВремяФискализации = ЧтениеXML.ЗначениеАтрибута("DateTime");
|
||
Параметры.ПризнакРасчетовЗаУслуги = ВРег(ЧтениеXML.ЗначениеАтрибута("ServiceSign")) = "TRUE";
|
||
Параметры.ПродажаПодакцизногоТовара = ВРег(ЧтениеXML.ЗначениеАтрибута("SaleExcisableGoods")) = "TRUE";
|
||
Параметры.ПроведенияАзартныхИгр = ВРег(ЧтениеXML.ЗначениеАтрибута("SignOfGambling")) = "TRUE";
|
||
Параметры.ПроведенияЛотерей = ВРег(ЧтениеXML.ЗначениеАтрибута("SignOfLottery")) = "TRUE";
|
||
Параметры.ПризнакиАгента = ЧтениеXML.ЗначениеАтрибута("SignOfAgent");
|
||
Параметры.УстановкаПринтераВАвтомате = ВРег(ЧтениеXML.ЗначениеАтрибута("PrinterAutomatic")) = "TRUE";
|
||
Параметры.ОтправительEmail = ЧтениеXML.ЗначениеАтрибута("SenderEmail");
|
||
Параметры.АдресСайтаФНС = ЧтениеXML.ЗначениеАтрибута("FNSWebSite");
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
СистемыНалогообложения = Новый Массив();
|
||
Если Не ПустаяСтрока(Параметры.КодыСистемыНалогообложения) Тогда
|
||
СистемыНалогообложенияВрем = СтрРазделить(Параметры.КодыСистемыНалогообложения, ",");
|
||
Для Каждого ВремСНО Из СистемыНалогообложенияВрем Цикл
|
||
СНО = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СистемаНалогообложенияККТПоКоду(Число(ВремСНО));
|
||
СистемыНалогообложения.Добавить(СНО);
|
||
КонецЦикла;
|
||
Параметры.Вставить("СистемыНалогообложения", СистемыНалогообложения);
|
||
КонецЕсли;
|
||
|
||
Возврат Параметры;
|
||
|
||
КонецФункции
|
||
|
||
// Процедура формирует XML пакет для Фискализация чека.
|
||
//
|
||
// Параметры:
|
||
// ОбщиеПараметры - Структура - параметры чека
|
||
// ПараметрыФискализации - Структура - параметры фискализации чека.
|
||
// ВключатьПерсональныеДанные - Булево - Включать персональные данные.
|
||
// ПерсональныеДанные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПерсональныеДанныеПокупателя.
|
||
// ТипПерсональныхДанных - ПеречислениеСсылка.ТипыПерсональныхДанныхККТ - Тип персональных данных.
|
||
Процедура СформироватьXMLПакетДляФискализацияЧека(ОбщиеПараметры, ПараметрыФискализации, ВключатьПерсональныеДанные = Ложь,
|
||
ПерсональныеДанные = Неопределено, ТипПерсональныхДанных = Неопределено) Экспорт
|
||
|
||
// ++ Локализация
|
||
ПозицииЧека = ОбщиеПараметры.ПозицииЧека;
|
||
ТаблицаОплат = ОбщиеПараметры.ТаблицаОплат;
|
||
Электронно = ОбщиеПараметры.Электронно;
|
||
|
||
ТипРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодРасчетаДенежнымиСредствами(ОбщиеПараметры.ТипРасчета);
|
||
СистемаНалогообложения = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодСистемыНалогообложенияККТ(ОбщиеПараметры.СистемаНалогообложения);
|
||
|
||
// Таблица оплат
|
||
СуммаЧека = 0;
|
||
СуммаНаличные = 0;
|
||
СуммаЭлектронно = 0;
|
||
СуммаПредоплата = 0;
|
||
СуммаПостоплата = 0;
|
||
СуммаПредоставление = 0;
|
||
|
||
Если ТаблицаОплат <> Неопределено Тогда
|
||
Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл
|
||
Если ТаблицаОплат[ИндексОплаты].ТипОплаты = Перечисления.ТипыОплатыККТ.Электронно Тогда
|
||
СуммаЭлектронно = СуммаЭлектронно + ТаблицаОплат[ИндексОплаты].Сумма;
|
||
ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = Перечисления.ТипыОплатыККТ.Предоплата Тогда
|
||
СуммаПредоплата = СуммаПредоплата + ТаблицаОплат[ИндексОплаты].Сумма;
|
||
ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = Перечисления.ТипыОплатыККТ.Постоплата Тогда
|
||
СуммаПостоплата = СуммаПостоплата + ТаблицаОплат[ИндексОплаты].Сумма;
|
||
ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = Перечисления.ТипыОплатыККТ.ВстречноеПредоставление Тогда
|
||
СуммаПредоставление = СуммаПредоставление + ТаблицаОплат[ИндексОплаты].Сумма;
|
||
Иначе
|
||
СуммаНаличные = СуммаНаличные + ТаблицаОплат[ИндексОплаты].Сумма;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
ОплатаНеНаличными = СуммаЭлектронно + СуммаПостоплата + СуммаПредоплата + СуммаПредоставление;
|
||
|
||
// Выводим в печатную форму чека дополнительную информацию по СПБ и НСПК
|
||
Если ОбщиеПараметры.Свойство("ДетализацияОплаты") И ОбщиеПараметры.ДетализацияОплаты.Количество() > 0 И НЕ ПараметрыФискализации.ДетализацияОплатыДобавлено Тогда
|
||
|
||
ПараметрыФискализации.ДетализацияОплатыДобавлено = Истина;
|
||
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека();
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
|
||
|
||
ТекстСтроки = НСтр("ru='ДЕТАЛИЗАЦИЯ ОПЛАТЫ'");
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ТекстСтроки);
|
||
СтрокаЧека.Выравнивание = "Центр";
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
|
||
|
||
ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0";
|
||
Для Каждого ДетализацияОплаты Из ОбщиеПараметры.ДетализацияОплаты Цикл
|
||
ТекстСтроки = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыстроитьПоля(ДетализацияОплаты.НаименованиеТипаОплаты,
|
||
Формат(ДетализацияОплаты.Сумма, ФорматЧисла), ПараметрыФискализации.ШиринаСтроки);
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ТекстСтроки);
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
|
||
КонецЦикла
|
||
КонецЕсли;
|
||
|
||
// QR-код по СПБ и НСПК
|
||
Если ОбщиеПараметры.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств Тогда
|
||
Если ОбщиеПараметры.Свойство("QRКод") И Не ПустаяСтрока(ОбщиеПараметры.QRКод.ЗначениеКода) И НЕ ПараметрыФискализации.QRКодДобавлено Тогда
|
||
|
||
ПараметрыФискализации.QRКодДобавлено = Истина;
|
||
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека();
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
|
||
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыШтрихкодВСтрокеЧека("QR", ОбщиеПараметры.QRКод.ЗначениеКода);
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
|
||
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека();
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
|
||
|
||
Если НЕ ПустаяСтрока(ОбщиеПараметры.ТипПлатежнойСистемы) Тогда
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ОбщиеПараметры.ТипПлатежнойСистемы);
|
||
СтрокаЧека.Выравнивание = "Центр";
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
|
||
КонецЕсли;
|
||
Если НЕ ПустаяСтрока(ОбщиеПараметры.QRКод.ТекстПользователя) Тогда
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ОбщиеПараметры.QRКод.ТекстПользователя);
|
||
СтрокаЧека.Выравнивание = "Центр";
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
|
||
КонецЕсли;
|
||
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека();
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
|
||
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
// Пакетная печать чека. Подготовка пакета.
|
||
ЗаписьXML = Новый ЗаписьXML();
|
||
ЗаписьXML.УстановитьСтроку("UTF-8");
|
||
ЗаписьXML.ЗаписатьОбъявлениеXML();
|
||
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("CheckPackage");
|
||
|
||
Если ПараметрыФискализации.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters");
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierName", XMLСтрока(ОбщиеПараметры.Кассир));
|
||
Если Не ПустаяСтрока(ОбщиеПараметры.КассирИНН) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierINN", XMLСтрока(ОбщиеПараметры.КассирИНН));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьАтрибут("OperationType", XMLСтрока(ТипРасчета));
|
||
ЗаписьXML.ЗаписатьАтрибут("TaxationSystem" , XMLСтрока(СистемаНалогообложения));
|
||
|
||
Если Не ПустаяСтрока(ОбщиеПараметры.ОтправительEmail) И Электронно Тогда // Отправитель Email указывается только для Электронно.
|
||
ЗаписьXML.ЗаписатьАтрибут("SenderEmail", XMLСтрока(ОбщиеПараметры.ОтправительEmail));
|
||
КонецЕсли;
|
||
|
||
Если ОбщиеПараметры.Свойство("АдресРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.АдресРасчетов) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("SaleAddress", XMLСтрока(ОбщиеПараметры.АдресРасчетов));
|
||
КонецЕсли;
|
||
Если ОбщиеПараметры.Свойство("МестоРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.МестоРасчетов) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("SaleLocation", XMLСтрока(ОбщиеПараметры.МестоРасчетов));
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыФискализации.РевизияИнтерфейса >= 4000 Тогда
|
||
Если ОбщиеПараметры.Свойство("СворачиватьОдинаковыеСтрокПриПечати") Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("GroupingPositionsWhenPrinting", XMLСтрока(ОбщиеПараметры.СворачиватьОдинаковыеСтрокПриПечати));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ОбщиеПараметры.Свойство("ПокупательEmail") Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CustomerEmail", XMLСтрока(?(ОбщиеПараметры.Свойство("ПокупательEmail"), ОбщиеПараметры.ПокупательEmail, "")));
|
||
КонецЕсли;
|
||
// SMS отправляет средствами 1C
|
||
Если ОбщиеПараметры.Свойство("ПокупательНомер") Тогда
|
||
ПокупательНомер = ?(ОбщиеПараметры.Свойство("ПокупательНомер"), ОбщиеПараметры.ПокупательНомер, "");
|
||
ПокупательНомер = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ПокупательНомер);
|
||
ЗаписьXML.ЗаписатьАтрибут("CustomerPhone", XMLСтрока(ПокупательНомер));
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыФискализации.РевизияИнтерфейса < 3004 Тогда
|
||
|
||
Получатель = ОбщиеПараметры.Получатель;
|
||
Если ПустаяСтрока(Получатель) Тогда
|
||
Получатель = ОбщиеПараметры.СведенияОПокупателе.Покупатель;
|
||
КонецЕсли;
|
||
ПолучательИНН = ОбщиеПараметры.ПолучательИНН;
|
||
Если ПустаяСтрока(ПолучательИНН) Тогда
|
||
ПолучательИНН = ОбщиеПараметры.СведенияОПокупателе.ПокупательИНН;
|
||
КонецЕсли;
|
||
Если ПерсональныеДанные <> Неопределено Тогда
|
||
Если ТипПерсональныхДанных = Перечисления.ТипыПерсональныхДанныхККТ.ИНН Тогда
|
||
ПолучательИНН = ПерсональныеДанные.ИНН;
|
||
ИначеЕсли Не ПустаяСтрока(ПерсональныеДанные.ДанныеДокумента) Тогда
|
||
Получатель = СтрШаблон("<%1> <%2>", Получатель, ПерсональныеДанные.ДанныеДокумента);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(Получатель) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CustomerInfo", XMLСтрока(Получатель));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ПолучательИНН) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CustomerINN", XMLСтрока(ПолучательИНН));
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
Если ОбщиеПараметры.Свойство("НомерАвтомата") И НЕ ПустаяСтрока(ОбщиеПараметры.НомерАвтомата) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("AutomatNumber", XMLСтрока(ОбщиеПараметры.НомерАвтомата));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ОбщиеПараметры.Свойство("ПризнакАгента") И НЕ ПустаяСтрока(ОбщиеПараметры.ПризнакАгента) Тогда
|
||
ПризнакАгента = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента(ОбщиеПараметры.ПризнакАгента);
|
||
ЗаписьXML.ЗаписатьАтрибут("AgentType", XMLСтрока(ПризнакАгента));
|
||
КонецЕсли;
|
||
|
||
Если ОбщиеПараметры.Свойство("ДополнительныйРеквизит") И НЕ ПустаяСтрока(ОбщиеПараметры.ДополнительныйРеквизит) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", XMLСтрока(ОбщиеПараметры.ДополнительныйРеквизит));
|
||
КонецЕсли;
|
||
|
||
Если ОбщиеПараметры.Свойство("ДанныеКоррекции") Тогда
|
||
ЗаписатьДанныеКоррекции(ЗаписьXML, ОбщиеПараметры.ДанныеКоррекции);
|
||
КонецЕсли;
|
||
|
||
Если ОбщиеПараметры.Свойство("ДополнительныйРеквизитПользователя") Тогда
|
||
ЗаписатьДополнительныйРеквизитПользователя(ЗаписьXML, ОбщиеПараметры.ДополнительныйРеквизитПользователя);
|
||
КонецЕсли;
|
||
|
||
ЗаписатьДанныеАгента(ЗаписьXML, ОбщиеПараметры.ДанныеАгента, ПараметрыФискализации.РевизияИнтерфейса);
|
||
ЗаписатьДанныеПоставщика(ЗаписьXML, ОбщиеПараметры.ДанныеПоставщика, ПараметрыФискализации.РевизияИнтерфейса);
|
||
|
||
Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда
|
||
ЗаписатьСведенияОПокупателе(ЗаписьXML, ОбщиеПараметры, ПерсональныеДанные, ТипПерсональныхДанных);
|
||
ЗаписатьОперационныйРеквизит(ЗаписьXML, ОбщиеПараметры.ОперационныйРеквизит);
|
||
ЗаписатьОтраслевойРеквизит(ЗаписьXML, ОбщиеПараметры.ОтраслевойРеквизит);
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
|
||
Если ОбщиеПараметры.Свойство("ФорматФД") Тогда
|
||
ФорматФД = ОбщиеПараметры.ФорматФД;
|
||
Иначе
|
||
ФорматФД = "1.2";
|
||
КонецЕсли;
|
||
|
||
// Табличная часть
|
||
Если ОбщиеПараметры.ПозицииЧека <> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Positions");
|
||
Для ИндексМассива = 0 По ОбщиеПараметры.ПозицииЧека.Количество() - 1 Цикл
|
||
ТекущаяПозиция = ОбщиеПараметры.ПозицииЧека[ИндексМассива]; // см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека
|
||
|
||
Если ТекущаяПозиция.Свойство("ФискальнаяСтрока") Тогда // Фискальная строка
|
||
|
||
Если ТекущаяПозиция.ЦенаСоСкидками = 0 И ТекущаяПозиция.Сумма > 0 И ТекущаяПозиция.Количество > 0 Тогда
|
||
ЦенаСоСкидками = Окр(ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, 2);
|
||
Иначе
|
||
ЦенаСоСкидками = ТекущаяПозиция.ЦенаСоСкидками;
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
|
||
ЗаписьXML.ЗаписатьАтрибут("Name" , XMLСтрока(ТекущаяПозиция.Наименование)); // Наименование товара.
|
||
ЗаписьXML.ЗаписатьАтрибут("Quantity" , XMLСтрока(ТекущаяПозиция.Количество)); // Количество товара.
|
||
ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount" , XMLСтрока(ЦенаСоСкидками)); // Цена единицы товара с учетом скидок/наценок.
|
||
ЗаписьXML.ЗаписатьАтрибут("AmountWithDiscount", XMLСтрока(ТекущаяПозиция.Сумма)); // Конечная сумма по позиции чека с учетом всех скидок/наценок.
|
||
ЗаписьXML.ЗаписатьАтрибут("DiscountAmount" , XMLСтрока(ТекущаяПозиция.СуммаСкидок)); // Сумма скидок и наценок.
|
||
ЗаписьXML.ЗаписатьАтрибут("Department" , XMLСтрока(ТекущаяПозиция.НомерСекции)); // Отдел, по которому ведется продажа
|
||
|
||
ЗначениеСтавкаНДС = ПредставлениеСтавкиНДС(ТекущаяПозиция.СтавкаНДС, ПараметрыФискализации.РевизияИнтерфейса);
|
||
ЗаписьXML.ЗаписатьАтрибут("VATRate", XMLСтрока(ЗначениеСтавкаНДС)); // Ставка НДС
|
||
|
||
Если ТекущаяПозиция.Свойство("СуммаНДС") И НЕ ПустаяСтрока(ТекущаяПозиция.СуммаНДС) И ЗначениеСтавкаНДС <> "none" Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("VATAmount", XMLСтрока(ТекущаяПозиция.СуммаНДС));
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("ПризнакСпособаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакСпособаРасчета) Тогда
|
||
ПризнакСпособаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаСпособаРасчета(ТекущаяПозиция.ПризнакСпособаРасчета);
|
||
ЗаписьXML.ЗаписатьАтрибут("PaymentMethod", XMLСтрока(ПризнакСпособаРасчета));
|
||
КонецЕсли;
|
||
|
||
ПризнакПредметаРасчета = Неопределено;
|
||
Если ТекущаяПозиция.Свойство("ПризнакПредметаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакПредметаРасчета) Тогда
|
||
ПризнакПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаПредметаРасчета(ТекущаяПозиция.ПризнакПредметаРасчета);
|
||
Если ПризнакПредметаРасчета <> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CalculationSubject", XMLСтрока(ПризнакПредметаРасчета));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("ПризнакАгентаПоПредметуРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакАгентаПоПредметуРасчета) Тогда
|
||
ПризнакАгентаПоПредметуРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента(ТекущаяПозиция.ПризнакАгентаПоПредметуРасчета);
|
||
ЗаписьXML.ЗаписатьАтрибут("CalculationAgent", XMLСтрока(ПризнакАгентаПоПредметуРасчета));
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("КодСтраныПроисхожденияТовара") И НЕ ПустаяСтрока(ТекущаяПозиция.КодСтраныПроисхожденияТовара) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CountryOfOrigin", XMLСтрока(ТекущаяПозиция.КодСтраныПроисхожденияТовара));
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("НомерТаможеннойДекларации") И НЕ ПустаяСтрока(ТекущаяПозиция.НомерТаможеннойДекларации) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CustomsDeclaration", XMLСтрока(ТекущаяПозиция.НомерТаможеннойДекларации));
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("СуммаАкциза") И ТекущаяПозиция.СуммаАкциза <> Неопределено Тогда
|
||
Если Число(ТекущаяПозиция.СуммаАкциза) > 0 Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("ExciseAmount", XMLСтрока(ТекущаяПозиция.СуммаАкциза));
|
||
ИначеЕсли ПризнакПредметаРасчета <> Неопределено Тогда
|
||
Если ПризнакПредметаРасчета = 2 Или ПризнакПредметаРасчета = 30 Или ПризнакПредметаРасчета = 31 Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("ExciseAmount", XMLСтрока(ТекущаяПозиция.СуммаАкциза));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("ДополнительныйРеквизит") Тогда // Тэг 1191
|
||
|
||
ДополнительныйРеквизит = "";
|
||
Если НЕ ПустаяСтрока(ТекущаяПозиция.ДополнительныйРеквизит) Тогда
|
||
ДополнительныйРеквизит = ТекущаяПозиция.ДополнительныйРеквизит;
|
||
ИначеЕсли ВедетсяОбъемноСортовойУчет() И ТекущаяПозиция.ОбъемноСортовойУчет И ПараметрыФискализации.РевизияИнтерфейса < 3004 Тогда
|
||
// Передача сведений об объемно сортовой товара при оптовой продаже через ККТ
|
||
ДополнительныйРеквизит = "crpt=mrk";
|
||
ИначеЕсли ТекущаяПозиция.Свойство("ДробноеКоличество") И ПараметрыФискализации.РевизияИнтерфейса < 3004 Тогда
|
||
// Дробное количество, рекомендации ЦРПТ "ВЫВОД ТОВАРА ИЗ ОБОРОТА ПРИ РЕАЛИЗАЦИИ КОНЕЧНЫМ ПОТРЕБИТЕЛЯМ (ЧАСТИЧНАЯ ПРОДАЖА)"
|
||
// для 1.05 и 1.1 - пишем в 1191, Формирование и передача фискального документа в ГИС МТ
|
||
Если Не ПустаяСтрока(ТекущаяПозиция.ДробноеКоличество.Числитель) И Не ПустаяСтрока(ТекущаяПозиция.ДробноеКоличество.Знаменатель) Тогда
|
||
Числитель = Число(ТекущаяПозиция.ДробноеКоличество.Числитель);
|
||
Знаменатель = Число(ТекущаяПозиция.ДробноеКоличество.Знаменатель);
|
||
ДополнительныйРеквизит = "mrk"; // Префикс «mrk», если после «mrk» указание дробной части отсутствует, упаковка считается выведенной из оборота полностью.
|
||
Если Числитель <> Знаменатель Тогда
|
||
ДополнительныйРеквизит = ДополнительныйРеквизит + Строка(Числитель) + "/" + Строка(Знаменатель) + "&";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДополнительныйРеквизит) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", XMLСтрока(ДополнительныйРеквизит)); // Тэг 1191
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда
|
||
|
||
Если Не ПустаяСтрока(ТекущаяПозиция.КонтрольнаяМарка) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ТекущаяПозиция.КонтрольнаяМарка));
|
||
КонецЕсли;
|
||
|
||
Если ФорматФД = "1.2" Тогда
|
||
ДробноеКоличествоУказано = Ложь;
|
||
ДробноеКоличество = ТекущаяПозиция.ДробноеКоличество;
|
||
Если Не ПустаяСтрока(ДробноеКоличество.Числитель) И Не ПустаяСтрока(ДробноеКоличество.Знаменатель) Тогда
|
||
Если Число(ДробноеКоличество.Числитель) > 0 И Число(ДробноеКоличество.Знаменатель) > 0 Тогда
|
||
ДробноеКоличествоУказано = Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ДробноеКоличествоУказано Тогда
|
||
МераКоличестваПредметаРасчета = 0;
|
||
ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета));
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("FractionalQuantity");
|
||
ЗаписьXML.ЗаписатьАтрибут("Numerator", XMLСтрока(ДробноеКоличество.Числитель));
|
||
ЗаписьXML.ЗаписатьАтрибут("Denominator", XMLСтрока(ДробноеКоличество.Знаменатель));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
Иначе
|
||
Если ВедетсяОбъемноСортовойУчет() И ТекущаяПозиция.ОбъемноСортовойУчет И Не ПустаяСтрока(ТекущаяПозиция.КоличествоВесовогоТовара) Тогда
|
||
МераКоличестваПредметаРасчета = 11; // Килограмм
|
||
Иначе
|
||
МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(ТекущаяПозиция.КодЕдиницыИзмерения);
|
||
МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчета);
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
Если ТекущаяПозиция.Свойство("ЕдиницаИзмерения") И ТекущаяПозиция.ЕдиницаИзмерения <> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("MeasurementUnit", XMLСтрока(Лев(ТекущаяПозиция.ЕдиницаИзмерения, 16)));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
МодульМенеджерОборудованияМаркировка.ЗаписатьДанныеКодаТоварнойНоменклатуры(ЗаписьXML, ТекущаяПозиция, ПараметрыФискализации);
|
||
|
||
Если ВедетсяОбъемноСортовойУчет() И ТекущаяПозиция.ОбъемноСортовойУчет Тогда
|
||
МодульМенеджерОборудованияМаркировка.ЗаполнитьОтраслевойРеквизитОбъемноСортовойУчет(ТекущаяПозиция);
|
||
ИначеЕсли ОказываютсяУслугиОбщественноеПитания() И ТекущаяПозиция.ОбщественноеПитание Тогда
|
||
МодульМенеджерОборудованияМаркировка.ЗаполнитьОтраслевойРеквизитОбщественноеПитание(ТекущаяПозиция);
|
||
ИначеЕсли ТекущаяПозиция.ВетеринарныйПрепарат Тогда
|
||
МодульМенеджерОборудованияМаркировка.ЗаполнитьОтраслевойРеквизитВетеринарныеПрепараты(ТекущаяПозиция);
|
||
КонецЕсли;
|
||
|
||
Если Не ПустаяСтрока(ТекущаяПозиция.ЗапросПроверкиКода.ИдентификаторЗапроса)
|
||
И Не ПустаяСтрока(ТекущаяПозиция.ЗапросПроверкиКода.ВременнаяМетка) Тогда
|
||
МодульМенеджерОборудованияМаркировка.ЗаполнитьДанныеЗапросПроверкиКода(ТекущаяПозиция);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
ЗаписатьДанныеАгента(ЗаписьXML, ТекущаяПозиция.ДанныеАгента, ПараметрыФискализации.РевизияИнтерфейса);
|
||
ЗаписатьДанныеПоставщика(ЗаписьXML, ТекущаяПозиция.ДанныеПоставщика, ПараметрыФискализации.РевизияИнтерфейса);
|
||
Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда
|
||
ЗаписатьОтраслевойРеквизит(ЗаписьXML, ТекущаяПозиция.ОтраслевойРеквизит);
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
СуммаЧека = СуммаЧека + ТекущаяПозиция.Сумма;
|
||
|
||
ИначеЕсли ТекущаяПозиция.Свойство("ТекстоваяСтрока") Тогда // Текстовая строка
|
||
Если ТекущаяПозиция.Свойство("ПереносСтроки") И ТекущаяПозиция.ПереносСтроки Тогда
|
||
ТекстовыеСтроки = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПостроитьПолеПереносом(ТекущаяПозиция.Текст, ПараметрыФискализации.ШиринаСтроки);
|
||
Иначе
|
||
ТекстовыеСтроки = ТекущаяПозиция.Текст;
|
||
КонецЕсли;
|
||
Выравнивание = ?(ТекущаяПозиция.Свойство("Выравнивание"), ТекущаяПозиция.Выравнивание, "Лево");
|
||
Для НомерСтроки = 1 По СтрЧислоСтрок(ТекстовыеСтроки) Цикл
|
||
ВыделеннаяСтрока = СтрПолучитьСтроку(ТекстовыеСтроки, НомерСтроки);
|
||
ВыделеннаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыровнятьПоле(ВыделеннаяСтрока, ПараметрыФискализации.ШиринаСтроки, Выравнивание);
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
|
||
ЗаписьXML.ЗаписатьАтрибут("Text", XMLСтрока(ВыделеннаяСтрока));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЦикла;
|
||
|
||
ИначеЕсли ТекущаяПозиция.Свойство("ШтрихКод") Тогда // Штрихкод
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Barcode");
|
||
ЗаписьXML.ЗаписатьАтрибут("Type" , XMLСтрока(ТекущаяПозиция.ТипШтрихкода));
|
||
// Значение штрихкода. Штрихкод кодируется текстом в кодировке Base64.
|
||
Если ПараметрыФискализации.РевизияИнтерфейса >= 3003 Тогда
|
||
ШтрихКодBase64 = МенеджерОборудованияКлиентСервер.ШтрихкодВBase64(ТекущаяПозиция.ШтрихКод);
|
||
Если ТекущаяПозиция.Свойство("ШтрихКодBase64")
|
||
И НЕ ПустаяСтрока(ТекущаяПозиция.ШтрихКодBase64) Тогда
|
||
ШтрихКодBase64 = ТекущаяПозиция.ШтрихКодBase64;
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьАтрибут("ValueBase64", XMLСтрока(ШтрихКодBase64));
|
||
Иначе
|
||
ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(ТекущаяПозиция.ШтрихКод));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
|
||
// Таблица оплат
|
||
Если ТаблицаОплат <> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Payments");
|
||
ЗаписьXML.ЗаписатьАтрибут("Cash", XMLСтрока(СуммаНаличные));
|
||
ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаЭлектронно));
|
||
ЗаписьXML.ЗаписатьАтрибут("PrePayment", XMLСтрока(СуммаПредоплата));
|
||
ЗаписьXML.ЗаписатьАтрибут("PostPayment", XMLСтрока(СуммаПостоплата));
|
||
ЗаписьXML.ЗаписатьАтрибут("Barter", XMLСтрока(СуммаПредоставление));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыФискализации.РевизияИнтерфейса >= 4004
|
||
И ОбщиеПараметры.СведенияОБезналичнойОплате <> Неопределено
|
||
И ОбщиеПараметры.СведенияОБезналичнойОплате.Количество() Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("ElectronicPaymentInfo");
|
||
Для Каждого СведенияОБезналичнойОплате Из ОбщиеПараметры.СведенияОБезналичнойОплате Цикл
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("ElectronicPayment");
|
||
ЗаписьXML.ЗаписатьАтрибут("Amount", XMLСтрока(СведенияОБезналичнойОплате.Сумма));
|
||
ЗаписьXML.ЗаписатьАтрибут("PaymentMethod", XMLСтрока(СведенияОБезналичнойОплате.ПризнакСпособаОплаты));
|
||
ЗаписьXML.ЗаписатьАтрибут("Identifiers", XMLСтрока(СведенияОБезналичнойОплате.Идентификаторы));
|
||
ЗаписьXML.ЗаписатьАтрибут("AdditionalInformation", XMLСтрока(СведенияОБезналичнойОплате.ДополнительныеCведения));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЦикла;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ПараметрыФискализации.РевизияИнтерфейса > 2001 Тогда // Версия стандарта 2.2 и выше
|
||
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters");
|
||
ЗаписьXML.ЗаписатьАтрибут("PaymentType" , XMLСтрока(ТипРасчета));
|
||
ЗаписьXML.ЗаписатьАтрибут("TaxVariant" , XMLСтрока(СистемаНалогообложения));
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierName" , XMLСтрока(ОбщиеПараметры.Кассир));
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierVATIN", ?(ОбщиеПараметры.Свойство("КассирИНН"), XMLСтрока(ОбщиеПараметры.КассирИНН), ""));
|
||
Если Не ПустаяСтрока(ОбщиеПараметры.ОтправительEmail) И Электронно Тогда // Отправитель Email указывается только для Электронно.
|
||
ЗаписьXML.ЗаписатьАтрибут("SenderEmail", XMLСтрока(ОбщиеПараметры.ОтправительEmail));
|
||
КонецЕсли;
|
||
// Email отправляет средствами 1C
|
||
Если ОбщиеПараметры.Свойство("Отправляет1СEmail") И НЕ ОбщиеПараметры.Отправляет1СEmail Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CustomerEmail", XMLСтрока(?(ОбщиеПараметры.Свойство("ПокупательEmail"), ОбщиеПараметры.ПокупательEmail, "")));
|
||
КонецЕсли;
|
||
// SMS отправляет средствами 1C
|
||
Если ОбщиеПараметры.Свойство("Отправляет1СSMS") И НЕ ОбщиеПараметры.Отправляет1СSMS Тогда
|
||
ПокупательНомер = ?(ОбщиеПараметры.Свойство("ПокупательНомер"), ОбщиеПараметры.ПокупательНомер, "");
|
||
Если Не ПустаяСтрока(ПокупательНомер) И Лев(ПокупательНомер, 1) <> "+" Тогда
|
||
ПокупательНомер = "+" + ПокупательНомер;
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьАтрибут("CustomerPhone", XMLСтрока(ПокупательНомер));
|
||
КонецЕсли;
|
||
|
||
Если ОбщиеПараметры.Свойство("ПризнакАгента") И НЕ ПустаяСтрока(ОбщиеПараметры.ПризнакАгента) Тогда // Атрибут с ФФД 1.05
|
||
ПризнакАгента = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента(ОбщиеПараметры.ПризнакАгента);
|
||
ЗаписьXML.ЗаписатьАтрибут("AgentSign", XMLСтрока(ПризнакАгента));
|
||
КонецЕсли;
|
||
|
||
Если ОбщиеПараметры.Свойство("АдресРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.АдресРасчетов) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("AddressSettle", XMLСтрока(ОбщиеПараметры.АдресРасчетов));
|
||
КонецЕсли;
|
||
Если ОбщиеПараметры.Свойство("МестоРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.МестоРасчетов) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("PlaceSettle", XMLСтрока(ОбщиеПараметры.МестоРасчетов));
|
||
КонецЕсли;
|
||
|
||
Получатель = ОбщиеПараметры.Получатель;
|
||
Если ПустаяСтрока(Получатель) Тогда
|
||
Получатель = ОбщиеПараметры.СведенияОПокупателе.Покупатель;
|
||
КонецЕсли;
|
||
ПолучательИНН = ОбщиеПараметры.ПолучательИНН;
|
||
Если ПустаяСтрока(ПолучательИНН) Тогда
|
||
ПолучательИНН = ОбщиеПараметры.СведенияОПокупателе.ПокупательИНН;
|
||
КонецЕсли;
|
||
|
||
Если Не ПустаяСтрока(Получатель) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CustomerInfo", XMLСтрока(Получатель));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ПолучательИНН) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CustomerINN", XMLСтрока(ПолучательИНН));
|
||
КонецЕсли;
|
||
|
||
Если ОбщиеПараметры.Свойство("ДополнительныйРеквизит") И НЕ ПустаяСтрока(ОбщиеПараметры.ДополнительныйРеквизит) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", XMLСтрока(ОбщиеПараметры.ДополнительныйРеквизит));
|
||
КонецЕсли;
|
||
|
||
Если ОбщиеПараметры.Свойство("ДополнительныйРеквизитПользователя") Тогда
|
||
ЗаписатьДополнительныйРеквизитПользователя(ЗаписьXML, ОбщиеПараметры.ДополнительныйРеквизитПользователя);
|
||
КонецЕсли;
|
||
|
||
ЗаписатьДанныеАгента(ЗаписьXML, ОбщиеПараметры.ДанныеАгента);
|
||
ЗаписатьДанныеПоставщика(ЗаписьXML, ОбщиеПараметры.ДанныеПоставщика);
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
|
||
// Табличная часть
|
||
Если ОбщиеПараметры.ПозицииЧека <> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Positions");
|
||
Для ИндексМассива = 0 По ОбщиеПараметры.ПозицииЧека.Количество() - 1 Цикл
|
||
ТекущаяПозиция = ОбщиеПараметры.ПозицииЧека[ИндексМассива]; //см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека
|
||
|
||
Если ТекущаяПозиция.Свойство("ФискальнаяСтрока") Тогда
|
||
Если ТекущаяПозиция.ЦенаСоСкидками = 0 И ТекущаяПозиция.Сумма > 0 И ТекущаяПозиция.Количество > 0 Тогда
|
||
ЦенаСоСкидками = Окр(ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, 2);
|
||
Иначе
|
||
ЦенаСоСкидками = ТекущаяПозиция.ЦенаСоСкидками;
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
|
||
ЗаписьXML.ЗаписатьАтрибут("Name" , XMLСтрока(ТекущаяПозиция.Наименование));
|
||
ЗаписьXML.ЗаписатьАтрибут("Quantity" , XMLСтрока(ТекущаяПозиция.Количество));
|
||
ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", XMLСтрока(ЦенаСоСкидками));
|
||
ЗаписьXML.ЗаписатьАтрибут("SumWithDiscount" , XMLСтрока(ТекущаяПозиция.Сумма));
|
||
ЗаписьXML.ЗаписатьАтрибут("DiscountSum" , XMLСтрока(ТекущаяПозиция.СуммаСкидок));
|
||
ЗаписьXML.ЗаписатьАтрибут("Department" , XMLСтрока(ТекущаяПозиция.НомерСекции));
|
||
|
||
ЗначениеСтавкаНДС = ПредставлениеСтавкиНДС(ТекущаяПозиция.СтавкаНДС, ПараметрыФискализации.РевизияИнтерфейса);
|
||
ЗаписьXML.ЗаписатьАтрибут("Tax", XMLСтрока(ЗначениеСтавкаНДС));
|
||
Если ТекущаяПозиция.Свойство("СуммаНДС") И НЕ ПустаяСтрока(ТекущаяПозиция.СуммаНДС) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("TaxSum", XMLСтрока(ТекущаяПозиция.СуммаНДС));
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("ПризнакСпособаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакСпособаРасчета) Тогда
|
||
ПризнакСпособаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаСпособаРасчета(ТекущаяПозиция.ПризнакСпособаРасчета);
|
||
ЗаписьXML.ЗаписатьАтрибут("SignMethodCalculation", XMLСтрока(ПризнакСпособаРасчета));
|
||
КонецЕсли;
|
||
Если ТекущаяПозиция.Свойство("ПризнакПредметаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакПредметаРасчета) Тогда
|
||
ПризнакПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаПредметаРасчета(ТекущаяПозиция.ПризнакПредметаРасчета);
|
||
Если ПризнакПредметаРасчета <> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("SignCalculationObject", XMLСтрока(ПризнакПредметаРасчета));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("ПризнакАгентаПоПредметуРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакАгентаПоПредметуРасчета) Тогда
|
||
ПризнакАгентаПоПредметуРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента(ТекущаяПозиция.ПризнакАгентаПоПредметуРасчета);
|
||
ЗаписьXML.ЗаписатьАтрибут("SignSubjectCalculationAgent", XMLСтрока(ПризнакАгентаПоПредметуРасчета));
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("ЕдиницаИзмерения") И ТекущаяПозиция.ЕдиницаИзмерения <> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("MeasurementUnit", XMLСтрока(Лев(ТекущаяПозиция.ЕдиницаИзмерения, 16)));
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("КодСтраныПроисхожденияТовара") И НЕ ПустаяСтрока(ТекущаяПозиция.КодСтраныПроисхожденияТовара) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CountryOfOrigin", XMLСтрока(ТекущаяПозиция.КодСтраныПроисхожденияТовара));
|
||
КонецЕсли;
|
||
Если ТекущаяПозиция.Свойство("НомерТаможеннойДекларации") И НЕ ПустаяСтрока(ТекущаяПозиция.НомерТаможеннойДекларации) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("CustomsDeclaration", XMLСтрока(ТекущаяПозиция.НомерТаможеннойДекларации));
|
||
КонецЕсли;
|
||
Если ТекущаяПозиция.Свойство("СуммаАкциза") И ТекущаяПозиция.СуммаАкциза <> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("ExciseAmount", XMLСтрока(XMLСтрока(ТекущаяПозиция.СуммаАкциза)));
|
||
КонецЕсли;
|
||
|
||
Если ТекущаяПозиция.Свойство("ДополнительныйРеквизит") И НЕ ПустаяСтрока(ТекущаяПозиция.ДополнительныйРеквизит) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", XMLСтрока(XMLСтрока(ТекущаяПозиция.ДополнительныйРеквизит)));
|
||
КонецЕсли;
|
||
|
||
ЗаписатьДанныеАгента(ЗаписьXML, ТекущаяПозиция.ДанныеАгента);
|
||
ЗаписатьДанныеПоставщика(ЗаписьXML, ТекущаяПозиция.ДанныеПоставщика);
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
МодульМенеджерОборудованияМаркировка.ЗаписатьДанныеКодаТоварнойНоменклатуры(ЗаписьXML, ТекущаяПозиция, ПараметрыФискализации);
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
СуммаЧека = СуммаЧека + ТекущаяПозиция.Сумма;
|
||
|
||
ИначеЕсли ТекущаяПозиция.Свойство("ТекстоваяСтрока") Тогда
|
||
|
||
Если ТекущаяПозиция.Свойство("ПереносСтроки") И ТекущаяПозиция.ПереносСтроки Тогда
|
||
ТекстовыеСтроки = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПостроитьПолеПереносом(ТекущаяПозиция.Текст, ПараметрыФискализации.ШиринаСтроки);
|
||
Иначе
|
||
ТекстовыеСтроки = ТекущаяПозиция.Текст;
|
||
КонецЕсли;
|
||
Выравнивание = ?(ТекущаяПозиция.Свойство("Выравнивание"), ТекущаяПозиция.Выравнивание, "Лево");
|
||
Для НомерСтроки = 1 По СтрЧислоСтрок(ТекстовыеСтроки) Цикл
|
||
ВыделеннаяСтрока = СтрПолучитьСтроку(ТекстовыеСтроки, НомерСтроки);
|
||
ВыделеннаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыровнятьПоле(ВыделеннаяСтрока, ПараметрыФискализации.ШиринаСтроки, Выравнивание);
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
|
||
ЗаписьXML.ЗаписатьАтрибут("Text", XMLСтрока(ВыделеннаяСтрока));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЦикла;
|
||
|
||
ИначеЕсли ТекущаяПозиция.Свойство("ШтрихКод") Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Barcode");
|
||
ЗаписьXML.ЗаписатьАтрибут("BarcodeType", XMLСтрока(ТекущаяПозиция.ТипШтрихкода));
|
||
ЗаписьXML.ЗаписатьАтрибут("Barcode", XMLСтрока(ТекущаяПозиция.ШтрихКод));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
|
||
// Таблица оплат
|
||
Если ТаблицаОплат <> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Payments");
|
||
ЗаписьXML.ЗаписатьАтрибут("Cash" , XMLСтрока(СуммаНаличные));
|
||
ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаЭлектронно));
|
||
ЗаписьXML.ЗаписатьАтрибут("Credit" , XMLСтрока(СуммаПостоплата));
|
||
ЗаписьXML.ЗаписатьАтрибут("AdvancePayment" , XMLСтрока(СуммаПредоплата));
|
||
ЗаписьXML.ЗаписатьАтрибут("CashProvision" , XMLСтрока(СуммаПредоставление));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
ДанныеЧекаXML = ЗаписьXML.Закрыть();
|
||
|
||
Если ВключатьПерсональныеДанные Тогда
|
||
ПараметрыФискализации.ДанныеЧекаXMLПерсональныеДанные = ДанныеЧекаXML;
|
||
Иначе
|
||
ПараметрыФискализации.ДанныеЧекаXML = ДанныеЧекаXML;
|
||
ПараметрыФискализации.ТипРасчета = ОбщиеПараметры.ТипРасчета;
|
||
ПараметрыФискализации.СуммаЧека = СуммаЧека;
|
||
ПараметрыФискализации.ОплатаНаличные = ?(СуммаНаличные + ОплатаНеНаличными > СуммаЧека, СуммаЧека - ОплатаНеНаличными, СуммаНаличные);
|
||
ПараметрыФискализации.ОплатаЭлектронно = СуммаЭлектронно;
|
||
ПараметрыФискализации.ОплатаПостоплата = СуммаПостоплата;
|
||
ПараметрыФискализации.ОплатаПредоплата = СуммаПредоплата;
|
||
ПараметрыФискализации.ОплатаВстречноеПредоставление = СуммаПредоставление;
|
||
КонецЕсли;
|
||
// -- Локализация
|
||
|
||
КонецПроцедуры
|
||
|
||
// Получить XMLПакет для операции.
|
||
//
|
||
// Параметры:
|
||
// ОбщиеПараметры - Структура, Булево - Общие параметры
|
||
// РевизияИнтерфейса - Число - Ревизия интерфейса
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Получить XMLПакет для операции
|
||
Функция ПолучитьXMLПакетДляОперации(ОбщиеПараметры, РевизияИнтерфейса = 0) Экспорт
|
||
|
||
ЗаписьXML = Новый ЗаписьXML();
|
||
ЗаписьXML.УстановитьСтроку("UTF-8");
|
||
ЗаписьXML.ЗаписатьОбъявлениеXML();
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("InputParameters");
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters");
|
||
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierName", ?(ОбщиеПараметры.Свойство("Кассир"), XMLСтрока(ОбщиеПараметры.Кассир), НСтр("ru='Администратор'")));
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierINN" , ?(ОбщиеПараметры.Свойство("КассирИНН"), XMLСтрока(ОбщиеПараметры.КассирИНН), ""));
|
||
Если ОбщиеПараметры.Свойство("АдресРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.АдресРасчетов) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("SaleAddress", XMLСтрока(ОбщиеПараметры.АдресРасчетов));
|
||
КонецЕсли;
|
||
Если ОбщиеПараметры.Свойство("МестоРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.МестоРасчетов) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("SaleLocation", XMLСтрока(ОбщиеПараметры.МестоРасчетов));
|
||
КонецЕсли;
|
||
Если РевизияИнтерфейса >= 4000 Тогда // Версия стандарта 4.0 (ОФД 1.2)
|
||
Если ОбщиеПараметры.Свойство("Печать") И НЕ ПустаяСтрока(ОбщиеПараметры.Печать) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("PrintRequired", XMLСтрока(ОбщиеПараметры.Печать));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierName" , ?(ОбщиеПараметры.Свойство("Кассир"), XMLСтрока(ОбщиеПараметры.Кассир), НСтр("ru='Администратор'")));
|
||
ЗаписьXML.ЗаписатьАтрибут("CashierVATIN", ?(ОбщиеПараметры.Свойство("КассирИНН"), XMLСтрока(ОбщиеПараметры.КассирИНН), ""));
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
|
||
Возврат ЗаписьXML.Закрыть();
|
||
|
||
КонецФункции
|
||
|
||
// Получить XMLПакет для текста.
|
||
//
|
||
// Параметры:
|
||
// СтрокаТекста - Строка, Структура - Строка текста
|
||
// РевизияИнтерфейса - Число - Ревизия интерфейса
|
||
//
|
||
// Возвращаемое значение:
|
||
// Массив из ЗаписьXML - Получить XMLПакет для текста.
|
||
Функция ПолучитьXMLПакетДляТекста(СтрокаТекста, РевизияИнтерфейса = 0) Экспорт
|
||
|
||
Результат = Новый Массив();
|
||
|
||
// Пакетная печать чека. Подготовка пакета.
|
||
ЗаписьXML = Новый ЗаписьXML();
|
||
ЗаписьXML.УстановитьСтроку("UTF-8");
|
||
ЗаписьXML.ЗаписатьОбъявлениеXML();
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Document");
|
||
|
||
Если НЕ ПустаяСтрока(СтрокаТекста) Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Positions");
|
||
|
||
Для НомерСтроки = 1 По СтрЧислоСтрок(СтрокаТекста) Цикл
|
||
|
||
ВыделеннаяСтрока = СтрПолучитьСтроку(СтрокаТекста, НомерСтроки);
|
||
|
||
Если ((Найти(ВыделеннаяСтрока, "[отрезка]") > 0)
|
||
Или (Найти(ВыделеннаяСтрока, "[cut]") > 0))
|
||
И НомерСтроки < СтрЧислоСтрок(СтрокаТекста) Тогда
|
||
|
||
// Завершаем запись текущего пакета.
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
Текст = ЗаписьXML.Закрыть();
|
||
Результат.Добавить(Текст);
|
||
|
||
// Новый пакет.
|
||
ЗаписьXML = Новый ЗаписьXML();
|
||
ЗаписьXML.УстановитьСтроку("UTF-8");
|
||
ЗаписьXML.ЗаписатьОбъявлениеXML();
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Document");
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Positions");
|
||
|
||
ИначеЕсли (Найти(ВыделеннаяСтрока, "|ШтрихКод|") > 0) Тогда
|
||
ВыделеннаяСтрока = Сред(ВыделеннаяСтрока, СтрДлина("|ШтрихКод|") + 1);
|
||
ВремТипШтрихкода = Сред(ВыделеннаяСтрока, 1, Найти(ВыделеннаяСтрока, "|") - 1);
|
||
ВремШтрихКод = СокрЛП(Сред(ВыделеннаяСтрока, Найти(ВыделеннаяСтрока, "|") + 1));
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Barcode");
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
ЗаписьXML.ЗаписатьАтрибут("Type", XMLСтрока(ВремТипШтрихкода));
|
||
// Значение штрихкода. Штрихкод кодируется текстом в кодировке Base64.
|
||
Если РевизияИнтерфейса >= 3003 Тогда
|
||
ШтрихКодBase64 = МенеджерОборудованияКлиентСервер.ШтрихкодВBase64(ВремШтрихКод);
|
||
ЗаписьXML.ЗаписатьАтрибут("ValueBase64", XMLСтрока(ШтрихКодBase64));
|
||
Иначе
|
||
ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(ВремШтрихКод));
|
||
КонецЕсли;
|
||
Иначе
|
||
ЗаписьXML.ЗаписатьАтрибут("BarcodeType", XMLСтрока(ВремТипШтрихкода));
|
||
ЗаписьXML.ЗаписатьАтрибут("Barcode", XMLСтрока(ВремШтрихКод));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
Иначе
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
|
||
ЗаписьXML.ЗаписатьАтрибут("Text", XMLСтрока(ВыделеннаяСтрока));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
Текст = ЗаписьXML.Закрыть();
|
||
|
||
Результат.Добавить(Текст);
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Получить параметры состояния из XML пакета.
|
||
//
|
||
// Параметры:
|
||
// Данные - Произвольный.
|
||
// НомерСмены - Неопределено - Номер смены
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Получить параметры состояния из XMLПакета:
|
||
// * ДатаСменыККТ - Число -
|
||
// * НомерСменыККТ - Число -
|
||
// * НомерЧекаККТ - Число -
|
||
// * НомерЧекаЗаСмену - Число -
|
||
// * СтатусСмены - Неопределено -
|
||
// * СчетчикиОперацийПриход - Структура -:
|
||
// ** КоличествоЧеков - Число.
|
||
// ** СуммаЧеков - Число.
|
||
// ** КоличествоЧековКоррекции - Число.
|
||
// ** СуммаЧековКоррекции - Число.
|
||
// * СчетчикиОперацийВозвратПрихода - Структура -:
|
||
// ** КоличествоЧеков - Число.
|
||
// ** СуммаЧеков - Число.
|
||
// ** КоличествоЧековКоррекции - Число.
|
||
// ** СуммаЧековКоррекции - Число.
|
||
// * СчетчикиОперацийРасход - Структура -:
|
||
// ** КоличествоЧеков - Число.
|
||
// ** СуммаЧеков - Число.
|
||
// ** КоличествоЧековКоррекции - Число.
|
||
// ** СуммаЧековКоррекции - Число.
|
||
// * СчетчикиОперацийВозвратРасхода - Структура -:
|
||
// ** КоличествоЧеков - Число.
|
||
// ** СуммаЧеков - Число.
|
||
// ** КоличествоЧековКоррекции - Число.
|
||
// ** СуммаЧековКоррекции - Число.
|
||
// * КоличествоЧеков - Число.
|
||
// * ОстатокНаличных - Число.
|
||
// * ПревышеноВремяОжиданияОтветаОФД - Булево -
|
||
// * КоличествоНепереданныхФД - Неопределено -
|
||
// * НомерПервогоНепереданногоФД - Неопределено -
|
||
// * ДатаПервогоНепереданногоФД - Неопределено -
|
||
// * НеобходимаСрочнаяЗаменаФН - Булево -
|
||
// * ПамятьФНПереполнена - Булево -
|
||
// * РесурсФНИсчерпан - Булево -
|
||
Функция ПолучитьПараметрыСостоянияИзXMLПакета(Данные, НомерСмены = Неопределено) Экспорт
|
||
|
||
Параметры = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыНормализуемыхФискальныхДанных();
|
||
Параметры.НомерСменыККТ = НомерСмены;
|
||
|
||
Если Не ПустаяСтрока(Данные) Тогда
|
||
ЧтениеXML = Новый ЧтениеXML;
|
||
ЧтениеXML.УстановитьСтроку(Данные);
|
||
ЧтениеXML.ПерейтиКСодержимому();
|
||
Если ЧтениеXML.Имя = "StatusParameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Если ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
КоличествоНепереданныхФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentsCounter");
|
||
Параметры.КоличествоНепереданныхФД = ?(ПустаяСтрока(КоличествоНепереданныхФД), 0, Число(КоличествоНепереданныхФД));
|
||
Параметры.НомерПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstNumber");
|
||
ДатаПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstDateTime");
|
||
Если НЕ ПустаяСтрока(ДатаПервогоНепереданногоФД) Тогда
|
||
Параметры.ДатаПервогоНепереданногоФД = XMLЗначение(Тип("Дата"), ДатаПервогоНепереданногоФД);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Параметры;
|
||
|
||
КонецФункции
|
||
|
||
// Получить таблицу параметров смены из ККТ.
|
||
//
|
||
// Параметры:
|
||
// ДанныеXML - Строка - строка XML
|
||
// РевизияИнтерфейса - Число - ревизия интерфейса
|
||
// НомерСменыККТ - Число - номер смены
|
||
// НомерЧекаККТ - Число - номер чека
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура.
|
||
//
|
||
Функция ПолучитьПараметрыСменыИзXMLПакета(ДанныеXML, РевизияИнтерфейса = 0, НомерСменыККТ = 0, НомерЧекаККТ = 0) Экспорт
|
||
|
||
Параметры = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыНормализуемыхФискальныхДанных();
|
||
Параметры.НомерСменыККТ = НомерСменыККТ;
|
||
Параметры.НомерЧекаККТ = НомерЧекаККТ;
|
||
|
||
Если Не ПустаяСтрока(ДанныеXML) Тогда
|
||
|
||
ЧтениеXML = Новый ЧтениеXML;
|
||
ЧтениеXML.УстановитьСтроку(ДанныеXML);
|
||
ЧтениеXML.ПерейтиКСодержимому();
|
||
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
Если ЧтениеXML.Имя = "OutputParameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Если ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Параметры.НомерСменыККТ = ЧтениеXML.ЗначениеАтрибута("ShiftNumber");
|
||
Параметры.НомерЧекаККТ = ЧтениеXML.ЗначениеАтрибута("CheckNumber");
|
||
ДатаСменыККТ = ЧтениеXML.ЗначениеАтрибута("DateTime");
|
||
Если НЕ ПустаяСтрока(ДатаСменыККТ) Тогда
|
||
Параметры.ДатаСменыККТ = XMLЗначение(Тип("Дата"), ДатаСменыККТ);
|
||
КонецЕсли;
|
||
Параметры.НомерЧекаЗаСмену = ЧтениеXML.ЗначениеАтрибута("ShiftClosingCheckNumber");
|
||
Параметры.СтатусСмены = Число(ЧтениеXML.ЗначениеАтрибута("ShiftState"));
|
||
Параметры.ОстатокНаличных = ЧтениеXML.ЗначениеАтрибута("CashBalance");
|
||
|
||
КоличествоНепереданныхФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentsCounter");
|
||
Параметры.КоличествоНепереданныхФД = ?(ПустаяСтрока(КоличествоНепереданныхФД), 0, Число(КоличествоНепереданныхФД));
|
||
|
||
Параметры.НомерПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstNumber");
|
||
|
||
КоличествоЧеков = ЧтениеXML.ЗначениеАтрибута("DocumentsCounter");
|
||
Параметры.КоличествоЧеков = ?(ПустаяСтрока(КоличествоЧеков), 0, Число(КоличествоЧеков));
|
||
|
||
ДатаПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstDateTime");
|
||
Если НЕ ПустаяСтрока(ДатаПервогоНепереданногоФД) Тогда
|
||
Параметры.ДатаПервогоНепереданногоФД = XMLЗначение(Тип("Дата"), ДатаПервогоНепереданногоФД);
|
||
КонецЕсли;
|
||
Параметры.НеобходимаСрочнаяЗаменаФН = ВРег(ЧтениеXML.ЗначениеАтрибута("FNError")) = "TRUE";
|
||
Параметры.ПамятьФНПереполнена = ВРег(ЧтениеXML.ЗначениеАтрибута("FNOverflow")) = "TRUE";
|
||
Параметры.РесурсФНИсчерпан = ВРег(ЧтениеXML.ЗначениеАтрибута("FNFail")) = "TRUE";
|
||
СрокДействияФН = ЧтениеXML.ЗначениеАтрибута("FNValidityDate");
|
||
Если НЕ ПустаяСтрока(СрокДействияФН) Тогда
|
||
Параметры.СрокДействияФН = XMLЗначение(Тип("Дата"), СрокДействияФН);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
Если ЧтениеXML.Имя = "OutputParameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Если ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Параметры.ПревышеноВремяОжиданияОтветаОФД = ВРег(ЧтениеXML.ЗначениеАтрибута("OFDtimeout")) = "TRUE";
|
||
Параметры.НеобходимаСрочнаяЗаменаФН = ВРег(ЧтениеXML.ЗначениеАтрибута("UrgentReplacementFN")) = "TRUE";
|
||
Параметры.ПамятьФНПереполнена = ВРег(ЧтениеXML.ЗначениеАтрибута("MemoryOverflowFN")) = "TRUE";
|
||
Параметры.РесурсФНИсчерпан = ВРег(ЧтениеXML.ЗначениеАтрибута("ResourcesExhaustionFN")) = "TRUE";
|
||
КоличествоНепереданныхФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentsCounter");
|
||
Параметры.КоличествоНепереданныхФД = ?(ПустаяСтрока(КоличествоНепереданныхФД), 0, Число(КоличествоНепереданныхФД));
|
||
Параметры.НомерПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstNumber");
|
||
ДатаПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstDateTime");
|
||
Если НЕ ПустаяСтрока(ДатаПервогоНепереданногоФД) Тогда
|
||
Параметры.ДатаПервогоНепереданногоФД = XMLЗначение(Тип("Дата"), ДатаПервогоНепереданногоФД);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Параметры;
|
||
|
||
КонецФункции
|
||
|
||
// Заполнить результаты фискализация чека из XML пакета.
|
||
//
|
||
// Параметры:
|
||
// ПараметрыФискализации - Структура
|
||
Процедура ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ПараметрыФискализации) Экспорт
|
||
|
||
Если Не ПустаяСтрока(ПараметрыФискализации.РезультатОперацииXML) Тогда
|
||
ЧтениеXML = Новый ЧтениеXML;
|
||
ЧтениеXML.УстановитьСтроку(ПараметрыФискализации.РезультатОперацииXML);
|
||
ЧтениеXML.ПерейтиКСодержимому();
|
||
Если ЧтениеXML.Имя = "DocumentOutputParameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Если ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
ПараметрыФискализации.НомерСменыККТ = ЧтениеXML.ЗначениеАтрибута("ShiftNumber");
|
||
ПараметрыФискализации.НомерЧекаККТ = ЧтениеXML.ЗначениеАтрибута("CheckNumber");
|
||
ПараметрыФискализации.НомерЧекаЗаСмену = ЧтениеXML.ЗначениеАтрибута("ShiftClosingCheckNumber");
|
||
ПараметрыФискализации.ФискальныйПризнак = ЧтениеXML.ЗначениеАтрибута("FiscalSign");
|
||
ПараметрыФискализации.АдресСайтаПроверки = ЧтениеXML.ЗначениеАтрибута("AddressSiteInspections");
|
||
ПараметрыФискализации.ОшибкаПечати = ВРег(ЧтениеXML.ЗначениеАтрибута("PrintError")) = "TRUE" ;
|
||
ДатаВремяЧека = ЧтениеXML.ЗначениеАтрибута("DateTime");
|
||
Если НЕ ПустаяСтрока(ДатаВремяЧека) Тогда
|
||
ПараметрыФискализации.ДатаВремяЧека = XMLЗначение(Тип("Дата"), ДатаВремяЧека);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Процедура заполняет XML пакет для печати текстового документа
|
||
//
|
||
// Параметры:
|
||
// ТестовыеЧеки - Массив из Строка -
|
||
// НефискальныеДокументы - Массив из см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека
|
||
// ПараметрыПодключения - См. МенеджерОборудованияКлиентСервер.ПараметрыПодключения
|
||
// ШиринаСтроки - Число - ширина строки печатающего устройства
|
||
//
|
||
Процедура ЗаполнитьXMLПакетыДляТекстовогоДокумента(ТестовыеЧеки, НефискальныеДокументы, ПараметрыПодключения, ШиринаСтроки = 32) Экспорт
|
||
|
||
РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса;
|
||
ТипыОборудования = ПараметрыПодключения.ТипыОборудования;
|
||
|
||
Для Каждого ПозицииЧека Из НефискальныеДокументы Цикл
|
||
|
||
// Пакетная печать чека. Подготовка пакета.
|
||
ЗаписьXML = Новый ЗаписьXML();
|
||
ЗаписьXML.УстановитьСтроку("UTF-8");
|
||
ЗаписьXML.ЗаписатьОбъявлениеXML();
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Document");
|
||
|
||
// Табличная часть
|
||
Если ПозицииЧека <> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Positions");
|
||
Для ИндексМассива = 0 По ПозицииЧека.Количество() - 1 Цикл
|
||
ТекущаяПозиция = ПозицииЧека[ИндексМассива]; // см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека
|
||
Если ТекущаяПозиция.Свойство("ФискальнаяСтрока") Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
|
||
ЗаписьXML.ЗаписатьАтрибут("Name" , XMLСтрока(ТекущаяПозиция.Наименование));
|
||
ЗаписьXML.ЗаписатьАтрибут("Quantity" , XMLСтрока(ТекущаяПозиция.Количество));
|
||
ЗаписьXML.ЗаписатьАтрибут("Price" , XMLСтрока(ТекущаяПозиция.Цена));
|
||
ЗаписьXML.ЗаписатьАтрибут("Amount" , XMLСтрока(ТекущаяПозиция.Сумма));
|
||
ЗаписьXML.ЗаписатьАтрибут("Department", XMLСтрока(ТекущаяПозиция.НомерСекции));
|
||
Если НЕ ПустаяСтрока(ТекущаяПозиция.СтавкаНДС) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Tax" , XMLСтрока(ТекущаяПозиция.СтавкаНДС));
|
||
Иначе
|
||
ЗаписьXML.ЗаписатьАтрибут("Tax" , "none");
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
ИначеЕсли ТекущаяПозиция.Свойство("ТекстоваяСтрока") Тогда
|
||
Если ТекущаяПозиция.Свойство("ПереносСтроки") И ТекущаяПозиция.ПереносСтроки Тогда
|
||
ТекстовыеСтроки = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПостроитьПолеПереносом(ТекущаяПозиция.Текст, ШиринаСтроки);
|
||
Иначе
|
||
ТекстовыеСтроки = ТекущаяПозиция.Текст;
|
||
КонецЕсли;
|
||
Выравнивание = ?(ТекущаяПозиция.Свойство("Выравнивание"), ТекущаяПозиция.Выравнивание, "Лево");
|
||
Для НомерСтроки = 1 По СтрЧислоСтрок(ТекстовыеСтроки) Цикл
|
||
ВыделеннаяСтрока = СтрПолучитьСтроку(ТекстовыеСтроки, НомерСтроки);
|
||
ВыделеннаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыровнятьПоле(ВыделеннаяСтрока, ШиринаСтроки, Выравнивание);
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
|
||
ЗаписьXML.ЗаписатьАтрибут("Text", XMLСтрока(ВыделеннаяСтрока));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЦикла;
|
||
ИначеЕсли ТекущаяПозиция.Свойство("ШтрихКод") Тогда // Штрихкод
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("Barcode");
|
||
Если РевизияИнтерфейса >= 3003 Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Type" , XMLСтрока(ТекущаяПозиция.ТипШтрихкода));
|
||
// Значение штрихкода. Штрихкод кодируется текстом в кодировке Base64.
|
||
ШтрихКодBase64 = МенеджерОборудованияКлиентСервер.ШтрихкодВBase64(ТекущаяПозиция.ШтрихКод);
|
||
Если ТекущаяПозиция.Свойство("ШтрихКодBase64")
|
||
И НЕ ПустаяСтрока(ТекущаяПозиция.ШтрихКодBase64) Тогда
|
||
ШтрихКодBase64 = ТекущаяПозиция.ШтрихКодBase64;
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьАтрибут("ValueBase64", XMLСтрока(ШтрихКодBase64));
|
||
ИначеЕсли РевизияИнтерфейса >= 3000 И ТипыОборудования.ККТ Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Type" , XMLСтрока(ТекущаяПозиция.ТипШтрихкода));
|
||
ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(ТекущаяПозиция.ШтрихКод));
|
||
Иначе
|
||
ЗаписьXML.ЗаписатьАтрибут("BarcodeType" , XMLСтрока(ТекущаяПозиция.ТипШтрихкода));
|
||
ЗаписьXML.ЗаписатьАтрибут("Barcode", XMLСтрока(ТекущаяПозиция.ШтрихКод));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
Текст = ЗаписьXML.Закрыть();
|
||
ТестовыеЧеки.Добавить(Текст);
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Получить структуру чека из XML.
|
||
//
|
||
// Параметры:
|
||
// ДанныеXML - Строка - Данные XML
|
||
// ДанныхМаркировки - Булево - Будут загружаться данные о маркировке
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Загрузить данные фискализации из XML:
|
||
// * ДанныеКоррекции - Структура -:
|
||
// ** НомерПредписания - Число -
|
||
// ** ДатаКоррекции - Дата -
|
||
// ** ОписаниеКоррекции - Строка -
|
||
// ** ТипКоррекции - Число -
|
||
// * НеприменениеККТ - Булево -
|
||
// * КорректируемыйДокумент - Произвольный -
|
||
// * ЕстьПерсональныеДанные - Булево -
|
||
// * ИндивидуальныйРежимПодготовкиДанныхКПередачеВОФД - Булево -
|
||
// * ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число -
|
||
// * СпособФорматноЛогическогоКонтроля - Неопределено -
|
||
// * СформироватьЧекКоррекции - Булево -
|
||
// * ДополнительныйРеквизитПользователя - Структура -:
|
||
// ** Значение - Произвольный -
|
||
// ** Наименование - Строка -
|
||
// * ДополнительныйРеквизит - Неопределено -
|
||
// * НефискальныеДокументы - Массив из ОпределяемыйТип.ОснованиеФискальнойОперацииБПО -
|
||
// * КассаККМ - Произвольный -
|
||
// * ШаблонЧека - Произвольный -
|
||
// * ТаблицаОплат - Массив из Структура-
|
||
// * ПозицииЧека - Массив из Структура -
|
||
// * КопийЧека - Число -
|
||
// * ТекстПодвала - Строка -
|
||
// * ТекстШапки - Строка -
|
||
// * ДатаВремя - Дата -
|
||
// * НомерСмены - Число -
|
||
// * НомерЧека - Строка -
|
||
// * НомерКассы - Строка -
|
||
// * НаименованиеМагазина - Строка -
|
||
// * АдресМагазина - Строка -
|
||
// * ОрганизацияКПП - Строка -
|
||
// * ОрганизацияИНН - Строка -
|
||
// * ОрганизацияНазвание - Строка -
|
||
// * СерийныйНомер - Строка -
|
||
// * ПолучательИНН - Строка -
|
||
// * Получатель - Строка -
|
||
// * ДанныеПоставщика - Структура -:
|
||
// ** ИНН - Строка -
|
||
// ** Наименование - Строка -
|
||
// ** Телефон - Строка -
|
||
// * ДанныеАгента - Структура -:
|
||
// ** ОператорПоПриемуПлатежей - Структура -:
|
||
// *** Телефон - Неопределено -
|
||
// ** ОператорПеревода - Структура -:
|
||
// *** Телефон - Строка -
|
||
// *** Наименование - Строка -
|
||
// *** Адрес - Строка -
|
||
// *** ИНН - Строка -
|
||
// ** ПлатежныйАгент - Структура -:
|
||
// *** Операция - Строка -
|
||
// *** Телефон - Строка -
|
||
// * ПризнакАгента - Неопределено -
|
||
// * ПокупательНомер - Строка -
|
||
// * ПокупательEmail - Строка -
|
||
// * ОтправительEmail - Строка -
|
||
// * МестоРасчетов - Строка -
|
||
// * АдресРасчетов - Строка -
|
||
// * СистемаНалогообложения - ПеречислениеСсылка.ТипыСистемНалогообложенияККТ -
|
||
// * Отправляет1СEmail - Булево -
|
||
// * Отправляет1СSMS - Булево -
|
||
// * ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами -
|
||
// * Электронно - Булево -
|
||
// * ТорговыйОбъект - Неопределено -
|
||
// * Организация - Неопределено -
|
||
// * ИдентификаторФискальнойЗаписи - Неопределено -
|
||
// * ДокументОснование - Неопределено -
|
||
// * КассирИНН - Неопределено -
|
||
// * Кассир - Строка -
|
||
//
|
||
Функция ЗагрузитьДанныеФискализацииИзXML(ДанныеXML, ДанныхМаркировки = Истина) Экспорт
|
||
|
||
ОбщиеПараметры = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииЧекаКоррекции();
|
||
|
||
ФискальнаяСтрока = Неопределено;
|
||
СуммаЧека = 0;
|
||
|
||
Если Не ПустаяСтрока(ДанныеXML) Тогда
|
||
ЧтениеXML = Новый ЧтениеXML;
|
||
ЧтениеXML.УстановитьСтроку(ДанныеXML);
|
||
ЧтениеXML.ПерейтиКСодержимому();
|
||
Если ЧтениеXML.Имя = "CheckPackage" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
|
||
Пока ЧтениеXML.Прочитать() Цикл
|
||
Если ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
ТипРасчета = ?(ЧтениеXML.ЗначениеАтрибута("PaymentType") <> Неопределено, ЧтениеXML.ЗначениеАтрибута("PaymentType"), ЧтениеXML.ЗначениеАтрибута("OperationType"));
|
||
ОбщиеПараметры.ТипРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.РасчетДенежнымиСредствамиПоКоду(Число(ТипРасчета));
|
||
|
||
СистемаНалогообложения = ?(ЧтениеXML.ЗначениеАтрибута("TaxVariant") <> Неопределено, ЧтениеXML.ЗначениеАтрибута("TaxVariant"), ЧтениеXML.ЗначениеАтрибута("TaxationSystem"));
|
||
ОбщиеПараметры.СистемаНалогообложения = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СистемаНалогообложенияККТПоКоду(Число(СистемаНалогообложения));
|
||
|
||
ОбщиеПараметры.Кассир = ЧтениеXML.ЗначениеАтрибута("CashierName");
|
||
ОбщиеПараметры.КассирИНН = ЗначениеXMLАтрибута(ЧтениеXML, "CashierVATIN", "CashierINN", Неопределено);
|
||
|
||
ОбщиеПараметры.ОтправительEmail = ЧтениеXML.ЗначениеАтрибута("SenderEmail");
|
||
ОбщиеПараметры.ПокупательEmail = ЧтениеXML.ЗначениеАтрибута("CustomerEmail");
|
||
ОбщиеПараметры.ПокупательНомер = ЧтениеXML.ЗначениеАтрибута("CustomerPhone");
|
||
ОбщиеПараметры.ПризнакАгента = ЧтениеXML.ЗначениеАтрибута("AgentSign");
|
||
ОбщиеПараметры.АдресРасчетов = ЗначениеXMLАтрибута(ЧтениеXML, "SaleAddress", "AddressSettle");
|
||
ОбщиеПараметры.МестоРасчетов = ЗначениеXMLАтрибута(ЧтениеXML, "SaleLocation", "PlaceSettle");
|
||
|
||
ОбщиеПараметры.ДополнительныйРеквизит = ЧтениеXML.ЗначениеАтрибута("AdditionalAttribute");
|
||
// ++ Локализация
|
||
Если ЧтениеXML.ЗначениеАтрибута("AgentSign") <> Неопределено Тогда
|
||
ПризнакАгента = Число(ЧтениеXML.ЗначениеАтрибута("AgentSign"));
|
||
ОбщиеПараметры.ПризнакАгента = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.ПризнакАгентаПоКоду(ПризнакАгента);
|
||
КонецЕсли;
|
||
// -- Локализация
|
||
ОбщиеПараметры.Получатель = ЧтениеXML.ЗначениеАтрибута("CustomerInfo");
|
||
ОбщиеПараметры.ПолучательИНН = ЧтениеXML.ЗначениеАтрибута("CustomerINN");
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "PurveyorData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
ОбщиеПараметры.ДанныеПоставщика.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorName");
|
||
ОбщиеПараметры.ДанныеПоставщика.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorPhone");
|
||
ОбщиеПараметры.ДанныеПоставщика.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorVATIN");
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "VendorData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
ОбщиеПараметры.ДанныеПоставщика.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "VendorName");
|
||
ОбщиеПараметры.ДанныеПоставщика.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "VendorPhone");
|
||
ОбщиеПараметры.ДанныеПоставщика.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "VendorINN");
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "CustomerDetail" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
ОбщиеПараметры.СведенияОПокупателе.Покупатель = ЗначениеXMLАтрибута(ЧтениеXML, "Info");
|
||
ОбщиеПараметры.СведенияОПокупателе.ПокупательИНН = ЗначениеXMLАтрибута(ЧтениеXML, "INN");
|
||
ОбщиеПараметры.СведенияОПокупателе.ПокупательАдрес = ЗначениеXMLАтрибута(ЧтениеXML, "Address");
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "AgentData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
ДанныеАгента = ОбщиеПараметры.ДанныеАгента;
|
||
ДанныеАгента.ПлатежныйАгент.Операция = ЗначениеXMLАтрибута(ЧтениеXML, "AgentOperation", "PayingAgentOperation");
|
||
ДанныеАгента.ПлатежныйАгент.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "AgentPhone", "PayingAgentPhone");
|
||
ДанныеАгента.ОператорПеревода.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorPhone", "MoneyTransferOperatorPhone");
|
||
ДанныеАгента.ОператорПеревода.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorName", "MoneyTransferOperatorName");
|
||
ДанныеАгента.ОператорПеревода.Адрес = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorAddress", "MoneyTransferOperatorAddress");
|
||
ДанныеАгента.ОператорПеревода.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorINN", "MoneyTransferOperatorVATIN");
|
||
ДанныеАгента.ОператорПоПриемуПлатежей.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "PaymentProcessorPhone", "ReceivePaymentsOperatorPhone");
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "UserAttribute" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
ОбщиеПараметры.ДополнительныйРеквизитПользователя.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "Name");
|
||
ОбщиеПараметры.ДополнительныйРеквизитПользователя.Значение = ЗначениеXMLАтрибута(ЧтениеXML, "Value");
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "Positions" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Пока ЧтениеXML.Прочитать() И НЕ (ЧтениеXML.Имя = "Positions" И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента) Цикл
|
||
|
||
Если ЧтениеXML.Имя = "FiscalString" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
ФискальнаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека();
|
||
|
||
ФискальнаяСтрока.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "Name");
|
||
ФискальнаяСтрока.Количество = Число(ЗначениеXMLАтрибута(ЧтениеXML, "Quantity", , 0));
|
||
|
||
ФискальнаяСтрока.ЦенаСоСкидками = Число(ЗначениеXMLАтрибута(ЧтениеXML, "PriceWithDiscount", , 0));
|
||
ФискальнаяСтрока.Сумма = Число(ЗначениеXMLАтрибута(ЧтениеXML, "AmountWithDiscount", "SumWithDiscount", 0));
|
||
СуммаЧека = СуммаЧека + ФискальнаяСтрока.Сумма;
|
||
СуммаСкидок = ЗначениеXMLАтрибута(ЧтениеXML, "DiscountAmount", "DiscountSum", 0);
|
||
Если Не ПустаяСтрока(СуммаСкидок) Тогда
|
||
ФискальнаяСтрока.СуммаСкидок = Число(СуммаСкидок);
|
||
КонецЕсли;
|
||
ФискальнаяСтрока.НомерСекции = Число(ЗначениеXMLАтрибута(ЧтениеXML, "Department", , 0));
|
||
ФискальнаяСтрока.ЕдиницаИзмерения = ЗначениеXMLАтрибута(ЧтениеXML, "MeasurementUnit");
|
||
// ++ Локализация
|
||
ПредставлениеСтавкаНДС = ЗначениеXMLАтрибута(ЧтениеXML, "VATRate", "Tax");
|
||
ФискальнаяСтрока.СтавкаНДС = СтавкаНДСПоПредставлению(ПредставлениеСтавкаНДС);
|
||
// -- Локализация
|
||
СуммаНДС = ЗначениеXMLАтрибута(ЧтениеXML, "VATAmount", "TaxSum", 0);
|
||
Если Не ПустаяСтрока(СуммаНДС) Тогда
|
||
ФискальнаяСтрока.СуммаНДС = Число(СуммаНДС);
|
||
КонецЕсли;
|
||
|
||
ПризнакСпособаРасчета = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SignMethodCalculation", "PaymentMethod", 0));
|
||
ФискальнаяСтрока.ПризнакСпособаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПризнакСпособаРасчетаПоКоду(ПризнакСпособаРасчета);
|
||
|
||
ПризнакПредметаРасчета = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SignCalculationObject", "CalculationSubject", 0));
|
||
ФискальнаяСтрока.ПризнакПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПризнакПредметаРасчетаПоКоду(ПризнакПредметаРасчета);
|
||
|
||
// ++ Локализация
|
||
Если ЧтениеXML.ЗначениеАтрибута("SignSubjectCalculationAgent") <> Неопределено Или ЧтениеXML.ЗначениеАтрибута("CalculationAgent") <> Неопределено Тогда
|
||
ПризнакАгента = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SignSubjectCalculationAgent", "CalculationAgent", 0));
|
||
ФискальнаяСтрока.ПризнакАгентаПоПредметуРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.ПризнакАгентаПоКоду(ПризнакАгента);
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.ЗначениеАтрибута("MeasureOfQuantity") <> Неопределено Тогда
|
||
МераКоличестваПредметаРасчета = Число(ЗначениеXMLАтрибута(ЧтениеXML, "MeasureOfQuantity", 255));
|
||
ФискальнаяСтрока.КодЕдиницыИзмерения = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодЕдиницыИзмеренияПоККТКоду(МераКоличестваПредметаРасчета);
|
||
КонецЕсли;
|
||
// -- Локализация
|
||
|
||
ФискальнаяСтрока.КодСтраныПроисхожденияТовара = ЗначениеXMLАтрибута(ЧтениеXML, "CountryOfOrigin");
|
||
ФискальнаяСтрока.НомерТаможеннойДекларации = ЗначениеXMLАтрибута(ЧтениеXML, "CustomsDeclaration");
|
||
ФискальнаяСтрока.ДополнительныйРеквизит = ЗначениеXMLАтрибута(ЧтениеXML, "AdditionalAttribute");
|
||
|
||
СуммаАкциза = ЗначениеXMLАтрибута(ЧтениеXML, "ExciseAmount");
|
||
Если НЕ ПустаяСтрока(СуммаАкциза) Тогда
|
||
Если Число(СуммаАкциза) > 0 Тогда
|
||
ФискальнаяСтрока.СуммаАкциза = Число(СуммаАкциза);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ДанныхМаркировки И ЧтениеXML.ЗначениеАтрибута("MarkingCode") <> Неопределено Тогда
|
||
ФискальнаяСтрока.КонтрольнаяМарка = ЧтениеXML.ЗначениеАтрибута("MarkingCode");
|
||
КонецЕсли;
|
||
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(ФискальнаяСтрока);
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "AgentData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Если ФискальнаяСтрока <> Неопределено Тогда
|
||
ДанныеАгента = ФискальнаяСтрока.ДанныеАгента;
|
||
ДанныеАгента.ПлатежныйАгент.Операция = ЗначениеXMLАтрибута(ЧтениеXML, "AgentOperation", "PayingAgentOperation");
|
||
ДанныеАгента.ПлатежныйАгент.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "AgentPhone", "PayingAgentPhone");
|
||
ДанныеАгента.ОператорПеревода.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorPhone", "MoneyTransferOperatorPhone");
|
||
ДанныеАгента.ОператорПеревода.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorName", "MoneyTransferOperatorName");
|
||
ДанныеАгента.ОператорПеревода.Адрес = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorAddress", "MoneyTransferOperatorAddress");
|
||
ДанныеАгента.ОператорПеревода.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorINN", "MoneyTransferOperatorVATIN");
|
||
ДанныеАгента.ОператорПоПриемуПлатежей.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "PaymentProcessorPhone", "ReceivePaymentsOperatorPhone");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "PurveyorData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Если ФискальнаяСтрока <> Неопределено Тогда
|
||
ФискальнаяСтрока.ДанныеПоставщика.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorName");
|
||
ФискальнаяСтрока.ДанныеПоставщика.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorPhone");
|
||
ФискальнаяСтрока.ДанныеПоставщика.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorVATIN");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "VendorData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Если ФискальнаяСтрока <> Неопределено Тогда
|
||
ФискальнаяСтрока.ДанныеПоставщика.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "VendorName");
|
||
ФискальнаяСтрока.ДанныеПоставщика.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "VendorPhone");
|
||
ФискальнаяСтрока.ДанныеПоставщика.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "VendorINN");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "IndustryAttribute" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Если ФискальнаяСтрока <> Неопределено И ДанныхМаркировки Тогда
|
||
ИдентификаторФОИВ = ЗначениеXMLАтрибута(ЧтениеXML, "IdentifierFOIV");
|
||
ФискальнаяСтрока.ОтраслевойРеквизит.ИдентификаторФОИВ = ИдентификаторФОИВ;
|
||
ДатаДокументаОснования = ЗначениеXMLАтрибута(ЧтениеXML, "DocumentDate");
|
||
Если Не ПустаяСтрока(ДатаДокументаОснования) Тогда
|
||
ФискальнаяСтрока.ОтраслевойРеквизит.ДатаДокументаОснования = ОбщегоНазначенияБПО.СтрокаВДату(XMLЗначение(Тип("Строка"), ДатаДокументаОснования));
|
||
КонецЕсли;
|
||
ФискальнаяСтрока.ОтраслевойРеквизит.НомерДокументаОснования = ЗначениеXMLАтрибута(ЧтениеXML, "DocumentNumber");
|
||
ФискальнаяСтрока.ОтраслевойРеквизит.ЗначениеРеквизита = ЗначениеXMLАтрибута(ЧтениеXML, "AttributeValue");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() И ДанныхМаркировки Тогда
|
||
Если ЧтениеXML.Имя = "GoodCodeData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Если ФискальнаяСтрока <> Неопределено Тогда
|
||
ФискальнаяСтрока.ДанныеКодаТоварнойНоменклатуры.ГлобальныйИдентификаторТорговойЕдиницы = ЗначениеXMLАтрибута(ЧтениеXML, "GTIN");
|
||
ФискальнаяСтрока.ДанныеКодаТоварнойНоменклатуры.КонтрольныйИдентификационныйЗнак = ЗначениеXMLАтрибута(ЧтениеXML, "Stamp");
|
||
ФискальнаяСтрока.ДанныеКодаТоварнойНоменклатуры.СерийныйНомер = ЗначениеXMLАтрибута(ЧтениеXML, "SerialNumber");
|
||
ТипМаркировки = ЗначениеXMLАтрибута(ЧтениеXML, "StampType");
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
ФискальнаяСтрока.ДанныеКодаТоварнойНоменклатуры.ТипМаркировки = МодульМенеджерОборудованияМаркировка.ТипМаркировкиККТПоКоду(ТипМаркировки);
|
||
ФискальнаяСтрока.ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара = ЗначениеXMLАтрибута(ЧтениеXML, "MarkingCode");
|
||
КонецЕсли
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "TextString" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Текст = ЗначениеXMLАтрибута(ЧтениеXML, "Text");
|
||
ТекстоваяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(Текст);
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(ТекстоваяСтрока);
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "Barcode" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
ТипШтрихкодаЗнач = ЗначениеXMLАтрибута(ЧтениеXML, "Type");
|
||
ШтрихКодЗнач = ЗначениеXMLАтрибута(ЧтениеXML, "Value");
|
||
ШтрихКодBase64 = ЗначениеXMLАтрибута(ЧтениеXML, "ValueBase64");
|
||
СтрокаШтрихКод = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыШтрихкодВСтрокеЧека(ТипШтрихкодаЗнач, ШтрихКодЗнач, ШтрихКодBase64);
|
||
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаШтрихКод);
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "Payments" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
|
||
СуммаНаличные = Число(ЗначениеXMLАтрибута(ЧтениеXML, "Cash", , 0));
|
||
СуммаЭлектронно = Число(ЗначениеXMLАтрибута(ЧтениеXML, "ElectronicPayment", , 0));
|
||
СуммаПостоплата = Число(ЗначениеXMLАтрибута(ЧтениеXML, "Credit", "PostPayment", 0));
|
||
СуммаПредоплата = Число(ЗначениеXMLАтрибута(ЧтениеXML, "AdvancePayment", "PrePayment", 0));
|
||
СуммаПредоставление = Число(ЗначениеXMLАтрибута(ЧтениеXML, "CashProvision", "Barter", 0));
|
||
|
||
ОплатаНеНаличными = СуммаЭлектронно + СуммаПостоплата + СуммаПредоплата + СуммаПредоставление;
|
||
СуммаНаличные = ?(СуммаНаличные + ОплатаНеНаличными > СуммаЧека, СуммаЧека - ОплатаНеНаличными, СуммаНаличные);
|
||
|
||
Если СуммаНаличные > 0 Тогда
|
||
СтрокаОплаты = Новый Структура();
|
||
СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные"));
|
||
СтрокаОплаты.Вставить("Сумма", СуммаНаличные);
|
||
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
|
||
КонецЕсли;
|
||
|
||
Если СуммаЭлектронно > 0 Тогда
|
||
СтрокаОплаты = Новый Структура();
|
||
СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно"));
|
||
СтрокаОплаты.Вставить("Сумма", СуммаЭлектронно);
|
||
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
|
||
КонецЕсли;
|
||
|
||
Если СуммаПостоплата > 0 Тогда
|
||
СтрокаОплаты = Новый Структура();
|
||
СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата"));
|
||
СтрокаОплаты.Вставить("Сумма", СуммаПостоплата);
|
||
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
|
||
КонецЕсли;
|
||
|
||
Если СуммаПредоплата > 0 Тогда
|
||
СтрокаОплаты = Новый Структура();
|
||
СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Предоплата"));
|
||
СтрокаОплаты.Вставить("Сумма", СуммаПредоплата);
|
||
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
|
||
КонецЕсли;
|
||
|
||
Если СуммаПредоставление > 0 Тогда
|
||
СтрокаОплаты = Новый Структура();
|
||
СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.ВстречноеПредоставление"));
|
||
СтрокаОплаты.Вставить("Сумма", СуммаПредоставление);
|
||
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ЧтениеXML.Имя = "ElectronicPaymentInfo" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Пока ЧтениеXML.Прочитать() И НЕ (ЧтениеXML.Имя = "ElectronicPaymentInfo" И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента) Цикл
|
||
Если ЧтениеXML.Имя = "ElectronicPayment" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
СведенияОБезналичнойОплате = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыСведенияОБезналичнойОплате();
|
||
СведенияОБезналичнойОплате.ПризнакСпособаОплаты = Число(ЗначениеXMLАтрибута(ЧтениеXML, "PaymentMethod", , 0));
|
||
СведенияОБезналичнойОплате.Идентификаторы = ЗначениеXMLАтрибута(ЧтениеXML, "Identifiers");
|
||
СведенияОБезналичнойОплате.ДополнительныеCведения = ЗначениеXMLАтрибута(ЧтениеXML, "AdditionalInformation");
|
||
ОбщиеПараметры.СведенияОБезналичнойОплате.Добавить(СведенияОБезналичнойОплате);
|
||
КонецЕсли;
|
||
КонецЦикла
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат ОбщиеПараметры;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
// Функция формирует шаблон чека.
|
||
//
|
||
// Параметры:
|
||
// ОбщиеПараметры - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека
|
||
// ТипОборудования - Строка - типы оборудования строкой.
|
||
// ДополнительныйТекст - Строка - дополнительный текст шаблона чека.
|
||
// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура.
|
||
Функция ШаблонЧека(ОбщиеПараметры, ТипОборудования, ДополнительныйТекст = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт
|
||
|
||
СтандартнаяОбработка = Истина;
|
||
|
||
ШаблонЧека = Неопределено;
|
||
МенеджерОборудованияВызовСервераПереопределяемый.СформироватьШаблонЧека(ШаблонЧека, ОбщиеПараметры, ДополнительныйТекст, СтандартнаяОбработка, ТипОборудования);
|
||
Если СтандартнаяОбработка Или ШаблонЧека = Неопределено Тогда
|
||
Возврат ОбщиеПараметры;
|
||
Иначе
|
||
Возврат ШаблонЧека;
|
||
КонецЕсли;
|
||
|
||
КонецФункции
|
||
|
||
// Функция формирует табличный документ по данным фискального чека.
|
||
//
|
||
// Параметры:
|
||
// ТипДокумента - Число
|
||
// ОбщиеПараметры - Структура - параметры фискального документа загруженная из данных XML
|
||
// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека
|
||
// РеквизитыЧека - Структура - параметры фискального документа из регистра сведений фискальные документы
|
||
// см. ДанныеФискальнойОперации()
|
||
// ФорматФФД - Строка - формат фискальных данных, влияет на вывод таблицы оплаты при "1.0"
|
||
// используются только виды оплат "НАЛИЧНЫМИ", "ЭЛЕКТРОННО"
|
||
//
|
||
// Возвращаемое значение:
|
||
// ТабличныйДокумент - табличный документ со сформированным фискальным документом, может быть сохранен в любой формат.
|
||
//
|
||
Функция СформироватьФискальныйДокумент(ТипДокумента, ОбщиеПараметры, РеквизитыЧека = Неопределено, ФорматФФД = "1.1", ШиринаЧека = 42) Экспорт
|
||
|
||
Если ТипДокумента = 1 Тогда
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОбОткрытииСмены(ШиринаЧека, ОбщиеПараметры);
|
||
ИначеЕсли ТипДокумента = 2 Тогда
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонВнесениеНаличных(ШиринаЧека, ОбщиеПараметры);
|
||
ИначеЕсли ТипДокумента = 3 Тогда
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонВнесениеНаличных(ШиринаЧека, ОбщиеПараметры);
|
||
ИначеЕсли ТипДокумента = 4 Тогда
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОТекущемСостоянии(ШиринаЧека, ОбщиеПараметры);
|
||
ИначеЕсли ТипДокумента = 5 Тогда
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОЗакрытииСмены(ШиринаЧека, ОбщиеПараметры);
|
||
Иначе
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ШиринаЧека, ОбщиеПараметры, РеквизитыЧека);
|
||
КонецЕсли;
|
||
|
||
ШаблоныФискальныхДокументов.СформироватьДокументПоШаблону(Шаблон);
|
||
ТабличныйДокумент = ШаблоныФискальныхДокументов.ВывестиКакТабличныйДокумент(Шаблон);
|
||
|
||
Возврат ТабличныйДокумент;
|
||
|
||
КонецФункции
|
||
|
||
// Функция формирует табличный документ по данным фискального чека.
|
||
//
|
||
// Параметры:
|
||
// ТипДокумента - Число
|
||
// ОбщиеПараметры - Структура - параметры фискального документа загруженная из данных XML
|
||
// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека
|
||
// РеквизитыЧека - Структура - параметры фискального документа из регистра сведений фискальные документы
|
||
// см. ДанныеФискальнойОперации()
|
||
// ФорматФФД - Строка - формат фискальных данных, влияет на вывод таблицы оплаты при "1.0"
|
||
// используются только виды оплат "НАЛИЧНЫМИ", "ЭЛЕКТРОННО"
|
||
//
|
||
// Возвращаемое значение:
|
||
// Текст - Строка.
|
||
//
|
||
Функция СформироватьФискальныйДокументТекст(ТипДокумента, ОбщиеПараметры, РеквизитыЧека = Неопределено, ФорматФФД = "1.1", ШиринаЧека = 42) Экспорт
|
||
|
||
Если ТипДокумента = 1 Тогда
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОбОткрытииСмены(ШиринаЧека, ОбщиеПараметры);
|
||
ИначеЕсли ТипДокумента = 2 Тогда
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонВнесениеНаличных(ШиринаЧека, ОбщиеПараметры);
|
||
ИначеЕсли ТипДокумента = 3 Тогда
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонВнесениеНаличных(ШиринаЧека, ОбщиеПараметры);
|
||
ИначеЕсли ТипДокумента = 4 Тогда
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОТекущемСостоянии(ШиринаЧека, ОбщиеПараметры);
|
||
ИначеЕсли ТипДокумента = 5 Тогда
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОЗакрытииСмены(ШиринаЧека, ОбщиеПараметры);
|
||
Иначе
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ШиринаЧека, ОбщиеПараметры, РеквизитыЧека);
|
||
КонецЕсли;
|
||
|
||
ШаблоныФискальныхДокументов.СформироватьДокументПоШаблону(Шаблон);
|
||
Текст = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон);
|
||
|
||
Возврат Текст;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает флаг открыта ли кассовая смена
|
||
//
|
||
// Параметры:
|
||
// СтатусКассовойСмены - ПеречислениеСсылка.СтатусыКассовойСмены
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево
|
||
Функция КассоваяСменаОткрыта(СтатусКассовойСмены) Экспорт
|
||
|
||
СменаОткрыта = Неопределено;
|
||
Если СтатусКассовойСмены = Перечисления.СтатусыКассовойСмены.Открыта Тогда
|
||
СменаОткрыта = Истина;
|
||
Иначе
|
||
СменаОткрыта = Ложь;
|
||
КонецЕсли;
|
||
|
||
Возврат СменаОткрыта;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает статус что кассовая смена открыта
|
||
//
|
||
// Возвращаемое значение:
|
||
// ПеречислениеСсылка.СтатусыКассовойСмены
|
||
Функция СтатусОткрытойСмены() Экспорт
|
||
|
||
Возврат Перечисления.СтатусыКассовойСмены.Открыта;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает статус что кассовая смена закрыта
|
||
//
|
||
// Возвращаемое значение:
|
||
// ПеречислениеСсылка.СтатусыКассовойСмены
|
||
Функция СтатусЗакрытойСмены() Экспорт
|
||
|
||
Возврат Перечисления.СтатусыКассовойСмены.Закрыта;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает возможные варианты статусов чеков в очереди
|
||
//
|
||
// Возвращаемое значение:
|
||
// Соответствие из КлючИЗначение
|
||
Функция СтатусыЧекаВОчереди() Экспорт
|
||
|
||
Соответствие = Новый Соответствие();
|
||
|
||
Соответствие.Вставить("Фискализирован" , ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Фискализирован"));
|
||
Соответствие.Вставить("Ошибка" , ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Ошибка"));
|
||
Соответствие.Вставить("Новый" , ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Новый"));
|
||
Соответствие.Вставить("Фискализируется", ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Фискализируется"));
|
||
Соответствие.Вставить("Отменен" , ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Отменен"));
|
||
|
||
Возврат Соответствие;
|
||
|
||
КонецФункции
|
||
|
||
#Область УстаревшиеПроцедурыИФункции
|
||
|
||
// Устарела: следует использовать МенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр.
|
||
// Идентифицирует ли код товара (значение тега 1162) экземпляр товара.
|
||
//
|
||
// Параметры:
|
||
// РеквизитКодаТовара - Строка - Значение реквизита кода товара в BASE64.
|
||
// ШтриховойКодТовара - Строка - Штриховой код товара.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево - Истина - Если код товара идентифицирует экземпляр товара.
|
||
//
|
||
Функция КодТовараИдентифицируетЭкземпляр(Знач РеквизитКодаТовара = Неопределено, Знач ШтриховойКодТовара = Неопределено) Экспорт
|
||
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
Возврат МодульМенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр(РеквизитКодаТовара, ШтриховойКодТовара);
|
||
Иначе
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецФункции
|
||
|
||
// Устарела: следует использовать ШаблонЧека.
|
||
// Функция формирует шаблон чека.
|
||
//
|
||
// Параметры:
|
||
// ОбщиеПараметры - Структура - см.ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека().
|
||
// ТипОборудования - Строка - типы оборудования строкой.
|
||
// ДополнительныйТекст - Строка - дополнительный текст шаблона чека.
|
||
// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование
|
||
//
|
||
// Возвращаемое значение:
|
||
// - Структура.
|
||
Функция СформироватьШаблонЧека(ОбщиеПараметры, ТипОборудования, ДополнительныйТекст = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт
|
||
|
||
Возврат ШаблонЧека(ОбщиеПараметры, ТипОборудования, ДополнительныйТекст, ИдентификаторУстройства);
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
// Возвращает название организации по ссылке типа ОпределяемыеТипы.Организация
|
||
//
|
||
// Параметры:
|
||
// Организация - ОпределяемыйТип.ОрганизацияБПО
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * Наименование - Строка - Наименование организации
|
||
Функция СведенияОбОрганизации(Организация) Экспорт
|
||
|
||
Сведения = Новый Структура();
|
||
Сведения.Вставить("Наименование", "");
|
||
СтандартнаяОбработка = Истина;
|
||
МенеджерОборудованияВызовСервераПереопределяемый.СведенияОбОрганизации(Организация, Сведения, СтандартнаяОбработка);
|
||
Если СтандартнаяОбработка Тогда
|
||
Сведения.Наименование = Строка(Организация);
|
||
КонецЕсли;
|
||
Возврат Сведения;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныйПрограммныйИнтерфейс
|
||
|
||
// Добавляет в список поставляемые драйверы в составе конфигурации.
|
||
//
|
||
// Параметры:
|
||
// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования
|
||
//
|
||
Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт
|
||
|
||
Драйвер = ДрайвераОборудования.Добавить();
|
||
Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков;
|
||
Драйвер.ИмяДрайвера = "Драйвер1СПринтерЧеков";
|
||
Драйвер.Наименование = НСтр("ru = '1С:Принтер чеков'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
Драйвер.ИдентификаторОбъекта = "ReceiptPrinterNative";
|
||
Драйвер.РекомендуемоеИспользование = Истина;
|
||
|
||
// ++ Локализация
|
||
Драйвер = ДрайвераОборудования.Добавить();
|
||
Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков;
|
||
Драйвер.ИмяДрайвера = "ДрайверRightScanУстройствоПечати";
|
||
Драйвер.Наименование = НСтр("ru = 'RightScan:Устройство печати ТСД Urovo'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
Драйвер.ИдентификаторОбъекта = "RSPrinter";
|
||
|
||
Драйвер = ДрайвераОборудования.Добавить();
|
||
Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ;
|
||
Драйвер.ИмяДрайвера = "ДрайверRightScanККТ54ФЗ";
|
||
Драйвер.Наименование = НСтр("ru = 'RightScan:ККТ с передачей данных в ОФД (54-ФЗ)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
Драйвер.ИдентификаторОбъекта = "FNCore";
|
||
|
||
Драйвер = ДрайвераОборудования.Добавить();
|
||
Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ;
|
||
Драйвер.ИмяДрайвера = "ДрайверАЗУРККТ54ФЗФФД12";
|
||
Драйвер.Наименование = НСтр("ru = 'АЗУР:ККТ с передачей данных в ОФД (ФФД 1.2)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
Драйвер.ИдентификаторОбъекта = "com_azurpos_fz54_AzurPos";
|
||
|
||
Драйвер = ДрайвераОборудования.Добавить();
|
||
Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ;
|
||
Драйвер.ИмяДрайвера = "ДрайверВерсияТККТ54ФЗ";
|
||
Драйвер.Наименование = НСтр("ru = 'Версия-Т:ККТ с передачей данных в ОФД (54-ФЗ)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
Драйвер.ИдентификаторОбъекта = "VT_KKT_1CInt";
|
||
Драйвер.СнятСПоддержки = Истина;
|
||
|
||
Драйвер = ДрайвераОборудования.Добавить();
|
||
Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ;
|
||
Драйвер.ИмяДрайвера = "ДрайверАТОЛККТ54ФЗ10XФФД12";
|
||
Драйвер.Наименование = НСтр("ru = 'АТОЛ:ККТ с передачей данных в ОФД 10.Х (ФФД 1.2)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
Драйвер.ИдентификаторОбъекта = "ATOL_KKT_1C_V10";
|
||
Драйвер.РекомендуемоеИспользование = Истина;
|
||
|
||
Драйвер = ДрайвераОборудования.Добавить();
|
||
Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ;
|
||
Драйвер.ИмяДрайвера = "ДрайверАТОЛККТ54ФЗ10XФФД12X";
|
||
Драйвер.Наименование = НСтр("ru = 'АТОЛ:ККТ с передачей данных в ОФД 10.x (ФФД 1.2) УСН НДС'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
Драйвер.ИдентификаторОбъекта = "ATOL_KKT_1C_V10X";
|
||
Драйвер.РекомендуемоеИспользование = Истина;
|
||
|
||
Драйвер = ДрайвераОборудования.Добавить();
|
||
Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ;
|
||
Драйвер.ИмяДрайвера = "ДрайверАтолККТ54ФЗ10X";
|
||
Драйвер.Наименование = НСтр("ru = 'АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) 10.x'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
Драйвер.ИдентификаторОбъекта = "ATOL_KKT_1C83_V10";
|
||
Драйвер.СнятСПоддержки = Истина;
|
||
|
||
Драйвер = ДрайвераОборудования.Добавить();
|
||
Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ;
|
||
Драйвер.ИмяДрайвера = "ДрайверПОСЦентрККТ54ФЗ4ФФД12NG";
|
||
Драйвер.Наименование = НСтр("ru = 'ПОСЦентр:ККТ с передачей данных в ОФД (ФФД 1.2) NG УСН НДС'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
Драйвер.ИдентификаторОбъекта = "psc_fr_drv_ng_V1";
|
||
Драйвер.РекомендуемоеИспользование = Истина;
|
||
|
||
// -- Локализация
|
||
|
||
КонецПроцедуры
|
||
|
||
// Подготовить данные операции, перед выполнением команды.
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура - см. МенеджерОборудованияКлиентСервер.ПараметрыПодключения()
|
||
// Команда - Строка - команда для выполнения
|
||
// ПараметрыОперации - Структура -
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Подготовить данные операции:
|
||
// * Кассир - ОпределяемыйТип.СубъектПерсональныхДанныхБПО
|
||
// * КассирИНН - Число
|
||
// * ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО
|
||
// * ИдентификаторФискальнойЗаписи - УникальныйИдентификатор
|
||
// * Организация - ОпределяемыйТип.ОрганизацияБПО.
|
||
// * ТорговыйОбъект - ОпределяемыйТип.ТорговыйОбъектБПО
|
||
// * КорректируемыйДокумент - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО
|
||
// * ЕстьПерсональныеДанные - Булево -
|
||
// * СубъектПерсональныхДанных - ОпределяемыйТип.СубъектПерсональныхДанныхБПО
|
||
// * ТипПерсональныхДанных - ПеречислениеСсылка.ТипыПерсональныхДанныхККТ.
|
||
// * ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами
|
||
// * ТипДокумента - ПеречислениеСсылка.ТипыФискальныхДокументовККТ
|
||
// * РевизияИнтерфейса - Число -
|
||
// * ШиринаСтроки - Число -
|
||
// * РегистрационныйНомерККТ - Строка -
|
||
// * ЗаводскойНомерФН - Строка -
|
||
// * ДополнительныйРеквизит - Строка -
|
||
// * НомерСменыККТ - Число -
|
||
// * НомерЧекаККТ - Число -
|
||
// * НомерЧекаЗаСмену - Число -
|
||
// * ДатаВремяЧека - Дата
|
||
// * СуммаЧека - Число -
|
||
// * ОплатаНаличные - Число -
|
||
// * ОплатаЭлектронно - Число -
|
||
// * ОплатаПредоплата - Число -
|
||
// * ОплатаПостоплата - Число -
|
||
// * ОплатаВстречноеПредоставление - Число -
|
||
// * ФискальныйПризнак - Строка -
|
||
// * АдресСайтаПроверки - Строка -
|
||
// * ОшибкаПечати - Булево -
|
||
// * Электронно - Булево -
|
||
// * Отправляет1СSMS - Булево -
|
||
// * Отправляет1СEmail - Булево -
|
||
// * АвтономныйРежим - Булево -
|
||
// * ДанныеЧекаXML - Строка
|
||
// * ДанныеЧекаXMLПерсональныеДанные - Строка
|
||
// * РезультатОперацииXML - Булево
|
||
// * ТекстСообщения - Строка
|
||
// * ТекущееСостояние - Структура -:
|
||
// ** НомерСменыККТ - Число -
|
||
// ** НомерЧекаККТ - Число -
|
||
// ** СтатусСмены - Число -
|
||
// ** ДатаВремя - Дата
|
||
// ** ПараметрыXML - Строка -
|
||
// ** РезультатXML - Строка -
|
||
// ** КассоваяСмена - ДокументСсылка.КассоваяСмена
|
||
// ** ТестовыеЧеки - Булево
|
||
// ** Результат - Булево -
|
||
// ** ТекстОшибки - Строка
|
||
// * ЧекКоррекцииСторно - Булево
|
||
// * СформироватьЧекКоррекции - Булево -
|
||
// * НеприменениеККТ - Булево -
|
||
// * ВерсияФФДККТ11 - Булево -
|
||
// * Результат - Булево -
|
||
// * ОперацияЗаписана - Булево -
|
||
// * ТекстОшибки - Строка
|
||
// * СтатусСмены - Число -
|
||
// * ТестовыеЧеки - Булево
|
||
// * ЕдиныйЧек - Булево -
|
||
// * ИдентификаторОплатыПлатежнойСистемы - УникальныйИдентификатор
|
||
// * ТипПлатежнойСистемы - ПеречислениеСсылка.ТипыПлатежнойСистемыККТ
|
||
//
|
||
Функция ПодготовитьДанныеОперации(ПараметрыПодключения, Команда, ПараметрыОперации) Экспорт
|
||
|
||
ШиринаСтроки = ?(ПараметрыПодключения.Свойство("ШиринаСтроки") И ПараметрыПодключения.ШиринаСтроки > 0, ПараметрыПодключения.ШиринаСтроки, 32);
|
||
|
||
ДанныеОперации = Новый Структура();
|
||
ДанныеОперации.Вставить("Результат", Истина);
|
||
ДанныеОперации.Вставить("ТекстОшибки");
|
||
ДанныеОперации.Вставить("ТестовыеЧеки");
|
||
ДанныеОперации.Вставить("ТекстЧека");
|
||
|
||
// Для всех операций проверяем корректность ИНН кассира.
|
||
Если ПараметрыОперации <> Неопределено И ПараметрыОперации.Свойство("КассирИНН") И НЕ ПустаяСтрока(ПараметрыОперации.КассирИНН) Тогда
|
||
ОписаниеОшибки = "";
|
||
Если НЕ ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ИННСоответствуетТребованиям(ПараметрыОперации.КассирИНН, Ложь, ОписаниеОшибки) Тогда
|
||
ТекстОшибки = НСтр("ru = 'ИНН кассира некорректен (%Ошибка%)'");
|
||
ОписаниеОшибки = СтрЗаменить(ТекстОшибки, "%Ошибка%", ОписаниеОшибки);
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
// Для всех операций проверяем корректность ИНН организации.
|
||
Если ПараметрыОперации <> Неопределено И ПараметрыОперации.Свойство("ОрганизацияИНН") И НЕ ПустаяСтрока(ПараметрыОперации.ОрганизацияИНН) Тогда
|
||
Если СтрДлина(ПараметрыОперации.ОрганизацияИНН) <> 10 И СтрДлина(ПараметрыОперации.ОрганизацияИНН) <> 12 Тогда
|
||
ОписаниеОшибки = НСтр("ru = 'Неверная длина ИНН организации.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
// Для всех операций проверяем корректность длины поля Кассир (ФФД 1021) (макс 64)
|
||
Если ПараметрыОперации <> Неопределено И ПараметрыОперации.Свойство("Кассир") И НЕ ПустаяСтрока(ПараметрыОперации.Кассир) Тогда
|
||
Если СтрДлина(ПараметрыОперации.Кассир) > 64 Тогда
|
||
ПараметрыОперации.Кассир = Лев(СокрЛП(ПараметрыОперации.Кассир),64);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если Команда = "CheckFiscalization" Тогда
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков
|
||
И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда
|
||
ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
СтатусПоследнейСмены = ПолучитьСтатусПоследнейСмены(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Если Не СтатусПоследнейСмены.Активна = Истина Тогда
|
||
ОписаниеОшибки = НСтр("ru='Кассовая смена не открыта или истекла.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
Иначе
|
||
// Форматно логический контроль
|
||
ОписаниеОшибки = "";
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль() Тогда
|
||
МодульФорматноЛогическийКонтроль = ОбщегоНазначенияБПО.ОбщийМодуль("ФорматноЛогическийКонтроль");
|
||
Если НЕ МодульФорматноЛогическийКонтроль.ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(
|
||
ПараметрыОперации,
|
||
ПараметрыПодключения.ИдентификаторУстройства,
|
||
ОписаниеОшибки) Тогда
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
МодульФорматноЛогическийКонтроль.ПривестиДанныеКТребуемомуФормату(ПараметрыОперации);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(ПараметрыОперации.ДокументОснование) И КонтрольФискализацииБезналичныхПлатежей() Тогда
|
||
ЗаполнитьДанныеПлатежныхОпераций(ПараметрыОперации);
|
||
КонецЕсли;
|
||
|
||
// Параметры фискализации чека
|
||
ПараметрыФискализации = ПараметрыФискализацииЧека();
|
||
ПараметрыФискализации.ТекущаяСмена = СтатусПоследнейСмены.КассоваяСмена;
|
||
|
||
// Параметры регистрации ККТ
|
||
ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства);
|
||
ВерсияФФДККТ11 = ?(ПараметрыРегистрации.Свойство("ВерсияФФДККТ"), ПараметрыРегистрации.ВерсияФФДККТ, "1.05");
|
||
ВерсияФФДККТ11 = ВерсияФФДККТ11 = "1.1" Или ВерсияФФДККТ11 = "1.2"; // Признак ФФД 1.1
|
||
|
||
ПараметрыОперации = ШаблонЧека(ПараметрыОперации, Перечисления.ТипыПодключаемогоОборудования.ККТ, Неопределено, ПараметрыПодключения.ИдентификаторУстройства);
|
||
|
||
// Добавить текст короткого слип чека в тело фискального чека
|
||
Если Не ПустаяСтрока(ПараметрыОперации.ТекстКороткогоСлипЧека) Тогда
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ПараметрыОперации.ТекстКороткогоСлипЧека);
|
||
СтрокаЧека.Выравнивание = "Центр";
|
||
ПараметрыОперации.ПозицииЧека.Добавить(СтрокаЧека);
|
||
КонецЕсли;
|
||
|
||
ПараметрыФискализации.РегистрационныйНомерККТ = ?(ПараметрыРегистрации.Свойство("РегистрационныйНомерККТ"), ПараметрыРегистрации.РегистрационныйНомерККТ, "");
|
||
ПараметрыФискализации.ЗаводскойНомерФН = ?(ПараметрыРегистрации.Свойство("ЗаводскойНомерФН"), ПараметрыРегистрации.ЗаводскойНомерФН, "");
|
||
ПараметрыФискализации.ШиринаСтроки = ШиринаСтроки;
|
||
ПараметрыФискализации.РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса;
|
||
ПараметрыФискализации.ДокументОснование = ПараметрыОперации.ДокументОснование;
|
||
ПараметрыФискализации.ИдентификаторФискальнойЗаписи = ПараметрыОперации.ИдентификаторФискальнойЗаписи;
|
||
ПараметрыФискализации.Организация = ПараметрыОперации.Организация;
|
||
ПараметрыФискализации.ТорговыйОбъект = ПараметрыОперации.ТорговыйОбъект;
|
||
ПараметрыФискализации.ДополнительныйРеквизит = ПараметрыОперации.ДополнительныйРеквизит;
|
||
ПараметрыФискализации.СубъектПерсональныхДанных = ПараметрыОперации.СубъектПерсональныхДанных;
|
||
ПараметрыФискализации.ЕстьПерсональныеДанные = ПараметрыОперации.ЕстьПерсональныеДанные;
|
||
Если ПараметрыОперации.Свойство("ИдентификаторОплатыПлатежнойСистемы") Тогда
|
||
ПараметрыФискализации.ИдентификаторОплатыПлатежнойСистемы = ПараметрыОперации.ИдентификаторОплатыПлатежнойСистемы;
|
||
КонецЕсли;
|
||
Если ПараметрыОперации.Свойство("ТипПлатежнойСистемы") Тогда
|
||
ПараметрыФискализации.ТипПлатежнойСистемы = ПараметрыОперации.ТипПлатежнойСистемы;
|
||
КонецЕсли;
|
||
Если ПараметрыОперации.Свойство("КорректируемыйДокумент") Тогда
|
||
ПараметрыФискализации.КорректируемыйДокумент = ПараметрыОперации.КорректируемыйДокумент;
|
||
КонецЕсли;
|
||
ПараметрыФискализации.Кассир = ПараметрыОперации.Кассир;
|
||
ПараметрыФискализации.КассирИНН = ПараметрыОперации.КассирИНН;
|
||
ПараметрыФискализации.Электронно = ПараметрыОперации.Электронно;
|
||
ПараметрыФискализации.Отправляет1СSMS = ПараметрыОперации.Отправляет1СSMS;
|
||
Если ПараметрыОперации.Отправляет1СSMS Тогда
|
||
ПараметрыФискализации.ПокупательНомер = ПараметрыОперации.ПокупательНомер;
|
||
КонецЕсли;
|
||
ПараметрыФискализации.Отправляет1СEmail = ПараметрыОперации.Отправляет1СEmail;
|
||
Если ПараметрыОперации.Отправляет1СEmail Тогда
|
||
ПараметрыФискализации.ПокупательEmail = ПараметрыОперации.ПокупательEmail;
|
||
КонецЕсли;
|
||
ПараметрыФискализации.ВерсияФФДККТ11 = ВерсияФФДККТ11;
|
||
ПараметрыФискализации.ЕдиныйЧек = ПараметрыОперации.ЕдиныйЧек;
|
||
ПараметрыФискализации.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧек;
|
||
|
||
// Формирование XML
|
||
СформироватьXMLПакетДляФискализацияЧека(ПараметрыОперации, ПараметрыФискализации);
|
||
|
||
Если ПараметрыФискализации.ЕстьПерсональныеДанные Тогда
|
||
Если ПустаяСтрока(ПараметрыФискализации.ДатаВремяЧека) Тогда
|
||
ДатаВремяЧека = ОбщегоНазначенияБПО.ДатаСеанса();
|
||
Иначе
|
||
ДатаВремяЧека = ПараметрыФискализации.ДатаВремяЧека;
|
||
КонецЕсли;
|
||
СведенияОПокупателе = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПерсональныеДанныеПокупателя();
|
||
ПараметрыФискализации.ТипПерсональныхДанных = ПараметрыОперации.ТипПерсональныхДанных;
|
||
МенеджерОборудованияВызовСервераПереопределяемый.ОбработкаЗаполненияПерсональныхДанных(СведенияОПокупателе, ПараметрыФискализации.СубъектПерсональныхДанных,
|
||
ПараметрыФискализации.ТипПерсональныхДанных, ДатаВремяЧека);
|
||
СформироватьXMLПакетДляФискализацияЧека(ПараметрыОперации, ПараметрыФискализации, Истина, СведенияОПокупателе, ПараметрыФискализации.ТипПерсональныхДанных);
|
||
КонецЕсли;
|
||
|
||
ПараметрыФискализации.ТекущееСостояние.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса);
|
||
|
||
Если ЗначениеЗаполнено(ПараметрыОперации.УстройствоПечати)
|
||
И (ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И НЕ ПараметрыПодключения.ТипыОборудования.ПринтерЧеков) Тогда
|
||
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ШиринаСтроки, ПараметрыОперации);
|
||
ТекстЧека = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон);
|
||
ПараметрыФискализации.КопияЧека = ПолучитьXMLПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса);
|
||
ПараметрыФискализации.ТекстЧека = ТекстЧека;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыОперации.ПакетДокументов <> Неопределено И ПараметрыОперации.ПакетДокументов.Количество() > 0 Тогда
|
||
|
||
Если ПараметрыФискализации.ДополнительныеДокументы = Неопределено Тогда
|
||
ПараметрыФискализации.ДополнительныеДокументы = Новый Массив();
|
||
КонецЕсли;
|
||
|
||
Для Каждого ДополнительныйДокумент ИЗ ПараметрыОперации.ПакетДокументов Цикл
|
||
ТекстПечати = ПолучитьXMLПакетДляТекста(ДополнительныйДокумент.Ключ, ПараметрыПодключения.РевизияИнтерфейса);
|
||
ПараметрыФискализации.ДополнительныеДокументы.Добавить(Новый Структура("ТекстПечати, УстройствоПечати" , ТекстПечати, ДополнительныйДокумент.Значение));
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыОперации.НефискальныеДокументы <> Неопределено И ПараметрыОперации.НефискальныеДокументы.Количество() > 0 Тогда
|
||
Если ПараметрыФискализации.ТестовыеЧеки = Неопределено Тогда
|
||
ПараметрыФискализации.ТестовыеЧеки = Новый Массив();
|
||
КонецЕсли;
|
||
ЗаполнитьXMLПакетыДляТекстовогоДокумента(
|
||
ПараметрыФискализации.ТестовыеЧеки,
|
||
ПараметрыОперации.НефискальныеДокументы,
|
||
ПараметрыПодключения,
|
||
ШиринаСтроки);
|
||
КонецЕсли;
|
||
|
||
Для Каждого Позиция Из ПараметрыОперации.ПозицииЧека Цикл
|
||
Если Позиция.Свойство("ФискальнаяСтрока") Тогда
|
||
ШтрихкодBase64 = ?(ЗначениеЗаполнено(Позиция.ШтрихкодBase64),
|
||
Позиция.ШтрихкодBase64,
|
||
ОбщегоНазначенияБПОКлиентСервер.ШтрихкодВBase64(Позиция.Штрихкод));
|
||
Если ЗначениеЗаполнено(ШтрихкодBase64) Тогда
|
||
|
||
ДанныеПродукции = Новый Структура;
|
||
ДанныеПродукции.Вставить("Наименование", Позиция.Наименование);
|
||
ПараметрыФискализации.ШтрихкодыПродукции.Вставить(ШтрихкодBase64, ДанныеПродукции);
|
||
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Возврат ПараметрыФискализации;
|
||
|
||
ИначеЕсли Команда = "PrintReceiptCorrection" Тогда
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков
|
||
И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда
|
||
ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
ПараметрыФискализации = ПараметрыФискализацииЧека();
|
||
// Параметры регистрации ККТ
|
||
ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства);
|
||
ВерсияФФДККТ11 = ?(ПараметрыРегистрации.Свойство("ВерсияФФДККТ"), ПараметрыРегистрации.ВерсияФФДККТ, "1.05");
|
||
ВерсияФФДККТ11 = ВерсияФФДККТ11 = "1.1" Или ВерсияФФДККТ11 = "1.2"; // Признак ФФД 1.1
|
||
|
||
Если (ПараметрыПодключения.РевизияИнтерфейса < 3000 И ПараметрыОперации.НеприменениеККТ)
|
||
И (ПараметрыОперации.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств
|
||
Или ПараметрыОперации.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств) Тогда
|
||
ПараметрыФискализации.Результат = Ложь;
|
||
ПараметрыФискализации.ТекстОшибки = НСтр("ru='Для данного типа расчета нельзя сформировать чек коррекции для данного ККТ.'");
|
||
Возврат ПараметрыФискализации;
|
||
КонецЕсли;
|
||
|
||
// Параметры фискализации чека
|
||
ПараметрыФискализации.НеприменениеККТ = ПараметрыОперации.НеприменениеККТ;
|
||
ПараметрыФискализации.Кассир = ПараметрыОперации.Кассир;
|
||
ПараметрыФискализации.Электронно = ПараметрыОперации.Электронно;
|
||
ПараметрыФискализации.Отправляет1СSMS = ПараметрыОперации.Отправляет1СSMS;
|
||
ПараметрыФискализации.Отправляет1СEmail = ПараметрыОперации.Отправляет1СEmail;
|
||
ПараметрыФискализации.Организация = ПараметрыОперации.Организация;
|
||
ПараметрыФискализации.ТорговыйОбъект = ПараметрыОперации.ТорговыйОбъект;
|
||
ПараметрыФискализации.ДополнительныйРеквизит = ПараметрыОперации.ДополнительныйРеквизит;
|
||
ПараметрыФискализации.ВерсияФФДККТ11 = ВерсияФФДККТ11;
|
||
ПараметрыФискализации.ЕдиныйЧек = ПараметрыОперации.ЕдиныйЧек;
|
||
ПараметрыФискализации.РегистрационныйНомерККТ = ?(ПараметрыРегистрации.Свойство("РегистрационныйНомерККТ"), ПараметрыРегистрации.РегистрационныйНомерККТ, "");
|
||
ПараметрыФискализации.ЗаводскойНомерФН = ?(ПараметрыРегистрации.Свойство("ЗаводскойНомерФН"), ПараметрыРегистрации.ЗаводскойНомерФН, "");
|
||
ПараметрыФискализации.ШиринаСтроки = ШиринаСтроки;
|
||
ПараметрыФискализации.РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса;
|
||
ПараметрыФискализации.ДокументОснование = ПараметрыОперации.ДокументОснование;
|
||
ПараметрыФискализации.ИдентификаторФискальнойЗаписи = ПараметрыОперации.ИдентификаторФискальнойЗаписи;
|
||
ПараметрыФискализации.СформироватьЧекКоррекцииСторно = ПараметрыОперации.СформироватьЧекКоррекцииСторно;
|
||
Если ПараметрыОперации.Свойство("КорректируемыйДокумент") Тогда
|
||
ПараметрыФискализации.КорректируемыйДокумент = ПараметрыОперации.КорректируемыйДокумент;
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыОперации.НеприменениеККТ Тогда
|
||
ПараметрыФискализации.СформироватьЧекКоррекцииСторно = Ложь;
|
||
КонецЕсли;
|
||
|
||
Если НЕ ПараметрыФискализации.СформироватьЧекКоррекцииСторно Тогда
|
||
// Сценарий 1 - неприменение ККТ.
|
||
Если ПараметрыОперации.НеприменениеККТ И ЗначениеЗаполнено(ПараметрыОперации.КорректируемыйДокумент) Тогда
|
||
ПараметрыФискализации.Результат = Ложь;
|
||
ПараметрыФискализации.ТекстОшибки = НСтр("ru='Чек коррекции «неприменение ККТ» нельзя сформировать для фискализированного ранее чека.'");
|
||
Возврат ПараметрыФискализации;
|
||
КонецЕсли;
|
||
|
||
ПараметрыФискализации.ЧекКоррекцииНаККТ = Истина;
|
||
Если НЕ ПараметрыФискализации.НеприменениеККТ И НЕ ПараметрыФискализации.СформироватьЧекКоррекцииСторно И НЕ ВерсияФФДККТ11 Тогда
|
||
ПараметрыФискализации.ЧекКоррекцииНаККТ = Ложь;
|
||
// НеприменениеККТ не используется, СформироватьЧекКоррекцииСторно содержит Ложь
|
||
// ВерсияФФДККТ11 содержит Ложь, ФФД меньше 1.1
|
||
ЗаменитьТипыОплатыПриКоррекции(ПараметрыОперации, Неопределено);
|
||
КонецЕсли;
|
||
ПараметрыФискализации.ТипДокумента = ?(ПараметрыФискализации.ЧекКоррекцииНаККТ, Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧекКоррекции, Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧек);
|
||
СформироватьXMLПакетДляФискализацияЧека(ПараметрыОперации, ПараметрыФискализации);
|
||
Иначе
|
||
// Сценарий 2 - исправление нарушений применения ККТ.
|
||
Если ПустаяСтрока(ПараметрыОперации.КорректируемыйДокумент) Тогда
|
||
ПараметрыФискализации.Результат = Ложь;
|
||
ПараметрыФискализации.ТекстОшибки = НСтр("ru='Корректируемый документ не указан для формирования чека коррекции.'");
|
||
Возврат ПараметрыФискализации;
|
||
КонецЕсли;
|
||
|
||
ТипыДокументов = Новый Массив();
|
||
ТипыДокументов.Добавить(Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧек); // Для ФФД 1.05
|
||
ТипыДокументов.Добавить(Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧекКоррекции); // Для ФФД 1.1
|
||
|
||
КорректируемыйДокументОперация = ДанныеФискальнойОперации(ПараметрыОперации.КорректируемыйДокумент, ,ТипыДокументов);
|
||
Если КорректируемыйДокументОперация = Неопределено Тогда
|
||
ПараметрыФискализации.Результат = Ложь;
|
||
ПараметрыФискализации.ТекстОшибки = НСтр("ru='Не найден ранее фискализированный кассовый чек для формирования чека коррекции.'");
|
||
Возврат ПараметрыФискализации;
|
||
КонецЕсли;
|
||
|
||
// В зависимости от версии ФФД формируем "Кассовый чек" или "Кассовый чек коррекции".
|
||
ПараметрыФискализации.ЧекКоррекцииНаККТ = ВерсияФФДККТ11;
|
||
ТипФискальногоДокументов = ?(ПараметрыФискализации.ЧекКоррекцииНаККТ, Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧекКоррекции, Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧек);
|
||
// Дополнительный реквизит чека - фискальным признаком документа основания (по которому идет коррекция).
|
||
ФискальныйПризнак = КорректируемыйДокументОперация.ФискальныйПризнак;
|
||
|
||
// Формируем кассовый чек с корректными реквизитами.
|
||
ПараметрыОперации.ДополнительныйРеквизит = ФискальныйПризнак;
|
||
ПараметрыФискализации.ДополнительныйРеквизит = ФискальныйПризнак;
|
||
ПараметрыФискализации.ТипДокумента = ТипФискальногоДокументов;
|
||
|
||
// Формируем параметры фискализации для сторнирующего чека коррекции.
|
||
ДанныеСторноЧекаXML = КорректируемыйДокументОперация.ДанныеXML.Получить();
|
||
// Чека коррекции не содержат данные о маркировке
|
||
ОбщиеПараметрыСторно = ЗагрузитьДанныеФискализацииИзXML(ДанныеСторноЧекаXML, Ложь);
|
||
ОбщиеПараметрыСторно.ДополнительныйРеквизит = ФискальныйПризнак;
|
||
|
||
ЗаполнитьЗначенияСвойств(ОбщиеПараметрыСторно.ДанныеКоррекции, ПараметрыОперации.ДанныеКоррекции);
|
||
ПодготовитьЧекКоррекции(ПараметрыОперации, ОбщиеПараметрыСторно, ВерсияФФДККТ11);
|
||
// Для формата 1.05
|
||
Если НЕ ВерсияФФДККТ11 Тогда
|
||
ЗаменитьТипыОплатыПриКоррекции(ПараметрыОперации, ОбщиеПараметрыСторно);
|
||
КонецЕсли;
|
||
|
||
СформироватьXMLПакетДляФискализацияЧека(ПараметрыОперации, ПараметрыФискализации);
|
||
|
||
ПараметрыФискализацииСторно = ПараметрыФискализацииЧека();
|
||
ЗаполнитьЗначенияСвойств(ПараметрыФискализацииСторно, ПараметрыФискализации);
|
||
СформироватьXMLПакетДляФискализацияЧека(ОбщиеПараметрыСторно, ПараметрыФискализацииСторно);
|
||
|
||
ПараметрыФискализации.ЧекКоррекцииСторно = ПараметрыФискализацииСторно;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат ПараметрыФискализации;
|
||
|
||
ИначеЕсли Команда = "PrintCheckCopy" Тогда
|
||
|
||
Аппаратно = ?(ПараметрыОперации.Свойство("Аппаратно"), ПараметрыОперации.Аппаратно, Истина);
|
||
|
||
Если Не Аппаратно Тогда
|
||
ДокументСсылка = ?(ПараметрыОперации.Свойство("ДокументСсылка"), ПараметрыОперации.ДокументСсылка, Неопределено);
|
||
ФискальныйПризнак = ?(ПараметрыОперации.Свойство("ФискальныйПризнак"), ПараметрыОперации.ФискальныйПризнак, Неопределено);
|
||
|
||
Если НЕ ЗначениеЗаполнено(ДокументСсылка) И ПустаяСтрока(ФискальныйПризнак) Тогда
|
||
ТекстОшибки = НСтр("ru = 'Не указаны параметры печати копии документа.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ТекстОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
ФискальнаяОперация = ДанныеФискальнойОперации(ДокументСсылка, Неопределено, Неопределено, Неопределено, ФискальныйПризнак);
|
||
Если ФискальнаяОперация = Неопределено Тогда
|
||
ТекстОшибки = НСтр("ru = 'Фискальный документ для печати копии не найден.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ТекстОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
ПараметрыQRКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ();
|
||
ПараметрыQRКода.ДатаВремяРасчета = ФискальнаяОперация.Дата;
|
||
ПараметрыQRКода.СуммаРасчета = ФискальнаяОперация.Сумма;
|
||
ПараметрыQRКода.ФискальныйПризнак = ФискальнаяОперация.ФискальныйПризнак;
|
||
ПараметрыQRКода.ПризнакРасчета = ФискальнаяОперация.ТипРасчета;
|
||
ПараметрыQRКода.НомерФискальногоНакопителя = ФискальнаяОперация.ЗаводскойНомерФН;
|
||
ПараметрыQRКода.НомерФискальногоДокумента = ФискальнаяОперация.НомерЧекаККМ;
|
||
QRКодЧекаККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СформироватьQRКодЧекаККТ(ПараметрыQRКода);
|
||
|
||
ДанныеXML = ФискальнаяОперация.ДанныеXML.Получить();
|
||
ПараметрыКопииЧека = ЗагрузитьДанныеФискализацииИзXML(ДанныеXML);
|
||
ПараметрыКопииЧека.ДатаВремя = ФискальнаяОперация.Дата;
|
||
|
||
ПараметрыПечати = ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента();
|
||
ПараметрыПечати.Заголовок = НСтр("ru = 'КОПИЯ ЧЕКА'");;
|
||
ПараметрыПечати.ВыводитьФискальнуюИнформацию = Ложь;
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ПараметрыПодключения.ШиринаСтроки, ПараметрыКопииЧека, ФискальнаяОперация, ПараметрыПечати);
|
||
ТекстЧека = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон);
|
||
|
||
ТекстЧека = ПараметрыПечати.Заголовок + Символы.ПС + ТекстЧека;
|
||
ТекстЧека = ТекстЧека + Символы.ПС + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыстроитьПоля(НСтр("ru = 'РН ККТ:'"), ФискальнаяОперация.РегистрационныйНомерККТ, ШиринаСтроки);
|
||
ТекстЧека = ТекстЧека + Символы.ПС + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыстроитьПоля(НСтр("ru = 'ФН №:'") , ФискальнаяОперация.ЗаводскойНомерФН, ШиринаСтроки);
|
||
ТекстЧека = ТекстЧека + Символы.ПС + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыстроитьПоля(НСтр("ru = 'ФД №:'") , Формат(ФискальнаяОперация.НомерЧекаККМ,"ЧГ="), ШиринаСтроки);
|
||
ТекстЧека = ТекстЧека + Символы.ПС + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыстроитьПоля(НСтр("ru = 'ФП:'") , ФискальнаяОперация.ФискальныйПризнак, ШиринаСтроки);
|
||
ТекстЧека = ТекстЧека + Символы.ПС + "|ШтрихКод|QR|" + QRКодЧекаККТ;
|
||
ДанныеОперации.Вставить("ТестовыеЧеки", ПолучитьXMLПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса));
|
||
ДанныеОперации.ТекстЧека = ТекстЧека;
|
||
|
||
ДанныеОперации.Вставить("ТестовыеЧеки", ПолучитьXMLПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса));
|
||
КонецЕсли;
|
||
|
||
ДанныеОперации.Вставить("НомерЧека", ПараметрыОперации.НомерЧека);
|
||
ДанныеОперации.Вставить("Аппаратно", Аппаратно);
|
||
|
||
Возврат ДанныеОперации;
|
||
|
||
ИначеЕсли Команда = "PrintText" Тогда
|
||
|
||
ДанныеОперации.ТестовыеЧеки = ПолучитьXMLПакетДляТекста(ПараметрыОперации.СтрокиТекста, ПараметрыПодключения.РевизияИнтерфейса);
|
||
ДанныеОперации.ТекстЧека = ПараметрыОперации.СтрокиТекста;
|
||
Возврат ДанныеОперации;
|
||
|
||
ИначеЕсли Команда = "PrintQRCode" Тогда
|
||
|
||
ТекстЧека = Символы.ПС;
|
||
ТестовыйЧек = Новый Массив();
|
||
Если Не ПустаяСтрока(ПараметрыОперации.QRКод.ЗначениеКода) Тогда
|
||
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека();
|
||
ТестовыйЧек.Добавить(СтрокаЧека);
|
||
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыШтрихкодВСтрокеЧека("QR", ПараметрыОперации.QRКод.ЗначениеКода);
|
||
ТестовыйЧек.Добавить(СтрокаЧека);
|
||
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека();
|
||
ТестовыйЧек.Добавить(СтрокаЧека);
|
||
|
||
ТекстЧека = ТекстЧека + Символы.ПС + "|ШтрихКод|QR|" + ПараметрыОперации.QRКод.ЗначениеКода + Символы.ПС;
|
||
ТекстЧека = ТекстЧека + Символы.НПП + Символы.ПС;
|
||
|
||
Если Не ПустаяСтрока(ПараметрыОперации.ТипПлатежнойСистемы) Тогда
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ПараметрыОперации.ТипПлатежнойСистемы);
|
||
СтрокаЧека.Выравнивание = "Центр";
|
||
ТестовыйЧек.Добавить(СтрокаЧека);
|
||
ТекстЧека = ТекстЧека + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыровнятьПоле(ПараметрыОперации.ТипПлатежнойСистемы, ПараметрыПодключения.ШиринаСтроки, "Центр") + Символы.ПС;
|
||
КонецЕсли;
|
||
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ПараметрыОперации.QRКод.ТекстПользователя);
|
||
СтрокаЧека.Выравнивание = "Центр";
|
||
ТестовыйЧек.Добавить(СтрокаЧека);
|
||
|
||
Если ЗначениеЗаполнено(ПараметрыОперации.СуммаОперации) Тогда
|
||
ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0";
|
||
ТекстСуммаОперации = СтрШаблон(НСтр("ru='Сумма операции: %1'"), Формат(ПараметрыОперации.СуммаОперации, ФорматЧисла));
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ТекстСуммаОперации);
|
||
СтрокаЧека.Выравнивание = "Центр";
|
||
ТестовыйЧек.Добавить(СтрокаЧека);
|
||
ТекстЧека = ТекстЧека + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыровнятьПоле(ТекстСуммаОперации, ПараметрыПодключения.ШиринаСтроки, "Центр") + Символы.ПС;
|
||
ТекстЧека = ТекстЧека + Символы.НПП + Символы.ПС;
|
||
КонецЕсли;
|
||
|
||
СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека();
|
||
ТестовыйЧек.Добавить(СтрокаЧека);
|
||
КонецЕсли;
|
||
|
||
НефискальныеДокументы = Новый Массив();
|
||
НефискальныеДокументы.Добавить(ТестовыйЧек);
|
||
|
||
ТестовыеЧеки = Новый Массив();
|
||
ЗаполнитьXMLПакетыДляТекстовогоДокумента(
|
||
ТестовыеЧеки, НефискальныеДокументы,
|
||
ПараметрыПодключения,
|
||
ПараметрыПодключения.ШиринаСтроки);
|
||
ДанныеОперации.Вставить("ТестовыеЧеки", ТестовыеЧеки);
|
||
ДанныеОперации.ТекстЧека = ТекстЧека;
|
||
|
||
Возврат ДанныеОперации;
|
||
|
||
ИначеЕсли Команда = "OpenShift" Тогда
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков
|
||
И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда
|
||
ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
ДанныеОперации = ПараметрыФискальнойОперации();
|
||
Если ПараметрыОперации.Свойство("ДополнительныеПараметры") Тогда
|
||
ДанныеОперации.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры;
|
||
КонецЕсли;
|
||
|
||
Если Не ПередОткрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Тогда
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса);
|
||
|
||
Возврат ДанныеОперации;
|
||
|
||
ИначеЕсли Команда = "CloseShift" Тогда
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков
|
||
И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда
|
||
ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
ДанныеОперации = ПараметрыФискальнойОперации();
|
||
Если ПараметрыОперации.Свойство("ДополнительныеПараметры") Тогда
|
||
ДанныеОперации.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры;
|
||
КонецЕсли;
|
||
|
||
Если Не ПередЗакрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Тогда
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса);
|
||
|
||
Возврат ДанныеОперации;
|
||
|
||
ИначеЕсли Команда = "ReportCurrentStatusOfSettlements" Или Команда = "GetCurrentStatus" Тогда
|
||
|
||
Если ПараметрыОперации = Неопределено Тогда
|
||
ПараметрыОперации = Новый Структура();
|
||
КонецЕсли;
|
||
|
||
ДанныеОперации = ПараметрыФискальнойОперации();
|
||
ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса);
|
||
|
||
Возврат ДанныеОперации;
|
||
|
||
ИначеЕсли Команда = "PrintXReport" Тогда
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков
|
||
И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда
|
||
ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыОперации = Неопределено Тогда
|
||
ПараметрыОперации = Новый Структура();
|
||
КонецЕсли;
|
||
|
||
ДанныеОперации = ПараметрыФискальнойОперации();
|
||
ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса);
|
||
|
||
Возврат ДанныеОперации;
|
||
|
||
ИначеЕсли Команда = "Encash" Тогда
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков
|
||
И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда
|
||
ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
ПараметрыФискализации = ПараметрыФискализацииЧека();
|
||
Если ПараметрыОперации.ТипИнкассации = 0 Тогда
|
||
ПараметрыФискализации.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.Выемка
|
||
Иначе
|
||
ПараметрыФискализации.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.Внесение
|
||
КонецЕсли;
|
||
ПараметрыФискализации.ТипИнкассации = ПараметрыОперации.ТипИнкассации;
|
||
ПараметрыФискализации.ДатаВремяЧека = ОбщегоНазначенияБПО.ДатаСеанса();
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
|
||
ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства);
|
||
|
||
ПараметрыФискализации.РегистрационныйНомерККТ = ?(ПараметрыРегистрации.Свойство("РегистрационныйНомерККТ"), ПараметрыРегистрации.РегистрационныйНомерККТ, "");
|
||
ПараметрыФискализации.ЗаводскойНомерФН = ?(ПараметрыРегистрации.Свойство("ЗаводскойНомерФН"), ПараметрыРегистрации.ЗаводскойНомерФН, "");
|
||
ПараметрыФискализации.ШиринаСтроки = ?(ПараметрыПодключения.Свойство("ШиринаСтроки"), ПараметрыПодключения.ШиринаСтроки, 32);
|
||
ПараметрыФискализации.РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса;
|
||
|
||
Если ПараметрыОперации.Свойство("ДокументОснование") Тогда
|
||
ПараметрыФискализации.ДокументОснование = ПараметрыОперации.ДокументОснование;
|
||
КонецЕсли;
|
||
Если ПараметрыОперации.Свойство("Кассир") Тогда
|
||
ПараметрыФискализации.Кассир = ПараметрыОперации.Кассир;
|
||
КонецЕсли;
|
||
Если ПараметрыОперации.Свойство("Организация") Тогда
|
||
ПараметрыФискализации.Организация = ПараметрыОперации.Организация;
|
||
КонецЕсли;
|
||
Если ПараметрыОперации.Свойство("ТорговыйОбъект") Тогда
|
||
ПараметрыФискализации.ТорговыйОбъект = ПараметрыОперации.ТорговыйОбъект;
|
||
КонецЕсли;
|
||
ПараметрыФискализации.СуммаЧека = ПараметрыОперации.Сумма;
|
||
ПараметрыФискализации.ОплатаНаличные = ПараметрыОперации.Сумма;
|
||
ПараметрыФискализации.ДанныеЧекаXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса);
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат ПараметрыФискализации;
|
||
|
||
ИначеЕсли Команда = "OperationFN" Тогда
|
||
|
||
ДанныеОперации = ПараметрыФискальнойОперации();
|
||
ДанныеОперации.Вставить("ТипОперации", ПараметрыОперации.ТипОперации);
|
||
РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса;
|
||
ДанныеОперации.ПараметрыXML = СформироватьТаблицуПараметровДляОперацииФН(ПараметрыОперации, РевизияИнтерфейса);
|
||
Возврат ДанныеОперации;
|
||
|
||
ИначеЕсли Команда = "RequestKM" Или Команда = "RequestKMKMNoWait" Тогда
|
||
|
||
ДанныеОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыЗапросКМ();
|
||
|
||
СтатусПоследнейСмены = ПолучитьСтатусПоследнейСмены(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Если Не СтатусПоследнейСмены.Активна = Истина Тогда
|
||
ОписаниеОшибки = НСтр("ru='Кассовая смена не открыта или истекла.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
// ++ Локализация
|
||
Если Команда = "RequestKMKMNoWait" Тогда
|
||
ПараметрыОперации.ОжидатьПолучениеОтветаОИСМ = Ложь;
|
||
КонецЕсли;
|
||
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда
|
||
Если ПустаяСтрока(ПараметрыОперации.ИдентификаторЗапроса) Тогда
|
||
ПараметрыОперации.ИдентификаторЗапроса = Новый УникальныйИдентификатор;
|
||
КонецЕсли;
|
||
|
||
Если Не ПустаяСтрока(ПараметрыОперации.КонтрольнаяМарка) Тогда
|
||
ДанныеОперации.Результат = Истина;
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
ДанныеОперации.Вставить("ПараметрыXML",
|
||
МодульМенеджерОборудованияМаркировка.СформироватьXMLДляЗапросаКМ(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса));
|
||
ЗаполнитьЗначенияСвойств(ДанныеОперации, ПараметрыОперации);
|
||
Иначе
|
||
ТекстОшибки = НСтр("ru = 'Контрольная марка не может быть пустой.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ТекстОшибки;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат ДанныеОперации;
|
||
// -- Локализация
|
||
|
||
ИначеЕсли Команда = "CheckKM" Тогда
|
||
|
||
ДанныеОперации = ОбщегоНазначенияБПО.СкопироватьРекурсивно(ПараметрыОперации);
|
||
ДанныеОперации.Вставить("Результат", Истина);
|
||
ДанныеОперации.Вставить("ТекстОшибки", "");
|
||
// ++ Локализация
|
||
СтатусПоследнейСмены = ПолучитьСтатусПоследнейСмены(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Если Не СтатусПоследнейСмены.Активна = Истина Тогда
|
||
ОписаниеОшибки = НСтр("ru='Кассовая смена не открыта или истекла.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
|
||
Для Каждого Операция Из ДанныеОперации.ЗапросыКМ Цикл
|
||
Если ПустаяСтрока(Операция.ИдентификаторЗапроса) Тогда
|
||
Операция.ИдентификаторЗапроса = Строка(Новый УникальныйИдентификатор);
|
||
КонецЕсли;
|
||
Операция.ОтправлятьНаСерверОИСМ = Операция.ЗапросПроверкиКМСредствамиККТ;
|
||
Операция.Вставить("ПараметрыXML", МодульМенеджерОборудованияМаркировка.СформироватьXMLДляЗапросаКМ(Операция, ПараметрыПодключения.РевизияИнтерфейса));
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
// -- Локализация
|
||
Возврат ДанныеОперации;
|
||
|
||
ИначеЕсли Команда = "CheckFiscalizationPacket" Тогда
|
||
|
||
СтатусПоследнейСмены = ПолучитьСтатусПоследнейСмены(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Если Не СтатусПоследнейСмены.Активна = Истина Тогда
|
||
ОписаниеОшибки = НСтр("ru='Кассовая смена не открыта или истекла.'");
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = ОписаниеОшибки;
|
||
Возврат ДанныеОперации;
|
||
КонецЕсли;
|
||
|
||
ДанныеОперации = ПараметрыФискализацииЧека();
|
||
|
||
Если ПараметрыОперации <> Неопределено И ПараметрыОперации.Свойство("ДанныеЧекаXML") Тогда
|
||
ДанныеОперации.ДанныеЧекаXML = ПараметрыОперации.ДанныеЧекаXML;
|
||
КонецЕсли;
|
||
|
||
Возврат ДанныеОперации;
|
||
|
||
КонецЕсли
|
||
|
||
КонецФункции
|
||
|
||
// Обработать данные операции после выполнения команды.
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура - см. МенеджерОборудованияКлиентСервер.ПараметрыПодключения()
|
||
// Команда - Строка - команда для выполнения
|
||
// РезультатВыполнения - Структура -
|
||
// ДанныеОперации - Структура -
|
||
Процедура ОбработатьДанныеОперации(ПараметрыПодключения, Команда, РезультатВыполнения, ДанныеОперации) Экспорт
|
||
|
||
РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса;
|
||
|
||
Если Команда = "CheckFiscalization" Или Команда = "CheckFiscalizationPacket" Тогда
|
||
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
// Заполнить результаты фискализация чека из XML пакета.
|
||
ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ДанныеОперации);
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения.Вставить("НомерСменыККТ" , ДанныеОперации.НомерСменыККТ);
|
||
РезультатВыполнения.Вставить("НомерЧекаККТ" , ДанныеОперации.НомерЧекаККТ);
|
||
РезультатВыполнения.Вставить("СтатусСмены", 2);
|
||
РезультатВыполнения.Вставить("ДатаВремяЧека" , ДанныеОперации.ДатаВремяЧека);
|
||
РезультатВыполнения.Вставить("ФискальныйПризнак" , ДанныеОперации.ФискальныйПризнак);
|
||
РезультатВыполнения.Вставить("АдресСайтаПроверки" , ДанныеОперации.АдресСайтаПроверки);
|
||
РезультатВыполнения.Вставить("ОшибкаПечати" , ДанныеОперации.ОшибкаПечати);
|
||
РезультатВыполнения.Вставить("РегистрационныйНомерККТ", ДанныеОперации.РегистрационныйНомерККТ);
|
||
РезультатВыполнения.Вставить("ДанныеЧекаXML" , ДанныеОперации.ДанныеЧекаXML);
|
||
РезультатВыполнения.Вставить("ОперацияЗаписана" , Истина);
|
||
РезультатВыполнения.Вставить("ПараметрыФискализации" , ДанныеОперации);
|
||
|
||
Попытка
|
||
// Записать фискальную операцию.
|
||
ЗаписатьФискальнуюОперацию(ДанныеОперации);
|
||
Исключение
|
||
ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации(
|
||
НСтр("ru = 'Запись фискальной операции'"),
|
||
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
РезультатВыполнения.ОперацияЗаписана = Ложь;
|
||
КонецПопытки;
|
||
|
||
ПараметрыQRКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ();
|
||
ПараметрыQRКода.ДатаВремяРасчета = ДанныеОперации.ДатаВремяЧека;
|
||
ПараметрыQRКода.СуммаРасчета = ДанныеОперации.СуммаЧека;
|
||
ПараметрыQRКода.ФискальныйПризнак = ДанныеОперации.ФискальныйПризнак;
|
||
ПараметрыQRКода.ПризнакРасчета = ДанныеОперации.ТипРасчета;
|
||
ПараметрыQRКода.НомерФискальногоНакопителя = ДанныеОперации.ЗаводскойНомерФН;
|
||
ПараметрыQRКода.НомерФискальногоДокумента = ДанныеОперации.НомерЧекаККТ;
|
||
QRКодЧекаККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СформироватьQRКодЧекаККТ(ПараметрыQRКода);
|
||
|
||
// Отправить электронный чек через рассылку
|
||
Если (ДанныеОперации.Отправляет1СSMS Или ДанныеОперации.Отправляет1СEmail) Тогда
|
||
МодульРассылкаЭлектронныхЧеков = ОбщегоНазначенияБПО.ОбщийМодуль("РассылкаЭлектронныхЧеков");
|
||
Если МодульРассылкаЭлектронныхЧеков <> Неопределено Тогда
|
||
ТекстСообщения = МодульРассылкаЭлектронныхЧеков.ШаблонАтрибутовЧекаДляОтсылки(ДанныеОперации);
|
||
МодульРассылкаЭлектронныхЧеков.ОтправитьЭлектронныйЧек(
|
||
ДанныеОперации,
|
||
ТекстСообщения,
|
||
ДанныеОперации.ПокупательEmail,
|
||
ДанныеОперации.ПокупательНомер);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения.Вставить("QRКодЧекаККТ", QRКодЧекаККТ);
|
||
|
||
ИначеЕсли Команда = "PrintReceiptCorrection" Тогда
|
||
|
||
// Заполнить результаты фискализация чека из XML пакета.
|
||
ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ДанныеОперации);
|
||
|
||
РезультатВыполнения.Вставить("НомерСменыККТ" , ДанныеОперации.НомерСменыККТ);
|
||
РезультатВыполнения.Вставить("НомерЧекаККТ" , ДанныеОперации.НомерЧекаККТ);
|
||
РезультатВыполнения.Вставить("СтатусСмены", 2);
|
||
РезультатВыполнения.Вставить("ДатаВремяЧека" , ДанныеОперации.ДатаВремяЧека);
|
||
РезультатВыполнения.Вставить("ФискальныйПризнак" , ДанныеОперации.ФискальныйПризнак);
|
||
РезультатВыполнения.Вставить("АдресСайтаПроверки" , ДанныеОперации.АдресСайтаПроверки);
|
||
РезультатВыполнения.Вставить("ОшибкаПечати" , ДанныеОперации.ОшибкаПечати);
|
||
РезультатВыполнения.Вставить("РегистрационныйНомерККТ", ДанныеОперации.РегистрационныйНомерККТ);
|
||
РезультатВыполнения.Вставить("ДанныеЧекаXML" , ДанныеОперации.ДанныеЧекаXML);
|
||
РезультатВыполнения.Вставить("ОперацияЗаписана" , Истина);
|
||
РезультатВыполнения.Вставить("ПараметрыФискализации" , ДанныеОперации);
|
||
|
||
Если НЕ ДанныеОперации.НеприменениеККТ И ДанныеОперации.СформироватьЧекКоррекцииСторно Тогда
|
||
// Заполнить результаты фискализация чека из XML пакета.
|
||
ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ДанныеОперации.ЧекКоррекцииСторно);
|
||
Попытка
|
||
// Записать фискальную операцию - сторно.
|
||
ЗаписатьФискальнуюОперацию(ДанныеОперации.ЧекКоррекцииСторно);
|
||
Исключение
|
||
РезультатВыполнения.ОперацияЗаписана = Ложь;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
// Записать фискальную операцию.
|
||
ЗаписатьФискальнуюОперацию(ДанныеОперации);
|
||
Исключение
|
||
РезультатВыполнения.ОперацияЗаписана = Ложь;
|
||
КонецПопытки;
|
||
|
||
ИначеЕсли Команда = "CloseShift" Тогда
|
||
|
||
РезультатВыполнения.Вставить("НомерСменыККТ", ДанныеОперации.НомерСменыККТ);
|
||
РезультатВыполнения.Вставить("НомерЧекаККТ" , ДанныеОперации.НомерЧекаККТ);
|
||
РезультатВыполнения.Вставить("СтатусСмены" , ДанныеОперации.СтатусСмены);
|
||
РезультатВыполнения.Вставить("КассоваяСмена" , ДанныеОперации.КассоваяСмена);
|
||
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML, РевизияИнтерфейса);
|
||
РезультатВыполнения.НомерСменыККТ = ФискальныеДанныеСтруктура.НомерСменыККТ;
|
||
РезультатВыполнения.НомерЧекаККТ = ФискальныеДанныеСтруктура.НомерЧекаККТ;
|
||
РезультатВыполнения.СтатусСмены = ФискальныеДанныеСтруктура.СтатусСмены;
|
||
Иначе
|
||
ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML);
|
||
ФискальныеДанныеСтруктура.НомерСменыККТ = ДанныеОперации.НомерСменыККТ;
|
||
ФискальныеДанныеСтруктура.СтатусСмены = 1; // Закрыта
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения.Вставить("ФискальныеДанныеСтруктура", ФискальныеДанныеСтруктура);
|
||
РезультатВыполнения.Вставить("ФискальныеДанныеXMLСтрока", ДанныеОперации.РезультатXML);
|
||
Если ДанныеОперации.Свойство("ДополнительныеПараметры") Тогда
|
||
РезультатВыполнения.Вставить("ДополнительныеПараметры", ДанныеОперации.ДополнительныеПараметры);
|
||
КонецЕсли;
|
||
|
||
ПослеЗакрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения);
|
||
|
||
ИначеЕсли Команда = "OpenShift" Тогда
|
||
|
||
РезультатВыполнения.Вставить("НомерСменыККТ" , ДанныеОперации.НомерСменыККТ);
|
||
РезультатВыполнения.Вставить("НомерЧекаККТ" , ДанныеОперации.НомерЧекаККТ);
|
||
РезультатВыполнения.Вставить("СтатусСмены" , ДанныеОперации.СтатусСмены);
|
||
РезультатВыполнения.Вставить("КассоваяСмена" , ДанныеОперации.КассоваяСмена);
|
||
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML, РевизияИнтерфейса);
|
||
РезультатВыполнения.НомерСменыККТ = ФискальныеДанныеСтруктура.НомерСменыККТ;
|
||
РезультатВыполнения.НомерЧекаККТ = ФискальныеДанныеСтруктура.НомерЧекаККТ;
|
||
РезультатВыполнения.СтатусСмены = ФискальныеДанныеСтруктура.СтатусСмены;
|
||
Иначе // Версия стандарта 2.2 и выше (ОФД 1.05)
|
||
ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML, РевизияИнтерфейса);
|
||
ФискальныеДанныеСтруктура.НомерСменыККТ = ДанныеОперации.НомерСменыККТ;
|
||
ФискальныеДанныеСтруктура.СтатусСмены = 2; // Открыта
|
||
КонецЕсли;
|
||
РезультатВыполнения.Вставить("ФискальныеДанныеСтруктура", ФискальныеДанныеСтруктура);
|
||
РезультатВыполнения.Вставить("ФискальныеДанныеXMLСтрока", ДанныеОперации.РезультатXML);
|
||
Если ДанныеОперации.Свойство("ДополнительныеПараметры") Тогда
|
||
РезультатВыполнения.Вставить("ДополнительныеПараметры", ДанныеОперации.ДополнительныеПараметры);
|
||
КонецЕсли;
|
||
|
||
Если ДанныеОперации.Свойство("ПараметрыККТ") И Не ПустаяСтрока(ДанныеОперации.ПараметрыККТ) Тогда
|
||
ПараметрыККТ = ПараметрыИзXMLПакетаККТ(ДанныеОперации.ПараметрыККТ, РевизияИнтерфейса);
|
||
СохранитьПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства, ПараметрыККТ);
|
||
|
||
ВедетсяУчетПродукцииИСМП = МенеджерОборудования.ВедетсяУчетПродукцииИСМП();
|
||
Если ПараметрыККТ.Свойство("ВерсияФФДККТ") И ПараметрыККТ.ВерсияФФДККТ <> "1.2" Тогда
|
||
// Письмо Федеральной налоговой службы от 28 октября 2021 г. № ПА-4-20/15207@ О переходе ККТ на ФФД 1.2
|
||
Если ВедетсяУчетПродукцииИСМП Тогда
|
||
ТекстСообщения = НСтр("ru='При осуществлении расчетов за маркированные товары необходимо перейти на ККТ с ФФД версии 1.2 в срок до 01.02.2022.'") + Символы.ПС
|
||
+ НСтр("ru='Письмо ФНС от 28 октября 2021 г. № ПА-4-20/15207@ «О переходе ККТ на ФФД 1.2»'");
|
||
ОбщегоНазначенияБПО.СообщитьПользователю(ТекстСообщения);
|
||
КонецЕсли;
|
||
ИначеЕсли ПараметрыККТ.Свойство("ВерсияФФДККТ") И ПараметрыККТ.ВерсияФФДККТ = "1.2" И ВедетсяУчетПродукцииИСМП Тогда
|
||
Если НЕ ПараметрыККТ.ПродажаМаркированныхТоваров Тогда
|
||
ТекстСообщения = НСтр("ru='ККТ не зарегистрирована для работы с маркированной продукцией.'") + Символы.ПС
|
||
+ НСтр("ru='Необходимо провести перерегистрацию ККТ.'");
|
||
ОбщегоНазначенияБПО.СообщитьПользователю(ТекстСообщения);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
ПараметрыККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ();
|
||
КонецЕсли;
|
||
РезультатВыполнения.Вставить("ПараметрыККТ" , ПараметрыККТ);
|
||
|
||
ПослеОткрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения);
|
||
|
||
ИначеЕсли Команда = "Encash" Тогда
|
||
|
||
Попытка
|
||
// Записать фискальную операцию.
|
||
ЗаписатьФискальнуюОперацию(ДанныеОперации);
|
||
Исключение
|
||
РезультатВыполнения.ОперацияЗаписана = Ложь;
|
||
КонецПопытки;
|
||
|
||
ИначеЕсли Команда = "GetDataKKT" Тогда
|
||
|
||
ПараметрыККТ = ПараметрыИзXMLПакетаККТ(РезультатВыполнения.ПараметрыККТXML, РевизияИнтерфейса);
|
||
РезультатВыполнения.Вставить("ПараметрыККТ" , ПараметрыККТ);
|
||
|
||
СохранитьПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства, ПараметрыККТ);
|
||
|
||
ИначеЕсли Команда = "GetCurrentStatus" Тогда
|
||
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML, РевизияИнтерфейса);
|
||
НомерСменыККТ = ФискальныеДанныеСтруктура.НомерСменыККТ;
|
||
НомерЧекаККТ = ФискальныеДанныеСтруктура.НомерЧекаККТ;
|
||
СтатусСмены = ФискальныеДанныеСтруктура.СтатусСмены;
|
||
Иначе
|
||
ФискальныеДанныеСтруктура = ПолучитьПараметрыСостоянияИзXMLПакета(ДанныеОперации.РезультатXML);
|
||
НомерСменыККТ = ДанныеОперации.НомерСменыККТ;
|
||
НомерЧекаККТ = ДанныеОперации.НомерЧекаККТ;
|
||
СтатусСмены = ДанныеОперации.СтатусСмены;
|
||
КонецЕсли;
|
||
РезультатВыполнения.Вставить("НомерСменыККТ" , НомерСменыККТ);
|
||
РезультатВыполнения.Вставить("НомерЧекаККТ" , НомерЧекаККТ);
|
||
РезультатВыполнения.Вставить("СтатусСмены", СтатусСмены);
|
||
РезультатВыполнения.Вставить("ФискальныеДанные", ФискальныеДанныеСтруктура);
|
||
|
||
ИначеЕсли Команда = "RequestKM" Тогда
|
||
|
||
// ++ Локализация
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
ДанныеСтруктура = МодульМенеджерОборудованияМаркировка.ПолучитьРезультатыЗапросаКМИзXMLПакета(РезультатВыполнения.РезультатXML);
|
||
РезультатВыполнения.Вставить("КодМаркировкиПроверен", ДанныеСтруктура.КодМаркировкиПроверен);
|
||
РезультатВыполнения.Вставить("РезультатПроверки", ДанныеСтруктура.РезультатПроверки);
|
||
КонецЕсли;
|
||
// -- Локализация
|
||
|
||
ИначеЕсли Команда = "GetProcessingKMResult" Или Команда = "RequestKMKMNoWait" Тогда
|
||
|
||
// ++ Локализация
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
РезультатВыполнения = МодульМенеджерОборудованияМаркировка.ПолучитьРезультатыОИСМКМИзXMLПакета(ДанныеОперации.РезультатXML, РезультатВыполнения);
|
||
РезультатВыполнения.СтатусРезультата = МодульМенеджерОборудованияМаркировка.СтатусРезультатаЗапросаКМПоКоду(ДанныеОперации.СтатусРезультатаКод);
|
||
РезультатВыполнения.Вставить("РезультатXML", ДанныеОперации.РезультатXML);
|
||
|
||
Попытка
|
||
Если РезультатВыполнения.Свойство("ЗапросКМ") И РезультатВыполнения.ЗапросКМ <> Неопределено Тогда
|
||
СтатусРезультатаКод = ДанныеОперации.СтатусРезультатаКод;
|
||
Если СтатусРезультатаКод = 0 Или СтатусРезультатаКод = 2 Тогда
|
||
РезультатВыполненияЗапросаКМ = РезультатВыполнения.ЗапросКМ.РезультатВыполнения;
|
||
ДанныеОперацииЗапросаКМ = РезультатВыполнения.ЗапросКМ.ДанныеОперации;
|
||
|
||
ПараметрыЗаписи = МодульМенеджерОборудованияМаркировка.ПараметрыЗаписиРезультатаПроверкиКМ();
|
||
ПараметрыЗаписи.Ключ.ИдентификаторСессии = РезультатВыполненияЗапросаКМ.ИдентификаторСессии;
|
||
ПараметрыЗаписи.Ключ.ИдентификаторЗапроса = РезультатВыполненияЗапросаКМ.ИдентификаторЗапроса;
|
||
ПараметрыЗаписи.Результат = РезультатВыполнения.Результат;
|
||
ПараметрыЗаписи.ЗапросКМ = ДанныеОперацииЗапросаКМ;
|
||
ПараметрыЗаписи.ФлагиПроверкиОИСМ = РезультатВыполнения.РезультатПроверкиОИСМПредставление;
|
||
ПараметрыЗаписи.ЛокальныйОтветXML = РезультатВыполненияЗапросаКМ.РезультатXML;
|
||
ПараметрыЗаписи.УдаленныйОтветXML = РезультатВыполнения.РезультатXML;
|
||
ПараметрыЗаписи.ПокупкаПодтверждена = Истина;
|
||
МассивПараметровЗаписей = Новый Массив();
|
||
МассивПараметровЗаписей.Добавить(ПараметрыЗаписи);
|
||
|
||
МодульМенеджерОборудованияМаркировка.ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(МассивПараметровЗаписей);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Исключение
|
||
|
||
ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации(
|
||
НСтр("ru = 'Ошибка записи в журнал проверки кода маркировки.'"),
|
||
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
|
||
КонецПопытки;
|
||
|
||
КонецЕсли;
|
||
// -- Локализация
|
||
|
||
ИначеЕсли Команда = "CheckKM" Тогда
|
||
|
||
// ++ Локализация
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда
|
||
|
||
Если Не РезультатВыполнения.Результат Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
МассивПараметровЗаписей = Новый Массив();
|
||
МассивДанныхОбмена = Новый Массив();
|
||
Для каждого Результат Из РезультатВыполнения.РезультатыОпераций Цикл
|
||
Параметры = Новый Структура();
|
||
МодульМенеджерОборудованияМаркировка.ПолучитьРезультатыОИСМКМИзXMLПакета(Результат.Служебная.УдаленныйОтветXML, Параметры);
|
||
Результат.Вставить("РезультатПроверкиСведенийОТоваре", Параметры.РезультатПроверкиСведенийОТоваре);
|
||
Результат.Вставить("РезультатПроверкиСведенийОТовареПФ", Параметры.РезультатПроверкиСведенийОТовареПФ);
|
||
Результат.Вставить("СтатусТовара", Параметры.СтатусТовара);
|
||
// для обратной совместимости
|
||
ДанныеСтруктура = МодульМенеджерОборудованияМаркировка.ПолучитьРезультатыЗапросаКМИзXMLПакета(Результат.Служебная.ЛокальныйОтветXML);
|
||
Результат.Вставить("КодМаркировкиПроверен", ДанныеСтруктура.КодМаркировкиПроверен);
|
||
Результат.Вставить("РезультатПроверки", ДанныеСтруктура.РезультатПроверки);
|
||
|
||
Результат.Вставить("РезультатПроверкиОИСМ", Параметры.РезультатПроверкиОИСМ);
|
||
Результат.Вставить("КодРезультатаПроверкиОИСМ", Параметры.КодРезультатаПроверкиОИСМ);
|
||
Результат.Вставить("РезультатПроверкиОИСМПредставление", Параметры.РезультатПроверкиОИСМПредставление);
|
||
Результат.Вставить("КодОбработкиЗапроса", Параметры.КодОбработкиЗапроса);
|
||
|
||
ПараметрыЗаписи = МодульМенеджерОборудованияМаркировка.ПараметрыЗаписиРезультатаПроверкиКМ();
|
||
ПараметрыЗаписи.Ключ.ИдентификаторСессии = РезультатВыполнения.ИдентификаторСессии;
|
||
ПараметрыЗаписи.Ключ.ИдентификаторЗапроса = Результат.ИдентификаторЗапроса;
|
||
ПараметрыЗаписи.Результат = Результат.Результат;
|
||
ПараметрыЗаписи.ЗапросКМ = Результат.Служебная.ЗапросКМ;
|
||
ПараметрыЗаписи.ФлагиПроверкиОИСМ = Параметры.РезультатПроверкиОИСМПредставление;
|
||
ПараметрыЗаписи.ЛокальныйОтветXML = Результат.Служебная.ЛокальныйОтветXML;
|
||
ПараметрыЗаписи.УдаленныйОтветXML = Результат.Служебная.УдаленныйОтветXML;
|
||
ПараметрыЗаписи.ПокупкаПодтверждена = Результат.Служебная.ПокупкаПодтверждена;
|
||
МассивПараметровЗаписей.Добавить(ПараметрыЗаписи);
|
||
|
||
ДанныеОбмена = Новый Структура();
|
||
ДанныеОбмена.Вставить("ЗапросКМ", ПараметрыЗаписи.ЗапросКМ.ПараметрыXML);
|
||
ДанныеОбмена.Вставить("ЛокальныйОтветКМ", ПараметрыЗаписи.ЛокальныйОтветXML);
|
||
ДанныеОбмена.Вставить("УдаленныйОтветКМ", ПараметрыЗаписи.УдаленныйОтветXML);
|
||
МассивДанныхОбмена.Добавить(ДанныеОбмена);
|
||
|
||
КонецЦикла;
|
||
МенеджерОборудованияВызовСервераПереопределяемый.ПослеПроверкиКодовМаркировки(МассивДанныхОбмена);
|
||
МодульМенеджерОборудованияМаркировка.ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(МассивПараметровЗаписей);
|
||
КонецЕсли;
|
||
// -- Локализация
|
||
|
||
ИначеЕсли Команда = "OperationFN" Тогда
|
||
|
||
Если ДанныеОперации.Свойство("ПараметрыККТ") И Не ПустаяСтрока(ДанныеОперации.ПараметрыККТ) Тогда
|
||
ПараметрыККТ = ПараметрыИзXMLПакетаККТ(ДанныеОперации.ПараметрыККТ, РевизияИнтерфейса);
|
||
РезультатВыполнения.Вставить("ПараметрыККТ" , ПараметрыККТ);
|
||
СохранитьПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства, ПараметрыККТ);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ПередОткрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Экспорт
|
||
|
||
Результат = Истина;
|
||
|
||
Если ИспользуетсяКассовыеСмены() Тогда
|
||
ОписаниеКассовойСмены = ОписаниеПоследнейКассовойСмены(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Если ОписаниеКассовойСмены <> Неопределено И ОписаниеКассовойСмены.Статус = Перечисления.СтатусыКассовойСмены.Открыта Тогда
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = НСтр("ru='Кассовая смена уже открыта.'");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПередЗакрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Экспорт
|
||
|
||
Результат = Истина;
|
||
|
||
Если ИспользуетсяКассовыеСмены() Тогда
|
||
ОписаниеКассовойСмены = ОписаниеПоследнейКассовойСмены(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Если ОписаниеКассовойСмены = Неопределено Тогда
|
||
ДанныеОперации.КассоваяСмена = НоваяКассоваяСмена(ПараметрыПодключения.ИдентификаторУстройства, ДанныеОперации);
|
||
ИначеЕсли ОписаниеКассовойСмены.Статус = Перечисления.СтатусыКассовойСмены.Открыта Тогда
|
||
ДанныеОперации.КассоваяСмена = ОписаниеКассовойСмены.КассоваяСмена;
|
||
Иначе
|
||
ДанныеОперации.Результат = Ложь;
|
||
ДанныеОперации.ТекстОшибки = НСтр("ru='Кассовая смена уже закрыта.'");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПослеОткрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения) Экспорт
|
||
|
||
Результат = Истина;
|
||
|
||
КассоваяСмена = НоваяКассоваяСмена(ПараметрыПодключения.ИдентификаторУстройства, РезультатВыполнения);
|
||
Если Не ЗначениеЗаполнено(РезультатВыполнения.КассоваяСмена) Тогда
|
||
РезультатВыполнения.КассоваяСмена = КассоваяСмена;
|
||
КонецЕсли;
|
||
|
||
МенеджерОборудованияВызовСервераПереопределяемый.ПослеОткрытияКассовойСмены(ПараметрыПодключения.ИдентификаторУстройства, РезультатВыполнения);
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПослеЗакрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения) Экспорт
|
||
|
||
Результат = Истина;
|
||
|
||
ЗакрытьКассовуюСмену(РезультатВыполнения);
|
||
|
||
МенеджерОборудованияВызовСервераПереопределяемый.ПослеЗакрытияКассовойСмены(ПараметрыПодключения.ИдентификаторУстройства, РезультатВыполнения);
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция XMLПакетИнфоКвитанции(Данные, ШиринаСтроки, РевизияИнтерфейса) Экспорт
|
||
|
||
Шаблон = ШаблоныФискальныхДокументов.ШаблонИнфоКвитанция(ШиринаСтроки, Данные);
|
||
Текст = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон);
|
||
|
||
Возврат ОборудованиеЧекопечатающиеУстройства.ПолучитьXMLПакетДляТекста(Текст, РевизияИнтерфейса);
|
||
КонецФункции
|
||
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
#Область ФормированиеДанныхККТ
|
||
|
||
Процедура ЗаполнитьДанныеПлатежныхОпераций(ОбщиеПараметры)
|
||
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда
|
||
|
||
ДополнительныйРеквизитПользователя = ОбщиеПараметры.ДополнительныйРеквизитПользователя;
|
||
|
||
МодульОборудованиеПлатежныеСистемы = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеПлатежныеСистемы");
|
||
ПлатежныеОперации = МодульОборудованиеПлатежныеСистемы.ДанныеПлатежныхОпераций(Неопределено, ОбщиеПараметры.ДокументОснование);
|
||
|
||
Если ПлатежныеОперации.Количество() > 0 Тогда
|
||
|
||
Операция = ПлатежныеОперации[0]; // Первая операция, в рамках пилотного проекта.
|
||
// Префикс «epay» как признак того, что тег 1086 содержит специфичную для передачи информацию по безналичному способу расчета;
|
||
Если НЕ ПустаяСтрока(ДополнительныйРеквизитПользователя.Наименование) Тогда
|
||
ДополнительныйРеквизитПользователя.Наименование = Строка(ДополнительныйРеквизитПользователя.Наименование) + ";";
|
||
КонецЕсли;
|
||
ДополнительныйРеквизитПользователя.Наименование = Строка(ДополнительныйРеквизитПользователя.Наименование) + "epay";
|
||
|
||
// В теге 1086 блоки информации разделяются символом «;»
|
||
ДатаВремяТранзакции = Формат(Операция.ДатаВремяТранзакции - Дата(1970,1,1,1,0,0), "ЧГ=0"); // Дата и время в формате UnixTime)
|
||
РеквизитЗначение = СтрШаблон("date=%1&rrn=%2&tid=%3&ps=%4&acq=%5&auth=%6&uuid=%7",
|
||
ДатаВремяТранзакции, // Дата и время инициализации транзакции, содержит локальную дату и время инициализации транзакции UnixTime
|
||
Операция.СсылочныйНомер, // RNN - Идентификатор банковской транзакции.
|
||
Операция.ИдентификаторТерминала, // TID - Уникальный идентификационный номер POS-терминала.
|
||
Операция.ИдентификаторПлатежнойСистемы, // PS - Уникальный идентификатор платежной системы, через которую проводилась операция.
|
||
Операция.ИдентификаторБанкаЭквайера, // ACQ - Уникальный идентификатор банка-эквайера используемый на POS-терминале.
|
||
Операция.КодАвторизации, // AUTH - Код авторизации, который присваивается банком-эмитентом.
|
||
Операция.ИдентификаторФискальнойОперации); // UUID - Уникальный идентификатор банковской транзакции, формируемый на стороне банка-эмитента.
|
||
Если НЕ ПустаяСтрока(ДополнительныйРеквизитПользователя.Значение) Тогда
|
||
ДополнительныйРеквизитПользователя.Значение = Строка(ДополнительныйРеквизитПользователя.Значение) + ";";
|
||
КонецЕсли;
|
||
ДополнительныйРеквизитПользователя.Значение = Строка(ДополнительныйРеквизитПользователя.Значение) + РеквизитЗначение;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Заменяет типы оплаты при коррекции, используется только при ФФД 1.05
|
||
Процедура ЗаменитьТипыОплатыПриКоррекции(ОбщиеПараметры, ОбщиеПараметрыСторно = Неопределено)
|
||
|
||
// Необходимо изменить вид оплат на «ВстречноеПредоставление»
|
||
Для Каждого ЭлементМассива Из ОбщиеПараметры.ТаблицаОплат Цикл
|
||
ЭлементМассива.ТипОплаты = Перечисления.ТипыОплатыККТ.ВстречноеПредоставление;
|
||
КонецЦикла;
|
||
|
||
Если ОбщиеПараметрыСторно = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
// Необходимо изменить вид оплат на «ВстречноеПредоставление»
|
||
Для Каждого ЭлементМассива Из ОбщиеПараметрыСторно.ТаблицаОплат Цикл
|
||
ЭлементМассива.ТипОплаты = Перечисления.ТипыОплатыККТ.ВстречноеПредоставление;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПодготовитьЧекКоррекции(ОбщиеПараметры, ОбщиеПараметрыСторно, ВерсияФФДККТ11)
|
||
|
||
// Меняем признак типа расчета на противоположный.
|
||
Если ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств Тогда
|
||
ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств;
|
||
ИначеЕсли ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств Тогда
|
||
ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств;
|
||
ИначеЕсли ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств Тогда
|
||
ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств;
|
||
ИначеЕсли ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств Тогда
|
||
ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// ++ Локализация
|
||
|
||
Процедура ЗаписатьДанныеКоррекции(ЗаписьXML, ДанныеКоррекции)
|
||
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("CorrectionData");
|
||
ТипКоррекции = ?(ПустаяСтрока(ДанныеКоррекции.ТипКоррекции), 0, ДанныеКоррекции.ТипКоррекции);
|
||
ЗаписьXML.ЗаписатьАтрибут("Type", XMLСтрока(ТипКоррекции));
|
||
Если Не ПустаяСтрока(ДанныеКоррекции.ДатаКоррекции) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Date", XMLСтрока(НачалоДня(ДанныеКоррекции.ДатаКоррекции)));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеКоррекции.НомерПредписания) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Number", XMLСтрока(ДанныеКоррекции.НомерПредписания));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеКоррекции.ОписаниеКоррекции) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Description", XMLСтрока(ДанныеКоррекции.ОписаниеКоррекции));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
|
||
КонецПроцедуры
|
||
|
||
// Записывает данные агента в XML файл
|
||
//
|
||
// Параметры:
|
||
// ЗаписьXML - ЗаписьXML
|
||
// ДанныеАгента - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента
|
||
// РевизияИнтерфейса - Число
|
||
//
|
||
Процедура ЗаписатьДанныеАгента(ЗаписьXML, ДанныеАгента, РевизияИнтерфейса = 0)
|
||
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("AgentData");
|
||
Если Не ПустаяСтрока(ДанныеАгента.ПлатежныйАгент.Операция) Тогда // Операция платежного агента
|
||
ЗаписьXML.ЗаписатьАтрибут("AgentOperation", XMLСтрока(ДанныеАгента.ПлатежныйАгент.Операция));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ПлатежныйАгент.Телефон) Тогда // Телефон платежного агента
|
||
Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ПлатежныйАгент.Телефон);
|
||
ЗаписьXML.ЗаписатьАтрибут("AgentPhone", Телефон);
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ОператорПоПриемуПлатежей.Телефон) Тогда // Телефон оператора по приему платежей
|
||
Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ОператорПоПриемуПлатежей.Телефон);
|
||
ЗаписьXML.ЗаписатьАтрибут("PaymentProcessorPhone", Телефон);
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Телефон) Тогда // Телефон оператора перевода
|
||
Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ОператорПеревода.Телефон);
|
||
ЗаписьXML.ЗаписатьАтрибут("AcquirerOperatorPhone", Телефон);
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Наименование) Тогда // Наименование оператора перевода
|
||
ЗаписьXML.ЗаписатьАтрибут("AcquirerOperatorName" , XMLСтрока(ДанныеАгента.ОператорПеревода.Наименование));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Адрес) Тогда // Адрес оператора перевода
|
||
ЗаписьXML.ЗаписатьАтрибут("AcquirerOperatorAddress" , XMLСтрока(ДанныеАгента.ОператорПеревода.Адрес));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.ИНН) Тогда // ИНН оператора перевода
|
||
ЗаписьXML.ЗаписатьАтрибут("AcquirerOperatorINN" , XMLСтрока(ДанныеАгента.ОператорПеревода.ИНН));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
Иначе
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("AgentData");
|
||
Если Не ПустаяСтрока(ДанныеАгента.ПлатежныйАгент.Операция) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("PayingAgentOperation", XMLСтрока(ДанныеАгента.ПлатежныйАгент.Операция));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ПлатежныйАгент.Телефон) Тогда
|
||
Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ПлатежныйАгент.Телефон);
|
||
ЗаписьXML.ЗаписатьАтрибут("PayingAgentPhone", Телефон);
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ОператорПоПриемуПлатежей.Телефон) Тогда
|
||
Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ОператорПоПриемуПлатежей.Телефон);
|
||
ЗаписьXML.ЗаписатьАтрибут("ReceivePaymentsOperatorPhone", Телефон);
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Телефон) Тогда
|
||
Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ОператорПеревода.Телефон);
|
||
ЗаписьXML.ЗаписатьАтрибут("MoneyTransferOperatorPhone", Телефон);
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Наименование) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("MoneyTransferOperatorName", XMLСтрока(ДанныеАгента.ОператорПеревода.Наименование));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Адрес) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("MoneyTransferOperatorAddress", XMLСтрока(ДанныеАгента.ОператорПеревода.Адрес));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.ИНН) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("MoneyTransferOperatorVATIN" , XMLСтрока(ДанныеАгента.ОператорПеревода.ИНН));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Записывает данные поставщика в XML файл
|
||
//
|
||
// Параметры:
|
||
// ЗаписьXML - ЗаписьXML
|
||
// ДанныеПоставщика - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеПоставщика
|
||
// РевизияИнтерфейса - Число
|
||
//
|
||
Процедура ЗаписатьДанныеПоставщика(ЗаписьXML, ДанныеПоставщика, РевизияИнтерфейса = 0)
|
||
|
||
Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("VendorData");
|
||
Если Не ПустаяСтрока(ДанныеПоставщика.Телефон) Тогда // Телефон поставщика
|
||
Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеПоставщика.Телефон);
|
||
ЗаписьXML.ЗаписатьАтрибут("VendorPhone", Телефон);
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеПоставщика.Наименование) Тогда // Наименование поставщика
|
||
ЗаписьXML.ЗаписатьАтрибут("VendorName", XMLСтрока(ДанныеПоставщика.Наименование));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеПоставщика.ИНН) Тогда // ИНН поставщика
|
||
ЗаписьXML.ЗаписатьАтрибут("VendorINN", XMLСтрока(ДанныеПоставщика.ИНН));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
Иначе
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("PurveyorData");
|
||
Если Не ПустаяСтрока(ДанныеПоставщика.Телефон) Тогда
|
||
Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеПоставщика.Телефон);
|
||
ЗаписьXML.ЗаписатьАтрибут("PurveyorPhone", Телефон);
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеПоставщика.Наименование) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("PurveyorName", XMLСтрока(ДанныеПоставщика.Наименование));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеПоставщика.ИНН) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("PurveyorVATIN", XMLСтрока(ДанныеПоставщика.ИНН));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаписатьДополнительныйРеквизитПользователя(ЗаписьXML, ДополнительныйРеквизитПользователя);
|
||
|
||
Если ПустаяСтрока(ДополнительныйРеквизитПользователя.Наименование)
|
||
И ПустаяСтрока(ДополнительныйРеквизитПользователя.Значение) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("UserAttribute");
|
||
Если Не ПустаяСтрока(ДополнительныйРеквизитПользователя.Наименование) Тогда // Наименование дополнительного реквизита пользователя.
|
||
ЗаписьXML.ЗаписатьАтрибут("Name" , XMLСтрока(ДополнительныйРеквизитПользователя.Наименование));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДополнительныйРеквизитПользователя.Значение) Тогда // Значение дополнительного реквизита пользователя.
|
||
ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(ДополнительныйРеквизитПользователя.Значение));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаписатьОперационныйРеквизит(ЗаписьXML, ОперационныйРеквизит)
|
||
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("OperationalAttribute");
|
||
|
||
Если Не ПустаяСтрока(ОперационныйРеквизит.ДатаВремяОперации) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("DateTime", XMLСтрока(ОперационныйРеквизит.ДатаВремяОперации));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ОперационныйРеквизит.ИдентификаторОперации) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("OperationID", XMLСтрока(ОперационныйРеквизит.ИдентификаторОперации));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ОперационныйРеквизит.ДанныеОперации) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("OperationData", XMLСтрока(ОперационныйРеквизит.ДанныеОперации));
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаписатьОтраслевойРеквизит(ЗаписьXML, ОтраслевойРеквизит)
|
||
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("IndustryAttribute");
|
||
|
||
Если Не ПустаяСтрока(ОтраслевойРеквизит.ИдентификаторФОИВ) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("IdentifierFOIV", XMLСтрока(ОтраслевойРеквизит.ИдентификаторФОИВ));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ОтраслевойРеквизит.ДатаДокументаОснования) Тогда
|
||
// АПК: 1367-выкл, АПК: 335-выкл особенность локального законодательства
|
||
ДатаДокументаОснования = Формат(ОтраслевойРеквизит.ДатаДокументаОснования, "ДФ=""дд.ММ.гггг""");
|
||
// АПК: 1367-вкл, АПК: 335-вкл
|
||
ЗаписьXML.ЗаписатьАтрибут("DocumentDate", ДатаДокументаОснования);
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ОтраслевойРеквизит.НомерДокументаОснования) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("DocumentNumber", XMLСтрока(ОтраслевойРеквизит.НомерДокументаОснования));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ОтраслевойРеквизит.ЗначениеРеквизита) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("AttributeValue", XMLСтрока(ОтраслевойРеквизит.ЗначениеРеквизита));
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаписатьСведенияОПокупателе(ЗаписьXML, ОбщиеПараметры, ПерсональныеДанные = Неопределено, ТипПерсональныхДанных = Неопределено);
|
||
|
||
СведенияОПокупателе = ОбщиеПараметры.СведенияОПокупателе;
|
||
|
||
Покупатель = СведенияОПокупателе.Покупатель;
|
||
Если ПустаяСтрока(Покупатель) Тогда
|
||
Покупатель = ОбщиеПараметры.Получатель;
|
||
КонецЕсли;
|
||
|
||
Если ПерсональныеДанные <> Неопределено И ТипПерсональныхДанных <> Неопределено И ТипПерсональныхДанных = Перечисления.ТипыПерсональныхДанныхККТ.ИНН Тогда
|
||
ПокупательИНН = ПерсональныеДанные.ИНН
|
||
Иначе
|
||
ПокупательИНН = СведенияОПокупателе.ПокупательИНН;
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(ПокупательИНН) Тогда
|
||
ПокупательИНН = ОбщиеПараметры.ПолучательИНН;
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("CustomerDetail");
|
||
|
||
Если Не ПустаяСтрока(Покупатель) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Info", XMLСтрока(Покупатель));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ПокупательИНН) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("INN", XMLСтрока(ПокупательИНН));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(СведенияОПокупателе.ПокупательАдрес) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Address", XMLСтрока(СведенияОПокупателе.ПокупательАдрес));
|
||
КонецЕсли;
|
||
|
||
Если ПерсональныеДанные <> Неопределено И ТипПерсональныхДанных <> Неопределено И ТипПерсональныхДанных = Перечисления.ТипыПерсональныхДанныхККТ.ПаспортныеДанные Тогда
|
||
|
||
Если Не ПустаяСтрока(ПерсональныеДанные.Гражданство) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Citizenship", XMLСтрока(ПерсональныеДанные.Гражданство));
|
||
КонецЕсли;
|
||
|
||
Если Не ПустаяСтрока(ПерсональныеДанные.ВидДокумента) Тогда
|
||
ВидДокумента = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодВидДокументаУдостоверяющегоЛичность(ПерсональныеДанные.ВидДокумента);
|
||
ЗаписьXML.ЗаписатьАтрибут("DocumentTypeCode", XMLСтрока(ВидДокумента));
|
||
КонецЕсли;
|
||
|
||
Если Не ПустаяСтрока(ПерсональныеДанные.ДанныеДокумента) Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("DocumentData", XMLСтрока(ПерсональныеДанные.ДанныеДокумента));
|
||
КонецЕсли;
|
||
|
||
Если Не ПустаяСтрока(ПерсональныеДанные.ДатаРождения) Тогда
|
||
// АПК: 1367-выкл, АПК: 335-выкл особенность локального законодательства
|
||
ДатаРождения = Формат(ПерсональныеДанные.ДатаРождения, "ДФ=""дд.ММ.гггг""");
|
||
// АПК: 1367-вкл, АПК: 335-вкл
|
||
ЗаписьXML.ЗаписатьАтрибут("DateOfBirth", ДатаРождения);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращает представление ставки НДС для драйвера
|
||
// Параметры:
|
||
// СтавкаНДС - Число - Ставка НДС
|
||
// РевизияИнтерфейса - Число - Ревизия интерфейса
|
||
//
|
||
Функция ПредставлениеСтавкиНДС(СтавкаНДС, РевизияИнтерфейса)
|
||
|
||
Если НЕ ПустаяСтрока(СтавкаНДС) Тогда
|
||
// В случае не готовности ККТ для поддержки новых ставок можно продолжать пробивать чеки без НДС
|
||
Если РевизияИнтерфейса < 4004 Тогда
|
||
Если СтавкаНДС = 7 Или СтавкаНДС = 5 Или СтавкаНДС = 105 Или СтавкаНДС = 107 Тогда
|
||
ЗначениеСтавкаНДС = "none";
|
||
Возврат ЗначениеСтавкаНДС;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
// Ревизия интерфейса 4004 и вышы
|
||
Если СтавкаНДС > 100 Тогда
|
||
ЗначениеСтавкаНДС = СтрШаблон("%1/%2", СтавкаНДС - 100, СтавкаНДС);
|
||
Иначе
|
||
ЗначениеСтавкаНДС = СтавкаНДС;
|
||
КонецЕсли;
|
||
Иначе
|
||
ЗначениеСтавкаНДС = "none";
|
||
КонецЕсли;
|
||
|
||
Возврат ЗначениеСтавкаНДС;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает ставка НДС по представлению
|
||
// Параметры:
|
||
// ПредставлениеСтавкаНДС - Строка - Ставка НДС
|
||
//
|
||
Функция СтавкаНДСПоПредставлению(ПредставлениеСтавкаНДС)
|
||
|
||
СтавкаНДС = Неопределено;
|
||
|
||
Если НЕ (ПустаяСтрока(ПредставлениеСтавкаНДС) Или ПредставлениеСтавкаНДС = "none") Тогда
|
||
СтавкиНДС = СтрРазделить(ПредставлениеСтавкаНДС, "/");
|
||
Если СтавкиНДС.Количество() = 1 Тогда
|
||
СтавкаНДС = Число(СтавкиНДС[0])
|
||
КонецЕсли;
|
||
Если СтавкиНДС.Количество() = 2 Тогда
|
||
СтавкаНДС = Число(СтавкиНДС[1]);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат СтавкаНДС;
|
||
|
||
КонецФункции
|
||
|
||
// -- Локализация
|
||
|
||
Функция ЗначениеXMLАтрибута(ЧтениеXML, ИмяАтрибута, ДопИмяАтрибута = Неопределено, ЗначениеПоУмолчанию = Неопределено)
|
||
|
||
Результат = ЗначениеПоУмолчанию;
|
||
Если ЧтениеXML.ЗначениеАтрибута(ИмяАтрибута) <> Неопределено Тогда
|
||
Результат = ЧтениеXML.ЗначениеАтрибута(ИмяАтрибута);
|
||
ИначеЕсли НЕ ПустаяСтрока(ДопИмяАтрибута) И ЧтениеXML.ЗначениеАтрибута(ДопИмяАтрибута) <> Неопределено Тогда
|
||
Результат = ЧтениеXML.ЗначениеАтрибута(ДопИмяАтрибута);
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область КассоваяСмена
|
||
|
||
// Возвращает Истина, если используется подсистема "КассовыеСмены".
|
||
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
|
||
//
|
||
// У хотя бы одной "функциональной" подсистемы включен флажок "Включать в командный интерфейс".
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево.
|
||
//
|
||
Функция ИспользуетсяКассовыеСмены()
|
||
|
||
Возврат ОбщегоНазначенияБПО.ИспользуетсяКассоваяСмена();
|
||
|
||
КонецФункции
|
||
|
||
// Для внутреннего использования
|
||
//
|
||
Функция ПолучитьСтатусПоследнейСмены(ИдентификаторУстройства)
|
||
|
||
Если ИспользуетсяКассовыеСмены() Тогда
|
||
МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены");
|
||
Возврат МодульКассовыеСмены.СтатусПоследнейСмены(ИдентификаторУстройства);
|
||
Иначе
|
||
РезультатОперации = Новый Структура();
|
||
РезультатОперации.Вставить("Активна", Истина);
|
||
РезультатОперации.Вставить("Открыта", Истина);
|
||
РезультатОперации.Вставить("ТекущийНомерЧека", 1);
|
||
РезультатОперации.Вставить("КассоваяСмена", Неопределено);
|
||
Возврат РезультатОперации;
|
||
КонецЕсли;
|
||
|
||
КонецФункции
|
||
|
||
// Для внутреннего использования
|
||
//
|
||
Функция НоваяКассоваяСмена(ФискальноеУстройство, ДанныеОперации)
|
||
|
||
Если ИспользуетсяКассовыеСмены() Тогда
|
||
МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены");
|
||
Возврат МодульКассовыеСмены.НоваяКассоваяСмена(ФискальноеУстройство, ДанныеОперации);
|
||
Иначе
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
КонецФункции
|
||
|
||
// Для внутреннего использования
|
||
//
|
||
Процедура ЗакрытьКассовуюСмену(ДанныеОперации)
|
||
|
||
Если ИспользуетсяКассовыеСмены() Тогда
|
||
МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены");
|
||
МодульКассовыеСмены.ЗакрытьКассовуюСмену(ДанныеОперации);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Для внутреннего использования
|
||
//
|
||
Функция ОписаниеПоследнейКассовойСмены(ФискальноеУстройство)
|
||
|
||
Если ИспользуетсяКассовыеСмены() Тогда
|
||
МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены");
|
||
Возврат МодульКассовыеСмены.ОписаниеПоследнейКассовойСмены(ФискальноеУстройство);
|
||
Иначе
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#КонецОбласти
|