При загрузке данных с мобильного устройства происходит резкий скачок потребляемой памяти, периодически сопровождающийся полным вылетом 1С с ошибкой “Недостаточно памяти”, если на сервере или рабочей станции действительно мало памяти.
Что необходимо сделать в первую очередь:
- Копию базы данных, чтобы не усугубить дальнейшими действиями
- Копию рабочей папки менеджера обмена Агент+
- Копию папок с gps-треками
- Копию обработки обмена
- Тестирование и исправление базы данных, наиболее часто встречающаяся причина
- Тестирование жесткого диска.
Далее, если ничего не помогло:
Анализ логов, не предмет, того на каких обменах происходит ошибка: с кем, в какое время, какой запрос?
Если обработка не типовая, откат изменений.
Цель:
Локализовать ошибку.
В идеале: получить файл обмена или уметь создавать ситуацию с ошибкой.
Что в итоге оказалось:
- от одного агента постоянно присылалсь gps-трек размера 10 мегабайт (все треки по текущий момент)
- по идеологии обработки загрузки он дописывался всегда в один файл и он рос в прогрессии
- в момент дописки файл считывается объектом “ТекстовыйДокумент” в память и происходит вылет.
Пути решения пассивные:
- Удаление или очистка файла
- Отмена gps отслеживания у одного человека, в этом случае обмены с другими агентами не будут стопорится
Но в первом случае ошибка будет проявляться регулярно.
Пути решения активные ( сдоработкой обработки):
- Не записывать существующие строки в файле трека на дату
- Писать треки за даты в отдельные папки каждую
- В файле обмена посылать дату полученного трека (Константа “ДатаНачалаТрека” с ИД: “DF297AD7-E2CE-478A-974E-FB399239E23E”)
Я пошел по 1 и 3 варианту. В стандартной обработке такой константы не выгружается. пока сделал вариант, что это поле можно указывать через константу пользователя для этого надо добавить код в процедуре ИнициализироватьПеременные():
эл = ТаблЗначКонстанты.Добавить(); эл["Имя"] = "ДатаНачалаТрека"; эл["Представление"] = НСтр("ru='Дата начала трека'"); НастройкиАгентаПоУмолчанию["ДатаНачалаТрека"] = НачалоДня(ТекущаяДата()-10*24*3600); эл["Ид"] = "DF297AD7-E2CE-478A-974E-FB399239E23E"; эл["Показывать"] = Истина; эл["Тип"] = ТипКонстанты["Пользователь"];//"ДатаВремя"; эл["Выгружать"] = Истина;
В данном случае для не инициализированных настроек будет браться дата 10 дней от текущей, после того как вы в настройках агента измените (что либо) будет браться дата выбранная.
Далее буду проверять последний выгруженный файл трека, и если он будет найден, будет высылаться его дата.
Настройками приложения, никак решить проблему не удалось, так как не известно как там работает логика, где хранятся эти треки, почему копятся? Очистку данных приложения не стал выполнять из-за опасений, что слетит лицензия пользователя
Возможно это не самое идеальное решение, но работающее на 99%.
Реклама — это когда изо всех сил колотят палкой по днищу пустой кастрюли.