В процессе сопровождения конфигурации 1С:Управление торговлей 10.3 (на обычных формах) администраторы и разработчики часто сталкиваются с ситуацией, когда в магазине используется множество сетевых весов с печатью этикеток. Если весы перемещаются между отделами или если нескольким пользователям требуется осуществлять загрузку товаров, ручная настройка параметров подключения (IP-адрес, порт, модель драйвера) для каждого сотрудника отнимает много времени и приводит к ошибкам. Рассмотрим, как устроено хранение параметров торгового оборудования в системе и как автоматизировать их копирование и централизовать процесс загрузки данных.
В типовой подсистеме торгового оборудования конфигурации УТ 10.3 параметры подключения устройств (IP-адрес, сетевой порт, таймаут, протокол обмена) сериализуются в структуру и записываются в реквизит с типом ХранилищеЗначений (как правило, это реквизит ПараметрыКлиента или Параметры в справочнике ТорговоеОборудование).
Поскольку параметры хранятся в бинарном виде, скопировать их вручную через стандартный интерфейс невозможно. Однако мы можем программно прочитать значение из хранилища одного элемента справочника и перенести его в другой элемент или для другого рабочего места.
Разберем пример кода внешней обработки, выполняющей перенос параметров между устройствами:
// Получаем объект-источник и объект-приемник
ОбъектИсточник = СсылкаНаОборудованиеИсточник.ПолучитьОбъект();
ОбъектПриемник = СсылкаНаОборудованиеПриемник.ПолучитьОбъект();
// Извлекаем структуру параметров из хранилища значений
СтруктураПараметров = ОбъектИсточник.ПараметрыКлиента.Получить();
Если ТипЗнч(СтруктураПараметров) = Тип("Структура") Тогда
// Записываем структуру параметров в объект-приемник
ОбъектПриемник.ПараметрыКлиента = Новый ХранилищеЗначений(СтруктураПараметров);
ОбъектПриемник.Записать();
Сообщить("Настройки оборудования успешно скопированы!");
Иначе
Сообщить("Не удалось прочитать параметры из источника.");
КонецЕсли;
По умолчанию типовая подсистема торгового оборудования фильтрует список устройств по имени текущего компьютера (ИмяКомпьютера()) или пользователю. Для локальных устройств (сканеры штрихкодов, фискальные регистраторы на COM-портах) это оправдано, но для сетевых весов с печатью этикеток такая привязка создает лишние сложности.
Чтобы предоставить всем пользователям единый список весов, выполним следующие шаги:
ЭлектронныеВесы или ВесыСПечатьюЭтикеток отключим проверку имени компьютера, сделав эти элементы общими для всей информационной базы.Прямая выгрузка весового товара множеством пользователей с разных компьютеров приводит к конфликтам: драйверы весов монопольно захватывают сетевой порт (сокет). Если два сотрудника одновременно отправляют данные на один и тот же IP-адрес, второй сеанс завершится ошибкой таймаута без внятного описания причины.
Оптимальное архитектурное решение — вынести загрузку весов на сервер или в единый терминальный сеанс (RDP):
При активном перемещении весов между отделами и магазинами часто возникают сопутствующие проблемы: