1С и китайский ТСД
2023-08-22
Современные, да и не очень современные фирменные терминалы сбора данных типа Атол, Скансити - стоят совершенно неадекватных денег(даже БУ). Тем более в некоторых моделях нужно покупать дополнительно лицензии для ПО, или лицензии для драйвера, вобщем производители совсем обнаглели.
Но кроме таких существуют недорогие, простые и беспроблемные китайские ТСД, выпускаемые в поднебесной. Единственная проблема использования таких ТСД на предприятии - нет интеграции с 1с. В этой статье я предложу решение, которое уже используется нами более 5 лет.
Изначально расширение писалось для 1С:Управление торговлей, сейчас же работает на 1C:Комплексная автоматизация и 1C:Розница.
В этих конфигурациях 1С есть встроенная обработка "Загрузка товаров из внешних файлов", она позволяет импортировать данные, например из excel сопоставляя их с номенклатурой из базы 1С. Именно через эту обработку и будет происходить выгрузка ТСД в 1С.
По-умолчанию, нужно ввести данные штрихкода или наименования, или артикула, или кода, и количество также можно указать цену, НДС, и прочее ненужное для наших целей. По-хорошему нам нужны только два поля Штрихкод и Количество.
Поэтому перерабатываем макет следующим образом.
Теперь для удобства работника, сделаем так, чтобы курсор устанавливался в первую ячейку ввода штрихкода. Для этого нужно при открытии формы вызвать процедуру:
Элементы.ТабличныйДокумент.ТекущаяОбласть = ЭтаФорма.ТабличныйДокумент.Область("R2C1"); Shell = Новый COMОбъект("WScript.Shell"); Shell.SendKeys("{ENTER}");
Теперь сразу при открытии обработки можно отправлять данные из китайского ТСД в 1С. Все данные штрихкодов и количества с разделителями будут содержаться в первой ячейке. И нужно просто обработать эту строку таким образом, что бы при нажатии кнопки далее - строка разбилась на столбцы и строки - штрихкоды и количество.
Что касается разделителей, то я настраиваю ТСД на точку с запятой как между штрихкодом и количеством, так и между записями.
А для этого нужно немного изменить код стандартной команды "Далее". Здесь нужно, обработать строку по такому алгоритму - проверяем заполнена ли только первая строка. Это нужно, чтобы строка обработалась только один раз.
Затем если на компьютере русская раскладка, то заменяем символы на правильные.
Потом разделяем строку на массив при помощи СтрРазделить и в цикле загоняем в нужные ячейки.
&НаКлиенте Процедура ТСД_ДалееВместо(Команда) ЗаполненыНоменклатураКодАртикулШтрихкод = ЗначениеЗаполнено(ТабличныйДокумент.Область("R2C1").Текст); Если НЕ ЗначениеЗаполнено(ТабличныйДокумент.Область("R3C1").Текст) Тогда ТабличныйДокумент.Область("R2C1").Текст = СтрЗаменить(НРег(ТабличныйДокумент.Область("R2C1").Текст), "ж", ";"); ТабличныйДокумент.Область("R2C1").Текст = СтрЗаменить(НРег(ТабличныйДокумент.Область("R2C1").Текст), "ю", "."); МассивДанных = СтрРазделить(ТабличныйДокумент.Область("R2C1").Текст,";",ЛОЖЬ); Если МассивДанных.ВГраница()%2=0 Тогда МассивДанных.Добавить(0); КонецЕсли; Стр = 2; Для Индекс = 0 по МассивДанных.ВГраница() Цикл НужнаяОбластьШК = "R"+Строка(Стр)+"C1"; НужнаяОбластьКол = "R"+Строка(Стр)+"C2"; ТабличныйДокумент.Область(НужнаяОбластьШК).Текст = СтрЗаменить(НРег(МассивДанных[Индекс]), "ю", "."); ТабличныйДокумент.Область(НужнаяОбластьШК).Текст = СтрЗаменить(НРег(МассивДанных[Индекс]), "ж", ";"); ТабличныйДокумент.Область(НужнаяОбластьКол).Текст = СтрЗаменить(НРег(МассивДанных[Индекс+1]), "ю", "."); ТабличныйДокумент.Область(НужнаяОбластьКол).Текст = СтрЗаменить(НРег(МассивДанных[Индекс+1]), "ж", ";"); Индекс=Индекс+1; Стр=Стр+1; КонецЦикла; КонецЕсли; Если Не ЗаполненыНоменклатураКодАртикулШтрихкод Тогда ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Необходимо скопировать колонки в таблицу из внешнего файла.'")); Возврат; КонецЕсли; ОчиститьСообщения(); Состояние(НСтр("ru = 'Осуществляется сопоставление введенных данных с данными информационной базы. Пожалуйста подождите...'"),,,БиблиотекаКартинок.Информация32); СопоставитьДанныеТабличногоДокументаСДаннымиИБ(); Элементы.Шаги.ТекущаяСтраница = Элементы.Шаг2; КонецПроцедуры
В итоге, после нажатия кнопки "Далее", на сервер отправится такая таблица:
А после сопоставления, получим результат, который можно сразу перенести в документ. Конечно, это не тоже самое что нажать кнопку "загрузить из ТСД", но тем не менее гораздо лучше чем как-то через excel или другую программу подготавливать данные.
Кроме того, это расширение конфигурации расширяет возможности стандартной обработки, позволяя загружать данные в "Печать этикеток и ценников" и "Пересчет товаров".
Конечно, в статье не описаны все особенности работы расширения 1С для работы с китайскими ТСД. Вы можете скачать его и без проблем ознакомиться с его кодом и работой самостоятельно.