Modber Сообщество
профессионалов по 1С

Сохранение рабочей конфигурации в файл средствами встроенного языка



Платформы: Linux, Web, Windows
Конфигурации: Все конфигурации
2013-07-11
1697 
Yanita
2  

В этой статье ВЫ узнаете, как можно сохранить рабочую конфигурацию в файл при помощи  встроенного язык,  к примеру из внешней обработки, или при загрузке системы.            

Как можно сохранить рабочую конфигурацию из конфигуратора понятно всем, но ведь это не совсем и не всегда удобно. Мне нужно сохранять рабочую конфигурацию и в это же время этот файл обрабатывать.Так вот предлагаю Вам ознакомится со следующей не сложной процедурой: 

// функция сохраняет рабочую конфигурацию в файл, а при успешном исходе возвращает значение Истина
Вот параметры:
//    Логин — имя пользователя, который обладает правами на администрирование БД
//    Пароль — строка для пароля
//    ИмяФайла — полное имя файла для сохранения конфигурации, оно не обязательно, так как по умолчанию используется каталог временных файлов и имя 1Cv8.cf
функция СохранитьТекущуюКонфигурацию (Логин, Пароль, ИмяФайла="") экспортируем
    результат = Ложь;
    
    Если ИмяФайла = "" Тогда
        ИмяФайла = КаталогВременныхФайлов() + "1Cv8.cf";        
    КонецЕсли;
    
    СтрокаБазы = СтрокаСоединенияИнформационнойБазы();
    Если Лев(СтрокаБазы, 5) = "File=" Тогда
        // вариант для файла
        СтрокаБазы = Сред(СтрокаБазы, 6, СтрДлина(СтрокаБазы) — 6);
    Иначе
        // вариант для сервера, к сожалению, пока не готов...
        возврат Ложь;
    КонецЕсли;
    
    ВыбФайл = Новый Файл(ИмяФайла);
    Если ВыбФайл.Существует() Тогда
        Сигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения()); 
    Иначе
        Сигнатура = "";
    КонецЕсли;
    
    СтрокаЗапуска = """" + КаталогПрограммы() + "1cv8.exe"" CONFIG /F " + СтрокаБазы 
                + ?(Логин = "", "", " /N " + Логин) 
                + ?(Пароль = "", "", " /P " + Пароль) + " /DumpDBCfg """ + ИмяФайла + """";
                
    //            
    // КомандаСистемы (СтрокаЗапуска); не будет работать!!! из-за кавычек в параметрах
    //  поэтому будем обходить кругом...
    // но зато можно избежать черного окошка
    //
    WshShell = Новый COMОбъект("WScript.Shell");
    WshShell.Run(СтрокаЗапуска, 0, Истина);
    
    ВыбФайл = Новый Файл(ИмяФайла);
    Если ВыбФайл.Существует() Тогда
        НоваяСигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
        Если Сигнатура <> НоваяСигнатура Тогда
            Результат = Истина;
        КонецЕсли;            
    КонецЕсли;
    
    Возврат Результат;
КонецФункции


А вот вам пример (работает, когда нет пароля): 

Функция  ЗаписатьКонфигурациюВФайл(ИмяФайла="")
    Результат = Ложь;
    ВыбФайл = Новый Файл(ИмяФайла);
    Если ВыбФайл.Существует() Тогда
        Если ВыбФайл.ЭтоКаталог() Тогда
            ИмяФайла="";
        КонецЕсли;
    КонецЕсли;
    
    Попытка
        Массив = ПользователиИнформационнойБазы.ПолучитьПользователей();
        Логин = "";
        Пароль = "";
        Если Массив.Количество() > 0 тогда
            Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
            Логин = Пользователь.Имя;
            Если Пользователь.ПарольУстановлен Тогда
                // на этом этапе нужно получить пароль, лучше  сделать это интерактивно
                 // но сейчас мне это совсем не нужно
                Предупреждение("У Вас установлен пароль, этот режим сейчас не доступен");
                Возврат Ложь;
            КонецЕсли 
        КонецЕсли;
        
        Результат = СохранитьТекущуюКонфигурацию(Логин, Пароль, ИмяФайла);
        Если не Результат Тогда
            Предупреждение("Конфигурация не сохранена");
        Иначе
            Сообщить("Конфигурация успешно сохранена в файл: " + ИмяФайла);
        КонецЕсли;
        
    Исключение
        Предупреждение("У Вас не достаточно прав для сохранения конфигурации");
        Возврат Ложь;
    КонецПопытки;
    
    Возврат Результат;
КонецФункции




В центре внимания

Комментарии (1)