Не записывается документ 1С в онлайн-режиме
Описание проблемы
В процессе работы в режиме онлайн может возникнуть ситуация, при которой документ Mobile SMARTS не удаётся сохранить и/или провести в информационной базе 1С.
На экране мобильного устройства при этом появляется сообщение с предложением загрузить документ вручную через обработку обмена.
Существует два возможных сценария возникновения данной ситуации:
- Документ сохраняется, но не проводится в ручном режиме (причина — логика конфигурации).
- Документ сохраняется и проводится вручную без ошибок (причина — технологическая особенность).
Далее рассмотрим второй случай, поскольку в первом 1С, как правило, сообщает о причине невозможности проведения, и её можно определить на основании текущих настроек учёта.
Общие сведения
Mobile SMARTS взаимодействует с 1С через механизм внешнего соединения с использованием COM-коннектора (V8.COMConnector).
Из-за ряда ограничений внешнего соединения могут возникать ситуации, при которых действия, выполнимые в интерактивном режиме, становятся недоступными при работе через этот канал.
Все обращения к базе 1С происходят посредством вызовов методов и свойств объектов метаданных, без прямого доступа к СУБД.
Для выполнения отдельных операций используется вызов общих модулей конфигурации. Эти модули, как правило, доступны во внешнем соединении.
Однако возможны косвенные вызовы, например, через подписки на события в 1С. В этих случаях может быть задействован модуль, недоступный извне, или функции работают иначе в режиме внешнего соединения по сравнению с запуском в интерфейсе.
Результат — непредвиденное поведение: документ не записывается или не проводится.
В большинстве поддерживаемых типовых конфигураций бизнес-процес сы Mobile SMARTS заранее адаптированы под работу через внешнее соединение. Исключения возможны, но обычно оперативно исправляются в новых версиях.
Если же в 1С используются доработки или подключены расширения, возможно, что часть объектов становится недоступной извне, что и вызывает ошибку при записи документа в онлайн-режиме. При этом сам документ сохраняется на сервере Mobile SMARTS.
Поскольку ошибка сопровождается цепочкой исключений, на ТСД отображается лишь общее сообщение о неудаче, без конкретных подробностей.
Некоторые рекомендации по устранению проблемы
Как видно из описания, единое решение проблемы на стороне Mobile SMARTS отсутствует: причина кроется в логике конкретной конфигурации 1С. Система просто вызывает метод «Записать» у документа, а в ответ получает исключение.
Иногда ситуацию можно исправить, отключив автоматическое проведение документа в настройках бизнес-процесса. При простой записи нагрузка на конфигурацию ниже, и, возможно, ошибка не произойдёт.
В таком случае документы потребуется проводить вручную или с помощью регламентного задания.
Чаще всего проблему можно решить только внесением изменений в конфигурацию 1С — как в основную, так и в расширения.
Важно! Внесение изменений в объекты основной конфигурации требует минимальных навыков разработки.
Общий порядок устранения ошибки
- Определить объекты конфигурации, недоступные во внешнем соединении, и включить соответствующую опцию.
- Найти процедуры и функции, ведущие себя по-разному в различных режимах, и адаптировать их (напрямую или через расширение).
После внесения изменений необходимо перезапустить службу сервера Mobile SMARTS с помощью панели управления — COM-коннектор применяется именно там.
Для общих модулей достаточно установить флаг «Внешнее соединение». При этом важно не сбросить другие флаги, чтобы не нарушить текущую бизнес-логику.
Если модуль относится к основной конфигурации, следует включить возможность редактирования и выбрать режим «Редактируется с сохранением поддержки». Иногда потребуется снять конфигурацию с поддержки — это действие должно быть обдуманным.
На изображении показаны примеры модулей, их доступность менять не обязательно — они даны для наглядности.
Поиск причин сбоя
Начать следует с анализа журнала регистрации по событиям, связанным с «КлеверенсТСД». В стан дартных конфигурациях нужный пункт можно найти через меню «Сервис» или «Все функции».
Обычно сообщение об ошибке содержит имя модуля или процедуры, вызвавших исключение. Например, сообщение «Попытка передачи с клиента на сервер мутабельного значения» указывает на недоступность объекта во внешнем соединении.
Если конфигурация модифицирована или содержит расширения, проверьте новые модули: наличие флага «Сервер» при отсутствии «Внешнего соединения» часто свидетельствует о потенциальной причине сбоя.
В случае доступа к режиму отладки — можно точно локализовать место ошибки.
Откройте в конфигураторе обработку, указанную в настройках соединения в панели управления Mobile SMARTS:
Подключитесь к COM-процессу Mobile SMARTS:
При завершении документа на ТСД вызывается функция модуля объекта обработки:
ДокументЗавершен(…)
Непосредственно запись готового документа в базу 1С происходит в функции
ГлЯдро_ЗаписатьИПровестиДокумент1С().
Завершенный на ТСД документ в случае невозможности записи в 1С остается на сервере Mobile SMARTS, поэтому для повторной записи не нужно заново заполнять данные на ТСД, достаточно открыть и снова завершить документ Mobile SMARTS.
Завершенный документ по умолчанию не виден на ТСД, но его видимость можно включить через панель конфигурации MS, либо в разделе «Документы» снять флаг «Завершен» для нужного документа.
Методика отладки стандартная.
Если нужно, поставьте точку останова в начало функции
ДокументЗавершен(..,)
Но можно сразу в функции
ГлЯдро_ЗаписатьИПровестиДокумент1С()
, на строках вида:
ДокументДляЗаписи.Записать(РежимЗаписиДокумента.Проведение
и на строках в блоках исключение, после строки
ОписаниеОшибки = ОписаниеОшибки();
Это позволи т отследить ошибку до её возникновения.
Выполните строку записи с помощью F10, при исключении отладчик перейдёт в блок «Исключение».
Изучите переменную ОписаниеОшибки.
Если этого недостаточно, шаг за шагом (F11) проходите по всем вызовам до выявления источника проблемы.
Важно не просто изменить один модуль, а оценить все взаимосвязи и адаптировать все связанные объекты.
Частные случаи
«Управление торговлей 11.4», «ERP», «Комплексная автоматизация»
Доработка конфигурации не требуется, но возможны сторонние расширения, вызывающие ошибки.
В версии 13.51 в модуле «РазборКодаМаркировкиИССлужебныйВызовСервера» необходимо вручную установить флаг «внешнее соединение».
Синхронизация с Битрикс24
В конфигурации появляются объекты с префиксами «СинхронизацияСБитрикс24_», «Б24_», у которых обычно не установлен флаг внешнего соединения. Добавьте его ко всем объектам с флагом «Сервер».
CRM-модули
Аналогично — модули с префиксом «CRM_» часто вызывают ошибки, если флаг «внешнее соединение» отсутствует.
Иногда корректный на вид код не работает, если сбрасывается ПривилегированныйРежим.
Пример из «Комплексной автоматизации»: модуль регистра сведений «РеестрДокументов»:
Процедура ПередЗаписью(Отказ, Замещение)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не ПривилегированныйРежим() Тогда
Отказ = Истина;
КонецЕсли;
В новых релизах логика изменена. При невозможности обновления конфигурации, можно вынести процедуру в расширение.
УНФ 1.6
В типовой конфигурации 1С:УНФ версии 1.6 установите флаг «внешнее соединение», если он не установлен, для следующих модулей:
- УправлениеНебольшойФирмойСобытия
- УправлениеНебольшойФирмойСобытияПереопределяемый
- РаботаСНоменклатуройКлиентСервер
- РаботаСФормойДокумента
- ОбменМобильноеПриложениеОбщее
