Как устранить ошибку «Передача мутабельного значения» и оптимизировать работу ТСД с 1С:УТ 11 через Клеверенс?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Интеграция терминалов сбора данных (ТСД) с современными конфигурациями 1С, такими как Управление торговлей 11 или 1С:УТАП, часто сталкивается с техническими сложностями, связанными с использованием COM-соединений и промежуточных баз данных. Рассмотрим подробно, почему возникают ошибки «мутабельного значения», насколько оправдана архитектура с «базой-прослойкой» и как привести систему в рабочее состояние.

Анализ архитектуры: Зачем нужна промежуточная база ТСД?

В старых решениях (например, в «ПРОФ драйвере ТСД» версии 3.0 от Клеверенс) часто применялась схема, где ТСД обменивается данными с отдельной файловой базой 1С, которая, в свою очередь, подключается к основной рабочей базе через COM-соединение. Проанализируем, почему это решение было популярным и какие проблемы оно несет сегодня:

Однако в современных реалиях клиент-серверных баз эта схема становится узким местом, вызывая задержки и ошибки блокировок. Рассмотрим подробнее способы решения возникающих проблем.

Устранение ошибки «Попытка передачи с клиента на сервер мутабельного значения»

Выясним причину этой ошибки. Она возникает при использовании COMConnector, когда программный код пытается передать между контекстами (базами) объект, который может изменяться. К мутабельным значениям в 1С относятся: ДокументОбъект, СправочникОбъект, ТаблицаЗначений, ПостроительОтчета и другие.

Разберем по шагам, почему это происходит при интеграции ТСД:

  1. В промежуточной базе создается структура данных или объект документа.
  2. Через COM-соединение вызывается процедура в основной базе УТ 11.
  3. Если в параметрах этой процедуры передается сам Объект (а не его ссылка), 1С выдает ошибку, так как не может передать состояние объекта через границу контекста.

Решение проблемы: необходимо переписать обработку обмена так, чтобы передавались только простые типы данных или ссылки. Посмотрим на пример правильной передачи данных:


// Плохо: передача всего объекта через COM
Процедура ЗаписатьДокументВОсновнойБазе(ComОбъектДокумент)
    ComОбъектДокумент.Записать(); 
КонецПроцедуры

// Хорошо: передача структуры с простыми данными
Процедура ЗаписатьДокументПравильно(СтруктураДанных)
    // В контексте основной базы ищем ссылку или создаем новый объект
    НовыйДок = Документы.ПриобретениеТоваровУслуг.СоздатьДокумент();
    // Заполняем реквизиты из простых типов структуры
    НовыйДок.Дата = СтруктураДанных.Дата;
    НовыйДок.Контрагент = Справочники.Контрагенты.НайтиПоКоду(СтруктураДанных.КодКонтрагента);
    НовыйДок.Записать();
КонецПроцедуры

Проанализируем также настройки общих модулей в УТ 11. Если процедура, вызываемая через COM, находится в модуле, где установлены флаги «Вызов сервера» и «Клиент», это может провоцировать проверку мутабельности. Для COM-соединения оптимально использовать модули с флагами «Сервер» и «Внешнее соединение».

Проблема «Не хватает прав на запись документа» через COM

Если при работе ТСД возникает ошибка прав, хотя у пользователя терминала они есть, причину стоит искать в параметрах подключения. Разберем ситуацию:

При использовании V83.COMConnector соединение устанавливается от имени конкретного пользователя 1С. Если в коде промежуточной базы жестко прописаны учетные данные «Администратора» с ограниченными правами в основной базе или если в УТАП (алкогольной конфигурации) срабатывают дополнительные подсистемы проверки (например, проверка акцизных марок), для которых требуются специфические роли, запись будет отклонена.

Проверьте следующие моменты:

  1. Под каким пользователем устанавливается COM-соединение (проверьте настройки драйвера Клеверенс).
  2. Добавьте этому пользователю роли ИнтеграцияСВнешнимиСистемами или полные права для тестирования.
  3. Убедитесь, что в основной базе не срабатывают интерактивные проверки (диалоговые окна), которые в режиме COM-соединения всегда возвращают ошибку «Использование модальных окон запрещено» или приводят к сбою прав.

Переход на современную архитектуру Mobile SMARTS

Рассмотрим более радикальный, но правильный путь. Компания Клеверенс давно отошла от обязательного использования промежуточных баз 1С. В продуктах линейки «Магазин 15» или «Склад 15» используется архитектура Сервер Mobile SMARTS.

Преимущества новой схемы:

Если вы столкнулись с тем, что внедренцы не могут настроить старый драйвер, предложим руководству рассмотреть обновление ПО до актуальной версии Mobile SMARTS. Это исключит большинство ошибок, связанных с несоответствием файлового и клиент-серверного режимов работы.

Итоги и рекомендации

Подводя итог, проанализируем основные выводы для исправления ситуации:

  1. Проверьте тип соединения: Используйте V83.COMConnector вместо V83.Application, так как коннектор работает быстрее и потребляет меньше ресурсов.
  2. Очистите параметры: При передаче данных в основную базу очищайте структуры от любых объектов (таблиц значений, ссылок на неопределенные типы). Передавайте только строки, числа и даты.
  3. Тестируйте на копии: Ошибки мутабельности часто не видны на файловых копиях. Всегда проводите отладку на клиент-серверном экземпляре базы, идентичном рабочему.
  4. Используйте RDP как альтернативу: Если бюджет ограничен, а интеграция через COM безнадежно «сыпется», рассмотрите вариант работы ТСД через удаленный рабочий стол (RDP) с использованием специально разработанных под экран терминала управляемых форм 1С.

Соблюдение этих правил позволит создать стабильную систему автоматизации склада, которая не будет давать сбоев при каждом обновлении конфигурации 1С.

← На главную