|
Владислаучык 3 / 3 / 7 Регистрация: 21.03.2013 Сообщений: 637 |
||||
|
1 |
||||
Переполнение стека встроенного языка на сервере21.09.2017, 17:00. Показов 15432. Ответов 6 Метки нет (Все метки)
Добрый день, вот такая ошибка
Подскажите плз, в чем проблема может быть?
__________________
0 |
|
841 / 604 / 211 Регистрация: 24.07.2013 Сообщений: 2,101 |
|
|
21.09.2017, 17:05 |
2 |
|
При вызове метода СкомпоноватьРезультат выполняется обработчик события ПриКомпоновкеРезультата. Получается бесконечная рекурсия.
0 |
|
3 / 3 / 7 Регистрация: 21.03.2013 Сообщений: 637 |
|
|
21.09.2017, 17:26 [ТС] |
3 |
|
Tklwegsd, Так а как это обойти?
0 |
|
841 / 604 / 211 Регистрация: 24.07.2013 Сообщений: 2,101 |
|
|
21.09.2017, 17:29 |
4 |
|
Очень просто. Не надо вызывать метод СкомпоноватьРезультат() внутри обработчика события ПриКомпоновкеРезультата.
0 |
|
3 / 3 / 7 Регистрация: 21.03.2013 Сообщений: 637 |
|
|
21.09.2017, 17:40 [ТС] |
5 |
|
Tklwegsd, Вот убрал это, и просто ничего не выводится, одна оболочка таблицы Добавлено через 36 секунд Добавлено через 9 минут
0 |
|
434 / 305 / 92 Регистрация: 28.05.2014 Сообщений: 1,247 |
|
|
21.09.2017, 17:50 |
6 |
|
Документ Результат это реквизит отчета с типом Табличный Документ
0 |
|
3 / 3 / 7 Регистрация: 21.03.2013 Сообщений: 637 |
|
|
21.09.2017, 17:53 [ТС] |
7 |
|
Да, это у уточнял.
0 |
|
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
21.09.2017, 17:53 |
|
Помогаю со студенческими работами здесь Переполнение стека переполнение стека! Переполнение стека пишу программу, в ней достаточно много массивов, процедур и есть рекурсия…. Переполнение стека uses graph;… Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 7 |
Содержание:
1. Что такое стек в конфигурации программы 1С?
2. Для чего нужен стек и откуда появляется ошибка переполнения стека?
3. Причины, вызывающие переполнение стека в системе программы 1С: Предприятие
1. Что такое стек в конфигурации программы 1С?
При работе в конфигурации системы 1С, после обновления конфигурации или платформы, или по каким-то другим причинам, все мы сталкиваемся с различными всплывающими ошибками. Разберемся сегодня, что можно сделать, если столкнуться с ошибкой – «Переполнение стека встроенного языка на сервере». Разберемся, что вызывает эту ошибку:
Переполнение стека возникает, когда в стек помещается больше элементов, чем он может вместить.
Стек – это по сути стопка элементов, в которой эти элементы «укладываются» один поверх другого. Работает этот механизм по принципу LIFO (Last In, First Out – последним вошел/первым вышел). Поэтому добраться мы можем в первую очередь до того элемента, который положили последним, потом предпоследним, и т.д.
2. Для чего нужен стек и откуда появляется ошибка переполнения стека?
Главное назначение стека — чтобы организовать команду вызова подпрограмм удобным образом. Например, вызывается «функция1» с определенными переменными, и которая при этом передает определенные параметры и вызывает «функцию2» со своими переменными. В свою очередь «функция2» передает свои параметры и вызывает «функцию3», и т.д. Все эти параметры и переменные нужно сохранять (куда-то складывать), и затем по порядку вызывать. Для этого как раз удобно использовать стек.
Если рассматривать стек абстрактно – это «безразмерный склад» для 1С хранения информации. Но фактически – это не так.
Появляется подобная ошибка именно от того, что стек по своей сути имеет границы, и его объем, а точнее память, выделенная под стек, ограничена. И поскольку стек организует команду вызова функций, при его переполнении функции уже не могут вызываться.
3. Причины, вызывающие переполнение стека в системе программы 1С: Предприятие
1. Самый распространенный вариант – это рекурсия. И если происходит бесконечная рекурсия, то прерывается она таким образом.
Выглядит это условно так:
Процедура ИмяПроцедурыВызываемойРекурсивно()
…
ИмяПроцедурыВызываемойРекурсивно();
…
КонецПроцедуры
2. Локальные переменные, которые требуют себе большого объема оперативной памяти. Это может быть, например, массив из какого-нибудь миллиона локальных переменных или элементов. Вызывая функцию с таким массивом, можно легко получить в ответ переполнение стека.
Переполнение стека — фатальная ошибка, чаще всего встречающаяся в программах, программный код 1С, которых имеет рекурсивные функции. Либо, даже если вы не используете рекурсию, программа содержит множество локальных переменных или есть ошибки в ручном выделении в стеке оперативной памяти. Актуальны все классические правила:
1. Если есть возможность – не используем в работе рекурсию.
2. Не выполнять вручную ту работу, которую может выполнить компилятор.
Специалист компании «Кодерлайн»
Марина Анапольская
Здравствуйте, столкнулся с проблемой при конвертации данных, хочу перенести дополнительные сведения из бухгалтерии в другую программу, для документа поступление товаров и услуг в обработчике события перед выгрузкой объекта пишу следующий код: Запрос = Новый Запрос; и у меня возникает ошибка, до этого этот код проверил на документе авансовый отчет, всё работало, решил добавить все типы документов и теперь и авансовый отчет даже не выгружается, на рабочей станции 1с просто вылетает, на сервере выдает ошибку Ошибка при вызове метода контекста (ВыгрузитьПоПравилу): Переполнение стека встроенного языка на сервере причем выдает её миллиард раз, у объекта свойсва всего три, кто-нибудь сталкивался?
значит рекурсия образовалась 🙂
че-то ни разу не сталкивался, где можно почитать? поиск результатов не дает чего-то
не пойму ничего, в цикл добавил и в самом деле сообщение «Поступление товаров и услуг СГП00001829 от 30.11.2014 23:59:59 = ЦЗ Жизнедеятельность» вывелось миллиард раз, может быть кто-нибудь знает почему?
с авансовым отчетом всё работатет
Телепатирую, у тебя в «Выгрузить по правилу» выгружаются все поля этого Объекта вместе со всеми своими вложениями. В каком-то из этих полей прописан это же Объект, поэтому он начинает выгружаться повторно, и еще, и еще, и т.д.
понятное дело, но авансовый отчет без ошибок ведь грузит
всё, я понял в чем я дибил, этот код в аваносвом отчете стоит на событии «После выгрузки в файл» вот и всё там и работатет
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям