Меню

Переполнение стека встроенного языка на сервере 1с исправить ошибку

Владислаучык

3 / 3 / 7

Регистрация: 21.03.2013

Сообщений: 637

1

Переполнение стека встроенного языка на сервере

21.09.2017, 17:00. Показов 15432. Ответов 6

Метки нет (Все метки)


Добрый день, вот такая ошибка

Переполнение стека встроенного языка на сервере

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    ЗначениеПараметраПодразделение = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Подразделение"));
    Если ЗначениеПараметраПодразделение <> Неопределено Тогда
        ЗначениеПараметраПодразделение.Значение = Подразделение;
        ЗначениеПараметраПодразделение.Использование = Истина;
    КонецЕсли;
    
    //ТиповыеОтчеты.ОбновитьПараметрыПериодаПоФорме(КомпоновщикНастроек, ЭтаФорма);
    табДокумент = Новый ТабличныйДокумент;
    ЭтотОбъект.СкомпоноватьРезультат(табДокумент);
    
    МакетЗаголовокПодвал = ПолучитьМакет("Макет");
    ОбластьЗаголовок = МакетЗаголовокПодвал.ПолучитьОбласть("Заголовок");
    ОбластьЗаголовок.Параметры.Организация = Справочники.Организации.НайтиПоКоду("000000001");
    ОбластьЗаголовок.Параметры.Период = ПредставлениеПериода(НачалоПериода, КонецДня(КонецПериода));
    
    ОбластьПодразделение = МакетЗаголовокПодвал.ПолучитьОбласть("Подразделение");
    ОбластьПодразделение.Параметры.Подразделение = Подразделение;
    
        
    
    ДокументРезультат.Очистить();
    ДокументРезультат.АвтоМасштаб = Истина;
    ДокументРезультат.Вывести(ОбластьЗаголовок);
      Если ЗначениеЗаполнено(Подразделение) Тогда        
        ДокументРезультат.Вывести(ОбластьПодразделение);
    КонецЕсли;          
    
    ДокументРезультат.Вывести(табДокумент);
КонецПроцедуры

Подскажите плз, в чем проблема может быть?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Эксперт 1С

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



Эксперт 1С

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 секунд
Tklwegsd, Хотя должно, при тех-же данных в обычной форме все выводится

Добавлено через 9 минут
ДокументРезультат — Это как я понимаю, мой Результат, который на форме создался?



0



Эксперт 1С

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

Помогаю со студенческими работами здесь

Переполнение стека
Всем привет. Помогите, пожалуйста с решением одной проблемы. Мне нужно в программе обрабатывать…

переполнение стека!
вот кодprocedure TForm1.CheckBox7Click(Sender: TObject);
begin
if checkbox7.Checked=false then…

Переполнение стека
Всем привет!

пишу программу, в ней достаточно много массивов, процедур и есть рекурсия….

Переполнение стека
Всем привет. Вобщем почему-то пишет переполнение стека, в чем проблема воот листинг:

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

Комментарии доступны только авторизированным пользователям

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Перепишите программу на языке паскаль исправив ошибки program primer var a b integer begin
  • Победа над фашизмом морфологическая ошибка