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