Имя: Пароль:
1C
1С v8
Отладка кода мобильного клиента.
0 lirt82
 
19.08.26
07:51
Всем привет, в базе 1с Розница есть самописная обработка для мобильного клиента на смартфоне/планшете, пользователь на смартфоне/планшете заходит в базу 1С, далее открывается эта самописная обработка на ней есть кнопки с процедурами, не могу отладчиком дойти до нажатия кнопки чтобы проверить код в процедуре, как можно отладить мобильный клиент?
и второй момент если перенести код во внешнюю обработку то он отрабатывает а этот же код в модуле встроенной обработки возвращает Неопределено.

&НаКлиенте
Процедура ЗаполнитьИзQR(Команда)
    //сюда уже не могу попасть        
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтотОбъект);
        
    Режим = РежимДиалогаВопрос.ДаНет;
    
    ПоказатьВопрос(ОписаниеОповещения, "Отсканировать QR для онлайн меню?", Режим);
    
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопрос(Результат, Параметры) Экспорт

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

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОтсканированногоШтрихКода(Штрихкод, Результат, Сообщение, ДополнительныеПараметры) Экспорт     
    
    ОчиститьСообщения();
    
    Если Результат И ЗначениеЗаполнено(Штрихкод) Тогда
        
        Если Лев(Штрихкод, 5) <> "30077" Тогда
            
            #Если МобильныйКлиент Тогда
                СредстваМультимедиа.ЗакрытьСканированиеШтрихКодов();
            #КонецЕсли
            
            рестОбщегоНазначенияКлиент.ВывестиИнформациюДляФронтОфиса("Неверный QR код заказа","Не известный QR заказа из онлайн меню! " + Штрихкод);
            ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(
            НСтр("ru = 'Мобильный официант сканер онлайн меню'"),
            "Ошибка", "Неверный QR код заказа: " + Штрихкод,,Истина);
            
            Штрихкод = "";
            
            Возврат;
        КонецЕсли;
        
        ДобавитьТоварыИзОнлайнМеню(Штрихкод);    
        
    Иначе
        рестОбщегоНазначенияКлиент.ВывестиИнформациюДляФронтОфиса("Не удалось отсканировать QR онлайн меню", ОписаниеОшибки() + " " + Сообщение);
        ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(
        НСтр("ru = 'Мобильный официант сканер онлайн меню'"),
        "Ошибка", "не удалось отсканировать QR онлайн меню: " + Штрихкод + ". " + Объект.Ссылка,,Истина);
    КонецЕсли;    
        
    #Если МобильныйКлиент Тогда
        СредстваМультимедиа.ЗакрытьСканированиеШтрихКодов();
    #КонецЕсли
КонецПроцедуры

&НаСервере
Процедура ДобавитьТоварыИзОнлайнМеню(Штрихкод)
    //вот сюда отладчик не заходит
    СтруктураСервера = Новый Структура;
    СтруктураСервера.Вставить("Сервер", "menu.ххххххххххххххх");
    СтруктураСервера.Вставить("Порт",   443);
    СтруктураСервера.Вставить("Ресурс", "/api/offline-order-scan?number=" + Штрихкод);
    СтруктураСервера.Вставить("SSL",     Истина);
    СтруктураСервера.Вставить("Метод",    "GET");
    СтруктураСервера.Вставить("Токен",     "ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ");
    
    СтрОтвета = Синхронизация.ОтправитьЗапросНаСервер_ВызватьМетод(СтруктураСервера);
    
    Если Не СтрОтвета.Успех Тогда
        Возврат;
    КонецЕсли;    
    
    МассивТоваров = Синхронизация.ПолучитьСтруктуруИзJSON(СтрОтвета.ТекстОтвета);

вот код из внешней обработки отрабатывает
&НаСервере
Процедура Команда7НаСервере()
    
    Штрихкод = "3007720260818111358898627";
    
    СтруктураСервера = Новый Структура;
    СтруктураСервера.Вставить("Сервер", "menu.ххххххххххххххххххххххх");
    СтруктураСервера.Вставить("Порт", 443);
    СтруктураСервера.Вставить("Ресурс", "/api/offline-order-scan?number=" + Штрихкод);
    СтруктураСервера.Вставить("SSL",     Истина);
    СтруктураСервера.Вставить("Метод",    "GET");
    СтруктураСервера.Вставить("Токен",     "ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ");
    
    СтрОтвета = Синхронизация.ОтправитьЗапросНаСервер_ВызватьМетод(СтруктураСервера);
    
    Если Не СтрОтвета.Успех Тогда
        Возврат;
    КонецЕсли;

сама серверная процедура
&НаСервере
Функция ОтправитьЗапросНаСервер_ВызватьМетод(СтрСервера) Экспорт
    
    СтруктураОтвета = Новый Структура("Успех, ТекстОтвета");
    
    ssl1 = Новый ЗащищенноеСоединениеOpenSSL();
    
    Логин     = ?(СтрСервера.свойство("Логин"), СтрСервера.Логин, "");
    Пароль     = ?(СтрСервера.свойство("Пароль"), СтрСервера.Пароль, "");
    
    Попытка
        Если СтрСервера.SSL Тогда
            Соединение = Новый HTTPСоединение(СтрСервера.Сервер,,Логин,Пароль,,,ssl1);
        Иначе
            Соединение = Новый HTTPСоединение(СтрСервера.Сервер);
        КонецЕсли;
    Исключение
        СтруктураОтвета.Успех = Ложь;
        СтруктураОтвета.ТекстОтвета = "Нет связи с " + СтрСервера.Сервер + " по причине: " + ОписаниеОшибки();
        Возврат СтруктураОтвета;         
    КонецПопытки;
    
    // посылаем запрос
    Попытка
        ЗаголовокHTTP = Новый Соответствие();
        Если СтрСервера.Свойство("Токен") Тогда
            ЗаголовокHTTP.Вставить("Authorization", "Bearer " + СтрСервера.Токен);
        КонецЕсли;
        ЗаголовокHTTP.Вставить("Content-Type","application/json");
        
        Запрос = Новый HTTPЗапрос(СтрСервера.Ресурс, ЗаголовокHTTP);
        
        Если СтрСервера.Свойство("СтрокаJSON") Тогда
            Запрос.УстановитьТелоИзСтроки(СтрСервера.СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
        КонецЕсли;
        
        Ответ = Соединение.ВызватьHTTPМетод(СтрСервера.Метод, Запрос);
        
        ТекстОтвета = Ответ.ПолучитьТелоКакСтроку("UTF-8");
        
        Если Ответ.КодСостояния = 200 или Ответ.КодСостояния = 201 Тогда
            СтруктураОтвета.Успех = Истина;
            СтруктураОтвета.ТекстОтвета = ТекстОтвета;
        Иначе
            СтруктураОтвета.Успех = Ложь;
            СтруктураОтвета.ТекстОтвета = "Ошибка отправки запроса по причине по причине: " + ТекстОтвета + " код состояния: " + Ответ.КодСостояния;
        КонецЕсли;    
    Исключение
        СтруктураОтвета.Успех = Ложь;
        СтруктураОтвета.ТекстОтвета = "Ошибка передачи запроса по причине:" + ОписаниеОшибки();
    КонецПопытки;
    
    Возврат СтруктураОтвета;
    
КонецФункции

в итоге получается код в модуле формы обработки не отрабатывает, а если вынести код во внешнюю обработку можно и отладить и код успешно отрабатывает т.е. находит по QR коду нужный состав меню.
1 arsik
 
гуру
19.08.26
08:05
У тебя поисковик отключили? https://infostart.ru/1c/articles/1260949/
2 lirt82
 
19.08.26
08:17
(1) как тогда объяснить успешное выполнение кода во внешней обработке (т.е. передача отсканированного qr кода и получение ответа что найден) и неуспешное выполнение кода в мобильном клиенте (т.е. неизвестно передается ли отсканированный qr код)?
мне тут говорят, что ошибка возникла после того как изменили домен вебсайта с .соm на .ru. Когда сайт крутился на домене .com с планшета/смартфона все успешно сканировалось и находилось.
3 lirt82
 
19.08.26
19:23
решение:
начали разбирать логи с вебсайта а на него приходят запросы из 1С где идет обращение на старый адрес вебсайта, и мне один прогер который давно работает в этой конторе сказал что исправил за 1 минуту (он сегодня вышел из отпуска). Оказалось в периферийной базе когда открывали больше года тому назад эту кофейню, приезжал прогер из другого города и он сделал локальное расширение т.е. не обменивается с центральным узлом, в этой базе и в котором зашил старый адрес вебсайта .com:) а я искал глобальным поиском и пробовал отладить код в центральном узле:) капец конечно, мне и в голову не пришел такой вариант разработки:)