У многих возникает вопрос, почему 1С не включила в свою розницу Монитор покупателя, без которого сегодня практически не обходится ни один магазин. Обычно все решают эту задачу покупкой/разработкой стороннего софта или просто покупают дисплей покупателя, на котором самому покупателю в 21 веке уже ничего не понятно.
Предложенный механизм не претендует на оригинальность, но позволяет собрать простой монитор покупателя средствами 1С и отобразить на нем всю необходимую информацию, включая картинки товара, рекламу и т.п. (обычно это либо простой либо специальный кассовый монитор размером 15-21 дюймов, видел телевизор на 32").
Я не буду здесь описывать как в компьютер вставить видеокарту, подключить и отобразить 2 монитора одновременно, но решение работает именно таким способом. На самом деле второй, третий... и т.д. монитор можно подключать не только к кассовому компьютеру, а поставить, например, в комнате охраны, и подключить к другому компьютеру, некоторые, кстати, пользуются, можно специально выделять цветом различные товары (подороже, подешевле и т.п.).
Суть идеи в том, что мы создаем РегистрСведений, в который записываем строки после сканирования каждого товара, далее на отдельном экране мы его просто считываем и отображаем на экране в виде таблицы (так нравится населению) В верхней строке таблицы более крупным шрифтом показываем ИТОГО (ВСЕГО), сортируем по убыванию так, чтобы последняя покупка была всегда вверху.
Мы ушли немножко дальше - показываем сопутствующие товары, остатки бонусов и т.п., но здесь уже кому как нравиться и что можно себе позволить - не каждый хочет чтобы все знали сколько у него бонусов. Здесь выкладываю базовый начальный вариант только для того, чтобы поделиться идеей как без стороннего софта решить сразу несколько задач достаточно просто и дешево.
Итак что нам нужно:
1. Розница 2.х (на самом деле механизм должен будет работать на любой рознице и/или Торговле)
2. Загружаем предложенную обработку (или делаем свою)
3. Создаем непериодический независимый регистр сведений я назвал его чекиМониторПокупателя. Думаю по скрину понятно какие реквизиты туда включены и для чего Не забываем дать права на данный регистр роли, которая будет у пользователя для монитора. Все одноименные объекты (склад, номенклатура, покупатель и т.п. это ссылки на соответствующие объекты БД, единственное - номенклатура имеет составной тип, собственно справочник номенклатуры и строка позже станет ясно зачем.
4. В форму обработки "РМКУправляемыйРежим" добавляем следующую процедуру
Процедура ВывестиНаДисплейМонитор()
КассаККМ=ТаблицаКассККМОрганизаций[0].КассаККМ;//касса, на которой запущен монитор
//Очищаем все записи в регистре
НаборЗаписей=РегистрыСведений.ЧекиМониторПокупателя.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.КассаККМ.Установить(КассаККМ);
НаборЗаписей.Записать();
КолСтрок=0;
//Можно обойтись без цикла, но именно в данном случае почему то стабильнее и быстрее.
// покупатель не замечает очистки
Для каждого СтрокаТЧ из Объект.Товары Цикл
МенеджерЗаписи=РегистрыСведений.ЧекиМониторПокупателя.СоздатьМенеджерЗаписи();
МенеджерЗАписи.КассаККМ=КассаККМ;
МенеджерЗАписи.Номенклатура=СтрокаТЧ.Номенклатура;
МенеджерЗАписи.Количество=СтрокаТЧ.Количество;
МенеджерЗАписи.Цена=СтрокаТЧ.Цена;
МенеджерЗАписи.Сумма=СтрокаТЧ.Сумма;
МенеджерЗАписи.СуммаНДС=СтрокаТЧ.СуммаНДС;
МенеджерЗАписи.ПроцентСкидки=СтрокаТЧ.ПроцентАвтоматическойСкидки+СтрокаТч.ПроцентРучнойСкидки;
МенеджерЗАписи.Скидка=СтрокаТЧ.СуммаАвтоматическойСкидки+СтрокаТЧ.СуммаРучнойСкидки;
МенеджерЗАписи.Склад=СтрокаТЧ.Склад;
МенеджерЗаписи.СтрокаНомер=СтрокаТЧ.НомерСтроки;
МенеджерЗаписи.Записать();
КонецЦикла;
//Выводим надпись ВСЕГО, которая должна быть выше всех, по хорошему ее можно вывести в отдельное окно,
// но всем (в моем случае) почему то привычнее видеть итого вверху
МенеджерЗаписи=РегистрыСведений.ЧекиМониторПокупателя.СоздатьМенеджерЗаписи();
МенеджерЗАписи.КассаККМ=КассаККМ;
МенеджерЗаписи.Номенклатура="ВСЕГО"; // Номенклатура для дисплея покупателя это строка
МенеджерЗАписи.Сумма=Объект.Товары.Итог("Сумма");
менеджерзаписи.СтрокаНомер=999; //Вряд ли кто то купить больше 999 позиций, поэтому 999 при обратной сортировке будет вверху а если купить - увеличить...
МенеджерЗаписи.Записать();
КонецПроцедуры
5. В начало Процедуры ВывестиИнформациюНаДисплейПокупателя(Команда) добавляем вызов вышеуказанной процедуры
ВывестиНаДисплейМонитор();
6. В принципе уже теперь можно работать, запуская второй сеанс 1С и обработку монитора выведя ее в коммандный интерфейс, можно пойти немного дальше и автоматизировать процесс запуска обработки.
6.1. В план Видов характеристик ПраваПользователей добавляем предопределенное значение МониторПокупателя (см. скриншот), которое после этого нужно будет установить для пользователя из под которого он будет запускаться (остальные права я задал как у кассира, можно и сократить при желании)
6.2.. В процедуру ПослеНачалаРаботыСистемы, которая расположена в модуле ОбщегоНазначенияКлиентПредопределяемый добавляем вызов самого монитора:ор_ОбщегоНазначенияКлиент.ПодключитьОткрытиеМонитораПокупателя();
Соответсвенно в модуль ор_ОбщегоНазначенияКлиент добавляем процедуру
Процедура ПодключитьОткрытиеМонитораПокупателя() Экспорт
ПодключитьОбработчикОжидания("ОткрытьМониторПокупателя",0.1,Истина);
КонецПроцедуры
Далее в модуль управляемого приложения (можно найти место и получше) добавить процедуру, которая будет проверять если у пользователя права на запуск обработки и если есть открывать во весь экран монитор покупателя.
Процедура ОткрытьМониторПокупателя() Экспорт
РазрешенЗапускМонитора = УправлениеПользователямиВызовСервера.ПолучитьБулевоЗначениеПраваПользователя(
ПредопределенноеЗначение("ПланВидовХарактеристик.ПраваПользователей.МониторПокупателя"), Ложь);
Если РазрешенЗапускМонитора Тогда
Если НЕ ПолучитьФорму("Обработка.МониторПокупателя.Форма").Открыта() Тогда
ОткрытьФормуМодально("Обработка.МониторПокупателя.Форма");
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
7. Все... осталось создать пользователя и проставить ему право запускать монитор. Теперь перед запуском основного приложения (можно и до этого) кассиру нужно будет открывать дополнительно монитор покупателя (как автоматизировать процесс открытия описывать не буду- информации море).
У данного метода есть свои недостатки - из очевидных требуется отдельная лицензия на монитор покупателя поскольку он работает столько же сколько и касса, сегодня лицензии не так дороги и подобное решение успешно работает в мазазинах с количеством касс 5-10. Из других - 1С вряд ли одобрит подобные деяния, но кто же и когда их спрашивал. Можно его запускать и одним сеансом с 1С вот только разносить по дисплеям придется кассиру при запуске, зато лицензия экономится.
Сама обработка проверена на Платформе версии 8.3.6 и 8.3.10.2561, по сути должна работать на любой. Версия Розницы 2.1.
Метод предлагается "as is" как простая идея как получить монитор покупателя быстро и без особых заморочек, Если есть фотки товара, то на форме можно отобразить и его.
На самом деле в обработке (чтобы не качать) все просто - на форме динамический список созданного регистра сведений с параметром "кассаККМ", который устанавливается при открытии.
ЗначениеНастроекПовтИсп.ПолучитьКассуККМПользователяПоУмолчанию(Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя,Истина));
Автообновление динамического списка реализовано процедурой:
&НаКлиенте
Процедура ОбновитьДанные() Экспорт
элементы.Товары.Обновить();
КонецПроцедуры
Где товары и есть динамический список, ну а сама процедура вызывается обрабочиком ожидания ПриОткрытии обработки.
Итого... 10 строк кода.
В общем кому интересно- Welcome.
Если нужна доработка с картинками и дополнительной информацией, тоже обращайтесь.