В процессе эксплуатации конфигураций 1С (особенно в узлах РИБ на базе «1С:Розница» в файловом режиме) нередко возникает ситуация, когда типовой или доработанный документ — например, ЧекККМ — начинает периодически зависать при проведении. При попытке обращения к данным конкретного регистра накопления или при формировании движений система может завершать работу аварийно с сообщением «Недостаточно памяти».
Проанализируем детально причины подобного поведения платформы, рассмотрим типичные ошибки в программном коде и разберем по шагам, как локализовать и устранить проблему.
Основным источником проблем при записи движений являются неоптимальные алгоритмы и ошибки управления транзакциями в модуле документа или модуле набора записей регистра. Разберем ключевые моменты, на которые следует обратить внимание при аудите кода:
Записать() непосредственно в цикле формирования движений документа. При проведении документа платформа 1С самостоятельно оптимизирует транзакцию и записывает все наборы движений в конце процедуры. Вместо явной записи необходимо выставлять флаг активности записи:
// Неправильно:
Движения.Зарплата.Записать();
// Правильно:
Движения.Зарплата.Записывать = Истина;
Записать() выполняет лишнюю блокировку таблиц, многократно перезаписывает итоги и в файловом режиме приводит к исчерпанию адресного пространства памяти.ПередЗаписью и ПриЗаписи. Если внутри этих событий выполняются тяжелые запросы без отборов по регистратору или периоду, расчеты в бесконечных циклах при определенных комбинациях данных или попытки модификации других связанных регистров, это приводит к резкому скачку потребления памяти.Архитектурные недочеты в метаданных добавленного регистра могут существенно снизить производительность кассового узла:
Обороты. Если ошибочно выбран вид Остатки, но списания в ноль не происходит, таблица итогов накапливает незакрытые остатки за всю историю. При проведении каждого следующего чека СУБД пытается пересчитать всю цепочку итогов вперед, что гарантированно вызывает зависание и ошибку нехватки памяти.СправочникСсылка.ФизическиеЛица, СправочникСсылка.Магазины).УстановитьИспользованиеИтогов(Ложь).Аварийные отключения питания на рабочих местах кассиров часто приводят к логическим повреждениям индексов в файле .1CD. Утилита chdbfl исправляет лишь физическую структуру таблиц, но может оставлять поврежденными внутренние деревья индексов. Выполним комплекс регламентных процедур:
.dt, создадим новую пустую информационную базу и загрузим данные из файла обратно.x64 снимает данное ограничение, однако перед этим убедимся, что все подключенное торговое оборудование (фискальные регистраторы, сканеры, эквайринг) имеет 64-битные драйверы.