Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Крах системы при работе с деревом значений
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
GwM_1956
Есть документ, табличное поле на форме документа, значение - ДеревоЗначений, тип - Дерево. Интерактивно формируем список номенклатуры в виде дерева (по аналогии с набором для продажи), т.е. Номенклатура1 - это узел, номенклатура2...4 = это состав узла. Все работает нормально, никаких проблем. При попытке создать узел следующего уровня - крах системы, создается дамп памяти и все.
Подобным образом написанная обработка работает без всяких ограничений по глубине вложения узлов...
Что делать? голова кругом идет, начальство жаждет крови!!!!
Vofka
Ну вы б пример какой-то состряпали, чтоб на типовой какой-нить проверить можно было у себя.
logist
Цитата(GwM_1956 @ 16.10.13, 8:40) необходимо зарегистрироваться для просмотра ссылки
Подобным образом написанная обработка работает без всяких ограничений по глубине вложения узлов...

Потому, что обработка не хранит данные в базе, и поэтому не содержит ограничений на количество строк. А табличная часть документа, которая хранит данные в базе, имеет ограничение на 99 999 строк. Возможно это и есть причина вашей проблемы, иначе это баг платформы, обращайтесь в суппорт 1С.
GwM_1956
Цитата(Vofka @ 16.10.13, 7:50) необходимо зарегистрироваться для просмотра ссылки
Ну вы б пример какой-то состряпали, чтоб на типовой какой-нить проверить можно было у себя.


Показать кусок кода?
Vofka
Цитата(GwM_1956 @ 16.10.13, 10:10) необходимо зарегистрироваться для просмотра ссылки
Показать кусок кода?

Покажите. Тока так, чтоб он не выбрасывал ошибок в какой-то типовой конфе. Запущу, проверю. Если отработает - будем знать, что именно с кодом все нормально.
GwM_1956
Цитата(Vofka @ 16.10.13, 9:18) необходимо зарегистрироваться для просмотра ссылки
Покажите. Тока так, чтоб он не выбрасывал ошибок в какой-то типовой конфе. Запущу, проверю. Если отработает - будем знать, что именно с кодом все нормально.


Процедура КоманднаяПанельДеревоЗаявкиДобавитьВСтроку(Кнопка)
    
    //НоваяСтрока = ЭлементыФормы.ТабличноеПолеДеревоЗаявки.ТекущаяСтрока.Строки.Добавить();
    мИдентификаторТекущейСтроки     = ЭлементыФормы.ТабличноеПолеДеревоЗаявки.ТекущиеДанные.ПолныйАдресВДеревеСтруктуры;
    СтрокаТекущегоУзла                            = ДеревоЗаявки.Строки.Найти(мИдентификаторТекущейСтроки, "ПолныйАдресВДеревеСтруктуры", Истина);
    мСтрокаДеревоЗаявки                    = СтрокаТекущегоУзла.Строки.Добавить();        
    
КонецПроцедуры


 ! 

Правила, п. 12
 


Конфигурация - Бухгалтерия типовая для украины, 1.2.13.4
Платформа - 8.2.18.109 /
logist
ДеревоЗаявки.Строки.Найти возвращает строку. Соответственно, что бы добавить надо использовать СтрокаТекущегоУзла.Добавить();
Vofka
GwM_1956, то что вы выложили код и озвучили конфу - это хорошо, но куда мне этот код вставить, чтобы воспроизвести ошибку? Если это какая-то обработка - выложите саму обработку, чтобы можно было открыть, запустить и посмотреть что произойдет. Попробуйте на копии базы сделать тестирование/исправление или на любой другой базе попробовать запустить то, что вы написали.

Цитата(logist @ 16.10.13, 13:17) необходимо зарегистрироваться для просмотра ссылки
ДеревоЗаявки.Строки.Найти возвращает строку. Соответственно, что бы добавить надо использовать СтрокаТекущегоУзла.Добавить();

Выше все правильно написано. У строки нету метода Добавить().
GwM_1956
Цитата(logist @ 16.10.13, 13:17) необходимо зарегистрироваться для просмотра ссылки
ДеревоЗаявки.Строки.Найти возвращает строку. Соответственно, что бы добавить надо использовать СтрокаТекущегоУзла.Добавить();

к большому сожалению, у строки нет такого метода "Метод объекта не обнаружен (Добавить)"...
Метод "добавить" существует только у коллекции строк... Увы
GwM_1956
Цитата(Vofka @ 16.10.13, 12:37) необходимо зарегистрироваться для просмотра ссылки
GwM_1956, то что вы выложили код и озвучили конфу - это хорошо, но куда мне этот код вставить, чтобы воспроизвести ошибку? Если это какая-то обработка - выложите саму обработку, чтобы можно было открыть, запустить и посмотреть что произойдет. Попробуйте на копии базы сделать тестирование/исправление или на любой другой базе попробовать запустить то, что вы написали.


Выше все правильно написано. У строки нету метода Добавить().


Уважаемый Vofka !
В том то и весь прикол, что в обработке аналогичный код работает без проблем, хоть до десятого уровня вложения... А в документе - нет, как вынуть документ, я честно говоря, не знаю...
ТиИ, проверка самой базы утилиткой, выгрузка-загрузка ничего не дали, увы
Vofka
А что находится в переменной СтрокаТекущегоУзла ? И что такое ДеревоЗаявок?
logist
Цитата(GwM_1956 @ 16.10.13, 16:28) необходимо зарегистрироваться для просмотра ссылки
в обработке аналогичный код работает без проблем

Выложите где-то обработку, и дайте ссылку. Иначе это разговор немого с глухими.
Vofka
Цитата(logist @ 16.10.13, 18:26) необходимо зарегистрироваться для просмотра ссылки
Выложите где-то обработку

Толку от обработки? Там все работает smile.gif
logist
Цитата(Vofka @ 16.10.13, 19:58) необходимо зарегистрироваться для просмотра ссылки
Толку от обработки?

Ну CF с документом тогда, который ошибку выдает. Почему обработку прошу, судя по коду приведенному выше, у меня есть сомнения, что и обработка работает.
GwM_1956
Спасибо всем, причину краха нашел - подсказало ваше предложение сделать CF с документом ....
Суть ошибки - при рекурсивном подсчете количества строк в дереве (вывожу в заголовке закладки формы) передавался неверный параметр
Причина ошибки - уставшие глаза, невнимательность и огромный модуль формы...

Огромное всем спасибо еще раз
Vofka
Так а че вываливалось то?
alex040269
похоже на бесконечную рекурсию
GwM_1956
Цитата(alex040269 @ 17.10.13, 20:52) необходимо зарегистрироваться для просмотра ссылки
похоже на бесконечную рекурсию


Вы правы, судя по всему это была бесконечная рекурсия, насколько я понимаю, стек вызовов переполнялся - но почему это не отловила сама 1С ? Неужели нет механизма собственной защиты? Чудеса разработчиков
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.