Книга знаний

1С:Предприятие / Приемы программирования / Внешние компоненты

ТурбоМД: решение проблемы загрузки мокселей

С использованием 1С++Автор статьи: jbond | Редакторы:
Последняя редакция №2 от 15.05.06 | История
URL: http://kb.mista.ru/article.php?id=222

Ключевые слова: ТурбоМД, TurboMD, Моксель, динамическая, загрузка


ВК ТурбоМД (Книга знаний: OpenConf: пишем скрипты для конфигуратора 1С 7.7 (статья)) позволяет работать с динамической загрузкой модулей и форм.
С выгруженными мокселями(шаблонами таблиц) он работать не умеет.

Для решения проблемы подгрузки шаблонов MXL, выгруженных с помощью скрипта TurboMD.vbs используйте
следующую технику.
Вам понадобится ВК 1С++ (www.1cpp.ru) версии 2.0.2:

Создайте класс-наследник от Таблица с методом

class ТаблицаТМБ = ТаблицаТМБ.ert: Таблица
{
Число ИсходнаяТаблица (Строка Имя, Строка Путь="");
}

// начало класса Wizard1C++ 
// ТаблицаТМБ
//TODO:
//Совместимость с 1С++ 1.8.0.2 (там не было в пути /Форма) - сделано
Перем РФ; //: РасширениеФормы
Перем ВремяМД;

Перем КаталогТМД Экспорт;

//------------------------------------------------------------------------------
Функция        GetThis(Конт)     Возврат Конт;                     КонецФункции //: Контекст
Функция     Этот()             Возврат GetThis(Контекст);        КонецФункции //: Контекст
//------------------------------------------------------------------------------

//******************************************************************************
//
Функция ВремяПоследнЗаписи(ИмяФайла)
    Перем ВремяПоследнЗаписи;
    ФС.АтрибутыФайла(ИмяФайла,,,,,ВремяПоследнЗаписи);
    Возврат ВремяПоследнЗаписи;
КонецФункции

//------------------------------------------------------------------------------
Процедура Конструктор()
    РФ = СоздатьОбъект("РасширениеФормы");
    КаталогБД = СокрЛП(КаталогИБ());
    КаталогТМД = КаталогБД + "unpack\";
    ВремяМД = ВремяПоследнЗаписи(КаталогБД + "1Cv7.MD");
КонецПроцедуры // Конструктор

//******************************************************************************
//
Функция ПолучитьПутьТаблица(Имя)
    Если ФС.СуществуетФайл(Имя) = 0 Тогда
        РФ.УстановитьФорму(Этот().ПолучитьКонтекстОкружения().Форма);
        ПутьВнешнийШаблон = КаталогТМД + СтрЗаменить(РФ.ПолныйТипОбъекта(),".","\");
        Если  СтрЧислоВхождений(ПутьВнешнийШаблон,"Форма") = 0 Тогда
            ПутьВнешнийШаблон = ПутьВнешнийШаблон + "\Форма"
        КонецЕсли;
        ПутьВнешнийШаблон = ПутьВнешнийШаблон + "\" + Имя + ".mxl";
        Если ФС.СуществуетФайл(ПутьВнешнийШаблон) <> 0 Тогда  // Если таблица формы выгружалась
            Если ВремяПоследнЗаписи(ПутьВнешнийШаблон) > ВремяМД Тогда
                Возврат ПутьВнешнийШаблон;
            КонецЕсли
        КонецЕсли
    КонецЕсли;
    
    Возврат Имя;
КонецФункции

//******************************************************************************
//
Функция ИсходнаяТаблица(Имя, Путь) Экспорт
    База = Этот().ПолучитьБазовыйКласс("Таблица");
    Если ПустаяСтрока(Путь) = 1 Тогда
        База.ИсходнаяТаблица(ПолучитьПутьТаблица(Имя));
        Возврат 2;
    Иначе  //Вариант для версии FormEx 2.0.2
        Возврат База.ИсходнаяТаблица(Имя, Путь);
    КонецЕсли;
КонецФункции // ИсходнаяТаблица()

//******************************************************************************
//
Функция  SourceTable (Имя, Путь) Экспорт
    Возврат ИсходнаяТаблица(Имя, Путь)
КонецФункции // ИсходнаяТаблица()

// завершение класса Wizard1C++ !!



Использование:
Таб = СоздатьОбъект("ТаблицаТМБ");
Таб.ИсходнаяТаблица("Печать");

Теперь метод ИсходнаяТаблица будет пытаться загрузить шаблон, выгруженный с помощью скрипта ТубоМД::UnloadCurrentWnd.

Вероятно, это самый "правильный" вариант. Он должен работать и на старых версиях 1С++ (>=1.8)

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика