ТурбоМД: решение проблемы загрузки мокселей Ключевые слова: ТурбоМД, 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) |