Всем привет! Написал мобильное приложение, Интернет-магазин текстильной одежды.
Возникло несколько проблем и пожеланий заказчика, которые к сожаление пока что не удалось решить, может быть кто-нибудь на этом форуме сталкивался с такими же проблемами:
1) Периодически приложений вылетает, на некоторых смартфонах с ошибкой, на некоторых без:
Чаще всего вылетает в момент переключения категории товаров или смены ориентации экрана.
2) Заказчик попросил убрать верхнюю панель с надписью "Рабочий стол":
Искал в интернете, как же можно убрать эту панель, кто-то писал что надо подкорявить манифест приложения, но то имено подкорявить, так и не написали...
3) Из командной панели заказчик так же попросил убрать стандартную команду "Список приложений":
Как это сделать, я тоже к сожалению не нашёл
2 и 3 думаю без ковыряния манифеста не получился однозначно. Но я бы не менял а сослался на типовой механизм.
1. А перед вылетом СМС случайно не получали? :)
(2) dj_serega, Нет =) Я подозреваю, что приложение вылетает из-за большой загрузки оперативной памяти, которая может быть вызвана большим количеством картинок в приложении... Было-бы в 1С что-нибудь наподобии Garbage collector =)
А чего смеетесь :) Я озвучил фичу одного из релиза 8.3.5 (если не ошибаюсь).
По поводу вылета. Это более чем возможно. Вспомнил что были еще вылети при чтении большой xml обмена. Повторяется при выгрузке файла на более чем 30мб (если передавать в виде ДД (двоичных данных)). Если ДД запаковать в ХЗ (хранилище значения) с максимальным сжатием то передаваемый объем может увиличится (но не проврял).
(6) TreeDogNight, попробуй обновить на более свежий.
А по 2 и 3 это типовой механизм. Приложение на 1С, так что нечего его ковырять, если вы не кровавый хирург))
(7) Xershi, На данный момент последняя платформа это ТЕСТОВАЯ версия 8.3.8.63 от 08.07.2016, которая идет сразу после 8.3.8.58 Как-то опасаюсь ставить тестовую...
(9) dj_serega, Уже несколько раз, по-разному перерабатывал. Изначально, сразу выводились все товары на одну страницу. Потом сделал порционный вывод товаров на страницу (по 10 штук), в конце страницы была кнопка "Показать ещё", которая выводила ещё 10 штук (или остаток). Вылетать стало реже, но после того, как на форме уже было более 40-50 товаров, приложения опять вылетало.
Потом, я сделал переключение страниц, после чего на форме одновременно было не больше 10 товаров. Вылетать стало намного реже, но при частом переключении страниц, приложение рано или поздно все-равно вылетает.
Больше идей у меня нет...
(11) dj_serega, Сейчас при переходи с одной страницы на другую, предыдущие элементы формы удаляются
(12) flyer, Вот код:
&НаКлиенте
Процедура ПредыдущаяСтраница(Команда)
ТекущаяСтраница = ТекущаяСтраница - 1;
ОбновитьЭлементыФормы(ТекущаяОриентацияЭкрана());
ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры
&НаКлиенте
Процедура СледующаяСтраница(Команда)
ТекущаяСтраница = ТекущаяСтраница + 1;
ОбновитьЭлементыФормы(ТекущаяОриентацияЭкрана());
ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыФормы(Ориентация)
//Удалим старые Элементы формы
Для каждого Стр из ТЧ_ДобавляемыеЭлементы Цикл
Группа = Элементы.Найти(Стр.ИмяГруппы);
Если Не Группа = Неопределено Тогда
Элементы.Удалить(Группа);
КонецЕсли;
Элемент = Элементы.Найти(Стр.ИмяЭлемента);
Если Не Элемент = Неопределено Тогда
Элементы.Удалить(Элемент);
КонецЕсли;
КонецЦикла;
ТЧ_ДобавляемыеЭлементы.Очистить();
РПТовары = ТЧ_Товары.НайтиСтроки(Новый Структура("ПолоВозрастнаяГруппа, НомерСтраницы", ПолоВозрастнаяГруппа, ТекущаяСтраница));
Для каждого Стр из РПТовары Цикл
пп = Стр.НомерСтроки;
ИмяГруппы = "Группа"+пп;
Стр.Цена = ?(ТипЗнч(Стр.Цена) = Тип("Число"), СокрЛП(Стр.Цена) + " сум.", Стр.Цена);
Группа = Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), ЭтаФорма);
Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Группа.ОтображатьЗаголовок = Ложь;
Группа.Отображение = ОтображениеОбычнойГруппы.Нет;
Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
ДвоичныеДанные = Стр.Фото.ДанныеФайлаМиниатюры.Получить();
Если ДвоичныеДанные = Неопределено Тогда
Стр.НавигационнаяСсылка = ПутьКПустойКартинке;
Иначе
Стр.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Стр.Фото, "ДанныеФайлаМиниатюры");
КонецЕсли;
Элемент = Элементы.Добавить("ПолеФото"+пп, Тип("ПолеФормы"), Элементы[ИмяГруппы]);
Элемент.ПутьКДанным = "ТЧ_Товары["+(пп-1)+"].НавигационнаяСсылка";
Элемент.Вид = ВидПоляФормы.ПолеКартинки;
Элемент.Подсказка = пп-1;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Элемент.РазмерКартинки = РазмерКартинки.Пропорционально;
Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево;
Элемент.РастягиватьПоГоризонтали = Ложь;
Элемент.Гиперссылка = Истина;
Элемент.УстановитьДействие("Нажатие", "ОбработкаНажатия");
НоваяСтрока = ТЧ_ДобавляемыеЭлементы.Добавить();
НоваяСтрока.ИмяГруппы = ИмяГруппы;
НоваяСтрока.ИмяЭлемента = Элемент.Имя;
ПодГруппа_1 = Элементы.Добавить("ПодГруппа"+пп, Тип("ГруппаФормы"), Группа);
ПодГруппа_1.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ПодГруппа_1.ОтображатьЗаголовок = Ложь;
ПодГруппа_1.Отображение = ОтображениеОбычнойГруппы.Нет;
ПодГруппа_1.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
Элемент = Элементы.Добавить("ПолеТовар"+пп, Тип("ДекорацияФормы"), Элементы["ПодГруппа"+пп]);
Элемент.Заголовок = ТЧ_Товары[(пп-1)].Товар;
Элемент.Подсказка = пп-1;
Элемент.Гиперссылка = Истина;
Если Ориентация = ОриентацияСтраницы.Портрет Тогда
Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт,,7,Истина);
Иначе
Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт,,8,Истина);
КонецЕсли;
Элемент.УстановитьДействие("Нажатие", "ОбработкаНажатия");
НоваяСтрока = ТЧ_ДобавляемыеЭлементы.Добавить();
НоваяСтрока.ИмяГруппы = ИмяГруппы;
НоваяСтрока.ИмяЭлемента = Элемент.Имя;
Элемент = Элементы.Добавить("ПолеЦена"+пп, Тип("ПолеФормы"), Элементы["ПодГруппа"+пп]);
Элемент.ПутьКДанным = "ТЧ_Товары["+(пп-1)+"].Цена";
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.Подсказка = пп-1;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Элемент.Гиперссылка = Истина;
Если Ориентация = ОриентацияСтраницы.Портрет Тогда
Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт,,8,Истина);
Иначе
Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт,,9,Истина);
КонецЕсли;
Элемент.УстановитьДействие("Нажатие", "ОбработкаНажатия");
НоваяСтрока = ТЧ_ДобавляемыеЭлементы.Добавить();
НоваяСтрока.ИмяГруппы = ИмяГруппы;
НоваяСтрока.ИмяЭлемента = Элемент.Имя;
ПодГруппа_2 = Элементы.Добавить("ПодПодГруппа"+пп, Тип("ГруппаФормы"), Элементы["ПодГруппа"+пп]);
ПодГруппа_2.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ПодГруппа_2.ОтображатьЗаголовок = Ложь;
ПодГруппа_2.Отображение = ОтображениеОбычнойГруппы.Нет;
ПодГруппа_2.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
ПодГруппа_2.РастягиватьПоГоризонтали = Ложь;
Элемент = Элементы.Добавить("ПолеКоличество"+пп, Тип("ПолеФормы"), Элементы["ПодПодГруппа"+пп]);
Элемент.ПутьКДанным = "ТЧ_Товары["+(пп-1)+"].Количество";
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.Подсказка = пп-1;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Элемент.КнопкаРегулирования = Истина;
Элемент.МинимальноеЗначение = 0;
Если Ориентация = ОриентацияСтраницы.Портрет Тогда
Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт,,8,Истина);
Иначе
Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт,,9,Истина);
КонецЕсли;
НоваяСтрока = ТЧ_ДобавляемыеЭлементы.Добавить();
НоваяСтрока.ИмяГруппы = ИмяГруппы;
НоваяСтрока.ИмяЭлемента = Элемент.Имя;
Команда = Команды.Найти("Купить"+пп);
Если Команда = Неопределено Тогда
Команда = Команды.Добавить("Купить"+пп);
КонецЕсли;
Команда.Заголовок = "Купить";
Команда.Подсказка = пп-1;
Команда.Картинка = БиблиотекаКартинок.Корзина;
Команда.Действие = "Купить";
Элемент = Элементы.Добавить("ФормаКупить"+пп, Тип("КнопкаФормы"), Элементы["ПодПодГруппа"+пп]);
Элемент.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
Элемент.ИмяКоманды = Команда.Имя;
//Элемент.Ширина = 7;
Элемент.Высота = 1;
Если Ориентация = ОриентацияСтраницы.Портрет Тогда
Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт,,6,Истина);
Элемент.Отображение = ОтображениеКнопки.Картинка;
Иначе
Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт,,7,Истина);
Элемент.Отображение = ОтображениеКнопки.КартинкаИТекст;
КонецЕсли;
НоваяСтрока = ТЧ_ДобавляемыеЭлементы.Добавить();
НоваяСтрока.ИмяГруппы = ИмяГруппы;
НоваяСтрока.ИмяЭлемента = Элемент.Имя;
КонецЦикла;
Элементы.Переместить(Элементы.ГруппаПереключениеСтраниц, ЭтаФорма);
РПТовары_2 = ТЧ_Товары.НайтиСтроки(Новый Структура("ПолоВозрастнаяГруппа", ПолоВозрастнаяГруппа));
Если РПТовары.Количество() = РПТовары_2.Количество() Тогда
Элементы.ГруппаПереключениеСтраниц.Видимость = Ложь;
Иначе
Элементы.ГруппаПереключениеСтраниц.Видимость = Истина;
Если ТекущаяСтраница = 1 Тогда
Элементы.ПредыдущаяСтраница.Доступность = Ложь;
Элементы.СледующаяСтраница.Доступность = Истина;
ИначеЕсли ТекущаяСтраница = РПТовары_2[РПТовары_2.ВГраница()].НомерСтраницы Тогда
Элементы.ПредыдущаяСтраница.Доступность = Истина;
Элементы.СледующаяСтраница.Доступность = Ложь;
Иначе
Элементы.ПредыдущаяСтраница.Доступность = Истина;
Элементы.СледующаяСтраница.Доступность = Истина;
КонецЕсли;
КонецЕсли;
Если РПТовары.Количество() > 0 Тогда
ЭтаФорма.ТекущийЭлемент = Элементы["ПолеФото"+РПТовары[0].НомерСтроки];
КонецЕсли;
КонецПроцедуры
Показать
ТекущаяОриентацияЭкрана() - это экспортная функция в Модуле Управляемого приложения:
Функция ТекущаяОриентацияЭкрана() Экспорт
ПараметраЭкрана = ПолучитьИнформациюЭкрановКлиента();
Если ПараметраЭкрана.Количество() > 0 Тогда
ИнфаЭкрана = ПараметраЭкрана[0];
Если ИнфаЭкрана.Высота > ИнфаЭкрана.Ширина Тогда
Возврат ОриентацияСтраницы.Портрет;
Иначе
Возврат ОриентацияСтраницы.Ландшафт;
КонецЕсли;
КонецЕсли;
КонецФункции
идея хорошая для моб.приложения. что то делал похожее. и тут вопросы задавал по выводу фото. тоже вылеты были. покажи код как выводишь фото на страницу? может есть смысл оптимизировать.