Top.Mail.Ru
Заказать консультацию
специалиста 1С
Отправить заявку

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

Собственная обработка для Прайс-чекера

Хренов Константин Посмотреть все статьи >> Специалист по внедрению 1С франчайзинговой сети "ИнфоСофт"
21.01.2022
1453
Время прочтения - 4 мин.
Заказать консультацию

Эта история началась с одной просьбы клиента написать обработку «Прайс-чекер» (Price-checker), своего рода аналог одноименного аппаратного устройства. Работает оно следующим образом: в устройстве есть встроенный сканер штрих-кодов, который при считывании товара выдает информацию о товаре: цене, наименовании и т.д. Для меня подобная просьба была равноценна предложению начать заново изобретать велосипед, поэтому вполне логично, что я незамедлительно задал клиенту вопрос: не хочет ли он всё-таки приобрести прайс-чекер в заводском исполнении, а не тратить деньги «на разработку обработки». В ответ прозвучало: «Нет, оценивайте обработку и делайте. Прайс-чекер в заводском исполнении стоит дорого и не покрывает весь нужный функционал».

Я начал выяснять, что из оборудования есть в продаже на рынке. Оказалось, что более-менее нормальный прайс-чекер с софтом стоит от 60 тысяч рублей. «Ну ладно стоимость», - подумал я и начал тестить софт, установленный на устройствах. К моему удивлению, софт и вправду оказался очень скуден по части настроек и по информативности о товаре. При этом еще и не каждый софт можно было доработать. Осознав, что имеющийся на рынке «велосипед» изобретен не слишком удачно, я взялся за написание собственной обработки для прайс-чекера.

Подпишитесь на дайджест!
Подпишитесь на дайджест, и получайте ежемесячно подборку полезных статей.

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

Основная проблема в написании обработки состояла в подключении сканера штрих-кода к форме, чтобы все работало так же, как во всех типовых формах. Но, как говорится, глаза боятся, а руки делают. Далее представляю мой технический опыт с горсточкой «граблей» на тему «как подключить сканер ШК к требуемой форме».

Для того, чтобы сканер заработал на любой форме нужно только скопировать и вставить в модуль формы следующий код:



&НаКлиенте
Процедура ПриОткрытии(Отказ)
         МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода");
КонецПроцедуры
 

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
                                ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
                КонецПроцедуры

     &НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
                                // ПодключаемоеОборудование
                Если Источник = "ПодключаемоеОборудование"
                               И ВводДоступен() Тогда
                               Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
                               ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
                               КонецЕсли;
                КонецЕсли;
                // Конец ПодключаемоеОборудование
                                // Неизвестные штрихкоды
                Если Источник = "ПодключаемоеОборудование"
                               И ИмяСобытия = "НеизвестныеШтрихкоды"
                               И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
                                                              ДанныеШтрихкодов = Новый Массив;
                               Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл
                                               ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
                               КонецЦикла;
                               Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл
                                               ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
                               КонецЦикла;
                                                              ОбработатьШтрихкоды(ДанныеШтрихкодов);
                                               КонецЕсли;
                КонецПроцедуры

     &НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
                                Если ТипЗнч(ДанныеШтрихкодов) = Тип("Массив") Тогда
                               МассивШтрихкодов = ДанныеШтрихкодов;
                Иначе
                               МассивШтрихкодов = Новый Массив;
                               МассивШтрихкодов.Добавить(ДанныеШтрихкодов);
                КонецЕсли;
                                СтруктураПараметровДействия = Новый Структура;
                СтруктураПараметровДействия.Вставить("НеизвестныеШтрихкоды", ДобавитьНоменклатуруПоШтрихкодам(МассивШтрихкодов));
                СтруктураПараметровДействия.Вставить("ФормаВладелец",        УникальныйИдентификатор);
                Элементы.ГруппаДанных.Видимость = Истина;
    ПодключитьОбработчик();              
                                КонецПроцедуры // ПолученыШтрихкоды()

     &НаСервере
Функция ДобавитьНоменклатуруПоШтрихкодам(ДанныеШтрихкодов)
                                ЭтаФорма.ЗаблокироватьДанныеФормыДляРедактирования();
                                НеизвестныеШтрихкоды = Новый Массив;
                                Таблица = Новый ТаблицаЗначений;
                Таблица.Колонки.Добавить("Номенклатура",   Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
                Таблица.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
                Таблица.Колонки.Добавить("Упаковка",       Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
                Таблица.Колонки.Добавить("Количество",     Новый ОписаниеТипов("Число"));
                                КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
                                ПрефиксыВесовыхШтрихкодов = ЗначениеНастроекПовтИсп.ПолучитьПрефиксыВесовыхШтрихкодов();
                                НеЗакешированныеРанееШтрихкоды = Новый Массив;
                                Для Каждого ТекШтрихкод Из ДанныеШтрихкодов Цикл
                               ТекШтрихкод.Штрихкод = ВРег(СокрЛП(ТекШтрихкод.Штрихкод));
                                РегистрыСведений.ШтрихкодыНоменклатуры.ПреобразоватьВесовойШтрихкод(ТекШтрихкод, ПрефиксыВесовыхШтрихкодов);
                               Если Не ЗначениеЗаполнено(КэшированныеЗначения.Штрихкоды[ТекШтрихкод.Штрихкод])
                                               Или КэшированныеЗначения.Штрихкоды[ТекШтрихкод.Штрихкод].НеизвестныйШтрихкод Тогда
                                               НеЗакешированныеРанееШтрихкоды.Добавить(ТекШтрихкод.Штрихкод);
                               КонецЕсли;
                КонецЦикла;
                                Если НеЗакешированныеРанееШтрихкоды.Количество() > 0 Тогда
                                                       РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьДанныеПоШтрихкодам(КэшированныеЗначения, НеЗакешированныеРанееШтрихкоды);
                                               КонецЕсли;

               

И в «ДанныеШтрихкодов» мы уже имеем ссылку на номенклатуру и делаем с ней все, что захотим.

Все выглядело просто и даже работало, но тут я дошел до пункта требований:
«в форме обработки видимость всех элементов формы должна быть проставлена в ЛОЖЬ через 10 сек после сканирования». Ну, я-то человек простой, думаю, поставлю на все элементы ЛОЖЬ и при сканировании буду менять в ИСТИНУ. Однако оказалось, что операция ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма) не отработает, если на форме нет хотя бы одного поля ввода. И это нужно учитывать.

В итоге работать с созданной обработкой, если честно, было одно удовольствие. А учитывая сферу продаж данного клиента, всем особенно понравился процесс тестирования обработки. Конечный результат вы можете видеть на скрине ниже:

Frame 1 (58).png

По сути мы заменили заводское устройство на обычный сканер ШК с программной доработкой. Такая замена заводским «железякам» в принципе оправдана, если есть необходимость в гибко-настраиваемом выводе информации о товарах и визуализации товара. У многих заводских прайс-чекеров очень маленькая диагональ экрана, до 10 дюймов. Они не могут выводить изображения, так как их экраны - одноцветные, а в продажах одежды и обуви изображение товара имеет большое значение, так как покупателю необходимо видеть товар и оценить, как он выглядит на человеке.

С точки зрения финансовых затрат, сильной экономии не выйдет, так как данная обработка, помимо ее собственной стоимости, имеет дополнительные затраты в виде компьютера, сканера и лицензии 1С. По сумме наш аналог не уступает стоимости готового заводского прайс-чекера с софтом.

Однако при равной цене неоспоримыми преимуществами нашей разработки являются: гибкость в сферах применения (любая отрасль) и полнота вывода информации, можно вывести абсолютно любую информацию, которая есть в базе 1С).

Будьте успешны вместе с нами!


Заказать консультацию специалиста 1С
Оставьте заявку и наши эксперты проконсультируют вас по данной статье.
Отправить заявку

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

Рассказать друзьям
Для разработчиков 1С
Вам может быть интересно: