XMLTsdMagazinVasilek/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСервер/Ext/Module.bsl

2425 lines
186 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#Область ПрограммныйИнтерфейс
// Проверяет соответствие ИНН требованиям.
//
// Параметры:
// ИНН - Строка - проверяемый индивидуальный номер налогоплательщика.
// ЭтоЮридическоеЛицо - Булево - признак, является ли владелец ИНН юридическим лицом.
// ТекстСообщения - Строка - текст сообщения о найденных ошибках.
//
// Возвращаемое значение:
// Булево - Истина, если соответствует.
//
Функция ИННСоответствуетТребованиям(Знач ИНН, ЭтоЮридическоеЛицо, ТекстСообщения) Экспорт
СоответствуетТребованиям = Истина;
ТекстСообщения = "";
ИНН = СокрЛП(ИНН);
ДлинаИНН = СтрДлина(ИНН);
Если ЭтоЮридическоеЛицо = Неопределено Тогда
ТекстСообщения = ТекстСообщения + НСтр("ru = 'Не определен тип владельца ИНН'");
Возврат Ложь;
КонецЕсли;
Если НЕ ОбщегоНазначенияБПОКлиентСервер.ТолькоЦифрыВСтроке(ИНН) Тогда
СоответствуетТребованиям = Ложь;
ТекстСообщения = ТекстСообщения + НСтр("ru = 'ИНН должен состоять только из цифр'");
КонецЕсли;
Если ЭтоЮридическоеЛицо И ДлинаИНН <> 10 Тогда
СоответствуетТребованиям = Ложь;
ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "")
+ НСтр("ru = 'ИНН юридического лица должен состоять из 10 цифр'");
ИначеЕсли НЕ ЭтоЮридическоеЛицо И ДлинаИНН <> 12 Тогда
СоответствуетТребованиям = Ложь;
ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "")
+ НСтр("ru = 'ИНН физического лица должен состоять из 12 цифр'");
КонецЕсли;
Если СоответствуетТребованиям Тогда
Если ЭтоЮридическоеЛицо Тогда
КонтрольнаяСумма = 0;
Для Индекс = 1 По 9 Цикл
Если Индекс = 1 Тогда
Множитель = 2;
ИначеЕсли Индекс = 2 Тогда
Множитель = 4;
ИначеЕсли Индекс = 3 Тогда
Множитель = 10;
ИначеЕсли Индекс = 4 Тогда
Множитель = 3;
ИначеЕсли Индекс = 5 Тогда
Множитель = 5;
ИначеЕсли Индекс = 6 Тогда
Множитель = 9;
ИначеЕсли Индекс = 7 Тогда
Множитель = 4;
ИначеЕсли Индекс = 8 Тогда
Множитель = 6;
ИначеЕсли Индекс = 9 Тогда
Множитель = 8;
КонецЕсли;
Цифра = Число(Сред(ИНН, Индекс, 1));
КонтрольнаяСумма = КонтрольнаяСумма + Цифра * Множитель;
КонецЦикла;
КонтрольныйРазряд = (КонтрольнаяСумма %11) %10;
Если КонтрольныйРазряд <> Число(Сред(ИНН, 10, 1)) Тогда
СоответствуетТребованиям = Ложь;
ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "")
+ НСтр("ru = 'Контрольное число для ИНН не совпадает с рассчитанным'");
КонецЕсли;
Иначе
КонтрольнаяСумма11 = 0;
КонтрольнаяСумма12 = 0;
Для Индекс = 1 По 11 Цикл
// Расчет множителя для 11-го и 12-го разрядов.
Если Индекс = 1 Тогда
Множитель11 = 7;
Множитель12 = 3;
ИначеЕсли Индекс = 2 Тогда
Множитель11 = 2;
Множитель12 = 7;
ИначеЕсли Индекс = 3 Тогда
Множитель11 = 4;
Множитель12 = 2;
ИначеЕсли Индекс = 4 Тогда
Множитель11 = 10;
Множитель12 = 4;
ИначеЕсли Индекс = 5 Тогда
Множитель11 = 3;
Множитель12 = 10;
ИначеЕсли Индекс = 6 Тогда
Множитель11 = 5;
Множитель12 = 3;
ИначеЕсли Индекс = 7 Тогда
Множитель11 = 9;
Множитель12 = 5;
ИначеЕсли Индекс = 8 Тогда
Множитель11 = 4;
Множитель12 = 9;
ИначеЕсли Индекс = 9 Тогда
Множитель11 = 6;
Множитель12 = 4;
ИначеЕсли Индекс = 10 Тогда
Множитель11 = 8;
Множитель12 = 6;
ИначеЕсли Индекс = 11 Тогда
Множитель11 = 0;
Множитель12 = 8;
КонецЕсли;
Цифра = Число(Сред(ИНН, Индекс, 1));
КонтрольнаяСумма11 = КонтрольнаяСумма11 + Цифра * Множитель11;
КонтрольнаяСумма12 = КонтрольнаяСумма12 + Цифра * Множитель12;
КонецЦикла;
КонтрольныйРазряд11 = (КонтрольнаяСумма11 %11) %10;
КонтрольныйРазряд12 = (КонтрольнаяСумма12 %11) %10;
Если КонтрольныйРазряд11 <> Число(Сред(ИНН,11,1)) ИЛИ КонтрольныйРазряд12 <> Число(Сред(ИНН,12,1)) Тогда
СоответствуетТребованиям = Ложь;
ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "")
+ НСтр("ru = 'Контрольное число для ИНН не совпадает с рассчитанным'");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат СоответствуетТребованиям;
КонецФункции
#Область Конструкторы
// Заполняет структуру общих параметров фискального накопителя.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыФискальногоНакопителяОбщие() Экспорт
Параметры = Новый Структура();
// ФФД 1.0
Параметры.Вставить("РегистрационныйНомерККТ"); // Регистрационный номер ККТ
Параметры.Вставить("ЗаводскойНомерККТ"); // Заводской номер ККТ
Параметры.Вставить("ЗаводскойНомерФН"); // Заводской номер ФН
Параметры.Вставить("ВерсияФФДФН"); // Версия ФФД ФН (одно из следующих значений "1.0","1.1")
Параметры.Вставить("ВерсияФФДККТ"); // Версия ФФД ККТ (одно из следующих значений "1.0","1.05","1.1")
Параметры.Вставить("ОрганизацияНазвание"); // Название организации
Параметры.Вставить("ОрганизацияИНН"); // ИНН организация
Параметры.Вставить("АдресПроведенияРасчетов"); // Адрес проведения расчетов
Параметры.Вставить("МестоПроведенияРасчетов"); // Место проведения расчетов
Параметры.Вставить("КодыСистемыНалогообложения"); // Коды системы налогообложения
Параметры.Вставить("ПризнакАвтономногоРежима" , Ложь); // Признак автономного режима
Параметры.Вставить("ПризнакШифрованиеДанных" , Ложь); // Признак шифрование данных
Параметры.Вставить("ПризнакРасчетовЗаУслуги" , Ложь); // Признак расчетов за услуги
Параметры.Вставить("ПродажаПодакцизногоТовара" , Ложь); // Продажа подакцизного товара
Параметры.Вставить("ПроведенияАзартныхИгр" , Ложь); // Признак проведения азартных игр
Параметры.Вставить("ПроведенияЛотерей" , Ложь); // Признак проведения лотереи
Параметры.Вставить("ПризнакиАгента"); // Коды признаков агента
Параметры.Вставить("ПризнакФормированияБСО" , Ложь); // Признак формирования АС БСО
Параметры.Вставить("ПризнакРасчетовТолькоВИнтернет", Ложь); // Признак ККТ для расчетов только в Интернет
Параметры.Вставить("УстановкаПринтераВАвтомате" , Ложь); // Признак установки принтера в автомате
Параметры.Вставить("ПризнакАвтоматическогоРежима" , Ложь); // Признак автоматического режима
Параметры.Вставить("НомерАвтоматаДляАвтоматическогоРежима"); // Номер автомата для автоматического режима
Параметры.Вставить("ОрганизацияОФДИНН"); // Название организации ОФД
Параметры.Вставить("ОрганизацияОФДНазвание"); // ИНН организации ОФД
Параметры.Вставить("ОтправительEmail"); // Адрес электронной почты отправителя чека.
Параметры.Вставить("АдресСайтаФНС"); // Адрес сайта уполномоченного органа (ФНС).
// ФФД 1.2
Параметры.Вставить("ПроведенияРасчетаВИнтернет" , Ложь); // Признак ККТ для расчетов в Интернет
Параметры.Вставить("ПродажаМаркированныхТоваров" , Ложь); // Признак ККТ торговли товарами, подлежащими обязательной маркировке средствами идентификации
Параметры.Вставить("ПризнакПримененияЛомбардами" , Ложь); // Признак применения ККТ при осуществлении ломбардами кредитования граждан
Параметры.Вставить("ПризнакДеятельностиПоСтрахованию" , Ложь); // Признак применения при осуществлении деятельности по страхованию
// ФФД 1.2 - Приказ ФНС России от 12.04.2023 N ЕД-7-20/239@
Параметры.Вставить("ПризнакАвтоматическогоТорговогоАвтомата" , Ложь); // Признак применения в автоматическом торговом автомате
Параметры.Вставить("ПризнакОказанииУслугОбщественногоПитания" , Ложь); // Признак применения при оказании услуг общественного питания
Параметры.Вставить("ПризнакОптовойТорговлиСОрганизациями" , Истина); // Признак применения о оптовой торговле с организациями и ИП
Возврат Параметры;
КонецФункции
// Заполняет структуру параметров регистрации ККТ.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыРегистрацииККТ() Экспорт
Параметры = ПараметрыФискальногоНакопителяОбщие();
Параметры.Вставить("ПризнакФискализации"); // Признак регистрации фискального накопителя.
Параметры.Вставить("НомерДокументаФискализации"); // Номер документа регистрация фискального накопителя.
Параметры.Вставить("ДатаВремяФискализации"); // Дата и время операции регистрации фискального накопителя.
Возврат Параметры;
КонецФункции
// Заполняет структуру параметров Фискализации ФН.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыОперацииФискализацииНакопителя() Экспорт
Параметры = ПараметрыФискальногоНакопителяОбщие();
Параметры.Вставить("КодПричиныПеререгистрации");
Параметры.Вставить("КодыПричинИзмененияСведений");
Параметры.Вставить("ТипОперации", 1);
Параметры.Вставить("Кассир" , НСтр("ru='Администратор'")); // Строка,Обязательно - ФИО лица и должность, осуществившего расчет с покупателем (клиентом), оформившего кассовый чек.
Параметры.Вставить("КассирИНН" , Неопределено); // Строка,Необязательно - Идентификационный номер налогоплательщика кассира, при наличии.
Возврат Параметры;
КонецФункции
// Заполняет структуру параметров выполнения операции.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыВыполненияОперации() Экспорт;
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("Кассир" , НСтр("ru='Администратор'")); // ФИО лица и должность, осуществившего операцию.
ПараметрыОперации.Вставить("КассирИНН" , Неопределено); // Идентификационный номер налогоплательщика кассира, при наличии.
Возврат ПараметрыОперации;
КонецФункции
// Заполняет структуру данных агента.
//
// Возвращаемое значение:
// Структура:
// * ОператорПоПриемуПлатежей - Структура:
// ** Телефон - Неопределено -
// * ОператорПеревода - Структура:
// ** Телефон - Строка -
// ** Наименование - Строка -
// ** Адрес - Строка -
// ** ИНН - Строка -
// * ПлатежныйАгент - Структура:
// ** Операция - Строка -
// ** Телефон - Строка -
//
Функция ПараметрыДанныеАгента() Экспорт
// ФФД - Значения реквизита «данные агента» (тег 1223) указаны в таблице 22.
Параметры = Новый Структура();
ПлатежныйАгент = Новый Структура();
ПлатежныйАгент.Вставить("Операция", Неопределено); // Строка - Операция платежного агента.
ПлатежныйАгент.Вставить("Телефон" , Неопределено); // Строка - Телефон платежного агента. В формате +{Ц}.
Параметры.Вставить("ПлатежныйАгент", ПлатежныйАгент);
ОператорПеревода = Новый Структура();
ОператорПеревода.Вставить("Телефон" , Неопределено); // Строка - Телефон оператора перевода. В формате +{Ц}.
ОператорПеревода.Вставить("Наименование", Неопределено); // Строка - Наименование оператора перевода.
ОператорПеревода.Вставить("Адрес" , Неопределено); // Строка - Адрес оператора перевода.
ОператорПеревода.Вставить("ИНН" , Неопределено); // Строка - ИНН оператора перевода.
Параметры.Вставить("ОператорПеревода", ОператорПеревода);
ОператорПоПриемуПлатежей = Новый Структура();
ОператорПоПриемуПлатежей.Вставить("Телефон", Неопределено); // Строка - Телефон оператора по приему платежей. В формате +{Ц}.
Параметры.Вставить("ОператорПоПриемуПлатежей", ОператорПоПриемуПлатежей);
Возврат Параметры;
КонецФункции
// Заполняет структуру данных поставщика.
//
// Возвращаемое значение:
// Структура - Описание:
// * ИНН - Строка
// * Наименование - Строка
// * Телефон - Строка
//
Функция ПараметрыДанныеПоставщика() Экспорт
Параметры = Новый Структура();
Параметры.Вставить("Телефон"); // Строка - Телефон поставщика. В формате +{Ц}.
Параметры.Вставить("Наименование"); // Строка - Наименование поставщика.
Параметры.Вставить("ИНН"); // Строка - ИНН поставщика.
Возврат Параметры;
КонецФункции
// Заполняет структуру данных кода товарной номенклатуры.
//
// Возвращаемое значение:
// Структура - Описание:
// * ЗначениеКодаТовара - Строка
// * ТипКодаТовара - Строка
// * РеквизитКодаТовара - Строка
// * СерийныйНомер - Строка
// * ГлобальныйИдентификаторТорговойЕдиницы - Строка
// * КонтрольныйИдентификационныйЗнак - СТрока
// * ТипМаркировки - ПеречислениеСсылка.ТипыМаркировкиККТ -
//
Функция ПараметрыДанныеКодаТоварнойНоменклатуры() Экспорт
Параметры = Новый Структура();
// Формирование тэга 1162, для ФФД 1.05, 1.1
Параметры.Вставить("ТипМаркировки"); // Перечисление.ТипыМаркировкиККТ, Необязательно - Тип маркировки.
// Ранее в рамках пилотных проектов (в 2017-2019) по маркировке и регистрации выбытия контрольных марок(КМ)
// через ККТ для каждого вида маркировки ФНС предоставляла отдельный алгоритм для кодирования тега 1162
// содержащий информацию о КМ. Именно для этого было создано данное перечисление - ТипыМаркировкиККТ.
// Но в соответствии с приказом ФНС от 29.08.2019 № ММВ-7-20/434@ "О внесении изменений в приложение №2
// к приказу Федеральной налоговой службы от 21.03.2017 № ММВ-7-20/229@“ зарегистрированному 25.12.2019 №56978
// и вступившему в силу с 01.03.2020г. алгоритм кодирования тега 1162 стал единым для всех типов маркировки.
// Таким образом, данное перечисление и атрибут устарели. Оставлено для совместимости.
Параметры.Вставить("КонтрольныйИдентификационныйЗнак"); // Строка,Необязательно - Контрольный идентификационный знак (КиЗ).
Параметры.Вставить("ГлобальныйИдентификаторТорговойЕдиницы"); // Строка,Необязательно - Глобальный идентификатор торговой единицы (GTIN).
Параметры.Вставить("СерийныйНомер"); // Строка,Необязательно - Серийный номер.
Параметры.Вставить("РеквизитКодаТовара"); // Строка,Необязательно -Значение реквизита кода товара (Значение тэга 1162). Кодируется текстом в кодировке Base64.
// Формирование тэга 1163, для ФФД 1.2
Параметры.Вставить("ТипКодаТовара"); // Строка,Необязательно - Таблица 118
Параметры.Вставить("ЗначениеКодаТовара"); // Строка,Необязательно - Значение кода товара в Base64 (Таблица 118)
Возврат Параметры;
КонецФункции
// Заполняет структуру данных дробное количество для товарной номенклатуры.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыДробноеКоличество() Экспорт
Параметры = Новый Структура();
Параметры.Вставить("Числитель" , Неопределено); // Число,Обязательно - Числитель дробного количества - количество реализуемых товаров из упаковке.
Параметры.Вставить("Знаменатель" , Неопределено); // Число,Обязательно - Знаменатель дробного количества - общее количество товаров в потребительской упаковке.
Возврат Параметры;
КонецФункции
// Заполняет структуру дополнительного реквизита пользователя.
//
// Возвращаемое значение:
// Структура:
// * Наименование - Строка
// * Значение - Строка
//
Функция ПараметрыДополнительногоРеквизитаПользователя() Экспорт
Параметры = Новый Структура();
Параметры.Вставить("Наименование"); // Строка,Необязательно - Наименование дополнительного реквизита пользователя (Тег 1085).
Параметры.Вставить("Значение"); // Строка,Необязательно - Значение дополнительного реквизита пользователя (Тег 1086).
Возврат Параметры;
КонецФункции
// Заполняет структуру параметров QR кода.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыQRКода() Экспорт
Параметры = Новый Структура();
Параметры.Вставить("ЗначениеКода"); // Строка,Необязательно - Значения QR кода.
Параметры.Вставить("ТекстПользователя", НСтр("ru='Сохраните чек для возврата'")); // Строка,Необязательно - Текст выводимый пользователю.
Возврат Параметры;
КонецФункции
// Заполняет структуру операционного реквизит чека.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыОперационныйРеквизит() Экспорт
// Вложенные тэги 1270
Параметры = Новый Структура();
Параметры.Вставить("ДатаВремяОперации"); // Дата,Необязательно - Тэг 1273 - Дата, время операции
Параметры.Вставить("ИдентификаторОперации"); // Целое,Необязательно - Тэг 1271 - Идентификатор операции.
Параметры.Вставить("ДанныеОперации"); // Строка[64],Необязательно - Тэг 1272 - Данные операции.
Возврат Параметры;
КонецФункции
// Заполняет структуру отраслевого реквизит чека.
// 1260 - отраслевой реквизит предмета расчета.
// 1261 - отраслевой реквизит чека.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыОтраслевойРеквизит() Экспорт
// Вложенные тэги 1260 & 1261
Параметры = Новый Структура();
// Значения реквизита "идентификатор ФОИВ" (тег 1262) приведены в таблице 149.
Параметры.Вставить("ИдентификаторФОИВ"); // Строка[3],Необязательно - Тэг 1262 - Идентификатор ФОИВ.
// Дата нормативного акта федерального органа исполнительной власти, регламентирующего порядок
// заполнения реквизита "значение отраслевого реквизита" (тег 1265)
Параметры.Вставить("ДатаДокументаОснования"); // Дата,Необязательно - Тэг 1263 - Дата документа основания
// Номер нормативного акта федерального органа исполнительной власти, регламентирующего порядок
// заполнения реквизита "значение отраслевого реквизита" (тег 1265)
Параметры.Вставить("НомерДокументаОснования"); // Строка[64],Необязательно - Тэг 1264 - Номер документа основания.
// Состав значений, определенных нормативного актом федерального органа исполнительной власти
Параметры.Вставить("ЗначениеРеквизита"); // Строка[256],Необязательно - Тэг 1265 - Номер документа основания.
Возврат Параметры;
КонецФункции
// Заполняет структуру сведений о покупателей.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыСведенияОПокупателе() Экспорт
// Вложенные тэги 1256 - Сведения о покупателе (клиенте).
Параметры = Новый Структура();
// Реквизиты начиная с ФФД 1.1 (Введены приказом от 09.04.2018 N ММВ-7-20/207@)
// Наименование организации или фамилия, имя, отчество (при наличии)
Параметры.Вставить("Покупатель"); // Строка,Необязательно - Тэг 1227 - Получатель (покупатель)
Параметры.Вставить("ПокупательИНН"); // Строка,Необязательно - Тэг 1228 - ИНН покупателя (клиента)
Параметры.Вставить("ПокупательАдрес"); // Строка,Необязательно - Тэг 1254 - Адрес покупателя (клиента)
Возврат Параметры;
КонецФункции
// Заполняет структуру персональные данные покупателя.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыПерсональныеДанныеПокупателя() Экспорт
Параметры = Новый Структура();
Параметры.Вставить("ИНН"); // Строка,Необязательно - ИНН покупателя (клиента)
Параметры.Вставить("ДатаРождения"); // Дата,Необязательно - Дата рождения покупателя (клиента)
Параметры.Вставить("Гражданство"); // Строка,Необязательно - Гражданство покупателя (клиента)
Параметры.Вставить("ВидДокумента"); // Перечисление,Необязательно - Код вида документа, удостоверяющего личность
Параметры.Вставить("ДанныеДокумента"); // Строка,Необязательно - Данные документа, удостоверяющего личность
Возврат Параметры;
КонецФункции
// Заполняет структуру параметров операции фискализации чека.
//
// Возвращаемое значение:
// Структура - Описание:
// * ДанныеКоррекции - Структура -:
// ** НомерПредписания - Число
// ** ДатаКоррекции - Дата
// ** ОписаниеКоррекции - Строка
// ** ТипКоррекции - Число -
// * НеприменениеККТ - Булево -
// * КорректируемыйДокумент - Произвольный
// * ЕстьПерсональныеДанные - Булево -
// * ИндивидуальныйРежимПодготовкиДанныхКПередачеВОФД - Булево -
// * ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число -
// * СпособФорматноЛогическогоКонтроля - Неопределено -
// * СформироватьЧекКоррекции - Булево -
// * ДополнительныйРеквизитПользователя - Структура:
// ** Значение - Произвольный
// ** Наименование - Строка
// * ДополнительныйРеквизит - Неопределено -
// * НефискальныеДокументы - Массив Из Строка.
// * КассаККМ - Произвольный -
// * ШаблонЧека - Произвольный
// * ТаблицаОплат - Массив из Структура.
// * ПозицииЧека - Массив из см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека.
// * КопийЧека - Число -
// * ТекстПодвала - Строка -
// * ТекстШапки - Строка -
// * ДатаВремя - Дата -
// * НомерСмены - Число
// * НомерЧека - Строка
// * НомерКассы - Строка
// * НаименованиеМагазина - Строка
// * АдресМагазина - Строка
// * ОрганизацияКПП - Строка
// * ОрганизацияИНН - Строка
// * ОрганизацияНазвание - Строка
// * СерийныйНомер - Строка
// * ПолучательИНН - Строка
// * Получатель - Строка
// * ДанныеПоставщика - Структура:
// ** ИНН - Строка
// ** Наименование - Строка
// ** Телефон - Строка
// * ДанныеАгента - Структура:
// ** ОператорПоПриемуПлатежей - Структура:
// *** Телефон - Неопределено -
// ** ОператорПеревода - Структура:
// *** Телефон - Строка -
// *** Наименование - Строка -
// *** Адрес - Строка -
// *** ИНН - Строка -
// ** ПлатежныйАгент - Структура:
// *** Операция - Строка -
// *** Телефон - Строка -
// * ПризнакАгента - Неопределено -
// * ПокупательНомер - Строка
// * ПокупательEmail - Строка
// * ОтправительEmail - Строка
// * МестоРасчетов - Строка
// * АдресРасчетов - Строка
// * СистемаНалогообложения - ПеречислениеСсылка.ТипыСистемНалогообложенияККТ -
// * Отправляет1СEmail - Булево -
// * Отправляет1СSMS - Булево -
// * ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами -
// * Электронно - Булево -
// * ТорговыйОбъект - Неопределено -
// * Организация - Неопределено -
// * ИдентификаторФискальнойЗаписи - Неопределено -
// * ДокументОснование - Неопределено -
// * КассирИНН - Неопределено -
// * Кассир - Строка -
// * ТекстКороткогоСлипЧека - Строка - текст короткого слип-чека
// * АвтономнаяККТ - Булево - признак не использования ККТ для пробития чека
Функция ПараметрыОперацииФискализацииЧека() Экспорт;
ПараметрыЧека = ПараметрыВыполненияОперации();
// Общие реквизиты для всех типов оборудования.
ПараметрыЧека.Вставить("ДокументОснование" , Неопределено); // Ссылка,Обязательно. Документ по которому пробивается чек.
ПараметрыЧека.Вставить("ИдентификаторФискальнойЗаписи", Неопределено); // Строка,Необязательно. Идентификатор фискальной записи.
ПараметрыЧека.Вставить("Организация" , Неопределено); // Ссылка,Обязательно. Организация по которому пробивается чек.
ПараметрыЧека.Вставить("ТорговыйОбъект" , Неопределено); // Ссылка,Необязательно. Объект по которому пробивается чек.
ПараметрыЧека.Вставить("Электронно" , Ложь); // Булево,Обязательно - Чек будет предоставлен в электронной форме, без печати. Ложь-Значение по умолчанию.
ПараметрыЧека.Вставить("ТипРасчета" , ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств")); // Обязательно.
ПараметрыЧека.Вставить("Отправляет1СSMS" , Ложь); // Булево,Обязательно - SMS отправляет средствами 1C. Ложь-Значение по умолчанию.
ПараметрыЧека.Вставить("Отправляет1СEmail" , Ложь); // Булево,Обязательно - Email отправляет средствами 1C. Ложь-Значение по умолчанию.
// Системы налогообложения - "Перечисление.ТипыСистемНалогообложенияККТ"
ПараметрыЧека.Вставить("СистемаНалогообложения", ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ОСН")); // Обязательно. Заполняется значением по умолчанию.
ПараметрыЧека.Вставить("АдресРасчетов" ); // Строка,Необязательно - Адрес расчетов (Тег 1009).
ПараметрыЧека.Вставить("МестоРасчетов" ); // Строка,Необязательно - Место расчетов (Тег 1187).
ПараметрыЧека.Вставить("НомерАвтомата" ); // Строка,Необязательно - Номер автомата (Тег 1036).
ПараметрыЧека.Вставить("ОтправительEmail" ); // Строка,Необязательно - Адрес электронной почты отправителя чека (Тег 1117).
ПараметрыЧека.Вставить("ПокупательEmail" ); // Строка,Необязательно - Адрес электронной почты покупателя.
ПараметрыЧека.Вставить("ПокупательНомер" ); // Строка,Необязательно - Телефонный номер покупателя. В формате +{Ц}.
// Признак агента - "Перечисление.ПризнакиАгента", (ФФД, Тег 1057, Расшифровка - таблица 10)
ПараметрыЧека.Вставить("ПризнакАгента" , Неопределено); // Перечисление - Признак агента (Тег 1057).
ПараметрыЧека.Вставить("ДанныеАгента" , ПараметрыДанныеАгента()); // Структура,Заполнение необязательно - Данные агента.
ПараметрыЧека.Вставить("ДанныеПоставщика" , ПараметрыДанныеПоставщика()); // Структура,Заполнение необязательно - Данные поставщика.
// Реквизиты начиная с ФФД 1.1 (Введены приказом от 09.04.2018 N ММВ-7-20/207@)
ПараметрыЧека.Вставить("Получатель" ); // Строка,Необязательно - Тэг 1227 - Получатель (покупатель)
ПараметрыЧека.Вставить("ПолучательИНН" ); // Строка,Необязательно - Тэг 1228 - ИНН получателя (ИНН покупателя)
// Реквизиты начиная с ФФД 1.2 (Введены приказом от 14.09.2020 N ЕД-7-20/662@)
ПараметрыЧека.Вставить("СубъектПерсональныхДанных"); // Необязательно - Физическое лицо, которое прямо или косвенно определено или определяемо с помощью персональных данных.
ПараметрыЧека.Вставить("ЕстьПерсональныеДанные", Ложь); // Булево,Необязательно - Параметры чека содержат персональные данные.
ПараметрыЧека.Вставить("ТипПерсональныхДанных"); // ПеречислениеСсылка.ТипыПерсональныхДанныеККТ, Необязательно - Тип персональных данных.
ПараметрыЧека.Вставить("СведенияОПокупателе" , ПараметрыСведенияОПокупателе()); // Структура,Заполнение необязательно - Тэг 1256 - Сведения о покупателе (клиенте)
ПараметрыЧека.Вставить("ОперационныйРеквизит", ПараметрыОперационныйРеквизит()); // Структура,Заполнение необязательно - Тэг 1270 -
ПараметрыЧека.Вставить("ОтраслевойРеквизит" , ПараметрыОтраслевойРеквизит()); // Структура,Заполнение необязательно - Тэг 1261 - Отраслевой реквизит чека,
// Параметры необходимые для ФР
ПараметрыЧека.Вставить("СерийныйНомер" ); // Строка,Необязательно - Заводской номер ККМ (совместимость с ФР).
// Параметры необходимые для чека ЕНВД на принтере чеков
ПараметрыЧека.Вставить("ОрганизацияНазвание" ); // Строка,Необязательно - Название организации (Для чека ЕНВД).
ПараметрыЧека.Вставить("ОрганизацияИНН" ); // Строка,Необязательно - ИНН организации (Для чека ЕНВД).
ПараметрыЧека.Вставить("ОрганизацияКПП" ); // Строка,Необязательно - КПП организации (Для чека ЕНВД).
ПараметрыЧека.Вставить("АдресМагазина" ); // Строка,Необязательно - Адрес магазина (Для чека ЕНВД).
ПараметрыЧека.Вставить("НаименованиеМагазина"); // Строка,Необязательно - Наименование магазина (Для чека ЕНВД).
ПараметрыЧека.Вставить("НомерКассы" ); // Строка,Необязательно - Номер кассы (Для чека ЕНВД).
ПараметрыЧека.Вставить("НомерЧека" ); // Число,Необязательно - Номер чека (Для чека ЕНВД).
ПараметрыЧека.Вставить("НомерСмены" ); // Число,Необязательно - Номер смены (Для чека ЕНВД).
ПараметрыЧека.Вставить("ДатаВремя", ОбщегоНазначенияБПОКлиентСервер.ДатаСеанса()); // ДатаВремя, Необязательно - Дата время в чеке (Для чека ЕНВД).
// АПК: 374-выкл сообщение в чеках
ПараметрыЧека.Вставить("ТекстШапки" , НСтр("ru='ДОБРО ПОЖАЛОВАТЬ!'")); // Строка - заполняется значением по умолчанию.
ПараметрыЧека.Вставить("ТекстПодвала" , НСтр("ru='СПАСИБО ЗА ПОКУПКУ!'")); // Строка - заполняется значением по умолчанию.
// АПК: 374-вкл
ПараметрыЧека.Вставить("КопийЧека" , 1); // Число,Необязательно - Сколько печатать копий чеков ЕНВД на принтере чеков.
// Позиции чека для фискализации.
ПараметрыЧека.Вставить("ПозицииЧека" , Новый Массив()); // Массив элементов "Структура". Обязательно.
// Таблица оплаты чека
ПараметрыЧека.Вставить("ТаблицаОплат" , Новый Массив()); // Массив элементов "Структура". Обязательно.
// Пример заполнения строки оплаты:
// СтрокаОплаты = Новый Структура();
// СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные")); // Наличные
// СтрокаОплаты.Вставить("Сумма", СуммаВидаОплаты);
// ПараметрыЧека.ТаблицаОплат.Добавить(СтрокаОплаты);
// Параметры для печати чека по шаблону.
ПараметрыЧека.Вставить("ШаблонЧека" ); // Ссылка,Необязательно - Пользовательский шаблон для формирования чека.
ПараметрыЧека.Вставить("КассаККМ" ); // Ссылка,Необязательно - Касса ККМ.
ПараметрыЧека.Вставить("НефискальныеДокументы" , Новый Массив()); // Массив нефискальных документов. Необязательно.
// Строка,Необязательно - Дополнительный реквизит чека (Тег 1192).
ПараметрыЧека.Вставить("ДополнительныйРеквизит" , Неопределено);
// Структура,Заполнение необязательно - дополнительный реквизит пользователя (Тег 1084).
ПараметрыЧека.Вставить("ДополнительныйРеквизитПользователя", ПараметрыДополнительногоРеквизитаПользователя());
ПараметрыЧека.Вставить("СформироватьЧекКоррекции", Ложь); // Булево,Необязательно - сформировать чек коррекции, только для ФФД 1.1.
ПараметрыЧека.Вставить("СформироватьЧекКоррекцииСторно", Истина); // Булево,Необязательно - Сформировать чеки коррекции сторно по сценариям ФНС.
// Форматно-логический контроль - "ПеречислениеСсылка.СпособыФорматноЛогическогоКонтроля"
ПараметрыЧека.Вставить("СпособФорматноЛогическогоКонтроля", Неопределено); // Перечисление,Необязательно - Способ форматно-логического контроля.
ПараметрыЧека.Вставить("ДопустимоеРасхождениеФорматноЛогическогоКонтроля", 0.01); // Число,Необязательно - устанавливается значение по умолчанию.
ПараметрыЧека.Вставить("ИндивидуальныйРежимПодготовкиДанныхКПередачеВОФД", Ложь); // Булево,Необязательно - устанавливается значение по умолчанию.
ПараметрыЧека.Вставить("ЕдиныйЧек", Ложь); // Булево,Необязательно - Одна фискальная операция привязана к нескольким документам.
// Системе быстрых платежей и сертификаты ФСС
ПараметрыЧека.Вставить("ТипПлатежнойСистемы"); // ПеречислениеСсылка.ТипыПлатежнойСистемыККТ, Необязательно - Тип платежной системы.
ПараметрыЧека.Вставить("ИдентификаторОплатыПлатежнойСистемы"); // Строка,Необязательно - Идентификатор оплаты платежных системы.
ПараметрыЧека.Вставить("QRКод", ПараметрыQRКода()); // Структура,Заполнение необязательно - параметры QR кода в теле чека.
ПараметрыЧека.Вставить("ДетализацияОплаты", Новый Массив()); // Массив элементов "Структура" - ПараметрыДетализацииСтрокиОплаты()
// Короткий слип-чек
ПараметрыЧека.Вставить("ТекстКороткогоСлипЧека", ""); // Строка - текст короткого слип-чека
// Автономные ККТ
ПараметрыЧека.Вставить("АвтономнаяККТ", Ложь);
// Признак сворачивание одинаковых строк на печатной форме документа.
ПараметрыЧека.Вставить("СворачиватьОдинаковыеСтрокПриПечати", Ложь);
Возврат ПараметрыЧека;
КонецФункции
// Заполняет структуру параметров фискальной строки для фискализации чека.
//
// Возвращаемое значение:
// Структура:
// * Штрихкод - Строка
// * НомерСекции - Число -
// * ДополнительныйРеквизит - Произвольный
// * СуммаАкциза - Число
// * НомерТаможеннойДекларации - Строка
// * КодСтраныПроисхожденияТовара - Строка
// * ДанныеКодаТоварнойНоменклатуры - Структура:
// ** СерийныйНомер - Строка
// ** ГлобальныйИдентификаторТорговойЕдиницы - Строка
// ** КонтрольныйИдентификационныйЗнак - Строка
// ** ТипМаркировки - Строка
// * ЕдиницаИзмерения - Произвольный
// * ДанныеПоставщика - Структура:
// ** ИНН - Строка
// ** Наименование - Строка
// ** Телефон - Строка
// * ДанныеАгента - см. ПараметрыДанныеАгента
// * ПризнакАгентаПоПредметуРасчета - Число
// * ПризнакПредметаРасчета - Неопределено -
// * ПризнакСпособаРасчета - Неопределено -
// * СуммаНДС - Неопределено -
// * СтавкаНДС - Неопределено -
// * СуммаСкидок - Число
// * Сумма - Число -
// * ЦенаСоСкидками - Число -
// * Цена - Число -
// * Количество - Число -
// * Наименование - Строка
// * НомерСтрокиТовара - Число
// * ФискальнаяСтрока - Строка.
//
Функция ПараметрыФискальнойСтрокиЧека() Экспорт;
ПараметрыСтроки = Новый Структура();
ПараметрыСтроки.Вставить("ФискальнаяСтрока"); // Строка,Обязательно - Тип строки. Исходящий служебный параметр.
ПараметрыСтроки.Вставить("НомерСтрокиТовара"); // Число,Обязательно - Дополнительный параметр для обработки строк чека для форматно-логического контроля.
// Обязательные реквизиты
ПараметрыСтроки.Вставить("Наименование"); // Строка,Обязательно - Наименование предмета расчета
ПараметрыСтроки.Вставить("Количество" , 0); // Число,Обязательно - Количество предмета расчета
ПараметрыСтроки.Вставить("Цена" , 0); // Число,Обязательно - Цена без учета скидок и наценок (Необходимо для ФР и ФФД 1.0)
ПараметрыСтроки.Вставить("ЦенаСоСкидками" , 0); // Число,Обязательно - Цена с учета скидок и наценок (Необходимо начиная с ФФД 1.05 и выше)
ПараметрыСтроки.Вставить("Сумма" , 0); // Число,Обязательно - Стоимость предмета расчета с учетом скидок и наценок
ПараметрыСтроки.Вставить("СуммаСкидок"); // Число,Необязательно - Сумма скидок и наценок, не входит в ФФД.
ПараметрыСтроки.Вставить("СтавкаНДС" , Неопределено); // Число,Обязательно - Ставка НДС (Значения: Неопределено-БезНДС, 0, 10, 20, 18, 110, 118, 120)
ПараметрыСтроки.Вставить("СуммаНДС" , Неопределено); // Число,Обязательно - Сумма НДС
// Реквизиты начиная с ФФД 1.05
// Перечисление - ПризнакиСпособаРасчета - (ФФД, Тег 1214, Расшифровка - таблица 28)
ПараметрыСтроки.Вставить("ПризнакСпособаРасчета", Неопределено); // Признак способа расчета. Обязательно для ФФД 1.05 и выше.
// Реквизиты начиная с ФФД 1.1
// Перечисление - ПризнакиПредметаРасчета - (ФФД, Тег 1030, Расшифровка - таблица 29)
ПараметрыСтроки.Вставить("ПризнакПредметаРасчета", Неопределено); // Признак предмета расчета. Обязательно для ФФД 1.1 и выше.
// Перечисление - ПризнакиАгента - (ФФД, Тег 1222, Расшифровка - таблица 21)
ПараметрыСтроки.Вставить("ПризнакАгентаПоПредметуРасчета"); // Необязательно, Признак агента по предмету расчета, Тег 1222.
ПараметрыСтроки.Вставить("ДанныеАгента" , ПараметрыДанныеАгента()); // Структура - Данные агента, Тег 1223. Заполнение необязательно.
ПараметрыСтроки.Вставить("ДанныеПоставщика" , ПараметрыДанныеПоставщика()); // Структура - Данные агента, Тег 1224. Заполнение необязательно.
ПараметрыСтроки.Вставить("ЕдиницаИзмерения"); // Необязательно, Единица измерения предмета расчета.
ПараметрыСтроки.Вставить("ДанныеКодаТоварнойНоменклатуры", ПараметрыДанныеКодаТоварнойНоменклатуры()); // Коды товарной номенклатуры.
ПараметрыСтроки.Вставить("КодВидаНоменклатурнойКлассификации"); // Строка,Необязательно - Код вида номенклатурной классификации.
// Реквизиты начиная с ФФД 1.1 (Введены приказом от 9 апреля 2018 г. N ММВ-7-20/207@)
ПараметрыСтроки.Вставить("КодСтраныПроисхожденияТовара"); // Строка,Необязательно - Цифровой код страны происхождения товара в соответствии с Общероссийским классификатором стран мира.
ПараметрыСтроки.Вставить("НомерТаможеннойДекларации"); // Строка,Необязательно - Регистрационный номер таможенной декларации.
ПараметрыСтроки.Вставить("СуммаАкциза"); // Число,Необязательно - Сумма акциза, включенная в стоимость предмета расчета.
ПараметрыСтроки.Вставить("ДополнительныйРеквизит"); // Строка,Необязательно - Дополнительный реквизит предмета расчета, Тег 1191.
// Реквизиты начиная с ФФД 1.2
// Дробное количество, рекомендации ЦРПТ "ВЫВОД ТОВАРА ИЗ ОБОРОТА ПРИ РЕАЛИЗАЦИИ КОНЕЧНЫМ ПОТРЕБИТЕЛЯМ (ЧАСТИЧНАЯ ПРОДАЖА)"
// для 1.05 и 1.1 - пишем в 1191, Формирование и передача фискального документа в ГИС МТ
// для 1.2 - пишем в 1291
ПараметрыСтроки.Вставить("ДробноеКоличество", ПараметрыДробноеКоличество());
ПараметрыСтроки.Вставить("КонтрольнаяМарка"); // Строка,Необязательно - Код контрольной марки. Кодируется текстом в кодировке Base64.
ПараметрыСтроки.Вставить("КодЕдиницыИзмерения"); // Строка,Обязательно - Код единицы измерения в соответствии с общероссийским классификатором единиц измерения.
ПараметрыСтроки.Вставить("ОтраслевойРеквизит", ПараметрыОтраслевойРеквизит()); // Структура,Заполнение необязательно - Тэг 1260 - Отраслевой реквизит предмета расчета.
// Дополнительные реквизиты не входящие в ФФД.
ПараметрыСтроки.Вставить("НомерСекции" , 0); // Число,Необязательно - Номер секции ФР (для совместимости), 0-Значение по умолчанию.
ПараметрыСтроки.Вставить("Штрихкод"); // Строка,Необязательно - Штрихкод
ПараметрыСтроки.Вставить("ШтрихкодBase64"); // Строка,Необязательно - Штрихкод, Кодируется текстом в кодировке Base64.
// Продажа товаров в объемно-сортовом учете.
ПараметрыСтроки.Вставить("ОбъемноСортовойУчет", Ложь); // Булево,Необязательно - Признак товара, что он подлежит объемно-сортовому учету.
ПараметрыСтроки.Вставить("КоличествоВесовогоТовара", Неопределено); // Число,Необязательно - Количество весового товара при объемно-сортовом учете.
// Дата производства товара для формирования отраслевых тегов при продаже молочной продукции с нечитаемыми DataMatrix.
ПараметрыСтроки.Вставить("ДатаПроизводства"); // Дата,Необязательно - Дата производства товара.
ПараметрыСтроки.Вставить("NTIN"); // Строка,Необязательно - NTIN идентификаторы товара
Возврат ПараметрыСтроки;
КонецФункции
// Заполняет структуру параметров текстовой строки для фискализации чека.
//
// Параметры:
// Текст - Строка - Текстовая строка
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыТекстовойСтрокиЧека(Текст = Неопределено) Экспорт;
ПараметрыСтроки = Новый Структура();
ПараметрыСтроки.Вставить("ТекстоваяСтрока"); // Тип строки. Исходящий служебный параметр.
ПараметрыСтроки.Вставить("Текст", Текст); // Строка,Обязательно - Текстовая строка
ПараметрыСтроки.Вставить("ПереносСтроки", Ложь); // Булево,Необязательно - Перенос строки, устанавливается значение по умолчанию.
ПараметрыСтроки.Вставить("Выравнивание" , "Лево"); // Строка,Необязательно - Выравнивание текста, Значения: "Лево", "Право", "Центр".
Возврат ПараметрыСтроки;
КонецФункции
// Заполняет структуру параметров штрихкода в строке для фискализации чека.
//
// Параметры:
// ТипШтрихкодаЗнач - Строка - Тип штрихкода.
// ШтрихКодЗнач - Строка - Значение штрихкода.
// ШтрихКодBase64 - Строка - Значение штрихкода в Base64.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыШтрихкодВСтрокеЧека(ТипШтрихкодаЗнач = Неопределено, ШтрихКодЗнач = Неопределено, ШтрихКодBase64 = Неопределено) Экспорт;
ПараметрыСтроки = Новый Структура();
ПараметрыСтроки.Вставить("ТипШтрихкода", ТипШтрихкодаЗнач); // Строка,Обязательно - Тип штрихкода.
ПараметрыСтроки.Вставить("ШтрихКод" , ШтрихКодЗнач); // Строка,Обязательно - Значение штрихкода.
ПараметрыСтроки.Вставить("ШтрихКодBase64", ШтрихКодBase64); // Строка,Обязательно - Значение штрихкода в Base64.
Возврат ПараметрыСтроки;
КонецФункции
// Заполняет структуру параметров строки оплаты.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыСтрокиОплаты() Экспорт
ПараметрыСтроки = Новый Структура();
ПараметрыСтроки.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные"));
ПараметрыСтроки.Вставить("Сумма" , 0);
Возврат ПараметрыСтроки;
КонецФункции
// Заполняет структуру параметров детализации строки оплаты.
//
// Параметры:
// НаименованиеТипаОплаты - Строка
// Сумма - Число
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыДетализацииСтрокиОплаты(НаименованиеТипаОплаты = Неопределено, Сумма = 0) Экспорт
ПараметрыСтроки = Новый Структура();
ПараметрыСтроки.Вставить("НаименованиеТипаОплаты", НаименованиеТипаОплаты); // Строка,Обязательно Текстовая строка
ПараметрыСтроки.Вставить("Сумма", Сумма);
Возврат ПараметрыСтроки;
КонецФункции
// Заполняет структуру параметров строки оплаты.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыДанныеКоррекции() Экспорт
ДанныеКоррекции = Новый Структура();
ДанныеКоррекции.Вставить("ТипКоррекции", 0); // Число,Обязательно - Тип коррекции: 0-самостоятельно, 1-по предписанию.
ДанныеКоррекции.Вставить("ОписаниеКоррекции"); // Строка,Необязательно - Описание коррекции.
ДанныеКоррекции.Вставить("ДатаКоррекции"); // ДатаВремя,Обязательно - Дата совершения корректируемого расчета.
ДанныеКоррекции.Вставить("НомерПредписания"); // Строка,Обязательно - Номер предписания налогового органа.
Возврат ДанныеКоррекции;
КонецФункции
// Заполняет структуру параметров выполнения операции чека коррекции.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыОперацииЧекаКоррекции() Экспорт;
ПараметрыЧека = ПараметрыОперацииФискализацииЧека();
ПараметрыЧека.Вставить("КорректируемыйДокумент");
ПараметрыЧека.Вставить("НеприменениеККТ", Ложь);
ПараметрыЧека.Вставить("ДанныеКоррекции", ПараметрыДанныеКоррекции());
Возврат ПараметрыЧека;
КонецФункции
// Заполняет структуру параметров открытия и закрытия смены.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыОткрытияЗакрытияСмены() Экспорт;
ПараметрыОперации = ПараметрыВыполненияОперации();
ПараметрыОперации.Вставить("АдресРасчетов"); // Строка,Необязательно - Адрес расчетов (Тег 1009).
ПараметрыОперации.Вставить("МестоРасчетов"); // Строка,Необязательно - Место расчетов (Тег 1187).
ПараметрыОперации.Вставить("КассаККМ"); //ОпределяемыйТип.КассаБПО,Необязательно - касса ккм для закрытия смены.
ПараметрыОперации.Вставить("Печать", Истина); // Булево,Необязательно - Необходима печать требуемого документа.
Возврат ПараметрыОперации;
КонецФункции
// Заполняет структуру параметров инкассацию на фискальном устройстве.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыИнкассации() Экспорт;
ПараметрыОперации = ПараметрыВыполненияОперации();
ПараметрыОперации.Вставить("ДокументОснование" , Неопределено); // Ссылка,Необязательно. Документ по которому формируется операция.
ПараметрыОперации.Вставить("Организация" , Неопределено); // Ссылка,Необязательно. Организация по которой формируется операция.
ПараметрыОперации.Вставить("ТорговыйОбъект" , Неопределено); // Ссылка,Необязательно. Объект по которому формируется операция.
ПараметрыОперации.Вставить("КассаККМ" , Неопределено); // Ссылка,Необязательно. Объект по которому формируется операция.
ПараметрыОперации.Вставить("ТипИнкассации"); // Число,Обязательно - Тип инкассации (1-внесение, 0-выемка)
ПараметрыОперации.Вставить("Сумма", 0); // Число,Обязательно - Сумма инкассации.
Возврат ПараметрыОперации;
КонецФункции
// Заполняет структуру параметров печати копии чека.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыПечатьКопииЧека() Экспорт;
ПараметрыОперации = ПараметрыВыполненияОперации();
ПараметрыОперации.Вставить("ДокументСсылка" , Неопределено); // Ссылка - Документ по которому пробивается чек.
ПараметрыОперации.Вставить("НомерЧекаККТ" , Неопределено); // Строка - Номер фискального чека.
ПараметрыОперации.Вставить("Аппаратно" , Истина); // Булево - Печать копии чека производиться аппаратно по данным ККТ, иначе по регистру фискальных операций.
ПараметрыОперации.Вставить("НомерЧека" , Неопределено); // Строка - Номер чека для аппаратной печати чека на ККТ.
ПараметрыОперации.Вставить("ФискальныйПризнак"); // Строка - Фискальный признак документа.
Возврат ПараметрыОперации;
КонецФункции
// Заполняет структуру параметров аннулирования чека.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыОперацииАннулированияЧека() Экспорт;
ПараметрыОперации = ПараметрыВыполненияОперации();
ПараметрыОперации.Вставить("ТипРасчета" , ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств"));
ПараметрыОперации.Вставить("Фискальный" , Истина);
Возврат ПараметрыОперации;
КонецФункции
// Заполняет структуру печати QR кода на фискальном устройстве.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыПечатиQRКодаНаФискальномУстройстве() Экспорт;
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("ТипПлатежнойСистемы"); // ПеречислениеСсылка.ТипыПлатежнойСистемыККТ, Необязательно - Тип платежной системы.
ПараметрыОперации.Вставить("ИдентификаторОплатыПлатежнойСистемы"); // Строка,Необязательно - Идентификатор оплаты платежных системы.
ПараметрыОперации.Вставить("QRКод", ПараметрыQRКода()); // Структура,Заполнение необязательно - параметры QR кода в теле чека.
ПараметрыОперации.QRКод.ТекстПользователя = НСтр("ru='Для совершения платежа отсканируйте QR-код'");
ПараметрыОперации.Вставить("СуммаОперации", Неопределено); // Число,Необязательно - Сумма операции.
Возврат ПараметрыОперации;
КонецФункции
// Параметры счетчиков операций.
//
// Возвращаемое значение:
// Структура - Параметры нормализуемых фискальных данных:
// * КоличествоЧеков - Число -
// * СуммаЧеков - Число -
// * КоличествоЧековКоррекции - Число -
// * СуммаЧековКоррекции - Число -
//
Функция ПараметрыСчетчиковОпераций() Экспорт
СтруктураРезультат = Новый Структура();
СтруктураРезультат.Вставить("КоличествоЧеков");
СтруктураРезультат.Вставить("СуммаЧеков");
СтруктураРезультат.Вставить("КоличествоЧековКоррекции");
СтруктураРезультат.Вставить("СуммаЧековКоррекции");
Возврат СтруктураРезультат;
КонецФункции
// Заполняет структуру параметров нормализуемых фискальных данных.
//
// Возвращаемое значение:
// Структура - Параметры нормализуемых фискальных данных:
// * ДатаСменыККТ - Число -
// * НомерСменыККТ - Число -
// * НомерЧекаККТ - Число -
// * НомерЧекаЗаСмену - Число -
// * СтатусСмены - Неопределено -
// * СчетчикиОперацийПриход - Структура -:
// ** КоличествоЧеков - Число.
// ** СуммаЧеков - Число.
// ** КоличествоЧековКоррекции - Число.
// ** СуммаЧековКоррекции - Число.
// * СчетчикиОперацийВозвратПрихода - Структура -:
// ** КоличествоЧеков - Число.
// ** СуммаЧеков - Число.
// ** КоличествоЧековКоррекции - Число.
// ** СуммаЧековКоррекции - Число.
// * СчетчикиОперацийРасход - Структура -:
// ** КоличествоЧеков - Число.
// ** СуммаЧеков - Число.
// ** КоличествоЧековКоррекции - Число.
// ** СуммаЧековКоррекции - Число.
// * СчетчикиОперацийВозвратРасхода - Структура -:
// ** КоличествоЧеков - Число.
// ** СуммаЧеков - Число.
// ** КоличествоЧековКоррекции - Число.
// ** СуммаЧековКоррекции - Число.
// * КоличествоЧеков - Число.
// * ОстатокНаличных - Число.
// * ПревышеноВремяОжиданияОтветаОФД - Булево -
// * КоличествоНепереданныхФД - Неопределено -
// * НомерПервогоНепереданногоФД - Неопределено -
// * ДатаПервогоНепереданногоФД - Неопределено -
// * НеобходимаСрочнаяЗаменаФН - Булево -
// * ПамятьФНПереполнена - Булево -
// * РесурсФНИсчерпан - Булево -
//
Функция ПараметрыНормализуемыхФискальныхДанных() Экспорт
СтруктураРезультат = Новый Структура();
СтруктураРезультат.Вставить("ДатаСменыККТ" , 0); // Дата открытой/закрытой смены.
СтруктураРезультат.Вставить("НомерСменыККТ" , 0); // Номер открытой/закрытой смены.
СтруктураРезультат.Вставить("НомерЧекаККТ" , 0); // Номер последнего фискального чека.
СтруктураРезультат.Вставить("НомерЧекаЗаСмену" , 0); // Номер последнего чека за смену.
СтруктураРезультат.Вставить("СтатусСмены" , Неопределено); // Состояние смены: 1-Закрыта, 2-Открыта, 3-Истекла.
СтруктураРезультат.Вставить("СчетчикиОперацийПриход" , ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "приход".
СтруктураРезультат.Вставить("СчетчикиОперацийВозвратПрихода", ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "возврат прихода".
СтруктураРезультат.Вставить("СчетчикиОперацийРасход" , ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "расход".
СтруктураРезультат.Вставить("СчетчикиОперацийВозвратРасхода", ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "возврат расхода".
СтруктураРезультат.Вставить("КоличествоЧеков"); // Количество кассовых чеков за смену.
СтруктураРезультат.Вставить("ОстатокНаличных"); // Остаток наличных денежных средств в кассе
СтруктураРезультат.Вставить("ПревышеноВремяОжиданияОтветаОФД", Ложь);
СтруктураРезультат.Вставить("КоличествоНепереданныхФД" , Неопределено); // Количество непереданных документов.
СтруктураРезультат.Вставить("НомерПервогоНепереданногоФД", Неопределено); // Номер первого непереданного документ.
СтруктураРезультат.Вставить("ДатаПервогоНепереданногоФД ", Неопределено); // Дата и время первого из непереданных документов.
СтруктураРезультат.Вставить("НеобходимаСрочнаяЗаменаФН" , Ложь); // Признак необходимости срочной замены ФН.
СтруктураРезультат.Вставить("ПамятьФНПереполнена" , Ложь); // Признак переполнения памяти ФН.
СтруктураРезультат.Вставить("РесурсФНИсчерпан" , Ложь); // Признак исчерпания ресурса ФН.
Возврат СтруктураРезультат;
КонецФункции
// Заполняет структуру параметров печати текста.
//
// Параметры:
// СтрокиТекста - Строка
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыПечатиТекста(СтрокиТекста = Неопределено) Экспорт
Параметры = Новый Структура();
Параметры.Вставить("СтрокиТекста", СтрокиТекста);
Возврат Параметры;
КонецФункции
// Заполняет структуру параметров запрос КМ.
//
// Возвращаемое значение:
// Структура -Параметры запрос КМ:
// * ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса
// * Количество - Число - Количество
// * ДробноеКоличество - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДробноеКоличество.
// * КонтрольнаяМарка - Строка - Код контрольной марки. Кодируется текстом в кодировке Base64.
// * КодЕдиницыИзмерения - Строка - Код единицы измерения в соответствии с общероссийским классификатором единиц измерения.
// * ПланируемыйСтатусТовара - ПеречислениеСсылка.ПланируемыйСтатусМаркируемогоТовара.
//
Функция ПараметрыЗапросКМ() Экспорт;
Параметры = Новый Структура();
Параметры.Вставить("ИдентификаторЗапроса"); // Строка,Обязательно - Уникальный идентификатор запроса
Параметры.Вставить("ОжидатьПолучениеОтветаОИСМ", Истина); // Булево,Обязательно - Будет ли ожидаться получение ответа от ОИСМ.
Параметры.Вставить("ОтправлятьНаСерверОИСМ" , Истина); // Булево,Обязательно - Запрос КМ формируется локально или отправляется на сервер ОИСМ.
Параметры.Вставить("Количество", 0); // Число,Обязательно - Количество
Параметры.Вставить("ДробноеКоличество", ПараметрыДробноеКоличество());
Параметры.Вставить("КонтрольнаяМарка"); // Строка,Необязательно - Код контрольной марки. Кодируется текстом в кодировке Base64.
// КодЕдиницыИзмерения - Если значение реквизита заполнено, используется он, иначе МераКоличестваПредметаРасчета
Параметры.Вставить("КодЕдиницыИзмерения"); // Строка,Необязательно - Код единицы измерения в соответствии с общероссийским классификатором единиц измерения.
Параметры.Вставить("МераКоличестваПредметаРасчета"); // Перечисление.МераКоличестваПредметаРасчетаККТ,Необязательно - Мера количества предмета расчета. Тэг 2108. Значение из таблицы 114 (ФФД).
Параметры.Вставить("ПланируемыйСтатусТовара"); // Перечисление.ПланируемыйСтатусМаркируемогоТовара - Необязательно
Возврат Параметры;
КонецФункции
// Заполняет структуру параметров запрос КМ.
//
// Возвращаемое значение:
// Структура:
// * ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса
//
Функция ПараметрыПодтверждениеКМ() Экспорт;
Параметры = Новый Структура();
Параметры.Вставить("ИдентификаторЗапроса"); // Строка,Обязательно - Уникальный идентификатор запроса
Параметры.Вставить("Выбытие", Истина); // Булево,Обязательно - КМ будет реализована в состав документа о реализации маркированного товара.
Возврат Параметры;
КонецФункции
// Заполняет структуру пакетной операции для добавления ее в очередь чеков
//
// Возвращаемое значение:
// Структура:
// * ТипОперации - ПеречислениеСсылка.ТипыПакетнойОперацииВОчередиЧеков
// * ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции
// * СлипЧекВТелеФискального - Булево, Неопределено - Выводить слип-чек в теле фискального, Истина - слип-чек будет выведен
// в теле фискального, Ложь - короткий слип-чек не будет выводиться, Неопределено - короткий слип-чек
// будет выводиться если поддерживает драйвер оборудования.
// * ПараметрыЭквайринговойОперации - Структура:
// ** ВидОплаты - Строка -
// ** ПроцентКомиссии - Число -
// ** РеквизитыКартыQR - Строка -
// * ПараметрыПродажаСВыдачейНаличных - Структура:
// ** СуммаВыдачи - Число - сумма выдачи наличных, в случае операции продажа с выдачей наличных
// ** ДанныеАгента - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента
// ** ДанныеПоставщика - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеПоставщика
// ** ДокументОснованиеВыдачи - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО, Неопределено
// ** ДокументОснованиеВозврата - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО, Неопределено
//
Функция ПараметрыПакетнойОперацииВОчередиЧеков() Экспорт
Параметры = Новый Структура();
Параметры.Вставить("ТипОперации", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.НеПакетнаяОперация"));
Параметры.Вставить("ИдентификаторЭТ");
Параметры.Вставить("СлипЧекВТелеФискального");
ПараметрыЭквайринговойОперации = Новый Структура();
ПараметрыЭквайринговойОперации.Вставить("ВидОплаты");
ПараметрыЭквайринговойОперации.Вставить("ПроцентКомиссии");
ПараметрыЭквайринговойОперации.Вставить("РеквизитыКартыQR", "");
Параметры.Вставить("ПараметрыЭквайринговойОперации", ПараметрыЭквайринговойОперации);
ПараметрыПродажаСВыдачейНаличных = Новый Структура();
ПараметрыПродажаСВыдачейНаличных.Вставить("СуммаВыдачи");
ПараметрыПродажаСВыдачейНаличных.Вставить("ДанныеАгента", ПараметрыДанныеАгента());
ПараметрыПродажаСВыдачейНаличных.Вставить("ДанныеПоставщика", ПараметрыДанныеПоставщика());
ПараметрыПродажаСВыдачейНаличных.Вставить("ДокументОснованиеВыдачи", Неопределено);
ПараметрыПродажаСВыдачейНаличных.Вставить("ДокументОснованиеВозврата", Неопределено);
Параметры.Вставить("ПараметрыПродажаСВыдачейНаличных", ПараметрыПродажаСВыдачейНаличных);
Возврат Параметры;
КонецФункции
// Параметры фискальной операции.
//
// Возвращаемое значение:
// Структура - Параметры фискальной операции:
// * Кассир - ОпределяемыйТип.СубъектПерсональныхДанныхБПО
// * ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО
// * Организация - ОпределяемыйТип.ОрганизацияБПО
// * ТорговыйОбъект - ОпределяемыйТип.ТорговыйОбъектБПО
// * НомерСменыККТ - Число -
// * НомерЧекаККТ - Число -
// * СтатусСмены - Число -
// * ДатаВремя - Дата
// * ПараметрыXML - Строка -
// * РезультатXML - Строка -
// * КассоваяСмена - ДокументСсылка.КассоваяСмена
// * ТестовыеЧеки - Булево
// * ТекстЧека - Строка
// * ДополнительныеПараметры - Любое
// * Результат - Булево -
// * ТекстОшибки - Строка
//
Функция ПараметрыФискальнойОперации() Экспорт
ДанныеОперации = Новый Структура();
ДанныеОперации.Вставить("Кассир");
ДанныеОперации.Вставить("ДокументОснование");
ДанныеОперации.Вставить("Организация");
ДанныеОперации.Вставить("ТорговыйОбъект");
ДанныеОперации.Вставить("НомерСменыККТ" , 0);
ДанныеОперации.Вставить("НомерЧекаККТ" , 0);
ДанныеОперации.Вставить("СтатусСмены", 0);
ДанныеОперации.Вставить("ДатаВремя");
ДанныеОперации.Вставить("ПараметрыXML", "");
ДанныеОперации.Вставить("РезультатXML", "");
ДанныеОперации.Вставить("КассоваяСмена");
ДанныеОперации.Вставить("ТестовыеЧеки");
ДанныеОперации.Вставить("ТекстЧека");
ДанныеОперации.Вставить("ДополнительныеПараметры");
ДанныеОперации.Вставить("Результат", Истина);
ДанныеОперации.Вставить("ТекстОшибки");
Возврат ДанныеОперации;
КонецФункции
#КонецОбласти
#Область QRКодЧекаККТ
// Функция возвращает структуру параметров QR кода чека ККТ.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыQRКодаЧекаККТ() Экспорт
ПараметрыШтрихкода = Новый Структура();
ПараметрыШтрихкода.Вставить("ДатаВремяРасчета"); // Дата и время осуществления расчета
ПараметрыШтрихкода.Вставить("СуммаРасчета", 0); // Сумма расчета в рублях и копейках
ПараметрыШтрихкода.Вставить("НомерФискальногоНакопителя"); // Заводской номер фискального накопителя
ПараметрыШтрихкода.Вставить("НомерФискальногоДокумента"); // Порядковый номер фискального документа
ПараметрыШтрихкода.Вставить("ФискальныйПризнак"); // Фискальный признак документ
ПараметрыШтрихкода.Вставить("ПризнакРасчета"); // Признак расчета, перечисление
ПараметрыШтрихкода.Вставить("ПризнакРасчетаКод"); // Признак расчета, код
Возврат ПараметрыШтрихкода;
КонецФункции
// Функция расшифровывает QR код для чека ККТ. Структура описана в документе ФФД в разделе 61.
//
// Параметры:
// ЗначениеQRКода - Строка
// Возвращаемое значение:
// Структура.
//
Функция РасшифроватьQRКодЧекаККТ(ЗначениеQRКода) Экспорт
ДанныеШтрихкода = ПараметрыQRКодаЧекаККТ();
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.РасшифроватьQRКодЧекаККТ(ЗначениеQRКода, ДанныеШтрихкода);
Возврат ДанныеШтрихкода;
КонецФункции
// Функция формирует QR код для чека ККТ. Структура описана в документе ФФД в разделе 61.
//
// Параметры:
// ПараметрыQRКода - Структура
// Возвращаемое значение:
// Строка.
//
Функция СформироватьQRКодЧекаККТараметрыQRКода) Экспорт
ДанныеQRКода = "";
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.СформироватьQRКодЧекаККТараметрыQRКода, ДанныеQRКода);
Возврат ДанныеQRКода;
КонецФункции
#КонецОбласти
#Область КодыОФД
///////////////////////////////////////////////////////////////////////////////
// Система налогообложения
// Получить код системы налогообложения ККТ.
//
// Параметры:
// СистемаНалогообложенияККТ - ПеречислениеСсылка.ТипыСистемНалогообложенияККТ - Система налогообложения ККТ.
//
// Возвращаемое значение:
// Произвольный, Число - Код системы налогообложения ККТ
Функция КодСистемыНалогообложенияККТ(СистемаНалогообложенияККТ) Экспорт
Код = 0;
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.КодСистемыНалогообложенияККТ(Код, СистемаНалогообложенияККТ);
Возврат Код;
КонецФункции
// Получить систему налогообложения ККТ по коду
//
// Параметры:
// КодСистемыНалогообложенияККТ - Число - Код системы налогообложения ККТ.
//
// Возвращаемое значение:
// Произвольный, ПеречислениеСсылка.ТипыСистемНалогообложенияККТ - Система налогообложения ККТПо коду
Функция СистемаНалогообложенияККТПоКоду(КодСистемыНалогообложенияККТ) Экспорт
Значение = 0;
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.СистемаНалогообложенияККТПоКоду(Значение, КодСистемыНалогообложенияККТ);
Возврат Значение;
КонецФункции
// Получить наименование системы налогообложения по коду.
//
// Параметры:
// СистемаНалогообложения - Число, Произвольный - Система налогообложения
// Кратко - Булево - Кратко
//
// Возвращаемое значение:
// Строка, Произвольный - Наименование системы налогообложения
Функция НаименованиеСистемыНалогообложения(СистемаНалогообложения, Кратко = Ложь) Экспорт;
Наименование = 0;
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.НаименованиеСистемыНалогообложения(Наименование, СистемаНалогообложения, Кратко);
Возврат Наименование;
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// Коды видов документов
// Возвращает код вида документа удостоверяющего личность ККТ.
//
// Параметры:
// ВидДокументаУдостоверяющегоЛичность - ПеречислениеСсылка.ВидДокументаУдостоверяющегоЛичностьККТ - Вид документа удостоверяющего личность
//
// Возвращаемое значение:
// Произвольный, Число - Код вид документа удостоверяющего личность
Функция КодВидДокументаУдостоверяющегоЛичность(ВидДокументаУдостоверяющегоЛичность) Экспорт
Код = 0;
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.КодВидДокументаУдостоверяющегоЛичность(Код, ВидДокументаУдостоверяющегоЛичность);
Возврат Код;
КонецФункции
// Возвращает вида документа удостоверяющего личность ККТ по коду.
//
// Параметры:
// КодВидаДокументаУдостоверяющегоЛичность - Число - Код вида документа удостоверяющего личность.
//
// Возвращаемое значение:
// ПеречислениеСсылка.ВидДокументаУдостоверяющегоЛичностьККТ, Произвольный - Вид документа удостоверяющего личность по коду
Функция ВидДокументаУдостоверяющегоЛичностьПоКоду(КодВидаДокументаУдостоверяющегоЛичность) Экспорт
Значение = "";
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.ВидДокументаУдостоверяющегоЛичностьПоКоду(Значение, КодВидаДокументаУдостоверяющегоЛичность);
Возврат Значение;
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// Коды расчетов, признаков расчетов и предметов расчетов
// Получить код расчета денежными средствами.
//
// Параметры:
// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - Тип расчета.
//
// Возвращаемое значение:
// Произвольный, Число - Код расчета денежными средствами
Функция КодРасчетаДенежнымиСредствами(ТипРасчета) Экспорт
ТипыРасчета = Новый Соответствие();
ТипыРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств") , 1);
ТипыРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств") , 2);
ТипыРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств") , 3);
ТипыРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств"), 4);
Возврат ТипыРасчета.Получить(ТипРасчета);
КонецФункции
// Получить наименование кода расчета денежными средствами по коду.
//
// Параметры:
// КодРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - Тип расчета.
//
// Возвращаемое значение:
// Строка - Наименование кода расчета денежными средствами
Функция НаименованиеКодаРасчетаДенежнымиСредствами(КодРасчета) Экспорт
ТипыРасчета = Новый Соответствие();
ТипыРасчета.Вставить(1, НСтр("ru='ПРИХОД'")); // Чек продажи
ТипыРасчета.Вставить(2, НСтр("ru='ВОЗВРАТ ПРИХОДА'")); // Чек возврата продажи
ТипыРасчета.Вставить(3, НСтр("ru='РАСХОД'")); // Чек покупки
ТипыРасчета.Вставить(4, НСтр("ru='ВОЗВРАТ РАСХОДА'")); // Чек возврата покупки
Возврат ТипыРасчета.Получить(КодРасчета);
КонецФункции
// Получить типа расчета денежными средствами по коду.
//
// Параметры:
// КодПризнакаРасчета - Число - Код признака расчета.
//
// Возвращаемое значение:
// ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами, Произвольный - Расчет денежными средствами по коду
Функция РасчетДенежнымиСредствамиПоКоду(КодПризнакаРасчета) Экспорт
ТипыРасчета = Новый Соответствие();
ТипыРасчета.Вставить(1, ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств"));
ТипыРасчета.Вставить(2, ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств"));
ТипыРасчета.Вставить(3, ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств"));
ТипыРасчета.Вставить(4, ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств"));
Возврат ТипыРасчета.Получить(КодПризнакаРасчета);
КонецФункции
// Получить код признака способа расчета.
//
// Параметры:
// ПризнакСпособаРасчета - ПеречислениеСсылка.ПризнакиСпособаРасчета - Признак способа расчета.
//
// Возвращаемое значение:
// Произвольный, Число - Код признака способа расчета
Функция КодПризнакаСпособаРасчета(ПризнакСпособаРасчета) Экспорт
ПризнакиСпособаРасчета = Новый Соответствие();
ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПредоплатаПолная") , 1);
ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПредоплатаЧастичная") , 2);
ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.Аванс") , 3);
ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСПолнойОплатой") , 4);
ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСЧастичнойОплатой"), 5);
ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаБезОплаты") , 6);
ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ОплатаКредита") , 7);
Возврат ПризнакиСпособаРасчета.Получить(ПризнакСпособаРасчета);
КонецФункции
// Получить признак способа расчета по коду.
//
// Параметры:
// КодПризнакаСпособаРасчета - Число - Код признака способа расчета.
//
// Возвращаемое значение:
// Произвольный, ПеречислениеСсылка.ПризнакиСпособаРасчета - Признак способа расчета по коду
Функция ПризнакСпособаРасчетаПоКоду(КодПризнакаСпособаРасчета) Экспорт
ПризнакиСпособаРасчета = Новый Соответствие();
ПризнакиСпособаРасчета.Вставить(1, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПредоплатаПолная"));
ПризнакиСпособаРасчета.Вставить(2, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПредоплатаЧастичная"));
ПризнакиСпособаРасчета.Вставить(3, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.Аванс"));
ПризнакиСпособаРасчета.Вставить(4, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСПолнойОплатой"));
ПризнакиСпособаРасчета.Вставить(5, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСЧастичнойОплатой"));
ПризнакиСпособаРасчета.Вставить(6, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаБезОплаты"));
ПризнакиСпособаРасчета.Вставить(7, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ОплатаКредита"));
Возврат ПризнакиСпособаРасчета.Получить(КодПризнакаСпособаРасчета);
КонецФункции
// Получить наименование признака способа расчета по коду.
//
// Параметры:
// КодПризнакаСпособаРасчета - Число, Произвольный - Код признака способа расчета
//
// Возвращаемое значение:
// Строка, Произвольный - Наименование признака способа расчета
Функция НаименованиеПризнакаСпособаРасчета(КодПризнакаСпособаРасчета) Экспорт;
ПризнакиСпособаРасчета = Новый Соответствие();
ПризнакиСпособаРасчета.Вставить(1, НСтр("ru='ПРЕДОПЛАТА 100%'"));
ПризнакиСпособаРасчета.Вставить(2, НСтр("ru='ПРЕДОПЛАТА'"));
ПризнакиСпособаРасчета.Вставить(3, НСтр("ru='АВАНС'"));
ПризнакиСпособаРасчета.Вставить(4, НСтр("ru='ПОЛНЫЙ РАСЧЕТ'"));
ПризнакиСпособаРасчета.Вставить(5, НСтр("ru='ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ'"));
ПризнакиСпособаРасчета.Вставить(6, НСтр("ru='ПЕРЕДАЧА В КРЕДИТ'"));
ПризнакиСпособаРасчета.Вставить(7, НСтр("ru='ОПЛАТА КРЕДИТА'"));
Возврат ПризнакиСпособаРасчета.Получить(КодПризнакаСпособаРасчета);
КонецФункции
// Получить код признака способа расчета.
//
// Параметры:
// ПризнакПредметаРасчета - ПеречислениеСсылка.ПризнакиПредметаРасчета - Признак предмета расчета.
//
// Возвращаемое значение:
// Произвольный, Число - Код признака предмета расчета
Функция КодПризнакаПредметаРасчета(ПризнакПредметаРасчета) Экспорт
Код = 0;
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.КодПризнакаПредметаРасчета(Код, ПризнакПредметаРасчета);
Возврат Код;
КонецФункции
// Получить признак способа расчета по коду.
//
// Параметры:
// КодПризнакаПредметаРасчета - Число - Код признака предмета расчета.
//
// Возвращаемое значение:
// ПеречислениеСсылка.ПризнакиПредметаРасчета, Произвольный - Признак предмета расчета по коду
Функция ПризнакПредметаРасчетаПоКоду(КодПризнакаПредметаРасчета) Экспорт
Значение = 0;
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.ПризнакПредметаРасчетаПоКоду(Значение, КодПризнакаПредметаРасчета);
Возврат Значение;
КонецФункции
// Получить наименование признака предмета расчета по коду.
//
// Параметры:
// КодПризнакаПредметаРасчета -Число - Код признака предмета расчета.
//
// Возвращаемое значение:
// Строка, Произвольный - Наименование признака предмета расчета
Функция НаименованиеПризнакаПредметаРасчета(КодПризнакаПредметаРасчета) Экспорт
Наименование = "";
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.НаименованиеПризнакаПредметаРасчета(Наименование, КодПризнакаПредметаРасчета);
Возврат Наименование;
КонецФункции
// Возвращает текстовое представление типа оплаты на ККТ по версии ФФД
//
// Параметры:
// ТипОплатыККТ - ПеречислениеСсылка.ТипыОплатыККТ
// ВерсияФФД - Строка - "1.0", "1.1", "1.2"
//
// Возвращаемое значение:
// Строка.
Функция НаименованиеТипаОплатыККТ(ТипОплатыККТ, ВерсияФФД) Экспорт
Наименование = "";
ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.НаименованиеТипаОплатыККТ(Наименование, ТипОплатыККТ, ВерсияФФД);
Возврат Наименование;
КонецФункции
#КонецОбласти
#Область УстаревшиеПроцедурыИФункции
// ++ Локализация
#Область КодыОФД
///////////////////////////////////////////////////////////////////////////////
// Коды признаков агентов
// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента.
// Получить признак агента по коду.
//
// Параметры:
// КодПризнакаАгента - ПеречислениеСсылка.ПризнакиАгента - Код признака агента
//
// Возвращаемое значение:
// Произвольный, Число - Код признака агента
Функция КодПризнакаАгента(КодПризнакаАгента) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента(КодПризнакаАгента);
КонецФункции
// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.ПризнакАгентаПоКоду.
// Получить код типа признака агента.
//
// Параметры:
// ПризнакАгента - Число - Признак агента
//
// Возвращаемое значение:
// ПеречислениеСсылка.ПризнакиАгента, Произвольный - Признак агента по коду
Функция ПризнакАгентаПоКоду(ПризнакАгента) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.ПризнакАгентаПоКоду(ПризнакАгента);
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// Коды изменений сведений ККТ
// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПричиныИзмененияСведенийККТ.
// Получить код причины изменения сведений о ККТ.
//
// Параметры:
// ПричинаИзмененияСведенийККТ - ПеречислениеСсылка.ПричиныИзмененияСведенийККТ - Причина изменения сведений ККТ.
//
// Возвращаемое значение:
// Произвольный, Число - Код причины изменения сведений ККТ
Функция КодПричиныИзмененияСведенийККТ(ПричинаИзмененияСведенийККТ) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПричиныИзмененияСведенийККТ(ПричинаИзмененияСведенийККТ);
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// Коды маркировки
// Устарела: следует использовать МенеджерОборудованияМаркировка.КодПланируемыйСтатусМаркируемогоТовара.
// Получить код планируемого статус маркируемого товара
//
// Параметры:
// ПланируемыйСтатусМаркируемогоТовара - ПеречислениеСсылка.ПланируемыйСтатусМаркируемогоТовара - Планируемый статус маркируемого товара.
//
// Возвращаемое значение:
// Число - Код планируемого статус маркируемого товара по ОФД
//
Функция КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара);
КонецФункции
// Устарела: следует использовать МенеджерОборудованияМаркировка.КодОтветаОИСМОСтатусеТовара.
// Получить код ответ ОИСМ о статусе товара
//
// Параметры:
// ОтветОИСМОСтатусеТовара - ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ от ИСМО.
//
// Возвращаемое значение:
// Число - Ответ ОИСМ о статусе товара по ОФД
//
Функция КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара);
КонецФункции
// Устарела: следует использовать МенеджерОборудованияМаркировка.ОтветОИСМОСтатусеТовараПоКоду.
// Получить ответ ОИСМ о статусе товара по коду.
//
// Параметры:
// ОтветОИСМОСтатусеТовара - Число - Ответ от ИСМО.
//
// Возвращаемое значение:
// ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ ОИСМ.
//
Функция ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара);
КонецФункции
// Устарела: следует использовать МенеджерОборудованияМаркировка.КодТипаМаркировкиККТ.
// Получить код типа маркировки ККТ по коду.
//
// Параметры:
// ТипМаркировкиККТ - ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТ.
//
// Возвращаемое значение:
// Строка, Произвольный - Код типа маркировки ККТ
Функция КодТипаМаркировкиККТ(ТипМаркировкиККТ) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.КодТипаМаркировкиККТ(ТипМаркировкиККТ);
КонецФункции
// Устарела: следует использовать МенеджерОборудованияМаркировка.ТипМаркировкиККТПоКоду.
// Получить код типа маркировки ККТ.
//
// Параметры:
// КодТипМаркировкиККТ - Число - Код тип маркировки ККТ
//
// Возвращаемое значение:
// Произвольный, ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТПо коду
Функция ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ);
КонецФункции
// Устарела: следует использовать МенеджерОборудованияМаркировка.СтатусРезультатаЗапросаКМПоКоду.
// Получить статус результата запроса КМ по коду.
//
// Параметры:
// КодСтатуса - Число - Код статуса.
//
// Возвращаемое значение:
// Произвольный, ПеречислениеСсылка.СтатусРезультатаЗапросаКМ - Статус результата запроса КМПо коду
Функция СтатусРезультатаЗапросаКМПоКоду(КодСтатуса) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.СтатусРезультатаЗапросаКМПоКоду(КодСтатуса);
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// Коды единицы измерения
// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ.
// Код меры количества предмета расчета ККТ.
//
// Параметры:
// МераКоличестваПредметаРасчетаККТ - ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ - Мера количества предмета расчета ККТ
//
// Возвращаемое значение:
// Произвольный, Число - Код меры количества предмета расчета ККТ
Функция КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчетаККТ) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчетаККТ);
КонецФункции
// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаККТПоКоду.
// Получить меру количества предмета расчета по коду.
//
// Параметры:
// КодМерыКоличестваПредметаРасчетаККТ - ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ - Код меры количества предмета расчета ККТ
//
// Возвращаемое значение:
// Произвольный, ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ - Мера количества предмета расчета ККТПо коду
Функция МераКоличестваПредметаРасчетаККТПоКоду(КодМерыКоличестваПредметаРасчетаККТ) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаККТПоКоду(КодМерыКоличестваПредметаРасчетаККТ);
КонецФункции
// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения.
// Получить меру количества предмета расчета по коду единицы измерения.
//
// Параметры:
// КодЕдиницыИзмерения - Число - Код единицы измерения.
//
// Возвращаемое значение:
// ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ, Произвольный - Мера количества предмета расчета по коду единицы измерения
Функция МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(КодЕдиницыИзмерения) Экспорт
Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(КодЕдиницыИзмерения);
КонецФункции
#Область НефискальныйДокумент
// АПК: 142-выкл обратная совместимость
// Устарела: следует использовать механизм ШаблоныФискальныхДокументов.ШаблонКассовыйЧек.
// Функция формирует текст нефискального документа по шаблону.
//
// Параметры:
// ТипДокумента - Число
// ОбщиеПараметры - Структура - где:
// * ПозицииЧека - Массив из Структура - где:
// ** Наименование - Строка - .
// ** ДанныеПоставщика - Структура - где:
// *** Наименование - Строка - .
// ** ДанныеАгента - Структура - где:
// *** ОператорПеревода - Структура -
// *** Наименование - Строка - .
// * ДанныеПоставщика - Структура - где:
// ** Наименование - Строка - .
// * ДанныеАгента - Структура - где:
// ** ОператорПеревода - Структура -
// ** Наименование - Строка - .
// ШиринаСтроки - Число
// ДополнительныйТекст - Строка
// ФорматФФД - Строка
// ПолеПодписи - Булево - выводить поле подписи
//
// Возвращаемое значение:
// Строка - .
//
Функция СформироватьТекстНефискальногоДокумента(ТипДокумента, ОбщиеПараметры, ШиринаСтроки = 32, ДополнительныйТекст = Неопределено, ФорматФФД = "1.1", ПолеПодписи = Истина) Экспорт
ПозицииЧека = ?(ОбщиеПараметры.Свойство("ПозицииЧека"), ОбщиеПараметры.ПозицииЧека, Неопределено);
ТаблицаОплат = ?(ОбщиеПараметры.Свойство("ТаблицаОплат"), ОбщиеПараметры.ТаблицаОплат, Неопределено);
Если ТипДокумента = 0 Тогда
ТипыЧеков = Новый Соответствие();
ТипыЧеков.Вставить(1, НСтр("ru='ПРИХОД'")); // Чек продажи
ТипыЧеков.Вставить(2, НСтр("ru='ВОЗВРАТ ПРИХОДА'")); // Чек возврата продажи
ТипыЧеков.Вставить(3, НСтр("ru='РАСХОД'")); // Чек покупки
ТипыЧеков.Вставить(4, НСтр("ru='ВОЗВРАТ РАСХОДА'")); // Чек возврата покупки
ТипЧека = ТипыЧеков.Получить(КодРасчетаДенежнымиСредствами(ОбщиеПараметры.ТипРасчета))
ИначеЕсли ТипДокумента = 1 Тогда
ТипЧека = НСтр("ru='ОТКРЫТИЕ СМЕНЫ'");
ИначеЕсли ТипДокумента = 2 Тогда
ТипЧека = НСтр("ru='ВНЕСЕНИЕ'");
ИначеЕсли ТипДокумента = 3 Тогда
ТипЧека = НСтр("ru='ВЫЕМКА'");
ИначеЕсли ТипДокумента = 4 Тогда
ТипЧека = НСтр("ru='ОТЧЕТ БЕЗ ГАШЕНИЯ'");
ИначеЕсли ТипДокумента = 5 Тогда
ТипЧека = НСтр("ru='ОТЧЕТ С ГАШЕНИЕМ'");
КонецЕсли;
ПечатьКлише = Истина;
Разделитель = ПостроитьПоле("", ШиринаСтроки, "=") + Символы.ПС;
РазделительВнутр = ПостроитьПоле("", ШиринаСтроки, "-") + Символы.ПС;
Текст = Разделитель;
Если ПечатьКлише Тогда
// Сформировать шапку чека.
Если ОбщиеПараметры.Свойство("ОрганизацияНазвание") И НЕ ПустаяСтрока(ОбщиеПараметры.ОрганизацияНазвание) Тогда
Текст = Текст + ПостроитьПолеПереносом(ОбщиеПараметры.ОрганизацияНазвание, ШиринаСтроки, , Истина) + Символы.ПС;
КонецЕсли;
Если ОбщиеПараметры.Свойство("АдресРасчетов") Тогда
АдресРасчетов = ОбщиеПараметры.АдресРасчетов;
Если НЕ ПустаяСтрока(АдресРасчетов) Тогда
Текст = Текст + ПостроитьПолеПереносом(АдресРасчетов, ШиринаСтроки, , Истина) + Символы.ПС;
Если ОбщиеПараметры.Свойство("МестоРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.МестоРасчетов) Тогда
Текст = Текст + ПостроитьПолеПереносом(ОбщиеПараметры.МестоРасчетов, ШиринаСтроки, , Истина) + Символы.ПС;
КонецЕсли;
ИначеЕсли ОбщиеПараметры.Свойство("АдресМагазина") И НЕ ПустаяСтрока(ОбщиеПараметры.АдресМагазина) Тогда
Текст = Текст + ПостроитьПолеПереносом(ОбщиеПараметры.АдресМагазина, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
КонецЕсли;
Если ОбщиеПараметры.Свойство("ТекстШапки") И НЕ ПустаяСтрока(ОбщиеПараметры.ТекстШапки) Тогда
Текст = Текст + ВыстроитьПоля(ОбщиеПараметры.ТекстШапки, , ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если ТипДокумента = 0 Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='КАССОВЫЙ ЧЕК'"), , ШиринаСтроки) + Символы.ПС;
КонецЕсли;
ОрганизацияИНН = ?(ОбщиеПараметры.Свойство("ОрганизацияИНН") И НЕ ПустаяСтрока(ОбщиеПараметры.ОрганизацияИНН),
НСтр("ru='ИНН'") + Символы.НПП + ОбщиеПараметры.ОрганизацияИНН, "");
НомерЧека = ?(ОбщиеПараметры.Свойство("НомерЧека") И НЕ ПустаяСтрока(ОбщиеПараметры.НомерЧека),
НСтр("ru='ЧЕК №'") + ОбщиеПараметры.НомерЧека, "");
Если Не ПустаяСтрока(ОрганизацияИНН) Тогда
Текст = Текст + ВыстроитьПоля(ТипЧека, ОрганизацияИНН, ШиринаСтроки) + Символы.ПС;
Иначе
Текст = Текст + ПостроитьПоле(ТипЧека, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
ДатаВремя = ?(ОбщиеПараметры.Свойство("ДатаВремя") И НЕ ПустаяСтрока(ОбщиеПараметры.ДатаВремя),
ОбщиеПараметры.ДатаВремя,
МенеджерОборудованияКлиентСервер.ДатаСеанса());
ДатаВремя = Формат(ДатаВремя, "ДФ=""дд.ММ.гггг ЧЧ:мм"""); // АПК: 1367 особенность локального законодательства
Текст = Текст + ВыстроитьПоля(НомерЧека, ДатаВремя, ШиринаСтроки) + Символы.ПС;
Если ТипДокумента = 0 Тогда
Если НЕ ПустаяСтрока(ОбщиеПараметры.Получатель) Тогда
Текст = Текст + ПостроитьПолеПереносом(НСтр("ru='ПОКУПАТЕЛЬ:'") + ОбщиеПараметры.Получатель, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ПолучательИНН) Тогда
Текст = Текст + ПостроитьПоле(НСтр("ru='ИНН ПОКУПАТЕЛЯ:'") + ОбщиеПараметры.ПолучательИНН, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ПризнакАгента) Тогда
Текст = Текст + ПостроитьПоле(ВРег(Строка(ОбщиеПараметры.ПризнакАгента)), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеПоставщика.Наименование) Тогда
Текст = Текст + ПостроитьПолеПереносом(НСтр("ru='ПОСТАВЩИК:'") + ОбщиеПараметры.ДанныеПоставщика.Наименование, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеПоставщика.Телефон) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ТЛФ.ПОСТ.:'"), ОбщиеПараметры.ДанныеПоставщика.Телефон, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеПоставщика.ИНН) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ИНН ПОСТАВЩИКА:'"), ОбщиеПараметры.ДанныеПоставщика.ИНН, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ПлатежныйАгент.Операция) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ПЛ.АГЕНТ ОПЕР.:'"), ОбщиеПараметры.ДанныеАгента.ПлатежныйАгент.Операция, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ПлатежныйАгент.Телефон) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ПЛ.АГЕНТ.ТЛФ.:'"), ОбщиеПараметры.ДанныеАгента.ПлатежныйАгент.Телефон, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Наименование) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ОПЕРАТОР ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Наименование, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Телефон) Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ТЛФ.ОП.ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Телефон, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Адрес) Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='АДР.ОП.ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Адрес, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ОператорПеревода.ИНН) Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ИНН ОП.ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.ИНН, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ОператорПоПриемуПлатежей.Телефон) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ОПЕР.ПО ПРИЕМУ ПЛАТ.ТЛФ:'"), ОбщиеПараметры.ДанныеАгента.ОператорПоПриемуПлатежей.Телефон, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДополнительныйРеквизитПользователя.Наименование) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='РЕК.ПОЛЬЗ.:'"), ОбщиеПараметры.ДополнительныйРеквизитПользователя.Наименование, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ОбщиеПараметры.ДополнительныйРеквизитПользователя.Значение) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='РЕК.ПОЛЬЗ.:'"), ОбщиеПараметры.ДополнительныйРеквизитПользователя.Значение, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
КонецЕсли;
Текст = Текст + РазделительВнутр;
КонецЕсли;
ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0";
СуммаЧека = 0;
СуммаПозицийНДС0 = 0;
СуммаПозицийНДС10 = 0;
СуммаПозицийНДС18 = 0;
СуммаПозицийНДС20 = 0;
СуммаПозицийНДС110 = 0;
СуммаПозицийНДС118 = 0;
СуммаПозицийНДС120 = 0;
СуммаПозицийБезНДС = 0;
СуммаНДС0 = 0;
СуммаНДС10 = 0;
СуммаНДС18 = 0;
СуммаНДС20 = 0;
СуммаНДС110 = 0;
СуммаНДС118 = 0;
СуммаНДС120 = 0;
СуммаБезНДС = 0;
// Формируем строки чека.
Если ПозицииЧека <> Неопределено Тогда
Для ИндексМассива = 0 По ПозицииЧека.Количество() - 1 Цикл
ПозицияЧека = ПозицииЧека[ИндексМассива];
Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда
Наименование = ?(ПозицияЧека.Свойство("Наименование"), ПозицияЧека.Наименование, "");
Количество = ?(ПозицияЧека.Свойство("Количество") , ПозицияЧека.Количество , 1);
Цена = ?(ПозицияЧека.Свойство("Цена") , ПозицияЧека.Цена , 0);
Сумма = ?(ПозицияЧека.Свойство("Сумма") , ПозицияЧека.Сумма , 0);
НомерСекции = ?(ПозицияЧека.Свойство("НомерСекции") , ПозицияЧека.НомерСекции , 0);
СтавкаНДС = ?(ПозицияЧека.Свойство("СтавкаНДС") , ПозицияЧека.СтавкаНДС , 0);
СуммаНДС = ?(ПозицияЧека.Свойство("СуммаНДС") , ?(ПустаяСтрока(ПозицияЧека.СуммаНДС), 0, ПозицияЧека.СуммаНДС), 0);
СуммаСкидок = ?(ПозицияЧека.Свойство("СуммаСкидок") , ?(ПустаяСтрока(ПозицияЧека.СуммаСкидок), 0, ПозицияЧека.СуммаСкидок), 0);
ТекстСтроки = ПостроитьПолеПереносом(Наименование, ШиринаСтроки) + Символы.ПС;
ЦенаДляПечати = Окр(Сумма / ?(Количество > 0, Количество, 1), 2);
СтрокаТовара = Формат(Количество, "ЧРД=.;ЧЦ=12;ЧДЦ=3;ЧН=0.000;ЧГ=0") + " х "
+ Формат(ЦенаДляПечати, ФорматЧисла) + "=" + Формат(Сумма, ФорматЧисла);
ТекстСтроки = Символы.ПС + ТекстСтроки + ВыстроитьПоля("", СтрокаТовара, ШиринаСтроки) + Символы.ПС;
Если СуммаСкидок > 0 Тогда
ТекстСкидки = НСтр("ru='СКИДКА'") + "=" + Формат(СуммаСкидок, ФорматЧисла);
ИначеЕсли СуммаСкидок < 0 Тогда
ТекстСкидки = НСтр("ru='НАДБАВКА'") + "=" + Формат(СуммаСкидок, ФорматЧисла);
Иначе
ТекстСкидки = "";
КонецЕсли;
ТекстНалога = "";
Если ПозицияЧека.СтавкаНДС = 10 Тогда
СуммаПозицийНДС10 = СуммаПозицийНДС10 + Сумма;
СуммаНДС10 = СуммаНДС10 + СуммаНДС;
ТекстНалога = НСтр("ru='НДС 10%'");
ИначеЕсли ПозицияЧека.СтавкаНДС = 18 Тогда
СуммаПозицийНДС18 = СуммаПозицийНДС18 + Сумма;
СуммаНДС18 = СуммаНДС18 + СуммаНДС;
ТекстНалога = НСтр("ru='НДС 18%'");
ИначеЕсли ПозицияЧека.СтавкаНДС = 20 Тогда
СуммаПозицийНДС20 = СуммаПозицийНДС20 + Сумма;
СуммаНДС20 = СуммаНДС20 + СуммаНДС;
ТекстНалога = НСтр("ru='НДС 20%'");
ИначеЕсли ПозицияЧека.СтавкаНДС = 0 Тогда
СуммаПозицийНДС0 = СуммаПозицийНДС0 + Сумма;
СуммаНДС0 = СуммаНДС0 + СуммаНДС;
ТекстНалога = НСтр("ru='НДС 0%'");
ИначеЕсли ПозицияЧека.СтавкаНДС = 110 Тогда
СуммаПозицийНДС110 = СуммаПозицийНДС110 + Сумма;
СуммаНДС110 = СуммаНДС110 + СуммаНДС;
ТекстНалога = НСтр("ru='НДС 10/110'");
ИначеЕсли ПозицияЧека.СтавкаНДС = 118 Тогда
СуммаПозицийНДС118 = СуммаПозицийНДС118 + Сумма;
СуммаНДС118 = СуммаНДС118 + СуммаНДС;
ТекстНалога = НСтр("ru='НДС 18/118'");
ИначеЕсли ПозицияЧека.СтавкаНДС = 120 Тогда
СуммаПозицийНДС120 = СуммаПозицийНДС120 + Сумма;
СуммаНДС120 = СуммаНДС120 + СуммаНДС;
ТекстНалога = НСтр("ru='НДС 20/120'");
Иначе
СуммаПозицийБезНДС = СуммаПозицийБезНДС + Сумма;
СуммаБезНДС = СуммаБезНДС + Сумма;
ТекстНалога = НСтр("ru='БЕЗ НДС'");
КонецЕсли;
Если ПустаяСтрока(ТекстСкидки) Тогда
ТекстСтроки = ТекстСтроки + ПостроитьПоле(ТекстНалога, ШиринаСтроки) + Символы.ПС;
Иначе
ТекстСтроки = ТекстСтроки + ВыстроитьПоля(ТекстНалога, ТекстСкидки, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Текст = Текст + ТекстСтроки;
Если НЕ ПустаяСтрока(ПозицияЧека.ПризнакПредметаРасчета) Тогда
ПризнакПредметаРасчетаНаименование = ВРег(Строка(ПозицияЧека.ПризнакПредметаРасчета));
Текст = Текст + ПостроитьПолеПереносом(ПризнакПредметаРасчетаНаименование, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ПризнакСпособаРасчета) Тогда
ПризнакСпособаРасчета = КодПризнакаСпособаРасчета(ПозицияЧека.ПризнакСпособаРасчета);
ПризнакСпособаРасчетаНаименование = НаименованиеПризнакаСпособаРасчета(ПризнакСпособаРасчета);
Текст = Текст + ПостроитьПоле(ПризнакСпособаРасчетаНаименование, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если ПозицияЧека.Свойство("КонтрольнаяМарка") И НЕ ПустаяСтрока(ПозицияЧека.КонтрольнаяМарка) Тогда
Текст = Текст + ПостроитьПоле(НСтр("ru='[М]'"), ШиринаСтроки) + Символы.ПС;
ИначеЕсли ПозицияЧека.ДанныеКодаТоварнойНоменклатуры.Свойство("РеквизитКодаТовара") Тогда
Штрихкод = ПозицияЧека.Штрихкод;
Если ПозицияЧека.Свойство("КодВидаНоменклатурнойКлассификации") И НЕ ПустаяСтрока(ПозицияЧека.КодВидаНоменклатурнойКлассификации) Тогда
Штрихкод = ПозицияЧека.КодВидаНоменклатурнойКлассификации;
КонецЕсли;
КодТовараИдентифицируетЭкземпляр = ОборудованиеЧекопечатающиеУстройстваВызовСервера.КодТовараИдентифицируетЭкземпляр(ПозицияЧека.ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара, Штрихкод);
КодТовараТекст = Штрихкод;
Если КодТовараИдентифицируетЭкземпляр Тогда
КодТовараТекст = НСтр("ru='[М]'") + КодТовараТекст + Символы.НПП;
КонецЕсли;
Текст = Текст + ПостроитьПолеПереносом(КодТовараТекст, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.КодСтраныПроисхожденияТовара) Тогда
Текст = Текст + ПостроитьПоле(НСтр("ru='КОД СТРАНЫ:'") + ПозицияЧека.КодСтраныПроисхожденияТовара, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.НомерТаможеннойДекларации) Тогда
Текст = Текст + ПостроитьПолеПереносом(НСтр("ru='ДЕКЛАРАЦИЯ:'") + ПозицияЧека.НомерТаможеннойДекларации, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.СуммаАкциза) И ПозицияЧека.СуммаАкциза > 0 Тогда
Текст = Текст + ПостроитьПоле(НСтр("ru='АКЦИЗ:'") + ПозицияЧека.СуммаАкциза, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ЕдиницаИзмерения) Тогда
Текст = Текст + ПостроитьПоле(НСтр("ru='ЕД.ИЗМЕРЕНИЯ:'") + ПозицияЧека.ЕдиницаИзмерения, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ПризнакАгентаПоПредметуРасчета) Тогда
Текст = Текст + ПостроитьПоле(ВРег(Строка(ПозицияЧека.ПризнакАгентаПоПредметуРасчета)), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеПоставщика.Наименование) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ПОСТАВЩИК:'"), ПозицияЧека.ДанныеПоставщика.Наименование, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеПоставщика.Телефон) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ТЛФ.ПОСТ.:'"), ПозицияЧека.ДанныеПоставщика.Телефон, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеПоставщика.ИНН) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ИНН ПОСТАВЩИКА:'"), ПозицияЧека.ДанныеПоставщика.ИНН, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ПлатежныйАгент.Операция) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ПЛ.АГЕНТ ОПЕР.:'"), ПозицияЧека.ДанныеАгента.ПлатежныйАгент.Операция, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ПлатежныйАгент.Телефон) Тогда
// АПК: 1299-выкл особенность форматирования в чеках
Текст = Текст + ВыстроитьПоля(НСтр("ru=' ПЛ.АГЕНТ ТЛФ.:'"), ПозицияЧека.ДанныеАгента.ПлатежныйАгент.Телефон, ШиринаСтроки) + Символы.ПС;
// АПК: 1299-вкл
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ОператорПеревода.Наименование) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ОПЕРАТОР ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.Наименование, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ОператорПеревода.Телефон) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ТЛФ.ОП.ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.Телефон, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ОператорПеревода.Адрес) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='АДР.ОП.ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.Адрес, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ОператорПеревода.ИНН) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ИНН ОП.ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.ИНН, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ОператорПоПриемуПлатежей.Телефон) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ОПЕР.ПО ПРИЕМУ ПЛАТ.ТЛФ:'"), ПозицияЧека.ДанныеАгента.ОператорПоПриемуПлатежей.Телефон, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ПозицияЧека.ДополнительныйРеквизит) Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ДОП.РЕК.:'"), ПозицияЧека.ДополнительныйРеквизит, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
СуммаЧека = СуммаЧека + Сумма;
ИначеЕсли ПозицияЧека.Свойство("ТекстоваяСтрока") Тогда
ТекстСтроки = ?(ПозицияЧека.Свойство("Текст"), ПозицияЧека.Текст, "");
Текст = Текст + ТекстСтроки + Символы.ПС;
ИначеЕсли ПозицияЧека.Свойство("ШтрихКод") Тогда
СтрокаШтрихкода = "|ШтрихКод|" + ПозицияЧека.ТипШтрихкода + "|" + ПозицияЧека.ШтрихКод;
Текст = Текст + СтрокаШтрихкода + Символы.ПС;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Формируем подвал чека
Если ТаблицаОплат <> Неопределено Тогда
СуммаНаличными = 0;
СуммаЭлектронными = 0;
СуммаПостоплатой = 0;
СуммаПредоплатой = 0;
СуммаПредоставлением = 0;
Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл
Если ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно") Тогда
СуммаЭлектронными = СуммаЭлектронными + ТаблицаОплат[ИндексОплаты].Сумма;
ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Предоплата") Тогда
СуммаПредоплатой = СуммаПредоплатой + ТаблицаОплат[ИндексОплаты].Сумма;
ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата") Тогда
СуммаПостоплатой = СуммаПостоплатой + ТаблицаОплат[ИндексОплаты].Сумма;
ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.ВстречноеПредоставление") Тогда
СуммаПредоставлением = СуммаПредоставлением + ТаблицаОплат[ИндексОплаты].Сумма;
Иначе
СуммаНаличными = СуммаНаличными + ТаблицаОплат[ИндексОплаты].Сумма;
КонецЕсли;
КонецЦикла;
СуммаОплаты = СуммаНаличными + СуммаЭлектронными + СуммаПостоплатой + СуммаПредоплатой + СуммаПредоставлением;
Текст = Текст + РазделительВнутр;
Текст = Текст + ВыстроитьПоля(НСтр("ru='ИТОГ'"), "=" + Формат(СуммаЧека, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
Текст = Текст + РазделительВнутр;
Текст = Текст + НСтр("ru='ОПЛАТА'") + Символы.ПС;
Если ФорматФФД = "1.0" Тогда // ФФД 1.0
Если СуммаНаличными > 0 Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='НАЛИЧНЫМИ'"), "=" + Формат(СуммаНаличными, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаЭлектронными > 0 Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаЭлектронными, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПостоплатой > 0 Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаПостоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПредоплатой > 0 Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаПредоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПредоставлением > 0 Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаПредоставлением, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Иначе // ФФД 1.05 & ФФД 1.1
Если СуммаНаличными > 0 Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='НАЛИЧНЫМИ'"), "=" + Формат(СуммаНаличными, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаЭлектронными > 0 Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='БЕЗНАЛИЧНЫМИ'"), "=" + Формат(СуммаЭлектронными, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПредоплатой > 0 Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ПРЕДВАРИТЕЛЬНАЯ'"), "=" + Формат(СуммаПредоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПостоплатой > 0 Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ПОСЛЕДУЮЩАЯ'"), "=" + Формат(СуммаПостоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПредоставлением > 0 Тогда
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ИНАЯ ФОРМА'"), "=" + Формат(СуммаПредоставлением, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
КонецЕсли;
Если СуммаОплаты - СуммаЧека > 0 Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='ПОЛУЧЕНО'"), "=" + Формат(СуммаОплаты, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='СДАЧА'"), "=" + Формат(СуммаОплаты - СуммаЧека, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если ОбщиеПараметры.Свойство("СистемаНалогообложения") Тогда
СистемаНалогообложенияКод = КодСистемыНалогообложенияККТ(ОбщиеПараметры.СистемаНалогообложения);
СистемаНалогообложения = НаименованиеСистемыНалогообложения(СистемаНалогообложенияКод, Истина);
Текст = Текст + ВыстроитьПоля(НСтр("ru='СНО:'"), СистемаНалогообложения, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
// АПК: 1299-выкл особенность форматирования в чеках
Если СуммаПозицийНДС20 > 0 Тогда
ЗначениеНДС = ?(СуммаНДС20 > 0, СуммаНДС20, СуммаПозицийНДС20 / 120 * 20);
Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 20%'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПозицийНДС18 > 0 Тогда
ЗначениеНДС = ?(СуммаНДС18 > 0, СуммаНДС18, СуммаПозицийНДС18 / 118 * 18);
Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 18%'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПозицийНДС10 > 0 Тогда
ЗначениеНДС = ?(СуммаНДС10 > 0, СуммаНДС10, СуммаПозицийНДС10 / 110 * 10);
Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 10%'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПозицийНДС120 > 0 Тогда
ЗначениеНДС = ?(СуммаНДС120 > 0, СуммаНДС120, СуммаПозицийНДС120 / 120 * 20);
Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 20/120'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПозицийНДС118 > 0 Тогда
ЗначениеНДС = ?(СуммаНДС118 > 0, СуммаНДС118, СуммаПозицийНДС118 / 118 * 18);
Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 18/118'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПозицийНДС110 > 0 Тогда
ЗначениеНДС = ?(СуммаНДС110 > 0, СуммаНДС110, СуммаПозицийНДС110 / 110 * 10);
Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 10/110'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПозицийНДС0 > 0 Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА C НДС 0%'") , "=" + Формат(СуммаПозицийНДС0, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Если СуммаПозицийБезНДС > 0 Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА БЕЗ НДС'"), "=" + Формат(СуммаПозицийБезНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
КонецЕсли;
// АПК: 1299-вкл
Кассир = ?(ОбщиеПараметры.Свойство("Кассир"), ОбщиеПараметры.Кассир, "");
Текст = Текст + ПостроитьПоле(НСтр("ru='КАССИР'") + ":" + Символы.НПП + Кассир, ШиринаСтроки) + Символы.ПС + Символы.ПС;
Если ПолеПодписи Тогда
Текст = Текст + ПостроитьПоле(НСтр("ru='ПОДПИСЬ'") + ":", ШиринаСтроки, "_") + Символы.ПС;
Если ОбщиеПараметры.Свойство("ТекстПодвала") И НЕ ПустаяСтрока(ОбщиеПараметры.ТекстПодвала) Тогда
Текст = Текст + ВыстроитьПоля(ОбщиеПараметры.ТекстПодвала, , ШиринаСтроки) + Символы.ПС;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если НЕ ПустаяСтрока(ДополнительныйТекст) И ПолеПодписи Тогда
Текст = Текст + ДополнительныйТекст + Символы.ПС;
КонецЕсли;
Текст = Текст + Разделитель + Символы.ПС;
Возврат Текст;
КонецФункции
// АПК: 142-вкл
// Устарела: следует использовать механизм ШаблоныФискальныхДокументов.ШаблонКассовыйЧек.
// Функция формирует текст нефискального чека по шаблону.
//
// Параметры:
// ОбщиеПараметры - Структура - см. СформироватьТекстНефискальногоДокумента()
// ШиринаСтроки - Число
// ФорматФФД - Строка
// ПолеПодписи - Булево - выводить поле подписи
//
// Возвращаемое значение:
// Структура.
//
Функция СформироватьТекстНефискальногоЧека(ОбщиеПараметры, ШиринаСтроки = 32, ФорматФФД = "1.1", ПолеПодписи = Истина) Экспорт
Возврат СформироватьТекстНефискальногоДокумента(0, ОбщиеПараметры, ШиринаСтроки, Неопределено, ФорматФФД, ПолеПодписи);
КонецФункции
// Устарела: следует использовать механизм ШаблоныФискальныхДокументов.ШаблонИнфоКвитанция.
// Сформировать шаблон инфо квитанции.
//
// Параметры:
// Параметры - Структура - Параметры.
// ШиринаСтроки - Число - Ширина строки.
// ПечатьШтрихкода - Булево - Печать штрихкода
//
// Возвращаемое значение:
// Строка - Сформировать шаблон инфо квитанции
//
Функция СформироватьШаблонИнфоКвитанции(Параметры, ШиринаСтроки, ПечатьШтрихкода = Истина) Экспорт
Текст = ВыстроитьПоля(Параметры.НаименованиеОрганизации, , ШиринаСтроки) + Символы.ПС;
АдресЧека = ?(Параметры.Свойство("АдресЧека"), Параметры.АдресЧека, Неопределено);
ПодписьЧека = ?(Параметры.Свойство("ПодписьЧека"), Параметры.ПодписьЧека, Неопределено);
ОрганизацияИНН = ?(НЕ ПустаяСтрока(Параметры.ИНН), НСтр("ru='ИНН:'") + Параметры.ИНН, "");
ОрганизацияКПП = ?(НЕ ПустаяСтрока(Параметры.КПП), НСтр("ru='КПП:'") + Параметры.КПП, "");
Если Не ПустаяСтрока(ОрганизацияИНН) Или НЕ ПустаяСтрока(ОрганизацияКПП) Тогда
Текст = Текст + ВыстроитьПоля(ОрганизацияИНН, ОрганизацияКПП, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
НомерКассы = ?(НЕ ПустаяСтрока(Параметры.НомерКассы), НСтр("ru='КАССА:'") + Параметры.НомерКассы, "");
НомерСмены = ?(НЕ ПустаяСтрока(Параметры.НомерСмены), НСтр("ru='СМЕНА:'") + Формат(Параметры.НомерСмены, "ЧГ=0"), 0);
Если Не ПустаяСтрока(НомерКассы) Или НЕ ПустаяСтрока(НомерСмены) Тогда
Текст = Текст + ВыстроитьПоля(НомерКассы, НомерСмены, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
НомерЧека = ?(НЕ ПустаяСтрока(Параметры.НомерЧека), НСтр("ru='ЧЕК:'") + Параметры.НомерЧека, "");
// АПК: 1367-выкл особенность локального законодательства
ДатаВремя = НСтр("ru='ДАТА:'") + Формат(МенеджерОборудованияКлиентСервер.ДатаСеанса(), "ДФ=""дд.ММ.гггг ЧЧ:мм""");
// АПК: 1367-вкл
Если Не ПустаяСтрока(НомерЧека) Или НЕ ПустаяСтрока(ДатаВремя) Тогда
Текст = Текст + ВыстроитьПоля(НомерЧека, ДатаВремя, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Текст = Текст + " " + Символы.ПС;
Если ПечатьШтрихкода Тогда
Текст = Текст + "|ШтрихКод|QR|" + АдресЧека + Символы.ПС;
КонецЕсли;
Текст = Текст + " " + Символы.ПС;
СтрокаТекста = ПостроитьПолеПереносом(АдресЧека, ШиринаСтроки);
Для НомерСтроки = 1 По СтрЧислоСтрок(СтрокаТекста) Цикл
Текст = Текст + СтрПолучитьСтроку(СтрокаТекста, НомерСтроки) + Символы.ПС;
КонецЦикла;
Текст = Текст + " " + Символы.ПС;
СтрокаТекста = ПостроитьПолеПереносом(ПодписьЧека, ШиринаСтроки);
Для НомерСтроки = 1 По СтрЧислоСтрок(СтрокаТекста) Цикл
Текст = Текст + СтрПолучитьСтроку(СтрокаТекста, НомерСтроки) + Символы.ПС;
КонецЦикла;
Возврат Текст;
КонецФункции
#КонецОбласти
#КонецОбласти
// -- Локализация
// Устарела: следует использовать ПараметрыПечатиТекста.
// Заполняет структуру параметров печати текста.
//
// Параметры:
// СтрокиТекста - Строка
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыПечатиТеста(СтрокиТекста = Неопределено) Экспорт
Параметры = Новый Структура();
Параметры.Вставить("СтрокиТекста", СтрокиТекста);
Возврат Параметры;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
// Возвращает Истина если используется ККТ без подключения оборудования
//
// Параметры:
// ПараметрыОперации - Структура - параметры выполнения операции.
//
// Возвращаемое значение:
// Булево
Функция ЭтоККТБезПодключения(ПараметрыОперации) Экспорт
Возврат ЗначениеЗаполнено(ПараметрыОперации)
И ПараметрыОперации.Свойство("КассаККМ")
И ЗначениеЗаполнено(ПараметрыОперации.КассаККМ);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Выстраивает строку по длине поля, если поле длинное - переносит на следующую строку.
//
// Параметры:
// Текст - Неопределено, Строка - Текст
// ДлинаПоля - Число - Длина поля
// ДобСимвол - Строка - Доб символ
// ПоЦентру - Булево - По центру
//
// Возвращаемое значение:
// Неопределено, Строка - Построить поле переносом
Функция ПостроитьПолеПереносом(Знач Текст, Знач ДлинаПоля, ДобСимвол = "", ПоЦентру = Ложь) Экспорт
ДобСимвол = ?(ПустаяСтрока(ДобСимвол), " ", ДобСимвол);
Если СтрДлина(Текст) > ДлинаПоля Тогда
ТекстПолный = "";
Пока СтрДлина(Текст) > ДлинаПоля Цикл
ТекстПолный = ТекстПолный + ?(ПустаяСтрока(ТекстПолный), "", Символы.ПС) + Лев(Текст, ДлинаПоля);
Текст = Сред(Текст, ДлинаПоля + 1);
КонецЦикла;
ТекстПолный = ТекстПолный + ?(ПустаяСтрока(Текст), "", Символы.ПС + Текст);
Иначе
Если ПоЦентру Тогда
ТекстПолный = Текст;
ДобавлятьСправа = Истина;
Пока СтрДлина(ТекстПолный) < ДлинаПоля Цикл
Если ДобавлятьСправа Тогда
ТекстПолный = ТекстПолный + ДобСимвол;
Иначе
ТекстПолный = ДобСимвол + ТекстПолный;
КонецЕсли;
ДобавлятьСправа = Не ДобавлятьСправа;
КонецЦикла;
Иначе
ТекстПолный = Текст;
КонецЕсли;
КонецЕсли;
Возврат ТекстПолный;
КонецФункции
// Обрезает передаваемую строку по длине поля, если поле слишком короткое - дополняет символами.
//
// Параметры:
// Текст - Строка - Текст
// ДлинаПоля - Число - Длина поля
// ДобСимвол - Строка - Доб символ
// ДобавлятьСправа - Булево - если истина добавлять ДобСимвол справа, иначе слева.
//
// Возвращаемое значение:
// Строка.
//
Функция ПостроитьПоле(Знач Текст, Знач ДлинаПоля, ДобСимвол = "", ДобавлятьСправа = Истина) Экспорт
ДобСимвол = ?(ПустаяСтрока(ДобСимвол), " ", ДобСимвол);
ТекстПолный = Лев(Текст, ДлинаПоля);
Пока СтрДлина(ТекстПолный) < ДлинаПоля Цикл
Если ДобавлятьСправа Тогда
ТекстПолный = ТекстПолный + ДобСимвол;
Иначе
ТекстПолный = ДобСимвол + ТекстПолный;
КонецЕсли;
КонецЦикла;
Возврат ТекстПолный;
КонецФункции
// Формирует строку из двух полей, если передается одно поле дополняет символами до нужного размера.
//
// Параметры:
// Текст1 - Строка
// Текст2 - Строка
// ДлинаПоля - Число
//
// Возвращаемое значение:
// Строка.
//
Функция ВыстроитьПоля(Знач Текст1, Знач Текст2 = "", Знач ДлинаПоля = 32) Экспорт
Если ПустаяСтрока(Текст2) Тогда
ТекстПолный = ПостроитьПоле(Текст1, СтрДлина(Текст1) + Цел((ДлинаПоля - СтрДлина(Текст1))/2), , Ложь);
ТекстПолный = ПостроитьПоле(ТекстПолный, ДлинаПоля);
ИначеЕсли СтрДлина(Текст1) + СтрДлина(Текст2) < ДлинаПоля Тогда
ТекстПолный = ПостроитьПоле(Текст1, ДлинаПоля - СтрДлина(Текст2)) + Текст2;
Иначе
ТекстПолный = ПостроитьПоле(Текст1, ДлинаПоля) + Символы.ПС + ПостроитьПоле(Текст2, ДлинаПоля, ,Ложь)
КонецЕсли;
Возврат ТекстПолный;
КонецФункции
// Выровнять передаваемую строку по длине поля, если поле слишком короткое - дополняет символами.
//
// Параметры:
// Текст - Строка - Текст
// ДлинаПоля - Число - Длина поля
// Выравнивание - Строка - Выравнивание
// ДобСимвол - Строка - Доб символ
//
// Возвращаемое значение:
// Строка - Выровненное поле
Функция ВыровнятьПоле(Знач Текст, Знач ДлинаПоля = 32, Знач Выравнивание = "Лево", ДобСимвол = "") Экспорт
ДобСимвол = ?(ПустаяСтрока(ДобСимвол), " ", ДобСимвол);
НачПозиция = Истина;
ТекстПолный = Лев(Текст, ДлинаПоля);
Пока СтрДлина(ТекстПолный) < ДлинаПоля Цикл
Если Выравнивание = "Лево" Тогда
ТекстПолный = ТекстПолный + ДобСимвол;
ИначеЕсли Выравнивание = "Право" Тогда
ТекстПолный = ДобСимвол + ТекстПолный;
Иначе
Если НачПозиция Тогда
ТекстПолный = ТекстПолный + ДобСимвол;
НачПозиция = Ложь;
Иначе
ТекстПолный = ДобСимвол + ТекстПолный;
НачПозиция = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ТекстПолный;
КонецФункции
#КонецОбласти