Автоматизация складской логистики на базе платформы 1С 7.7 остается актуальной задачей, особенно когда требуется интегрировать терминалы сбора данных (ТСД) для контроля отгрузок и проведения документов. Одной из главных сложностей здесь выступает организация процесса разработки в удаленном режиме, когда у программиста нет физического доступа к оборудованию. Разберем подробно, как выстроить архитектуру такой системы, какие методы кодирования выбрать и как отладить код без наличия ТСД под рукой.
В начале пути часто возникает соблазн зашифровать в штрихкоде (ШК) максимум информации: код контрагента, сумму, дату и даже перечень номенклатуры. Проанализируем этот подход. Линейные штрихкоды (например, Code 128 или EAN-13) имеют жесткие ограничения по количеству символов. Попытка уместить в них состав документа приведет к созданию сверхдлинного кода, который будет крайне плохо считываться обычными сканерами.
Рассмотрим более надежный вариант — кодирование только уникального идентификатора документа. В 1С 7.7 это может быть сочетание вида документа, его номера и даты, либо внутренний идентификатор ID. Процесс должен выглядеть следующим образом:
Если же бизнес-задача требует обязательного наличия всех данных внутри ШК (например, для работы в режиме «офлайн»), необходимо использовать 2D-коды (QR-код или DataMatrix). Для их формирования в 1С 7.7 потребуются внешние компоненты, такие как Barcode.ocx или специализированные шрифты.
Многие разработчики задаются вопросом: как проверить работоспособность кода, если ТСД находится на складе у заказчика? Выясним основные способы симуляции процесса сканирования.
Во-первых, ТСД в большинстве случаев работает либо в режиме эмуляции клавиатуры, либо через COM-порт. Для отладки логики поиска документа нам достаточно создать обычное текстовое поле на форме обработки. Мы можем вручную вводить или копировать туда значение ШК и имитировать нажатие клавиши Enter. Если запрограммировать суффикс CR (перенос каретки), то поведение системы будет идентично работе реального сканера.
Во-вторых, рассмотрим ситуацию работы через удаленный рабочий стол (RDP). В этом режиме сканер, подключенный к локальному компьютеру, может «пробрасывать» данные в терминальную сессию. Для программиста это означает, что никакой разницы между сканером и клавиатурным вводом в текстовое поле ШтрихКодВвод не будет.
Профессиональный подход подразумевает использование драйвера сканера штрихкодов, который инициирует в 1С процедуру ОбработкаВнешнегоСобытия. Это позволяет считывать ШК в любой момент времени, независимо от того, в каком поле стоит курсор. Разберем пример кода для интеграции:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Перем ТекДок;
Если Событие = "BarCodeValue" Тогда
// Получаем считанный код
СчитанныйШК = СокрЛП(Данные);
// Алгоритм поиска документа по ШК
ТекДок = СоздатьОбъект("Документ.Реализация");
Если ТекДок.НайтиПоНомеру(СчитанныйШК, РабочаяДата()) = 1 Тогда
// Если документ найден, выполняем его перепроведение
Если ТекДок.Проведен() = 0 Тогда
ТекДок.Провести();
Сообщить("Документ " + ТекДок.НомерДок + " успешно проведен");
КонецЕсли;
Иначе
Предупреждение("Документ с таким ШК не найден!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Если же драйверов на сервере нет, мы можем использовать обходной путь через текстовое поле с обработкой нажатия клавиши. Это надежный метод для удаленной работы, так как он не зависит от настроек портов на сервере.
Часто задача стоит шире: не просто найти документ, а трансформировать «Заявку на склад» в «Реализацию» с учетом фактической сборки. Проанализируем сценарий, когда кладовщик сканирует товар по факту. В этом случае нам необходимо предусмотреть механизм сравнения плановых и фактических данных.
Рекомендуется использовать временную таблицу или промежуточный документ «Сборочный лист». При сканировании позиций программа должна проверять:
Для автоматического создания Реализации на основании Заявки используем следующий программный паттерн:
// Создание реализации на основании отсканированных данных
ДокРеал = СоздатьОбъект("Документ.Реализация");
ДокРеал.Новый();
ДокРеал.НазначитьФорму("ФормаДокумента");
ДокРеал.Заполнить(ДокЗаявка); // Копируем шапку и состав из основания
// Проходим по табличной части и корректируем количество
ДокРеал.ВыбратьСтроки();
Пока ДокРеал.ПолучитьСтроку() = 1 Цикл
// Здесь логика замены количества на фактически собранное через ТСД
ДокРеал.Количество = ПолучитьФактИзТСД(ДокРеал.Номенклатура);
КонецЦикла;
ДокРеал.Записать();
Если ДокРеал.Провести() = 0 Тогда
Сообщить("Ошибка проведения реализации!");
КонецЕсли;
Важный нюанс, упомянутый в обсуждении: права доступа. Кладовщик часто не имеет прав на проведение финансовых документов. Чтобы обойти это ограничение, в 1С 7.7 можно использовать запуск процесса под системным пользователем или механизм «отложенного проведения».
Важно: При программном перепроведении документов в конце дня следует учитывать последовательность. Если за день было много перемещений товаров, простое перепроведение документов «задним числом» может привести к отрицательным остаткам. Рассмотрим вариант использования обработки, которая выстраивает документы в хронологическом порядке и проводит их один за другим, контролируя результат выполнения функции Провести().
Подводя итог, можно сказать, что удаленная разработка для ТСД в среде 1С 7.7 вполне реальна. Основные шаги, которые мы разобрали:
Enter для эмуляции сканера при отладке.ID документа.ОбработкиВнешнегоСобытия для полноценной интеграции с оборудованием в будущем.Такой системный подход позволит создать стабильное решение даже без наличия физического терминала на столе у разработчика.