Имя: Пароль:
1C
 
Как повесить клиент при отладке или же сложно о простом
0 mayet
 
14.08.18
21:26
Здравствуйте, сегодня уперся в очень неприятную ситуацию

&НаСервере
Функция ИмпортироватьОбъект(Путь)
        Текст = Новый ЧтениеТекста;
        Текст.Открыть(Путь);
        
        ИмяДокумента = "";
        
        
        ит = 0;
        Стр = " ";
        Пока Стр <> Неопределено Цикл
            Стр = Текст.ПрочитатьСтроку();
            Если ит = 0 тогда
                Если Стр = "#Метаданные:" тогда
                    ИмяКонф = Текст.ПрочитатьСтроку();
                    ВерсияКонф = Текст.ПрочитатьСтроку();
                    Если Метаданные.Имя = ИмяКонф тогда
                        Если Метаданные.Версия = ВерсияКонф Тогда
                            Сообщить("Конфигурация и версия начальной и конечной базы совпадают");
                        Иначе
                            Сообщить("Версии конфигураций начальной и конечной базы не совпадают"
                                + "//"+ ИмяКонф+":"+ВерсияКонф);
                        КонецЕсли;
                    Иначе
                        Сообщить("Конфигурации начальной и конечной базы не совпадают"
                        + "//"+ ИмяКонф+":"+ВерсияКонф);                        
                    КонецЕсли;
                    
                    ИмяДокумента = Текст.ПрочитатьСтроку();
                    Сообщить(ИмяДокумента);
                КонецЕсли;
            КонецЕсли;
            
            Если Стр = "#Реквизиты:" тогда
                Сообщить("Реквизиты найдены");
                Попытка
                    НовыйДок = Документы[имяДокумента].СоздатьДокумент();
                    Пока (Стр = Текст.ПрочитатьСтроку()) <> неопределено
                            или Стр <> "#Табличные части:" Цикл
                        Попытка
                            НовыйДок[Лев(Стр, Найти(Стр, "=")-1)] = Прав(Стр, Найти(стр, "=" + 1));    
                        Исключение
                            Сообщить("Ошибка при разборе реквизитов");
                        КонецПопытки;
                    КонецЦикла;
                Исключение
                    Сообщить("Документ в текущей конфигурации не найден");
                    Возврат null;
                КонецПопытки;                    
            КонецЕсли;
            ит = ит + 1;                        
        КонецЦикла;    
        Текст.Закрыть();
        Возврат НовыйДок;
КонецФункции


Эта чудесная и страшная функция полностью подвешивает клиент в котором выполняется. Предположительно все строки из файла находит, в отладочной печати эта функция ничего не выводит, подскажите, где зациклился?
1 Cyberhawk
 
14.08.18
21:33
Остановить отладчик и посмотреть текущую строку не судьба?
2 Доминошник
 
14.08.18
21:36
(0) Если "играть в угадайку", я бы задумался об этом условии цикла

                   Пока (Стр = Текст.ПрочитатьСтроку()) <> неопределено
                            или Стр <> "#Табличные части:" Цикл
3 H A D G E H O G s
 
14.08.18
21:37
Проблема в 3 местах, они уже могут быть Неопределено
                   ИмяКонф = Текст.ПрочитатьСтроку();
                    ВерсияКонф = Текст.ПрочитатьСтроку();
ИмяДокумента = Текст.ПрочитатьСтроку();
4 H A D G E H O G s
 
14.08.18
21:37
Ну а в целом - проблема в рукопопости.
5 tesseract
 
14.08.18
23:15
(4) Там еще и СОКЛП нигде нет и возврат null в центре цикла,  и прочее и прочее.
6 mayet
 
15.08.18
14:33
Доминошник, Большое спасибо! Действительно забыл что в условии ни в каком случае нельзя манипулировать переменными
7 Вафель
 
15.08.18
14:34
(6) это тебе не ява какая нибудь