Имя: Пароль:
1C
 
КД 2.0 - ошибка компиляции или вычисления выражения
0 Господин ПЖ
 
29.10.07
13:59
Есть скрипт в ПКО "РасходыБудущихПериодов", событие ПослеЗагрузки:

ИмяСчетаБУ = "СчетБУ";
ИмяСубкБУ = "СубконтоБУ";
ИмяСчетаНУ = "СчетНУ";
ИмяСубкНУ = "СубконтоНУ";
Корреспонденция = Объект;
мСведенияОСчетах = Новый Соответствие;
СведенияОСчете = ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция[ИмяСчетаБУ]);

Для СчетчикСубконто = 1 По 3 Цикл
   
   Для СчетчикСчета = 1 по СведенияОСчете.КоличествоСубконто Цикл
       
       Если (Корреспонденция[ИмяСубкБУ+СчетчикСубконто] = СведенияОСчете["ТипСубконто"+СчетчикСчета].ПривестиЗначение(Корреспонденция[ИмяСубкБУ+СчетчикСубконто])) и (СчетчикСчета <> СчетчикСубконто) Тогда
           
           Субконто = Корреспонденция[ИмяСубкБУ+СчетчикСчета];
           Корреспонденция[ИмяСубкБУ+СчетчикСчета] = Корреспонденция[ИмяСубкБУ+СчетчикСубконто];
           Корреспонденция[ИмяСубкБУ+СчетчикСубконто] = Субконто;
           
       КонецЕсли;
       
   КонецЦикла;
   
КонецЦикла;

Для СчетчикСубконто = 1 По 3 Цикл
   Если СведенияОСчете.КоличествоСубконто >= СчетчикСубконто Тогда
       
       Корреспонденция[ИмяСубкБУ+СчетчикСубконто] = СведенияОСчете["ТипСубконто"+СчетчикСубконто].ПривестиЗначение(Корреспонденция[ИмяСубкБУ+СчетчикСубконто]);
       
   Иначе
       
       Корреспонденция[ИмяСубкБУ+СчетчикСубконто] = Неопределено;
       
   КонецЕсли;
   
КонецЦикла;

Корреспонденция[ИмяСчетаНУ] = ПреобразоватьСчетаБУвСчетНУ(Новый Структура("СчетБУ", Корреспонденция[ИмяСчетаБУ]));
Корреспонденция[ИмяСубкНУ+1] = Корреспонденция[ИмяСубкБУ+1];
Корреспонденция[ИмяСубкНУ+2] = Корреспонденция[ИмяСубкБУ+2];
Корреспонденция[ИмяСубкНУ+3] = Корреспонденция[ИмяСубкБУ+3];
СведенияОСчете = ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция[ИмяСчетаНУ]);

Для СчетчикСубконто = 1 По 3 Цикл
   
   Для СчетчикСчета = 1 по СведенияОСчете.КоличествоСубконто Цикл
       
       Если (Корреспонденция[ИмяСубкНУ+СчетчикСубконто] = СведенияОСчете["ТипСубконто"+СчетчикСчета].ПривестиЗначение(Корреспонденция[ИмяСубкНУ+СчетчикСубконто])) и (СчетчикСчета <> СчетчикСубконто) Тогда
           
           Субконто = Корреспонденция[ИмяСубкНУ+СчетчикСчета];
           Корреспонденция[ИмяСубкНУ+СчетчикСчета] = Корреспонденция[ИмяСубкНУ+СчетчикСубконто];
           Корреспонденция[ИмяСубкНУ+СчетчикСубконто] = Субконто;
           
       КонецЕсли;
       
   КонецЦикла;
   
КонецЦикла;

Для СчетчикСубконто = 1 По 3 Цикл
   
   Если СведенияОСчете.КоличествоСубконто >= СчетчикСубконто Тогда
       
       Корреспонденция[ИмяСубкНУ+СчетчикСубконто] = СведенияОСчете["ТипСубконто"+СчетчикСубконто].ПривестиЗначение(Корреспонденция[ИмяСубкНУ+СчетчикСубконто]);
       
   Иначе
       
       Корреспонденция[ИмяСубкНУ+СчетчикСубконто] = Неопределено;
       
   КонецЕсли;
   
КонецЦикла;

Добавляю в него выгрузку групп, т.к. раньше её не было. Пишу "вокруг" скрипта условие:

Если НЕ Объект.ЭтоГруппа Тогда

.....

КонецЕсли;

При загрузке - при попытке выполнения ПослеЗагрузки - валится с ошибкой "Ошибка компиляции при вычислении выражения или выполнении фрагмента кода". Если перенести код во внеш. обработку - в отладчике код выполняется без ошибок.

В чем тут дело интересно?
1 Господин ПЖ
 
29.10.07
15:35
up
2 GenV
 
29.10.07
15:59
(0) Может какая нибудь функция переопределена в обработке загрузки/выгрузки и количество параметров отличается. Комментариев нет?
3 Господин ПЖ
 
29.10.07
16:07
(2) Нету ничего такого. Коментариев нет. Без условия то работает (если выгрузку групп отключить). А с группами нет :((((((((
4 Господин ПЖ
 
29.10.07
16:10
(+3) Я уже весь мозг сломал - что не так.
5 GenV
 
29.10.07
16:21
(4) Добавить функцию не в модуль внешней обработки, а в конец модуля обработки обмена (или в модуль её формы), и проверь на синтаксис (только параметры нужно указать как в справке к обработчику).
Я обычно через свою обработку генерирую тексты обработчиков вставляю в модуль доп. формы и проверяю - сразу видно строку с ошибкой.
6 Поручик
 
29.10.07
16:23
Вот только сегодня такую же ошибку получил. Но у меня она была связана с использованием Возврат; в событии ПередВыгрузкой.
Попробуй включить режим отладки и такой код

Если НЕ Объект.ЭтоГруппа Тогда

.....

Иначе
   Отказ = Истина;
КонецЕсли;

хз, может поможет.
7 Господин ПЖ
 
29.10.07
16:31
(5) Нормально всё с синтаксисом.
8 Господин ПЖ
 
29.10.07
16:32
(6) Это другое.
9 GenV
 
29.10.07
16:42
(7) Ну, тогда, если не было других изменений у меня единственный вариант - проверять Объект (можно например в попытку засунуть с выводом сообщения) перед получением ЭтоГруппа.
10 GenV
 
29.10.07
16:43
9+ или добавить текст обработчика в виде функции в модуль, а в Выполнить передовать вызов этой функции из модуля, тогда можно использовать точку "останавливать при ошибке".
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан