Имя: Пароль:
1C
1С v8
Ошибка компиляции при вычислении выражения или выполнении фрагмента кода
0 vdeemer
 
27.04.17
14:19
Доброго дня!
1С:Предприятие 8.3 (8.3.9.2170), Управление производственным предприятием, редакция 1.3 (1.3.90.1). Формы обычные.
Есть кусок кода (хранится в справочнике):

Если Не ГМЗ_СогласованиеДокументов.ТребоватьПроверкуРасценкиЗаказногоЛимита(ПараметрыВыполненияКода.СсылкаДокумента) Тогда
    // Два ЕСЛИ, чтобы сократить длину строки
    Если (ПараметрыВыполненияКода.НовоеСостояниеДокумента = Перечисления.ГМЗ_СостоянияДокументов.Согласован) Тогда
        Если (ПараметрыВыполненияКода.НовоеСостояниеДокумента = Перечисления.ГМЗ_СостоянияДокументов.Утвержден) Тогда
            прм_Запрос = Новый Запрос;
            прм_Запрос.Текст =
                "ВЫБРАТЬ РАЗЛИЧНЫЕ
                |    ГМЗ_УстановкаЦенМатериаловЛимитов.Ссылка
                |ИЗ
                |    Документ.ГМЗ_УстановкаЦенМатериаловЛимитов КАК ГМЗ_УстановкаЦенМатериаловЛимитов
                |ГДЕ
                |    ГМЗ_УстановкаЦенМатериаловЛимитов.Проведен = ИСТИНА
                |    И ГМЗ_УстановкаЦенМатериаловЛимитов.ДокументЛимитов = &ДокументЛимитов";
            прм_Запрос.УстановитьПараметр("ДокументЛимитов", ПараметрыВыполненияКода.СсылкаДокумента);
            прм_РезультатЗапроса = прм_Запрос.Выполнить();
            прм_Выб = прм_РезультатЗапроса.Выбрать();
            прм_НовоеСостояние = Перечисления.ГМЗ_СостоянияДокументов.Утвержден;
            прм_Комментарий = "Утвержден при утверждении документа лимита";
            прм_РезОперации = "";
            Пока прм_Выб.Следующий() Цикл
                прм_СтрК = Новый Структура("Состояние, Комментарий", прм_НовоеСостояние, прм_Комментарий);
                прм_Рез = ГМЗ_СогласованиеДокументов.УстановитьНовоеСостояниеДокумента(прм_Выб.Ссылка, прм_СтрК);
                прм_РезОперации=?(прм_РезОперации = "","",прм_РезОперации +Символы.ПС+"Утверждение "+СокрЛП(прм_Выб.Ссылка)+":"+?(прм_Рез = "", "ОК", "ОШИБКА!!! " + прм_Рез));
            КонецЦикла;
            ПараметрыВыполненияКода.СтатусОбработкиДокумента = прм_РезОперации;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;


В модуле формы обработки вызываю
ПараметрыВыполненияКода = Новый Структура("СсылкаДокумента, СсылкаПроверяемогоЭтапа, НовоеСостояниеДокумента, СтатусОбработкиДокумента");
ПараметрыВыполненияКода.СсылкаДокумента = СтрокаТабличнойЧасти.Ссылка;
ПараметрыВыполненияКода.СсылкаПроверяемогоЭтапа = НовыйЭтап;
ПараметрыВыполненияКода.НовоеСостояниеДокумента = НовоеСостояниеТекущегоДокумента;
ПараметрыВыполненияКода.СтатусОбработкиДокумента = "";
Выполнить(КодПостОбработки);
...
Вылезает вот такая ошибка: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(37,96)}: Ожидается символ ')'
Несмотря на это, при вставке кода напрямую в модуль формы (вместо Выполнить(КодПостОбработки)) все работает!
Я пытался уменьшить длину строк текста, все тщетно. Может, есть какие-то ограничения платформы?
Спасибо.
1 бомболюк
 
27.04.17
14:21
напиши чему равно КодПостОбработки, наверняка где нить кавычки двойные не поставил.
2 vdeemer
 
27.04.17
14:23
(1) КодПостОбработки как раз равен первому куску кода
3 vdeemer
 
27.04.17
14:24
ха-ха... я тут подумал - а двойные кавычки я-то не окружил....
4 vdeemer
 
27.04.17
14:25
(3) а вообще их надо окружать? текст должен выполниться "как есть" или нет?
5 PLUT
 
27.04.17
14:31
тут недавно выяснилось, что для Выполнить() вообще скопки () нах не нужны

Выполнить "Сообщить(ИмяКомпьютера())"
6 vdeemer
 
27.04.17
14:36
(5)
Выполнить (Execute)
Синтаксис:
Выполнить(<Строка>)

Параметры:
<Строка>
Строка, содержащая текст исполняемого кода.

в СП скобки как бы на месте...
7 vdeemer
 
27.04.17
14:38
(4) Ну сам могу ответить - ничего не надо окружать, у меня, оказывается, есть еще подобный момент (выполняется код из реквизита элемента справочника), там создается запрос, есть строковые константы - все выполняется "на ура". Короче - плавающая ошибка какая-то.
8 PLUT
 
27.04.17
14:50
(6) без скобок тоже нормально работает
9 George Wheels
 
27.04.17
14:58
Где-то уже с этим сталкивался. При получении из справочника этого кода он дополнительно берётся в кавычки. Получается что-то типа
Выполнить(""Код"")
10 vdeemer
 
27.04.17
15:35
Аааа!!! Лошара я, признаю. Дело не в кавычках - выполнялся реально другой код, там действительно скобка не стоит. Всем спасибо, все свободны))
Основная теорема систематики: Новые системы плодят новые проблемы.