выбрасывает из 1С Помогите пожалуйста. При попытке открыть определенный документ 1С закрывается. Таких документов несколько. Я нашел 3 за последний год. Выбрасывает после загрузки строкового реквизита документа в таблицу значений при попытке определить количество строк ТОбъект.Загрузить(ЗначениеИзСтроки(Заказ.Объект)); Количество = ?(ТипЗначенияСтр(ТОбъект) = "ТаблицаЗначений", ТОбъект.КоличествоСтрок(), 1); Сделал тестирование и исправление базы. Не помогло. |
Удалением без контроля ссылочной целостности балуемся? |
нет |
Попрубй так: ТОбъект.Загрузить(ЗначениеИзСтроки(Заказ.Объект)); Если ТипЗначенияСтр(ТОбъект) = "ТаблицаЗначений" тогда ТОбъект.ВыбратьСтроку(); Количество = ТОбъект.КоличествоСтрок() Иначе Количество = 1 КонецЕсли; |
3-victuan >Окно с таблицей появляется на экране? |
2-klimkkk > Чудес на свете не бывает. Организуй новую базу, и перенеси туда данные через файл обмена. |
Возможно ТОбъект не имеет ТЧ. |
6-Зомби >Да, это можно проверить через ТОбъект.КоличествоКолонок() |
(7)Лучше количество получить в попытке а исключением высветить бяку. |
Нет. Опять выбросило |
исключение тоже выбрасывает |
Строка имеет неограниченную длину Если просто присваиваю пустую строку, то все решается, но данных нет. Если пишу например Лев (Объект, 10000) тоже выбрасывает |
10-klimkkk > См. (5) |
Объект паковался ЗначениеВСтрокуВнутр()? |
ЗначениеВСтроку() |
А выгрузка-загрузка ругаецца? |
Обычно делаю СОХРАНИТЬ ДАННЫЕ и потом тестирование Сейчас делаю ВЫГРУЗИТЬ/ЗАГРУЗИТЬ |
11-klimkkk > "Строка имеет неограниченную длину" - в табличной части?? Кто научил? |
нет не в табличной. В шапке. Конфа не моя |
вообще странно, т.к. если бы там был не отот объект, или бтый и т.д. - была бы просто ошибка самого 1С про нет метода и т.д., а не закрытие. Можно точнее - как закрывается 1С ? И как нашли именно это место вылета - пошагово отладчиком ? А если в отладчике глянуть значение ТипЗначенияСтр(ТОбъект) ? |
18-klimkkk > Перемести реквизит в конец списка. |
9-klimkkk >Значит выбрасывает на методе ТОбъект.Загрузить(ЗначениеИзСтроки(Заказ.Объект)); а не на КоличествоСтрок() 17-VZ >Строка неогр. длины в табличной части не бывает - ограничение платформы. |
В отладчике содержимое строки показывает и перебрасывает в таблицу значений. Выбрасывает при попытке определить количество строк. Сначала пишет выполняется обработка, а потом просто закрывает Предприятие |
22-klimkkk >отладчик при вылетах может ошибаться, особенно если выражение завернуто в Попытку. Попробуй убрать строку с КоличествоСтрок() - будет вылет? Ты код в (3) проверил? Перед вылетом на экране появляется таблица (метод ВыбратьСтроку())? Если вылет на методе КоличествоСтрок, то таблица должна появится, т.к. ее метод стоит раньше. |
23-victuan >КоличествоСтрок() убирал. Вылета нет Код (3) тоже проверил. Таблицы нет. |
24-klimkkk >а должна быть! |
скорее всего пытается записать в таблицу какой то большой объем и вырубается. Как то можно подругому кроме Лев (Объект, 10000) и фиксированного размера строки в конфигураторе ограничить длину конкретного документа? |
[quote=klimkkk;25394025]и фиксированного размера строки в конфигураторе ограничить длину конкретного документа? [/quote]что за чушь? смотри как эта "длина" формируется |
(26) Тогда уж: Если ТипЗначенияСтр(ТОбъект) = "ТаблицаЗначений" тогда Для Сч=0 по 10000 Цикл Попытка СтрокаТЗ= ТОбъект.ПолучитьстрокуПоНомеру(Сч); Исключение Сообщить("На "+Сч+" заткнулось!"); Прервать; КонецПопытки; КонецЦикла; |
в ТЗ похоже пихается что-то очень большое... |
Я это и имел ввиду, но как обрезать? |
30-klimkkk >Ты (28) проверил? Почему нет? |
28-Зомби > Заткнулось на нуле |
32-klimkkk >там ошибка в коде, замени одну строчку: [em]Для Сч=[b]1[/b] по 10000 Цикл[/em] |
33-victuan > Заткнулось на 1 |
34-klimkkk >34-klimkkk >Значит первая строка уже невалидна. Кодом из 1С эту проблему не решить никак. |
ВЫгрузка/загрузка закончилась. Результат тот-же |
а если убрать оператор [em]Прервать[/em], то на на других строках тоже затыкается? Т.е. на всех без исключения? |
37-victuan >Не затыкается. Выводит сообщение На 1 заткнулось! |
38-klimkkk >Значит проблема только в 1-ой строчке, поэтому не срабатывает, видимо, КоличествоСтрок. Значит не пользуйся этим методом, просто в цикле тупо перебирай строки, читая всё что удастся прочесть. |
Текущее время: 08:34. Часовой пояс GMT +3. |