Мобильный клиент автономный режим. Метод объекта не обнаружен (ВыполнитьОбменДаннымиВФоне)

1. aibasoft 11 02.12.20 13:31 Сейчас в теме
Доброго времени суток.
Адаптирую конфигурацию под мобильный клиент с автономным режимом. Есть с нуля самописная конфигурация которую я успешно адаптировал под мобильный клиент с автономным режимом, взяв нужные модули из демо конфигурации.

Есть также другая конфигурация на основе БСП в котором столкнулся с ошибкой. Теперь к ошибке:
Запускаю на мобильном клиенте с возможностью автономной работы.

1.Из модуля приложения при начале работы вызывается процедура НачатьОбмен() из директивы #Если МобильныйКлиент Тогда :
Процедура ПриНачалеРаботыСистемы()
	
	#Если МобильныйКлиент Тогда 
	Если ОсновнойСерверДоступен() = Истина Тогда
		ОбменМобильныеАвтономныйКлиент.НачатьОбмен();
	КонецЕсли;
	ПодключитьОбработчикОжидания("ПроверкаНеобходимостиСинхронизации", 3);
	
	// идентификатор подписчика надо получать регулярно, он может измениться
	УведомленияКлиент.ОбновитьИдентификаторПодписчикаУведомлений();
	
#КонецЕсли
	
КонецПроцедуры
Показать


2. Идет на общий модуль в соответствующую. процедуру НачатьОбмен(), который также в дир. моб клиента. Здесь он прыгает на общий модуль ОбменМобильныеАвтономныйСервер в функцию ВыполнитьОбменДаннымиВФоне и падает на нем. Метод объекта не обнаружен (ВыполнитьОбменДаннымиВФоне).

Процедура НачатьОбмен() Экспорт
	
	#Если МобильныйКлиент Тогда
	ТекстОшибки = "";
	Если НЕ ИдетОбмен() Тогда
		Если ОсновнойСерверДоступен() = Истина Тогда
			ИдентификаторФоновогоЗадания = ОбменМобильныеАвтономныйСервер.ВыполнитьОбменДаннымиВФоне();
			Оповестить("НачалсяОбмен");
			ПодключитьОбработчикОжидания("НаблюдениеЗаСинхронизацией", 2);
		Иначе
		    Сообщение = Новый СообщениеПользователю();
		    Сообщение.Текст = НСтр("ru = 'Обмен невозможен. Недоступен основной сервер.'", "ru");
			Сообщение.Сообщить();
		КонецЕсли;
	КонецЕсли;
#КонецЕсли
    
КонецПроцедуры
Показать


Собственно функция в модуле ОбменМобильныеАвтономныйСервер находится в директиве "#Если МобильныйАвтономныйСервер Тогда" , там весь модуль находится в этой директорий. Функция выполняет фоновое задание синхронизации.

Функция ВыполнитьОбменДаннымиВФоне() Экспорт
	
	Задание = ФоновыеЗадания.Выполнить("ОбменМобильныеАвтономныйСервер.ВыполнитьОбменДанными",,, "Синхронизация");
	Возврат Задание.УникальныйИдентификатор;
	
КонецФункции


В моб клиенте не может определить эту функцию так-как он находится в "#Если МобильныйАвтономныйСервер Тогда". В Конфе по кнопке F12 все норм идет.
В другой конфе эти модули хорошо "прижились" и вполне норм работают. В чем может быть причина не читабельности этой директивы в данной конфигурации??
PS: ОбменМобильныеАвтономныйКлиент - (Клиент)
ОбменМобильныеАвтономныйСервер - (Сервер, Вызов сервера)
В состав автономной конфигурации они включены с приоритетом "Автономный сервер".
В точно также как на другой рабочей конфигурации. Крутится все это на платформе 8.3.17.1549
Найденные решения
5. aibasoft 11 03.12.20 20:19 Сейчас в теме
Решение: Если конфигуратор не читает директиву "#Если МобильныйАвтономныйСервер Тогда" значит автономная конфигурация при его определения не генерировалась (выдал ошибку и т д).
Для проверки успешной генерации автономной конфигурации надо сделать "Тестирование и исправление" с одной единственной галочкой "Пересоздание автономной конфигурации" должно завершится без ошибок (будет автономный режим на мобилке), если есть ошибки есть(автономного режима на мобилке не будет) то необходимо исправить эти ошибки.
user785225; eeeio; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. HAMAZ 8 03.12.20 07:08 Сейчас в теме
Собственно функция в модуле ОбменМобильныеАвтономныйСервер находится в директории "#Если МобильныйАвтономныйСервер Тогда" , там весь модуль находится в этой директорий. Функция выполняет фоновое задание синхронизации.
- не директории, а директивы.
Уберите директиву
 #Если МобильныйАвтономныйСервер Тогда
в тело функции и проверьте
3. aibasoft 11 03.12.20 14:12 Сейчас в теме
(2) Я пробовал эти варианты, дальше так было:
- Директиву убрал
- Ругался на ОсновнойСервер в процедуре ВыполнитьОбменДанными().
- Попробовал только эту процедуру выполнить в директиве "#Если МобильныйАвтономныйСервер Тогда" и запускаю.
- в журнале вижу что обмен он не трогал.
- Ошибок при запуске на мобилке не было, но автономный режим не появился, так-как обменом он не заполнил автономный сервер метаданными....
Есть другие варианты?

Вот процедура куда фоново обращается:
Процедура ВыполнитьОбменДанными() Экспорт

	НаименованиеУзла = ПользователиИнформационнойБазы.ТекущийПользователь().Имя + " - Автономный узел";
    
	ЦентральныйУзелОбмена = ПланыОбмена.Мобильные.НайтиПоКоду("001");
    Если ЦентральныйУзелОбмена.Пустая() Тогда
        
        НовыйУзел = ПланыОбмена.Мобильные.СоздатьУзел();
    	НовыйУзел.Код="001";
    	НовыйУзел.Наименование="Центральный";
    	НовыйУзел.Записать();
        ЦентральныйУзелОбмена = НовыйУзел.Ссылка;
        
    КонецЕсли;
    
	Узел = ПланыОбмена.Мобильные.ЭтотУзел();
    // Инициализируем обмен, проверяем, есть ли нужный узел в плане обмена.
    НовыйКод = ОсновнойСервер.ОбменМобильныеВызовПК.НачатьОбмен(Узел.Код,
										                       НаименованиеУзла,
										                       ЦентральныйУзелОбмена.НомерПринятого,
										                       ЦентральныйУзелОбмена.НомерОтправленного);
	
    Если  Узел.Код <> НовыйКод Тогда
        
		ОбъектУзла = Узел.ПолучитьОбъект();
		ОбъектУзла.Код = НовыйКод;
        ОбъектУзла.Наименование = НаименованиеУзла;
		ОбъектУзла.Записать();
        
    КонецЕсли;
		
	Константы.ОтправленоЗаписей.Установить(0);
	Константы.ПринятоЗаписей.Установить(0);
    ДанныеОбмена = ОбменМобильныеОбщее.СформироватьПакетОбмена(ЦентральныйУзелОбмена);
	ДанныеОбмена = ОсновнойСервер.ОбменМобильныеВызовПК.ВыполнитьОбменДанными(Узел.Код, ДанныеОбмена);
    ОбменМобильныеОбщее.ПринятьПакетОбмена(ЦентральныйУзелОбмена, ДанныеОбмена);
	
КонецПроцедуры
Показать

Получается фоновое задание по этому процессу не отрабатывается, http отладкой на этой процедуре точку остановки не ловит
4. aibasoft 11 03.12.20 17:00 Сейчас в теме
Я нашел корень проблемы, но не знаю как решить:
Начинаю с нуля. На вторую конфигурацию которая на основе БСП ничего не перенося, в чистом виде определяю состав в который добавил только единственный справочник "Пользователи". Публикую на веб сервере. Захожу через мобилку а там не появились тумблеры автоном конфы у пользователя.
То есть он даже не генерирует состав автономной конфигурации и соответственно директиву #Если МобильныйАвтономныйСервер ему негде выполнить(((

PS: на другой конфе когда в состав автономки определяешь хоть один объект и заходишь через мобильник, там сразу красуются два тумблера у пользователя. 1. Тумблер - Автономный режим, 2. Рассчитывать на плохое соединение.
5. aibasoft 11 03.12.20 20:19 Сейчас в теме
Решение: Если конфигуратор не читает директиву "#Если МобильныйАвтономныйСервер Тогда" значит автономная конфигурация при его определения не генерировалась (выдал ошибку и т д).
Для проверки успешной генерации автономной конфигурации надо сделать "Тестирование и исправление" с одной единственной галочкой "Пересоздание автономной конфигурации" должно завершится без ошибок (будет автономный режим на мобилке), если есть ошибки есть(автономного режима на мобилке не будет) то необходимо исправить эти ошибки.
user785225; eeeio; +2 Ответить
6. Serg O. 304 26.09.24 13:35 Сейчас в теме
столкнулся с такой же ошибкой при обновлении КА 2.5.12.232
в форме регистра сведений ШтрихкодыНоменклатуры - форма без поддержки
ошибка Проверка: Мобильный клиент (автономная конфигурация). Сервер)

в процедурах/функциях &НаКлиенте
нужно добавлять
#Если НЕ МобильныйКлиент Тогда

а в процедурах/функциях &НаСервере
нужно добавлять
#Если НЕ МобильныйАвтономныйСервер Тогда

и ошибка при обновлении - ушла.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот