При организации автоматизированного сбора товаров на складе, когда требуется сканировать штрихкоды документов и товаров, а затем видеть эти данные в 1С (например, 1С:Комплексная автоматизация 2.4), возникают вопросы по интеграции беспроводных сканеров и мобильных терминалов сбора данных (ТСД). Особенно актуально это становится, если работа с 1С ведется через RDP (Remote Desktop Protocol) или рассматриваются мобильные приложения на платформах Android или Windows CE. Давайте вместе разберем различные подходы и решения для этой задачи. Для тех, кто находится на этапе перехода на новую версию программы, доступен раздел с решениями для переноса данных в 1С:Комплексную автоматизацию из других конфигураций.
Начнем с анализа доступных вариантов, охватывающих как устаревшее, так и современное оборудование, а также различные методы подключения к 1С.
Если у вас есть старый терминал сбора данных, такой как Zebra MC2180 с операционной системой Windows CE, вы можете попытаться интегрировать его с 1С, работающей через RDP. Рассмотрим, как это можно сделать:
Однако, важно учитывать, что этот подход имеет ряд ограничений:
Современные мобильные устройства, такие как планшеты или ТСД на базе Android, предлагают значительно больше гибкости и производительности. Мы можем использовать их для работы с 1С через RDP.
«Удаленный рабочий стол Microsoft» (Microsoft Remote Desktop)
доступно в Google Play Store. Это приложение позволяет подключиться к серверу 1С.Один из вопросов, который часто возникает при работе с RDP на мобильных устройствах, — это разрешение экрана и отображение интерфейса 1С. Действительно, разрешение мобильного устройства может отличаться от разрешения рабочего стола. Вот как мы можем с этим справиться:
Хотя создание отдельных форм для RDP может показаться «хреновым вариантом» из-за дополнительной работы, оно значительно улучшает пользовательский опыт и делает работу с 1С на маленьком экране ТСД гораздо более эффективной, особенно когда нужно подготовить упаковочный лист из документа Реализация товаров и услуг. При подготовке тестовых контуров или очистке баз перед внедрением мобильных рабочих мест применяется обработка для выборочного удаления организаций.
Вместо того чтобы запускать полную версию 1С через RDP, мы можем использовать мобильную платформу 1С для создания специализированных приложений под Android. Этот подход обеспечивает наилучшую производительность и пользовательский опыт на мобильных устройствах. При самостоятельной разработке такого решения можно использовать руководство по настройке взаимодействия мобильного клиента с базой 1С через HTTP-сервисы.
Когда вы скачали на Android приложение 1С:КА, вы, вероятно, скачали мобильный клиент, который требует подключения к опубликованной базе 1С. Для того чтобы "расшарить" 1С для ТСД, вам нужно выполнить следующие шаги:
Для более комплексных решений по автоматизации складских операций часто используются специализированные платформы, такие как Cleverence Mobile SMARTS. Этот подход значительно упрощает разработку и внедрение.
При выборе нового оборудования для решения нашей задачи, следует обратить внимание на следующие моменты:
Пример работы с кодом 1С для получения сканированного значения, если сканер работает как клавиатурное устройство, будет выглядеть следующим образом:
В управляемой форме 1С вы можете использовать событие ОбработкаВвода для поля ввода, или же глобальный обработчик для всей формы. Если сканер настроен через стандартный драйвер 1С, то обычно достаточно просто установить курсор в нужное поле и сканировать. 1С сама подхватит данные.
// Пример обработчика события для поля ввода (например, ПолеВводаШК)
&НаКлиенте
Процедура ПолеВводаШКНачалоВыбора(Элемент, СтандартнаяОбработка)
// Отключаем стандартную обработку, чтобы не открывалось окно выбора
СтандартнаяОбработка = Ложь;
// В данном случае, сканер работает как клавиатура,
// и значение уже будет в ПолеВводаШК.
// Если нам нужно вызвать какую-то команду после ввода ШК,
// это можно сделать в событии ПриИзменении
КонецПроцедуры
&НаКлиенте
Процедура ПолеВводаШКПриИзменении(Элемент)
// После сканирования штрихкода (или ручного ввода)
// значение ШК попадает в ПолеВводаШК.
// Здесь мы можем обработать его:
Штрихкод = Элементы.ПолеВводаШК.Значение;
Если ЗначениеЗаполнено(Штрихкод) Тогда
// Выполняем поиск товара по Штрихкоду
// и обновляем данные о собранном/остатке
НайтиИОбработатьТоварПоШК(Штрихкод);
Элементы.ПолеВводаШК.Значение = ""; // Очищаем поле для следующего сканирования
КонецЕсли;
КонецПроцедуры
// Функция на сервере, которая будет искать товар и обновлять данные
&НаСервере
Процедура НайтиИОбработатьТоварПоШК(Штрихкод)
// Здесь реализуется логика поиска товара в базе 1С по ШК,
// обновление табличной части "СобранныеТовары",
// расчет "ОсталосьСобрать" и т.д.
// Пример:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Номенклатура.Ссылка КАК Номенклатура,
| ХарактеристикиНоменклатуры.Ссылка КАК Характеристика,
| СерииНоменклатуры.Ссылка КАК Серия
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
| ПО Штрихкоды.Владелец = Номенклатура.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
| ПО Штрихкоды.Характеристика = ХарактеристикиНоменклатуры.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры
| ПО Штрихкоды.Серия = СерииНоменклатуры.Ссылка
|ГДЕ
| Штрихкоды.Штрихкод = &Штрихкод";
Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
// Найден товар. Обновляем данные на форме.
// Например, добавляем строку в табличную часть "ТоварыКСборке"
// или увеличиваем количество в существующей строке.
// Предположим, у нас есть коллекция для собранных товаров
// и мы обновляем ее, а затем пересчитываем остатки
// Например, если на форме есть таблица "ТоварыДляСборки"
// и мы ищем в ней строку по найденной номенклатуре.
НайденнаяСтрока = Неопределено;
Для Каждого СтрокаТЧ Из Объект.ТоварыДляСборки Цикл
Если СтрокаТЧ.Номенклатура = Выборка.Номенклатура Тогда
НайденнаяСтрока = СтрокаТЧ;
Прервать;
КонецЕсли;
КонецЦикла;
Если НайденнаяСтрока <> Неопределено Тогда
НайденнаяСтрока.КоличествоСобрано = НайденнаяСтрока.КоличествоСобрано + 1;
// Пересчет поля "Осталось"
НайденнаяСтрока.ОсталосьСобрать = НайденнаяСтрока.Количество - НайденнаяСтрока.КоличествоСобрано;
Иначе
// Добавляем новую строку, если товар еще не был в списке для сборки
НоваяСтрока = Объект.ТоварыДляСборки.Добавить();
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
// Другие поля...
НоваяСтрока.КоличествоСобрано = 1;
НоваяСтрока.Количество = 1; // Предположим, что надо собрать 1, если ШК сканируется впервые
НоваяСтрока.ОсталосьСобрать = 0;
КонецЕсли;
// Оповестить пользователя об успешном сканировании
Сообщить("Штрихкод " + Штрихкод + " обработан. Товар: " + Выборка.Номенклатура);
Иначе
Сообщить("Штрихкод " + Штрихкод + " не найден.", СтатусСообщения.Важное);
КонецЕсли;
КонецПроцедуры
Для мобильной платформы 1С механизм работы со сканером еще более интегрирован:
// Пример обработчика для мобильной платформы 1С
&НаКлиенте
Процедура ОтсканироватьШтрихкод(Команда)
// Создаем объект для работы со сканером
Сканер = Новый МобильноеУстройство.СканерШтрихкода();
// Настраиваем параметры сканирования (опционально)
// Сканер.РежимРаботы = РежимРаботыСканераШтрихкода.ПостоянноеСканирование;
// Вызываем сканирование
РезультатСканирования = Сканер.НачатьСканирование();
Если РезультатСканирования <> Неопределено Тогда
// Получаем отсканированный штрихкод
Штрихкод = РезультатСканирования.Значение;
// Здесь вызываем серверную процедуру для обработки ШК
ОбработатьШтрихкодНаСервере(Штрихкод);
Иначе
ПоказатьОповещениеПользователя("Сканирование отменено или произошла ошибка.");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьШтрихкодНаСервере(Штрихкод)
// Аналогичная логика обработки, как в примере выше,
// но вызывается из мобильного клиента.
//... (логика поиска и обновления данных)
// Не забудьте обновить данные на клиенте после обработки на сервере
ОповеститьКлиента("ОбновитьДанныеФормы");
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьДанныеФормы" Тогда
// Обновляем элементы формы на клиенте
ОбновитьОтображениеДанных();
КонецЕсли;
КонецПроцедуры
Таким образом, мы видим, что существует множество подходов к интеграции беспроводных сканеров и ТСД с 1С, каждый из которых имеет свои преимущества и недостатки. Выбор конкретного решения будет зависеть от имеющегося оборудования, требований к функционалу, бюджета и квалификации команды.
Внимательно проанализируйте ваши потребности и ресурсы, чтобы выбрать наиболее подходящий вариант. Мы всегда готовы помочь вам в этом процессе!