Имя: Пароль:
1C
1С v8
Не срабатывает встроенна функция "Выполнить"
,
0 Night_Wolf
 
09.09.11
12:32
Есть код:

ДБФ = Новый XBase;
ТЗ  = Новый ТаблицаЗначений;
Попытка
   ДБФ.ОткрытьФайл(СтрокаТЧ.Путь);
Исключение    
   Сообщить("Не удалось открыть файл: "+СтрокаТЧ.Путь);
   Продолжить;                                        
КонецПопытки;
       
// создадим таблицу значений, для чтения в неё строк файла.                
ТЗ.Колонки.Добавить("ИД_Потр");
ТЗ.Колонки.Добавить("Имя_Потр");
ТЗ.Колонки.Добавить("Удален");
       
ДБФ.Первая();
Пока НЕ ДБФ.ВКонце() Цикл
   СтрокаТЗ          = ТЗ.Добавить();
   СтрокаТЗ.ИД_Потр  = ДБФ.idpotr;
   СтрокаТЗ.Имя_Потр = ДБФ.namepotr;
   СтрокаТЗ.Удален   = ДБФ.udalen;
   ДБФ.Следующая();
КонецЦикла;    
       
// Обработка таблицы
ОбщееКоличество = ТЗ.Количество();
к = 1;
Для каждого СтрокаТЗ из ТЗ Цикл
   ОбработкаПрерыванияПользователя();    
   Состояние("Обработка потребителей. Выполнено: "+Строка(Окр(к/ОбщееКоличество*100))+"%");
   ЭлементСправочникаСсылка = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаТЗ.ИД_Потр));
   ЭлементСправочникаОбъект = ЭлементСправочникаСсылка.ПолучитьОбъект();
   Если ЭлементСправочникаОбъект = Неопределено Тогда
       ЭлементСправочникаОбъект = Справочники.Контрагенты.СоздатьЭлемент();
       ЭлементСправочникаОбъект.УстановитьСсылкуНового(ЭлементСправочникаСсылка);                        
   КонецЕсли;                                        
   ЭлементСправочникаОбъект.Наименование = СтрокаТЗ.Имя_Потр;
   ЭлементСправочникаОбъект.ПометкаУдаления = СтрокаТЗ.Удален;
   ЭлементСправочникаОбъект.Записать();
   к = к + 1;                    
КонецЦикла;
               
Сообщить("Файл """+СтрокаТЧ.Путь+""" успешно загружен!");

Он прекрасно отлажен и работает. Я никак не могу понять, почему когда яя подаю его в качестве строки в функцию выполнить, пишет "Ошибка компиляции при вычислении выражения или выполнении фрагмента кода". Подскажите пожалуйста.
1 Fragster
 
гуру
09.09.11
12:33
с кавычками накосячил
2 GenV
 
09.09.11
12:35
(0) Через ИнформацияОбОшибке() можно узнать на какой строке ошибка ...
3 Night_Wolf
 
09.09.11
12:35
С какими кавычками? Код копирую в процедуру обработки вместо Выполнить(ТекстПроцедуры); - работает прекрасно.
4 Живой Ископаемый
 
09.09.11
12:35
то есть на самом деле срабатывает, и даже сообщает об ошибке...
5 Night_Wolf
 
09.09.11
12:37
(4) Ну как срабатывает - переходит в исключение.  
(2) ИнформацияОбОшибке() - пустая совсем.
6 azernot
 
09.09.11
12:37
Выполнить(СтрЗаменить(ТекстПроцедуры,"""","""""");
7 GenV
 
09.09.11
12:38
(5) Сначала присвой переменной. Затем переменную смотри в отладчике )
8 Night_Wolf
 
09.09.11
12:42
(6) - Не совсем понятно для чего это.
(7) - Спасибо, сейчас попробую.
9 Night_Wolf
 
09.09.11
12:46
(7) - спасибо за подсказку. Я нашел ошибку. "Оператор Продолжить можт быть использован только внутри цикла". Но тогда возникает ещё одна интересная ситуация - я бегу по табличной части и выполняю построчно процедуры, написанные в строках таб. части. То есть получается что функция "Выполнить" не видит цикла по строкам ТЧ? Я хочу, чтобы если процедура не отработала, то переходила к следующей строке.
10 Живой Ископаемый
 
09.09.11
12:47
то есть наврал нам что код прекрасно отлажен и работает... понятно
11 Живой Ископаемый
 
09.09.11
12:47
2(9) используй "Возврат;"
12 GenV
 
09.09.11
12:48
(9) Код в Выполнить должен быть самодостаточный. Или выноси код с Продолжить или делай через флаг и Если Тогда
13 Night_Wolf
 
09.09.11
12:58
(10) - не наврал. Если вставить его вместо "Выполнить", то он работает. Просто я не знал, что он должен быть "самодостаточный". Теперь знаю. Спасибо всем!
Закон Брукера: Даже маленькая практика стоит большой теории.