УНФ 3.0 Как изменить отображаемую информацию на дисплее покупателя?
Функция которая формирует выводимую информацию на дисплей покупателя находится тут:
Общий модуль - МенеджерОборудованяРМККлиент - ИнформацияДляДисплеяПокупателя
Данная функция получает на вход параметры операции и на основании параметров возвращает структуру с свойством "СтрокиТекста" в котором будет хранится сформированный текст для дисплея покупателя.
Полный текс функции:
// Возвращает заполненные параметры операции для дисплея покупателя. // // Параметры: // ИсходныеДанные - Структура // *Операция - Строка // *ИспользоватьПодключаемоеОборудование - Булево // *ДанныеДляОтображения - Строка // *СуммаСкидки - Число // *СуммаИтого - Число // ОбъектВладелец - УправляемаяФорма. // СуммаСкидкиНаТовар - Число. // // Возвращаемое значение: // Структура // Функция ИнформацияДляДисплеяПокупателя(Операция, ИсходныеДанные, ОбъектВладелец, СуммаСкидкиНаТовар = 0) СуммаИтого = ИсходныеДанные.СуммаИтого; СуммаСкидки = ИсходныеДанные.СуммаСкидки; ДанныеДляОтображения = ИсходныеДанные.ДанныеДляОтображения; ИспользоватьАвтоматическиеСкидки = Ложь; ДопускаетсяПрименениеСкидок = Ложь; Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ОбъектВладелец, "ИспользоватьАвтоматическиеСкидки") Тогда ИспользоватьАвтоматическиеСкидки = ОбъектВладелец.ИспользоватьАвтоматическиеСкидки; КонецЕсли; Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ОбъектВладелец, "ДопускаетсяПрименениеСкидок") Тогда ДопускаетсяПрименениеСкидок = ОбъектВладелец.ДопускаетсяПрименениеСкидок; КонецЕсли; ИспользуютсяСкидки = ИспользоватьАвтоматическиеСкидки Или ДопускаетсяПрименениеСкидок; ТипыОпераций = ТипыОперацийДисплеяПокупателя(); ПараметрыОперации = ПараметрыОперацииДисплейПокупателя(); ПараметрыОперации.НазваниеОрганизации = ВРег(Строка(ИсходныеДанные.Организация)); ПараметрыОперации.СтатусРабочегоМеста = ПредопределенноеЗначение("Перечисление.СтатусРабочегоМестаНаДисплее.РабочееМестоРаботает"); БазовыйШаблон = СтрШаблон("%1%2", НСтр("ru = '%1'"), " "); БазовыйШаблонБезПробелов = НСтр("ru = '%1'"); ШаблонДваПараметра = НСтр("ru = '%1 %2'"); ТекстПриПростое = НСтр("ru = 'ДОБРО ПОЖАЛОВАТЬ'"); ТекстВНерабочемСостоянии = НСтр("ru = 'КАССА НЕ РАБОТАЕТ'"); Строка1 = НСтр("ru = ''"); Строка2 = НСтр("ru = ''"); ВыравниватьВправо = Ложь; Если Операция = ТипыОпераций.НачалоРаботы Тогда Строка1 = ТекстПриПростое; ПараметрыОперации.Операция = "СервисныйРежим"; ПараметрыОперации.ГотовностьКРаботе = Истина; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.НеУстановлен"); ПараметрыОперации.СтатусРабочегоМеста = ПредопределенноеЗначение("Перечисление.СтатусРабочегоМестаНаДисплее.РабочееМестоСвободно"); ИначеЕсли Операция = ТипыОпераций.Сервис Тогда Строка1 = ТекстВНерабочемСостоянии; ПараметрыОперации.Операция = "СервисныйРежим"; ПараметрыОперации.ГотовностьКРаботе = Ложь; ПараметрыОперации.СтатусРабочегоМеста = ПредопределенноеЗначение("Перечисление.СтатусРабочегоМестаНаДисплее.СервисныйРежим"); ИначеЕсли Операция = ТипыОпераций.ПречекQR Тогда ПараметрыОперации.Операция = "ПлатежнаяОперация"; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ОжиданиеОперации"); ПараметрыОперации.Сумма = Число(ИсходныеДанные.СуммаКОплате); ПараметрыОперации.ЗначениеQRКода = ИсходныеДанные.ЗначениеQRКода; ПараметрыОперации.КартинкаQRКода = ИсходныеДанные.КартинкаQRКода; ПараметрыОперации.НаличнаяОплата = Ложь; ТипыПлатежныхСистем = МенеджерОборудованияРМККлиент.ТипыПлатежнойСистемыККТ(); Если ВРег(ОбъектВладелец.ПлатежнаяСистема_ИдентификаторПС) = ВРег("ЮКасса") Тогда ПараметрыОперации.ТипПлатежнойСистемы = ТипыПлатежныхСистем.Получить("ЮКасса"); Иначе ПараметрыОперации.ТипПлатежнойСистемы = ТипыПлатежныхСистем.Получить("СистемаБыстрыхПлатежей"); КонецЕсли; ИначеЕсли Операция = ТипыОпераций.Оплата Тогда Если Не ЗначениеЗаполнено(ДанныеДляОтображения.Оплата) Тогда ДанныеДляОтображения.Оплата = 0; КонецЕсли; Если Не ЗначениеЗаполнено(ДанныеДляОтображения.Сдача) Тогда ДанныеДляОтображения.Сдача = 0; КонецЕсли; Строка1 = СтрШаблон(ШаблонДваПараметра, НСтр("ru = 'ВНЕСЕНО:'"), ДанныеДляОтображения.Оплата); Строка2 = СтрШаблон(ШаблонДваПараметра, НСтр("ru = 'СДАЧА:'"), ДанныеДляОтображения.Сдача); ТаблицаОплат = ОбъектВладелец.Объект.Оплата; КоличествоОплат = ТаблицаОплат.Количество(); Если КоличествоОплат>0 Тогда ПоследняяОплата = ТаблицаОплат[КоличествоОплат-1]; ПараметрыОперации.Операция = "ПлатежнаяОперация"; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ОжиданиеОперации"); ПараметрыОперации.Сумма = Число(ДанныеДляОтображения.Оплата); ПараметрыОперации.Сдача = Число(ДанныеДляОтображения.Сдача); ПараметрыОперации.НаличнаяОплата = ОбщегоНазначенияРМККлиент.ЭтоОплатаНаличными(ПоследняяОплата.ВидОплаты); ПараметрыОперации.ТипПлатежнойСистемы = Строка(ПоследняяОплата.ВидОплаты); Если ОбщегоНазначенияРМККлиент.ЭтоВидОперацииВозврат(ОбъектВладелец.Объект.ВидОперации) Тогда ПараметрыОперации.Возврат = Истина; КонецЕсли; Иначе ПараметрыОперации.Операция = "ПлатежнаяОперация"; ПараметрыОперации.ТипПлатежнойСистемы = НСтр("ru = 'К ОПЛАТЕ'"); ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.Информация"); ПараметрыОперации.Сумма = Число(СуммаИтого); Если ОбщегоНазначенияРМККлиент.ЭтоВидОперацииВозврат(ОбъектВладелец.Объект.ВидОперации) Тогда ПараметрыОперации.ТипПлатежнойСистемы = НСтр("ru = 'К ВОЗВРАТУ'"); ПараметрыОперации.Возврат = Истина; КонецЕсли; КонецЕсли; ИначеЕсли Операция = ТипыОпераций.ОжиданиеОплаты Тогда ДанныеДляОтображения.СуммаИтого = ФорматСумм(СуммаИтого); ДанныеДляОтображения.СуммаСкидки = ФорматСумм(СуммаСкидки); Строка1 = СтрШаблон(ШаблонДваПараметра, НСтр("ru = 'ИТОГО:'"), ДанныеДляОтображения.СуммаИтого); Если НЕ ПустаяСтрока(ДанныеДляОтображения.СуммаСкидки) Тогда Строка2 = СтрШаблон(ШаблонДваПараметра, НСтр("ru = 'СКИДКА:'"), ДанныеДляОтображения.СуммаСкидки); КонецЕсли; Если Не ЗначениеЗаполнено(ДанныеДляОтображения.Оплата) Тогда ДанныеДляОтображения.Оплата = 0; КонецЕсли; Если Не ЗначениеЗаполнено(ДанныеДляОтображения.Сдача) Тогда ДанныеДляОтображения.Сдача = 0; КонецЕсли; ТаблицаОплат = ОбъектВладелец.Объект.Оплата; КоличествоОплат = ТаблицаОплат.Количество(); Если КоличествоОплат>0 Тогда ПоследняяОплата = ТаблицаОплат[КоличествоОплат-1]; ПараметрыОперации.Операция = "ПлатежнаяОперация"; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ОжиданиеОперации"); ПараметрыОперации.Сумма = Число(ДанныеДляОтображения.Оплата); ПараметрыОперации.Сдача = Число(ДанныеДляОтображения.Сдача); ПараметрыОперации.НаличнаяОплата = ОбщегоНазначенияРМККлиент.ЭтоОплатаНаличными(ПоследняяОплата.ВидОплаты); ПараметрыОперации.ТипПлатежнойСистемы = Строка(ПоследняяОплата.ВидОплаты); Если ОбщегоНазначенияРМККлиент.ЭтоВидОперацииВозврат(ОбъектВладелец.Объект.ВидОперации) Тогда ПараметрыОперации.Возврат = Истина; КонецЕсли; Иначе ПараметрыОперации.Операция = "ПлатежнаяОперация"; ПараметрыОперации.ТипПлатежнойСистемы = НСтр("ru = 'К ОПЛАТЕ'"); ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.Информация"); ПараметрыОперации.Сумма = Число(СуммаИтого); Если ОбщегоНазначенияРМККлиент.ЭтоВидОперацииВозврат(ОбъектВладелец.Объект.ВидОперации) Тогда ПараметрыОперации.ТипПлатежнойСистемы = НСтр("ru = 'К ВОЗВРАТУ'"); ПараметрыОперации.Возврат = Истина; КонецЕсли; КонецЕсли; ИначеЕсли Операция = ТипыОпераций.ОтменаОплаты Тогда Строка1 = НСтр("ru = 'ОТМЕНА ОПЛАТЫ'"); ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.Информация"); ИначеЕсли Операция = ТипыОпераций.ДобавлениеТовара ИЛИ Операция = ТипыОпераций.УдалениеТовара ИЛИ Операция = ТипыОпераций.ИзменениеКоличества ИЛИ Операция = ТипыОпераций.ИзменениеЦены Тогда ИнформацияНаименование = ДанныеДляОтображения.ТоварНаименование; ВыравниватьВправо = Истина; Строка1 = СтрШаблон(БазовыйШаблонБезПробелов, ДанныеДляОтображения.ТоварНаименование); Строка2 = СтрШаблон(БазовыйШаблонБезПробелов, ДанныеДляОтображения.ТоварЦена); Если Операция = ТипыОпераций.ИзменениеЦены И СуммаСкидкиНаТовар <> 0 Тогда Строка2 = СтрШаблон(НСтр("ru = 'СКИДКА: %1'"), ДанныеДляОтображения.ТоварСкидка); КонецЕсли; Если Не ПустаяСтрока(Строка1) Тогда Если НЕ ДанныеДляОтображения.ТоварКоличество = 1 ИЛИ ДанныеДляОтображения.Весовой Тогда Строка2 = СтрШаблон( НСтр("ru = '%1x%2=%3'"), ДанныеДляОтображения.ТоварКоличество, Строка2, ДанныеДляОтображения.ТоварСумма); КонецЕсли; Если Операция = ТипыОпераций.УдалениеТовара Тогда Строка2 = СтрШаблон( НСтр("ru = '-%1'"), Строка2); КонецЕсли; КонецЕсли; Если ОбъектВладелец.Объект.Товары.Количество() = 0 Тогда ПараметрыОперации.Операция = "СервисныйРежим"; ПараметрыОперации.ГотовностьКРаботе = Истина; Иначе ПодготовитьСписокТоваровНаДисплейПокупателяHTML(ПараметрыОперации, ОбъектВладелец.Объект.Товары, ИспользуютсяСкидки); КонецЕсли; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.Информация"); ИначеЕсли Операция = ТипыОпераций.СписокТоваров Тогда Если ОбъектВладелец.Объект.Товары.Количество() = 0 Тогда ПараметрыОперации.Операция = "СервисныйРежим"; ПараметрыОперации.ГотовностьКРаботе = Истина; Иначе ПодготовитьСписокТоваровНаДисплейПокупателяHTML(ПараметрыОперации, ОбъектВладелец.Объект.Товары, ИспользуютсяСкидки); КонецЕсли; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.Информация"); ИначеЕсли Операция = ТипыОпераций.Аннулирование Тогда Строка1 = НСтр("ru = 'ЧЕК АННУЛИРОВАН'"); ПараметрыОперации.Операция = "Информация"; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ВыполненоУспешно"); ИначеЕсли Операция = ТипыОпераций.ОтложитьЧек Тогда Строка1 = НСтр("ru = 'ЧЕК ОТЛОЖЕН'"); ПараметрыОперации.Операция = "Информация"; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ВыполненоУспешно"); ПараметрыОперации.ГотовностьКРаботе = Истина; ИначеЕсли Операция = ТипыОпераций.ВозвратТовара Тогда Строка1 = НСтр("ru = 'ВОЗВРАТ ТОВАРА'"); ПараметрыОперации.Операция = "Информация"; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ОжиданиеОперации"); ПараметрыОперации.ГотовностьКРаботе = Истина; ИначеЕсли Операция = ТипыОпераций.Коррекция Тогда Строка1 = НСтр("ru = 'КОРРЕКЦИЯ'"); ПараметрыОперации.Операция = "Информация"; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ОжиданиеОперации"); ИначеЕсли Операция = ТипыОпераций.Информация Тогда Строка1 = ДанныеДляОтображения.Информация; ПараметрыОперации.Операция = "Информация"; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.Информация"); ИначеЕсли Операция = ТипыОпераций.Ошибка Тогда Строка1 = НСтр("ru = 'ОПЕРАЦИЯ НЕ ВЫПОЛНЕНА'"); Строка2 = ИсходныеДанные.ТекстОшибки; ПараметрыОперации.Операция = "Информация"; ПараметрыОперации.СтатусОперации = ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ОперацияНеВыполнена"); ПараметрыОперации.СтатусРабочегоМеста = ПредопределенноеЗначение("Перечисление.СтатусРабочегоМестаНаДисплее.ОшибкаНаРабочемМесте"); Иначе ВызватьИсключение СтрШаблон(НСтр("ru = 'Неизвестная операция %1'"), Операция); КонецЕсли; // Дисплей Posua-vfd не обновляет вторую строку, если на нее передать пустую строку. Если ПустаяСтрока(Строка2) Тогда Строка2 = СтрШаблон(НСтр("ru = '%1'")," "); КонецЕсли; ТекстКОтправкеНаДисплей = СтрШаблон( НСтр("ru = '%1%2%3'"), Строка1, Символы.ПС, Строка2); ПараметрыОперации.СтрокиТекста = ТекстКОтправкеНаДисплей; Возврат ПараметрыОперации; КонецФункции