Как вручную зарегистрировать документы к обмену в мобильном приложении 1С, если сбилась синхронизация?

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

При работе с распределенными базами данных и мобильными приложениями 1С администраторы и разработчики иногда сталкиваются с аварийными ситуациями. Представим сценарий: в результате вирусной атаки или технического сбоя центральная база данных была восстановлена из резервной копии недельной давности. Бухгалтеры и операторы вручную перепровели документы в основной базе за утерянный период, однако часть документов, созданных на мобильных устройствах (например, в мобильном приложении для официантов, курьеров или торговых представителей) за период сбоя, не перенеслись в центральную базу.

На стороне мобильного приложения эти документы уже отмечены как отправленные, их повторная автоматическая выгрузка не происходит, а повторное проведение документов на планшете заблокировано из-за статуса «Только для чтения». Разработчик приложения недоступен, а рутировать рабочее устройство крайне нежелательно из-за риска потери данных.

В этой статье мы подробно разберем, как решить эту проблему несколькими профессиональными способами: от выполнения кода на мобильном устройстве через стандартный механизм отладки до извлечения базы данных без прав суперпользователя (Root).

Метод 1. Программная регистрация изменений через встроенный язык 1С

Для того чтобы мобильное приложение снова «захотело» отправить документы в центральную базу, нам необходимо зарегистрировать изменения этих документов на соответствующем узле плана обмена. В платформе 1С для этого используется метод ПланыОбмена.ЗарегистрироватьИзменения().

Посмотрим на пример кода, который решает эту задачу. Нам необходимо отобрать документы определенного типа за нужный период (например, с 1 по 5 октября) и зарегистрировать их для узла обмена, отвечающего за связь с центральным сервером.


// Определяем узел обмена, соответствующий центральной базе (например, "Офис")
УзелОфис = ПланыОбмена.ПланОбменаМобильногоПриложения.НайтиПоКоду("Офис");

Если Не УзелОфис.Пустая() Тогда
    // Создаем запрос для выборки документов за аварийный период
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Ссылка ИЗ Документ.РасходнаяНакладная
        |ГДЕ
        |	Дата МЕЖДУ &НачалоПериода И &КонецПериода";
    
    Запрос.УстановитьПараметр("НачалоПериода", НачалоДня('20231001'));
    Запрос.УстановитьПараметр("КонецПериода", КонецДня('20231005'));
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        // Регистрируем изменения каждого документа для передачи на сервер
        ПланыОбмена.ЗарегистрироватьИзменения(УзелОфис, Выборка.Ссылка);
    КонецЦикла;
    
    Сообщить("Регистрация изменений успешно выполнена!");КонецЕсли;

Этот код должен быть выполнен непосредственно в контексте мобильного приложения на планшете. Но как это сделать, если конфигурация закрыта для изменения, а у нас на руках только скомпилированное приложение на рабочем устройстве?

Метод 2. Выполнение произвольного кода на планшете через режим отладки

Выполнить произвольный код на мобильном устройстве без изменения конфигурации и сборки нового пакета можно с помощью штатного механизма отладки платформы 1С. Разберем этот процесс по шагам:

  1. Подготовка мобильного устройства: В настройках планшета зайдите в раздел «О телефоне»/«О планшете» и несколько раз нажмите на «Номер сборки», пока не активируется «Режим разработчика». Перейдите в меню разработчика и включите параметр «Отладка по USB».
  2. Подключение к компьютеру: Подключите планшет к компьютеру, на котором установлен Конфигуратор 1С с копией конфигурации мобильного приложения (желательно той же версии). При необходимости разрешите отладку на самом планшете во всплывающем окне запроса авторизации ключа ПК.
  3. Настройка отладки в 1С: В Конфигураторе откройте меню Отладка — Подключение.... В открывшемся окне в списке доступных предметов отладки найдите ваше мобильное устройство. Если устройство подключено корректно по USB (или настроено по локальной сети Wi-Fi), оно отобразится в списке. Выберите его и нажмите «Подключить».
  4. Установка точки останова: Найдите любой общий модуль или модуль формы, вызов которого вы можете легко спровоцировать действием на планшете. Например, это может быть процедура ПриОткрытии формы списка любого справочника или документа. Поставьте точку останова (клавиша F9) на первой строке этой процедуры.
  5. Остановка выполнения: Выполните соответствующее действие на планшете (например, откройте справочник номенклатуры). Конфигуратор на ПК перехватит управление, и выполнение программы остановится на вашей точке останова.
  6. Выполнение кода в Табло: Когда выполнение приостановлено, нажмите сочетание клавиш Shift + F9 (Вычислить выражение) или откройте окно Табло. Вставьте подготовленный код регистрации изменений в строку вычисления. Поскольку код содержит циклы, в окне быстрого вычисления выражений лучше использовать вызов процедуры, предварительно написанной в модуле, либо выполнить код построчно через механизм «Табло». Платформа выполнит операции непосредственно в контексте базы данных на мобильном устройстве, и документы зарегистрируются к отправке.

Метод 3. Извлечение базы данных 1Cv8.1CD с планшета без Root-прав

Если настроить отладку не удается или требуется провести комплексный анализ данных мобильного приложения на компьютере, мы можем извлечь файл базы данных 1Cv8.1CD с Android-устройства. Многие считают, что для доступа к системным папкам приложений обязательно требуются Root-права, однако обойти это ограничение можно с помощью утилиты командной строки ADB (Android Debug Bridge).

Проанализируем пошагово, как скопировать базу данных на ПК и вернуть её обратно:

  1. Скачайте и установите инструмент ADB на ваш компьютер (он входит в состав Android SDK Platform Tools).
  2. Подключите планшет по USB с включенной отладкой.
  3. Откройте командную строку (cmd) на компьютере от имени администратора и выполните проверку подключения устройства командой: adb devices В списке должно отобразиться ваше подключенное устройство.
  4. Выполните команду резервного копирования данных конкретного приложения: adb backup -f backup.ab -noapk com.e1c.mobile Обратите внимание: вместо com.e1c.mobile укажите точное имя пакета вашего мобильного приложения 1С. Если это стандартная мобильная платформа, имя пакета обычно совпадает со стандартным. Если это собранный дистрибутив приложения, имя пакета можно посмотреть в свойствах приложения на планшете.
  5. На экране планшета появится запрос на подтверждение создания резервной копии. Нажмите «Создать резервную копию данных» (пароль вводить не нужно). На компьютере в текущей папке появится файл backup.ab.
  6. Для распаковки файла резервной копии Android воспользуйтесь бесплатной консольной утилитой android-backup-extractor (abe.jar), которая преобразует формат .ab в привычный архив .tar: java -jar abe.jar unpack backup.ab backup.tar
  7. Распакуйте полученный файл backup.tar любым архиватором (например, 7-Zip).
  8. Перейдите по пути внутри распакованного архива: apps/[Имя_Пакета]/f/. Именно там будет находиться стандартный файл базы данных 1С — 1Cv8.1CD.
  9. Скопируйте этот файл на компьютер, добавьте его в список баз на ПК как обычную файловую базу 1С. Теперь вы можете запустить её на ПК под нужной версией платформы в режиме «1С:Предприятие» или «Конфигуратор». Вы сможете написать любую простую внешнюю обработку для исправления данных, снятия статуса «Только для чтения» у документов, изменения планов обмена или выгрузить данные в XML-файл для ручной загрузки в центральную базу.
  10. После внесения исправлений в базу на ПК замените исходный файл 1Cv8.1CD в каталоге распакованного архива, запакуйте всё обратно в .tar, конвертируйте в .ab и выполните восстановление на планшете с помощью команды: adb restore backup.ab

Метод 4. Решение проблемы документов «Только для чтения»

Если документы на планшете заблокированы для изменения и проведения, это может происходить по двум причинам: сработал запрет редактирования проведенных документов в интерфейсе мобильного клиента или документы зафиксированы в статусе отправленных. Рассмотрим способы снятия этой блокировки:

Вариант А (Интерфейсный): Попробуйте выделить необходимые документы в списке на планшете, вызвать контекстное меню длительным нажатием (или нажать кнопку «Еще») и выбрать команду «Отменить проведение». В состоянии «Не проведен» документы станут доступны для редактирования и последующего перепроведения, что автоматически зарегистрирует их в плане обмена.

Вариант Б (Через отладку): Если интерфейс не позволяет отменить проведение, мы можем программно перевести документы в режим отмены проведения через окно отладки на ПК (как описано в Методе 2), выполнив следующий код:


Выборка = Документы.РасходнаяНакладная.Выбрать(НачалоДня('20231001'), КонецДня('20231005'));
Пока Выборка.Следующий() Цикл
    Объект = Выборка.ПолучитьОбъект();
    // Снимаем проведение для открытия доступа к редактированию
    Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЦикла;

Метод 5. Синхронизация номеров сообщений обмена на стороне сервера

Выясним причину, почему после восстановления центральной базы из резервной копии обмен может блокироваться даже при наличии новых данных на планшете. При восстановлении бэкапа в центральной базе откатились назад счетчики номеров отправленных и принятых сообщений обмена в плане обмена.

Если планшет отправил пакет данных под номером 150, а восстановленная база ожидает пакет с номером 140, то сервер отвергнет пакет из-за несовпадения номеров сообщений. Аналогично, планшет проигнорирует пакеты от сервера, если посчитает их устаревшими.

Решение проблемы на стороне сервера: Нам не нужно трогать планшет. Достаточно скорректировать номера сообщений в плане обмена в центральной базе данных:

  1. Проанализируйте лог-файлы обмена или XML-пакеты, приходящие с планшета, чтобы узнать, какой номер сообщения он передает и ожидает получить.
  2. В центральной базе откройте узел плана обмена, соответствующий этому планшету.
  3. Программно (или с помощью стандартной обработки «Регистрация изменений для обмена данными») установите свойства «Номер отправленного» и «Номер принятого» в точное соответствие с логикой мобильного устройства. Нам нужно "подогнать" счетчики в центральной базе под состояние планшета.

Как только номера сообщений на стороне сервера совпадут с ожидаемыми на мобильном устройстве, первый же сеанс обмена пройдет успешно, и планшет автоматически выгрузит все документы за пропущенный период.

← На главную