Интеграция терминалов сбора данных (ТСД) с современными конфигурациями 1С, такими как Управление торговлей 11 или 1С:УТАП, часто сталкивается с техническими сложностями, связанными с использованием COM-соединений и промежуточных баз данных. Рассмотрим подробно, почему возникают ошибки «мутабельного значения», насколько оправдана архитектура с «базой-прослойкой» и как привести систему в рабочее состояние.
В старых решениях (например, в «ПРОФ драйвере ТСД» версии 3.0 от Клеверенс) часто применялась схема, где ТСД обменивается данными с отдельной файловой базой 1С, которая, в свою очередь, подключается к основной рабочей базе через COM-соединение. Проанализируем, почему это решение было популярным и какие проблемы оно несет сегодня:
УТ 11 не нагружается постоянными мелкими запросами от множества ТСД.Однако в современных реалиях клиент-серверных баз эта схема становится узким местом, вызывая задержки и ошибки блокировок. Рассмотрим подробнее способы решения возникающих проблем.
Выясним причину этой ошибки. Она возникает при использовании COMConnector, когда программный код пытается передать между контекстами (базами) объект, который может изменяться. К мутабельным значениям в 1С относятся: ДокументОбъект, СправочникОбъект, ТаблицаЗначений, ПостроительОтчета и другие.
Разберем по шагам, почему это происходит при интеграции ТСД:
УТ 11.Решение проблемы: необходимо переписать обработку обмена так, чтобы передавались только простые типы данных или ссылки. Посмотрим на пример правильной передачи данных:
// Плохо: передача всего объекта через COM
Процедура ЗаписатьДокументВОсновнойБазе(ComОбъектДокумент)
ComОбъектДокумент.Записать();
КонецПроцедуры
// Хорошо: передача структуры с простыми данными
Процедура ЗаписатьДокументПравильно(СтруктураДанных)
// В контексте основной базы ищем ссылку или создаем новый объект
НовыйДок = Документы.ПриобретениеТоваровУслуг.СоздатьДокумент();
// Заполняем реквизиты из простых типов структуры
НовыйДок.Дата = СтруктураДанных.Дата;
НовыйДок.Контрагент = Справочники.Контрагенты.НайтиПоКоду(СтруктураДанных.КодКонтрагента);
НовыйДок.Записать();
КонецПроцедуры
Проанализируем также настройки общих модулей в УТ 11. Если процедура, вызываемая через COM, находится в модуле, где установлены флаги «Вызов сервера» и «Клиент», это может провоцировать проверку мутабельности. Для COM-соединения оптимально использовать модули с флагами «Сервер» и «Внешнее соединение».
Если при работе ТСД возникает ошибка прав, хотя у пользователя терминала они есть, причину стоит искать в параметрах подключения. Разберем ситуацию:
При использовании V83.COMConnector соединение устанавливается от имени конкретного пользователя 1С. Если в коде промежуточной базы жестко прописаны учетные данные «Администратора» с ограниченными правами в основной базе или если в УТАП (алкогольной конфигурации) срабатывают дополнительные подсистемы проверки (например, проверка акцизных марок), для которых требуются специфические роли, запись будет отклонена.
Проверьте следующие моменты:
ИнтеграцияСВнешнимиСистемами или полные права для тестирования.Рассмотрим более радикальный, но правильный путь. Компания Клеверенс давно отошла от обязательного использования промежуточных баз 1С. В продуктах линейки «Магазин 15» или «Склад 15» используется архитектура Сервер Mobile SMARTS.
Преимущества новой схемы:
УТ 11 или УТАП происходит через механизм расширений. Это позволяет не менять основную конфигурацию, сохраняя её на поддержке.Если вы столкнулись с тем, что внедренцы не могут настроить старый драйвер, предложим руководству рассмотреть обновление ПО до актуальной версии Mobile SMARTS. Это исключит большинство ошибок, связанных с несоответствием файлового и клиент-серверного режимов работы.
Подводя итог, проанализируем основные выводы для исправления ситуации:
V83.COMConnector вместо V83.Application, так как коннектор работает быстрее и потребляет меньше ресурсов.Соблюдение этих правил позволит создать стабильную систему автоматизации склада, которая не будет давать сбоев при каждом обновлении конфигурации 1С.