1225 lines
86 KiB
Plaintext
1225 lines
86 KiB
Plaintext
#Область СлужебныйПрограммныйИнтерфейс
|
||
|
||
// Генерирует шаблон универсального кассового чека, по данным операции фискализации чека,
|
||
// независимого от локализации.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены.
|
||
// ФискальнаяОперация - Структура.
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонКассовыйЧек(Шаблон, Данные, ФискальнаяОперация, Параметры) Экспорт
|
||
|
||
ПодготовитьКассовыйЧек(Данные, ФискальнаяОперация, Параметры.ВерсияФФД);
|
||
|
||
ШаблонКассовыйЧекШапка(Шаблон, Данные, Параметры);
|
||
|
||
Для Каждого ПозицияЧека Из Данные.ПозицииЧека Цикл
|
||
Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда
|
||
ШаблонКассовыйЧекПозицияЧекаФискальнаяСтрока(Шаблон, ПозицияЧека);
|
||
ИначеЕсли ПозицияЧека.Свойство("ТекстоваяСтрока") Тогда
|
||
ШаблонКассовыйЧекПозицияЧекаТекстоваяСтрока(Шаблон, ПозицияЧека);
|
||
ИначеЕсли ПозицияЧека.Свойство("ШтрихКод") Тогда
|
||
ШаблонКассовыйЧекПозицияЧекаШтрихкод(Шаблон, ПозицияЧека);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ШаблонКассовыйЧекПодвал(Шаблон, Данные, ФискальнаяОперация, Параметры);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон универсального отчет об открытии смены, независимого от локализации.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены.
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонОтчетОбОткрытииСмены(Шаблон, Данные, Параметры) Экспорт
|
||
|
||
ШаблонОтчет(Шаблон, Данные, Параметры, НСтр("ru='ОТКРЫТИЕ СМЕНЫ'"));
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон универсального отчет о закрытии смены, независимого от локализации.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены.
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонОтчетОЗакрытииСмены(Шаблон, Данные, Параметры) Экспорт
|
||
|
||
ШаблонОтчет(Шаблон, Данные, Параметры, НСтр("ru='ОТЧЕТ С ГАШЕНИЕМ'"));
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон универсального отчет о текущем состоянии, независимого от локализации.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены.
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонОтчетОТекущемСостоянии(Шаблон, Данные, Параметры) Экспорт
|
||
|
||
ШаблонОтчет(Шаблон, Данные, Параметры, НСтр("ru='ОТЧЕТ БЕЗ ГАШЕНИЯ'"));
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон универсального отчет о снятии наличных, независимого от локализации.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены.
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонСнятиеНаличных(Шаблон, Данные, Параметры) Экспорт
|
||
|
||
ШаблонОперацияИнкассации(Шаблон, Данные, Параметры, НСтр("ru='ВЫЕМКА'"));
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон универсального отчета о внесении наличных, независимого от локализации.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены.
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонВнесениеНаличных(Шаблон, Данные, Параметры) Экспорт
|
||
|
||
ШаблонОперацияИнкассации(Шаблон, Данные, Параметры, НСтр("ru='ВНЕСЕНИЕ'"));
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон инфо квитанции, независимого от локализации.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены.
|
||
// Параметры - Структура
|
||
//
|
||
Процедура ШаблонИнфоКвитанция(Шаблон, Данные, Параметры) Экспорт
|
||
|
||
Модуль = ШаблоныФискальныхДокументов;
|
||
ФорматРазделитель = Модуль.ФорматРазделитель();
|
||
ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр);
|
||
ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право);
|
||
ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево);
|
||
ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине);
|
||
|
||
Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, Данные.НаименованиеОрганизации, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН:'"), Данные.ИНН, ФорматЛево);
|
||
Модуль.ДобавитьКолонку(Шаблон, НСтр("ru='КПП:'"), Данные.КПП, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССА:'"), Данные.НомерКассы, ФорматЛево);
|
||
Модуль.ДобавитьКолонку(Шаблон, НСтр("ru='СМЕНА:'"), Данные.НомерСмены, ФорматПраво);
|
||
|
||
ДатаВремя = Формат(ОбщегоНазначенияБПО.ДатаСеанса(), "ДФ=""дд.ММ.гггг ЧЧ:мм""");
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ЧЕК:'"), Данные.НомерЧека, ФорматЛево);
|
||
Модуль.ДобавитьКолонку(Шаблон, НСтр("ru='ДАТА:'"), ДатаВремя, ФорматПраво);
|
||
|
||
Если Не ПустаяСтрока(Данные.АдресЧека) Тогда
|
||
Модуль.ДобавитьСтроку(Шаблон, "|ШтрихКод|QR|" + Данные.АдресЧека, ФорматЛево);
|
||
КонецЕсли;
|
||
|
||
Модуль.ДобавитьСтроку(Шаблон, Данные.АдресЧека, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку(Шаблон, Данные.ПодписьЧека, ФорматЦентр);
|
||
|
||
КонецПроцедуры
|
||
|
||
#Область ГенераторШаблона
|
||
|
||
// Создает строку символов заданного размера.
|
||
//
|
||
// Параметры:
|
||
// Размер - Число - размер строки которую нужно создать.
|
||
// Символ - Строка - символы которыми будет заполнен результат.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - строка символов заданного размера.
|
||
//
|
||
Функция СтрокаСимволов(Размер, Символ = " ") Экспорт
|
||
|
||
ПустаяСтрока = "";
|
||
ДлинаСимвола = СтрДлина(Символ);
|
||
Если ДлинаСимвола = 0 Тогда
|
||
Возврат ПустаяСтрока;
|
||
КонецЕсли;
|
||
|
||
КоличествоПодстрок = Цел(Размер / ДлинаСимвола)+1;
|
||
Для Номер = 1 По КоличествоПодстрок Цикл
|
||
ПустаяСтрока = ПустаяСтрока + Символ;
|
||
КонецЦикла;
|
||
|
||
Возврат Лев(ПустаяСтрока, Размер);
|
||
|
||
КонецФункции
|
||
|
||
// Добавляет строку в шаблон.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Заголовок - Строка - Заголовок который будет добавлено в шаблон.
|
||
// Значение - Произвольный - Значение которое будет добавлено в шаблон.
|
||
// Формат - см. ШаблоныФискальныхДокументов.НовыйФормат.
|
||
Процедура ДобавитьЭлементШаблона(Шаблон, Заголовок = "", Значение = Неопределено, Формат = Неопределено) Экспорт
|
||
|
||
Элемент = НовыйЭлементШаблона();
|
||
|
||
Если ЗначениеЗаполнено(Элемент.ЭлементXML) Тогда
|
||
Если ТипЗнч(Элемент.ЭлементXML) = Тип("Строка") Тогда
|
||
Элемент.ЭлементXML = Шаблон.ЭлементыXML.Получить(Элемент.ЭлементXML);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Шаблон.Элементы.Добавить(Элемент);
|
||
|
||
ДобавитьКолонкуЭлементаШаблона(Шаблон, Заголовок, Значение, Формат);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Добавляет колонку в последнюю строку шаблона.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Заголовок - Строка.
|
||
// Значение - Произвольный.
|
||
// Формат - см. ШаблоныФискальныхДокументов.НовыйФормат.
|
||
//
|
||
Процедура ДобавитьКолонкуЭлементаШаблона(Шаблон, Заголовок = "", Значение = Неопределено, Формат = Неопределено) Экспорт
|
||
|
||
Элемент = Шаблон.Элементы[Шаблон.Элементы.ВГраница()];
|
||
Колонка = НоваяКолонкаЭлементаШаблона();
|
||
|
||
Колонка.Значение = Значение;
|
||
Колонка.Строка = Строка(Значение);
|
||
Колонка.Заголовок = Заголовок;
|
||
Колонка.ШиринаФормат = Формат.Ширина;
|
||
|
||
ЗаполнитьЗначенияСвойств(Колонка, Формат, , "Ширина");
|
||
|
||
// вычислить высоту штрихкода по умолчанию
|
||
Если ВРег(Формат.Тип) = "ШТРИХКОД" И Колонка.ШтрихкодВысота = 0 Тогда
|
||
ВысотаДвумерногоКода = 4;
|
||
ВысотаОдномерногоКода = 2;
|
||
Колонка.ШтрихкодВысота = ?(ВРег(Колонка.ШтрихкодТип) = "QR", ВысотаДвумерногоКода, ВысотаОдномерногоКода);
|
||
КонецЕсли;
|
||
|
||
Если Колонка.ПодавлятьПробелы Тогда
|
||
Колонка.Заголовок = СокрЛП(Колонка.Заголовок);
|
||
КонецЕсли;
|
||
|
||
Если СтрДлина(Колонка.Строка) > 0 Или Колонка.ВыводитьЗаголовок Тогда
|
||
Элемент.Колонки.Добавить(Колонка);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вычисляет и устанавливает ширину колонок у переданного массива колонок.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// МассивКолонок - Массив из см. НоваяКолонкаЭлементаШаблона.
|
||
//
|
||
Процедура УстановитьШиринуКолонокЭлемента(Шаблон, МассивКолонок) Экспорт
|
||
|
||
ШиринаСтроки = Шаблон.ШиринаСтроки;
|
||
Если ШиринаСтроки = 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ОбщаяШиринаКолонок = 0;
|
||
КоличествоКолонокСНулевойШириной = 0;
|
||
|
||
Для Каждого Колонка Из МассивКолонок Цикл
|
||
|
||
Если Колонка.Тип = "XML" Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
// вычислить заданную ширину колонок
|
||
Если Колонка.ШиринаФормат = "*" Тогда
|
||
// вычислить оптимальную ширину
|
||
Колонка.Ширина = Мин(ШиринаСтроки, СтрДлина(Колонка.Строка + Колонка.Заголовок));
|
||
ИначеЕсли СтрНайти(Колонка.ШиринаФормат, "%")>0 Тогда
|
||
// вычислить ширину в процентах
|
||
ШиринаВПроцентах = Число(Лев(Колонка.ШиринаФормат, СтрДлина(Колонка.ШиринаФормат)-1));
|
||
Колонка.Ширина = Цел(ШиринаСтроки / 100 * ШиринаВПроцентах);
|
||
Иначе
|
||
// установить ширину в символах
|
||
Колонка.Ширина = Число(Колонка.ШиринаФормат);
|
||
КонецЕсли;
|
||
|
||
// подготовить значения для расчета ширины у колонок с не заданной шириной
|
||
Если Колонка.Ширина = 0 Тогда
|
||
КоличествоКолонокСНулевойШириной = КоличествоКолонокСНулевойШириной + 1;
|
||
Иначе
|
||
ОбщаяШиринаКолонок = ОбщаяШиринаКолонок + Колонка.Ширина;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
// установить ширину у колонок с не заданной шириной
|
||
НеИспользуемаяШирина = Макс(0, ШиринаСтроки - ОбщаяШиринаКолонок);
|
||
Если КоличествоКолонокСНулевойШириной>0 И НеИспользуемаяШирина>0 Тогда
|
||
ОбщаяШиринаКолонок = 0;
|
||
ШиринаКолонки = Цел(НеИспользуемаяШирина / КоличествоКолонокСНулевойШириной);
|
||
Для Каждого Колонка Из МассивКолонок Цикл
|
||
|
||
Если Колонка.Тип = "XML" Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
Если Колонка.Ширина = 0 Тогда
|
||
Колонка.Ширина = ШиринаКолонки;
|
||
КонецЕсли;
|
||
ОбщаяШиринаКолонок = ОбщаяШиринаКолонок + Колонка.Ширина;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
// скорректировать первую колонку на погрешность округления
|
||
Если ОбщаяШиринаКолонок<ШиринаСтроки И МассивКолонок.Количество()>0 Тогда
|
||
МассивКолонок[0].Ширина = МассивКолонок[0].Ширина + (ШиринаСтроки - ОбщаяШиринаКолонок);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Формирует массив строк у элемента, колонки выводятся в соответствии с заданным форматированием.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Элемент - см. НовыйЭлементШаблона.
|
||
//
|
||
Процедура СформироватьСтрокуЭлементаШаблона(Шаблон, Элемент) Экспорт
|
||
|
||
Колонки = Элемент.Колонки;
|
||
Строки = Элемент.Строки;
|
||
ВыводЗавершен = Ложь;
|
||
Пока Не ВыводЗавершен Цикл
|
||
|
||
ПерваяСтрока = ?(Строки.Количество()=0, Истина, Ложь);
|
||
ВыводЗавершен = Истина;
|
||
СтрокаВывода = Новый Массив();
|
||
Позиция = 1;
|
||
Для Каждого Колонка Из Колонки Цикл // НоваяКолонкаЭлементаШаблона
|
||
|
||
Выравнивание = Колонка.Выравнивание;
|
||
Ширина = Колонка.Ширина;
|
||
Заполнитель = Колонка.Заполнитель;
|
||
Если ПерваяСтрока Тогда
|
||
// в первой строке выводится заголовок
|
||
Заголовок = Колонка.Заголовок;
|
||
ШиринаБезЗаголовка = Макс(0, Колонка.Ширина - СтрДлина(Заголовок));
|
||
Колонка.НачальнаяПозиция = Позиция;
|
||
Колонка.НачальнаяШирина = Колонка.Ширина;
|
||
Позиция = Позиция + Колонка.Ширина;
|
||
Иначе
|
||
Заголовок = "";
|
||
ШиринаБезЗаголовка = Колонка.Ширина;
|
||
КонецЕсли;
|
||
|
||
Если Колонка.Тип = "XML" Или ШиринаБезЗаголовка = 0 Тогда
|
||
СтрокаКолонки = Колонка.Строка;
|
||
СтрокаКолонки = Заголовок + СтрокаКолонки;
|
||
Иначе
|
||
Если ВРег(Колонка.Тип) = "ШТРИХКОД" Тогда
|
||
СтрокаКолонки = СтрокаСимволов(Ширина, " ");
|
||
Иначе
|
||
Если ВРег(Колонка.Тип) = "РАЗДЕЛИТЕЛЬ" Тогда
|
||
СтрокаКолонки = СтрокаСимволов(Ширина, Колонка.Строка);
|
||
Колонка.Строка = "";
|
||
Иначе
|
||
СтрокаКолонки = ВырезатьСлеваПоСловам(Колонка.Строка, ШиринаБезЗаголовка);
|
||
Если ПустаяСтрока(Колонка.Строка) И Выравнивание = ГоризонтальноеПоложение.ПоШирине Тогда
|
||
// это последняя строка при выравнивании по ширине, ее нужно выровнять слева
|
||
Выравнивание = ГоризонтальноеПоложение.Лево;
|
||
КонецЕсли;
|
||
СтрокаКолонки = ВыровнятьСтроку(Заголовок, СтрокаКолонки, Выравнивание, Колонка.ВыравниваниеЗаголовка, Ширина, Заполнитель);
|
||
КонецЕсли;
|
||
|
||
// подготовиться к обтеканию колонок
|
||
Если ПустаяСтрока(Колонка.Строка) Тогда
|
||
// Текст в колонке закончился, ее больше не нужно выводить
|
||
Колонка.НоваяШирина = 0;
|
||
Колонка.Завершена = Истина;
|
||
Иначе
|
||
Колонка.НоваяШирина = Колонка.Ширина;
|
||
ВыводЗавершен = Ложь;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
СтрокаВывода.Добавить(СтрокаКолонки);
|
||
|
||
КонецЦикла;
|
||
|
||
ПересчитатьРазмерыКолонок(Колонки);
|
||
|
||
Строки.Добавить(СтрСоединить(СтрокаВывода));
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Выводит в записьXML переданный элемент рекурсивно.
|
||
//
|
||
// Параметры:
|
||
// Запись - ЗаписьXML.
|
||
// Элемент - Структура.
|
||
//
|
||
Процедура ВывестиЭлементXML(Запись, Элемент) Экспорт
|
||
|
||
Если Элемент.ВыводитьПоСтрокам Тогда
|
||
Для Каждого Строка Из Элемент.Строки Цикл
|
||
Запись.ЗаписатьНачалоЭлемента(Элемент.Имя);
|
||
Запись.ЗаписатьАтрибут(Элемент.ИмяАтрибутаXML, XMLСтрока(Строка));
|
||
Запись.ЗаписатьКонецЭлемента();
|
||
КонецЦикла;
|
||
Иначе
|
||
Если Элемент.АтрибутыXML.Количество()=0 И Элемент.Дочерние.Количество()=0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
Запись.ЗаписатьНачалоЭлемента(Элемент.Имя);
|
||
Для Каждого Атрибут Из Элемент.АтрибутыXML Цикл
|
||
Строка = СтрСоединить(Атрибут.Значение);
|
||
Запись.ЗаписатьАтрибут(Атрибут.Ключ, XMLСтрока(Строка));
|
||
КонецЦикла;
|
||
Для Каждого Дочерний Из Элемент.Дочерние Цикл
|
||
ВывестиЭлементXML(Запись, Дочерний);
|
||
КонецЦикла;
|
||
Запись.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Выводит штрихкод табличный документ.
|
||
//
|
||
// Параметры:
|
||
// ТабличныйДокумент - ТабличныйДокумент - документ где должен быть выведен штрихкод.
|
||
// Область - ОбластьЯчеекТабличногоДокумента - область где должен быть выведен штрихкод.
|
||
// ТипШтрихкода - Строка - тип штрихкода в текстовом виде.
|
||
// Штрихкод - Строка - значение штрихкода.
|
||
// ИспользоватьBase64 - Булево - Использовать Base64.
|
||
//
|
||
Процедура ВывестиШтрихкод(ТабличныйДокумент, Область, ТипШтрихкода, Знач Штрихкод, Знач ИспользоватьBase64 = Ложь) Экспорт
|
||
|
||
ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
|
||
ПараметрыШтрихкода.Масштабировать = Истина;
|
||
ПараметрыШтрихкода.СохранятьПропорции = Истина;
|
||
ПараметрыШтрихкода.ОтображатьТекст = Ложь;
|
||
ПараметрыШтрихкода.Штрихкод = Штрихкод;
|
||
ПараметрыШтрихкода.ТипВходныхДанных = ?(ИспользоватьBase64, 1, 0);
|
||
ПараметрыШтрихкода.ТипКода = ЧисловойТипШтрихкода(ТипШтрихкода);
|
||
|
||
Штрихкод = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
|
||
Если ПараметрыШтрихкода.ТипКода = 16 Тогда
|
||
Штрихкод.РазмерКартинки = РазмерКартинки.Пропорционально;
|
||
ПараметрыШтрихкода.Ширина = 100;
|
||
ПараметрыШтрихкода.Высота = 100;
|
||
Иначе
|
||
Штрихкод.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
|
||
ПараметрыШтрихкода.Ширина = 100;
|
||
ПараметрыШтрихкода.Высота = 100;
|
||
КонецЕсли;
|
||
|
||
Изображение = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);
|
||
Штрихкод.Картинка = Изображение.Картинка;
|
||
Штрихкод.ГраницаСверху = Ложь;
|
||
Штрихкод.ГраницаСнизу = Ложь;
|
||
Штрихкод.ГраницаСправа = Ложь;
|
||
Штрихкод.ГраницаСлева = Ложь;
|
||
|
||
Область.ПоВыделеннымКолонкам = Истина;
|
||
Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
|
||
Штрихкод.Расположить(Область);
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
#Область ШаблоныДокументов
|
||
|
||
// Выполняет предварительную подготовку.
|
||
//
|
||
// Параметры:
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека.
|
||
// ВерсияФФД - Строка.
|
||
//
|
||
Процедура ПодготовитьКассовыйЧек(Данные, ФискальнаяОперация, ВерсияФФД)
|
||
|
||
Если Не ЗначениеЗаполнено(Данные.ОрганизацияНазвание) И ЗначениеЗаполнено(ФискальнаяОперация) Тогда
|
||
Сведения = ОборудованиеЧекопечатающиеУстройства.СведенияОбОрганизации(ФискальнаяОперация.Организация);
|
||
Данные.ОрганизацияНазвание = Сведения.Наименование;
|
||
КонецЕсли;
|
||
|
||
// позиции чека
|
||
ТаблицаНДС = Новый Соответствие();
|
||
ТаблицаСумма = Новый Соответствие();
|
||
СуммаЧека = 0;
|
||
СуммаОплаты = 0;
|
||
|
||
Для Каждого ПозицияЧека Из Данные.ПозицииЧека Цикл
|
||
|
||
Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда
|
||
Сумма = ПозицияЧека.Сумма;
|
||
СтавкаНДС = ПозицияЧека.СтавкаНДС;
|
||
СуммаНДС = ?(ПозицияЧека.СуммаНДС = 0, 0, ПозицияЧека.СуммаНДС);
|
||
|
||
// НДС
|
||
Если СтавкаНДС = Неопределено Тогда
|
||
ТекстНалога = НСтр("ru='БЕЗ НДС'");
|
||
СуммаВТаблицеПоКлючу(ТаблицаНДС, "БЕЗНДС", СуммаНДС);
|
||
СуммаВТаблицеПоКлючу(ТаблицаСумма, "БЕЗНДС", Сумма);
|
||
ИначеЕсли СтавкаНДС = 0 Тогда
|
||
ТекстНалога = НСтр("ru='НДС 0%'");
|
||
СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, СуммаНДС);
|
||
СуммаВТаблицеПоКлючу(ТаблицаСумма, СтавкаНДС, Сумма);
|
||
ИначеЕсли СтавкаНДС < 100 Тогда
|
||
ТекстНалога = СтрШаблон(НСтр("ru='НДС %1%%'"), СтавкаНДС);
|
||
СуммаНДС = ?(СуммаНДС = Неопределено, 0, СуммаНДС);
|
||
СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, СуммаНДС);
|
||
СуммаВТаблицеПоКлючу(ТаблицаСумма, СтавкаНДС, Сумма);
|
||
ИначеЕсли СтавкаНДС >= 100 Тогда
|
||
ТекстНалога = СтрШаблон(НСтр("ru='НДС %1/%2%%'"), СтавкаНДС-100, СтавкаНДС);
|
||
СуммаНДС = ?(СуммаНДС = Неопределено, 0, СуммаНДС);
|
||
СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, СуммаНДС);
|
||
СуммаВТаблицеПоКлючу(ТаблицаСумма, СтавкаНДС, Сумма);
|
||
КонецЕсли;
|
||
ПозицияЧека.Вставить("ТекстНалога", ТекстНалога);
|
||
|
||
СуммаЧека = СуммаЧека + Сумма;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
// подвал чека
|
||
// таблица оплаты
|
||
ТекстТаблицаОплат = Новый Соответствие();
|
||
Для Каждого СтрокаОплаты Из Данные.ТаблицаОплат Цикл
|
||
Если СтрокаОплаты.Сумма = 0 Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
ТипОплаты = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеТипаОплатыККТ(СтрокаОплаты.ТипОплаты, ВерсияФФД);
|
||
СуммаВТаблицеПоКлючу(ТекстТаблицаОплат, ТипОплаты, СтрокаОплаты.Сумма);
|
||
СуммаОплаты = СуммаОплаты + СтрокаОплаты.Сумма;
|
||
КонецЦикла;
|
||
Данные.Вставить("ТекстТаблицаОплат", ТекстТаблицаОплат);
|
||
Данные.Вставить("СуммаОплаты", СуммаОплаты);
|
||
Данные.Вставить("СуммаЧека", СуммаЧека);
|
||
|
||
// таблица НДС
|
||
ТекстТаблицаНДС = Новый Соответствие();
|
||
Для Каждого СтрокаНДС Из ТаблицаНДС Цикл
|
||
|
||
СтавкаНДС = СтрокаНДС.Ключ;
|
||
СуммаНДС = СтрокаНДС.Значение;
|
||
Если СтавкаНДС = "БЕЗНДС" Тогда
|
||
Заголовок = " "+НСтр("ru='СУММА БЕЗ НДС'");
|
||
Сумма = ТаблицаСумма.Получить(СтавкаНДС);
|
||
СуммаНДС = ?(Сумма > 0, Сумма, 0);
|
||
ИначеЕсли СтавкаНДС = 0 Тогда
|
||
Заголовок = " "+НСтр("ru='СУММА С НДС 0%'");
|
||
Сумма = ТаблицаСумма.Получить(СтавкаНДС);
|
||
СуммаНДС = ?(Сумма > 0, Сумма, 0);
|
||
ИначеЕсли СтавкаНДС < 100 Тогда
|
||
Заголовок = СтрШаблон(НСтр("ru='СУММА НДС %1%%'"), СтавкаНДС);
|
||
Сумма = ТаблицаСумма.Получить(СтавкаНДС);
|
||
СуммаНДС = ?(СуммаНДС > 0, СуммаНДС, Сумма / (100+СтавкаНДС) * СтавкаНДС );
|
||
ИначеЕсли СтавкаНДС >= 100 Тогда
|
||
Заголовок = СтрШаблон(НСтр("ru='СУММА НДС %1/%2%%'"), СтавкаНДС-100, СтавкаНДС);
|
||
Сумма = ТаблицаСумма.Получить(СтавкаНДС);
|
||
СуммаНДС = ?(СуммаНДС > 0, СуммаНДС, Сумма / СтавкаНДС * (СтавкаНДС-100) );
|
||
КонецЕсли;
|
||
ТекстТаблицаНДС.Вставить(Заголовок, СуммаНДС);
|
||
|
||
КонецЦикла;
|
||
Данные.Вставить("ТекстТаблицаНДС", ТекстТаблицаНДС);
|
||
|
||
// QR код
|
||
Если ЗначениеЗаполнено(ФискальнаяОперация) Тогда
|
||
ПараметрыQRКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ();
|
||
ПараметрыQRКода.ДатаВремяРасчета = ФискальнаяОперация.Дата;
|
||
ПараметрыQRКода.СуммаРасчета = ФискальнаяОперация.Сумма;
|
||
ПараметрыQRКода.ФискальныйПризнак = ФискальнаяОперация.ФискальныйПризнак;
|
||
ПараметрыQRКода.ПризнакРасчета = ФискальнаяОперация.ТипРасчета;
|
||
ПараметрыQRКода.НомерФискальногоНакопителя = ФискальнаяОперация.ЗаводскойНомерФН;
|
||
ПараметрыQRКода.НомерФискальногоДокумента = ФискальнаяОперация.НомерЧекаККМ;
|
||
Данные.QRКод.ЗначениеКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СформироватьQRКодЧекаККТ(ПараметрыQRКода);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Процедура суммирует в соответствии значение по переданному ключу.
|
||
Процедура СуммаВТаблицеПоКлючу(Таблица, Ключ, Значение)
|
||
Сумма = Таблица.Получить(Ключ);
|
||
Сумма = ?(Сумма = Неопределено, 0, Сумма);
|
||
Таблица.Вставить(Ключ, Сумма + ?(Значение = Неопределено, 0, Значение));
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон универсального отчета.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
// НазваниеДокумента - Строка.
|
||
//
|
||
Процедура ШаблонОтчет(Шаблон, Данные, Параметры, НазваниеДокумента) Экспорт
|
||
|
||
Модуль = ШаблоныФискальныхДокументов;
|
||
ФорматРазделитель = Модуль.ФорматРазделитель();
|
||
ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр);
|
||
ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право);
|
||
ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево);
|
||
ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине);
|
||
|
||
ДатаВремя = ОбщегоНазначенияБПО.ДатаСеанса();
|
||
ДатаВремя = Формат(ДатаВремя, НСтр("ru = 'ДФ=""дд.ММ.гггг ЧЧ:мм""'"));
|
||
|
||
ФорматПодпись = ШаблоныФискальныхДокументов.НовыйФормат(ФорматЛево);
|
||
ФорматПодпись.Заполнитель = "_";
|
||
ФорматПодпись.ВыводитьЗаголовок = Истина;
|
||
|
||
Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='НЕФИСКАЛЬНЫЙ РЕЖИМ'"), ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, "=", ФорматРазделитель);
|
||
Модуль.ДобавитьСтроку (Шаблон, Данные.АдресРасчетов, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, Данные.МестоРасчетов, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, НазваниеДокумента, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, ДатаВремя, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССИР:'"), Данные.Кассир, ФорматЛево);
|
||
Если Параметры.Подпись Тогда
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОДПИСЬ:'"), ФорматПодпись);
|
||
КонецЕсли;
|
||
Модуль.ДобавитьСтроку (Шаблон, "=", ФорматРазделитель);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон универсального отчета инкассации.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены.
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
// НазваниеОперации - Строка
|
||
//
|
||
Процедура ШаблонОперацияИнкассации(Шаблон, Данные, Параметры, НазваниеОперации) Экспорт
|
||
|
||
Модуль = ШаблоныФискальныхДокументов;
|
||
ФорматРазделитель = Модуль.ФорматРазделитель();
|
||
ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр);
|
||
ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право);
|
||
ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево);
|
||
ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине);
|
||
|
||
ДатаВремя = ОбщегоНазначенияБПО.ДатаСеанса();
|
||
ДатаВремя = Формат(ДатаВремя, НСтр("ru = 'ДФ=""дд.ММ.гггг ЧЧ:мм""'"));
|
||
|
||
ФорматПодпись = ШаблоныФискальныхДокументов.НовыйФормат(ФорматЛево);
|
||
ФорматПодпись.Заполнитель = "_";
|
||
ФорматПодпись.ВыводитьЗаголовок = Истина;
|
||
|
||
ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0";
|
||
|
||
Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='НЕФИСКАЛЬНЫЙ РЕЖИМ'"), ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, Данные.Организация, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='СУММА='"), Формат(Данные.Сумма, ФорматЧисла), ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, "=", ФорматРазделитель);
|
||
Модуль.ДобавитьСтроку (Шаблон, НазваниеОперации, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, ДатаВремя, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССИР:'"), Данные.Кассир, ФорматЛево);
|
||
Если Параметры.Подпись Тогда
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОДПИСЬ:'"), ФорматПодпись);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон шапки кассового чека.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонКассовыйЧекШапка(Шаблон, Данные, Параметры)
|
||
|
||
Модуль = ШаблоныФискальныхДокументов;
|
||
|
||
ФорматРазделитель = Модуль.ФорматРазделитель();
|
||
ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр);
|
||
ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право);
|
||
ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево);
|
||
ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине);
|
||
|
||
Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, "=======", ФорматРазделитель);
|
||
Модуль.ДобавитьСтроку (Шаблон, Данные.ОрганизацияНазвание, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, Данные.АдресРасчетов, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, Данные.МестоРасчетов, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, Данные.АдресМагазина, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, Данные.ТекстШапки, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССОВЫЙ ЧЕК'"), ФорматЦентр);
|
||
|
||
КодРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодРасчетаДенежнымиСредствами(Данные.ТипРасчета);
|
||
ТипЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеКодаРасчетаДенежнымиСредствами(КодРасчета);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН'")+" ", Данные.ОрганизацияИНН, ФорматЛево);
|
||
Модуль.ДобавитьКолонку(Шаблон, ТипЧека, ФорматПраво);
|
||
|
||
ДатаВремя = ?(НЕ ПустаяСтрока(Данные.ДатаВремя), Данные.ДатаВремя, ОбщегоНазначенияБПО.ДатаСеанса());
|
||
ДатаВремя = Формат(ДатаВремя, НСтр("ru = 'ДФ=""дд.ММ.гггг ЧЧ:мм""'"));
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ЧЕК №'"), Данные.НомерЧека, ФорматЛево);
|
||
Модуль.ДобавитьКолонку(Шаблон, ДатаВремя, ФорматПраво);
|
||
|
||
Покупатель = Данные.Получатель;
|
||
ПокупательИНН = Данные.ПолучательИНН;
|
||
ПокупательАдрес = "";
|
||
СведенияОПокупателе = Данные.СведенияОПокупателе;
|
||
Покупатель = ?(Не ПустаяСтрока(СведенияОПокупателе.Покупатель), СведенияОПокупателе.Покупатель, Покупатель);
|
||
ПокупательИНН = ?(Не ПустаяСтрока(СведенияОПокупателе.ПокупательИНН), СведенияОПокупателе.ПокупательИНН, ПокупательИНН);
|
||
ПокупательАдрес = ?(Не ПустаяСтрока(СведенияОПокупателе.ПокупательАдрес), СведенияОПокупателе.ПокупательАдрес, ПокупательАдрес);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОКУПАТЕЛЬ:'"), Покупатель, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН ПОКУПАТЕЛЯ:'"), ПокупательИНН, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='АДРЕС ПОКУПАТЕЛЯ:'"), ПокупательАдрес, ФорматПраво);
|
||
|
||
Модуль.ДобавитьСтроку (Шаблон, ВРег(Данные.ПризнакАгента), ФорматЛево);
|
||
|
||
// ++ Локализация
|
||
ДанныеПоставщика = Данные.ДанныеПоставщика;
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОСТАВЩИК:'"), ДанныеПоставщика.Наименование, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ТЛФ.ПОСТ.:'"), ДанныеПоставщика.Телефон, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН ПОСТАВЩИКА:'"), ДанныеПоставщика.ИНН, ФорматПраво);
|
||
|
||
ПлатежныйАгент = Данные.ДанныеАгента.ПлатежныйАгент;
|
||
ОператорПеревода = Данные.ДанныеАгента.ОператорПеревода;
|
||
ОператорПоПриемуПлатежей = Данные.ДанныеАгента.ОператорПоПриемуПлатежей;
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПЛ.АГЕНТ ОПЕР.:'"), ПлатежныйАгент.Операция, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПЛ.АГЕНТ.ТЛФ.:'"), ПлатежныйАгент.Телефон, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ОПЕРАТОР ПЕРЕВОДА:'"), ОператорПеревода.Наименование, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ТЛФ.ОП.ПЕРЕВОДА:'"), ОператорПеревода.Телефон, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='АДР.ОП.ПЕРЕВОДА:'"), ОператорПеревода.Адрес, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН ОП.ПЕРЕВОДА:'"), ОператорПеревода.ИНН, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ОПЕР.ПО ПРИЕМУ ПЛАТ.ТЛФ:'"), ОператорПоПриемуПлатежей.Телефон, ФорматПраво);
|
||
// -- Локализация
|
||
|
||
ДополнительныйРеквизитПользователя = Данные.ДополнительныйРеквизитПользователя;
|
||
Модуль.ДобавитьСтроку (Шаблон, ДополнительныйРеквизитПользователя.Наименование, ДополнительныйРеквизитПользователя.Значение, ФорматПраво);
|
||
|
||
Модуль.ДобавитьСтроку(Шаблон, "-", ФорматРазделитель);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон фискальной строки в позиции кассового чека.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// ПозицияЧека - Структура.
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонКассовыйЧекПозицияЧекаФискальнаяСтрока(Шаблон, ПозицияЧека)
|
||
|
||
Модуль = ШаблоныФискальныхДокументов;
|
||
|
||
ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр);
|
||
ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право);
|
||
ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево);
|
||
ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине);
|
||
|
||
// позиции чека
|
||
ФорматЧисла2 = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0";
|
||
ФорматЧисла3 = "ЧРД=.;ЧЦ=12;ЧДЦ=3;ЧН=0.000;ЧГ=0";
|
||
|
||
Количество = ПозицияЧека.Количество;
|
||
Сумма = ПозицияЧека.Сумма;
|
||
СуммаСкидок = ?(ПустаяСтрока(ПозицияЧека.СуммаСкидок), 0, ПозицияЧека.СуммаСкидок);
|
||
ЦенаДляПечати = Окр(Сумма / ?(Количество > 0, Количество, 1), 2);
|
||
|
||
СтрокаТовара = СтрШаблон("%1 х %2=%3",
|
||
Формат(Количество, ФорматЧисла3),
|
||
Формат(ЦенаДляПечати, ФорматЧисла2),
|
||
Формат(Сумма, ФорматЧисла2));
|
||
|
||
Модуль.ДобавитьСтроку (Шаблон, ПозицияЧека.Наименование, ФорматЛево);
|
||
Модуль.ДобавитьСтроку (Шаблон, СтрокаТовара, ФорматПраво);
|
||
|
||
Если СуммаСкидок > 0 Тогда
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='СКИДКА='"), Формат(СуммаСкидок, ФорматЧисла2), ФорматЛево);
|
||
ИначеЕсли СуммаСкидок < 0 Тогда
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='НАДБАВКА='"), Формат(СуммаСкидок, ФорматЧисла2), ФорматЛево);
|
||
Иначе
|
||
Модуль.ДобавитьСтроку (Шаблон);
|
||
КонецЕсли;
|
||
Модуль.ДобавитьКолонку(Шаблон, ПозицияЧека.ТекстНалога, ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, ВРег(ПозицияЧека.ПризнакПредметаРасчета), ФорматПраво);
|
||
|
||
ПризнакСпособаРасчета =
|
||
ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаСпособаРасчета(ПозицияЧека.ПризнакСпособаРасчета);
|
||
ПризнакСпособаРасчетаНаименование =
|
||
ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеПризнакаСпособаРасчета(ПризнакСпособаРасчета);
|
||
Модуль.ДобавитьСтроку (Шаблон, ПризнакСпособаРасчетаНаименование, ФорматЛево);
|
||
|
||
// ++ Локализация
|
||
// Маркировка
|
||
Если НЕ ПустаяСтрока(ПозицияЧека.КонтрольнаяМарка) Тогда
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='[М]'"), ФорматЛево);
|
||
Иначе
|
||
Штрихкод = ПозицияЧека.Штрихкод;
|
||
Если НЕ ПустаяСтрока(ПозицияЧека.КодВидаНоменклатурнойКлассификации) Тогда
|
||
Штрихкод = ПозицияЧека.КодВидаНоменклатурнойКлассификации;
|
||
КонецЕсли;
|
||
|
||
КодТовараТекст = Штрихкод;
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда
|
||
МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка");
|
||
КодТовараИдентифицируетЭкземпляр = МодульМенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр(
|
||
ПозицияЧека.ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара,
|
||
Штрихкод);
|
||
Если КодТовараИдентифицируетЭкземпляр Тогда
|
||
КодТовараТекст = НСтр("ru='[М]'") + КодТовараТекст + Символы.НПП;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Модуль.ДобавитьСтроку (Шаблон, КодТовараТекст, ФорматЛево);
|
||
КонецЕсли;
|
||
// -- Локализация
|
||
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КОД СТРАНЫ:'"), ПозицияЧека.КодСтраныПроисхожденияТовара, ФорматЛево);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ДЕКЛАРАЦИЯ:'"), ПозицияЧека.НомерТаможеннойДекларации, ФорматЛево);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='АКЦИЗ:'"), ПозицияЧека.СуммаАкциза, ФорматЛево);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ЕД.ИЗМЕРЕНИЯ:'"),ПозицияЧека.ЕдиницаИзмерения, ФорматЛево);
|
||
Модуль.ДобавитьСтроку (Шаблон, ВРег(ПозицияЧека.ПризнакАгентаПоПредметуРасчета), ФорматЛево);
|
||
|
||
// ++ Локализация
|
||
ДанныеПоставщика = ПозицияЧека.ДанныеПоставщика;
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ПОСТАВЩИК:'"), ДанныеПоставщика.Наименование, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ТЛФ.ПОСТ.:'"), ДанныеПоставщика.Телефон, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ИНН ПОСТАВЩИКА:'"), ДанныеПоставщика.ИНН, ФорматПраво);
|
||
|
||
ПлатежныйАгент = ПозицияЧека.ДанныеАгента.ПлатежныйАгент;
|
||
ОператорПеревода = ПозицияЧека.ДанныеАгента.ОператорПеревода;
|
||
ОператорПоПриемуПлатежей = ПозицияЧека.ДанныеАгента.ОператорПоПриемуПлатежей;
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ПЛ.АГЕНТ ОПЕР.:'"), ПлатежныйАгент.Операция, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ПЛ.АГЕНТ.ТЛФ.:'"), ПлатежныйАгент.Телефон, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ОПЕРАТОР ПЕРЕВОДА:'"), ОператорПеревода.Наименование, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ТЛФ.ОП.ПЕРЕВОДА:'"), ОператорПеревода.Телефон, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='АДР.ОП.ПЕРЕВОДА:'"), ОператорПеревода.Адрес, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ИНН ОП.ПЕРЕВОДА:'"), ОператорПеревода.ИНН, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ОПЕР.ПО ПРИЕМУ ПЛАТ.ТЛФ:'"), ОператорПоПриемуПлатежей.Телефон, ФорматПраво);
|
||
// -- Локализация
|
||
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ДОП.РЕК.:'"), ПозицияЧека.ДополнительныйРеквизит, ФорматПраво);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон текстовой строки в позиции кассового чека.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// ПозицияЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека.
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонКассовыйЧекПозицияЧекаТекстоваяСтрока(Шаблон, ПозицияЧека)
|
||
|
||
Модуль = ШаблоныФискальныхДокументов;
|
||
|
||
Формат = Модуль.ФорматСтрока(ГоризонтальноеПоложение[ПозицияЧека.Выравнивание]);
|
||
Модуль.ДобавитьСтроку (Шаблон, ПозицияЧека.Текст, Формат);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон строки штрихкода в позиции кассового чека.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// ПозицияЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыШтрихкодВСтрокеЧека
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонКассовыйЧекПозицияЧекаШтрихкод(Шаблон, ПозицияЧека)
|
||
|
||
Модуль = ШаблоныФискальныхДокументов;
|
||
|
||
Формат = Модуль.ФорматШтрихкод(ГоризонтальноеПоложение.Центр, ПозицияЧека.ТипШтрихкода, 2);
|
||
Модуль.ДобавитьСтроку(Шаблон, ПозицияЧека.ШтрихкодBase64, Формат);
|
||
Модуль.ДобавитьСтроку(Шаблон, " ");
|
||
|
||
КонецПроцедуры
|
||
|
||
// Генерирует шаблон подвала кассового чека.
|
||
//
|
||
// Параметры:
|
||
// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон.
|
||
// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека.
|
||
// ФискальнаяОперация - Структура.
|
||
// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента.
|
||
//
|
||
Процедура ШаблонКассовыйЧекПодвал(Шаблон, Данные, ФискальнаяОперация, Параметры)
|
||
|
||
Модуль = ШаблоныФискальныхДокументов;
|
||
|
||
ФорматРазделитель = Модуль.ФорматРазделитель();
|
||
ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр);
|
||
ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право);
|
||
ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево);
|
||
ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине);
|
||
|
||
// позиции чека
|
||
ФорматЧисла2 = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0";
|
||
ФорматЧисла3 = "ЧРД=.;ЧЦ=12;ЧДЦ=3;ЧН=0.000;ЧГ=0";
|
||
|
||
СуммаОплаты = Данные.СуммаОплаты;
|
||
СуммаЧека = Данные.СуммаЧека;
|
||
|
||
Модуль.ДобавитьСтроку (Шаблон, "-", ФорматРазделитель);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИТОГ='"), Формат(СуммаЧека, ФорматЧисла2), ФорматПраво);
|
||
Модуль.ДобавитьСтроку (Шаблон, "-", ФорматРазделитель);
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ОПЛАТА'"), ФорматЛево);
|
||
|
||
ФорматШирина2 = ШаблоныФискальныхДокументов.ФорматСтрокаШирина(2);
|
||
Для Каждого СтрокаОплаты Из Данные.ТекстТаблицаОплат Цикл
|
||
Модуль.ДобавитьСтроку (Шаблон, " ", ФорматШирина2);
|
||
Модуль.ДобавитьКолонку(Шаблон, СтрокаОплаты.Ключ, Формат(СтрокаОплаты.Значение, ФорматЧисла2), ФорматПраво);
|
||
КонецЦикла;
|
||
|
||
Если СуммаОплаты - СуммаЧека > 0 Тогда
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ПОЛУЧЕНО='"), Формат(СуммаОплаты, ФорматЧисла2), ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='СДАЧА='"), Формат(СуммаОплаты - СуммаЧека, ФорматЧисла2), ФорматПраво);
|
||
КонецЕсли;
|
||
|
||
// ++ Локализация
|
||
СНОКод = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодСистемыНалогообложенияККТ(Данные.СистемаНалогообложения);
|
||
СНО = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеСистемыНалогообложения(СНОКод, Истина);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='СНО:'"), СНО, ФорматЛево);
|
||
// -- Локализация
|
||
|
||
Для Каждого СтрокаНДС Из Данные.ТекстТаблицаНДС Цикл
|
||
Модуль.ДобавитьСтроку (Шаблон, " ", ФорматШирина2);
|
||
Модуль.ДобавитьКолонку(Шаблон, СтрокаНДС.Ключ, Формат(СтрокаНДС.Значение, ФорматЧисла2), ФорматПраво);
|
||
КонецЦикла;
|
||
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССИР:'"), Данные.Кассир, ФорматЛево);
|
||
Если Параметры.Подпись Тогда
|
||
Формат = ШаблоныФискальныхДокументов.НовыйФормат(ФорматЛево);
|
||
Формат.Заполнитель = "_";
|
||
Формат.ВыводитьЗаголовок = Истина;
|
||
Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОДПИСЬ:'"), Формат);
|
||
КонецЕсли;
|
||
Модуль.ДобавитьСтроку (Шаблон, Параметры.ДополнительныйТекст, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, Данные.ТекстПодвала, ФорматЦентр);
|
||
Модуль.ДобавитьСтроку (Шаблон, "======", ФорматРазделитель);
|
||
|
||
// QR код и данные фискальной операции
|
||
Если Параметры.ВыводитьФискальнуюИнформацию И ФискальнаяОперация <> Неопределено Тогда
|
||
Модуль.ДобавитьСтроку(Шаблон, " ");
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='РН ККТ:'"), ФискальнаяОперация.РегистрационныйНомерККТ, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФН №:'"), ФискальнаяОперация.ЗаводскойНомерФН, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФД №:'"), Формат(ФискальнаяОперация.НомерЧекаККМ,"ЧГ="), ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФП:'"), ФискальнаяОперация.ФискальныйПризнак, ФорматПраво);
|
||
Модуль.ДобавитьСтроку(Шаблон, " ");
|
||
Формат = Модуль.ФорматШтрихкод(ГоризонтальноеПоложение.Центр, "QR", 6, Ложь);
|
||
Модуль.ДобавитьСтроку(Шаблон, Данные.QRКод.ЗначениеКода, Формат);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ГенераторШаблона
|
||
|
||
// Конструктор элемента шаблона.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * Строки - Массив из Строка - массив сформированных строк.
|
||
// * Колонки - Массив из см. НоваяКолонкаЭлементаШаблона.
|
||
// * Картинки - Массив из Структура.
|
||
// * ВыводитьПоСтрокам - Булево.
|
||
// * ЭлементXML - Структура
|
||
// * ИмяАтрибутаXML - Строка.
|
||
//
|
||
Функция НовыйЭлементШаблона()
|
||
|
||
Элемент = Новый Структура();
|
||
Элемент.Вставить("Строки", Новый Массив()); // Массив из Строка
|
||
Элемент.Вставить("Колонки", Новый Массив()); // Массив из см. НоваяКолонкаЭлементаШаблона
|
||
Элемент.Вставить("Картинки", Новый Массив()); // Массив из Структура
|
||
Элемент.Вставить("ВыводитьПоСтрокам", Истина);
|
||
Элемент.Вставить("ЭлементXML", Новый Структура());
|
||
Элемент.Вставить("ИмяАтрибутаXML", "");
|
||
Возврат Элемент;
|
||
|
||
КонецФункции
|
||
|
||
// Создает и возвращает структуру содержащую данные о колонке.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * Тип - Строка - тип строки шаблона: Строка, Разделитель, Штрихкод, XML.
|
||
// * Выравнивание - ГоризонтальноеПоложение.
|
||
// * ВыравниваниеЗаголовка - Булево.
|
||
// * ОбтеканиеСлева - Булево.
|
||
// * ОбтеканиеСправа - Булево.
|
||
// * Ширина - Число - ширина поля абсолютное значение.
|
||
// * ШиринаФормат - Строка - ширина поля абсолютное или процент.
|
||
// * ВыводитьЗаголовок - Булево - флаг принудительного вывода заголовка если строка не содержит значения.
|
||
// * ПодавлятьПробелы - Булево.
|
||
// * Заполнитель - Строка - символы заполнитель при выравнивании.
|
||
// * ШтрихкодТип - Строка.
|
||
// * ШтрихкодВысота - Число.
|
||
// * Заголовок - Строка - заголовок поля, строка из шаблона до первого выражения.
|
||
// * Значение - Произвольный.
|
||
// * Строка - Строка - значение преобразованное в строку.
|
||
// * НачальнаяПозиция - Число - позиция в строке где начинается первая строка колонки.
|
||
// * НачальнаяШирина - Число - первоначальная ширина колонки.
|
||
// * НоваяШирина - Число - новая ширина колонки, используется при расчете обтекания.
|
||
// * Завершена - Булево - вывод колонки завершен, используется при расчете обтекания.
|
||
// * НачальнаяСтрока - Число.
|
||
//
|
||
Функция НоваяКолонкаЭлементаШаблона()
|
||
|
||
Колонка = Новый Структура();
|
||
Колонка.Вставить("Тип", "СТРОКА");
|
||
// формат колонки
|
||
Выравнивание = ГоризонтальноеПоложение.Лево; // ГоризонтальноеПоложение
|
||
Колонка.Вставить("Выравнивание", Выравнивание);
|
||
Колонка.Вставить("ВыравниваниеЗаголовка", Ложь);
|
||
Колонка.Вставить("ОбтеканиеСлева", Ложь);
|
||
Колонка.Вставить("ОбтеканиеСправа", Ложь);
|
||
Колонка.Вставить("Ширина", 0);
|
||
Колонка.Вставить("ШиринаФормат", "0");
|
||
Колонка.Вставить("ВыводитьЗаголовок", Ложь);
|
||
Колонка.Вставить("ПодавлятьПробелы", Истина);
|
||
Колонка.Вставить("Заполнитель", " ");
|
||
Колонка.Вставить("ШтрихкодТип", "EAN13");
|
||
Колонка.Вставить("ШтрихкодВысота", 2);
|
||
Колонка.Вставить("ИспользоватьBase64", Истина);
|
||
// значения
|
||
Колонка.Вставить("Заголовок", "");
|
||
Колонка.Вставить("Значение", Неопределено);
|
||
Колонка.Вставить("Строка", "");
|
||
// служебные свойства
|
||
Колонка.Вставить("НачальнаяПозиция", 0);
|
||
Колонка.Вставить("НачальнаяШирина", 0);
|
||
Колонка.Вставить("НоваяШирина", 0);
|
||
Колонка.Вставить("Завершена", Ложь);
|
||
Колонка.Вставить("НачальнаяСтрока", 0);
|
||
|
||
|
||
Возврат Колонка;
|
||
|
||
КонецФункции
|
||
|
||
// Выполняет пересчет размеров колонок, для создания эффекта обтекания.
|
||
//
|
||
// Параметры:
|
||
// МассивКолонок - Массив из см. НоваяКолонкаЭлементаШаблона.
|
||
//
|
||
Процедура ПересчитатьРазмерыКолонок(МассивКолонок)
|
||
|
||
Индекс = 0;
|
||
Пока Индекс<=МассивКолонок.ВГраница() Цикл
|
||
|
||
Колонка = МассивКолонок[Индекс];
|
||
Если Не Колонка.Завершена Тогда
|
||
// выполнить обтекание влево
|
||
Если Колонка.ОбтеканиеСлева Тогда
|
||
ИндексКолонкиСлева = Индекс-1;
|
||
Пока ИндексКолонкиСлева>=0 Цикл
|
||
Если МассивКолонок[ИндексКолонкиСлева].НоваяШирина = 0
|
||
И МассивКолонок[ИндексКолонкиСлева].Ширина>0 Тогда
|
||
Колонка.Ширина = Колонка.Ширина + МассивКолонок[ИндексКолонкиСлева].Ширина;
|
||
МассивКолонок[ИндексКолонкиСлева].Ширина = 0;
|
||
Иначе
|
||
Прервать;
|
||
КонецЕсли;
|
||
ИндексКолонкиСлева = ИндексКолонкиСлева - 1;
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
// выполнить обтекание вправо
|
||
Если Колонка.ОбтеканиеСправа Тогда
|
||
ИндексКолонкиСправа = Индекс + 1;
|
||
Пока ИндексКолонкиСправа <= МассивКолонок.ВГраница() Цикл
|
||
Если МассивКолонок[ИндексКолонкиСправа].НоваяШирина = 0
|
||
И МассивКолонок[ИндексКолонкиСправа].Ширина>0 Тогда
|
||
Колонка.Ширина = Колонка.Ширина + МассивКолонок[ИндексКолонкиСправа].Ширина;
|
||
МассивКолонок[ИндексКолонкиСправа].Ширина = 0;
|
||
Иначе
|
||
Прервать;
|
||
КонецЕсли;
|
||
ИндексКолонкиСправа = ИндексКолонкиСправа + 1;
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Индекс = Индекс + 1;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Выравнивает строку по переданным правилам, по заданной ширине.
|
||
//
|
||
// Параметры:
|
||
// Заголовок - Строка - текст который будет выведен перед строкой.
|
||
// Строка - Строка - строка которую требуется выровнять.
|
||
// Выравнивание - ГоризонтальноеПоложение.
|
||
// ВыравниваниеЗаголовка - Булево - выравнивать ли заголовок вместе с текстом.
|
||
// ШиринаСтроки - Число - ширина строки по которой требуется выровнять строку.
|
||
// Заполнитель - Строка - символы которые будут использоваться как пустая строка при заполнении.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Строка - выровненная по правилам строка.
|
||
//
|
||
Функция ВыровнятьСтроку(Заголовок, Строка, Выравнивание, ВыравниваниеЗаголовка, ШиринаСтроки, Заполнитель = " ")
|
||
|
||
ПустаяСтрока = СтрокаСимволов(ШиринаСтроки, Заполнитель);
|
||
|
||
Если Выравнивание = ГоризонтальноеПоложение.Право И Не ВыравниваниеЗаголовка Тогда // выравнивание справа без заголовка
|
||
Размер = ШиринаСтроки - СтрДлина(Заголовок);
|
||
Результат = Заголовок + Прав(ПустаяСтрока + Строка, Размер);
|
||
ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Право И ВыравниваниеЗаголовка Тогда // выравнивание справа вместе с заголовком
|
||
Размер = ШиринаСтроки;
|
||
Результат = Прав(ПустаяСтрока + Заголовок + Строка, Размер);
|
||
ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Лево И Не ВыравниваниеЗаголовка Тогда // выравнивание слева без заголовка
|
||
Размер = ШиринаСтроки - СтрДлина(Заголовок);
|
||
Результат = Заголовок + Лев(Строка + ПустаяСтрока, Размер);
|
||
ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Лево И ВыравниваниеЗаголовка Тогда // выравнивание слева вместе с заголовком
|
||
Размер = ШиринаСтроки;
|
||
Результат = Лев(Заголовок + Строка + ПустаяСтрока, Размер);
|
||
ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Центр И Не ВыравниваниеЗаголовка Тогда // выравнивание по центру без заголовка
|
||
Размер = ШиринаСтроки - СтрДлина(Заголовок);
|
||
РазмерСтроки = СтрДлина(Строка);
|
||
РазмерСлева = Цел((Размер - РазмерСтроки) / 2);
|
||
Результат = Заголовок + Лев(Лев(ПустаяСтрока, РазмерСлева) + Строка + ПустаяСтрока, Размер);
|
||
ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Центр И ВыравниваниеЗаголовка Тогда // выравнивание по центру вместе с заголовком
|
||
Размер = ШиринаСтроки;
|
||
РазмерСтроки = СтрДлина(Заголовок + Строка);
|
||
РазмерСлева = Цел((Размер - РазмерСтроки) / 2);
|
||
Результат = Лев(Лев(ПустаяСтрока, РазмерСлева) + Заголовок + Строка + ПустаяСтрока, Размер);
|
||
ИначеЕсли Выравнивание = ГоризонтальноеПоложение.ПоШирине И ВыравниваниеЗаголовка Тогда // выравнивание по ширине вместе с заголовком
|
||
Текст = Заголовок + Строка;
|
||
Размер = ШиринаСтроки;
|
||
РазмерСтроки = СтрДлина(Текст);
|
||
Строки = СтрРазделить(Текст, " ", Истина);
|
||
Индекс = 0;
|
||
Пока РазмерСтроки<Размер Цикл
|
||
Строки[Индекс] = Строки[Индекс]+" ";
|
||
Индекс = ?(Индекс < Строки.ВГраница()-1, Индекс + 1, 0);
|
||
РазмерСтроки = РазмерСтроки + 1;
|
||
КонецЦикла;
|
||
Результат = СтрСоединить(Строки, " ");
|
||
ИначеЕсли Выравнивание = ГоризонтальноеПоложение.ПоШирине И Не ВыравниваниеЗаголовка Тогда // выравнивание по ширине без заголовка
|
||
Текст = Строка;
|
||
Размер = ШиринаСтроки;
|
||
РазмерСтроки = СтрДлина(Текст);
|
||
Строки = СтрРазделить(Текст, " ", Истина);
|
||
Индекс = 0;
|
||
Пока РазмерСтроки<Размер Цикл
|
||
Строки[Индекс] = Строки[Индекс]+" ";
|
||
Индекс = ?(Индекс < Строки.ВГраница()-1, Индекс + 1, 0);
|
||
РазмерСтроки = РазмерСтроки + 1;
|
||
КонецЦикла;
|
||
Результат = Заголовок + СтрСоединить(Строки, " ");
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает строку отрезанную по пробелу, что бы она поместилась в заданный размер.
|
||
//
|
||
// Параметры:
|
||
// Текст - Строка - строка из которой требуется вырезать слова.
|
||
// Размер - Число - максимальный размер строки.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - отрезанная по пробелу строка.
|
||
//
|
||
Функция ВырезатьСлеваПоСловам(Текст, Размер)
|
||
|
||
СледующийПробел = СтрНайти(Текст, " ");
|
||
ДлинаТекста = СтрДлина(Текст);
|
||
Если СледующийПробел > Размер+1 Тогда
|
||
// пробел после строки, отрезается по символам
|
||
ПозицияПробел = Размер;
|
||
ИначеЕсли СледующийПробел = 0 Тогда
|
||
// нет пробелов, отрезается либо по размеру, либо по всей строке
|
||
ПозицияПробел = Мин(Размер, ДлинаТекста);
|
||
Иначе
|
||
// есть пробел в границе
|
||
Пока СледующийПробел <= Размер+1 Цикл
|
||
ПозицияПробел = СледующийПробел;
|
||
Если ПозицияПробел < ДлинаТекста Тогда
|
||
СледующийПробел = СтрНайти(Текст, " ", , ПозицияПробел+1);
|
||
Иначе
|
||
СледующийПробел = ДлинаТекста;
|
||
КонецЕсли;
|
||
Если СледующийПробел = 0 Тогда
|
||
Если ПозицияПробел = 0 Тогда
|
||
ПозицияПробел = Размер;
|
||
ИначеЕсли Размер >= ДлинаТекста Тогда
|
||
ПозицияПробел = ДлинаТекста;
|
||
КонецЕсли;
|
||
Прервать;
|
||
ИначеЕсли СледующийПробел = ДлинаТекста Тогда
|
||
ПозицияПробел = СледующийПробел;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Результат = СокрЛП(Лев(Текст, ПозицияПробел));
|
||
Текст = СокрЛП(Сред(Текст, ПозицияПробел+1));
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает код типа штрихкода по имени для передачи в ГенерацияШтрихкода.
|
||
//
|
||
// Параметры:
|
||
// СтрокаТипШтрихкода - Строка - текстовое представление вида штрихкода.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - числовое представление штрихкода, для использования в генерации штрихкодов.
|
||
//
|
||
Функция ЧисловойТипШтрихкода(СтрокаТипШтрихкода)
|
||
|
||
ТипыШтрихкода = Новый Соответствие();
|
||
ТипыШтрихкода.Вставить("EAN8", 0);
|
||
ТипыШтрихкода.Вставить("EAN13", 1);
|
||
ТипыШтрихкода.Вставить("EAN128", 2);
|
||
ТипыШтрихкода.Вставить("Code39", 3);
|
||
ТипыШтрихкода.Вставить("Code128", 4);
|
||
ТипыШтрихкода.Вставить("Code16k", 5);
|
||
ТипыШтрихкода.Вставить("PDF417", 6);
|
||
ТипыШтрихкода.Вставить("Standart (Industrial) 2 of 5", 7);
|
||
ТипыШтрихкода.Вставить("Interleaved 2 of 5", 8);
|
||
ТипыШтрихкода.Вставить("Code39", 9);
|
||
ТипыШтрихкода.Вставить("Code93", 10);
|
||
ТипыШтрихкода.Вставить("ITF14", 11);
|
||
ТипыШтрихкода.Вставить("RSS14", 12);
|
||
ТипыШтрихкода.Вставить("EAN13AddOn2", 14);
|
||
ТипыШтрихкода.Вставить("EAN13AddOn5", 15);
|
||
ТипыШтрихкода.Вставить("QR", 16);
|
||
ТипыШтрихкода.Вставить("GS1DataBarExpandedStacked", 17);
|
||
ТипыШтрихкода.Вставить("Datamatrix ASCII", 18);
|
||
ТипыШтрихкода.Вставить("Datamatrix BASE256", 19);
|
||
ТипыШтрихкода.Вставить("Datamatrix TEXT", 20);
|
||
ТипыШтрихкода.Вставить("Datamatrix C40", 21);
|
||
ТипыШтрихкода.Вставить("Datamatrix X12", 22);
|
||
ТипыШтрихкода.Вставить("Datamatrix EDIFACT", 23);
|
||
ТипыШтрихкода.Вставить("Datamatrix GS1ASCII", 24);
|
||
|
||
Результат = ТипыШтрихкода.Получить(СтрокаТипШтрихкода);
|
||
|
||
Возврат ?(Результат = Неопределено, 99, Результат);
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#КонецОбласти |