Имя: Пароль:
1C
1C 7.7
v7: класс ВыполняемыйМодуль, ошибка в компиляции. не пойму в чем причина.
0 Skom
 
15.10.14
10:33
Есть у меня в конфе класс Выполняемый модуль.

Есть внешняя обработка, которая работает с этим модулем.

Когда открываю внешнюю обработку, то все работает нормально. Модуль компилируется, когда встраиваю обработку в конфу, то модуль не компилируется.
вот текст компилируемого модуля

|Процедура УстановитьЗначение(НовоеЗначение)
|    Карта = НовоеЗначение;
|    ПриИзмененииКарты();
|КонецПроцедуры
1 Skom
 
15.10.14
10:35
Модуль.НазначитьКонтекст(КонтекстФормы);
Модуль.КомпилироватьМодуль();

Вот на компиляции модуля говорит, что Процедура ПриИзмененииКарты не обнаружена.

Это в том случае, когда обработка встроена в конфигурацию.
Если такую же обработка запускаю как внешнюю обработку, то все отлично работает.
2 lavalit
 
15.10.14
12:31
Должна быть Экспортная
3 Skom
 
15.10.14
12:32
пробовал. не работает.
4 lavalit
 
15.10.14
12:32
Как внешняя обработка конечно будет работать, но еслиона как класс работает, то обязательнонадо Экспортное делать.. и переменные, которые хотите доставать оттудова тоже Экспортные...
5 Ёпрст
 
15.10.14
12:32
а сама ПриИзмененииКарты где хоть описана ?
6 Skom
 
15.10.14
12:33
обработка 1в1 загружается из внешней в конфу.
во внешней работает, внутри конфы - нет.
7 Skom
 
15.10.14
12:33
(5) в форме обработки
8 Skom
 
15.10.14
12:34
Обработка это не класс.
Обработка это обычная обработка, в моем случае это просто рабочее место.
9 lavalit
 
15.10.14
12:35
А это что было? "Есть у меня в конфе класс Выполняемый модуль. "
10 lavalit
 
15.10.14
12:36
ТО естьнекая обработка которая используеткакой то класс? и Вы хотите ее впихнуть в конфу*
11 Skom
 
15.10.14
12:38
(10) нет)
12 Ёпрст
 
15.10.14
12:40
проверил, всё работает
Процедура ПриИзмененииКарты()
    Сообщить("ой");
КонецПроцедуры // ПриИзмененииКарты
Процедура Выполнить()
    ТекстМодуля="
    |Процедура УстановитьЗначение(НовоеЗначение)
    |    Карта = НовоеЗначение;
    |    ПриИзмененииКарты();
    |КонецПроцедуры    
    |";
    Модуль = СоздатьОбъект("ВыполняемыйМодуль");
    Модуль.НазначитьКонтекст(Контекст);
    Модуль.УстановитьМодуль(ТекстМодуля);
    Модуль.КомпилироватьМодуль();
КонецПроцедуры // сформировать
13 Skom
 
15.10.14
12:48
Класс Общие.ПолеВыбораЗначения
встроен в конфигурацию.

Процедура Инит(Конт, _ИдентификаторПоляВвода, ИдентификаторМаскирующегоТекста, _МаксКоличествоЭлементов, _ТолькоПоКнопкеВвода = 0, _МаскаПоиска = "") Экспорт
    КонтекстФормы            = Конт;
    ИдентификаторПоляВвода    = _ИдентификаторПоляВвода;
    ПолеНаФорме                = КонтекстФормы.Форма.ПолучитьАтрибут(ИдентификаторПоляВвода);
    Если ПустаяСтрока(ИдентификаторМаскирующегоТекста) = 1 Тогда
        ИдентификаторМаскирующегоТекста = "текстМаска" + ИдентификаторПоляВвода;
    КонецЕсли;
    ИдентификаторТекстаНаФорме = ИдентификаторМаскирующегоТекста;
    Попытка
        ТекстНаФорме = КонтекстФормы.Форма.ПолучитьАтрибут(ИдентификаторМаскирующегоТекста);
    Исключение
        //Текстового поля на форме нет - ну и не будем ничего показывать
        ТекстНаФорме = "";
    КонецПопытки;
    
    МаксКоличествоЭлементов    = _МаксКоличествоЭлементов;
    МинКоличествоСимволов    = 0;
    стрПрефиксНаименования    = "";
    фЕстьРамка                = 1;
    фДляТабличногоПоля        = 0;
    ТолькоПоКнопкеВвода        = _ТолькоПоКнопкеВвода;
    МаскаПоиска = _МаскаПоиска;
    
    ПоказатьТекстНаФорме("", 0);
    
    //JohnyDeath 18.11.2006 {
    АтрФормы = СоздатьОбъект("АтрибутФормы");
    АтрФормы.УстановитьАтрибут(КонтекстФормы.Форма,ИдентификаторПоляВвода);
    ФормулаПоляВвода = СокрЛП(АтрФормы.Формула);
    Если Прав(ФормулаПоляВвода,1)<>";" Тогда
        ФормулаПоляВвода=ФормулаПоляВвода+";";
    КонецЕсли;
    // } JohnyDeath 18.11.2006
    АтрФормы.АвтоВыбор = 0;
    
    Модуль = СоздатьОбъект("ВыполняемыйМодуль");
    Модуль.УстановитьМодуль("
    |Функция ПолучитьЗначение()
    |    Возврат "+ИдентификаторПоляВвода+";
    |КонецФункции
    |
    |Процедура УстановитьЗначение(НовоеЗначение)
    |    "+ИдентификаторПоляВвода+" = НовоеЗначение;
    |    "+ФормулаПоляВвода+"  //JohnyDeath 18.11.2006
    |КонецПроцедуры
    |
    |Функция Тип()
    |    Возврат ТипЗначенияСтр("+ИдентификаторПоляВвода+");
    |КонецФункции
    |
    |Функция Вид()
    |    Попытка
    |        Возврат "+ИдентификаторПоляВвода+".Вид();
    |    Исключение
    |        Возврат """";
    |    КонецПопытки;
    |КонецФункции
    |");
    Модуль.НазначитьКонтекст(КонтекстФормы);
    Модуль.КомпилироватьМодуль();
    Модуль.ВыполнитьМодуль();
    
    Тип = Модуль.Тип();
    Если Тип = "Справочник" Тогда
        ВидСправочника = Модуль.Вид();
        //Сообщить(""+ИдентификаторПоляВвода+": "+ВидСправочника+",  "+АтрФормы.ТипЗначенияСтр());
        
        Если ПустаяСтрока(ВидСправочника) = 0 Тогда
            Если ТипЗначения(ВыборГруппы) = 0 Тогда
                ВыборГруппы = ПолеНаФорме.ВыборГруппы();
                Если ВыборГруппы <> 1 Тогда
                    ВыборГруппы = 0;
                КонецЕсли;
            КонецЕсли;
        
            //ПоставщикДанных = СоздатьОбъект("Общие.ПолеВыбораЗначения.ПоставщикДанных.Справочник");
            ПоставщикДанных.Инит(ВидСправочника, ПоискПоВхождению, ВыборГруппы);
        КонецЕсли;
    КонецЕсли;

    ПоказатьТекстНаФорме("", 0);
КонецПроцедуры
14 Skom
 
15.10.14
12:49
Вот если Инит вызывается из внешней обработки, то все норм.
если из встроенной в конфу то ппц.
15 Skom
 
15.10.14
13:02
я собственно выкрутился, просто из меню вызываю внешнюю обработку а не встроенную, но вот интересно все же, почему такое поведение. Да и если удастся сделать встроенную, то все же перекину в конфу обработку.
16 Ёпрст
 
15.10.14
13:04
Не используй левые классы, пиши свои, православные.
17 Skom
 
15.10.14
13:04
это не левый) это садовниковский
18 Ёпрст
 
15.10.14
13:04
а так, всё работает, см (12)

А че , где там у тебя вызывается, откуда ноги растут - лень смотреть даже.