Каталог решений - При выполнении операции закрытия месяца «Распределение затрат и расчет себестоимости» произошла ошибка: Переполнение стека встроенного языка на сервере

При выполнении операции закрытия месяца «Распределение затрат и расчет себестоимости» произошла ошибка: Переполнение стека встроенного языка на сервере

При выполнении операции закрытия месяца «Распределение затрат и расчет себестоимости» произошла ошибка: Переполнение стека встроенного языка на сервере

В наличии

Описание решения проблемы переполнения стека при выполнении операции закрытия месяца «Распределение затрат и расчет себестоимости» в 1С:ERP Управление предприятием, редакция 2.4.13.123.

Категория:

Описание

Столкнулись с проблемой, когда при распределении затрат и расчете себестоимости при закрытии месяца (1С:ERP Управление предприятием, редакция 2.4.13.123) получили ошибку "Переполнение стека встроенного языка на сервере". Мы воспользовались встроенным ограничителем (в настройках формы закрытия месяца) для рекурсивных функции и экспериментально выяснили, что для избежания этой ошибки значение по умолчанию 650 надо уменьшить до 430, тогда ошибка уходит, но и затраты полностью не распределяются. Проблема не решена.

Анализ работы алгоритма и данных, показал, что проблема не в циклических ссылках (в штатном алгоритме заложена проверка на циклические ссылки), а просто очень большой список документов для распределения, где-то порядка 1300+, а штатный алгоритм на каждый шаг для распределения вызывает рекурсивно сам себя и чтобы полностью распределить все затраты, понадобилась бы глубина рекурсии 1300+ соответственно.

Т.к. проблема была не в данных, а в самом алгоритме, было принято решение переписать рекурсию в итерацию, а переменные контекста хранить в массиве, размер которого уже ограничивается только доступной оперативной памятью компьютера, а не размером callstack.

Привожу получившийся результат:

 

has been added to your cart:
Оформление заказа